<?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>62698</bug_id>
          <alias>BatteryStatusAPI</alias>
          <creation_ts>2011-06-14 23:34:55 -0700</creation_ts>
          <short_desc>Support for Battery Status API</short_desc>
          <delta_ts>2016-11-02 14:39:24 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.w3.org/TR/2011/WD-battery-status-20111129/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>63376</dependson>
    
    <dependson>79900</dependson>
          <blocked>78947</blocked>
    
    <blocked>84386</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Kihong Kwon">kihong.kwon</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ahf</cc>
    
    <cc>allan.jensen</cc>
    
    <cc>andersca</cc>
    
    <cc>anssi.kostiainen</cc>
    
    <cc>ap</cc>
    
    <cc>bugs</cc>
    
    <cc>cshu</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>dwim79</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>js45.yang</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>leandro</cc>
    
    <cc>michelangelo</cc>
    
    <cc>ojan</cc>
    
    <cc>rakuco</cc>
    
    <cc>ravi.kasibhatla</cc>
    
    <cc>rniwa</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sangseok.lim</cc>
    
    <cc>s.choi</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tkent</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>vimff0</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wonsuk11.lee</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>421056</commentid>
    <comment_count>0</comment_count>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2011-06-14 23:34:55 -0700</bug_when>
    <thetext>I would like to add battery status event to WebKit.
This property is a new feature that is defined by W3C and it indicates current battery status of device.

Firstable, I&apos;m going to add basic classes about this event.
(BatteryStatusEvent, BatteryStatusController, BatteryStatusClient)

After that I&apos;m going to add codes to the WebKitCore related this event.
Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421063</commentid>
    <comment_count>1</comment_count>
      <attachid>97242</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2011-06-14 23:51:17 -0700</bug_when>
    <thetext>Created attachment 97242
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421067</commentid>
    <comment_count>2</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-06-14 23:57:31 -0700</bug_when>
    <thetext>CC&apos;ing Eric, Darin and Andersca.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421069</commentid>
    <comment_count>3</comment_count>
      <attachid>97242</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-06-15 00:00:14 -0700</bug_when>
    <thetext>Comment on attachment 97242
Proposed patch

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

&gt; Source/WebCore/dom/BatteryStatusClient.h:20
&gt; + *

Remove blank line.

&gt; Source/WebCore/dom/BatteryStatusController.cpp:20
&gt; + *

ditto.

&gt; Source/WebCore/dom/BatteryStatusController.h:20
&gt; + *

ditto.

&gt; Source/WebCore/dom/BatteryStatusEvent.cpp:20
&gt; + *

ditto.

&gt; Source/WebCore/dom/BatteryStatusEvent.h:20
&gt; + *

ditto.

&gt; Source/WebCore/dom/BatteryStatusEvent.idl:20
&gt; + *

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421071</commentid>
    <comment_count>4</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-06-15 00:03:06 -0700</bug_when>
    <thetext>AFAIK, you should make test cases for new features. Do you prepare test cases for this feature ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421081</commentid>
    <comment_count>5</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-06-15 00:27:30 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=97242&amp;action=review

&gt; Source/WebCore/dom/BatteryStatusController.h:45
&gt; +//    bool isActive() { return !m_listeners.isEmpty(); }

Is it comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421105</commentid>
    <comment_count>6</comment_count>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2011-06-15 01:25:15 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; AFAIK, you should make test cases for new features. Do you prepare test cases for this feature ?

Sure, I&apos;m almost finished implementation this.
After finishing this, absolutely I&apos;ll make test cases for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421123</commentid>
    <comment_count>7</comment_count>
      <attachid>97255</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2011-06-15 01:43:19 -0700</bug_when>
    <thetext>Created attachment 97255
Delete blank line and comment line (Fix for comment #3, #5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421242</commentid>
    <comment_count>8</comment_count>
      <attachid>97255</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-15 07:07:15 -0700</bug_when>
    <thetext>Comment on attachment 97255
Delete blank line and comment line (Fix for comment #3, #5

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

It looks like you based this on the location services stuff.  I&apos;m not sure if that&apos;s the best model or not for this design.

We need tests for this.  Even if you use a Mock like Location services does.

&gt; Source/WebCore/ChangeLog:14
&gt; +        No new tests. (OOPS!)

This will prevent using the commit-queue.  Normally this line is replaced by a list of tests or reasons why testing is impossible/impractical.

&gt; Source/WebCore/dom/BatteryStatusClient.h:29
&gt; +class BatteryStatusClient {

Why should this be a WebKit client as opposed to a WebCore platform interface?  I&apos;m not sure that it matters, but I&apos;m curious why you made the choice to go up through the WebKit layer instead of down through WebCore platform.

&gt; Source/WebCore/dom/BatteryStatusEvent.cpp:29
&gt; +BatteryStatusEvent::BatteryStatusEvent()

Why do we need an event subclass for this event?  Does it carry any interesting payload?  Many other APIs just send a named event w/o any subclass.  Then clients know to go look at some property on the Window object when they get the event.

&gt; Source/WebCore/dom/BatteryStatusEvent.cpp:30
&gt; +    : Event(eventNames().batterystatusEvent, false, true)

These false/true are meaningless.  Not your fault, but Event should eventually be changed to take enums instead.

&gt; Source/WebCore/dom/BatteryStatusEvent.cpp:31
&gt; +    , m_isPlugged(false), m_level(0)

Normally we do these one per line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421809</commentid>
    <comment_count>9</comment_count>
      <attachid>97408</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2011-06-15 23:53:57 -0700</bug_when>
    <thetext>Created attachment 97408
Modify about comment #8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421820</commentid>
    <comment_count>10</comment_count>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2011-06-16 00:14:37 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 97255 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97255&amp;action=review
&gt; 
&gt; It looks like you based this on the location services stuff.  I&apos;m not sure if that&apos;s the best model or not for this design.
&gt; 
I referenced device orientation event for this.
Bacause they are almost same operation (transfer device info. to pages)
I&apos;m not sure this is a best choice also,
but I want to make a coherence of these kind of events)

&gt; We need tests for this.  Even if you use a Mock like Location services does.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +        No new tests. (OOPS!)
&gt; 
&gt; This will prevent using the commit-queue.  Normally this line is replaced by a list of tests or reasons why testing is impossible/impractical.
&gt; 
I&apos;ll add a testing source for this, and I fix a changlog also.

&gt; &gt; Source/WebCore/dom/BatteryStatusClient.h:29
&gt; &gt; +class BatteryStatusClient {
&gt; 
&gt; Why should this be a WebKit client as opposed to a WebCore platform interface?  I&apos;m not sure that it matters, but I&apos;m curious why you made the choice to go up through the WebKit layer instead of down through WebCore platform.
&gt; 
Client class is a interface for all platform port.
So I think this interface have to be out of platform.
(This can be made all platform port reference a client class)

&gt; &gt; Source/WebCore/dom/BatteryStatusEvent.cpp:29
&gt; &gt; +BatteryStatusEvent::BatteryStatusEvent()
&gt; 
&gt; Why do we need an event subclass for this event?  Does it carry any interesting payload?  Many other APIs just send a named event w/o any subclass.  Then clients know to go look at some property on the Window object when they get the event.
&gt; 
Battery Status Event have to send a battery status to webpages.
It have to have attributes for battery info. That&apos;s why I made this is a Event subclass.

&gt; &gt; Source/WebCore/dom/BatteryStatusEvent.cpp:30
&gt; &gt; +    : Event(eventNames().batterystatusEvent, false, true)
&gt; 
&gt; These false/true are meaningless.  Not your fault, but Event should eventually be changed to take enums instead.
&gt; 
OK. I&apos;will fix after enums are made.

&gt; &gt; Source/WebCore/dom/BatteryStatusEvent.cpp:31
&gt; &gt; +    , m_isPlugged(false), m_level(0)
&gt; 
&gt; Normally we do these one per line.

It&apos;s fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423092</commentid>
    <comment_count>11</comment_count>
    <who name="Olli Pettay (:smaug)">bugs</who>
    <bug_when>2011-06-18 02:27:13 -0700</bug_when>
    <thetext>Note, the patch doesn&apos;t match the current draft (missed the additions to window
and workers), and since the draft may still change (based on some comments in the mailing list), things should be webkit prefixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423470</commentid>
    <comment_count>12</comment_count>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2011-06-19 21:52:37 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Note, the patch doesn&apos;t match the current draft (missed the additions to window
&gt; and workers), and since the draft may still change (based on some comments in the mailing list), things should be webkit prefixed.

I&apos;m going to add window part patch very soon.
And could you explain what prefix mean?
I understand that is &quot;-webkit-&quot; prefix, but I&apos;m not sure because I haven&apos;t seen events have a prefix.
Did you mean prefix is like &quot;-webkit-onbatterystatus&quot; and  &quot;-webkit-batterystatus&quot;?

Thank you for your comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423579</commentid>
    <comment_count>13</comment_count>
    <who name="Olli Pettay (:smaug)">bugs</who>
    <bug_when>2011-06-20 03:10:47 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I understand that is &quot;-webkit-&quot; prefix, but I&apos;m not sure because I haven&apos;t seen events have a prefix.
&gt; Did you mean prefix is like &quot;-webkit-onbatterystatus&quot; and  &quot;-webkit-batterystatus&quot;?

Events do have prefixes.
http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#extending_events-prefixes

So, if you add support for onfoo listener, 
it would be, I think, onwebkitbatterystatus and the event type
would be webkitbatterystatus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424301</commentid>
    <comment_count>14</comment_count>
      <attachid>97937</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2011-06-20 23:52:04 -0700</bug_when>
    <thetext>Created attachment 97937
Add mock class and change event name to webkit&apos; prefix added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424302</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-20 23:53:29 -0700</bug_when>
    <thetext>Attachment 97937 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/mock/BatteryStatusClientMock.h:33:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/platform/mock/BatteryStatusClientMock.cpp:23:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Total errors found: 2 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424310</commentid>
    <comment_count>16</comment_count>
      <attachid>97938</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2011-06-21 00:01:01 -0700</bug_when>
    <thetext>Created attachment 97938
Add mock class for client and change event name to &apos;webkit&apos; prefix adding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428078</commentid>
    <comment_count>17</comment_count>
      <attachid>97938</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-06-27 10:38:50 -0700</bug_when>
    <thetext>Comment on attachment 97938
Add mock class for client and change event name to &apos;webkit&apos; prefix adding.

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

&gt; Source/WebCore/dom/BatteryStatusClient.h:34
&gt; +    virtual void setBatteryStatus(bool isPlugged, float level) = 0;

Prefer enums to booleans.

&gt; Source/WebCore/dom/BatteryStatusController.cpp:74
&gt; +    Vector&lt;RefPtr&lt;DOMWindow&gt; &gt; listenersVector;

Stray space after &lt;DOMWindow&gt;.

&gt; Source/WebCore/dom/BatteryStatusController.cpp:78
&gt; +    for (size_t i = 0; i &lt; listenersVector.size(); ++i)
&gt; +        listenersVector[i]-&gt;dispatchEvent(event);

You should use a better name than &apos;i&apos;.

&gt; Source/WebCore/dom/BatteryStatusController.h:43
&gt; +    void didChangeBatteryStatus(bool isPlugged, float level);

Prefer enums to booleans. Also, no parameter names on header files.

&gt; Source/WebCore/dom/BatteryStatusController.h:50
&gt; +    typedef HashCountedSet&lt;RefPtr&lt;DOMWindow&gt; &gt; ListenersCountedSet;

Stray space after &lt;DOMWindow&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428151</commentid>
    <comment_count>18</comment_count>
      <attachid>97938</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-27 11:43:59 -0700</bug_when>
    <thetext>Comment on attachment 97938
Add mock class for client and change event name to &apos;webkit&apos; prefix adding.

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

Every one of the review comments here is incorrect!

&gt;&gt; Source/WebCore/dom/BatteryStatusClient.h:34
&gt;&gt; +    virtual void setBatteryStatus(bool isPlugged, float level) = 0;
&gt; 
&gt; Prefer enums to booleans.

We only prefer enums if callers are likely to be passing constants.

&gt;&gt; Source/WebCore/dom/BatteryStatusController.cpp:74
&gt;&gt; +    Vector&lt;RefPtr&lt;DOMWindow&gt; &gt; listenersVector;
&gt; 
&gt; Stray space after &lt;DOMWindow&gt;.

That is a required space, not a stray space. Otherwise older C++ compilers get confused and think it’s the &gt;&gt; operation.

&gt;&gt; Source/WebCore/dom/BatteryStatusController.cpp:78
&gt;&gt; +        listenersVector[i]-&gt;dispatchEvent(event);
&gt; 
&gt; You should use a better name than &apos;i&apos;.

No, i is the standard name for a simple loop index in a case like this, and this is correct style for WebKit.

&gt;&gt; Source/WebCore/dom/BatteryStatusController.h:43
&gt;&gt; +    void didChangeBatteryStatus(bool isPlugged, float level);
&gt; 
&gt; Prefer enums to booleans. Also, no parameter names on header files.

That’s wrong. We do want parameter names on header files when the type alone does not make the parameter clear.

&gt;&gt; Source/WebCore/dom/BatteryStatusController.h:50
&gt;&gt; +    typedef HashCountedSet&lt;RefPtr&lt;DOMWindow&gt; &gt; ListenersCountedSet;
&gt; 
&gt; Stray space after &lt;DOMWindow&gt;.

Same as above. This is right, not wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428153</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-27 11:45:39 -0700</bug_when>
    <thetext>Leandro, are you a WebKit reviewer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428270</commentid>
    <comment_count>20</comment_count>
      <attachid>97938</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-06-27 14:06:06 -0700</bug_when>
    <thetext>Comment on attachment 97938
Add mock class for client and change event name to &apos;webkit&apos; prefix adding.

Per Darin&apos;s comments, I&apos;m resetting the flags to &apos;?&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428297</commentid>
    <comment_count>21</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-06-27 14:22:25 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Leandro, are you a WebKit reviewer?

I&apos;m not.  However, I&apos;m trying to help out and informally reviewing EFL-related patches; this one got in the mix because I happen to be watching people that often submit patches to that port.

I&apos;m setting r- as a suggestion from eseidel, so that these patches do not appear on http://webkit.org/pending-review and as a precaution so that reviewers unfamiliar with EFL don&apos;t review/rubber-stamp patches that might end up having to be rolled out.  For these reasons, from now on I&apos;ll only r- EFL-related patches.  I&apos;ve already reset the flags to &apos;?&apos;.

Regarding your comments, thanks -- I didn&apos;t know about old compilers getting confused with &lt;T1&lt;T2&gt;&gt;, the boolean/enum choice, and &apos;i&apos; being an OK identifier for simple loops.

I usually try to copy the style found on other files, but I&apos;ve seen some violations (specially on older code) in the past so I try to refer only to the guidelines.  Maybe I should file bugs to add notes about these on the coding style guidelines?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428311</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-27 14:31:41 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Regarding your comments, thanks -- I didn&apos;t know about old compilers getting confused with &lt;T1&lt;T2&gt;&gt;, the boolean/enum choice, and &apos;i&apos; being an OK identifier for simple loops.

Sure, would be good to have those in the style guidelines.

Except probably for the &lt;X, &lt;Y&gt;&gt; one, because that’s more of a C++ FAQ rather than something WebKit-specific. When I say “older compilers”, I think that means almost all compilers with only a few exceptions of quite-new ones. But we should keep an eye on which compilers we have to compile with. Would be nice to get rid of that once we require support only for the new ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428782</commentid>
    <comment_count>23</comment_count>
      <attachid>98894</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2011-06-28 03:37:35 -0700</bug_when>
    <thetext>Created attachment 98894
Add ClientMock class Method implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428785</commentid>
    <comment_count>24</comment_count>
      <attachid>98894</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-28 03:49:50 -0700</bug_when>
    <thetext>Comment on attachment 98894
Add ClientMock class Method implementation

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

Generally looks quite good, comments:

Where are you handling suspend/resume? When the document is suspended you dont want to keep listening/polling.

Also what if I have two batteries, ie a reserve one as well? How is that handled?

&gt; Source/WebCore/ChangeLog:8
&gt; +        Add New Classes to the WebCore for new Event(BatteryStatusEvnet)

&quot;new classes&quot;*

&gt; Source/WebCore/ChangeLog:9
&gt; +        - BatteryStatusClient is a interface class for each port.

&quot;an interface&quot;

&gt; Source/WebCore/ChangeLog:10
&gt; +        - BatteryStatusController is a control class between client and WebCore.

controller?

&gt; Source/WebCore/ChangeLog:11
&gt; +          this class has a event listeners for BatteryStatusEvent handling 

This* listener without s

&gt; Source/WebCore/ChangeLog:13
&gt; +        - BatteryStatusClientMock is a mock class for clinet port

client*

&gt; Source/WebCore/ChangeLog:16
&gt; +        Test cases will be added as soon as after the whole feature is implemented

Add dot at the end as we use proper sentenses

&gt; Source/WebCore/dom/BatteryStatusClient.h:32
&gt; +public:
&gt; +
&gt; +    virtual void setController(BatteryStatusController*) = 0;

I would remove that newline

&gt; Source/WebCore/dom/BatteryStatusClient.h:35
&gt; +    virtual void setBatteryStatus(bool isPlugged, float level) = 0;

Might this grow in the future? I was wondering if you should split it into two methods:

setBatteryLevel()
setIsCharging()

&gt; Source/WebCore/dom/BatteryStatusEvent.cpp:50
&gt; +    m_isPlugged = isPlugged;

Does this mean that it is charging as well?

&gt; Source/WebCore/platform/mock/BatteryStatusClientMock.cpp:54
&gt; +    if (m_level == level || m_isPlugged == isPlugged)

shouldnt that be an &amp;&amp; ?

&gt; Source/WebCore/platform/mock/BatteryStatusClientMock.h:52
&gt; +    float m_level;
&gt; +
&gt; +};

One newline too many there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428786</commentid>
    <comment_count>25</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-28 03:52:39 -0700</bug_when>
    <thetext>
&gt; &gt; Source/WebCore/dom/BatteryStatusClient.h:29
&gt; &gt; +class BatteryStatusClient {
&gt; 
&gt; Why should this be a WebKit client as opposed to a WebCore platform interface?  I&apos;m not sure that it matters, but I&apos;m curious why you made the choice to go up through the WebKit layer instead of down through WebCore platform.

For the other clients it is done to that it can be sandboxed. Not sure if that is important here. It also might make our WebKit2 code a bit more nicely separates as there are multiply ports of that &quot;port&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428811</commentid>
    <comment_count>26</comment_count>
      <attachid>98901</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2011-06-28 05:21:13 -0700</bug_when>
    <thetext>Created attachment 98901
Modify for comment #24</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428815</commentid>
    <comment_count>27</comment_count>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2011-06-28 05:30:02 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; &gt; &gt; Source/WebCore/dom/BatteryStatusClient.h:29
&gt; &gt; &gt; +class BatteryStatusClient {
&gt; &gt; 
&gt; &gt; Why should this be a WebKit client as opposed to a WebCore platform interface?  I&apos;m not sure that it matters, but I&apos;m curious why you made the choice to go up through the WebKit layer instead of down through WebCore platform.
&gt; 
&gt; For the other clients it is done to that it can be sandboxed. Not sure if that is important here. It also might make our WebKit2 code a bit more nicely separates as there are multiply ports of that &quot;port&quot;.

I almost fix according to your comment.

And, In my opinion, a client interface have to be referenced by all port.
So, core part is a right position for client interface to me.
Don&apos;t you think about that?

Thank you for your comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433279</commentid>
    <comment_count>28</comment_count>
      <attachid>99940</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2011-07-06 23:23:36 -0700</bug_when>
    <thetext>Created attachment 99940
Add events for the revised spec.

http://dev.w3.org/2009/dap/system-info/battery-status.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568572</commentid>
    <comment_count>29</comment_count>
      <attachid>129681</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-03-01 05:13:15 -0800</bug_when>
    <thetext>Created attachment 129681
Patch.

I have an issue about this patch.
Battery Status API has to be added under the Navigator class, but there is no event handling logic in the navigator.
So I implemented event listener handling logic to the BatteryManager, because I didn&apos;t have other choice,
but I think this is not good to add event listener to the Battery Status API.
I think navigator needs event listener handling logic like a DOMWindow.
Leave some comments about this please.
Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568618</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 06:19:21 -0800</bug_when>
    <thetext>Attachment 129681 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/fast/dom/BatteryStatus/add-lis...&quot; exit_code: 1
Source/WebCore/Modules/battery/BatteryController.cpp:89:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/battery/BatteryController.cpp:89:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/Modules/battery/BatteryController.h:46:  The parameter name &quot;batteryStatus&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/efl/WebCoreSupport/BatteryClientEfl.h:52:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit/efl/WebCoreSupport/BatteryClientEfl.h:53:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit/efl/WebCoreSupport/BatteryClientEfl.cpp:21:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Total errors found: 6 in 55 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568622</commentid>
    <comment_count>31</comment_count>
      <attachid>129681</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-01 06:26:16 -0800</bug_when>
    <thetext>Comment on attachment 129681
Patch.

Attachment 129681 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11766467</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568628</commentid>
    <comment_count>32</comment_count>
    <who name="Michelangelo De Simone">michelangelo</who>
    <bug_when>2012-03-01 06:34:59 -0800</bug_when>
    <thetext>I doubt you want to disable SVG support  for this feature.;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568633</commentid>
    <comment_count>33</comment_count>
      <attachid>129681</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 06:56:19 -0800</bug_when>
    <thetext>Comment on attachment 129681
Patch.

Attachment 129681 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11751432

New failing tests:
fast/dom/BatteryStatus/updates.html
fast/dom/BatteryStatus/multiple-frames.html
fast/dom/BatteryStatus/add-listener-from-callback.html
fast/dom/BatteryStatus/no-page-cache.html
fast/dom/BatteryStatus/event-after-navigation.html
fast/dom/BatteryStatus/window-property.html
fast/dom/BatteryStatus/basic-operation.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568692</commentid>
    <comment_count>34</comment_count>
      <attachid>129681</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-01 08:49:57 -0800</bug_when>
    <thetext>Comment on attachment 129681
Patch.

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

&gt; Tools/Scripts/build-webkit:320
&gt; -      define =&gt; &quot;ENABLE_SVG&quot;, default =&gt; 1, value =&gt; \$svgSupport },
&gt; +      define =&gt; &quot;ENABLE_SVG&quot;, default =&gt; 0, value =&gt; \$svgSupport },

You should not change these defaults, specially not in an unrelated patch.

&gt; Tools/Scripts/build-webkit:326
&gt; -      define =&gt; &quot;ENABLE_SVG_FONTS&quot;, default =&gt; 1, value =&gt; \$svgFontsSupport },
&gt; +      define =&gt; &quot;ENABLE_SVG_FONTS&quot;, default =&gt; 0, value =&gt; \$svgFontsSupport },

Ditto.

&gt; Tools/Scripts/build-webkit:344
&gt; -      define =&gt; &quot;ENABLE_VIDEO_TRACK&quot;, default =&gt; (isAppleWebKit() || isGtk()), value =&gt; \$videoTrackSupport },
&gt; +      define =&gt; &quot;ENABLE_VIDEO_TRACK&quot;, default =&gt; (isAppleWebKit() || isGtk() || isEfl()), value =&gt; \$videoTrackSupport },

Unrelated, better have it in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568694</commentid>
    <comment_count>35</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-01 08:52:25 -0800</bug_when>
    <thetext>FWIW, the changes in the svg defaults is breaking the EWS =(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569228</commentid>
    <comment_count>36</comment_count>
      <attachid>129806</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-03-01 21:37:21 -0800</bug_when>
    <thetext>Created attachment 129806
Patch.

I updated the test patch yesterday - sorry about the delay in doing so.
I would need your comments for the issue mentioned below.

Battery Status API needs to be added under the Navigator class, but there is not any event handling logic there. Therefore, because I have no other choice, I have implemented the necessary event handling logic in the BatteryManager. I, however, think it may not look good to add the event listener in the Batter Status API itself.

IMHO, the Navigator class would need some sort of event listener handling logic similar to DOMWindow. I would like to have your comments how you think this.

Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569241</commentid>
    <comment_count>37</comment_count>
      <attachid>129806</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-01 22:04:05 -0800</bug_when>
    <thetext>Comment on attachment 129806
Patch.

Attachment 129806 did not pass win-ews (win):
Output: http://queues.webkit.org/results/11751757</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569262</commentid>
    <comment_count>38</comment_count>
      <attachid>129806</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-01 22:18:19 -0800</bug_when>
    <thetext>Comment on attachment 129806
Patch.

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

&gt; Source/WebCore/Modules/battery/BatteryStatus.cpp:38
&gt; +

Unneeded line.

&gt; Source/WebCore/dom/Document.cpp:1960
&gt; +        return;

Need to add an empty line.

&gt; Source/WebCore/dom/EventNames.h:61
&gt; +    macro(dischargingtimechange) \

Alphabetical sorting nit.

&gt; Source/WebKit/efl/ewk/ewk_view.cpp:780
&gt; +    smartData-&gt;_priv = _ewk_view_priv_new(smartData);

Why do you change location of private data creation ?

&gt; Source/WebKit/efl/ewk/ewk_view.h:125
&gt; +    Eina_Bool useMock;

We are using efl coding style in public header.

&gt; Source/WebKit/efl/ewk/ewk_view.h:2368
&gt; +EAPI void ewk_view_dump_render_tree_mode_enable(Evas_Object* ewkView, Eina_Bool flag);

variable name is wrong. Please read WebKit EFL coding style first.
http://trac.webkit.org/wiki/EFLWebKitCodingStyle</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569264</commentid>
    <comment_count>39</comment_count>
      <attachid>129806</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-01 22:19:48 -0800</bug_when>
    <thetext>Comment on attachment 129806
Patch.

There was conflict when I post my comment. Win port buildbot rejected this patch. So, I reject this patch again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569285</commentid>
    <comment_count>40</comment_count>
      <attachid>129806</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-01 22:34:54 -0800</bug_when>
    <thetext>Comment on attachment 129806
Patch.

Attachment 129806 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11776814</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569316</commentid>
    <comment_count>41</comment_count>
      <attachid>129806</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-03-01 23:20:54 -0800</bug_when>
    <thetext>Comment on attachment 129806
Patch.

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

Thank you for your kind review.

&gt;&gt; Source/WebCore/Modules/battery/BatteryStatus.cpp:38
&gt;&gt; +
&gt; 
&gt; Unneeded line.

OK.

&gt;&gt; Source/WebCore/dom/Document.cpp:1960
&gt;&gt; +        return;
&gt; 
&gt; Need to add an empty line.

You are right.

&gt;&gt; Source/WebCore/dom/EventNames.h:61
&gt;&gt; +    macro(dischargingtimechange) \
&gt; 
&gt; Alphabetical sorting nit.

OK.

&gt;&gt; Source/WebKit/efl/ewk/ewk_view.cpp:780
&gt;&gt; +    smartData-&gt;_priv = _ewk_view_priv_new(smartData);
&gt; 
&gt; Why do you change location of private data creation ?

The smartData-&gt;api have to set before calling _ewk_view_priv_new().
Because use_mock which is in the api is used in the _ewk_view_priv_new(),

&gt;&gt; Source/WebKit/efl/ewk/ewk_view.h:125
&gt;&gt; +    Eina_Bool useMock;
&gt; 
&gt; We are using efl coding style in public header.

OK. I will be fix.

&gt;&gt; Source/WebKit/efl/ewk/ewk_view.h:2368
&gt;&gt; +EAPI void ewk_view_dump_render_tree_mode_enable(Evas_Object* ewkView, Eina_Bool flag);
&gt; 
&gt; variable name is wrong. Please read WebKit EFL coding style first.
&gt; http://trac.webkit.org/wiki/EFLWebKitCodingStyle

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569374</commentid>
    <comment_count>42</comment_count>
      <attachid>129837</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-03-02 00:24:46 -0800</bug_when>
    <thetext>Created attachment 129837
Patch.

I would need your comments for the issue mentioned below.

Battery Status API needs to be added under the Navigator class, but there is not any event handling logic there.
Therefore, because I have no other choice, I have implemented the necessary event handling logic in the BatteryManager.
I, however, think it may not look good to add the event listener in the Batter Status API itself.

IMHO, the Navigator class would need some sort of event listener handling logic similar to DOMWindow.
I would like to have your comments how you think this.

Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570469</commentid>
    <comment_count>43</comment_count>
      <attachid>129837</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-05 00:39:18 -0800</bug_when>
    <thetext>Comment on attachment 129837
Patch.

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

&gt; Source/WebCore/dom/Document.cpp:1964
&gt; +#if ENABLE(BATTERY_STATUS)
&gt; +    if (!page())
&gt; +        return;
&gt; +
&gt; +    if (BatteryController* batteryController = BatteryController::from(page()))
&gt; +        batteryController-&gt;removeAllListeners();
&gt; +#endif

This change shouldn&apos;t be needed.  We should find a way for BatteryController to observe this condition and do this work itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572667</commentid>
    <comment_count>44</comment_count>
      <attachid>130562</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-03-07 00:56:06 -0800</bug_when>
    <thetext>Created attachment 130562
Modified the patch according to comment #43.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572684</commentid>
    <comment_count>45</comment_count>
      <attachid>130562</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-03-07 01:23:40 -0800</bug_when>
    <thetext>Comment on attachment 130562
Modified the patch according to comment #43.

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

&gt; LayoutTests/fast/dom/BatteryStatus/no-page-cache-expected.txt:1
&gt; +Tests that pages that use BatteryStatus are not put in the page cache.

Really? That is pretty sad. Why not do the extra work to make it possible to have them in the cache. If any spec changes are needed for that (shouldn&apos;t be needed), I have contacts

&gt; Source/WebCore/ChangeLog:6
&gt; +        This API is implemented under the Navigator class.

If so, it would be really good if you made sure this works properly when suspending and resuming, like there is no reason to send updates if all browser windows subscribed are in the background, nor if the document is suspended for panning/scaling or any other kind of animation.

&gt; Source/WebCore/ChangeLog:11
&gt; +        There are four types of events: onchargingchange, onchargingtimechange, ondischargingtimechange, onlevelchange.
&gt; +        All events are operated based on a callback mechanism.
&gt; +        When battery event has raised, the event listener watching battery status has to be called.
&gt; +        The battery status can be accessed using BatteryManager(navigator.webkitBattery).
&gt; +        http://www.w3.org/TR/battery-status/

This changelog could be formatted a bit better to make it more readable

&gt; Source/WebCore/Modules/battery/BatteryController.cpp:41
&gt; +    for (size_t i = 0; i &lt; m_listeners.size(); ++i)
&gt; +        m_listeners[i]-&gt;batteryControllerDestroyed();

Why not use iterators?

&gt; Source/WebKit/efl/ChangeLog:6
&gt; +        Add BatteryClientEfl and DumpRenerTreeSupportEfl class implementation for the layout tests.

Spelling issue with Render*

&gt; Tools/ChangeLog:6
&gt; +        Add setMockBatteryStatus API to layoutTestController for testing the Battery Status API.

Why is this not in the internals object instead? This is not something anyone would implement with a public API anyway. And there is talk about moving more things to the internals object. Maybe you could talk to rniwa</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572766</commentid>
    <comment_count>46</comment_count>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-03-07 03:53:50 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; (From update of attachment 130562 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130562&amp;action=review
&gt; 
&gt; &gt; LayoutTests/fast/dom/BatteryStatus/no-page-cache-expected.txt:1
&gt; &gt; +Tests that pages that use BatteryStatus are not put in the page cache.
&gt; 
&gt; Really? That is pretty sad. Why not do the extra work to make it possible to have them in the cache. If any spec changes are needed for that (shouldn&apos;t be needed), I have contacts

I&apos;m sorry about this is not proper test for the Battery Status API
There is no issue between page-cache and battery status API.
But I think if the Battery Status API inherit ActiveDOMObject for suspend and resume, page cache will be working well.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:6
&gt; &gt; +        This API is implemented under the Navigator class.
&gt; 
&gt; If so, it would be really good if you made sure this works properly when suspending and resuming, like there is no reason to send updates if all browser windows subscribed are in the background, nor if the document is suspended for panning/scaling or any other kind of animation.

ditto.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        There are four types of events: onchargingchange, onchargingtimechange, ondischargingtimechange, onlevelchange.
&gt; &gt; +        All events are operated based on a callback mechanism.
&gt; &gt; +        When battery event has raised, the event listener watching battery status has to be called.
&gt; &gt; +        The battery status can be accessed using BatteryManager(navigator.webkitBattery).
&gt; &gt; +        http://www.w3.org/TR/battery-status/
&gt; 
&gt; This changelog could be formatted a bit better to make it more readable
&gt; 
OK. I will do this.

&gt; &gt; Source/WebCore/Modules/battery/BatteryController.cpp:41
&gt; &gt; +    for (size_t i = 0; i &lt; m_listeners.size(); ++i)
&gt; &gt; +        m_listeners[i]-&gt;batteryControllerDestroyed();
&gt; 
&gt; Why not use iterators?
I will change this.

&gt; 
&gt; &gt; Source/WebKit/efl/ChangeLog:6
&gt; &gt; +        Add BatteryClientEfl and DumpRenerTreeSupportEfl class implementation for the layout tests.
&gt; 
&gt; Spelling issue with Render*
&gt; 
OK, It will be fixed.

&gt; &gt; Tools/ChangeLog:6
&gt; &gt; +        Add setMockBatteryStatus API to layoutTestController for testing the Battery Status API.
&gt; 
&gt; Why is this not in the internals object instead? This is not something anyone would implement with a public API anyway. And there is talk about moving more things to the internals object. Maybe you could talk to rniwa

OK, I will try to talk to rniwa about this.

Thanks a lot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579278</commentid>
    <comment_count>47</comment_count>
      <attachid>132019</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-03-15 04:41:07 -0700</bug_when>
    <thetext>Created attachment 132019
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579526</commentid>
    <comment_count>48</comment_count>
      <attachid>132019</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 11:02:29 -0700</bug_when>
    <thetext>Comment on attachment 132019
Patch.

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

&gt; Source/WebCore/dom/Document.cpp:213
&gt; +#if ENABLE(BATTERY_STATUS)
&gt; +#include &quot;BatteryController.h&quot;
&gt; +#include &quot;NavigatorBattery.h&quot;
&gt; +#endif

Why are these headers needed if there are no other changes to Document?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579972</commentid>
    <comment_count>49</comment_count>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-03-15 17:57:06 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (From update of attachment 132019 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132019&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:213
&gt; &gt; +#if ENABLE(BATTERY_STATUS)
&gt; &gt; +#include &quot;BatteryController.h&quot;
&gt; &gt; +#include &quot;NavigatorBattery.h&quot;
&gt; &gt; +#endif
&gt; 
&gt; Why are these headers needed if there are no other changes to Document?

This is my mistake.
I will fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579988</commentid>
    <comment_count>50</comment_count>
      <attachid>132019</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 18:12:31 -0700</bug_when>
    <thetext>Comment on attachment 132019
Patch.

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

This looks good.  I&apos;ve got a couple nits below, but once those are addressed we can land this patch.  Thanks!

&gt; LayoutTests/ChangeLog:11
&gt; +        * fast/dom/BatteryStatus/add-listener-from-callback-expected.txt: Added.

I might have added these tests to a top-level directory in LayoutTests called battery-status, but the location of the tests aren&apos;t super important.

&gt; Source/WebCore/Modules/battery/BatteryController.cpp:60
&gt; +    if (pos == WTF::notFound)
&gt; +        return;

Should it be an error to remove a listener that not in m_listeners?

&gt; Source/WebCore/Modules/battery/BatteryController.h:49
&gt; +    BatteryController(BatteryClient*);

Please add the explicit keyword to single-argument constructors.

&gt; Source/WebCore/Modules/battery/BatteryController.h:52
&gt; +    typedef Vector&lt;BatteryManager*&gt; ListenerVector;

Normally we&apos;d put this declaration right below &quot;private:&quot; with a blank line between it and the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580035</commentid>
    <comment_count>51</comment_count>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-03-15 19:14:21 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; (From update of attachment 132019 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132019&amp;action=review
&gt; 
&gt; This looks good.  I&apos;ve got a couple nits below, but once those are addressed we can land this patch.  Thanks!
&gt; 
Thank you for your review comments. After updating my patch, I will address this patch at webkit-dev mailing list.

&gt; &gt; LayoutTests/ChangeLog:11
&gt; &gt; +        * fast/dom/BatteryStatus/add-listener-from-callback-expected.txt: Added.
&gt; 
&gt; I might have added these tests to a top-level directory in LayoutTests called battery-status, but the location of the tests aren&apos;t super important.
&gt; 

OK, I will move location to top-level directory.

&gt; &gt; Source/WebCore/Modules/battery/BatteryController.cpp:60
&gt; &gt; +    if (pos == WTF::notFound)
&gt; &gt; +        return;
&gt; 
&gt; Should it be an error to remove a listener that not in m_listeners?
&gt; 

I think there is no check for WTF::notFound in the Vector::remove but I will make sure about this by re-checking, after that if I can remove this without any error, I will remove it.

&gt; &gt; Source/WebCore/Modules/battery/BatteryController.h:49
&gt; &gt; +    BatteryController(BatteryClient*);
&gt; 
&gt; Please add the explicit keyword to single-argument constructors.
&gt; 

OK, I will add it.

&gt; &gt; Source/WebCore/Modules/battery/BatteryController.h:52
&gt; &gt; +    typedef Vector&lt;BatteryManager*&gt; ListenerVector;
&gt; 
&gt; Normally we&apos;d put this declaration right below &quot;private:&quot; with a blank line between it and the constructor.

OK. I will change position of typedef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580117</commentid>
    <comment_count>52</comment_count>
      <attachid>132193</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-03-15 21:38:21 -0700</bug_when>
    <thetext>Created attachment 132193
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580163</commentid>
    <comment_count>53</comment_count>
      <attachid>132203</attachid>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-03-15 23:03:57 -0700</bug_when>
    <thetext>Created attachment 132203
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580406</commentid>
    <comment_count>54</comment_count>
      <attachid>132203</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 05:23:27 -0700</bug_when>
    <thetext>Comment on attachment 132203
Patch for landing.

Clearing flags on attachment: 132203

Committed r110991: &lt;http://trac.webkit.org/changeset/110991&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580408</commentid>
    <comment_count>55</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 05:23:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585480</commentid>
    <comment_count>56</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-03-22 11:00:02 -0700</bug_when>
    <thetext>This patch seems to make the EFL port crash in fast/dom/navigator-detached-nocrash.html -- see bug 81773. BatteryManager::BatteryManager is always considering Navigator::frame() returns non-NULL.

It&apos;d be good to have some response from Kihong, otherwise I&apos;m tempted to roll it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585528</commentid>
    <comment_count>57</comment_count>
      <attachid>132203</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-22 11:38:49 -0700</bug_when>
    <thetext>Comment on attachment 132203
Patch for landing.

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

&gt; Source/WebCore/Modules/battery/NavigatorBattery.cpp:41
&gt; +{

I think you just need to add a null check for navigator-&gt;frame() here and return 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585744</commentid>
    <comment_count>58</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-03-22 15:04:07 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; (From update of attachment 132203 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132203&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/battery/NavigatorBattery.cpp:41
&gt; &gt; +{
&gt; 
&gt; I think you just need to add a null check for navigator-&gt;frame() here and return 0.

That works fine indeed, thanks. Fix landed in &lt;http://trac.webkit.org/changeset/111770&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585959</commentid>
    <comment_count>59</comment_count>
    <who name="Kihong Kwon">kihong.kwon</who>
    <bug_when>2012-03-22 18:42:07 -0700</bug_when>
    <thetext>Thanks for reporting the problem and the patch for it Kubo and Adam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247491</commentid>
    <comment_count>60</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-11-02 14:39:24 -0700</bug_when>
    <thetext>This was removed in https://trac.webkit.org/changeset/208300</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97242</attachid>
            <date>2011-06-14 23:51:17 -0700</date>
            <delta_ts>2011-06-15 01:43:19 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch_battery.patch</filename>
            <type>text/plain</type>
            <size>13766</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNDRlZGQxLi5lYmU4ZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTEtMDYtMTQgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0RPTV0gU3Vw
cG9ydCBmb3IgYmF0dGVyeSBzdGF0dXMgZXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgQWRkIE5ldyBDbGFzc2VzIHRv
IHRoZSBXZWJDb3JlIGZvciBuZXcgRXZlbnQoQmF0dGVyeVN0YXR1c0V2bmV0KQorICAgICAgICAt
IEJhdHRlcnlTdGF0dXNDbGllbnQgaXMgYSBpbnRlcmZhY2UgY2xhc3MgZm9yIGVhY2ggcG9ydC4K
KyAgICAgICAgLSBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlciBpcyBhIGNvbnRyb2wgY2xhc3MgYmV0
d2VlbiBjbGllbnQgYW5kIFdlYkNvcmUuCisgICAgICAgICAgdGhpcyBjbGFzcyBoYXMgYSBldmVu
dCBsaXN0ZW5lcnMgZm9yIEJhdHRlcnlTdGF0dXNFdmVudCBoYW5kbGluZyAKKyAgICAgICAgLSBC
YXR0ZXJ5U3RhdHVzRXZlbnQgaXMgYSBjbGFzcyBmb3IgaGFuZGxpbmcgZXZlbnQKKworICAgICAg
ICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGRvbS9CYXR0ZXJ5U3RhdHVzQ2xp
ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OkJhdHRl
cnlTdGF0dXNDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDb250
cm9sbGVyOjp+QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0
dGVyeVN0YXR1c0NvbnRyb2xsZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
dHRlcnlTdGF0dXNDb250cm9sbGVyOjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6cmVtb3ZlQWxsTGlzdGVuZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjpkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVz
KToKKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAg
ICAgICogZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QmF0dGVyeVN0YXR1c0V2ZW50OjpCYXR0ZXJ5U3RhdHVzRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QmF0dGVyeVN0YXR1c0V2ZW50Ojppbml0QmF0dGVyeVN0YXR1c0V2ZW50KToKKyAgICAg
ICAgKiBkb20vQmF0dGVyeVN0YXR1c0V2ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
QmF0dGVyeVN0YXR1c0V2ZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0
YXR1c0V2ZW50Ojppc0JhdHRlcnlTdGF0dXNFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0
ZXJ5U3RhdHVzRXZlbnQ6OmlzUGx1Z2dlZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3Rh
dHVzRXZlbnQ6OmxldmVsKToKKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0V2ZW50LmlkbDog
QWRkZWQuCisKIDIwMTEtMDYtMDkgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9CYXR0ZXJ5U3RhdHVzQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZmFjZDlhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5
U3RhdHVzQ2xpZW50LmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2lmbmRlZiBCYXR0ZXJ5U3RhdHVzQ2xpZW50X2gKKyNkZWZpbmUgQmF0dGVyeVN0YXR1c0Ns
aWVudF9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeVN0YXR1c0NvbnRy
b2xsZXI7CisKK2NsYXNzIEJhdHRlcnlTdGF0dXNDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250cm9sbGVyKEJhdHRlcnlTdGF0dXNDb250cm9sbGVyKikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9w
VXBkYXRpbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEJhdHRlcnlTdGF0dXMoYm9vbCBp
c1BsdWdnZWQsIGZsb2F0IGxldmVsKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJhdHRlcnlTdGF0
dXNDb250cm9sbGVyRGVzdHJveWVkKCkgPSAwOworCitwcml2YXRlOgorICAgIEJhdHRlcnlTdGF0
dXNDb250cm9sbGVyKiBtX2NvbnRyb2xsZXI7CisgICAgYm9vbCBtX2lzUGx1Z2dlZDsKKyAgICBm
bG9hdCBtX2xldmVsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
QmF0dGVyeVN0YXR1c0NsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0
dGVyeVN0YXR1c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0
dXNDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmQ2
NDIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXND
b250cm9sbGVyLmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIu
aCIKKworI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXNDbGllbnQuaCIKKyNpbmNsdWRlICJCYXR0ZXJ5
U3RhdHVzRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCYXR0ZXJ5U3RhdHVzQ29u
dHJvbGxlcjo6QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIoQmF0dGVyeVN0YXR1c0NsaWVudCogY2xp
ZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworICAgIG1fY2xpZW50LT5zZXRDb250cm9s
bGVyKHRoaXMpOworfQorCitCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6fkJhdHRlcnlTdGF0dXND
b250cm9sbGVyKCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5iYXR0
ZXJ5U3RhdHVzQ29udHJvbGxlckRlc3Ryb3llZCgpOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXND
b250cm9sbGVyOjphZGRMaXN0ZW5lcihET01XaW5kb3cqIHdpbmRvdykKK3sKKyAgICBib29sIHdh
c0VtcHR5ID0gbV9saXN0ZW5lcnMuaXNFbXB0eSgpOworCisgICAgbV9saXN0ZW5lcnMuYWRkKHdp
bmRvdyk7CisKKyAgICBpZiAod2FzRW1wdHkpCisgICAgICAgIG1fY2xpZW50LT5zdGFydFVwZGF0
aW5nKCk7Cit9CisKK3ZvaWQgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OnJlbW92ZUxpc3RlbmVy
KERPTVdpbmRvdyogd2luZG93KQoreworICAgIG1fbGlzdGVuZXJzLnJlbW92ZSh3aW5kb3cpOwor
CisgICAgaWYgKG1fbGlzdGVuZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jbGllbnQtPnN0b3BV
cGRhdGluZygpOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjpyZW1vdmVBbGxM
aXN0ZW5lcnMoRE9NV2luZG93KiB3aW5kb3cpCit7CisgICAgaWYgKCFtX2xpc3RlbmVycy5jb250
YWlucyh3aW5kb3cpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xpc3RlbmVycy5yZW1vdmVB
bGwod2luZG93KTsKKworICAgIGlmIChtX2xpc3RlbmVycy5pc0VtcHR5KCkpCisgICAgICAgIG1f
Y2xpZW50LT5zdG9wVXBkYXRpbmcoKTsKK30KKwordm9pZCBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxl
cjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpCit7
CisgICAgUmVmUHRyPEJhdHRlcnlTdGF0dXNFdmVudD4gZXZlbnQgPSBCYXR0ZXJ5U3RhdHVzRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYmF0dGVyeXN0YXR1c0V2ZW50LCBpc1BsdWdnZWQsIGxl
dmVsKTsKKyAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4gPiBsaXN0ZW5lcnNWZWN0b3I7CisK
KyAgICBjb3B5VG9WZWN0b3IobV9saXN0ZW5lcnMsIGxpc3RlbmVyc1ZlY3Rvcik7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnNWZWN0b3Iuc2l6ZSgpOyArK2kpCisgICAgICAg
IGxpc3RlbmVyc1ZlY3RvcltpXS0+ZGlzcGF0Y2hFdmVudChldmVudCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3Rh
dHVzQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNDb250cm9s
bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzOTQ3NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlci5o
CkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVj
dHJvbmljcyBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisgCisjaWZuZGVmIEJh
dHRlcnlTdGF0dXNDb250cm9sbGVyX2gKKyNkZWZpbmUgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJf
aAorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBC
YXR0ZXJ5U3RhdHVzQ2xpZW50OworY2xhc3MgUGFnZTsKKworY2xhc3MgQmF0dGVyeVN0YXR1c0Nv
bnRyb2xsZXIgeworcHVibGljOgorICAgIEJhdHRlcnlTdGF0dXNDb250cm9sbGVyKEJhdHRlcnlT
dGF0dXNDbGllbnQqKTsKKyAgICB+QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIoKTsKKworICAgIHZv
aWQgYWRkTGlzdGVuZXIoRE9NV2luZG93Kik7CisgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihET01X
aW5kb3cqKTsKKyAgICB2b2lkIHJlbW92ZUFsbExpc3RlbmVycyhET01XaW5kb3cqKTsKKworICAg
IHZvaWQgZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwp
OworLy8gICAgYm9vbCBpc0FjdGl2ZSgpIHsgcmV0dXJuICFtX2xpc3RlbmVycy5pc0VtcHR5KCk7
IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1faXNQbHVnZ2VkOworICAgIGZsb2F0IG1fbGV2ZWw7
CisKKyAgICBCYXR0ZXJ5U3RhdHVzQ2xpZW50KiBtX2NsaWVudDsKKyAgICB0eXBlZGVmIEhhc2hD
b3VudGVkU2V0PFJlZlB0cjxET01XaW5kb3c+ID4gTGlzdGVuZXJzQ291bnRlZFNldDsKKyAgICBM
aXN0ZW5lcnNDb3VudGVkU2V0IG1fbGlzdGVuZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lNzE3ZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Jh
dHRlcnlTdGF0dXNFdmVudC5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXNFdmVu
dC5oIgorCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0JhdHRlcnlTdGF0dXNFdmVudDo6QmF0dGVyeVN0YXR1c0V2ZW50KCkKKyAgICA6IEV2ZW50KGV2
ZW50TmFtZXMoKS5iYXR0ZXJ5c3RhdHVzRXZlbnQsIGZhbHNlLCB0cnVlKQorICAgICwgbV9pc1Bs
dWdnZWQoZmFsc2UpLCBtX2xldmVsKDApCit7Cit9CisKK0JhdHRlcnlTdGF0dXNFdmVudDo6QmF0
dGVyeVN0YXR1c0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBib29sIGlzUGx1
Z2dlZCwgZmxvYXQgbGV2ZWwpCisgICAgOiBFdmVudChldmVudFR5cGUsIGZhbHNlLCBmYWxzZSkK
KyAgICAsIG1faXNQbHVnZ2VkKGlzUGx1Z2dlZCksIG1fbGV2ZWwobGV2ZWwpCit7Cit9CisKK3Zv
aWQgQmF0dGVyeVN0YXR1c0V2ZW50Ojppbml0QmF0dGVyeVN0YXR1c0V2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgdHlwZSwgYm9vbCBidWJibGVzLCBib29sIGNhbmNlbGFibGUsIGJvb2wgaXNQbHVn
Z2VkLCBmbG9hdCBsZXZlbCkKK3sKKyAgICBpZiAoZGlzcGF0Y2hlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbml0RXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSk7CisKKyAgICBt
X2lzUGx1Z2dlZCA9IGlzUGx1Z2dlZDsKKyAgICBtX2xldmVsID0gbGV2ZWw7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0
ZXJ5U3RhdHVzRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzgzMGQ4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5oCkBAIC0wLDAg
KzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBJ
bmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgQmF0dGVyeVN0YXR1
c0V2ZW50X2gKKyNkZWZpbmUgQmF0dGVyeVN0YXR1c0V2ZW50X2gKKworI2luY2x1ZGUgIkV2ZW50
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQmF0dGVyeVN0YXR1c0V2ZW50IDogcHVibGljIEV2ZW50IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzRXZlbnQ+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJhdHRlcnlTdGF0dXNFdmVudCk7Cisg
ICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1c0V2ZW50PiBjcmVhdGUo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZl
bCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmF0dGVyeVN0YXR1c0V2ZW50
KGV2ZW50VHlwZSwgaXNQbHVnZ2VkLCBsZXZlbCkpOworICAgIH0KKworICAgIHZvaWQgaW5pdEJh
dHRlcnlTdGF0dXNFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgYnViYmxlcywg
Ym9vbCBjYW5jZWxhYmxlLCBib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpOworICAgIHZpcnR1
YWwgYm9vbCBpc0JhdHRlcnlTdGF0dXNFdmVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIGJvb2wgaXNQbHVnZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc1BsdWdnZWQ7IH0KKyAgICBm
bG9hdCBsZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGV2ZWw7IH0KKworcHJpdmF0ZToKKyAgICBC
YXR0ZXJ5U3RhdHVzRXZlbnQoKTsKKyAgICBCYXR0ZXJ5U3RhdHVzRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIGJvb2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCk7CisKKyAgICBi
b29sIG1faXNQbHVnZ2VkOworICAgIGZsb2F0IG1fbGV2ZWw7CisKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJhdHRlcnlTdGF0dXNFdmVudF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmM5MjVjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
QmF0dGVyeVN0YXR1c0V2ZW50LmlkbApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCittb2R1bGUgY29yZSB7CisKKyAgICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZl
bCAzOgorICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUJBVFRFUllfU1RBVFVT
CisgICAgXSBCYXR0ZXJ5U3RhdHVzRXZlbnQgOiBFdmVudCB7CisgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBib29sZWFuICBpc1BsdWdnZWQ7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBm
bG9hdCAgICBsZXZlbDsKKyAgICAgICAgdm9pZCBpbml0QmF0dGVyeVN0YXR1c0V2ZW50KGluIERP
TVN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9v
bGVhbiBidWJibGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9v
bGVhbiBjYW5jZWxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g
Ym9vbGVhbiBpc1BsdWdnZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBmbG9hdCBsZXZlbCk7CisgICAgfTsKKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97255</attachid>
            <date>2011-06-15 01:43:19 -0700</date>
            <delta_ts>2011-06-15 23:53:57 -0700</delta_ts>
            <desc>Delete blank line and comment line (Fix for comment #3, #5</desc>
            <filename>patch_battery.patch</filename>
            <type>text/plain</type>
            <size>13684</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNDRlZGQxLi5lYmU4ZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTEtMDYtMTQgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0RPTV0gU3Vw
cG9ydCBmb3IgYmF0dGVyeSBzdGF0dXMgZXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgQWRkIE5ldyBDbGFzc2VzIHRv
IHRoZSBXZWJDb3JlIGZvciBuZXcgRXZlbnQoQmF0dGVyeVN0YXR1c0V2bmV0KQorICAgICAgICAt
IEJhdHRlcnlTdGF0dXNDbGllbnQgaXMgYSBpbnRlcmZhY2UgY2xhc3MgZm9yIGVhY2ggcG9ydC4K
KyAgICAgICAgLSBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlciBpcyBhIGNvbnRyb2wgY2xhc3MgYmV0
d2VlbiBjbGllbnQgYW5kIFdlYkNvcmUuCisgICAgICAgICAgdGhpcyBjbGFzcyBoYXMgYSBldmVu
dCBsaXN0ZW5lcnMgZm9yIEJhdHRlcnlTdGF0dXNFdmVudCBoYW5kbGluZyAKKyAgICAgICAgLSBC
YXR0ZXJ5U3RhdHVzRXZlbnQgaXMgYSBjbGFzcyBmb3IgaGFuZGxpbmcgZXZlbnQKKworICAgICAg
ICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGRvbS9CYXR0ZXJ5U3RhdHVzQ2xp
ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OkJhdHRl
cnlTdGF0dXNDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDb250
cm9sbGVyOjp+QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0
dGVyeVN0YXR1c0NvbnRyb2xsZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
dHRlcnlTdGF0dXNDb250cm9sbGVyOjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6cmVtb3ZlQWxsTGlzdGVuZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjpkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVz
KToKKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAg
ICAgICogZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QmF0dGVyeVN0YXR1c0V2ZW50OjpCYXR0ZXJ5U3RhdHVzRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QmF0dGVyeVN0YXR1c0V2ZW50Ojppbml0QmF0dGVyeVN0YXR1c0V2ZW50KToKKyAgICAg
ICAgKiBkb20vQmF0dGVyeVN0YXR1c0V2ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
QmF0dGVyeVN0YXR1c0V2ZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0
YXR1c0V2ZW50Ojppc0JhdHRlcnlTdGF0dXNFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0
ZXJ5U3RhdHVzRXZlbnQ6OmlzUGx1Z2dlZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3Rh
dHVzRXZlbnQ6OmxldmVsKToKKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0V2ZW50LmlkbDog
QWRkZWQuCisKIDIwMTEtMDYtMDkgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9CYXR0ZXJ5U3RhdHVzQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMmU3Y2JlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5
U3RhdHVzQ2xpZW50LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIEJhdHRlcnlTdGF0dXNDbGllbnRfaAorI2RlZmluZSBCYXR0ZXJ5U3RhdHVzQ2xpZW50
X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxl
cjsKKworY2xhc3MgQmF0dGVyeVN0YXR1c0NsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2
b2lkIHNldENvbnRyb2xsZXIoQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRh
dGluZygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmF0dGVyeVN0YXR1cyhib29sIGlzUGx1
Z2dlZCwgZmxvYXQgbGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmF0dGVyeVN0YXR1c0Nv
bnRyb2xsZXJEZXN0cm95ZWQoKSA9IDA7CisKK3ByaXZhdGU6CisgICAgQmF0dGVyeVN0YXR1c0Nv
bnRyb2xsZXIqIG1fY29udHJvbGxlcjsKKyAgICBib29sIG1faXNQbHVnZ2VkOworICAgIGZsb2F0
IG1fbGV2ZWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCYXR0
ZXJ5U3RhdHVzQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5
U3RhdHVzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0Nv
bnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OGI2YzIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0NvbnRy
b2xsZXIuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ft
c3VuZyBFbGVjdHJvbmljcyBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXNDb250cm9sbGVyLmgiCisKKyNp
bmNsdWRlICJCYXR0ZXJ5U3RhdHVzQ2xpZW50LmgiCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1c0V2
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6
OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyKEJhdHRlcnlTdGF0dXNDbGllbnQqIGNsaWVudCkKKyAg
ICA6IG1fY2xpZW50KGNsaWVudCkKK3sKKyAgICBtX2NsaWVudC0+c2V0Q29udHJvbGxlcih0aGlz
KTsKK30KKworQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6On5CYXR0ZXJ5U3RhdHVzQ29udHJvbGxl
cigpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+YmF0dGVyeVN0YXR1
c0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKK30KKwordm9pZCBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxl
cjo6YWRkTGlzdGVuZXIoRE9NV2luZG93KiB3aW5kb3cpCit7CisgICAgYm9vbCB3YXNFbXB0eSA9
IG1fbGlzdGVuZXJzLmlzRW1wdHkoKTsKKworICAgIG1fbGlzdGVuZXJzLmFkZCh3aW5kb3cpOwor
CisgICAgaWYgKHdhc0VtcHR5KQorICAgICAgICBtX2NsaWVudC0+c3RhcnRVcGRhdGluZygpOwor
fQorCit2b2lkIEJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjpyZW1vdmVMaXN0ZW5lcihET01XaW5k
b3cqIHdpbmRvdykKK3sKKyAgICBtX2xpc3RlbmVycy5yZW1vdmUod2luZG93KTsKKworICAgIGlm
IChtX2xpc3RlbmVycy5pc0VtcHR5KCkpCisgICAgICAgIG1fY2xpZW50LT5zdG9wVXBkYXRpbmco
KTsKK30KKwordm9pZCBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6cmVtb3ZlQWxsTGlzdGVuZXJz
KERPTVdpbmRvdyogd2luZG93KQoreworICAgIGlmICghbV9saXN0ZW5lcnMuY29udGFpbnMod2lu
ZG93KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9saXN0ZW5lcnMucmVtb3ZlQWxsKHdpbmRv
dyk7CisKKyAgICBpZiAobV9saXN0ZW5lcnMuaXNFbXB0eSgpKQorICAgICAgICBtX2NsaWVudC0+
c3RvcFVwZGF0aW5nKCk7Cit9CisKK3ZvaWQgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OmRpZENo
YW5nZUJhdHRlcnlTdGF0dXMoYm9vbCBpc1BsdWdnZWQsIGZsb2F0IGxldmVsKQoreworICAgIFJl
ZlB0cjxCYXR0ZXJ5U3RhdHVzRXZlbnQ+IGV2ZW50ID0gQmF0dGVyeVN0YXR1c0V2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLmJhdHRlcnlzdGF0dXNFdmVudCwgaXNQbHVnZ2VkLCBsZXZlbCk7Cisg
ICAgVmVjdG9yPFJlZlB0cjxET01XaW5kb3c+ID4gbGlzdGVuZXJzVmVjdG9yOworCisgICAgY29w
eVRvVmVjdG9yKG1fbGlzdGVuZXJzLCBsaXN0ZW5lcnNWZWN0b3IpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGlzdGVuZXJzVmVjdG9yLnNpemUoKTsgKytpKQorICAgICAgICBsaXN0ZW5l
cnNWZWN0b3JbaV0tPmRpc3BhdGNoRXZlbnQoZXZlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0NvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOWU5NjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuaApAQCAtMCww
ICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3Mg
SW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisgCisjaWZuZGVmIEJhdHRlcnlTdGF0dXND
b250cm9sbGVyX2gKKyNkZWZpbmUgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJfaAorCisjaW5jbHVk
ZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaENv
dW50ZWRTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5U3RhdHVz
Q2xpZW50OworY2xhc3MgUGFnZTsKKworY2xhc3MgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIgewor
cHVibGljOgorICAgIEJhdHRlcnlTdGF0dXNDb250cm9sbGVyKEJhdHRlcnlTdGF0dXNDbGllbnQq
KTsKKyAgICB+QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIoKTsKKworICAgIHZvaWQgYWRkTGlzdGVu
ZXIoRE9NV2luZG93Kik7CisgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihET01XaW5kb3cqKTsKKyAg
ICB2b2lkIHJlbW92ZUFsbExpc3RlbmVycyhET01XaW5kb3cqKTsKKworICAgIHZvaWQgZGlkQ2hh
bmdlQmF0dGVyeVN0YXR1cyhib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpOworCitwcml2YXRl
OgorICAgIGJvb2wgbV9pc1BsdWdnZWQ7CisgICAgZmxvYXQgbV9sZXZlbDsKKworICAgIEJhdHRl
cnlTdGF0dXNDbGllbnQqIG1fY2xpZW50OworICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8UmVm
UHRyPERPTVdpbmRvdz4gPiBMaXN0ZW5lcnNDb3VudGVkU2V0OworICAgIExpc3RlbmVyc0NvdW50
ZWRTZXQgbV9saXN0ZW5lcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5
U3RhdHVzRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMWQw
YTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2
ZW50LmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1
bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzRXZlbnQuaCIKKworI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCYXR0ZXJ5U3RhdHVzRXZl
bnQ6OkJhdHRlcnlTdGF0dXNFdmVudCgpCisgICAgOiBFdmVudChldmVudE5hbWVzKCkuYmF0dGVy
eXN0YXR1c0V2ZW50LCBmYWxzZSwgdHJ1ZSkKKyAgICAsIG1faXNQbHVnZ2VkKGZhbHNlKSwgbV9s
ZXZlbCgwKQoreworfQorCitCYXR0ZXJ5U3RhdHVzRXZlbnQ6OkJhdHRlcnlTdGF0dXNFdmVudChj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBpc1BsdWdnZWQsIGZsb2F0IGxldmVs
KQorICAgIDogRXZlbnQoZXZlbnRUeXBlLCBmYWxzZSwgZmFsc2UpCisgICAgLCBtX2lzUGx1Z2dl
ZChpc1BsdWdnZWQpLCBtX2xldmVsKGxldmVsKQoreworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNF
dmVudDo6aW5pdEJhdHRlcnlTdGF0dXNFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJv
b2wgYnViYmxlcywgYm9vbCBjYW5jZWxhYmxlLCBib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwp
Cit7CisgICAgaWYgKGRpc3BhdGNoZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5pdEV2
ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUpOworCisgICAgbV9pc1BsdWdnZWQgPSBpc1Bs
dWdnZWQ7CisgICAgbV9sZXZlbCA9IGxldmVsOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1NmFkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgQmF0dGVyeVN0YXR1c0V2ZW50X2gKKyNkZWZpbmUgQmF0
dGVyeVN0YXR1c0V2ZW50X2gKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVy
eVN0YXR1c0V2ZW50IDogcHVibGljIEV2ZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxCYXR0ZXJ5U3RhdHVzRXZlbnQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEJhdHRlcnlTdGF0dXNFdmVudCk7CisgICAgfQorCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QmF0dGVyeVN0YXR1c0V2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIGJvb2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQmF0dGVyeVN0YXR1c0V2ZW50KGV2ZW50VHlwZSwgaXNQbHVnZ2Vk
LCBsZXZlbCkpOworICAgIH0KKworICAgIHZvaWQgaW5pdEJhdHRlcnlTdGF0dXNFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgYnViYmxlcywgYm9vbCBjYW5jZWxhYmxlLCBib29s
IGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpOworICAgIHZpcnR1YWwgYm9vbCBpc0JhdHRlcnlTdGF0
dXNFdmVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgaXNQbHVnZ2VkKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1BsdWdnZWQ7IH0KKyAgICBmbG9hdCBsZXZlbCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGV2ZWw7IH0KKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5U3RhdHVzRXZlbnQoKTsK
KyAgICBCYXR0ZXJ5U3RhdHVzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJv
b2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCk7CisKKyAgICBib29sIG1faXNQbHVnZ2VkOworICAg
IGZsb2F0IG1fbGV2ZWw7CisKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEJhdHRlcnlTdGF0dXNFdmVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
QmF0dGVyeVN0YXR1c0V2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVz
RXZlbnQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMDViMGUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50Lmlk
bApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxl
Y3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKK21vZHVsZSBjb3JlIHsK
KworICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDM6CisgICAgaW50ZXJmYWNlIFsKKyAg
ICAgICAgQ29uZGl0aW9uYWw9QkFUVEVSWV9TVEFUVVMKKyAgICBdIEJhdHRlcnlTdGF0dXNFdmVu
dCA6IEV2ZW50IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gIGlzUGx1Z2dl
ZDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0ICAgIGxldmVsOworICAgICAgICB2
b2lkIGluaXRCYXR0ZXJ5U3RhdHVzRXZlbnQoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGJ1YmJsZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbmNlbGFibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGlzUGx1Z2dlZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGZsb2F0IGxldmVsKTsKKyAgICB9Owor
Cit9Cg==
</data>
<flag name="review"
          id="91144"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97408</attachid>
            <date>2011-06-15 23:53:57 -0700</date>
            <delta_ts>2011-06-21 00:01:01 -0700</delta_ts>
            <desc>Modify about comment #8</desc>
            <filename>patch_battery.patch</filename>
            <type>text/plain</type>
            <size>13814</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNDRlZGQxLi44MTI3ZGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTEtMDYtMTQgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0RPTV0gU3Vw
cG9ydCBmb3IgYmF0dGVyeSBzdGF0dXMgZXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgQWRkIE5ldyBDbGFzc2VzIHRv
IHRoZSBXZWJDb3JlIGZvciBuZXcgRXZlbnQoQmF0dGVyeVN0YXR1c0V2bmV0KQorICAgICAgICAt
IEJhdHRlcnlTdGF0dXNDbGllbnQgaXMgYSBpbnRlcmZhY2UgY2xhc3MgZm9yIGVhY2ggcG9ydC4K
KyAgICAgICAgLSBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlciBpcyBhIGNvbnRyb2wgY2xhc3MgYmV0
d2VlbiBjbGllbnQgYW5kIFdlYkNvcmUuCisgICAgICAgICAgdGhpcyBjbGFzcyBoYXMgYSBldmVu
dCBsaXN0ZW5lcnMgZm9yIEJhdHRlcnlTdGF0dXNFdmVudCBoYW5kbGluZyAKKyAgICAgICAgLSBC
YXR0ZXJ5U3RhdHVzRXZlbnQgaXMgYSBjbGFzcyBmb3IgaGFuZGxpbmcgZXZlbnQKKworICAgICAg
ICBubyBuZXcgdGVzdHMuCisgICAgICAgIFRoaXMgZXZlbnQgaW1wbGVtZW50YXRpb24gaXMgbm90
IGZpbmlzaGVkIHdpdGggdGhpcyBwYXRjaC4KKyAgICAgICAgQWZ0ZXIgZmluaXNoaW5nIGlucGxl
bWV0YXRpb24sIEl0IHdpbGwgYmUgYWRkZWQuCisKKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1
c0NsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjpC
YXR0ZXJ5U3RhdHVzQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVz
Q29udHJvbGxlcjo6fkJhdHRlcnlTdGF0dXNDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6cmVtb3ZlTGlzdGVuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OnJlbW92ZUFsbExpc3RlbmVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0
YXR1cyk6CisgICAgICAgICogZG9tL0JhdHRlcnlTdGF0dXNDb250cm9sbGVyLmg6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkJhdHRlcnlTdGF0dXNFdmVudDo6QmF0dGVyeVN0YXR1c0V2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNFdmVudDo6aW5pdEJhdHRlcnlTdGF0dXNFdmVudCk6Cisg
ICAgICAgICogZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJhdHRlcnlTdGF0dXNFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRl
cnlTdGF0dXNFdmVudDo6aXNCYXR0ZXJ5U3RhdHVzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
QmF0dGVyeVN0YXR1c0V2ZW50Ojppc1BsdWdnZWQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVy
eVN0YXR1c0V2ZW50OjpsZXZlbCk6CisgICAgICAgICogZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5p
ZGw6IEFkZGVkLgorCiAyMDExLTA2LTA5ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQmF0dGVyeVN0YXR1c0NsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjJlN2NiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0
dGVyeVN0YXR1c0NsaWVudC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBCYXR0ZXJ5U3RhdHVzQ2xpZW50X2gKKyNkZWZpbmUgQmF0dGVyeVN0YXR1c0Ns
aWVudF9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeVN0YXR1c0NvbnRy
b2xsZXI7CisKK2NsYXNzIEJhdHRlcnlTdGF0dXNDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250cm9sbGVyKEJhdHRlcnlTdGF0dXNDb250cm9sbGVyKikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9w
VXBkYXRpbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEJhdHRlcnlTdGF0dXMoYm9vbCBp
c1BsdWdnZWQsIGZsb2F0IGxldmVsKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJhdHRlcnlTdGF0
dXNDb250cm9sbGVyRGVzdHJveWVkKCkgPSAwOworCitwcml2YXRlOgorICAgIEJhdHRlcnlTdGF0
dXNDb250cm9sbGVyKiBtX2NvbnRyb2xsZXI7CisgICAgYm9vbCBtX2lzUGx1Z2dlZDsKKyAgICBm
bG9hdCBtX2xldmVsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
QmF0dGVyeVN0YXR1c0NsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0
dGVyeVN0YXR1c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0
dXNDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOThi
NmMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXND
b250cm9sbGVyLmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlci5oIgor
CisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1c0NsaWVudC5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0
dXNFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0JhdHRlcnlTdGF0dXNDb250cm9s
bGVyOjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcihCYXR0ZXJ5U3RhdHVzQ2xpZW50KiBjbGllbnQp
CisgICAgOiBtX2NsaWVudChjbGllbnQpCit7CisgICAgbV9jbGllbnQtPnNldENvbnRyb2xsZXIo
dGhpcyk7Cit9CisKK0JhdHRlcnlTdGF0dXNDb250cm9sbGVyOjp+QmF0dGVyeVN0YXR1c0NvbnRy
b2xsZXIoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmJhdHRlcnlT
dGF0dXNDb250cm9sbGVyRGVzdHJveWVkKCk7Cit9CisKK3ZvaWQgQmF0dGVyeVN0YXR1c0NvbnRy
b2xsZXI6OmFkZExpc3RlbmVyKERPTVdpbmRvdyogd2luZG93KQoreworICAgIGJvb2wgd2FzRW1w
dHkgPSBtX2xpc3RlbmVycy5pc0VtcHR5KCk7CisKKyAgICBtX2xpc3RlbmVycy5hZGQod2luZG93
KTsKKworICAgIGlmICh3YXNFbXB0eSkKKyAgICAgICAgbV9jbGllbnQtPnN0YXJ0VXBkYXRpbmco
KTsKK30KKwordm9pZCBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6cmVtb3ZlTGlzdGVuZXIoRE9N
V2luZG93KiB3aW5kb3cpCit7CisgICAgbV9saXN0ZW5lcnMucmVtb3ZlKHdpbmRvdyk7CisKKyAg
ICBpZiAobV9saXN0ZW5lcnMuaXNFbXB0eSgpKQorICAgICAgICBtX2NsaWVudC0+c3RvcFVwZGF0
aW5nKCk7Cit9CisKK3ZvaWQgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OnJlbW92ZUFsbExpc3Rl
bmVycyhET01XaW5kb3cqIHdpbmRvdykKK3sKKyAgICBpZiAoIW1fbGlzdGVuZXJzLmNvbnRhaW5z
KHdpbmRvdykpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGlzdGVuZXJzLnJlbW92ZUFsbCh3
aW5kb3cpOworCisgICAgaWYgKG1fbGlzdGVuZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jbGll
bnQtPnN0b3BVcGRhdGluZygpOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjpk
aWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGJvb2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCkKK3sKKyAg
ICBSZWZQdHI8QmF0dGVyeVN0YXR1c0V2ZW50PiBldmVudCA9IEJhdHRlcnlTdGF0dXNFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5iYXR0ZXJ5c3RhdHVzRXZlbnQsIGlzUGx1Z2dlZCwgbGV2ZWwp
OworICAgIFZlY3RvcjxSZWZQdHI8RE9NV2luZG93PiA+IGxpc3RlbmVyc1ZlY3RvcjsKKworICAg
IGNvcHlUb1ZlY3RvcihtX2xpc3RlbmVycywgbGlzdGVuZXJzVmVjdG9yKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxpc3RlbmVyc1ZlY3Rvci5zaXplKCk7ICsraSkKKyAgICAgICAgbGlz
dGVuZXJzVmVjdG9yW2ldLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXND
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTllOTY2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNDb250cm9sbGVyLmgKQEAg
LTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9u
aWNzIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworIAorI2lmbmRlZiBCYXR0ZXJ5U3Rh
dHVzQ29udHJvbGxlcl9oCisjZGVmaW5lIEJhdHRlcnlTdGF0dXNDb250cm9sbGVyX2gKKworI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hDb3VudGVkU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeVN0
YXR1c0NsaWVudDsKK2NsYXNzIFBhZ2U7CisKK2NsYXNzIEJhdHRlcnlTdGF0dXNDb250cm9sbGVy
IHsKK3B1YmxpYzoKKyAgICBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcihCYXR0ZXJ5U3RhdHVzQ2xp
ZW50Kik7CisgICAgfkJhdHRlcnlTdGF0dXNDb250cm9sbGVyKCk7CisKKyAgICB2b2lkIGFkZExp
c3RlbmVyKERPTVdpbmRvdyopOworICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoRE9NV2luZG93Kik7
CisgICAgdm9pZCByZW1vdmVBbGxMaXN0ZW5lcnMoRE9NV2luZG93Kik7CisKKyAgICB2b2lkIGRp
ZENoYW5nZUJhdHRlcnlTdGF0dXMoYm9vbCBpc1BsdWdnZWQsIGZsb2F0IGxldmVsKTsKKworcHJp
dmF0ZToKKyAgICBib29sIG1faXNQbHVnZ2VkOworICAgIGZsb2F0IG1fbGV2ZWw7CisKKyAgICBC
YXR0ZXJ5U3RhdHVzQ2xpZW50KiBtX2NsaWVudDsKKyAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0
PFJlZlB0cjxET01XaW5kb3c+ID4gTGlzdGVuZXJzQ291bnRlZFNldDsKKyAgICBMaXN0ZW5lcnND
b3VudGVkU2V0IG1fbGlzdGVuZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0
dGVyeVN0YXR1c0V2ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
OTIzZjg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0
dXNFdmVudC5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBT
YW1zdW5nIEVsZWN0cm9uaWNzIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1c0V2ZW50LmgiCisKKyNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQmF0dGVyeVN0YXR1
c0V2ZW50OjpCYXR0ZXJ5U3RhdHVzRXZlbnQoKQorICAgIDogRXZlbnQoZXZlbnROYW1lcygpLmJh
dHRlcnlzdGF0dXNFdmVudCwgZmFsc2UsIHRydWUpCisgICAgLCBtX2lzUGx1Z2dlZChmYWxzZSkK
KyAgICAsIG1fbGV2ZWwoMCkKK3sKK30KKworQmF0dGVyeVN0YXR1c0V2ZW50OjpCYXR0ZXJ5U3Rh
dHVzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgaXNQbHVnZ2VkLCBm
bG9hdCBsZXZlbCkKKyAgICA6IEV2ZW50KGV2ZW50VHlwZSwgZmFsc2UsIGZhbHNlKQorICAgICwg
bV9pc1BsdWdnZWQoaXNQbHVnZ2VkKQorICAgICwgbV9sZXZlbChsZXZlbCkKK3sKK30KKwordm9p
ZCBCYXR0ZXJ5U3RhdHVzRXZlbnQ6OmluaXRCYXR0ZXJ5U3RhdHVzRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlLCBib29sIGJ1YmJsZXMsIGJvb2wgY2FuY2VsYWJsZSwgYm9vbCBpc1BsdWdn
ZWQsIGZsb2F0IGxldmVsKQoreworICAgIGlmIChkaXNwYXRjaGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGluaXRFdmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlKTsKKworICAgIG1f
aXNQbHVnZ2VkID0gaXNQbHVnZ2VkOworICAgIG1fbGV2ZWwgPSBsZXZlbDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZSAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRl
cnlTdGF0dXNFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTZhZDgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmgKQEAgLTAsMCAr
MSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIElu
Yy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEJhdHRlcnlTdGF0dXNFdmVu
dF9oCisjZGVmaW5lIEJhdHRlcnlTdGF0dXNFdmVudF9oCisKKyNpbmNsdWRlICJFdmVudC5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEJhdHRlcnlTdGF0dXNFdmVudCA6IHB1YmxpYyBFdmVudCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1c0V2ZW50PiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCYXR0ZXJ5U3RhdHVzRXZlbnQpOworICAgIH0K
KworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXNFdmVudD4gY3JlYXRlKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJhdHRlcnlTdGF0dXNFdmVudChldmVu
dFR5cGUsIGlzUGx1Z2dlZCwgbGV2ZWwpKTsKKyAgICB9CisKKyAgICB2b2lkIGluaXRCYXR0ZXJ5
U3RhdHVzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGJ1YmJsZXMsIGJvb2wg
Y2FuY2VsYWJsZSwgYm9vbCBpc1BsdWdnZWQsIGZsb2F0IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNCYXR0ZXJ5U3RhdHVzRXZlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBi
b29sIGlzUGx1Z2dlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQbHVnZ2VkOyB9CisgICAgZmxvYXQg
bGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2xldmVsOyB9CisKK3ByaXZhdGU6CisgICAgQmF0dGVy
eVN0YXR1c0V2ZW50KCk7CisgICAgQmF0dGVyeVN0YXR1c0V2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpOworCisgICAgYm9vbCBt
X2lzUGx1Z2dlZDsKKyAgICBmbG9hdCBtX2xldmVsOworCit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBCYXR0ZXJ5U3RhdHVzRXZlbnRfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQmF0dGVyeVN0YXR1c0V2ZW50LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zYjA1YjBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRl
cnlTdGF0dXNFdmVudC5pZGwKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
Cittb2R1bGUgY29yZSB7CisKKyAgICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAzOgorICAg
IGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUJBVFRFUllfU1RBVFVTCisgICAgXSBC
YXR0ZXJ5U3RhdHVzRXZlbnQgOiBFdmVudCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBi
b29sZWFuICBpc1BsdWdnZWQ7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCAgICBs
ZXZlbDsKKyAgICAgICAgdm9pZCBpbml0QmF0dGVyeVN0YXR1c0V2ZW50KGluIERPTVN0cmluZyB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBidWJi
bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBjYW5j
ZWxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBp
c1BsdWdnZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBmbG9hdCBs
ZXZlbCk7CisgICAgfTsKKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97937</attachid>
            <date>2011-06-20 23:52:04 -0700</date>
            <delta_ts>2011-06-20 23:53:01 -0700</delta_ts>
            <desc>Add mock class and change event name to webkit&apos; prefix added.</desc>
            <filename>patch_battery.patch</filename>
            <type>text/plain</type>
            <size>18403</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3YTMwYTkwLi5mMDhmNzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAg
QEAKKzIwMTEtMDYtMjAgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0RPTV0gU3Vw
cG9ydCBmb3IgYmF0dGVyeSBzdGF0dXMgZXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgQWRkIE5ldyBDbGFzc2VzIHRv
IHRoZSBXZWJDb3JlIGZvciBuZXcgRXZlbnQoQmF0dGVyeVN0YXR1c0V2bmV0KQorICAgICAgICAt
IEJhdHRlcnlTdGF0dXNDbGllbnQgaXMgYSBpbnRlcmZhY2UgY2xhc3MgZm9yIGVhY2ggcG9ydC4K
KyAgICAgICAgLSBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlciBpcyBhIGNvbnRyb2wgY2xhc3MgYmV0
d2VlbiBjbGllbnQgYW5kIFdlYkNvcmUuCisgICAgICAgICAgdGhpcyBjbGFzcyBoYXMgYSBldmVu
dCBsaXN0ZW5lcnMgZm9yIEJhdHRlcnlTdGF0dXNFdmVudCBoYW5kbGluZyAKKyAgICAgICAgLSBC
YXR0ZXJ5U3RhdHVzRXZlbnQgaXMgYSBjbGFzcyBmb3IgaGFuZGxpbmcgZXZlbnQKKyAgICAgICAg
LSBCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jayBpcyBhIG1vY2sgY2xhc3MgZm9yIGNsaW5ldCBwb3J0
CisgICAgICAgIEFkZCBiYXR0ZXJ5IHN0YXR1cyBldmVudCB0byBFdmVudE5hbWUuaAorCisgICAg
ICAgIG5vIG5ldyB0ZXN0cy4KKyAgICAgICAgVGhpcyBldmVudCBpbXBsZW1lbnRhdGlvbiBpcyBu
b3QgZmluaXNoZWQgd2l0aCB0aGlzIHBhdGNoLgorICAgICAgICBBZnRlciBmaW5pc2hpbmcgaW5w
bGVtZXRhdGlvbiwgSXQgd2lsbCBiZSBhZGRlZC4KKworICAgICAgICAqIGRvbS9CYXR0ZXJ5U3Rh
dHVzQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6
OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0
dXNDb250cm9sbGVyOjp+QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6cmVtb3ZlQWxsTGlzdGVuZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjpkaWRDaGFuZ2VCYXR0ZXJ5
U3RhdHVzKToKKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuaDogQWRkZWQu
CisgICAgICAgICogZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmF0dGVyeVN0YXR1c0V2ZW50OjpCYXR0ZXJ5U3RhdHVzRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1c0V2ZW50Ojppbml0QmF0dGVyeVN0YXR1c0V2ZW50KToK
KyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0V2ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6QmF0dGVyeVN0YXR1c0V2ZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0
dGVyeVN0YXR1c0V2ZW50Ojppc0JhdHRlcnlTdGF0dXNFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXR0ZXJ5U3RhdHVzRXZlbnQ6OmlzUGx1Z2dlZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0
ZXJ5U3RhdHVzRXZlbnQ6OmxldmVsKToKKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0V2ZW50
LmlkbDogQWRkZWQuCisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tb2NrL0JhdHRlcnlTdGF0dXNDbGllbnRNb2NrLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6c2V0Q29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6c3RhcnRVcGRhdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6c3RvcFVwZGF0aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDbGllbnRNb2NrOjpzZXRCYXR0ZXJ5U3RhdHVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDbGllbnRNb2NrOjpiYXR0ZXJ5U3Rh
dHVzQ29udHJvbGxlckRlc3Ryb3llZCk6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9CYXR0ZXJ5
U3RhdHVzQ2xpZW50TW9jay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0
dXNDbGllbnRNb2NrOjp+QmF0dGVyeVN0YXR1c0NsaWVudE1vY2spOgorCiAyMDExLTA2LTIwICBB
bnRvbmlvIEdvbWVzICA8YWdvbWVzQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUnlv
c3VrZSBOaXdhLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXND
bGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ2xpZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU3Y2JlZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ2xpZW50LmgKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEJhdHRlcnlTdGF0dXNDbGllbnRfaAor
I2RlZmluZSBCYXR0ZXJ5U3RhdHVzQ2xpZW50X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjsKKworY2xhc3MgQmF0dGVyeVN0YXR1c0NsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoQmF0dGVyeVN0YXR1
c0NvbnRyb2xsZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QmF0dGVyeVN0YXR1cyhib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgYmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJEZXN0cm95ZWQoKSA9IDA7CisKK3By
aXZhdGU6CisgICAgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKKyAgICBi
b29sIG1faXNQbHVnZ2VkOworICAgIGZsb2F0IG1fbGV2ZWw7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCYXR0ZXJ5U3RhdHVzQ2xpZW50X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjYxY2FmNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuCisgKgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRl
cnlTdGF0dXNDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzQ2xpZW50Lmgi
CisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1c0V2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyKEJhdHRl
cnlTdGF0dXNDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKKyAgICBt
X2NsaWVudC0+c2V0Q29udHJvbGxlcih0aGlzKTsKK30KKworQmF0dGVyeVN0YXR1c0NvbnRyb2xs
ZXI6On5CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcigpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICBtX2NsaWVudC0+YmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKK30KKwor
dm9pZCBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6YWRkTGlzdGVuZXIoRE9NV2luZG93KiB3aW5k
b3cpCit7CisgICAgYm9vbCB3YXNFbXB0eSA9IG1fbGlzdGVuZXJzLmlzRW1wdHkoKTsKKworICAg
IG1fbGlzdGVuZXJzLmFkZCh3aW5kb3cpOworCisgICAgaWYgKHdhc0VtcHR5KQorICAgICAgICBt
X2NsaWVudC0+c3RhcnRVcGRhdGluZygpOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDb250cm9s
bGVyOjpyZW1vdmVMaXN0ZW5lcihET01XaW5kb3cqIHdpbmRvdykKK3sKKyAgICBtX2xpc3RlbmVy
cy5yZW1vdmUod2luZG93KTsKKworICAgIGlmIChtX2xpc3RlbmVycy5pc0VtcHR5KCkpCisgICAg
ICAgIG1fY2xpZW50LT5zdG9wVXBkYXRpbmcoKTsKK30KKwordm9pZCBCYXR0ZXJ5U3RhdHVzQ29u
dHJvbGxlcjo6cmVtb3ZlQWxsTGlzdGVuZXJzKERPTVdpbmRvdyogd2luZG93KQoreworICAgIGlm
ICghbV9saXN0ZW5lcnMuY29udGFpbnMod2luZG93KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9saXN0ZW5lcnMucmVtb3ZlQWxsKHdpbmRvdyk7CisKKyAgICBpZiAobV9saXN0ZW5lcnMuaXNF
bXB0eSgpKQorICAgICAgICBtX2NsaWVudC0+c3RvcFVwZGF0aW5nKCk7Cit9CisKK3ZvaWQgQmF0
dGVyeVN0YXR1c0NvbnRyb2xsZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoYm9vbCBpc1BsdWdn
ZWQsIGZsb2F0IGxldmVsKQoreworICAgIFJlZlB0cjxCYXR0ZXJ5U3RhdHVzRXZlbnQ+IGV2ZW50
ID0gQmF0dGVyeVN0YXR1c0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdGJhdHRlcnlz
dGF0dXNFdmVudCwgaXNQbHVnZ2VkLCBsZXZlbCk7CisgICAgVmVjdG9yPFJlZlB0cjxET01XaW5k
b3c+ID4gbGlzdGVuZXJzVmVjdG9yOworCisgICAgY29weVRvVmVjdG9yKG1fbGlzdGVuZXJzLCBs
aXN0ZW5lcnNWZWN0b3IpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdGVuZXJzVmVj
dG9yLnNpemUoKTsgKytpKQorICAgICAgICBsaXN0ZW5lcnNWZWN0b3JbaV0tPmRpc3BhdGNoRXZl
bnQoZXZlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjBhOWU5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisgCisjaWZuZGVmIEJhdHRlcnlTdGF0dXNDb250cm9sbGVyX2gKKyNkZWZpbmUgQmF0
dGVyeVN0YXR1c0NvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5U3RhdHVzQ2xpZW50OworY2xhc3MgUGFnZTsKKwor
Y2xhc3MgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIgeworcHVibGljOgorICAgIEJhdHRlcnlTdGF0
dXNDb250cm9sbGVyKEJhdHRlcnlTdGF0dXNDbGllbnQqKTsKKyAgICB+QmF0dGVyeVN0YXR1c0Nv
bnRyb2xsZXIoKTsKKworICAgIHZvaWQgYWRkTGlzdGVuZXIoRE9NV2luZG93Kik7CisgICAgdm9p
ZCByZW1vdmVMaXN0ZW5lcihET01XaW5kb3cqKTsKKyAgICB2b2lkIHJlbW92ZUFsbExpc3RlbmVy
cyhET01XaW5kb3cqKTsKKworICAgIHZvaWQgZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhib29sIGlz
UGx1Z2dlZCwgZmxvYXQgbGV2ZWwpOworCitwcml2YXRlOgorICAgIGJvb2wgbV9pc1BsdWdnZWQ7
CisgICAgZmxvYXQgbV9sZXZlbDsKKworICAgIEJhdHRlcnlTdGF0dXNDbGllbnQqIG1fY2xpZW50
OworICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPERPTVdpbmRvdz4gPiBMaXN0ZW5l
cnNDb3VudGVkU2V0OworICAgIExpc3RlbmVyc0NvdW50ZWRTZXQgbV9saXN0ZW5lcnM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCYXR0ZXJ5U3RhdHVzQ29udHJv
bGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOGRmZjEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmNwcApAQCAtMCwwICsxLDU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
YXR0ZXJ5U3RhdHVzRXZlbnQuaCIKKworI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitCYXR0ZXJ5U3RhdHVzRXZlbnQ6OkJhdHRlcnlTdGF0dXNFdmVudCgp
CisgICAgOiBFdmVudChldmVudE5hbWVzKCkud2Via2l0YmF0dGVyeXN0YXR1c0V2ZW50LCBmYWxz
ZSwgdHJ1ZSkKKyAgICAsIG1faXNQbHVnZ2VkKGZhbHNlKQorICAgICwgbV9sZXZlbCgwKQorewor
fQorCitCYXR0ZXJ5U3RhdHVzRXZlbnQ6OkJhdHRlcnlTdGF0dXNFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBpc1BsdWdnZWQsIGZsb2F0IGxldmVsKQorICAgIDogRXZl
bnQoZXZlbnRUeXBlLCBmYWxzZSwgZmFsc2UpCisgICAgLCBtX2lzUGx1Z2dlZChpc1BsdWdnZWQp
CisgICAgLCBtX2xldmVsKGxldmVsKQoreworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNFdmVudDo6
aW5pdEJhdHRlcnlTdGF0dXNFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgYnVi
YmxlcywgYm9vbCBjYW5jZWxhYmxlLCBib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpCit7Cisg
ICAgaWYgKGRpc3BhdGNoZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5pdEV2ZW50KHR5
cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUpOworCisgICAgbV9pc1BsdWdnZWQgPSBpc1BsdWdnZWQ7
CisgICAgbV9sZXZlbCA9IGxldmVsOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOWY0YTczNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgQmF0dGVyeVN0YXR1c0V2ZW50X2gKKyNkZWZpbmUgQmF0dGVyeVN0
YXR1c0V2ZW50X2gKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeVN0YXR1
c0V2ZW50IDogcHVibGljIEV2ZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxC
YXR0ZXJ5U3RhdHVzRXZlbnQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEJhdHRlcnlTdGF0dXNFdmVudCk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QmF0dGVyeVN0YXR1c0V2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIGJvb2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQmF0dGVyeVN0YXR1c0V2ZW50KGV2ZW50VHlwZSwgaXNQbHVnZ2VkLCBsZXZl
bCkpOworICAgIH0KKworICAgIHZvaWQgaW5pdEJhdHRlcnlTdGF0dXNFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUsIGJvb2wgYnViYmxlcywgYm9vbCBjYW5jZWxhYmxlLCBib29sIGlzUGx1
Z2dlZCwgZmxvYXQgbGV2ZWwpOworICAgIHZpcnR1YWwgYm9vbCBpc0JhdHRlcnlTdGF0dXNFdmVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgaXNQbHVnZ2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1BsdWdnZWQ7IH0KKyAgICBmbG9hdCBsZXZlbCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGV2ZWw7IH0KKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5U3RhdHVzRXZlbnQoKTsKKyAgICBC
YXR0ZXJ5U3RhdHVzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgaXNQ
bHVnZ2VkLCBmbG9hdCBsZXZlbCk7CisKKyAgICBib29sIG1faXNQbHVnZ2VkOworICAgIGZsb2F0
IG1fbGV2ZWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCYXR0
ZXJ5U3RhdHVzRXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlT
dGF0dXNFdmVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50Lmlk
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjA1YjBlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5pZGwKQEAgLTAs
MCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNz
IEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCittb2R1bGUgY29yZSB7CisKKyAgICAv
LyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAzOgorICAgIGludGVyZmFjZSBbCisgICAgICAgIENv
bmRpdGlvbmFsPUJBVFRFUllfU1RBVFVTCisgICAgXSBCYXR0ZXJ5U3RhdHVzRXZlbnQgOiBFdmVu
dCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuICBpc1BsdWdnZWQ7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCAgICBsZXZlbDsKKyAgICAgICAgdm9pZCBpbml0
QmF0dGVyeVN0YXR1c0V2ZW50KGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBidWJibGVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBjYW5jZWxhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBpc1BsdWdnZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBmbG9hdCBsZXZlbCk7CisgICAgfTsKKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudE5hbWVzLmgKaW5kZXggOWRkMTgzNy4uY2NmMTFlNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnROYW1lcy5oCkBAIC0xODAsNiArMTgwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFwK
ICAgICBtYWNybyhhdWRpb3Byb2Nlc3MpIFwKICAgICBcCisgICAgbWFjcm8od2Via2l0YmF0dGVy
eXN0YXR1cykgXAorICAgIFwKIC8vIGVuZCBvZiBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0gKIAog
ICAgIGNsYXNzIEV2ZW50TmFtZXMgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9CYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL0JhdHRlcnlTdGF0dXNDbGllbnRNb2NrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kN2IzMWE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9CYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jay5jcHAKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQmF0dGVyeVN0YXR1c0NsaWVudE1vY2suaCIKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzQ29u
dHJvbGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQmF0dGVyeVN0YXR1c0Ns
aWVudE1vY2s6OnNldENvbnRyb2xsZXIoQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIpCit7CisgICAgbV9jb250cm9sbGVyID0gY29udHJvbGxlcjsKK30KKwordm9pZCBCYXR0ZXJ5
U3RhdHVzQ2xpZW50TW9jazo6c3RhcnRVcGRhdGluZygpCit7Cit9CisKK3ZvaWQgQmF0dGVyeVN0
YXR1c0NsaWVudE1vY2s6OnN0b3BVcGRhdGluZygpCit7Cit9CisKK3ZvaWQgQmF0dGVyeVN0YXR1
c0NsaWVudE1vY2s6OnNldEJhdHRlcnlTdGF0dXMoYm9vbCBpc1BsdWdnZWQsIGZsb2F0IGxldmVs
KQoreworICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhpc1BsdWdnZWQs
IGxldmVsKTsKK30KKwordm9pZCBCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6YmF0dGVyeVN0YXR1
c0NvbnRyb2xsZXJEZXN0cm95ZWQoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0JhdHRlcnlTdGF0dXNDbGll
bnRNb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0JhdHRlcnlTdGF0dXNDbGll
bnRNb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcxMTQ3ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQmF0dGVyeVN0YXR1
c0NsaWVudE1vY2suaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJCYXR0ZXJ5U3RhdHVzQ2xpZW50LmgiCisKKyNpZm5kZWYgQmF0dGVyeVN0YXR1c0Ns
aWVudE1vY2tfaAorI2RlZmluZSBCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9ja19oCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI7CisKK2NsYXNzIEJh
dHRlcnlTdGF0dXNDbGllbnRNb2NrIDogcHVibGljIEJhdHRlcnlTdGF0dXNDbGllbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfkJhdHRlcnlTdGF0dXNDbGllbnRNb2NrKCkge30KKworICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250cm9sbGVyKEJhdHRlcnlTdGF0dXNDb250cm9sbGVyKik7CisgICAg
dmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0
aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIHNldEJhdHRlcnlTdGF0dXMoYm9vbCBpc1BsdWdnZWQs
IGZsb2F0IGxldmVsKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJE
ZXN0cm95ZWQoKTsKKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlciogbV9j
b250cm9sbGVyOworICAgIGJvb2wgbV9pc1VwZGF0aW5nOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQmF0dGVyeVN0YXR1c0NsaWVudE1vY2tfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97938</attachid>
            <date>2011-06-21 00:01:01 -0700</date>
            <delta_ts>2011-06-28 03:37:35 -0700</delta_ts>
            <desc>Add mock class for client and change event name to &apos;webkit&apos; prefix adding.</desc>
            <filename>patch_battery.patch</filename>
            <type>text/plain</type>
            <size>18360</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3YTMwYTkwLi5mMDhmNzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAg
QEAKKzIwMTEtMDYtMjAgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0RPTV0gU3Vw
cG9ydCBmb3IgYmF0dGVyeSBzdGF0dXMgZXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgQWRkIE5ldyBDbGFzc2VzIHRv
IHRoZSBXZWJDb3JlIGZvciBuZXcgRXZlbnQoQmF0dGVyeVN0YXR1c0V2bmV0KQorICAgICAgICAt
IEJhdHRlcnlTdGF0dXNDbGllbnQgaXMgYSBpbnRlcmZhY2UgY2xhc3MgZm9yIGVhY2ggcG9ydC4K
KyAgICAgICAgLSBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlciBpcyBhIGNvbnRyb2wgY2xhc3MgYmV0
d2VlbiBjbGllbnQgYW5kIFdlYkNvcmUuCisgICAgICAgICAgdGhpcyBjbGFzcyBoYXMgYSBldmVu
dCBsaXN0ZW5lcnMgZm9yIEJhdHRlcnlTdGF0dXNFdmVudCBoYW5kbGluZyAKKyAgICAgICAgLSBC
YXR0ZXJ5U3RhdHVzRXZlbnQgaXMgYSBjbGFzcyBmb3IgaGFuZGxpbmcgZXZlbnQKKyAgICAgICAg
LSBCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jayBpcyBhIG1vY2sgY2xhc3MgZm9yIGNsaW5ldCBwb3J0
CisgICAgICAgIEFkZCBiYXR0ZXJ5IHN0YXR1cyBldmVudCB0byBFdmVudE5hbWUuaAorCisgICAg
ICAgIG5vIG5ldyB0ZXN0cy4KKyAgICAgICAgVGhpcyBldmVudCBpbXBsZW1lbnRhdGlvbiBpcyBu
b3QgZmluaXNoZWQgd2l0aCB0aGlzIHBhdGNoLgorICAgICAgICBBZnRlciBmaW5pc2hpbmcgaW5w
bGVtZXRhdGlvbiwgSXQgd2lsbCBiZSBhZGRlZC4KKworICAgICAgICAqIGRvbS9CYXR0ZXJ5U3Rh
dHVzQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6
OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0
dXNDb250cm9sbGVyOjp+QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6cmVtb3ZlQWxsTGlzdGVuZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjpkaWRDaGFuZ2VCYXR0ZXJ5
U3RhdHVzKToKKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuaDogQWRkZWQu
CisgICAgICAgICogZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmF0dGVyeVN0YXR1c0V2ZW50OjpCYXR0ZXJ5U3RhdHVzRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1c0V2ZW50Ojppbml0QmF0dGVyeVN0YXR1c0V2ZW50KToK
KyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0V2ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6QmF0dGVyeVN0YXR1c0V2ZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0
dGVyeVN0YXR1c0V2ZW50Ojppc0JhdHRlcnlTdGF0dXNFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXR0ZXJ5U3RhdHVzRXZlbnQ6OmlzUGx1Z2dlZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0
ZXJ5U3RhdHVzRXZlbnQ6OmxldmVsKToKKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0V2ZW50
LmlkbDogQWRkZWQuCisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tb2NrL0JhdHRlcnlTdGF0dXNDbGllbnRNb2NrLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6c2V0Q29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6c3RhcnRVcGRhdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6c3RvcFVwZGF0aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDbGllbnRNb2NrOjpzZXRCYXR0ZXJ5U3RhdHVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDbGllbnRNb2NrOjpiYXR0ZXJ5U3Rh
dHVzQ29udHJvbGxlckRlc3Ryb3llZCk6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9CYXR0ZXJ5
U3RhdHVzQ2xpZW50TW9jay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0
dXNDbGllbnRNb2NrOjp+QmF0dGVyeVN0YXR1c0NsaWVudE1vY2spOgorCiAyMDExLTA2LTIwICBB
bnRvbmlvIEdvbWVzICA8YWdvbWVzQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUnlv
c3VrZSBOaXdhLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXND
bGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ2xpZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU3Y2JlZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ2xpZW50LmgKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEJhdHRlcnlTdGF0dXNDbGllbnRfaAor
I2RlZmluZSBCYXR0ZXJ5U3RhdHVzQ2xpZW50X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjsKKworY2xhc3MgQmF0dGVyeVN0YXR1c0NsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoQmF0dGVyeVN0YXR1
c0NvbnRyb2xsZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QmF0dGVyeVN0YXR1cyhib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgYmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJEZXN0cm95ZWQoKSA9IDA7CisKK3By
aXZhdGU6CisgICAgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKKyAgICBi
b29sIG1faXNQbHVnZ2VkOworICAgIGZsb2F0IG1fbGV2ZWw7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCYXR0ZXJ5U3RhdHVzQ2xpZW50X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjYxY2FmNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuCisgKgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRl
cnlTdGF0dXNDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzQ2xpZW50Lmgi
CisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1c0V2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyKEJhdHRl
cnlTdGF0dXNDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKKyAgICBt
X2NsaWVudC0+c2V0Q29udHJvbGxlcih0aGlzKTsKK30KKworQmF0dGVyeVN0YXR1c0NvbnRyb2xs
ZXI6On5CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcigpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICBtX2NsaWVudC0+YmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKK30KKwor
dm9pZCBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6YWRkTGlzdGVuZXIoRE9NV2luZG93KiB3aW5k
b3cpCit7CisgICAgYm9vbCB3YXNFbXB0eSA9IG1fbGlzdGVuZXJzLmlzRW1wdHkoKTsKKworICAg
IG1fbGlzdGVuZXJzLmFkZCh3aW5kb3cpOworCisgICAgaWYgKHdhc0VtcHR5KQorICAgICAgICBt
X2NsaWVudC0+c3RhcnRVcGRhdGluZygpOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDb250cm9s
bGVyOjpyZW1vdmVMaXN0ZW5lcihET01XaW5kb3cqIHdpbmRvdykKK3sKKyAgICBtX2xpc3RlbmVy
cy5yZW1vdmUod2luZG93KTsKKworICAgIGlmIChtX2xpc3RlbmVycy5pc0VtcHR5KCkpCisgICAg
ICAgIG1fY2xpZW50LT5zdG9wVXBkYXRpbmcoKTsKK30KKwordm9pZCBCYXR0ZXJ5U3RhdHVzQ29u
dHJvbGxlcjo6cmVtb3ZlQWxsTGlzdGVuZXJzKERPTVdpbmRvdyogd2luZG93KQoreworICAgIGlm
ICghbV9saXN0ZW5lcnMuY29udGFpbnMod2luZG93KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9saXN0ZW5lcnMucmVtb3ZlQWxsKHdpbmRvdyk7CisKKyAgICBpZiAobV9saXN0ZW5lcnMuaXNF
bXB0eSgpKQorICAgICAgICBtX2NsaWVudC0+c3RvcFVwZGF0aW5nKCk7Cit9CisKK3ZvaWQgQmF0
dGVyeVN0YXR1c0NvbnRyb2xsZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoYm9vbCBpc1BsdWdn
ZWQsIGZsb2F0IGxldmVsKQoreworICAgIFJlZlB0cjxCYXR0ZXJ5U3RhdHVzRXZlbnQ+IGV2ZW50
ID0gQmF0dGVyeVN0YXR1c0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdGJhdHRlcnlz
dGF0dXNFdmVudCwgaXNQbHVnZ2VkLCBsZXZlbCk7CisgICAgVmVjdG9yPFJlZlB0cjxET01XaW5k
b3c+ID4gbGlzdGVuZXJzVmVjdG9yOworCisgICAgY29weVRvVmVjdG9yKG1fbGlzdGVuZXJzLCBs
aXN0ZW5lcnNWZWN0b3IpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdGVuZXJzVmVj
dG9yLnNpemUoKTsgKytpKQorICAgICAgICBsaXN0ZW5lcnNWZWN0b3JbaV0tPmRpc3BhdGNoRXZl
bnQoZXZlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjBhOWU5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisgCisjaWZuZGVmIEJhdHRlcnlTdGF0dXNDb250cm9sbGVyX2gKKyNkZWZpbmUgQmF0
dGVyeVN0YXR1c0NvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5U3RhdHVzQ2xpZW50OworY2xhc3MgUGFnZTsKKwor
Y2xhc3MgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIgeworcHVibGljOgorICAgIEJhdHRlcnlTdGF0
dXNDb250cm9sbGVyKEJhdHRlcnlTdGF0dXNDbGllbnQqKTsKKyAgICB+QmF0dGVyeVN0YXR1c0Nv
bnRyb2xsZXIoKTsKKworICAgIHZvaWQgYWRkTGlzdGVuZXIoRE9NV2luZG93Kik7CisgICAgdm9p
ZCByZW1vdmVMaXN0ZW5lcihET01XaW5kb3cqKTsKKyAgICB2b2lkIHJlbW92ZUFsbExpc3RlbmVy
cyhET01XaW5kb3cqKTsKKworICAgIHZvaWQgZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhib29sIGlz
UGx1Z2dlZCwgZmxvYXQgbGV2ZWwpOworCitwcml2YXRlOgorICAgIGJvb2wgbV9pc1BsdWdnZWQ7
CisgICAgZmxvYXQgbV9sZXZlbDsKKworICAgIEJhdHRlcnlTdGF0dXNDbGllbnQqIG1fY2xpZW50
OworICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPERPTVdpbmRvdz4gPiBMaXN0ZW5l
cnNDb3VudGVkU2V0OworICAgIExpc3RlbmVyc0NvdW50ZWRTZXQgbV9saXN0ZW5lcnM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCYXR0ZXJ5U3RhdHVzQ29udHJv
bGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOGRmZjEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmNwcApAQCAtMCwwICsxLDU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
YXR0ZXJ5U3RhdHVzRXZlbnQuaCIKKworI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitCYXR0ZXJ5U3RhdHVzRXZlbnQ6OkJhdHRlcnlTdGF0dXNFdmVudCgp
CisgICAgOiBFdmVudChldmVudE5hbWVzKCkud2Via2l0YmF0dGVyeXN0YXR1c0V2ZW50LCBmYWxz
ZSwgdHJ1ZSkKKyAgICAsIG1faXNQbHVnZ2VkKGZhbHNlKQorICAgICwgbV9sZXZlbCgwKQorewor
fQorCitCYXR0ZXJ5U3RhdHVzRXZlbnQ6OkJhdHRlcnlTdGF0dXNFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBpc1BsdWdnZWQsIGZsb2F0IGxldmVsKQorICAgIDogRXZl
bnQoZXZlbnRUeXBlLCBmYWxzZSwgZmFsc2UpCisgICAgLCBtX2lzUGx1Z2dlZChpc1BsdWdnZWQp
CisgICAgLCBtX2xldmVsKGxldmVsKQoreworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNFdmVudDo6
aW5pdEJhdHRlcnlTdGF0dXNFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgYnVi
YmxlcywgYm9vbCBjYW5jZWxhYmxlLCBib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpCit7Cisg
ICAgaWYgKGRpc3BhdGNoZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5pdEV2ZW50KHR5
cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUpOworCisgICAgbV9pc1BsdWdnZWQgPSBpc1BsdWdnZWQ7
CisgICAgbV9sZXZlbCA9IGxldmVsOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOWY0YTczNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgQmF0dGVyeVN0YXR1c0V2ZW50X2gKKyNkZWZpbmUgQmF0dGVyeVN0
YXR1c0V2ZW50X2gKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeVN0YXR1
c0V2ZW50IDogcHVibGljIEV2ZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxC
YXR0ZXJ5U3RhdHVzRXZlbnQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEJhdHRlcnlTdGF0dXNFdmVudCk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QmF0dGVyeVN0YXR1c0V2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIGJvb2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQmF0dGVyeVN0YXR1c0V2ZW50KGV2ZW50VHlwZSwgaXNQbHVnZ2VkLCBsZXZl
bCkpOworICAgIH0KKworICAgIHZvaWQgaW5pdEJhdHRlcnlTdGF0dXNFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUsIGJvb2wgYnViYmxlcywgYm9vbCBjYW5jZWxhYmxlLCBib29sIGlzUGx1
Z2dlZCwgZmxvYXQgbGV2ZWwpOworICAgIHZpcnR1YWwgYm9vbCBpc0JhdHRlcnlTdGF0dXNFdmVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgaXNQbHVnZ2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1BsdWdnZWQ7IH0KKyAgICBmbG9hdCBsZXZlbCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGV2ZWw7IH0KKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5U3RhdHVzRXZlbnQoKTsKKyAgICBC
YXR0ZXJ5U3RhdHVzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgaXNQ
bHVnZ2VkLCBmbG9hdCBsZXZlbCk7CisKKyAgICBib29sIG1faXNQbHVnZ2VkOworICAgIGZsb2F0
IG1fbGV2ZWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCYXR0
ZXJ5U3RhdHVzRXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlT
dGF0dXNFdmVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50Lmlk
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjA1YjBlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5pZGwKQEAgLTAs
MCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNz
IEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCittb2R1bGUgY29yZSB7CisKKyAgICAv
LyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAzOgorICAgIGludGVyZmFjZSBbCisgICAgICAgIENv
bmRpdGlvbmFsPUJBVFRFUllfU1RBVFVTCisgICAgXSBCYXR0ZXJ5U3RhdHVzRXZlbnQgOiBFdmVu
dCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuICBpc1BsdWdnZWQ7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCAgICBsZXZlbDsKKyAgICAgICAgdm9pZCBpbml0
QmF0dGVyeVN0YXR1c0V2ZW50KGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBidWJibGVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBjYW5jZWxhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBpc1BsdWdnZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBmbG9hdCBsZXZlbCk7CisgICAgfTsKKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudE5hbWVzLmgKaW5kZXggOWRkMTgzNy4uY2NmMTFlNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnROYW1lcy5oCkBAIC0xODAsNiArMTgwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFwK
ICAgICBtYWNybyhhdWRpb3Byb2Nlc3MpIFwKICAgICBcCisgICAgbWFjcm8od2Via2l0YmF0dGVy
eXN0YXR1cykgXAorICAgIFwKIC8vIGVuZCBvZiBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0gKIAog
ICAgIGNsYXNzIEV2ZW50TmFtZXMgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9CYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL0JhdHRlcnlTdGF0dXNDbGllbnRNb2NrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4zN2FlYWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9CYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jay5jcHAKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQmF0dGVyeVN0YXR1c0NsaWVudE1vY2suaCIKKworI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXND
b250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBCYXR0ZXJ5U3RhdHVz
Q2xpZW50TW9jazo6c2V0Q29udHJvbGxlcihCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlciogY29udHJv
bGxlcikKK3sKKyAgICBtX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworfQorCit2b2lkIEJhdHRl
cnlTdGF0dXNDbGllbnRNb2NrOjpzdGFydFVwZGF0aW5nKCkKK3sKK30KKwordm9pZCBCYXR0ZXJ5
U3RhdHVzQ2xpZW50TW9jazo6c3RvcFVwZGF0aW5nKCkKK3sKK30KKwordm9pZCBCYXR0ZXJ5U3Rh
dHVzQ2xpZW50TW9jazo6c2V0QmF0dGVyeVN0YXR1cyhib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2
ZWwpCit7CisgICAgbV9jb250cm9sbGVyLT5kaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGlzUGx1Z2dl
ZCwgbGV2ZWwpOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDbGllbnRNb2NrOjpiYXR0ZXJ5U3Rh
dHVzQ29udHJvbGxlckRlc3Ryb3llZCgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQmF0dGVyeVN0YXR1c0Ns
aWVudE1vY2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQmF0dGVyeVN0YXR1c0Ns
aWVudE1vY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2RiMzg5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9CYXR0ZXJ5U3Rh
dHVzQ2xpZW50TW9jay5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgIkJhdHRlcnlTdGF0dXNDbGllbnQuaCIKKworI2lmbmRlZiBCYXR0ZXJ5U3RhdHVz
Q2xpZW50TW9ja19oCisjZGVmaW5lIEJhdHRlcnlTdGF0dXNDbGllbnRNb2NrX2gKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjsKKworY2xhc3Mg
QmF0dGVyeVN0YXR1c0NsaWVudE1vY2sgOiBwdWJsaWMgQmF0dGVyeVN0YXR1c0NsaWVudCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoQmF0dGVyeVN0YXR1c0NvbnRy
b2xsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZygpOworICAgIHZpcnR1YWwg
dm9pZCBzdG9wVXBkYXRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmF0dGVyeVN0YXR1cyhi
b29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpOworICAgIHZpcnR1YWwgdm9pZCBiYXR0ZXJ5U3Rh
dHVzQ29udHJvbGxlckRlc3Ryb3llZCgpOworCitwcml2YXRlOgorICAgIEJhdHRlcnlTdGF0dXND
b250cm9sbGVyKiBtX2NvbnRyb2xsZXI7CisgICAgYm9vbCBtX2lzVXBkYXRpbmc7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9j
a19oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98894</attachid>
            <date>2011-06-28 03:37:35 -0700</date>
            <delta_ts>2011-06-28 05:21:13 -0700</delta_ts>
            <desc>Add ClientMock class Method implementation</desc>
            <filename>patch_batteryClass.patch</filename>
            <type>text/plain</type>
            <size>18687</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZWYyYWJiLi40ODQwZjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDgg
QEAKKzIwMTEtMDYtMjggIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBm
b3IgYmF0dGVyeSBzdGF0dXMgZXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgQWRkIE5ldyBDbGFzc2VzIHRvIHRoZSBX
ZWJDb3JlIGZvciBuZXcgRXZlbnQoQmF0dGVyeVN0YXR1c0V2bmV0KQorICAgICAgICAtIEJhdHRl
cnlTdGF0dXNDbGllbnQgaXMgYSBpbnRlcmZhY2UgY2xhc3MgZm9yIGVhY2ggcG9ydC4KKyAgICAg
ICAgLSBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlciBpcyBhIGNvbnRyb2wgY2xhc3MgYmV0d2VlbiBj
bGllbnQgYW5kIFdlYkNvcmUuCisgICAgICAgICAgdGhpcyBjbGFzcyBoYXMgYSBldmVudCBsaXN0
ZW5lcnMgZm9yIEJhdHRlcnlTdGF0dXNFdmVudCBoYW5kbGluZyAKKyAgICAgICAgLSBCYXR0ZXJ5
U3RhdHVzRXZlbnQgaXMgYSBjbGFzcyBmb3IgaGFuZGxpbmcgZXZlbnQKKyAgICAgICAgLSBCYXR0
ZXJ5U3RhdHVzQ2xpZW50TW9jayBpcyBhIG1vY2sgY2xhc3MgZm9yIGNsaW5ldCBwb3J0CisgICAg
ICAgIEFkZCBiYXR0ZXJ5IHN0YXR1cyBldmVudCB0byBFdmVudE5hbWUuaAorCisgICAgICAgIFRl
c3QgY2FzZXMgd2lsbCBiZSBhZGRlZCBhcyBzb29uIGFzIGFmdGVyIHRoZSB3aG9sZSBmZWF0dXJl
IGlzIGltcGxlbWVudGVkCisKKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0NsaWVudC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjpCYXR0ZXJ5U3RhdHVz
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6
fkJhdHRlcnlTdGF0dXNDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0
dXNDb250cm9sbGVyOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3Rh
dHVzQ29udHJvbGxlcjo6cmVtb3ZlTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVy
eVN0YXR1c0NvbnRyb2xsZXI6OnJlbW92ZUFsbExpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyk6CisgICAg
ICAgICogZG9tL0JhdHRlcnlTdGF0dXNDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIGRv
bS9CYXR0ZXJ5U3RhdHVzRXZlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhdHRl
cnlTdGF0dXNFdmVudDo6QmF0dGVyeVN0YXR1c0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJh
dHRlcnlTdGF0dXNFdmVudDo6aW5pdEJhdHRlcnlTdGF0dXNFdmVudCk6CisgICAgICAgICogZG9t
L0JhdHRlcnlTdGF0dXNFdmVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlT
dGF0dXNFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNFdmVu
dDo6aXNCYXR0ZXJ5U3RhdHVzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1
c0V2ZW50Ojppc1BsdWdnZWQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1c0V2ZW50
OjpsZXZlbCk6CisgICAgICAgICogZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5pZGw6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21vY2svQmF0dGVyeVN0YXR1c0NsaWVudE1vY2suY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDbGllbnRNb2NrOjpCYXR0ZXJ5U3Rh
dHVzQ2xpZW50TW9jayk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9j
azo6c2V0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50
TW9jazo6c3RhcnRVcGRhdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xp
ZW50TW9jazo6c3RvcFVwZGF0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXND
bGllbnRNb2NrOjpzZXRCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlT
dGF0dXNDbGllbnRNb2NrOjpiYXR0ZXJ5U3RhdHVzQ29udHJvbGxlckRlc3Ryb3llZCk6CisgICAg
ICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6dGltZXJGaXJlZCk6CisgICAg
ICAgICogcGxhdGZvcm0vbW9jay9CYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jay5oOiBBZGRlZC4KKwog
MjAxMS0wNi0yNCAgR2F2aW4gUGV0ZXJzICA8Z2F2aW5wQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9CYXR0ZXJ5U3RhdHVzQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1
c0NsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNmNlZjkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0NsaWVudC5o
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVj
dHJvbmljcyBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0ZXJ5
U3RhdHVzQ2xpZW50X2gKKyNkZWZpbmUgQmF0dGVyeVN0YXR1c0NsaWVudF9oCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI7CisKK2NsYXNzIEJh
dHRlcnlTdGF0dXNDbGllbnQgeworcHVibGljOgorCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRy
b2xsZXIoQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0
YXJ0VXBkYXRpbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0QmF0dGVyeVN0YXR1cyhib29sIGlzUGx1Z2dlZCwgZmxvYXQg
bGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJEZXN0
cm95ZWQoKSA9IDA7CisKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEJhdHRlcnlTdGF0dXNDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Jh
dHRlcnlTdGF0dXNDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3Rh
dHVzQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFj
YWY2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVz
Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuaCIK
KworI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXNDbGllbnQuaCIKKyNpbmNsdWRlICJCYXR0ZXJ5U3Rh
dHVzRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCYXR0ZXJ5U3RhdHVzQ29udHJv
bGxlcjo6QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIoQmF0dGVyeVN0YXR1c0NsaWVudCogY2xpZW50
KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworICAgIG1fY2xpZW50LT5zZXRDb250cm9sbGVy
KHRoaXMpOworfQorCitCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6fkJhdHRlcnlTdGF0dXNDb250
cm9sbGVyKCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5iYXR0ZXJ5
U3RhdHVzQ29udHJvbGxlckRlc3Ryb3llZCgpOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDb250
cm9sbGVyOjphZGRMaXN0ZW5lcihET01XaW5kb3cqIHdpbmRvdykKK3sKKyAgICBib29sIHdhc0Vt
cHR5ID0gbV9saXN0ZW5lcnMuaXNFbXB0eSgpOworCisgICAgbV9saXN0ZW5lcnMuYWRkKHdpbmRv
dyk7CisKKyAgICBpZiAod2FzRW1wdHkpCisgICAgICAgIG1fY2xpZW50LT5zdGFydFVwZGF0aW5n
KCk7Cit9CisKK3ZvaWQgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OnJlbW92ZUxpc3RlbmVyKERP
TVdpbmRvdyogd2luZG93KQoreworICAgIG1fbGlzdGVuZXJzLnJlbW92ZSh3aW5kb3cpOworCisg
ICAgaWYgKG1fbGlzdGVuZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jbGllbnQtPnN0b3BVcGRh
dGluZygpOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjpyZW1vdmVBbGxMaXN0
ZW5lcnMoRE9NV2luZG93KiB3aW5kb3cpCit7CisgICAgaWYgKCFtX2xpc3RlbmVycy5jb250YWlu
cyh3aW5kb3cpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xpc3RlbmVycy5yZW1vdmVBbGwo
d2luZG93KTsKKworICAgIGlmIChtX2xpc3RlbmVycy5pc0VtcHR5KCkpCisgICAgICAgIG1fY2xp
ZW50LT5zdG9wVXBkYXRpbmcoKTsKK30KKwordm9pZCBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6
ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpCit7Cisg
ICAgUmVmUHRyPEJhdHRlcnlTdGF0dXNFdmVudD4gZXZlbnQgPSBCYXR0ZXJ5U3RhdHVzRXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0YmF0dGVyeXN0YXR1c0V2ZW50LCBpc1BsdWdnZWQs
IGxldmVsKTsKKyAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4gPiBsaXN0ZW5lcnNWZWN0b3I7
CisKKyAgICBjb3B5VG9WZWN0b3IobV9saXN0ZW5lcnMsIGxpc3RlbmVyc1ZlY3Rvcik7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnNWZWN0b3Iuc2l6ZSgpOyArK2kpCisgICAg
ICAgIGxpc3RlbmVyc1ZlY3RvcltpXS0+ZGlzcGF0Y2hFdmVudChldmVudCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5
U3RhdHVzQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNDb250
cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE5ZTk2NgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxl
ci5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBF
bGVjdHJvbmljcyBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyAKKyNpZm5kZWYgQmF0
dGVyeVN0YXR1c0NvbnRyb2xsZXJfaAorI2RlZmluZSBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcl9o
CisKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoQ291bnRlZFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJh
dHRlcnlTdGF0dXNDbGllbnQ7CitjbGFzcyBQYWdlOworCitjbGFzcyBCYXR0ZXJ5U3RhdHVzQ29u
dHJvbGxlciB7CitwdWJsaWM6CisgICAgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIoQmF0dGVyeVN0
YXR1c0NsaWVudCopOworICAgIH5CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcigpOworCisgICAgdm9p
ZCBhZGRMaXN0ZW5lcihET01XaW5kb3cqKTsKKyAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKERPTVdp
bmRvdyopOworICAgIHZvaWQgcmVtb3ZlQWxsTGlzdGVuZXJzKERPTVdpbmRvdyopOworCisgICAg
dm9pZCBkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGJvb2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCk7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lzUGx1Z2dlZDsKKyAgICBmbG9hdCBtX2xldmVsOwor
CisgICAgQmF0dGVyeVN0YXR1c0NsaWVudCogbV9jbGllbnQ7CisgICAgdHlwZWRlZiBIYXNoQ291
bnRlZFNldDxSZWZQdHI8RE9NV2luZG93PiA+IExpc3RlbmVyc0NvdW50ZWRTZXQ7CisgICAgTGlz
dGVuZXJzQ291bnRlZFNldCBtX2xpc3RlbmVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEJhdHRlcnlTdGF0dXNDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMDA4ZGZmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0
ZXJ5U3RhdHVzRXZlbnQuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXNFdmVudC5oIgor
CisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0JhdHRl
cnlTdGF0dXNFdmVudDo6QmF0dGVyeVN0YXR1c0V2ZW50KCkKKyAgICA6IEV2ZW50KGV2ZW50TmFt
ZXMoKS53ZWJraXRiYXR0ZXJ5c3RhdHVzRXZlbnQsIGZhbHNlLCB0cnVlKQorICAgICwgbV9pc1Bs
dWdnZWQoZmFsc2UpCisgICAgLCBtX2xldmVsKDApCit7Cit9CisKK0JhdHRlcnlTdGF0dXNFdmVu
dDo6QmF0dGVyeVN0YXR1c0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBib29s
IGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpCisgICAgOiBFdmVudChldmVudFR5cGUsIGZhbHNlLCBm
YWxzZSkKKyAgICAsIG1faXNQbHVnZ2VkKGlzUGx1Z2dlZCkKKyAgICAsIG1fbGV2ZWwobGV2ZWwp
Cit7Cit9CisKK3ZvaWQgQmF0dGVyeVN0YXR1c0V2ZW50Ojppbml0QmF0dGVyeVN0YXR1c0V2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBidWJibGVzLCBib29sIGNhbmNlbGFibGUs
IGJvb2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCkKK3sKKyAgICBpZiAoZGlzcGF0Y2hlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpbml0RXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJs
ZSk7CisKKyAgICBtX2lzUGx1Z2dlZCA9IGlzUGx1Z2dlZDsKKyAgICBtX2xldmVsID0gbGV2ZWw7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5
U3RhdHVzRXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjRhNzM2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVu
dC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBF
bGVjdHJvbmljcyBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0
ZXJ5U3RhdHVzRXZlbnRfaAorI2RlZmluZSBCYXR0ZXJ5U3RhdHVzRXZlbnRfaAorCisjaW5jbHVk
ZSAiRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5U3RhdHVzRXZlbnQgOiBwdWJsaWMgRXZlbnQg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXNFdmVudD4gY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmF0dGVyeVN0YXR1c0V2
ZW50KTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzRXZlbnQ+
IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBpc1BsdWdnZWQsIGZs
b2F0IGxldmVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCYXR0ZXJ5U3Rh
dHVzRXZlbnQoZXZlbnRUeXBlLCBpc1BsdWdnZWQsIGxldmVsKSk7CisgICAgfQorCisgICAgdm9p
ZCBpbml0QmF0dGVyeVN0YXR1c0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBi
dWJibGVzLCBib29sIGNhbmNlbGFibGUsIGJvb2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCk7Cisg
ICAgdmlydHVhbCBib29sIGlzQmF0dGVyeVN0YXR1c0V2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorCisgICAgYm9vbCBpc1BsdWdnZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGx1Z2dlZDsg
fQorICAgIGZsb2F0IGxldmVsKCkgY29uc3QgeyByZXR1cm4gbV9sZXZlbDsgfQorCitwcml2YXRl
OgorICAgIEJhdHRlcnlTdGF0dXNFdmVudCgpOworICAgIEJhdHRlcnlTdGF0dXNFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBpc1BsdWdnZWQsIGZsb2F0IGxldmVsKTsK
KworICAgIGJvb2wgbV9pc1BsdWdnZWQ7CisgICAgZmxvYXQgbV9sZXZlbDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJhdHRlcnlTdGF0dXNFdmVudF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjNiMDViMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmlkbApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKK21vZHVsZSBjb3JlIHsKKworICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExl
dmVsIDM6CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9QkFUVEVSWV9TVEFU
VVMKKyAgICBdIEJhdHRlcnlTdGF0dXNFdmVudCA6IEV2ZW50IHsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIGJvb2xlYW4gIGlzUGx1Z2dlZDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IGZsb2F0ICAgIGxldmVsOworICAgICAgICB2b2lkIGluaXRCYXR0ZXJ5U3RhdHVzRXZlbnQoaW4g
RE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBi
b29sZWFuIGJ1YmJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBi
b29sZWFuIGNhbmNlbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBib29sZWFuIGlzUGx1Z2dlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluIGZsb2F0IGxldmVsKTsKKyAgICB9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL0JhdHRlcnlTdGF0dXNDbGllbnRNb2NrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svQmF0dGVyeVN0YXR1c0NsaWVudE1vY2suY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MjEzYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0JhdHRlcnlTdGF0dXNDbGllbnRNb2NrLmNwcApAQCAt
MCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25p
Y3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jay5oIgorCisjaW5jbHVkZSAiQmF0dGVy
eVN0YXR1c0NvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCYXR0ZXJ5U3Rh
dHVzQ2xpZW50TW9jazo6QmF0dGVyeVN0YXR1c0NsaWVudE1vY2soKQorICAgIDogbV9jb250cm9s
bGVyKDApCisgICAgLCBtX3RpbWVyKHRoaXMsICZCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6dGlt
ZXJGaXJlZCkKKyAgICAsIG1faXNVcGRhdGluZyhmYWxzZSkKK3sKK30KKwordm9pZCBCYXR0ZXJ5
U3RhdHVzQ2xpZW50TW9jazo6c2V0Q29udHJvbGxlcihCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlciog
Y29udHJvbGxlcikKK3sKKyAgICBtX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworfQorCit2b2lk
IEJhdHRlcnlTdGF0dXNDbGllbnRNb2NrOjpzdGFydFVwZGF0aW5nKCkKK3sKKyAgICBtX2lzVXBk
YXRpbmcgPSB0cnVlOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDbGllbnRNb2NrOjpzdG9wVXBk
YXRpbmcoKQoreworICAgIG1faXNVcGRhdGluZyA9IGZhbHNlOworICAgIG1fdGltZXIuc3RvcCgp
OworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDbGllbnRNb2NrOjpzZXRCYXR0ZXJ5U3RhdHVzKGJv
b2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCkKK3sKKyAgICBpZiAobV9sZXZlbCA9PSBsZXZlbCB8
fCBtX2lzUGx1Z2dlZCA9PSBpc1BsdWdnZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNQ
bHVnZ2VkID0gaXNQbHVnZ2VkOworICAgIG1fbGV2ZWwgPSBsZXZlbDsKKworICAgIGlmIChtX2lz
VXBkYXRpbmcgJiYgIW1fdGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90aW1lci5zdGFydE9u
ZVNob3QoMCk7Cit9CisKK3ZvaWQgQmF0dGVyeVN0YXR1c0NsaWVudE1vY2s6OmJhdHRlcnlTdGF0
dXNDb250cm9sbGVyRGVzdHJveWVkKCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBC
YXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6dGltZXJGaXJlZChUaW1lcjxCYXR0ZXJ5U3RhdHVzQ2xp
ZW50TW9jaz4qIHRpbWVyKQoreworICAgIEFTU0VSVF9VTlVTRUQodGltZXIsIHRpbWVyID09ICZt
X3RpbWVyKTsKKyAgICBtX3RpbWVyLnN0b3AoKTsKKyAgICBtX2NvbnRyb2xsZXItPmRpZENoYW5n
ZUJhdHRlcnlTdGF0dXMobV9pc1BsdWdnZWQsIG1fbGV2ZWwpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0JhdHRl
cnlTdGF0dXNDbGllbnRNb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0JhdHRl
cnlTdGF0dXNDbGllbnRNb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NjE5ODRlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
QmF0dGVyeVN0YXR1c0NsaWVudE1vY2suaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzQ2xpZW50LmgiCisKKyNpbmNsdWRlICJU
aW1lci5oIgorCisjaWZuZGVmIEJhdHRlcnlTdGF0dXNDbGllbnRNb2NrX2gKKyNkZWZpbmUgQmF0
dGVyeVN0YXR1c0NsaWVudE1vY2tfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJh
dHRlcnlTdGF0dXNDb250cm9sbGVyOworCitjbGFzcyBCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jayA6
IHB1YmxpYyBCYXR0ZXJ5U3RhdHVzQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBCYXR0ZXJ5U3RhdHVz
Q2xpZW50TW9jaygpOworCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoQmF0dGVyeVN0
YXR1c0NvbnRyb2xsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZygpOworICAg
IHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmF0dGVyeVN0
YXR1c0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmF0dGVyeVN0
YXR1cyhib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpOworCitwcml2YXRlOgorICAgIHZvaWQg
dGltZXJGaXJlZChUaW1lcjxCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jaz4qKTsKKworICAgIEJhdHRl
cnlTdGF0dXNDb250cm9sbGVyKiBtX2NvbnRyb2xsZXI7CisgICAgVGltZXI8QmF0dGVyeVN0YXR1
c0NsaWVudE1vY2s+IG1fdGltZXI7CisgICAgYm9vbCBtX2lzVXBkYXRpbmc7CisgICAgYm9vbCBt
X2lzUGx1Z2dlZDsKKyAgICBmbG9hdCBtX2xldmVsOworCit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9ja19oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98901</attachid>
            <date>2011-06-28 05:21:13 -0700</date>
            <delta_ts>2011-07-06 23:23:36 -0700</delta_ts>
            <desc>Modify for comment #24</desc>
            <filename>patch_batteryClass.patch</filename>
            <type>text/plain</type>
            <size>22409</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZWYyYWJiLi40NmQyZDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUg
QEAKKzIwMTEtMDYtMjggIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBm
b3IgYmF0dGVyeSBzdGF0dXMgZXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgQWRkIE5ldyBDbGFzc2VzIHRvIHRoZSBX
ZWJDb3JlIGZvciBuZXcgRXZlbnQoQmF0dGVyeVN0YXR1c0V2bmV0KQorICAgICAgICAtIEJhdHRl
cnlTdGF0dXMgaXMgYSBiYXNpYyBjbGFzcyBmb3IgZXZlbnQgZGF0YSBoYW5kbGluZy4KKyAgICAg
ICAgLSBCYXR0ZXJ5U3RhdHVzQ2xpZW50IGlzIGEgaW50ZXJmYWNlIGNsYXNzIGZvciBlYWNoIHBv
cnQuCisgICAgICAgIC0gQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIgaXMgYSBjb250cm9sIGNsYXNz
IGJldHdlZW4gY2xpZW50IGFuZCBXZWJDb3JlLgorICAgICAgICAgIHRoaXMgY2xhc3MgaGFzIGEg
ZXZlbnQgbGlzdGVuZXJzIGZvciBCYXR0ZXJ5U3RhdHVzRXZlbnQgaGFuZGxpbmcgCisgICAgICAg
IC0gQmF0dGVyeVN0YXR1c0V2ZW50IGlzIGEgY2xhc3MgZm9yIGhhbmRsaW5nIGV2ZW50CisgICAg
ICAgIC0gQmF0dGVyeVN0YXR1c0NsaWVudE1vY2sgaXMgYSBtb2NrIGNsYXNzIGZvciBjbGluZXQg
cG9ydAorICAgICAgICBBZGQgYmF0dGVyeSBzdGF0dXMgZXZlbnQgdG8gRXZlbnROYW1lLmgKKwor
ICAgICAgICBUZXN0IGNhc2VzIHdpbGwgYmUgYWRkZWQgYXMgc29vbiBhcyBhZnRlciB0aGUgd2hv
bGUgZmVhdHVyZSBpcyBpbXBsZW1lbnRlZAorCisgICAgICAgICogZG9tL0JhdHRlcnlTdGF0dXMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzOjpCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6OmlzUGx1Z2dlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
YXR0ZXJ5U3RhdHVzOjpsZXZlbCk6CisgICAgICAgICogZG9tL0JhdHRlcnlTdGF0dXMuaDogQWRk
ZWQuCisgICAgICAgICogZG9tL0JhdHRlcnlTdGF0dXNDbGllbnQuaDogQWRkZWQuCisgICAgICAg
ICogZG9tL0JhdHRlcnlTdGF0dXNDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6On5CYXR0ZXJ5U3RhdHVz
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6
YWRkTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6
OnJlbW92ZUxpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDb250cm9s
bGVyOjpyZW1vdmVBbGxMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1
c0NvbnRyb2xsZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMpOgorICAgICAgICAqIGRvbS9CYXR0
ZXJ5U3RhdHVzQ29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1
c0V2ZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzRXZlbnQ6
OkJhdHRlcnlTdGF0dXNFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzRXZl
bnQ6OmluaXRCYXR0ZXJ5U3RhdHVzRXZlbnQpOgorICAgICAgICAqIGRvbS9CYXR0ZXJ5U3RhdHVz
RXZlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzRXZlbnQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzRXZlbnQ6OmlzQmF0dGVyeVN0
YXR1c0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNFdmVudDo6aXNQbHVn
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNFdmVudDo6bGV2ZWwpOgorICAg
ICAgICAqIGRvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tb2NrL0JhdHRlcnlTdGF0dXNDbGllbnRNb2NrLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6QmF0dGVyeVN0YXR1c0NsaWVudE1vY2sp
OgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1c0NsaWVudE1vY2s6OnNldENvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1c0NsaWVudE1vY2s6OnN0YXJ0VXBk
YXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1c0NsaWVudE1vY2s6OnN0b3BV
cGRhdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6c2V0
QmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9j
azo6YmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
QmF0dGVyeVN0YXR1c0NsaWVudE1vY2s6OnRpbWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L21vY2svQmF0dGVyeVN0YXR1c0NsaWVudE1vY2suaDogQWRkZWQuCisKIDIwMTEtMDYtMjQgIEdh
dmluIFBldGVycyAgPGdhdmlucEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1cy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyMTcyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzLmNwcApAQCAtMCwwICsxLDYwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYXR0ZXJ5U3Rh
dHVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVz
PiBCYXR0ZXJ5U3RhdHVzOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmF0
dGVyeVN0YXR1cyk7Cit9CisKK1Bhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gQmF0dGVyeVN0YXR1
czo6Y3JlYXRlKGJvb2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEJhdHRlcnlTdGF0dXMoaXNQbHVnZ2VkLCBsZXZlbCkpOworfQorCisKK0JhdHRl
cnlTdGF0dXM6OkJhdHRlcnlTdGF0dXMoKQorICAgIDogbV9pc1BsdWdnZWQoZmFsc2UpCisgICAg
LCBtX2xldmVsKDApCit7Cit9CisKK0JhdHRlcnlTdGF0dXM6OkJhdHRlcnlTdGF0dXMoYm9vbCBp
c1BsdWdnZWQsIGZsb2F0IGxldmVsKQorICAgIDogbV9pc1BsdWdnZWQoaXNQbHVnZ2VkKQorICAg
ICwgbV9sZXZlbChsZXZlbCkKK3sKK30KKworYm9vbCBCYXR0ZXJ5U3RhdHVzOjppc1BsdWdnZWQo
KSBjb25zdAoreworICAgIHJldHVybiBtX2lzUGx1Z2dlZDsKK30KKworZmxvYXQgQmF0dGVyeVN0
YXR1czo6bGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtX2xldmVsOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0
YXR1cy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzg3N2IwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXMuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgQmF0dGVyeVN0YXR1c19oCisjZGVmaW5lIEJhdHRlcnlTdGF0
dXNfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJhdHRlcnlTdGF0dXMgOiBw
dWJsaWMgUmVmQ291bnRlZDxCYXR0ZXJ5U3RhdHVzPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gY3JlYXRlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
QmF0dGVyeVN0YXR1cz4gY3JlYXRlKGJvb2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCk7CisKKyAg
ICBib29sIGlzUGx1Z2dlZCgpIGNvbnN0OworICAgIGZsb2F0IGxldmVsKCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgQmF0dGVyeVN0YXR1cygpOworICAgIEJhdHRlcnlTdGF0dXMoYm9vbCBpc1Bs
dWdnZWQsIGZsb2F0IGxldmVsKTsKKworICAgIGJvb2wgbV9pc1BsdWdnZWQ7CisgICAgZmxvYXQg
bV9sZXZlbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJhdHRl
cnlTdGF0dXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXND
bGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ2xpZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDljMjMyMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ2xpZW50LmgKQEAgLTAsMCArMSwzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEJhdHRlcnlTdGF0dXNDbGllbnRfaAor
I2RlZmluZSBCYXR0ZXJ5U3RhdHVzQ2xpZW50X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjsKKworY2xhc3MgQmF0dGVyeVN0YXR1c0NsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoQmF0dGVyeVN0YXR1
c0NvbnRyb2xsZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
YmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJEZXN0cm95ZWQoKSA9IDA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCYXR0ZXJ5U3RhdHVzQ2xpZW50X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmN2I1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsODEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuCisgKgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJh
dHRlcnlTdGF0dXNDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzQ2xpZW50
LmgiCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1c0V2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyKEJh
dHRlcnlTdGF0dXNDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKKyAg
ICBtX2NsaWVudC0+c2V0Q29udHJvbGxlcih0aGlzKTsKK30KKworQmF0dGVyeVN0YXR1c0NvbnRy
b2xsZXI6On5CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcigpCit7CisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+YmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKK30K
Kwordm9pZCBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6YWRkTGlzdGVuZXIoRE9NV2luZG93KiB3
aW5kb3cpCit7CisgICAgYm9vbCB3YXNFbXB0eSA9IG1fbGlzdGVuZXJzLmlzRW1wdHkoKTsKKwor
ICAgIG1fbGlzdGVuZXJzLmFkZCh3aW5kb3cpOworCisgICAgaWYgKHdhc0VtcHR5KQorICAgICAg
ICBtX2NsaWVudC0+c3RhcnRVcGRhdGluZygpOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDb250
cm9sbGVyOjpyZW1vdmVMaXN0ZW5lcihET01XaW5kb3cqIHdpbmRvdykKK3sKKyAgICBtX2xpc3Rl
bmVycy5yZW1vdmUod2luZG93KTsKKworICAgIGlmIChtX2xpc3RlbmVycy5pc0VtcHR5KCkpCisg
ICAgICAgIG1fY2xpZW50LT5zdG9wVXBkYXRpbmcoKTsKK30KKwordm9pZCBCYXR0ZXJ5U3RhdHVz
Q29udHJvbGxlcjo6cmVtb3ZlQWxsTGlzdGVuZXJzKERPTVdpbmRvdyogd2luZG93KQoreworICAg
IGlmICghbV9saXN0ZW5lcnMuY29udGFpbnMod2luZG93KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9saXN0ZW5lcnMucmVtb3ZlQWxsKHdpbmRvdyk7CisKKyAgICBpZiAobV9saXN0ZW5lcnMu
aXNFbXB0eSgpKQorICAgICAgICBtX2NsaWVudC0+c3RvcFVwZGF0aW5nKCk7Cit9CisKK3ZvaWQg
QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoQmF0dGVyeVN0
YXR1cyogYmF0dGVyeVN0YXR1cykKK3sKKyAgICBSZWZQdHI8QmF0dGVyeVN0YXR1c0V2ZW50PiBl
dmVudCA9IEJhdHRlcnlTdGF0dXNFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRiYXR0
ZXJ5c3RhdHVzRXZlbnQsIGJhdHRlcnlTdGF0dXMtPmlzUGx1Z2dlZCgpLCBiYXR0ZXJ5U3RhdHVz
LT5sZXZlbCgpKTsKKyAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4gPiBsaXN0ZW5lcnNWZWN0
b3I7CisKKyAgICBjb3B5VG9WZWN0b3IobV9saXN0ZW5lcnMsIGxpc3RlbmVyc1ZlY3Rvcik7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnNWZWN0b3Iuc2l6ZSgpOyArK2kpCisg
ICAgICAgIGxpc3RlbmVyc1ZlY3RvcltpXS0+ZGlzcGF0Y2hFdmVudChldmVudCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0
ZXJ5U3RhdHVzQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXND
b250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxZWVhOAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzQ29udHJv
bGxlci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3Vu
ZyBFbGVjdHJvbmljcyBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBC
YXR0ZXJ5U3RhdHVzQ29udHJvbGxlcl9oCisjZGVmaW5lIEJhdHRlcnlTdGF0dXNDb250cm9sbGVy
X2gKKworI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXMuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIK
KyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJhdHRlcnlTdGF0dXNDbGllbnQ7CitjbGFzcyBQ
YWdlOworCitjbGFzcyBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgQmF0
dGVyeVN0YXR1c0NvbnRyb2xsZXIoQmF0dGVyeVN0YXR1c0NsaWVudCopOworICAgIH5CYXR0ZXJ5
U3RhdHVzQ29udHJvbGxlcigpOworCisgICAgdm9pZCBhZGRMaXN0ZW5lcihET01XaW5kb3cqKTsK
KyAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKERPTVdpbmRvdyopOworICAgIHZvaWQgcmVtb3ZlQWxs
TGlzdGVuZXJzKERPTVdpbmRvdyopOworCisgICAgdm9pZCBkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVz
KEJhdHRlcnlTdGF0dXMqKTsKKworcHJpdmF0ZToKKyAgICBib29sIG1faXNQbHVnZ2VkOworICAg
IGZsb2F0IG1fbGV2ZWw7CisKKyAgICBCYXR0ZXJ5U3RhdHVzQ2xpZW50KiBtX2NsaWVudDsKKyAg
ICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PFJlZlB0cjxET01XaW5kb3c+ID4gTGlzdGVuZXJzQ291
bnRlZFNldDsKKyAgICBMaXN0ZW5lcnNDb3VudGVkU2V0IG1fbGlzdGVuZXJzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDhkZmYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4KKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVy
eVN0YXR1c0V2ZW50LmgiCisKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQmF0dGVyeVN0YXR1c0V2ZW50OjpCYXR0ZXJ5U3RhdHVzRXZlbnQoKQorICAg
IDogRXZlbnQoZXZlbnROYW1lcygpLndlYmtpdGJhdHRlcnlzdGF0dXNFdmVudCwgZmFsc2UsIHRy
dWUpCisgICAgLCBtX2lzUGx1Z2dlZChmYWxzZSkKKyAgICAsIG1fbGV2ZWwoMCkKK3sKK30KKwor
QmF0dGVyeVN0YXR1c0V2ZW50OjpCYXR0ZXJ5U3RhdHVzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIGJvb2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCkKKyAgICA6IEV2ZW50KGV2
ZW50VHlwZSwgZmFsc2UsIGZhbHNlKQorICAgICwgbV9pc1BsdWdnZWQoaXNQbHVnZ2VkKQorICAg
ICwgbV9sZXZlbChsZXZlbCkKK3sKK30KKwordm9pZCBCYXR0ZXJ5U3RhdHVzRXZlbnQ6OmluaXRC
YXR0ZXJ5U3RhdHVzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGJ1YmJsZXMs
IGJvb2wgY2FuY2VsYWJsZSwgYm9vbCBpc1BsdWdnZWQsIGZsb2F0IGxldmVsKQoreworICAgIGlm
IChkaXNwYXRjaGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGluaXRFdmVudCh0eXBlLCBi
dWJibGVzLCBjYW5jZWxhYmxlKTsKKworICAgIG1faXNQbHVnZ2VkID0gaXNQbHVnZ2VkOworICAg
IG1fbGV2ZWwgPSBsZXZlbDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjlmNGE3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
QmF0dGVyeVN0YXR1c0V2ZW50LmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIEJhdHRlcnlTdGF0dXNFdmVudF9oCisjZGVmaW5lIEJhdHRlcnlTdGF0dXNF
dmVudF9oCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJhdHRlcnlTdGF0dXNFdmVu
dCA6IHB1YmxpYyBFdmVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmF0dGVy
eVN0YXR1c0V2ZW50PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBCYXR0ZXJ5U3RhdHVzRXZlbnQpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJh
dHRlcnlTdGF0dXNFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBi
b29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEJhdHRlcnlTdGF0dXNFdmVudChldmVudFR5cGUsIGlzUGx1Z2dlZCwgbGV2ZWwpKTsK
KyAgICB9CisKKyAgICB2b2lkIGluaXRCYXR0ZXJ5U3RhdHVzRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBib29sIGJ1YmJsZXMsIGJvb2wgY2FuY2VsYWJsZSwgYm9vbCBpc1BsdWdnZWQs
IGZsb2F0IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNCYXR0ZXJ5U3RhdHVzRXZlbnQoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIGlzUGx1Z2dlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNQbHVnZ2VkOyB9CisgICAgZmxvYXQgbGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2xl
dmVsOyB9CisKK3ByaXZhdGU6CisgICAgQmF0dGVyeVN0YXR1c0V2ZW50KCk7CisgICAgQmF0dGVy
eVN0YXR1c0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBib29sIGlzUGx1Z2dl
ZCwgZmxvYXQgbGV2ZWwpOworCisgICAgYm9vbCBtX2lzUGx1Z2dlZDsKKyAgICBmbG9hdCBtX2xl
dmVsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmF0dGVyeVN0
YXR1c0V2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVz
RXZlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5pZGwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IwNWIwZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuaWRsCkBAIC0wLDAgKzEs
MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMu
CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworbW9kdWxlIGNvcmUgeworCisgICAgLy8gSW50
cm9kdWNlZCBpbiBET00gTGV2ZWwgMzoKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRp
b25hbD1CQVRURVJZX1NUQVRVUworICAgIF0gQmF0dGVyeVN0YXR1c0V2ZW50IDogRXZlbnQgewor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiAgaXNQbHVnZ2VkOworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgICAgbGV2ZWw7CisgICAgICAgIHZvaWQgaW5pdEJhdHRl
cnlTdGF0dXNFdmVudChpbiBET01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluIGJvb2xlYW4gYnViYmxlcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluIGJvb2xlYW4gY2FuY2VsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gaXNQbHVnZ2VkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gZmxvYXQgbGV2ZWwpOworICAgIH07CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQmF0dGVyeVN0YXR1c0NsaWVudE1vY2su
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9CYXR0ZXJ5U3RhdHVzQ2xpZW50TW9j
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmMzkwNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQmF0dGVyeVN0YXR1c0Ns
aWVudE1vY2suY3BwCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
U2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXNDbGllbnRNb2NrLmgiCisK
KyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzLmgiCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1c0NvbnRy
b2xsZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9j
azo6QmF0dGVyeVN0YXR1c0NsaWVudE1vY2soKQorICAgIDogbV9jb250cm9sbGVyKDApCisgICAg
LCBtX3RpbWVyKHRoaXMsICZCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6dGltZXJGaXJlZCkKK3sK
K30KKwordm9pZCBCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6c2V0Q29udHJvbGxlcihCYXR0ZXJ5
U3RhdHVzQ29udHJvbGxlciogY29udHJvbGxlcikKK3sKKyAgICBtX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDbGllbnRNb2NrOjpzdGFydFVwZGF0aW5n
KCkKK3sKKyAgICBtX2lzVXBkYXRpbmcgPSB0cnVlOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXND
bGllbnRNb2NrOjpzdG9wVXBkYXRpbmcoKQoreworICAgIG1faXNVcGRhdGluZyA9IGZhbHNlOwor
ICAgIG1fdGltZXIuc3RvcCgpOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDbGllbnRNb2NrOjpz
ZXRCYXR0ZXJ5U3RhdHVzKFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YXR1cykK
K3sKKyAgICBtX2JhdHRlcnlTdGF0dXMgPSBiYXR0ZXJ5U3RhdHVzOworICAgIGlmIChtX2lzVXBk
YXRpbmcgJiYgIW1fdGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90aW1lci5zdGFydE9uZVNo
b3QoMCk7Cit9CisKK3ZvaWQgQmF0dGVyeVN0YXR1c0NsaWVudE1vY2s6OmJhdHRlcnlTdGF0dXND
b250cm9sbGVyRGVzdHJveWVkKCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBCYXR0
ZXJ5U3RhdHVzQ2xpZW50TW9jazo6dGltZXJGaXJlZChUaW1lcjxCYXR0ZXJ5U3RhdHVzQ2xpZW50
TW9jaz4qIHRpbWVyKQoreworICAgIEFTU0VSVF9VTlVTRUQodGltZXIsIHRpbWVyID09ICZtX3Rp
bWVyKTsKKyAgICBtX3RpbWVyLnN0b3AoKTsKKyAgICBtX2NvbnRyb2xsZXItPmRpZENoYW5nZUJh
dHRlcnlTdGF0dXMobV9iYXR0ZXJ5U3RhdHVzLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9CYXR0ZXJ5
U3RhdHVzQ2xpZW50TW9jay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9CYXR0ZXJ5
U3RhdHVzQ2xpZW50TW9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUx
ZDE0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0Jh
dHRlcnlTdGF0dXNDbGllbnRNb2NrLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1cy5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0
dXNDbGllbnQuaCJzCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmbmRlZiBCYXR0ZXJ5U3RhdHVzQ2xp
ZW50TW9ja19oCisjZGVmaW5lIEJhdHRlcnlTdGF0dXNDbGllbnRNb2NrX2gKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjsKKworY2xhc3MgQmF0
dGVyeVN0YXR1c0NsaWVudE1vY2sgOiBwdWJsaWMgQmF0dGVyeVN0YXR1c0NsaWVudCB7CitwdWJs
aWM6CisgICAgQmF0dGVyeVN0YXR1c0NsaWVudE1vY2soKTsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250cm9sbGVyKEJhdHRlcnlTdGF0dXNDb250cm9sbGVyKik7CisgICAgdmlydHVhbCB2b2lk
IHN0YXJ0VXBkYXRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCk7CisgICAg
dmlydHVhbCB2b2lkIGJhdHRlcnlTdGF0dXNDb250cm9sbGVyRGVzdHJveWVkKCk7CisgICAgdmly
dHVhbCB2b2lkIHNldEJhdHRlcnlTdGF0dXMoUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPik7CisK
K3ByaXZhdGU6CisgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEJhdHRlcnlTdGF0dXNDbGllbnRN
b2NrPiopOworCisgICAgUmVmUHRyPEJhdHRlcnlTdGF0dXM+IG1fYmF0dGVyeVN0YXR1czsKKyAg
ICBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgIFRpbWVyPEJhdHRl
cnlTdGF0dXNDbGllbnRNb2NrPiBtX3RpbWVyOworICAgIGJvb2wgbV9pc1VwZGF0aW5nOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmF0dGVyeVN0YXR1c0NsaWVu
dE1vY2tfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99940</attachid>
            <date>2011-07-06 23:23:36 -0700</date>
            <delta_ts>2012-03-01 05:13:15 -0800</delta_ts>
            <desc>Add events for the revised spec.</desc>
            <filename>patchBattery.patch</filename>
            <type>text/plain</type>
            <size>22500</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZWYyYWJiLi5hMDI2MDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAg
QEAKKzIwMTEtMDctMDYgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBm
b3IgYmF0dGVyeSBzdGF0dXMgZXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgVGVzdCBjYXNlcyB3aWxsIGJlIGFkZGVk
IGFzIHNvb24gYXMgYWZ0ZXIgdGhlIHdob2xlIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQKKworICAg
ICAgICAqIGRvbS9CYXR0ZXJ5U3RhdHVzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpC
YXR0ZXJ5U3RhdHVzOjpjcmVhdGUpOiBDcmVhdGUgZGF0YSBvYmplY3QgZm9yIHRoZSBCYXR0ZXJ5
IFN0YXR1cyBFdmVudC4KKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6OkJhdHRlcnlT
dGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1czo6aXNQbHVnZ2VkKTogZ2V0
dGVyIGZvciBtX2lzUGx1Z2dlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6Omxl
dmVsKTogZ2V0dGVyIGZvciBtX2xldmVsLgorICAgICAgICAqIGRvbS9CYXR0ZXJ5U3RhdHVzLmg6
IEFkZGVkLgorICAgICAgICAtIENsYXNzIEJhdHRlcnkgU3RhdHVzIGhhbmRsZXMgZGF0YSBmb3Ig
dGhlIEJhdHRlcnkgU3RhdHVzIEV2ZW50CisKKyAgICAgICAgKiBkb20vQmF0dGVyeVN0YXR1c0Ns
aWVudC5oOiBBZGRlZC4gSW50ZXJmYWNlIGZvciBhbGwgcG9ydHMuCisKKyAgICAgICAgKiBkb20v
QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJh
dHRlcnlTdGF0dXNDb250cm9sbGVyOjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6fkJhdHRlcnlTdGF0dXNDb250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjphZGRMaXN0
ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6cmVtb3Zl
TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OnJl
bW92ZUFsbExpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ29udHJv
bGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyk6IERpc3BhdGNocyB0aGUgZXZlbnQuIAorICAg
ICAgICAtIElmIGJhdHRlcnkgc3RhdHVzIGlzIGxvdyBvciBjcml0aWNhbCwgCisgICAgICAgIC0g
VGhlcmUgd2lsbCBiZSB0d28gZXZlbnRzIGRpc3BhdGNoZWQgYmF0dGVyeXN0YXR1cyBhbmQgYmF0
dGVyeWxvdyhiYXR0ZXJ5Y3JpdGljYWwpCisgICAgICAgICogZG9tL0JhdHRlcnlTdGF0dXNDb250
cm9sbGVyLmg6IEFkZGVkLgorCisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ29udHJv
bGxlcjo6c2V0QmF0dGVyeUxvd0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0
dXNDb250cm9sbGVyOjpzZXRCYXR0ZXJ5Q3JpdGljYWxMZXZlbCk6CisgICAgICAgIC0gVGhlIGJh
dHRlcnlsb3dldmVudC9iYXR0ZXJ5Y3JpdGljYWxldmVudCBpcyBvY2N1cmVkIGJ5IGxvdy9jcml0
aWNhbCBsZXZlbCB2YWx1ZSB3aGljaCBpcyBzZXQuCisKKyAgICAgICAgKiBkb20vQmF0dGVyeVN0
YXR1c0V2ZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzRXZl
bnQ6OkJhdHRlcnlTdGF0dXNFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVz
RXZlbnQ6OmluaXRCYXR0ZXJ5U3RhdHVzRXZlbnQpOgorICAgICAgICAqIGRvbS9CYXR0ZXJ5U3Rh
dHVzRXZlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzRXZlbnQ6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzRXZlbnQ6OmlzQmF0dGVy
eVN0YXR1c0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNFdmVudDo6aXNQ
bHVnZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNFdmVudDo6bGV2ZWwpOgor
ICAgICAgICAqIGRvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuaWRsOiBBZGRlZC4KKyAgICAgICAgLSBU
aGUgQmF0dGVyeSBTdGF0dXMgRXZlbnQgQ2xhc3MKKworICAgICAgICAqIGRvbS9FdmVudE5hbWVz
Lmg6IEFkZCBiYXR0ZXJ5c3RhdHVzIC8gYmF0dGVyeWxvdyAvIGJhdHRlcnljcml0aWNhbCBFdmVu
dHMKKworICAgICAgICAqIHBsYXRmb3JtL21vY2svQmF0dGVyeVN0YXR1c0NsaWVudE1vY2suY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDbGllbnRNb2NrOjpCYXR0
ZXJ5U3RhdHVzQ2xpZW50TW9jayk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xp
ZW50TW9jazo6c2V0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVz
Q2xpZW50TW9jazo6c3RhcnRVcGRhdGluZyk6IEJlZ2luaW5nIHRvIGdhdGhlciB0aGUgYmF0dGVy
eSBzdGF0dXMuCisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6c3Rv
cFVwZGF0aW5nKTogRmluaXNoIHRvIGdhdGhlciB0aGUgYmF0dGVyeSBzdGF0dXMuCisgICAgICAg
IChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6c2V0QmF0dGVyeVN0YXR1cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50TW9jazo6c2V0QmF0dGVyeUxvd0xl
dmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXNDbGllbnRNb2NrOjpzZXRCYXR0
ZXJ5Q3JpdGljYWxMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzQ2xpZW50
TW9jazo6aXNVcGRhdGluZyk6IENhbiBjaGVjayBjdXJyZW50IGV2ZW50IHN0YXR1cyBieSBtX2lz
VXBkYXRpbmcKKwogMjAxMS0wNi0yNCAgR2F2aW4gUGV0ZXJzICA8Z2F2aW5wQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0
ZXJ5U3RhdHVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTIxNzIx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXMuY3Bw
CkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVj
dHJvbmljcyBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IEJhdHRlcnlTdGF0dXM6OmNyZWF0ZSgpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCYXR0ZXJ5U3RhdHVzKTsKK30KKworUGFzc1JlZlB0cjxC
YXR0ZXJ5U3RhdHVzPiBCYXR0ZXJ5U3RhdHVzOjpjcmVhdGUoYm9vbCBpc1BsdWdnZWQsIGZsb2F0
IGxldmVsKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmF0dGVyeVN0YXR1cyhpc1BsdWdn
ZWQsIGxldmVsKSk7Cit9CisKKworQmF0dGVyeVN0YXR1czo6QmF0dGVyeVN0YXR1cygpCisgICAg
OiBtX2lzUGx1Z2dlZChmYWxzZSkKKyAgICAsIG1fbGV2ZWwoMCkKK3sKK30KKworQmF0dGVyeVN0
YXR1czo6QmF0dGVyeVN0YXR1cyhib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpCisgICAgOiBt
X2lzUGx1Z2dlZChpc1BsdWdnZWQpCisgICAgLCBtX2xldmVsKGxldmVsKQoreworfQorCitib29s
IEJhdHRlcnlTdGF0dXM6OmlzUGx1Z2dlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faXNQbHVn
Z2VkOworfQorCitmbG9hdCBCYXR0ZXJ5U3RhdHVzOjpsZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fbGV2ZWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0
dGVyeVN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjODc3YjAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1cy5oCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJv
bmljcyBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0ZXJ5U3Rh
dHVzX2gKKyNkZWZpbmUgQmF0dGVyeVN0YXR1c19oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQmF0dGVyeVN0YXR1cyA6IHB1YmxpYyBSZWZDb3VudGVkPEJhdHRlcnlTdGF0dXM+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBjcmVhdGUo
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBjcmVhdGUoYm9vbCBpc1Bs
dWdnZWQsIGZsb2F0IGxldmVsKTsKKworICAgIGJvb2wgaXNQbHVnZ2VkKCkgY29uc3Q7CisgICAg
ZmxvYXQgbGV2ZWwoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5U3RhdHVzKCk7Cisg
ICAgQmF0dGVyeVN0YXR1cyhib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpOworCisgICAgYm9v
bCBtX2lzUGx1Z2dlZDsKKyAgICBmbG9hdCBtX2xldmVsOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQmF0dGVyeVN0YXR1c19oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0NsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Jh
dHRlcnlTdGF0dXNDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5h
NjllYjFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0
dXNDbGllbnQuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNh
bXN1bmcgRWxlY3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgQmF0dGVyeVN0YXR1c0NsaWVudF9oCisjZGVmaW5lIEJhdHRlcnlTdGF0dXNDbGllbnRfaAor
CisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBCYXR0ZXJ5U3RhdHVzOworCitjbGFzcyBCYXR0ZXJ5U3RhdHVzQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJvbGxlcihCYXR0ZXJ5U3RhdHVz
Q29udHJvbGxlciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZyhCYXR0ZXJ5
U3RhdHVzRXZlbnRUeXBlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZyhCYXR0
ZXJ5U3RhdHVzRXZlbnRUeXBlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJhdHRlcnlTdGF0dXND
b250cm9sbGVyRGVzdHJveWVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRCYXR0ZXJ5U3Rh
dHVzKFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRCYXR0ZXJ5TG93TGV2ZWwoZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmF0dGVy
eUNyaXRpY2FsTGV2ZWwoZmxvYXQpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1VwZGF0aW5n
KEJhdHRlcnlTdGF0dXNFdmVudFR5cGUpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEJhdHRlcnlTdGF0dXNDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMGY1NGQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9CYXR0ZXJ5U3RhdHVzQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuCisgKgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0
dXNDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzQ2xpZW50LmgiCisjaW5j
bHVkZSAiQmF0dGVyeVN0YXR1c0V2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQmF0
dGVyeVN0YXR1c0NvbnRyb2xsZXI6OkJhdHRlcnlTdGF0dXNDb250cm9sbGVyKEJhdHRlcnlTdGF0
dXNDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fbG93TGV2ZWwoMTUpCisgICAgLCBtX2NyaXRpY2Fs
TGV2ZWwoNSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKK3sKKyAgICBtX2NsaWVudC0+c2V0Q29u
dHJvbGxlcih0aGlzKTsKK30KKworQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OkJhdHRlcnlTdGF0
dXNDb250cm9sbGVyKEJhdHRlcnlTdGF0dXNDbGllbnQqIGNsaWVudCwgZmxvYXQgYmF0dGVyeUxv
d0xldmVsLCBmbG9hdCBiYXR0ZXJ5Q3JpdGljYWxMZXZlbCkKKyAgICA6IG1fbG93TGV2ZWwoYmF0
dGVyeUxvd0xldmVsKQorICAgICwgbV9jcml0aWNhbExldmVsKGJhdHRlcnlDcml0aWNhbExldmVs
KQorICAgICwgbV9jbGllbnQoY2xpZW50KQoreworICAgIG1fY2xpZW50LT5zZXRDb250cm9sbGVy
KHRoaXMpOworfQorCitCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlcjo6fkJhdHRlcnlTdGF0dXNDb250
cm9sbGVyKCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5iYXR0ZXJ5
U3RhdHVzQ29udHJvbGxlckRlc3Ryb3llZCgpOworfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDb250
cm9sbGVyOjphZGRMaXN0ZW5lcihET01XaW5kb3cqIHdpbmRvdywgY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUpCit7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0
YmF0dGVyeXN0YXR1c0V2ZW50KSB7CisgICAgICAgIG1fYmF0dGVyeVN0YXR1c0xpc3RlbmVycy5h
ZGQod2luZG93KTsKKyAgICAgICAgaWYgKCFtX2NsaWVudC0+aXNVcGRhdGluZyhiYXR0ZXJ5U3Rh
dHVzRXZlbnQpKQorICAgICAgICAgICAgbV9jbGllbnQtPnN0YXJ0VXBkYXRpbmcoYmF0dGVyeVN0
YXR1c0V2ZW50KTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Vi
a2l0YmF0dGVyeWxvd0V2ZW50KSB7CisgICAgICAgIG1fYmF0dGVyeUxvd0xpc3RlbmVycy5hZGQo
d2luZG93KTsKKyAgICAgICAgaWYgKCFtX2NsaWVudC0+aXNVcGRhdGluZyhiYXR0ZXJ5TG93RXZl
bnQpKQorICAgICAgICAgICAgbV9jbGllbnQtPnN0YXJ0VXBkYXRpbmcoYmF0dGVyeUxvd0V2ZW50
KTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0YmF0dGVy
eWNyaXRpY2FsRXZlbnQpIHsKKyAgICAgICAgbV9iYXR0ZXJ5Q3JpaWNhbExpc3RlbmVycy5hZGQo
d2luZG93KTsKKyAgICAgICAgaWYgKCFtX2NsaWVudC0+aXNVcGRhdGluZyhiYXR0ZXJ5Q3JpdGlj
YWxFdmVudCkpCisgICAgICAgICAgICBtX2NsaWVudC0+c3RhcnRVcGRhdGluZyhiYXR0ZXJ5Q3Jp
dGljYWxFdmVudCk7CisgICAgfQorfQorCit2b2lkIEJhdHRlcnlTdGF0dXNDb250cm9sbGVyOjpy
ZW1vdmVMaXN0ZW5lcihET01XaW5kb3cqIHdpbmRvdywgY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUpCit7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0YmF0dGVy
eXN0YXR1c0V2ZW50KSB7CisgICAgICAgIG1fYmF0dGVyeVN0YXR1c0xpc3RlbmVycy5yZW1vdmUo
d2luZG93KTsKKyAgICAgICAgaWYgKG1fYmF0dGVyeVN0YXR1c0xpc3RlbmVycy5pc0VtcHR5KCkp
CisgICAgICAgICAgICBtX2NsaWVudC0+c3RvcFVwZGF0aW5nKGJhdHRlcnlTdGF0dXNFdmVudCk7
CisgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndlYmtpdGJhdHRlcnls
b3dFdmVudCkgeworICAgICAgICBtX2JhdHRlcnlMb3dMaXN0ZW5lcnMucmVtb3ZlKHdpbmRvdyk7
CisgICAgICAgIGlmIChtX2JhdHRlcnlMb3dMaXN0ZW5lcnMuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgbV9jbGllbnQtPnN0b3BVcGRhdGluZyhiYXR0ZXJ5TG93RXZlbnQpOworICAgIH0gZWxzZSBp
ZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRiYXR0ZXJ5Y3JpdGljYWxFdmVudCkg
eworICAgICAgICBtX2JhdHRlcnlDcmlpY2FsTGlzdGVuZXJzLnJlbW92ZSh3aW5kb3cpOworICAg
ICAgICBpZiAobV9iYXR0ZXJ5Q3JpaWNhbExpc3RlbmVycy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBtX2NsaWVudC0+c3RvcFVwZGF0aW5nKGJhdHRlcnlDcml0aWNhbEV2ZW50KTsKKyAgICB9Cit9
CisKK3ZvaWQgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OnJlbW92ZUFsbExpc3RlbmVycyhET01X
aW5kb3cqIHdpbmRvdykKK3sKKyAgICBpZiAobV9iYXR0ZXJ5U3RhdHVzTGlzdGVuZXJzLmNvbnRh
aW5zKHdpbmRvdykpIHsKKyAgICAgICAgbV9iYXR0ZXJ5U3RhdHVzTGlzdGVuZXJzLnJlbW92ZUFs
bCh3aW5kb3cpOworICAgICAgICBtX2NsaWVudC0+c3RvcFVwZGF0aW5nKGJhdHRlcnlTdGF0dXNF
dmVudCk7CisgICAgfSBlbHNlIGlmIChtX2JhdHRlcnlMb3dMaXN0ZW5lcnMuY29udGFpbnMod2lu
ZG93KSkgeworICAgICAgICBtX2JhdHRlcnlMb3dMaXN0ZW5lcnMucmVtb3ZlQWxsKHdpbmRvdyk7
CisgICAgICAgIG1fY2xpZW50LT5zdG9wVXBkYXRpbmcoYmF0dGVyeUxvd0V2ZW50KTsKKyAgICB9
IGVsc2UgaWYgKG1fYmF0dGVyeUNyaWljYWxMaXN0ZW5lcnMuY29udGFpbnMod2luZG93KSkgewor
ICAgICAgICBtX2JhdHRlcnlDcmlpY2FsTGlzdGVuZXJzLnJlbW92ZUFsbCh3aW5kb3cpOworICAg
ICAgICBtX2NsaWVudC0+c3RvcFVwZGF0aW5nKGJhdHRlcnlDcml0aWNhbEV2ZW50KTsKKyAgICB9
Cit9CisKK3ZvaWQgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0
dXMoQmF0dGVyeVN0YXR1cyogYmF0dGVyeVN0YXR1cykKK3sKKyAgICBSZWZQdHI8QmF0dGVyeVN0
YXR1c0V2ZW50PiBldmVudDsKKyAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4gPiBsaXN0ZW5l
cnNWZWN0b3I7CisKKyAgICBpZiAobV9jbGllbnQtPmlzVXBkYXRpbmcoYmF0dGVyeVN0YXR1c0V2
ZW50KSkgeworICAgICAgICBldmVudCA9IEJhdHRlcnlTdGF0dXNFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS53ZWJraXRiYXR0ZXJ5c3RhdHVzRXZlbnQsIGJhdHRlcnlTdGF0dXMtPmlzUGx1Z2dl
ZCgpLCBiYXR0ZXJ5U3RhdHVzLT5sZXZlbCgpKTsKKworICAgICAgICBjb3B5VG9WZWN0b3IobV9i
YXR0ZXJ5U3RhdHVzTGlzdGVuZXJzLCBsaXN0ZW5lcnNWZWN0b3IpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxpc3RlbmVyc1ZlY3Rvci5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IGxpc3RlbmVyc1ZlY3RvcltpXS0+ZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgfQorICAgIGlm
IChiYXR0ZXJ5U3RhdHVzLT5sZXZlbCgpIDw9IG1fY3JpdGljYWxMZXZlbCAmJiBtX2NsaWVudC0+
aXNVcGRhdGluZyhiYXR0ZXJ5Q3JpdGljYWxFdmVudCkpIHsKKyAgICAgICAgZXZlbnQgPSBCYXR0
ZXJ5U3RhdHVzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0YmF0dGVyeWNyaXRpY2Fs
RXZlbnQsIGJhdHRlcnlTdGF0dXMtPmlzUGx1Z2dlZCgpLCBiYXR0ZXJ5U3RhdHVzLT5sZXZlbCgp
KTsKKworICAgICAgICBjb3B5VG9WZWN0b3IobV9iYXR0ZXJ5Q3JpaWNhbExpc3RlbmVycywgbGlz
dGVuZXJzVmVjdG9yKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnNW
ZWN0b3Iuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBsaXN0ZW5lcnNWZWN0b3JbaV0tPmRpc3Bh
dGNoRXZlbnQoZXZlbnQpOworICAgIH0gZWxzZSBpZiAoYmF0dGVyeVN0YXR1cy0+bGV2ZWwoKSA8
PSBtX2xvd0xldmVsICYmIG1fY2xpZW50LT5pc1VwZGF0aW5nKGJhdHRlcnlMb3dFdmVudCkpIHsK
KyAgICAgICAgZXZlbnQgPSBCYXR0ZXJ5U3RhdHVzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
d2Via2l0YmF0dGVyeWxvd0V2ZW50LCBiYXR0ZXJ5U3RhdHVzLT5pc1BsdWdnZWQoKSwgYmF0dGVy
eVN0YXR1cy0+bGV2ZWwoKSk7CisKKyAgICAgICAgY29weVRvVmVjdG9yKG1fYmF0dGVyeUxvd0xp
c3RlbmVycywgbGlzdGVuZXJzVmVjdG9yKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsaXN0ZW5lcnNWZWN0b3Iuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBsaXN0ZW5lcnNWZWN0
b3JbaV0tPmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmQ2NTI3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNDb250cm9sbGVyLmgKQEAgLTAs
MCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNz
IEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEJhdHRlcnlTdGF0dXND
b250cm9sbGVyX2gKKyNkZWZpbmUgQmF0dGVyeVN0YXR1c0NvbnRyb2xsZXJfaAorCisjaW5jbHVk
ZSAiQmF0dGVyeVN0YXR1cy5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIlRp
bWVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQmF0dGVyeVN0YXR1c0NsaWVudDsKK2NsYXNzIFBhZ2U7CisKK2VudW0g
QmF0dGVyeVN0YXR1c0V2ZW50VHlwZSB7IGJhdHRlcnlTdGF0dXNFdmVudCwgYmF0dGVyeUxvd0V2
ZW50LCBiYXR0ZXJ5Q3JpdGljYWxFdmVudCwgYmF0dGVyeVN0YXR1c0V2ZW50VHlwZUVuZCB9Owor
CitjbGFzcyBCYXR0ZXJ5U3RhdHVzQ29udHJvbGxlciB7CisKK3B1YmxpYzoKKyAgICBCYXR0ZXJ5
U3RhdHVzQ29udHJvbGxlcihCYXR0ZXJ5U3RhdHVzQ2xpZW50Kik7CisgICAgQmF0dGVyeVN0YXR1
c0NvbnRyb2xsZXIoQmF0dGVyeVN0YXR1c0NsaWVudCosIGZsb2F0IGJhdHRlcnlMb3dMZXZlbCwg
ZmxvYXQgYmF0dGVyeUNyaXRpY2FsTGV2ZWwpOworCisgICAgfkJhdHRlcnlTdGF0dXNDb250cm9s
bGVyKCk7CisKKyAgICB2b2lkIGFkZExpc3RlbmVyKERPTVdpbmRvdyosIGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlKTsKKyAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKERPTVdpbmRvdyosIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICB2b2lkIHJlbW92ZUFsbExpc3RlbmVy
cyhET01XaW5kb3cqKTsKKworICAgIHZvaWQgZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhCYXR0ZXJ5
U3RhdHVzKik7CisgICAgdm9pZCBzZXRCYXR0ZXJ5TG93TGV2ZWwoZmxvYXQgbGV2ZWwpIHsgbV9s
b3dMZXZlbCA9IGxldmVsOyB9CisgICAgdm9pZCBzZXRCYXR0ZXJ5Q3JpdGljYWxMZXZlbChmbG9h
dCBsZXZlbCkgeyBtX2NyaXRpY2FsTGV2ZWwgPSBsZXZlbDsgfQorCitwcml2YXRlOgorICAgIGJv
b2wgbV9pc1BsdWdnZWQ7CisgICAgZmxvYXQgbV9sZXZlbDsKKyAgICBmbG9hdCBtX2xvd0xldmVs
OworICAgIGZsb2F0IG1fY3JpdGljYWxMZXZlbDsKKworICAgIEJhdHRlcnlTdGF0dXNDbGllbnQq
IG1fY2xpZW50OworICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPERPTVdpbmRvdz4g
PiBMaXN0ZW5lcnNDb3VudGVkU2V0OworICAgIExpc3RlbmVyc0NvdW50ZWRTZXQgbV9iYXR0ZXJ5
U3RhdHVzTGlzdGVuZXJzOworICAgIExpc3RlbmVyc0NvdW50ZWRTZXQgbV9iYXR0ZXJ5TG93TGlz
dGVuZXJzOworICAgIExpc3RlbmVyc0NvdW50ZWRTZXQgbV9iYXR0ZXJ5Q3JpaWNhbExpc3RlbmVy
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJhdHRlcnlTdGF0
dXNDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3Rh
dHVzRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4ZGZmMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuY3BwCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBJ
bmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkJhdHRlcnlTdGF0dXNFdmVudC5oIgorCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0JhdHRlcnlTdGF0dXNFdmVudDo6QmF0dGVyeVN0YXR1
c0V2ZW50KCkKKyAgICA6IEV2ZW50KGV2ZW50TmFtZXMoKS53ZWJraXRiYXR0ZXJ5c3RhdHVzRXZl
bnQsIGZhbHNlLCB0cnVlKQorICAgICwgbV9pc1BsdWdnZWQoZmFsc2UpCisgICAgLCBtX2xldmVs
KDApCit7Cit9CisKK0JhdHRlcnlTdGF0dXNFdmVudDo6QmF0dGVyeVN0YXR1c0V2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBib29sIGlzUGx1Z2dlZCwgZmxvYXQgbGV2ZWwpCisg
ICAgOiBFdmVudChldmVudFR5cGUsIGZhbHNlLCBmYWxzZSkKKyAgICAsIG1faXNQbHVnZ2VkKGlz
UGx1Z2dlZCkKKyAgICAsIG1fbGV2ZWwobGV2ZWwpCit7Cit9CisKK3ZvaWQgQmF0dGVyeVN0YXR1
c0V2ZW50Ojppbml0QmF0dGVyeVN0YXR1c0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwg
Ym9vbCBidWJibGVzLCBib29sIGNhbmNlbGFibGUsIGJvb2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZl
bCkKK3sKKyAgICBpZiAoZGlzcGF0Y2hlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbml0
RXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSk7CisKKyAgICBtX2lzUGx1Z2dlZCA9IGlz
UGx1Z2dlZDsKKyAgICBtX2xldmVsID0gbGV2ZWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVzRXZlbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjRhNzM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0JhdHRlcnlTdGF0dXNFdmVudC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuCisgKgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0ZXJ5U3RhdHVzRXZlbnRfaAorI2RlZmluZSBC
YXR0ZXJ5U3RhdHVzRXZlbnRfaAorCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCYXR0
ZXJ5U3RhdHVzRXZlbnQgOiBwdWJsaWMgRXZlbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEJhdHRlcnlTdGF0dXNFdmVudD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQmF0dGVyeVN0YXR1c0V2ZW50KTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSwgYm9vbCBpc1BsdWdnZWQsIGZsb2F0IGxldmVsKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBCYXR0ZXJ5U3RhdHVzRXZlbnQoZXZlbnRUeXBlLCBpc1BsdWdn
ZWQsIGxldmVsKSk7CisgICAgfQorCisgICAgdm9pZCBpbml0QmF0dGVyeVN0YXR1c0V2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBidWJibGVzLCBib29sIGNhbmNlbGFibGUsIGJv
b2wgaXNQbHVnZ2VkLCBmbG9hdCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGlzQmF0dGVyeVN0
YXR1c0V2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBpc1BsdWdnZWQo
KSBjb25zdCB7IHJldHVybiBtX2lzUGx1Z2dlZDsgfQorICAgIGZsb2F0IGxldmVsKCkgY29uc3Qg
eyByZXR1cm4gbV9sZXZlbDsgfQorCitwcml2YXRlOgorICAgIEJhdHRlcnlTdGF0dXNFdmVudCgp
OworICAgIEJhdHRlcnlTdGF0dXNFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
Ym9vbCBpc1BsdWdnZWQsIGZsb2F0IGxldmVsKTsKKworICAgIGJvb2wgbV9pc1BsdWdnZWQ7Cisg
ICAgZmxvYXQgbV9sZXZlbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEJhdHRlcnlTdGF0dXNFdmVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
QmF0dGVyeVN0YXR1c0V2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CYXR0ZXJ5U3RhdHVz
RXZlbnQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMDViMGUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQmF0dGVyeVN0YXR1c0V2ZW50Lmlk
bApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxl
Y3Ryb25pY3MgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKK21vZHVsZSBjb3JlIHsK
KworICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDM6CisgICAgaW50ZXJmYWNlIFsKKyAg
ICAgICAgQ29uZGl0aW9uYWw9QkFUVEVSWV9TVEFUVVMKKyAgICBdIEJhdHRlcnlTdGF0dXNFdmVu
dCA6IEV2ZW50IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gIGlzUGx1Z2dl
ZDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0ICAgIGxldmVsOworICAgICAgICB2
b2lkIGluaXRCYXR0ZXJ5U3RhdHVzRXZlbnQoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGJ1YmJsZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbmNlbGFibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGlzUGx1Z2dlZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGZsb2F0IGxldmVsKTsKKyAgICB9Owor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAppbmRleCA5ZGQxODM3Li40YjU3ZTdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudE5hbWVzLmgKQEAgLTE4MCw2ICsxODAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIFwKICAgICBtYWNybyhhdWRpb3Byb2Nlc3MpIFwKICAgICBcCisgICAgbWFjcm8od2Vi
a2l0YmF0dGVyeXN0YXR1cykgXAorICAgIG1hY3JvKHdlYmtpdGJhdHRlcnlsb3cpIFwKKyAgICBt
YWNybyh3ZWJraXRiYXR0ZXJ5Y3JpdGljYWwpIFwKKyAgICBcCiAvLyBlbmQgb2YgRE9NX0VWRU5U
X05BTUVTX0ZPUl9FQUNICiAKICAgICBjbGFzcyBFdmVudE5hbWVzIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129681</attachid>
            <date>2012-03-01 05:13:15 -0800</date>
            <delta_ts>2012-03-01 21:37:21 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>battery.patch</filename>
            <type>text/plain</type>
            <size>72521</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYWRkLWxpc3Rl
bmVyLWZyb20tY2FsbGJhY2stZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIxNDdkZQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2Fs
bGJhY2stZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjEgQEAKK1Rlc3RzIHRoYXQgYWRkaW5nIGEg
bmV3IGV2ZW50IGxpc3RlbmVyIGZyb20gYSBjYWxsYmFjayB3b3JrcyBhcyBleHBlY3RlZC4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBpcyBt
b2NrQ2hhcmdpbmcKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZ1RpbWUgaXMgbW9ja0NoYXJnaW5nVGlt
ZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBtb2NrRGlzY2hhcmdpbmdUaW1lCitQ
QVNTIGJhdHRlcnkubGV2ZWwgaXMgbW9ja0xldmVsCitQQVNTIGJhdHRlcnkuY2hhcmdpbmcgaXMg
bW9ja0NoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIG1vY2tDaGFyZ2luZ1Rp
bWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgbW9ja0Rpc2NoYXJnaW5nVGltZQor
UEFTUyBiYXR0ZXJ5LmxldmVsIGlzIG1vY2tMZXZlbAorUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlz
IG1vY2tDaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBtb2NrQ2hhcmdpbmdU
aW1lCitQQVNTIGJhdHRlcnkuZGlzY2hhcmdpbmdUaW1lIGlzIG1vY2tEaXNjaGFyZ2luZ1RpbWUK
K1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBtb2NrTGV2ZWwKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9CYXR0ZXJ5U3RhdHVzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNr
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkOTk4NAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYWRkLWxpc3Rl
bmVyLWZyb20tY2FsbGJhY2suaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9hZGQtbGlzdGVuZXIt
ZnJvbS1jYWxsYmFjay5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2Jhc2ljLW9wZXJhdGlvbi1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2Jhc2ljLW9w
ZXJhdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZDM5YmUzYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlT
dGF0dXMvYmFzaWMtb3BlcmF0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitUZXN0
cyB0aGUgYmFzaWMgb3BlcmF0aW9uIG9mIEJhdHRlcnlTdGF0dXMgdXNpbmcgdGhlIG1vY2suCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGJhdHRlcnkuY2hhcmdpbmcgaXMg
bW9ja0NoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIG1vY2tDaGFyZ2luZ1Rp
bWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgbW9ja0Rpc2NoYXJnaW5nVGltZQor
UEFTUyBiYXR0ZXJ5LmxldmVsIGlzIG1vY2tMZXZlbAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL0JhdHRlcnlTdGF0dXMvYmFzaWMtb3BlcmF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9CYXR0ZXJ5U3RhdHVzL2Jhc2ljLW9wZXJhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjkxNTdiZTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2Jhc2ljLW9wZXJhdGlvbi5odG1sCkBAIC0wLDAgKzEs
OSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL2Jhc2ljLW9wZXJhdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2V2ZW50
LWFmdGVyLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTZiYzM5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK1Rlc3RzIGZvciBhIGNyYXNoIHdoZXJlIGFuIGV2
ZW50IGlzIGZpcmVkIGFmdGVyIHRoZSBwYWdlIGhhcyBiZWVuIG5hdmlnYXRlZCBhd2F5IHdoZW4g
dGhlIG9yaWdpbmFsIHBhZ2UgaXMgaW4gdGhlIHBhZ2UgY2FjaGUuCisKK1NVQ0NFU1MKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvZXZlbnQtYWZ0ZXItbmF2
aWdhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9ldmVudC1h
ZnRlci1uYXZpZ2F0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NzA1N2FlZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlT
dGF0dXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2V2
ZW50LWFmdGVyLW5hdmlnYXRpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9tdWx0aXBsZS1m
cmFtZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9t
dWx0aXBsZS1mcmFtZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjNmOWZhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9C
YXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNyBA
QAorVGVzdHMgdXNpbmcgQmF0dGVyeVN0YXR1cyBmcm9tIG11bHRpcGxlIGZyYW1lcy4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBpcyBtb2Nr
Q2hhcmdpbmcKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZ1RpbWUgaXMgbW9ja0NoYXJnaW5nVGltZQor
UEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBtb2NrRGlzY2hhcmdpbmdUaW1lCitQQVNT
IGJhdHRlcnkubGV2ZWwgaXMgbW9ja0xldmVsCitQQVNTIGJhdHRlcnkuY2hhcmdpbmcgaXMgbW9j
a0NoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIG1vY2tDaGFyZ2luZ1RpbWUK
K1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgbW9ja0Rpc2NoYXJnaW5nVGltZQorUEFT
UyBiYXR0ZXJ5LmxldmVsIGlzIG1vY2tMZXZlbAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L0JhdHRlcnlTdGF0dXMvbXVsdGlwbGUtZnJhbWVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjRmNzljYWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy5odG1sCkBAIC0wLDAgKzEsOSBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL211bHRpcGxlLWZyYW1lcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL25vLXBhZ2Ut
Y2FjaGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9u
by1wYWdlLWNhY2hlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5lYzQxOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9uby1wYWdlLWNhY2hlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE0IEBACitU
ZXN0cyB0aGF0IHBhZ2VzIHRoYXQgdXNlIEJhdHRlcnlTdGF0dXMgYXJlIG5vdCBwdXQgaW4gdGhl
IHBhZ2UgY2FjaGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitNYWluIHBhZ2Ug
b3BlbmluZyByZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMS5odG1sCityZXNvdXJjZXMvY2FjaGVkLXBh
Z2UtMS5odG1sIG9ubG9hZCBmaXJlZCwgY291bnQgPSAxCityZXNvdXJjZXMvY2FjaGVkLXBhZ2Ut
MS5odG1sIGFib3V0IHRvIG5hdmlnYXRlIHRvIHJlc291cmNlcy9jYWNoZWQtcGFnZS0yLmh0bWwK
K3Jlc291cmNlcy9jYWNoZWQtcGFnZS0yLmh0bWwgYWJvdXQgdG8gZ28gYmFjayB0byByZXNvdXJj
ZXMvY2FjaGVkLXBhZ2UtMS5odG1sCityZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMS5odG1sIG9ubG9h
ZCBmaXJlZCwgY291bnQgPSAyCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0
YXR1cy9uby1wYWdlLWNhY2hlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3Rh
dHVzL25vLXBhZ2UtY2FjaGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41MThkOTAwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVy
eVN0YXR1cy9uby1wYWdlLWNhY2hlLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbm8tcGFnZS1j
YWNoZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Jlc291cmNlcy9jYWNoZWQtcGFnZS0xLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Jlc291cmNlcy9jYWNoZWQt
cGFnZS0xLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxMWE4OQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvcmVz
b3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRtbApAQCAtMCwwICsxLDExIEBACis8c2NyaXB0PgorZnVu
Y3Rpb24gbG9hZE5leHQoKSB7CisgICAgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuYWRkRXZlbnRM
aXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBmdW5jdGlvbigpIHt9KTsKKyAgICBpZiAod2luZG93
Lm9wZW5lci5yZXBvcnRQYWdlT25lT25sb2FkKCkgPT0gMSkgeworICAgICAgICB3aW5kb3cub3Bl
bmVyLmRlYnVnKCdyZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMS5odG1sIGFib3V0IHRvIG5hdmlnYXRl
IHRvIHJlc291cmNlcy9jYWNoZWQtcGFnZS0yLmh0bWwnKQorICAgICAgICAvLyBMb2NhdGlvbiBj
aGFuZ2VzIG5lZWQgdG8gaGFwcGVuIG91dHNpZGUgdGhlIG9ubG9hZCBoYW5kbGVyIHRvIGdlbmVy
YXRlIGhpc3RvcnkgZW50cmllcy4KKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgbG9j
YXRpb24uaHJlZiA9ICdjYWNoZWQtcGFnZS0yLmh0bWwnOyB9LCAwKTsKKyAgICB9Cit9Cis8L3Nj
cmlwdD4KKzxib2R5IG9ubG9hZD0ibG9hZE5leHQoKSI+PC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9yZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMi5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9yZXNvdXJjZXMvY2FjaGVk
LXBhZ2UtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NzhmOWMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Jl
c291cmNlcy9jYWNoZWQtcGFnZS0yLmh0bWwKQEAgLTAsMCArMSw4IEBACis8c2NyaXB0PgorZnVu
Y3Rpb24gaW5pdCgpIHsKKyAgICB3aW5kb3cub3BlbmVyLnBhZ2VUd29Mb2FkZWQgPSB0cnVlOwor
ICAgIHdpbmRvdy5vcGVuZXIuZGVidWcoJ3Jlc291cmNlcy9jYWNoZWQtcGFnZS0yLmh0bWwgYWJv
dXQgdG8gZ28gYmFjayB0byByZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMS5odG1sJyk7CisgICAgaGlz
dG9yeS5iYWNrKCk7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0iaW5pdCgpIj48L2JvZHk+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Jlc291cmNl
cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLW5ldy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
QmF0dGVyeVN0YXR1cy9yZXNvdXJjZXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi1uZXcuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2RiYWViCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9yZXNvdXJjZXMvZXZlbnQt
YWZ0ZXItbmF2aWdhdGlvbi1uZXcuaHRtbApAQCAtMCwwICsxLDE1IEBACis8aHRtbD4KKyAgPGhl
YWQ+CisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICAgVGVzdHMgZm9yIGEgY3Jhc2ggd2hlcmUgYW4g
ZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgdGhlIHBhZ2UgaGFzIGJlZW4gbmF2aWdhdGVkCisgICAgYXdh
eSB3aGVuIHRoZSBvcmlnaW5hbCBwYWdlIGlzIGluIHRoZSBwYWdlIGNhY2hlLjxicj48YnI+Cisg
ICAgU1VDQ0VTUworICAgIDxzY3JpcHQ+CisJCWlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKwkJCWxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tCYXR0ZXJ5U3RhdHVzKCdjaGFy
Z2luZ2NoYW5nZScsIHRydWUsIDAsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgMS4wKTsKKwkJ
CWxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKwkJfQorICAgIDwvc2NyaXB0Pgor
ICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0
ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5qcyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2FkZC1saXN0ZW5l
ci1mcm9tLWNhbGxiYWNrLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5
Y2ZjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3Rh
dHVzL3NjcmlwdC10ZXN0cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5qcwpAQCAtMCwwICsx
LDQ5IEBACitkZXNjcmlwdGlvbignVGVzdHMgdGhhdCBhZGRpbmcgYSBuZXcgZXZlbnQgbGlzdGVu
ZXIgZnJvbSBhIGNhbGxiYWNrIHdvcmtzIGFzIGV4cGVjdGVkLicpOworCit2YXIgbW9ja0NoYXJn
aW5nID0gdHJ1ZTsKK3ZhciBtb2NrQ2hhcmdpbmdUaW1lID0gMDsKK3ZhciBtb2NrRGlzY2hhcmdp
bmdUaW1lID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwordmFyIG1vY2tMZXZlbCA9IDEuMDsK
KwordmFyIGJhdHRlcnkgPSBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeTsKKworZnVuY3Rpb24gY2hl
Y2tCYXR0ZXJ5U3RhdHVzKCkgeworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmNoYXJnaW5nJywgJ21v
Y2tDaGFyZ2luZycpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmNoYXJnaW5nVGltZScsICdtb2Nr
Q2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuZGlzY2hhcmdpbmdUaW1lJywg
J21vY2tEaXNjaGFyZ2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5sZXZlbCcsICdt
b2NrTGV2ZWwnKTsKK30KKwordmFyIGZpcnN0TGlzdGVuZXJFdmVudHMgPSAwOworZnVuY3Rpb24g
Zmlyc3RMaXN0ZW5lcigpIHsKKyAgICBjaGVja0JhdHRlcnlTdGF0dXMoKTsKKyAgICBpZiAoKytm
aXJzdExpc3RlbmVyRXZlbnRzID09IDEpIHsKKyAgICAgICAgYmF0dGVyeS5hZGRFdmVudExpc3Rl
bmVyKCdjaGFyZ2luZ2NoYW5nZScsIHNlY29uZExpc3RlbmVyKTsKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuc2V0TW9ja0JhdHRlcnlTdGF0dXMoJ2NoYXJnaW5nY2hhbmdlJywgbW9ja0No
YXJnaW5nLCBtb2NrQ2hhcmdpbmdUaW1lLCBtb2NrRGlzY2hhcmdpbmdUaW1lLCBtb2NrTGV2ZWwp
OworICAgIH0KKyAgICBlbHNlIGlmIChmaXJzdExpc3RlbmVyRXZlbnRzID4gMikKKyAgICAgICAg
dGVzdEZhaWxlZCgnVG9vIG1hbnkgZXZlbnRzIGZvciBmaXJzdCBsaXN0ZW5lci4nKTsKKyAgICBt
YXliZUZpbmlzaFRlc3QoKTsKK30KKwordmFyIHNlY29uZExpc3RlbmVyRXZlbnRzID0gMDsKK2Z1
bmN0aW9uIHNlY29uZExpc3RlbmVyKCkgeworICAgIGNoZWNrQmF0dGVyeVN0YXR1cygpOworICAg
IGlmICgrK3NlY29uZExpc3RlbmVyRXZlbnRzID4gMSkKKyAgICAgICAgdGVzdEZhaWxlZCgnVG9v
IG1hbnkgZXZlbnRzIGZvciBzZWNvbmQgbGlzdGVuZXIuJyk7CisgICAgbWF5YmVGaW5pc2hUZXN0
KCk7Cit9CisKK2Z1bmN0aW9uIG1heWJlRmluaXNoVGVzdCgpIHsKKyAgICBpZiAoZmlyc3RMaXN0
ZW5lckV2ZW50cyA9PSAyICYmIHNlY29uZExpc3RlbmVyRXZlbnRzID09IDEpCisgICAgCWZpbmlz
aEpTVGVzdCgpOworfQorCitiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdl
JywgZmlyc3RMaXN0ZW5lcik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0TW9ja0JhdHRlcnlTdGF0dXMoJ2NoYXJnaW5nY2hh
bmdlJywgbW9ja0NoYXJnaW5nLCBtb2NrQ2hhcmdpbmdUaW1lLCBtb2NrRGlzY2hhcmdpbmdUaW1l
LCBtb2NrTGV2ZWwpOworZWxzZQorICAgIGRlYnVnKCdUaGlzIHRlc3QgY2FuIG5vdCBiZSBydW4g
d2l0aG91dCB0aGUgTGF5b3V0VGVzdENvbnRyb2xsZXInKTsKKword2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1
cy9zY3JpcHQtdGVzdHMvYmFzaWMtb3BlcmF0aW9uLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
QmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvYmFzaWMtb3BlcmF0aW9uLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMzA3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9iYXNpYy1vcGVyYXRp
b24uanMKQEAgLTAsMCArMSwyMyBAQAorZGVzY3JpcHRpb24oJ1Rlc3RzIHRoZSBiYXNpYyBvcGVy
YXRpb24gb2YgQmF0dGVyeVN0YXR1cyB1c2luZyB0aGUgbW9jay4nKTsKKwordmFyIG1vY2tDaGFy
Z2luZyA9IHRydWU7Cit2YXIgbW9ja0NoYXJnaW5nVGltZSA9IDA7Cit2YXIgbW9ja0Rpc2NoYXJn
aW5nVGltZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKK3ZhciBtb2NrTGV2ZWwgPSAxLjA7
CisKK3ZhciBiYXR0ZXJ5ID0gbmF2aWdhdG9yLndlYmtpdEJhdHRlcnk7CisKK2JhdHRlcnkuYWRk
RXZlbnRMaXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKKyAgICBzaG91bGRC
ZSgnYmF0dGVyeS5jaGFyZ2luZycsICdtb2NrQ2hhcmdpbmcnKTsKKyAgICBzaG91bGRCZSgnYmF0
dGVyeS5jaGFyZ2luZ1RpbWUnLCAnbW9ja0NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdi
YXR0ZXJ5LmRpc2NoYXJnaW5nVGltZScsICdtb2NrRGlzY2hhcmdpbmdUaW1lJyk7CisgICAgc2hv
dWxkQmUoJ2JhdHRlcnkubGV2ZWwnLCAnbW9ja0xldmVsJyk7CisgICAgZmluaXNoSlNUZXN0KCk7
Cit9KTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5zZXRNb2NrQmF0dGVyeVN0YXR1cygnY2hhcmdpbmdjaGFuZ2UnLCBtb2NrQ2hh
cmdpbmcsIG1vY2tDaGFyZ2luZ1RpbWUsIG1vY2tEaXNjaGFyZ2luZ1RpbWUsIG1vY2tMZXZlbCk7
CitlbHNlCisgICAgZGVidWcoJ1RoaXMgdGVzdCBjYW4gbm90IGJlIHJ1biB3aXRob3V0IHRoZSBM
YXlvdXRUZXN0Q29udHJvbGxlcicpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0
cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVy
eVN0YXR1cy9zY3JpcHQtdGVzdHMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTdjNTEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvZXZlbnQtYWZ0ZXIt
bmF2aWdhdGlvbi5qcwpAQCAtMCwwICsxLDEzIEBACitkZXNjcmlwdGlvbignVGVzdHMgZm9yIGEg
Y3Jhc2ggd2hlcmUgYW4gZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgdGhlIHBhZ2UgaGFzIGJlZW4gbmF2
aWdhdGVkIGF3YXkgd2hlbiB0aGUgb3JpZ2luYWwgcGFnZSBpcyBpbiB0aGUgcGFnZSBjYWNoZS4n
KTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2UoJ1dlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNl
S2V5JywgMSk7CitlbHNlCisgICAgZGVidWcoJ1RoaXMgdGVzdCBjYW4gbm90IGJlIHJ1biB3aXRo
b3V0IHRoZSBMYXlvdXRUZXN0Q29udHJvbGxlcicpOworCitkb2N1bWVudC5ib2R5Lm9ubG9hZCA9
IGZ1bmN0aW9uKCkgeworICAgIG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5LmFkZEV2ZW50TGlzdGVu
ZXIoJ2NoYXJnaW5nY2hhbmdlJywgZnVuY3Rpb24oKSB7IH0gKTsKKyAgICB3aW5kb3cubG9jYXRp
b24gPSAicmVzb3VyY2VzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24tbmV3Lmh0bWwiOworfQorCit3
aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9tdWx0aXBsZS1mcmFtZXMuanMgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9tdWx0aXBsZS1mcmFt
ZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0ZTk5NwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRl
c3RzL211bHRpcGxlLWZyYW1lcy5qcwpAQCAtMCwwICsxLDQ3IEBACitkZXNjcmlwdGlvbignVGVz
dHMgdXNpbmcgQmF0dGVyeVN0YXR1cyBmcm9tIG11bHRpcGxlIGZyYW1lcy4nKTsKKwordmFyIG1v
Y2tDaGFyZ2luZyA9IHRydWU7Cit2YXIgbW9ja0NoYXJnaW5nVGltZSA9IDA7Cit2YXIgbW9ja0Rp
c2NoYXJnaW5nVGltZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKK3ZhciBtb2NrTGV2ZWwg
PSAxLjA7CisKK3ZhciBiYXR0ZXJ5ID0gbmF2aWdhdG9yLndlYmtpdEJhdHRlcnk7CisKK2Z1bmN0
aW9uIGNoZWNrQmF0dGVyeVN0YXR1cygpIHsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFyZ2lu
ZycsICdtb2NrQ2hhcmdpbmcnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFyZ2luZ1RpbWUn
LCAnbW9ja0NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmRpc2NoYXJnaW5n
VGltZScsICdtb2NrRGlzY2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkubGV2
ZWwnLCAnbW9ja0xldmVsJyk7Cit9CisKK3ZhciBoYXNNYWluRnJhbWVFdmVudEZpcmVkID0gZmFs
c2U7CitmdW5jdGlvbiBtYWluRnJhbWVMaXN0ZW5lcigpIHsKKyAgICBjaGVja0JhdHRlcnlTdGF0
dXMoKQorICAgIGhhc01haW5GcmFtZUV2ZW50RmlyZWQgPSB0cnVlOworICAgIG1heWJlRmluaXNo
VGVzdCgpOworfQorCit2YXIgaGFzQ2hpbGRGcmFtZUV2ZW50RmlyZWQgPSBmYWxzZTsKK2Z1bmN0
aW9uIGNoaWxkRnJhbWVMaXN0ZW5lcigpIHsKKyAgICBjaGVja0JhdHRlcnlTdGF0dXMoKQorICAg
IGhhc0NoaWxkRnJhbWVFdmVudEZpcmVkID0gdHJ1ZTsKKyAgICBtYXliZUZpbmlzaFRlc3QoKTsK
K30KKworZnVuY3Rpb24gbWF5YmVGaW5pc2hUZXN0KCkgeworICAgIGlmIChoYXNNYWluRnJhbWVF
dmVudEZpcmVkICYmIGhhc0NoaWxkRnJhbWVFdmVudEZpcmVkKQorICAgICAgICBmaW5pc2hKU1Rl
c3QoKTsKK30KKwordmFyIGNoaWxkRnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJh
bWUnKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2hpbGRGcmFtZSk7CitjaGlsZEZyYW1l
LmNvbnRlbnRXaW5kb3cubmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuYWRkRXZlbnRMaXN0ZW5lcign
Y2hhcmdpbmdjaGFuZ2UnLCBjaGlsZEZyYW1lTGlzdGVuZXIpOworCitiYXR0ZXJ5LmFkZEV2ZW50
TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywgbWFpbkZyYW1lTGlzdGVuZXIpOworCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldE1v
Y2tCYXR0ZXJ5U3RhdHVzKCdjaGFyZ2luZ2NoYW5nZScsIG1vY2tDaGFyZ2luZywgbW9ja0NoYXJn
aW5nVGltZSwgbW9ja0Rpc2NoYXJnaW5nVGltZSwgbW9ja0xldmVsKTsKK2Vsc2UKKyAgICBkZWJ1
ZygnVGhpcyB0ZXN0IGNhbiBub3QgYmUgcnVuIHdpdGhvdXQgdGhlIExheW91dFRlc3RDb250cm9s
bGVyJyk7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL25vLXBhZ2UtY2FjaGUu
anMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9uby1w
YWdlLWNhY2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkY2VmMDEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Nj
cmlwdC10ZXN0cy9uby1wYWdlLWNhY2hlLmpzCkBAIC0wLDAgKzEsMjMgQEAKK2Rlc2NyaXB0aW9u
KCdUZXN0cyB0aGF0IHBhZ2VzIHRoYXQgdXNlIEJhdHRlcnlTdGF0dXMgYXJlIG5vdCBwdXQgaW4g
dGhlIHBhZ2UgY2FjaGUuJyk7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuc2V0Q2FuT3BlbldpbmRvd3MoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5vdmVycmlkZVByZWZlcmVuY2UoJ1dlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5Jywg
MSk7Cit9IGVsc2UKKyAgICBkZWJ1ZygnVGhpcyB0ZXN0IGNhbiBub3QgYmUgcnVuIHdpdGhvdXQg
dGhlIExheW91dFRlc3RDb250cm9sbGVyJyk7CisKK3ZhciBwYWdlT25lT25sb2FkQ291bnQgPSAw
OworZnVuY3Rpb24gcmVwb3J0UGFnZU9uZU9ubG9hZCgpIHsKKyAgICArK3BhZ2VPbmVPbmxvYWRD
b3VudDsKKyAgICBkZWJ1ZygncmVzb3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRtbCBvbmxvYWQgZmly
ZWQsIGNvdW50ID0gJyArIHBhZ2VPbmVPbmxvYWRDb3VudCk7CisgICAgaWYgKHBhZ2VPbmVPbmxv
YWRDb3VudCA9PSAyKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KKyAgICByZXR1
cm4gcGFnZU9uZU9ubG9hZENvdW50OworfQorCitkZWJ1ZygiTWFpbiBwYWdlIG9wZW5pbmcgcmVz
b3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRtbCIpOword2luZG93Lm9wZW4oInJlc291cmNlcy9jYWNo
ZWQtcGFnZS0xLmh0bWwiKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvdXBk
YXRlcy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3Rz
L3VwZGF0ZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NiYjQ5OAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2Ny
aXB0LXRlc3RzL3VwZGF0ZXMuanMKQEAgLTAsMCArMSw0NCBAQAorZGVzY3JpcHRpb24oJ1Rlc3Rz
IHRoYXQgdXBkYXRlcyB0byB0aGUgYmF0dGVyeSBldmVudCBjYXVzZXMgbmV3IGV2ZW50cyB0byBm
aXJlLicpOworCit2YXIgbW9ja0NoYXJnaW5nID0gZmFsc2U7Cit2YXIgbW9ja0NoYXJnaW5nVGlt
ZSA9IDA7Cit2YXIgbW9ja0Rpc2NoYXJnaW5nVGltZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklU
WTsKK3ZhciBtb2NrTGV2ZWwgPSAxLjA7CisKK3ZhciBiYXR0ZXJ5ID0gbmF2aWdhdG9yLndlYmtp
dEJhdHRlcnk7CisKK2Z1bmN0aW9uIGNoZWNrQmF0dGVyeVN0YXR1cygpIHsKKyAgICBzaG91bGRC
ZSgnYmF0dGVyeS5jaGFyZ2luZycsICdtb2NrQ2hhcmdpbmcnKTsKKyAgICBzaG91bGRCZSgnYmF0
dGVyeS5jaGFyZ2luZ1RpbWUnLCAnbW9ja0NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdi
YXR0ZXJ5LmRpc2NoYXJnaW5nVGltZScsICdtb2NrRGlzY2hhcmdpbmdUaW1lJyk7CisgICAgc2hv
dWxkQmUoJ2JhdHRlcnkubGV2ZWwnLCAnbW9ja0xldmVsJyk7Cit9CisKK2Z1bmN0aW9uIHNldE1v
Y2tCYXR0ZXJ5U3RhdHVzKCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tCYXR0ZXJ5U3RhdHVzKCdjaGFy
Z2luZ2NoYW5nZScsIG1vY2tDaGFyZ2luZywgbW9ja0NoYXJnaW5nVGltZSwgbW9ja0Rpc2NoYXJn
aW5nVGltZSwgbW9ja0xldmVsKTsKKyAgICBlbHNlCisgICAgICAgIGRlYnVnKCdUaGlzIHRlc3Qg
Y2FuIG5vdCBiZSBydW4gd2l0aG91dCB0aGUgTGF5b3V0VGVzdENvbnRyb2xsZXInKTsKK30KKwor
ZnVuY3Rpb24gZmlyc3RMaXN0ZW5lcigpIHsKKyAgICBjaGVja0JhdHRlcnlTdGF0dXMoKTsKKyAg
ICBiYXR0ZXJ5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywgZmlyc3RMaXN0
ZW5lcik7CisKKwliYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywgdXBk
YXRlTGlzdGVuZXIpOworCW1vY2tDaGFyZ2luZyA9IHRydWU7CisJbW9ja0NoYXJnaW5nVGltZSA9
IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKKwltb2NrRGlzY2hhcmdpbmdUaW1lID0gMDsKKwlt
b2NrTGV2ZWwgPSAwLjA7CisgICAgc2V0TW9ja0JhdHRlcnlTdGF0dXMoKTsgICAgCit9CisKK2Z1
bmN0aW9uIHVwZGF0ZUxpc3RlbmVyKGV2ZW50KSB7CisgICAgY2hlY2tCYXR0ZXJ5U3RhdHVzKGV2
ZW50KTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworYmF0dGVyeS5hZGRFdmVudExpc3RlbmVy
KCdjaGFyZ2luZ2NoYW5nZScsIGZpcnN0TGlzdGVuZXIpOworc2V0TW9ja0JhdHRlcnlTdGF0dXMo
KTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvd2luZG93LXByb3BlcnR5Lmpz
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvd2luZG93
LXByb3BlcnR5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YTAzODkK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Nj
cmlwdC10ZXN0cy93aW5kb3ctcHJvcGVydHkuanMKQEAgLTAsMCArMSwyNCBAQAorZGVzY3JpcHRp
b24oJ1Rlc3RzIHRoYXQgdGhlIHdpbmRvdy5uYXZpZ2F0b3IuYmF0dGVyeSBwcm9wZXJ0aWVzIGFy
ZSBwcmVzZW50LicpOworCitmdW5jdGlvbiBoYXNPbkJhdHRlcnlQcm9wZXJ0eSgpCit7CisJdmFy
IHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gbmF2aWdhdG9yLndlYmtpdEJh
dHRlcnkpIHsKKyAgICAgICAgaWYgKHByb3BlcnR5ID09ICdvbmNoYXJnaW5nY2hhbmdlJyB8fAor
ICAgICAgICAJcHJvcGVydHkgPT0gJ29uY2hhcmdpbmd0aW1lY2hhbmdlJyB8fAorICAgICAgICAJ
cHJvcGVydHkgPT0gJ29uZGlzY2hhcmdpbmd0aW1lY2hhbmdlJyB8fAorICAgICAgICAJcHJvcGVy
dHkgPT0gJ29ubGV2ZWxjaGFuZ2UnKQorICAgICAgICAgICAgcmVzdWx0ICs9IDE7CisgICAgfQor
ICAgIAorICAgIGlmIChyZXN1bHQgPT0gNCkKKyAgICAJcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitzaG91bGRCZVRydWUoInR5cGVvZiBuYXZpZ2F0b3Iud2Via2l0QmF0dGVy
eSA9PSAnb2JqZWN0JyIpOworc2hvdWxkQmVUcnVlKCJoYXNPbkJhdHRlcnlQcm9wZXJ0eSgpIik7
CitzaG91bGRCZVRydWUoIm5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5Lmhhc093blByb3BlcnR5KCdv
bmNoYXJnaW5nY2hhbmdlJykiKTsKK3Nob3VsZEJlVHJ1ZSgibmF2aWdhdG9yLndlYmtpdEJhdHRl
cnkuaGFzT3duUHJvcGVydHkoJ29uY2hhcmdpbmd0aW1lY2hhbmdlJykiKTsKK3Nob3VsZEJlVHJ1
ZSgibmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29uZGlzY2hhcmdpbmd0
aW1lY2hhbmdlJykiKTsKK3Nob3VsZEJlVHJ1ZSgibmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFz
T3duUHJvcGVydHkoJ29ubGV2ZWxjaGFuZ2UnKSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vQmF0dGVyeVN0YXR1cy91cGRhdGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvdXBkYXRlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlM2U3YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvdXBkYXRlcy1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxNyBAQAorVGVzdHMgdGhhdCB1cGRhdGVzIHRvIHRoZSBiYXR0ZXJ5IGV2ZW50IGNhdXNl
cyBuZXcgZXZlbnRzIHRvIGZpcmUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIGJhdHRlcnkuY2hhcmdpbmcgaXMgbW9ja0NoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hhcmdp
bmdUaW1lIGlzIG1vY2tDaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUg
aXMgbW9ja0Rpc2NoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmxldmVsIGlzIG1vY2tMZXZlbAor
UEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIG1vY2tDaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJn
aW5nVGltZSBpcyBtb2NrQ2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkuZGlzY2hhcmdpbmdUaW1l
IGlzIG1vY2tEaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBtb2NrTGV2ZWwK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3VwZGF0ZXMuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvdXBkYXRlcy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMjUyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3VwZGF0ZXMuaHRtbApAQCAtMCwwICsx
LDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNj
cmlwdC10ZXN0cy91cGRhdGVzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvd2luZG93LXByb3Bl
cnR5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvd2lu
ZG93LXByb3BlcnR5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40MWU2ZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy93aW5kb3ctcHJvcGVydHktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAK
K1Rlc3RzIHRoYXQgdGhlIHdpbmRvdy5uYXZpZ2F0b3IuYmF0dGVyeSBwcm9wZXJ0aWVzIGFyZSBw
cmVzZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyB0eXBlb2YgbmF2
aWdhdG9yLndlYmtpdEJhdHRlcnkgPT0gJ29iamVjdCcgaXMgdHJ1ZQorUEFTUyBoYXNPbkJhdHRl
cnlQcm9wZXJ0eSgpIGlzIHRydWUKK1BBU1MgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3du
UHJvcGVydHkoJ29uY2hhcmdpbmdjaGFuZ2UnKSBpcyB0cnVlCitQQVNTIG5hdmlnYXRvci53ZWJr
aXRCYXR0ZXJ5Lmhhc093blByb3BlcnR5KCdvbmNoYXJnaW5ndGltZWNoYW5nZScpIGlzIHRydWUK
K1BBU1MgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29uZGlzY2hhcmdp
bmd0aW1lY2hhbmdlJykgaXMgdHJ1ZQorUEFTUyBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5oYXNP
d25Qcm9wZXJ0eSgnb25sZXZlbGNoYW5nZScpIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3dpbmRvdy1wcm9wZXJ0eS5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vQmF0dGVyeVN0YXR1cy93aW5kb3ctcHJvcGVydHkuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjNmZDNhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy93aW5kb3ctcHJvcGVydHkuaHRtbApAQCAtMCww
ICsxLDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9
InNjcmlwdC10ZXN0cy93aW5kb3ctcHJvcGVydHkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA2MDk2OTI5Li5jNzAzYzk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtMjI5MCw2ICsyMjkwLDIzIEBAIElGIChFTkFCTEVfVklCUkFUSU9O
KQogICAgICkKIEVORElGICgpCiAKK0lGIChFTkFCTEVfQkFUVEVSWV9TVEFUVVMpCisgICAgTElT
VChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICIke1dFQkNPUkVf
RElSfS9Nb2R1bGVzL2JhdHRlcnkiCisgICAgKQorICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfSURM
X0ZJTEVTCisgICAgICAgIE1vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmlkbAorICAg
ICAgICBNb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaWRsCisgICAgKQorICAgIExJU1Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBwbGF0Zm9ybS9tb2NrL0JhdHRlcnlDbGll
bnRNb2NrLmNwcAorICAgICAgICBNb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5jcHAK
KyAgICAgICAgTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcAorICAgICAgICBN
b2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwCisgICAgICAgIE1vZHVsZXMvYmF0dGVy
eS9CYXR0ZXJ5U3RhdHVzLmNwcAorICAgICkKK0VORElGICgpCisKICMgTW9kdWxlcyB0aGF0IHRo
ZSBiaW5kaW5ncyBnZW5lcmF0b3Igc2NyaXB0cyBtYXkgdXNlCiBTRVQoU0NSSVBUU19SRVNPTFZF
X1NVUFBMRU1FTlRBTAogICAgICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL3NjcmlwdHMvSURMUGFy
c2VyLnBtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVy
eUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDbGllbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzQwODdhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDbGllbnQuaApA
QCAtMCwwICsxLDQ3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0
cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQmF0dGVyeUNsaWVudF9oCisjZGVmaW5lIEJhdHRl
cnlDbGllbnRfaAorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0
dGVyeUNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQYWdlOwor
CitjbGFzcyBCYXR0ZXJ5Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5CYXR0ZXJ5Q2xp
ZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJvbGxlcihCYXR0ZXJ5Q29udHJv
bGxlciopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmF0dGVy
eUNvbnRyb2xsZXJEZXN0cm95ZWQoKSA9IDA7Cit9OworCit2b2lkIHByb3ZpZGVCYXR0ZXJ5VG8o
UGFnZSosIEJhdHRlcnlDbGllbnQqKTsKKworfQorCisjZW5kaWYgLy8gQkFUVEVSWV9TVEFUVVMK
KyNlbmRpZiAvLyBCYXR0ZXJ5Q2xpZW50X2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNDA0OGI2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwxMTggQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlDb250cm9sbGVyLmgiCisK
KyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50Lmgi
CisjaW5jbHVkZSAiQmF0dGVyeU1hbmFnZXIuaCIKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzLmgi
CisjaW5jbHVkZSAiRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCYXR0ZXJ5Q29u
dHJvbGxlcjo6QmF0dGVyeUNvbnRyb2xsZXIoQmF0dGVyeUNsaWVudCogY2xpZW50KQorICAgIDog
bV9jbGllbnQoY2xpZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQt
PnNldENvbnRyb2xsZXIodGhpcyk7Cit9CisKK0JhdHRlcnlDb250cm9sbGVyOjp+QmF0dGVyeUNv
bnRyb2xsZXIoKQoreworICAgIG1fY2xpZW50LT5iYXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3llZCgp
OworfQorCitQYXNzT3duUHRyPEJhdHRlcnlDb250cm9sbGVyPiBCYXR0ZXJ5Q29udHJvbGxlcjo6
Y3JlYXRlKEJhdHRlcnlDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEJhdHRlcnlDb250cm9sbGVyKGNsaWVudCkpOworfQorCitib29sIEJhdHRlcnlDb250cm9sbGVy
OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBCYXR0ZXJ5
TWFuYWdlciogYmF0dGVyeU1hbmFnZXIpCit7CisgICAgaWYgKG1fYmF0dGVyeUxpc3RlbmVycy5m
aW5kKGV2ZW50VHlwZSkgPT0gbV9iYXR0ZXJ5TGlzdGVuZXJzLmVuZCgpKQorICAgICAgICBtX2Jh
dHRlcnlMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbmV3IExpc3RlbmVyU2V0KTsKKworICAgIG1f
YmF0dGVyeUxpc3RlbmVycy5maW5kKGV2ZW50VHlwZSktPnNlY29uZC0+YWRkKGJhdHRlcnlNYW5h
Z2VyKTsKKyAgICByZXR1cm4gc3RhcnRVcGRhdGluZyhldmVudFR5cGUpOworfQorCit2b2lkIEJh
dHRlcnlDb250cm9sbGVyOjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBCYXR0ZXJ5TWFuYWdlciogYmF0dGVyeU1hbmFnZXIpCit7ICAgIAorICAgIEJh
dHRlcnlMaXN0ZW5lck1hcDo6aXRlcmF0b3IgaXQgPSBtX2JhdHRlcnlMaXN0ZW5lcnMuZmluZChl
dmVudFR5cGUpOworICAgIGlmIChpdCA9PSBtX2JhdHRlcnlMaXN0ZW5lcnMuZW5kKCkgfHwhKGl0
LT5zZWNvbmQpIHx8IGl0LT5zZWNvbmQtPmZpbmQoYmF0dGVyeU1hbmFnZXIpID09IGl0LT5zZWNv
bmQtPmVuZCgpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9iYXR0ZXJ5TGlzdGVuZXJzLmZp
bmQoZXZlbnRUeXBlKS0+c2Vjb25kLT5yZW1vdmUoYmF0dGVyeU1hbmFnZXIpOworICAgIHN0b3BV
cGRhdGluZyhldmVudFR5cGUpOworfQorCit2b2lkIEJhdHRlcnlDb250cm9sbGVyOjpyZW1vdmVB
bGxFdmVudExpc3RlbmVycygpCit7CisgICAgZm9yIChCYXR0ZXJ5TGlzdGVuZXJNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9iYXR0ZXJ5TGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fYmF0dGVyeUxpc3Rl
bmVycy5lbmQoKTsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXIoKTsKKyAgICBtX2Jh
dHRlcnlMaXN0ZW5lcnMuY2xlYXIoKTsKK30KKwordm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6ZGlz
cGF0Y2hFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0
ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQoreworICAgIEJhdHRlcnlMaXN0ZW5lck1hcDo6aXRl
cmF0b3IgaXQgPSBtX2JhdHRlcnlMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOworICAgIGlmIChp
dCA9PSBtX2JhdHRlcnlMaXN0ZW5lcnMuZW5kKCkgfHwgIShpdC0+c2Vjb25kKSB8fCBpdC0+c2Vj
b25kLT5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxFdmVudD4gZXZl
bnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFsc2UsIGZhbHNlKTsKKyAgICBSZWZQdHI8
QmF0dGVyeVN0YXR1cz4gYmF0dGVyeSA9IGJhdHRlcnlTdGF0dXM7CisgICAgVmVjdG9yPFJlZlB0
cjxCYXR0ZXJ5TWFuYWdlcj4gPiBsaXN0ZW5lclZlY3RvcjsKKyAgICBjb3B5VG9WZWN0b3IoKiht
X2JhdHRlcnlMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpLT5zZWNvbmQpLCBsaXN0ZW5lclZlY3Rv
cik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lclZlY3Rvci5zaXplKCk7ICsr
aSkKKyAgICAgICAgbGlzdGVuZXJWZWN0b3JbaV0tPmRpc3BhdGNoRXZlbnQoZXZlbnQsIGJhdHRl
cnkpOworfQorCisgYm9vbCBCYXR0ZXJ5Q29udHJvbGxlcjo6c3RhcnRVcGRhdGluZyhjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPnN0YXJ0VXBk
YXRpbmcoZXZlbnRUeXBlKTsKK30KKwordm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6c3RvcFVwZGF0
aW5nKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQoreworICAgICBtX2NsaWVudC0+c3Rv
cFVwZGF0aW5nKGV2ZW50VHlwZSk7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgQmF0dGVyeUNv
bnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0
b21pY1N0cmluZywgbmFtZSwgKCJCYXR0ZXJ5Q29udHJvbGxlciIpKTsKKyAgICByZXR1cm4gbmFt
ZTsKK30KKworYm9vbCBCYXR0ZXJ5Q29udHJvbGxlcjo6aXNBY3RpdmUoUGFnZSogcGFnZSkKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oQmF0dGVyeUNvbnRyb2xsZXI6OmZyb20ocGFn
ZSkpOworfQorCit2b2lkIHByb3ZpZGVCYXR0ZXJ5VG8oUGFnZSogcGFnZSwgQmF0dGVyeUNsaWVu
dCogY2xpZW50KQoreworICAgIFN1cHBsZW1lbnQ8UGFnZT46OnByb3ZpZGVUbyhwYWdlLCBCYXR0
ZXJ5Q29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKSwgQmF0dGVyeUNvbnRyb2xsZXI6OmNyZWF0
ZShjbGllbnQpKTsKK30KKworfQorCisjZW5kaWYgLy8gQkFUVEVSWV9TVEFUVVMKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTZkNTU1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmgKQEAg
LTAsMCArMSw3MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJv
bmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEJhdHRlcnlDb250cm9sbGVyX2gKKyNkZWZpbmUgQmF0
dGVyeUNvbnRyb2xsZXJfaAorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVk
ZSAiQmF0dGVyeU1hbmFnZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEJhdHRlcnlDbGllbnQ7CisKK2NsYXNzIEJhdHRlcnlDb250cm9sbGVyIDogcHVi
bGljIFN1cHBsZW1lbnQ8UGFnZT4geworcHVibGljOgorICAgIEJhdHRlcnlDb250cm9sbGVyKEJh
dHRlcnlDbGllbnQqKTsKKyAgICB+QmF0dGVyeUNvbnRyb2xsZXIoKTsKKworICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEJhdHRlcnlDb250cm9sbGVyPiBjcmVhdGUoQmF0dGVyeUNsaWVudCopOworCisg
ICAgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBC
YXR0ZXJ5TWFuYWdlciopOworICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgQmF0dGVyeU1hbmFnZXIqKTsKKyAgICB2b2lkIHJlbW92ZUFs
bEV2ZW50TGlzdGVuZXJzKCk7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMp
OworCisgICAgQmF0dGVyeUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7
IH0KKworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7Cisg
ICAgc3RhdGljIEJhdHRlcnlDb250cm9sbGVyKiBmcm9tKFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PEJhdHRlcnlDb250cm9sbGVyKj4oU3VwcGxlbWVudDxQYWdlPjo6ZnJvbShwYWdl
LCBzdXBwbGVtZW50TmFtZSgpKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0FjdGl2ZShQYWdlKik7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBzdGFydFVwZGF0aW5nKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlKTsKKyAgICB2b2lkIHN0b3BVcGRhdGluZyhjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSk7CisKKyAgICBQYWdlKiBtX3BhZ2U7CisgICAgQmF0dGVyeUNsaWVudCogbV9jbGll
bnQ7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPEJhdHRlcnlNYW5hZ2VyPiA+IExpc3Rl
bmVyU2V0OworICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIExpc3RlbmVyU2V0Kj4g
QmF0dGVyeUxpc3RlbmVyTWFwOworICAgIEJhdHRlcnlMaXN0ZW5lck1hcCBtX2JhdHRlcnlMaXN0
ZW5lcnM7Cit9OworCit9CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworI2VuZGlmIC8vIEJh
dHRlcnlDb250cm9sbGVyX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9i
YXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVy
eS9CYXR0ZXJ5TWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZGY2NjQxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVy
eS9CYXR0ZXJ5TWFuYWdlci5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQmF0dGVyeU1hbmFnZXIuaCIKKworI2lmIEVOQUJMRShCQVRURVJZX1NU
QVRVUykKKworI2luY2x1ZGUgIkJhdHRlcnlDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiQmF0dGVy
eVN0YXR1cy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJOYXZpZ2F0b3IuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisj
aW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8QmF0
dGVyeU1hbmFnZXI+IEJhdHRlcnlNYW5hZ2VyOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgTmF2aWdhdG9yKiBuYXZpZ2F0b3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBCYXR0ZXJ5TWFuYWdlcihjb250ZXh0LCBuYXZpZ2F0b3IpKTsKK30KKworQmF0dGVyeU1h
bmFnZXI6On5CYXR0ZXJ5TWFuYWdlcigpCit7Cit9CisKK0JhdHRlcnlNYW5hZ2VyOjpCYXR0ZXJ5
TWFuYWdlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBOYXZpZ2F0b3IqIG5hdmln
YXRvcikKKyAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgICwgbV9j
aGFyZ2luZyh0cnVlKQorICAgICwgbV9jaGFyZ2luZ1RpbWUoMCkKKyAgICAsIG1fZGlzY2hhcmdp
bmdUaW1lKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkKKyAgICAsIG1f
bGV2ZWwoMSkKKyAgICAsIG1fYmF0dGVyeUNvbnRyb2xsZXIoQmF0dGVyeUNvbnRyb2xsZXI6OmZy
b20obmF2aWdhdG9yLT5mcmFtZSgpLT5wYWdlKCkpKQorICAgICwgbV9uYXZpZ2F0b3IobmF2aWdh
dG9yKQoreworfQorCitib29sIEJhdHRlcnlNYW5hZ2VyOjphZGRFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyLCBib29sIHVzZUNhcHR1cmUpCit7CisgICAgaWYgKCFFdmVudFRhcmdldDo6YWRkRXZlbnRM
aXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9iYXR0ZXJ5Q29udHJvbGxlci0+YWRkRXZlbnRMaXN0ZW5lcihldmVu
dFR5cGUsIHRoaXMpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJhdHRlcnlNYW5hZ2Vy
OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIGlmICghRXZlbnRU
YXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVy
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fYmF0dGVyeUNvbnRyb2xsZXItPnJl
bW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCB0aGlzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBCYXR0ZXJ5TWFuYWdlcjo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQoreworICAg
IG1fYmF0dGVyeUNvbnRyb2xsZXItPnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CisgICAgRXZl
bnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7Cit9CisKK2Jvb2wgQmF0dGVyeU1h
bmFnZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8
QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YXR1cykKK3sKKyAgICBSZWZQdHI8QmF0dGVyeVN0YXR1
cz4gYmF0dGVyeSA9IGJhdHRlcnlTdGF0dXM7CisgICAgbV9jaGFyZ2luZyA9IGJhdHRlcnktPmNo
YXJnaW5nKCk7CisgICAgbV9jaGFyZ2luZ1RpbWUgPSBiYXR0ZXJ5LT5jaGFyZ2luZ1RpbWUoKTsK
KyAgICBtX2Rpc2NoYXJnaW5nVGltZSA9IGJhdHRlcnktPmRpc2NoYXJnaW5nVGltZSgpOworICAg
IG1fbGV2ZWwgPSBiYXR0ZXJ5LT5sZXZlbCgpOworCisgICAgcmV0dXJuIEV2ZW50VGFyZ2V0Ojpk
aXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gQkFUVEVSWV9TVEFUVVMKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40YTcyYjgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9i
YXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEJhdHRl
cnlNYW5hZ2VyX2gKKyNkZWZpbmUgQmF0dGVyeU1hbmFnZXJfaAorCisjaWYgRU5BQkxFKEJBVFRF
UllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1cy5oIgorI2luY2x1ZGUgIkV2ZW50
VGFyZ2V0LmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEJhdHRlcnlDb250cm9sbGVyOworY2xhc3MgTmF2aWdhdG9yOworY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgQmF0dGVyeU1hbmFnZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxCYXR0ZXJ5TWFuYWdlcj4sIHB1YmxpYyBFdmVudFRhcmdldCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+QmF0dGVyeU1hbmFnZXIoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYXR0
ZXJ5TWFuYWdlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBOYXZpZ2F0b3IqKTsK
KworICAgIHZpcnR1YWwgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBj
b25zdCB7IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQmF0dGVyeU1hbmFnZXI7IH0K
KyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7IH0KKworICAgIGJv
b2wgY2hhcmdpbmcoKSBjb25zdCB7IHJldHVybiBtX2NoYXJnaW5nOyB9CisgICAgZG91YmxlIGNo
YXJnaW5nVGltZSgpIGNvbnN0ICB7IHJldHVybiBtX2NoYXJnaW5nVGltZTsgfQorICAgIGRvdWJs
ZSBkaXNjaGFyZ2luZ1RpbWUoKSBjb25zdCAgeyByZXR1cm4gbV9kaXNjaGFyZ2luZ1RpbWU7IH0K
KyAgICBkb3VibGUgbGV2ZWwoKSBjb25zdCAgeyByZXR1cm4gbV9sZXZlbDsgfQorCisgICAgREVG
SU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihjaGFyZ2luZ2NoYW5nZSk7CisgICAgREVGSU5F
X0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihjaGFyZ2luZ3RpbWVjaGFuZ2UpOworICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZGlzY2hhcmdpbmd0aW1lY2hhbmdlKTsKKyAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGxldmVsY2hhbmdlKTsKKworICAgIHZpcnR1
YWwgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOworICAgIHZpcnR1YWwg
Ym9vbCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBF
dmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
QWxsRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4sIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pOworCisgICAgdXNpbmcgUmVmQ291bnRl
ZDxCYXR0ZXJ5TWFuYWdlcj46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPEJhdHRlcnlNYW5h
Z2VyPjo6ZGVyZWY7CisKKyAgICBCYXR0ZXJ5Q29udHJvbGxlciogYmF0dGVyeUNvbnRyb2xsZXIo
KSB7IHJldHVybiBtX2JhdHRlcnlDb250cm9sbGVyOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRU
YXJnZXREYXRhOyB9CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFy
Z2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorCitwcml2YXRlOgorICAg
IEJhdHRlcnlNYW5hZ2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBOYXZpZ2F0b3IqKTsKKwor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKwor
ICAgIC8vIEV2ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCByZWZF
dmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdl
dCgpIHsgZGVyZWYoKTsgfQorCisgICAgYm9vbCBtX2NoYXJnaW5nOworICAgIGRvdWJsZSBtX2No
YXJnaW5nVGltZTsKKyAgICBkb3VibGUgbV9kaXNjaGFyZ2luZ1RpbWU7CisgICAgZG91YmxlIG1f
bGV2ZWw7CisKKyAgICBCYXR0ZXJ5Q29udHJvbGxlciogbV9iYXR0ZXJ5Q29udHJvbGxlcjsKKyAg
ICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CisgICAgTmF2aWdhdG9yKiBtX25h
dmlnYXRvcjsKK307CisKK30KKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisjZW5kaWYgLy8g
QmF0dGVyeU1hbmFnZXJfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Jh
dHRlcnkvQmF0dGVyeU1hbmFnZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5
L0JhdHRlcnlNYW5hZ2VyLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
ODA4MGQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5
L0JhdHRlcnlNYW5hZ2VyLmlkbApAQCAtMCwwICsxLDQ2IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKK21vZHVsZSB3aW5kb3cgewor
CisgICAgLy8gaHR0cDovL2Rldi53My5vcmcvMjAwOS9kYXAvc3lzdGVtLWluZm8vYmF0dGVyeS1z
dGF0dXMuaHRtbAorICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUJBVFRFUllf
U1RBVFVTLAorICAgICAgICBFdmVudFRhcmdldCwKKyAgICAgXSBCYXR0ZXJ5TWFuYWdlciB7Cisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGNoYXJnaW5nOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgZG91YmxlIGNoYXJnaW5nVGltZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBkb3VibGUgbGV2ZWw7CisKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jaGFy
Z2luZ2NoYW5nZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jaGFyZ2luZ3Rp
bWVjaGFuZ2U7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZGlzY2hhcmdpbmd0
aW1lY2hhbmdlOworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmxldmVsY2hhbmdl
OworCisgICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2Fw
dHVyZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlz
dGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJv
b2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgfTsKKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeVN0YXR1cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2JhdHRlcnkvQmF0dGVyeVN0YXR1cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uM2VkNWU1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5U3RhdHVzLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzLmgiCisKKyNpZiBFTkFCTEUo
QkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlIDxsaW1pdHM+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBCYXR0ZXJ5U3RhdHVzOjpjcmVhdGUoKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmF0dGVyeVN0YXR1cyk7Cit9CisKK1Bhc3NSZWZQ
dHI8QmF0dGVyeVN0YXR1cz4gQmF0dGVyeVN0YXR1czo6Y3JlYXRlKGJvb2wgY2hhcmdpbmcsIGRv
dWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZlbCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJhdHRlcnlTdGF0dXMoY2hhcmdpbmcsIGNoYXJn
aW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZlbCkpOworfQorCisKK0JhdHRlcnlTdGF0dXM6
OkJhdHRlcnlTdGF0dXMoKQorICAgIDogbV9jaGFyZ2luZyh0cnVlKQorICAgICwgbV9jaGFyZ2lu
Z1RpbWUoMCkKKyAgICAsIG1fZGlzY2hhcmdpbmdUaW1lKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6aW5maW5pdHkoKSkKKyAgICAsIG1fbGV2ZWwoMSkKK3sKK30KKworQmF0dGVyeVN0YXR1
czo6QmF0dGVyeVN0YXR1cyhib29sIGNoYXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3Vi
bGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2ZWwpCisgICAgOiBtX2NoYXJnaW5nKGNoYXJn
aW5nKQorICAgICwgbV9jaGFyZ2luZ1RpbWUoY2hhcmdpbmdUaW1lKQorICAgICwgbV9kaXNjaGFy
Z2luZ1RpbWUoZGlzY2hhcmdpbmdUaW1lKQorICAgICwgbV9sZXZlbChsZXZlbCkKK3sKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQkFUVEVSWV9TVEFUVVMKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5U3RhdHVzLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0NTFhYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5U3RhdHVzLmgKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIEJhdHRlcnlTdGF0dXNfaAorI2RlZmluZSBCYXR0ZXJ5U3RhdHVzX2gK
KworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBCYXR0ZXJ5U3RhdHVzIDogcHVibGljIFJlZkNvdW50ZWQ8QmF0dGVyeVN0YXR1cz4g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGNyZWF0ZSgp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGNyZWF0ZShib29sIGNoYXJn
aW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUg
bGV2ZWwpOworCisgICAgYm9vbCBjaGFyZ2luZygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmdpbmc7
IH0KKyAgICBkb3VibGUgY2hhcmdpbmdUaW1lKCkgY29uc3QgIHsgcmV0dXJuIG1fY2hhcmdpbmdU
aW1lOyB9CisgICAgZG91YmxlIGRpc2NoYXJnaW5nVGltZSgpIGNvbnN0ICB7IHJldHVybiBtX2Rp
c2NoYXJnaW5nVGltZTsgfQorICAgIGRvdWJsZSBsZXZlbCgpIGNvbnN0ICB7IHJldHVybiBtX2xl
dmVsOyB9CisKK3ByaXZhdGU6CisgICAgQmF0dGVyeVN0YXR1cygpOworICAgIEJhdHRlcnlTdGF0
dXMoYm9vbCBjaGFyZ2luZywgZG91YmxlIGNoYXJnaW5nVGltZSwgZG91YmxlIGRpc2NoYXJnaW5n
VGltZSwgZG91YmxlIGxldmVsKTsKKworICAgIGJvb2wgbV9jaGFyZ2luZzsKKyAgICBkb3VibGUg
bV9jaGFyZ2luZ1RpbWU7CisgICAgZG91YmxlIG1fZGlzY2hhcmdpbmdUaW1lOworICAgIGRvdWJs
ZSBtX2xldmVsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQkFU
VEVSWV9TVEFUVVMKKyNlbmRpZiAvLyBCYXR0ZXJ5U3RhdHVzX2gKKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZmIzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5jcHAKQEAgLTAsMCAr
MSw2NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yQmF0dGVy
eS5oIgorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVyeU1h
bmFnZXIuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTmF2aWdhdG9yQmF0dGVyeTo6
TmF2aWdhdG9yQmF0dGVyeSgpCit7Cit9CisKK05hdmlnYXRvckJhdHRlcnk6On5OYXZpZ2F0b3JC
YXR0ZXJ5KCkKK3sKK30KKworQmF0dGVyeU1hbmFnZXIqIE5hdmlnYXRvckJhdHRlcnk6OndlYmtp
dEJhdHRlcnkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTmF2aWdhdG9yKiBuYXZp
Z2F0b3IpCit7CisgICAgTmF2aWdhdG9yQmF0dGVyeSogbmF2aWdhdG9yQmF0dGVyeSA9IE5hdmln
YXRvckJhdHRlcnk6OmZyb20obmF2aWdhdG9yKTsKKyAgICBpZiAoIW5hdmlnYXRvckJhdHRlcnkt
Pm1fYmF0dGVyeU1hbmFnZXIpCisgICAgICAgIG5hdmlnYXRvckJhdHRlcnktPm1fYmF0dGVyeU1h
bmFnZXIgPSBCYXR0ZXJ5TWFuYWdlcjo6Y3JlYXRlKGNvbnRleHQsIG5hdmlnYXRvcik7CisgICAg
cmV0dXJuIG5hdmlnYXRvckJhdHRlcnktPm1fYmF0dGVyeU1hbmFnZXIuZ2V0KCk7Cit9CisKK05h
dmlnYXRvckJhdHRlcnkqIE5hdmlnYXRvckJhdHRlcnk6OmZyb20oTmF2aWdhdG9yKiBuYXZpZ2F0
b3IpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiTmF2
aWdhdG9yQmF0dGVyeSIpKTsKKyAgICBOYXZpZ2F0b3JCYXR0ZXJ5KiBzdXBwbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8TmF2aWdhdG9yQmF0dGVyeSo+KFN1cHBsZW1lbnQ8TmF2aWdhdG9yPjo6ZnJvbShu
YXZpZ2F0b3IsIG5hbWUpKTsKKyAgICBpZiAoIXN1cHBsZW1lbnQpIHsKKyAgICAgICAgc3VwcGxl
bWVudCA9IG5ldyBOYXZpZ2F0b3JCYXR0ZXJ5KCk7CisgICAgICAgIHByb3ZpZGVUbyhuYXZpZ2F0
b3IsIG5hbWUsIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBs
ZW1lbnQ7Cit9CisKK0JhdHRlcnlNYW5hZ2VyKiBOYXZpZ2F0b3JCYXR0ZXJ5OjpiYXR0ZXJ5TWFu
YWdlcigpCit7CisgICAgcmV0dXJuIG1fYmF0dGVyeU1hbmFnZXIuZ2V0KCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKwor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0
dGVyeS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnku
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODMxMDc2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnku
aApAQCAtMCwwICsxLDU0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgTmF2aWdhdG9yQmF0dGVyeV9oCisjZGVmaW5l
IE5hdmlnYXRvckJhdHRlcnlfaAorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5j
bHVkZSAiUGFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJhdHRlcnlNYW5h
Z2VyOworY2xhc3MgTmF2aWdhdG9yOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKwor
Y2xhc3MgTmF2aWdhdG9yQmF0dGVyeSA6IHB1YmxpYyBTdXBwbGVtZW50PE5hdmlnYXRvcj4gewor
cHVibGljOgorICAgIHZpcnR1YWwgfk5hdmlnYXRvckJhdHRlcnkoKTsKKyAgICAKKyAgICBzdGF0
aWMgTmF2aWdhdG9yQmF0dGVyeSogZnJvbShOYXZpZ2F0b3IqKTsKKyAgICAKKyAgICBzdGF0aWMg
QmF0dGVyeU1hbmFnZXIqIHdlYmtpdEJhdHRlcnkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE5h
dmlnYXRvciopOworICAgIEJhdHRlcnlNYW5hZ2VyKiBiYXR0ZXJ5TWFuYWdlcigpOworCisgcHJp
dmF0ZToKKyAgICBOYXZpZ2F0b3JCYXR0ZXJ5KCk7CisKKyAgICBSZWZQdHI8QmF0dGVyeU1hbmFn
ZXI+IG1fYmF0dGVyeU1hbmFnZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNlbmRpZiAvLyBOYXZpZ2F0b3JCYXR0
ZXJ5X2gKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2
aWdhdG9yQmF0dGVyeS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdh
dG9yQmF0dGVyeS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkYjc4
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZp
Z2F0b3JCYXR0ZXJ5LmlkbApAQCAtMCwwICsxLDMxIEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKK21vZHVsZSB3aW5kb3cgeworCisg
ICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwK
KyAgICAgICAgQ29uZGl0aW9uYWw9QkFUVEVSWV9TVEFUVVMsCisgICAgICAgIFN1cHBsZW1lbnRh
bD1OYXZpZ2F0b3IKKyAgICBdIE5hdmlnYXRvckJhdHRlcnkgeworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgQmF0dGVyeU1hbmFnZXIgd2Via2l0QmF0dGVyeTsKKyAgICB9OworCit9CisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDY5ZTUyMDYuLjMxN2M2OTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcApAQCAtMjA2LDYgKzIwNiwxMSBAQAogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5o
IgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisjaW5jbHVkZSAiQmF0dGVy
eUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3JCYXR0ZXJ5LmgiCisjZW5kaWYKKwog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3Bh
Y2UgVW5pY29kZTsKQEAgLTE5NDksNiArMTk1NCwxMiBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVB
bGxFdmVudExpc3RlbmVycygpCiAgICAgICAgIGRvbVdpbmRvdy0+cmVtb3ZlQWxsRXZlbnRMaXN0
ZW5lcnMoKTsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpCiAgICAgICAgIG5vZGUtPnJlbW92ZUFsbEV2ZW50
TGlzdGVuZXJzKCk7CisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisgICAgaWYgKGZyYW1l
KCkpCisgICAgICAgIGlmIChCYXR0ZXJ5Q29udHJvbGxlciogYmF0dGVyeUNvbnRyb2xsZXIgPSBC
YXR0ZXJ5Q29udHJvbGxlcjo6ZnJvbShwYWdlKCkpKQorICAgICAgICAgICAgYmF0dGVyeUNvbnRy
b2xsZXItPnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CisjZW5kaWYKIH0KIAogdm9pZCBEb2N1
bWVudDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoQWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JT
dXNwZW5zaW9uIHdoeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVz
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCmluZGV4IGE2MTZmNzQuLjdjYzVk
ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaApAQCAtNDEsNiArNDEsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgbWFjcm8oYmx1cikgXAogICAgIG1hY3JvKGNhY2hlZCkgXAogICAgIG1h
Y3JvKGNoYW5nZSkgXAorICAgIG1hY3JvKGNoYXJnaW5nY2hhbmdlKSBcCisgICAgbWFjcm8oY2hh
cmdpbmd0aW1lY2hhbmdlKSBcCiAgICAgbWFjcm8oY2hlY2tpbmcpIFwKICAgICBtYWNybyhjbGlj
aykgXAogICAgIG1hY3JvKGNsb3NlKSBcCkBAIC01Niw2ICs1OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBtYWNybyhkZXZpY2Vtb3Rpb24pIFwKICAgICBtYWNybyhkZXZpY2VvcmllbnRh
dGlvbikgXAogICAgIG1hY3JvKGRpc3BsYXkpIFwKKyAgICBtYWNybyhkaXNjaGFyZ2luZ3RpbWVj
aGFuZ2UpIFwKICAgICBtYWNybyhkb3dubG9hZGluZykgXAogICAgIG1hY3JvKGRyYWcpIFwKICAg
ICBtYWNybyhkcmFnZW5kKSBcCkBAIC03NCw2ICs3Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBtYWNybyhrZXlkb3duKSBcCiAgICAgbWFjcm8oa2V5cHJlc3MpIFwKICAgICBtYWNybyhr
ZXl1cCkgXAorICAgIG1hY3JvKGxldmVsY2hhbmdlKSBcCiAgICAgbWFjcm8obG9hZCkgXAogICAg
IG1hY3JvKGxvYWRzdGFydCkgXAogICAgIG1hY3JvKG1lc3NhZ2UpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldEZhY3RvcnkuaW4gYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXRGYWN0b3J5LmluCmluZGV4IDc4Mzk2YmQuLjdhMWIzY2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldEZhY3RvcnkuaW4KKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbgpAQCAtMSw2ICsxLDcgQEAKIG5hbWVz
cGFjZT0iRXZlbnRUYXJnZXQiCiAKIEF1ZGlvQ29udGV4dCBjb25kaXRpb25hbD1XRUJfQVVESU8K
K0JhdHRlcnlNYW5hZ2VyIGNvbmRpdGlvbmFsPUJBVFRFUllfU1RBVFVTCiBEZWRpY2F0ZWRXb3Jr
ZXJDb250ZXh0IGNvbmRpdGlvbmFsPVdPUktFUlMKIERPTUFwcGxpY2F0aW9uQ2FjaGUKIERPTVdp
bmRvdwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9CYXR0ZXJ5Q2xp
ZW50TW9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0JhdHRlcnlDbGllbnRN
b2NrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmZhNmQwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9CYXR0ZXJ5Q2xpZW50
TW9jay5jcHAKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ft
c3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQmF0dGVyeUNsaWVudE1vY2suaCIKKworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKwor
I2luY2x1ZGUgIkJhdHRlcnlDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1cy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0JhdHRlcnlDbGllbnRNb2NrOjpCYXR0ZXJ5Q2xp
ZW50TW9jaygpCisgICAgOiBtX2NvbnRyb2xsZXIoMCkKK3sKK30KKworQmF0dGVyeUNsaWVudE1v
Y2s6On5CYXR0ZXJ5Q2xpZW50TW9jaygpCit7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVudE1vY2s6
OnNldENvbnRyb2xsZXIoQmF0dGVyeUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7CisgICAgQVNT
RVJUKCFtX2NvbnRyb2xsZXIpOworICAgIG1fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAg
QVNTRVJUKG1fY29udHJvbGxlcik7Cit9CisKK2Jvb2wgQmF0dGVyeUNsaWVudE1vY2s6OnN0YXJ0
VXBkYXRpbmcoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVudE1vY2s6OnN0b3BVcGRhdGluZyhjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSkKK3sKK30KKwordm9pZCBCYXR0ZXJ5Q2xpZW50TW9jazo6YmF0
dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKQoreworICAgIGRlbGV0ZSB0aGlzOworfQorCit2b2lk
IEJhdHRlcnlDbGllbnRNb2NrOjpzZXRCYXR0ZXJ5U3RhdHVzKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMpCit7Cisg
ICAgbV9iYXR0ZXJ5U3RhdHVzID0gYmF0dGVyeVN0YXR1czsKKyAgICBtX2V2ZW50VHlwZSA9IGV2
ZW50VHlwZTsKKyAgICBtX2NvbnRyb2xsZXItPmRpc3BhdGNoRXZlbnQobV9ldmVudFR5cGUsIG1f
YmF0dGVyeVN0YXR1cy5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEJBVFRFUllfU1RBVFVTCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svQmF0dGVyeUNsaWVudE1vY2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svQmF0dGVyeUNsaWVudE1vY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kMzVlY2YwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9CYXR0ZXJ5Q2xpZW50TW9jay5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0ZXJ5
Q2xpZW50TW9ja19oCisjZGVmaW5lIEJhdHRlcnlDbGllbnRNb2NrX2gKKworI2lmIEVOQUJMRShC
QVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUgIkJhdHRlcnlDbGllbnQuaCIKKyNpbmNsdWRlICJC
YXR0ZXJ5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeUNsaWVudE1vY2sgOiBwdWJsaWMgQmF0dGVy
eUNsaWVudCB7CitwdWJsaWM6CisgICAgQmF0dGVyeUNsaWVudE1vY2soKTsKKyAgICB+QmF0dGVy
eUNsaWVudE1vY2soKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250cm9sbGVyKEJhdHRlcnlD
b250cm9sbGVyKik7CisgICAgdmlydHVhbCBib29sIHN0YXJ0VXBkYXRpbmcoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBiYXR0ZXJ5Q29udHJv
bGxlckRlc3Ryb3llZCgpOworCisgICAgdm9pZCBzZXRCYXR0ZXJ5U3RhdHVzKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+KTsKKworcHJpdmF0
ZToKKyAgICBCYXR0ZXJ5Q29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgIFJlZlB0cjxCYXR0
ZXJ5U3RhdHVzPiBtX2JhdHRlcnlTdGF0dXM7CisgICAgQXRvbWljU3RyaW5nIG1fZXZlbnRUeXBl
OworfTsKKworfQorCisjZW5kaWYgLy8gQkFUVEVSWV9TVEFUVVMKKyNlbmRpZiAvLyBCYXR0ZXJ5
Q2xpZW50TW9ja19oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDFkZWJlMzYuLmMxOWI3
ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTMsNiArMTMsNyBAQCBMSVNUKEFQUEVO
RCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
d3RmL2dvYmplY3QiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2VmbCIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL21vY2siCiAgICAgJHtDYWlyb19JTkNMVURFX0RJUlN9CiAgICAgJHtFQ09SRV9Y
X0lOQ0xVREVfRElSU30KICAgICAke0VESkVfSU5DTFVERV9ESVJTfQpAQCAtMTI2LDYgKzEyNywx
MCBAQCBJRiAoRU5BQkxFX1ZJQlJBVElPTikKICAgICApCiBFTkRJRiAoKQogCitJRiAoRU5BQkxF
X0JBVFRFUllfU1RBVFVTKQorICAgIExJU1QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9S
SUVTICR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvYmF0dGVyeSkKKyAgICBMSVNUKEFQUEVORCBXZWJL
aXRfU09VUkNFUyBlZmwvV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHApCitFTkRJ
RiAoKQogCiBTRVQoV2ViS2l0X1RIRU1FX0RFRklOSVRJT04gIiIpCiBJRiAoRU5BQkxFX1BST0dS
RVNTX1RBRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Jh
dHRlcnlDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQmF0
dGVyeUNsaWVudEVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZm
ZjhiYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0
L0JhdHRlcnlDbGllbnRFZmwuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkJhdHRlcnlDbGllbnRFZmwuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CisK
KyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5Q29udHJvbGxl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0JhdHRlcnlDbGllbnRFZmw6OkJhdHRlcnlD
bGllbnRFZmwoKQorICAgIDogbV9jb250cm9sbGVyKDApCit7Cit9CisKK3ZvaWQgQmF0dGVyeUNs
aWVudEVmbDo6c2V0Q29udHJvbGxlcihCYXR0ZXJ5Q29udHJvbGxlciogY29udHJvbGxlcikKK3sK
KyAgICBtX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworfQorCitib29sIEJhdHRlcnlDbGllbnRF
Zmw6OnN0YXJ0VXBkYXRpbmcoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVudEVmbDo6c3RvcFVwZGF0aW5nKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQoreworfQorCit2b2lkIEJhdHRlcnlDbGllbnRF
Zmw6OmJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30K
Kwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpzZXRCYXR0ZXJ5U3RhdHVzKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMp
Cit7CisgICAgbV9iYXR0ZXJ5U3RhdHVzID0gYmF0dGVyeVN0YXR1czsKKyAgICBtX2V2ZW50VHlw
ZSA9IGV2ZW50VHlwZTsKKyAgICBtX2NvbnRyb2xsZXItPmRpc3BhdGNoRXZlbnQobV9ldmVudFR5
cGUsIG1fYmF0dGVyeVN0YXR1cy5nZXQoKSk7Cit9CisKK30KKworI2VuZGlmIC8vIEJBVFRFUllf
U1RBVFVTCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Jh
dHRlcnlDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRl
cnlDbGllbnRFZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjEwMDAx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQmF0
dGVyeUNsaWVudEVmbC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0ZXJ5Q2xpZW50
RWZsX2gKKyNkZWZpbmUgQmF0dGVyeUNsaWVudEVmbF9oCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9T
VEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50LmgiCisjaW5jbHVkZSAiQmF0dGVyeVN0
YXR1cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJhdHRlcnlDb250cm9sbGVy
OworCitjbGFzcyBCYXR0ZXJ5Q2xpZW50RWZsIDogcHVibGljIEJhdHRlcnlDbGllbnQgeworcHVi
bGljOgorICAgIEJhdHRlcnlDbGllbnRFZmwoKTsKKyAgICB+QmF0dGVyeUNsaWVudEVmbCgpIHsg
fTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250cm9sbGVyKEJhdHRlcnlDb250cm9sbGVyKik7
CisgICAgdmlydHVhbCBib29sIHN0YXJ0VXBkYXRpbmcoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBiYXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3ll
ZCgpOworCisgICAgdm9pZCBzZXRCYXR0ZXJ5U3RhdHVzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+KTsKKworcHJpdmF0ZToKKyAgICBCYXR0
ZXJ5Q29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgIFJlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBt
X2JhdHRlcnlTdGF0dXM7CisgICAgQXRvbWljU3RyaW5nIG1fZXZlbnRUeXBlOworfTsKKworfQor
CisjZW5kaWYgIC8vIEJBVFRFUllfU1RBVFVTCisjZW5kaWYgIC8vIEJhdHRlcnlDbGllbnRFZmxf
aAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAppbmRleCBmZDNkNmI1Li5kNDg0ZmQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCIKIAorI2luY2x1ZGUg
IkJhdHRlcnlDbGllbnRNb2NrLmgiCisjaW5jbHVkZSAiQmF0dGVyeUNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEVmbC5oIgogI2luY2x1ZGUgImV3a19wcml2YXRlLmgi
CiAKQEAgLTM4OSw2ICszOTEsMTMgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNl
dE1vY2tTY3JvbGxiYXJzRW5hYmxlZChib29sIGVuYWJsZSkKICAgICBXZWJDb3JlOjpTZXR0aW5n
czo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGVuYWJsZSk7CiB9CiAKK3ZvaWQgRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsOjpzZXRNb2NrQmF0dGVyeVN0YXR1cyhFdmFzX09iamVjdCogZXdrVmll
dywgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSwgYm9vbCBjaGFyZ2luZywgZG91YmxlIGNoYXJnaW5n
VGltZSwgZG91YmxlIGRpc2NoYXJnaW5nVGltZSwgZG91YmxlIGxldmVsKQoreworICAgIFdlYkNv
cmU6OlBhZ2UqIHBhZ2UgPSBFV0tQcml2YXRlOjpjb3JlUGFnZShld2tWaWV3KTsgICAgCisgICAg
V2ViQ29yZTo6QmF0dGVyeUNsaWVudE1vY2sqIG1vY2tDbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpCYXR0ZXJ5Q2xpZW50TW9jayo+KFdlYkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjpmcm9t
KHBhZ2UpLT5jbGllbnQoKSk7CisgICAgbW9ja0NsaWVudC0+c2V0QmF0dGVyeVN0YXR1cyhldmVu
dFR5cGUsIFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6OmNyZWF0ZShjaGFyZ2luZywgY2hhcmdpbmdU
aW1lLCBkaXNjaGFyZ2luZ1RpbWUsIGxldmVsKSk7Cit9CisKIHZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBpbnQgZGV2aWNlRFBJLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZXZpY2VTaXplLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBhdmFpbGFibGVTaXplKQogewogICAgIFdlYkNvcmU6OlBh
Z2UqIHBhZ2UgPSBFV0tQcml2YXRlOjpjb3JlUGFnZShld2tWaWV3KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5o
IGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsLmgKaW5kZXggOTUwYTc4ZC4uNDhjODc5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9l
ZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgKQEAg
LTc3LDYgKzc3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzVGFyZ2V0SXRlbShjb25z
dCBFd2tfSGlzdG9yeV9JdGVtKik7CiAKICAgICBzdGF0aWMgdm9pZCBzZXRNb2NrU2Nyb2xsYmFy
c0VuYWJsZWQoYm9vbCk7CisgICAgc3RhdGljIHZvaWQgc2V0TW9ja0JhdHRlcnlTdGF0dXMoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEF0b21pY1N0cmluZyBldmVudFR5cGUsIGJvb2wgY2hhcmdpbmcs
IGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZl
bCk7ICAgIAogCiAgICAgc3RhdGljIHZvaWQgZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChF
dmFzX09iamVjdCogZXdrVmlldywgaW50IGRldmljZURQSSwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgZGV2aWNlU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYXZhaWxhYmxlU2l6ZSk7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5kZXggOGE5Njc0MC4uMmYzNzhlOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCkBAIC03NCw2ICs3NCwxMSBAQAogI2luY2x1ZGUg
IlZpYnJhdGlvbkNsaWVudEVmbC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFU
VVMpCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudEVmbC5oIgorI2luY2x1ZGUgIkJhdHRlcnlDbGll
bnRNb2NrLmgiCisjZW5kaWYKKwogc3RhdGljIGNvbnN0IGZsb2F0IHpvb21NaW5pbXVtID0gMC4w
NTsKIHN0YXRpYyBjb25zdCBmbG9hdCB6b29tTWF4aW11bSA9IDQuMDsKIApAQCAtNjI1LDYgKzYz
MCwxMyBAQCBzdGF0aWMgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXco
RXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogICAgIFdlYkNvcmU6OnByb3ZpZGVWaWJy
YXRpb25Ubyhwcml2LT5wYWdlLCBuZXcgV2ViQ29yZTo6VmlicmF0aW9uQ2xpZW50RWZsKHNtYXJ0
RGF0YS0+c2VsZikpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisgICAg
aWYgKHNtYXJ0RGF0YS0+YXBpLT51c2VNb2NrKQorICAgICAgICBXZWJDb3JlOjpwcm92aWRlQmF0
dGVyeVRvKHByaXYtPnBhZ2UsIG5ldyBXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50TW9jayk7CisgICAg
ZWxzZQorICAgICAgICBXZWJDb3JlOjpwcm92aWRlQmF0dGVyeVRvKHByaXYtPnBhZ2UsIG5ldyBX
ZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsKTsKKyNlbmRpZgorCiAgICAgcHJpdi0+cGFnZVNldHRp
bmdzID0gcHJpdi0+cGFnZS0+c2V0dGluZ3MoKTsKICAgICBpZiAoIXByaXYtPnBhZ2VTZXR0aW5n
cykgewogICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGdldCBwYWdlIHNldHRpbmdzLiIpOwpA
QCAtNzkzLDggKzgwNSw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiAgICAgc21hcnREYXRhLT5iZ19jb2xvci5hID0gMjU1OwogCiAgICAg
c21hcnREYXRhLT5zZWxmID0gZXdrVmlldzsKLSAgICBzbWFydERhdGEtPl9wcml2ID0gX2V3a192
aWV3X3ByaXZfbmV3KHNtYXJ0RGF0YSk7CiAgICAgc21hcnREYXRhLT5hcGkgPSBhcGk7CisgICAg
c21hcnREYXRhLT5fcHJpdiA9IF9ld2tfdmlld19wcml2X25ldyhzbWFydERhdGEpOwogCiAgICAg
X3BhcmVudF9zYy5hZGQoZXdrVmlldyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdmlldy5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKaW5kZXgg
N2RlMGU0Ni4uOTYwMWYxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192
aWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKQEAgLTEyMiw2ICsx
MjIsNyBAQCB0eXBlZGVmIGVudW0gX0V3a19Gb2N1c19EaXJlY3Rpb24gRXdrX0ZvY3VzX0RpcmVj
dGlvbjsKIHN0cnVjdCBfRXdrX1ZpZXdfU21hcnRfQ2xhc3MgewogICAgIEV2YXNfU21hcnRfQ2xh
c3Mgc2M7IC8qKjwgQWxsIGJ1dCAnZGF0YScgaXMgZnJlZSB0byBiZSBjaGFuZ2VkLiAqLwogICAg
IHVuc2lnbmVkIGxvbmcgdmVyc2lvbjsKKyAgICBFaW5hX0Jvb2wgdXNlTW9jazsKIAogICAgIEV2
YXNfT2JqZWN0ICooKndpbmRvd19jcmVhdGUpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFaW5h
X0Jvb2wgamF2YXNjcmlwdCwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAqd2luZG93X2ZlYXR1
cmVzKTsgLyoqPCBjcmVhdGVzIGEgbmV3IHdpbmRvdywgcmVxdWVzdGVkIGJ5IHdlYmtpdCAqLwog
ICAgIHZvaWQgKCp3aW5kb3dfY2xvc2UpKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKTsgLyoqPCBj
bG9zZXMgYSB3aW5kb3cgKi8KQEAgLTIzNjQsNiArMjM2NSw4IEBAIEVBUEkgU291cFNlc3Npb24q
IGV3a192aWV3X3NvdXBfc2Vzc2lvbl9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwogICovCiBF
QVBJIHZvaWQgZXdrX3ZpZXdfc291cF9zZXNzaW9uX3NldChFdmFzX09iamVjdCAqbywgU291cFNl
c3Npb24gKnNlc3Npb24pOwogCitFQVBJIHZvaWQgZXdrX3ZpZXdfZHVtcF9yZW5kZXJfdHJlZV9t
b2RlX2VuYWJsZShFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGZsYWcpOworCiAjaWZk
ZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlv
bnNFZmwuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQppbmRleCA3Njk4NTVj
Li4zNjNlNGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysg
Yi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQpAQCAtNjMsNiArNjMsNyBAQCBTRVQoVEhF
TUVfQklOQVJZX0RJUiAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdC9lZmwvRGVmYXVsdFRoZW1l
KQogCiBTRVQoVkVSU0lPTl9TQ1JJUFQgIi1XbCwtLXZlcnNpb24tc2NyaXB0LCR7Q01BS0VfTU9E
VUxFX1BBVEh9L2VmbHN5bWJvbHMuZmlsdGVyIikKIAorV0VCS0lUX0ZFQVRVUkUoRU5BQkxFX0JB
VFRFUllfU1RBVFVTICJFbmFibGUgYmF0dGVyeSBzdGF0dXMgYXBpIiBERUZBVUxUIE9OKQogV0VC
S0lUX0ZFQVRVUkUoRU5BQkxFX0JMT0IgIkVuYWJsZSBibG9iIHNsaWNlIiBERUZBVUxUIE9GRikK
IFdFQktJVF9GRUFUVVJFKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORyAiRW5hYmxlIGNoYW5uZWwg
bWVzc2FnaW5nIiBERUZBVUxUIE9OKQogV0VCS0lUX0ZFQVRVUkUoRU5BQkxFX0NMSUVOVF9CQVNF
RF9HRU9MT0NBVElPTiAiRW5hYmxlIGNsaWVudCBiYXNlZCBnZW9sb2NhdGlvbiIgREVGQVVMVCBP
RkYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZSBiL1NvdXJjZS9jbWFr
ZWNvbmZpZy5oLmNtYWtlCmluZGV4IGZlZjczMGEuLjllZDU0OWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9jbWFrZWNvbmZpZy5oLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCkBA
IC02LDYgKzYsNyBAQAogCiAKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9BU19JTUFHRQorI2NtYWtl
ZGVmaW5lMDEgRU5BQkxFX0JBVFRFUllfU1RBVFVTCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfQkxP
QgogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HCiAjY21ha2VkZWZpbmUw
MSBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKaW5kZXggMDc3YjA4Mi4uYmY0NWI0ZSAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtMTI4OCw2
ICsxMjg4LDI3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRk
ZW5Gb3JVUkxTY2hlbWVDYWxsYmFjayhKU0NvbnRleHRSZWYKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldE1vY2tCYXR0
ZXJ5U3RhdHVzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlm
IChhcmd1bWVudENvdW50IDwgNSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWlu
dGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBldmVudFR5cGUoQWRv
cHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
KTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGJvb2wgbV9jaGFyZ2luZyA9IEpTVmFs
dWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzFdKTsKKyAgICBkb3VibGUgbV9jaGFyZ2lu
Z1RpbWUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24p
OworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgZG91YmxlIG1fZGlzY2hhcmdpbmdUaW1l
ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1szXSwgZXhjZXB0aW9uKTsKKyAg
ICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGRvdWJsZSBtX2xldmVsID0gSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGFyZ3VtZW50c1s0XSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNl
cHRpb24pOworICAgIAorICAgIGNvbnRyb2xsZXItPnNldEJhdHRlcnlTdGF0dXMoZXZlbnRUeXBl
LmdldCgpLCBtX2NoYXJnaW5nLCBtX2NoYXJnaW5nVGltZSwgbV9kaXNjaGFyZ2luZ1RpbWUsIG1f
bGV2ZWwpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwog
c3RhdGljIEpTVmFsdWVSZWYgc2V0TW9ja0RldmljZU9yaWVudGF0aW9uQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGlmIChhcmd1bWVudENvdW50IDwgNikKQEAg
LTI0NDUsNiArMjQ2Niw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RDb250cm9sbGVy
OjpzdGF0aWNGdW5jdGlvbnMoKQogICAgICAgICB7ICJzZXRKYXZhU2NyaXB0UHJvZmlsaW5nRW5h
YmxlZCIsIHNldEphdmFTY3JpcHRQcm9maWxpbmdFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICAgICAgeyAic2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlciIsIHNldE1haW5GcmFtZUlzRmly
c3RSZXNwb25kZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRNaW5pbXVtVGltZXJJ
bnRlcnZhbCIsIHNldE1pbmltdW1UaW1lckludGVydmFsQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAg
ICAgeyAic2V0TW9ja0JhdHRlcnlTdGF0dXMiLCBzZXRNb2NrQmF0dGVyeVN0YXR1c0NhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgInNldE1vY2tEZXZpY2VPcmllbnRhdGlvbiIsIHNldE1vY2tE
ZXZpY2VPcmllbnRhdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldE1vY2tHZW9s
b2NhdGlvbkVycm9yIiwgc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3JDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIsIHNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0xheW91dFRlc3RDb250cm9sbGVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5oCmluZGV4IDQ1MjY1ZGIuLjlkNjQ0MTIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaApAQCAtMTA0LDYgKzEwNCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEphdmFTY3JpcHRQcm9maWxpbmdFbmFibGVkKGJvb2wgcHJvZmlsaW5n
RW5hYmxlZCk7CiAgICAgdm9pZCBzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wg
ZmxhZyk7CiAgICAgdm9pZCBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgZmxhZyk7
CisgICAgdm9pZCBzZXRCYXR0ZXJ5U3RhdHVzKEpTU3RyaW5nUmVmIGV2ZW50VHlwZSwgYm9vbCBj
aGFyZ2luZywgZG91YmxlIGNoYXJnaW5nVGltZSwgZG91YmxlIGRpc2NoYXJnaW5nVGltZSwgZG91
YmxlIGxldmVsKTsKICAgICB2b2lkIHNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblBy
b3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0
YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSk7CiAgICAgdm9pZCBzZXRNb2Nr
R2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwgSlNTdHJpbmdSZWYgbWVzc2FnZSk7CiAgICAgdm9p
ZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25n
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvRHVtcFJlbmRlclRyZWVWaWV3LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9E
dW1wUmVuZGVyVHJlZVZpZXcuY3BwCmluZGV4IGIxNjQwMWEuLmNkYTAxMDIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcuY3BwCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcuY3BwCkBAIC0xMTIsNSAr
MTEyLDcgQEAgRXZhc19PYmplY3QqIGRydFZpZXdBZGQoRXZhcyogZXZhcykKICAgICBhcGkud2lu
ZG93X2NyZWF0ZSA9IG9uV2luZG93Q3JlYXRlOwogICAgIGFwaS53aW5kb3dfY2xvc2UgPSBvbldp
bmRvd0Nsb3NlOwogCisgICAgYXBpLnVzZU1vY2sgPSB0cnVlOworCiAgICAgcmV0dXJuIGV2YXNf
b2JqZWN0X3NtYXJ0X2FkZChldmFzLCBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNjKSk7CiB9
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xs
ZXJFZmwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVy
RWZsLmNwcAppbmRleCBkYTBjN2NhLi4zNjkwMzY2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKQEAgLTM0OSw2ICszNDks
MTUgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
QmF0dGVyeVN0YXR1cyhKU1N0cmluZ1JlZiBldmVudFR5cGUsIGJvb2wgY2hhcmdpbmcsIGRvdWJs
ZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZlbCkKK3sK
KyAgICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXpl
KGV2ZW50VHlwZSk7CisgICAgY2hhciogZXZlbnRUeXBlQnVmZmVyID0gbmV3IGNoYXJbbWF4TGVu
Z3RoICsgMV07CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhldmVudFR5cGUsIGV2ZW50VHlw
ZUJ1ZmZlciwgbWF4TGVuZ3RoICsgMSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpz
ZXRNb2NrQmF0dGVyeVN0YXR1cyhicm93c2VyLT5tYWluVmlldygpLCBldmVudFR5cGVCdWZmZXIs
IGNoYXJnaW5nLCBjaGFyZ2luZ1RpbWUsIGRpc2NoYXJnaW5nVGltZSwgbGV2ZWwpOworICAgIGRl
bGV0ZVtdIGV2ZW50VHlwZUJ1ZmZlcjsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wsIGRvdWJsZSwgYm9vbCwgZG91YmxlLCBib29s
LCBkb3VibGUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgRGV2aWNlT3JpZW50YXRp
b24gbGF5b3V0IHRlc3RzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQg
Yi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCBmMjBhYWFlLi5jYWUzZjM4IDEwMDc1
NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3JpcHRzL2J1
aWxkLXdlYmtpdApAQCAtNzAsNiArNzAsNyBAQCBteSAoCiAgICAgJHRocmVlRFJlbmRlcmluZ1N1
cHBvcnQsCiAgICAgJGFjY2VsZXJhdGVkMmRDYW52YXNTdXBwb3J0LAogICAgICRhbmltYXRpb25B
UElTdXBwb3J0LAorICAgICRiYXR0ZXJ5c3RhdHVzQVBJU3VwcG9ydCwKICAgICAkYmxvYlN1cHBv
cnQsCiAgICAgJGNoYW5uZWxNZXNzYWdpbmdTdXBwb3J0LAogICAgICRjbGllbnRCYXNlZEdlb2xv
Y2F0aW9uU3VwcG9ydCwKQEAgLTE1OSw2ICsxNjAsOSBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAg
eyBvcHRpb24gPT4gImFuaW1hdGlvbi1hcGkiLCBkZXNjID0+ICJUb2dnbGUgYW5pbWF0aW9uIEFQ
SSBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0FOSU1BVElPTl9BUEkiLCBkZWZh
dWx0ID0+IGlzQmxhY2tCZXJyeSgpLCB2YWx1ZSA9PiBcJGFuaW1hdGlvbkFQSVN1cHBvcnQgfSwK
IAorICAgIHsgb3B0aW9uID0+ICJiYXR0ZXJ5LXN0YXR1cy1hcGkiLCBkZXNjID0+ICJUb2dnbGUg
YmF0dGVyeSBzdGF0dXMgQVBJIHN1cHBvcnQiLAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfQkFU
VEVSWV9TVEFUVVMiLCBkZWZhdWx0ID0+IGlzRWZsKCksIHZhbHVlID0+IFwkYmF0dGVyeXN0YXR1
c0FQSVN1cHBvcnQgfSwKKwogICAgIHsgb3B0aW9uID0+ICJibG9iIiwgZGVzYyA9PiAiVG9nZ2xl
IEJsb2Igc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9CTE9CIiwgZGVmYXVsdCA9
PiAoaXNBcHBsZU1hY1dlYktpdCgpIHx8IGlzR3RrKCkgfHwgaXNDaHJvbWl1bSgpIHx8IGlzQmxh
Y2tCZXJyeSgpKSwgdmFsdWUgPT4gXCRibG9iU3VwcG9ydCB9LAogCkBAIC0zMTMsMTMgKzMxNywx
MyBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVFlMRV9TQ09Q
RUQiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkc3R5bGVTY29wZWRTdXBwb3J0IH0sCiAKICAg
ICB7IG9wdGlvbiA9PiAic3ZnIiwgZGVzYyA9PiAiVG9nZ2xlIFNWRyBzdXBwb3J0IiwKLSAgICAg
IGRlZmluZSA9PiAiRU5BQkxFX1NWRyIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRzdmdTdXBw
b3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVkciLCBkZWZhdWx0ID0+IDAsIHZhbHVl
ID0+IFwkc3ZnU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gInN2Zy1kb20tb2JqYy1iaW5k
aW5ncyIsIGRlc2MgPT4gIlRvZ2dsZSBTVkcgRE9NIE9iamVjdGl2ZS1DIGJpbmRpbmdzIHN1cHBv
cnQgKGltcGxpZXMgU1ZHIHN1cHBvcnQpIiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NWR19E
T01fT0JKQ19CSU5ESU5HUyIsIGRlZmF1bHQgPT4gaXNBcHBsZU1hY1dlYktpdCgpLCB2YWx1ZSA9
PiBcJHN2Z0RPTU9iakNCaW5kaW5nc1N1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJzdmct
Zm9udHMiLCBkZXNjID0+ICJUb2dnbGUgU1ZHIGZvbnRzIHN1cHBvcnQgKGltcGxlcyBTVkcgc3Vw
cG9ydCkiLAotICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1ZHX0ZPTlRTIiwgZGVmYXVsdCA9PiAx
LCB2YWx1ZSA9PiBcJHN2Z0ZvbnRzU3VwcG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVf
U1ZHX0ZPTlRTIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJHN2Z0ZvbnRzU3VwcG9ydCB9LAog
CiAgICAgeyBvcHRpb24gPT4gInRpbGVkLWJhY2tpbmctc3RvcmUiLCBkZXNjID0+ICJUb2dnbGUg
VGlsZWQgQmFja2luZyBTdG9yZSBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiV1RGX1VTRV9U
SUxFRF9CQUNLSU5HX1NUT1JFIiwgZGVmYXVsdCA9PiBpc1F0KCksIHZhbHVlID0+IFwkdGlsZWRC
YWNraW5nU3RvcmVTdXBwb3J0IH0sCkBAIC0zMzcsNyArMzQxLDcgQEAgbXkgQGZlYXR1cmVzID0g
KAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfVklERU8iLCBkZWZhdWx0ID0+IChpc0FwcGxlV2Vi
S2l0KCkgfHwgaXNHdGsoKSB8fCBpc0JsYWNrQmVycnkoKSB8fCBpc0VmbCgpKSwgdmFsdWUgPT4g
XCR2aWRlb1N1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJ2aWRlby10cmFjayIsIGRlc2Mg
PT4gIlRvZ2dsZSBWaWRlbyBUcmFjayBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9PiAiRU5BQkxF
X1ZJREVPX1RSQUNLIiwgZGVmYXVsdCA9PiAoaXNBcHBsZVdlYktpdCgpIHx8IGlzR3RrKCkpLCB2
YWx1ZSA9PiBcJHZpZGVvVHJhY2tTdXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9W
SURFT19UUkFDSyIsIGRlZmF1bHQgPT4gKGlzQXBwbGVXZWJLaXQoKSB8fCBpc0d0aygpIHx8IGlz
RWZsKCkpLCB2YWx1ZSA9PiBcJHZpZGVvVHJhY2tTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9
PiAid2ViLWF1ZGlvIiwgZGVzYyA9PiAiVG9nZ2xlIFdlYiBBdWRpbyBzdXBwb3J0IiwKICAgICAg
IGRlZmluZSA9PiAiRU5BQkxFX1dFQl9BVURJTyIsIGRlZmF1bHQgPT4gMCwgdmFsdWU9PiBcJHdl
YkF1ZGlvU3VwcG9ydCB9LAo=
</data>
<flag name="review"
          id="132424"
          type_id="1"
          status="-"
          setter="gustavo"
    />
    <flag name="commit-queue"
          id="132425"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129806</attachid>
            <date>2012-03-01 21:37:21 -0800</date>
            <delta_ts>2012-03-02 00:24:46 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>battery.patch</filename>
            <type>text/plain</type>
            <size>86116</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1MjI4M2RlLi4xMWU3NDhi
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTItMDMtMDEgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgU3VwcG9ydCBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKworICAgICAgICBFbmFibGUgQkFU
VEVSWV9TVEFUVVMgZm9yIFdlYktpdC1FZmwuCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RS
L2JhdHRlcnktc3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2U6CisgICAgICAgICogU291
cmNlL2NtYWtlY29uZmlnLmguY21ha2U6CisKIDIwMTItMDMtMDEgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGVyZi1vLW1hdGljOiBnZW5lcmF0ZSBkYXNoYm9h
cmQgaW1hZ2VzIGZvciAzMCwgOTAsIGFuZCAzNjUgZGF5cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGMxZTM5M2YuLjVmZGEz
YWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMi0wMy0wMSAgS2lob25nIEt3b24gIDxraWhv
bmcua3dvbkBzYW1zdW5nLmNvbT4KKworICAgICAgICBTdXBwb3J0IGZvciBCYXR0ZXJ5IFN0YXR1
cyBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MjY5OAorCisgICAgICAgIEFkZCBuZXcgdGVzdCBjYXNlcyBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJ
LgorICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9iYXR0ZXJ5LXN0YXR1cy8KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL0JhdHRl
cnlTdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2stZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxi
YWNrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYmFzaWMt
b3BlcmF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVy
eVN0YXR1cy9iYXNpYy1vcGVyYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20v
QmF0dGVyeVN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9u
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvbXVsdGlwbGUt
ZnJhbWVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0
YXR1cy9tdWx0aXBsZS1mcmFtZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9uby1wYWdlLWNhY2hlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9uby1wYWdlLWNhY2hlLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvcmVzb3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9yZXNvdXJjZXMvY2FjaGVk
LXBhZ2UtMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Jl
c291cmNlcy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLW5ldy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9hZGQtbGlzdGVuZXItZnJvbS1j
YWxsYmFjay5qczogQWRkZWQuCisgICAgICAgIChjaGVja0JhdHRlcnlTdGF0dXMpOgorICAgICAg
ICAoZmlyc3RMaXN0ZW5lcik6CisgICAgICAgIChzZWNvbmRMaXN0ZW5lcik6CisgICAgICAgICht
YXliZUZpbmlzaFRlc3QpOgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0
LXRlc3RzL2Jhc2ljLW9wZXJhdGlvbi5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5qczogQWRkZWQu
CisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvbXVsdGlwbGUt
ZnJhbWVzLmpzOiBBZGRlZC4KKyAgICAgICAgKGNoZWNrQmF0dGVyeVN0YXR1cyk6CisgICAgICAg
IChjaGVja0NoaWxkQmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChtYWluRnJhbWVMaXN0ZW5lcik6
CisgICAgICAgIChjaGlsZEZyYW1lTGlzdGVuZXIpOgorICAgICAgICAobWF5YmVGaW5pc2hUZXN0
KToKKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9uby1wYWdl
LWNhY2hlLmpzOiBBZGRlZC4KKyAgICAgICAgKHJlcG9ydFBhZ2VPbmVPbmxvYWQpOgorICAgICAg
ICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL3VwZGF0ZXMuanM6IEFkZGVk
LgorICAgICAgICAoY2hlY2tCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKHNldE1vY2tCYXR0ZXJ5
U3RhdHVzKToKKyAgICAgICAgKGZpcnN0TGlzdGVuZXIpOgorICAgICAgICAodXBkYXRlTGlzdGVu
ZXIpOgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL3dpbmRv
dy1wcm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChoYXNPbkJhdHRlcnlQcm9wZXJ0eSk6Cisg
ICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy91cGRhdGVzLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy91cGRhdGVzLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvd2luZG93LXByb3BlcnR5LWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy93aW5kb3ct
cHJvcGVydHkuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0OgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6
CisgICAgICAgICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vd2lu
Y2Fpcm8vU2tpcHBlZDoKKwogMjAxMi0wMy0wMSAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGdhcmRlbmluZy4gTWFyayBhIEpTIHN0cmljdCBt
b2RlIHRlc3QgYXMgZmFpbGluZyBpbiBWOCwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL0JhdHRlcnlTdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2stZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1j
YWxsYmFjay1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZTIxNDdkZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlT
dGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2stZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MjEgQEAKK1Rlc3RzIHRoYXQgYWRkaW5nIGEgbmV3IGV2ZW50IGxpc3RlbmVyIGZyb20gYSBjYWxs
YmFjayB3b3JrcyBhcyBleHBlY3RlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBpcyBtb2NrQ2hhcmdpbmcKK1BBU1MgYmF0dGVyeS5jaGFy
Z2luZ1RpbWUgaXMgbW9ja0NoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGlt
ZSBpcyBtb2NrRGlzY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkubGV2ZWwgaXMgbW9ja0xldmVs
CitQQVNTIGJhdHRlcnkuY2hhcmdpbmcgaXMgbW9ja0NoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hh
cmdpbmdUaW1lIGlzIG1vY2tDaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1Rp
bWUgaXMgbW9ja0Rpc2NoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmxldmVsIGlzIG1vY2tMZXZl
bAorUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIG1vY2tDaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNo
YXJnaW5nVGltZSBpcyBtb2NrQ2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkuZGlzY2hhcmdpbmdU
aW1lIGlzIG1vY2tEaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBtb2NrTGV2
ZWwKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2FkZC1saXN0ZW5l
ci1mcm9tLWNhbGxiYWNrLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVz
L2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZmFkOTk4NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL0JhdHRlcnlTdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suaHRtbApAQCAtMCww
ICsxLDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9
InNjcmlwdC10ZXN0cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0
ZXJ5U3RhdHVzL2Jhc2ljLW9wZXJhdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9CYXR0ZXJ5U3RhdHVzL2Jhc2ljLW9wZXJhdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM5YmUzYQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYmFzaWMtb3BlcmF0aW9uLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDEzIEBACitUZXN0cyB0aGUgYmFzaWMgb3BlcmF0aW9uIG9mIEJhdHRl
cnlTdGF0dXMgdXNpbmcgdGhlIG1vY2suCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIGJhdHRlcnkuY2hhcmdpbmcgaXMgbW9ja0NoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hh
cmdpbmdUaW1lIGlzIG1vY2tDaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1Rp
bWUgaXMgbW9ja0Rpc2NoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmxldmVsIGlzIG1vY2tMZXZl
bAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYmFzaWMtb3BlcmF0
aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2Jhc2ljLW9wZXJh
dGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNTdiZTYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2Jhc2lj
LW9wZXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2Jhc2ljLW9wZXJhdGlvbi5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0
aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTZi
YzM5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1
cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK1Rl
c3RzIGZvciBhIGNyYXNoIHdoZXJlIGFuIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHRoZSBwYWdlIGhh
cyBiZWVuIG5hdmlnYXRlZCBhd2F5IHdoZW4gdGhlIG9yaWdpbmFsIHBhZ2UgaXMgaW4gdGhlIHBh
Z2UgY2FjaGUuCisKK1NVQ0NFU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Jh
dHRlcnlTdGF0dXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vQmF0dGVyeVN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1N2FlZgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5o
dG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24uanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vQmF0dGVyeVN0YXR1cy9tdWx0aXBsZS1mcmFtZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9tdWx0aXBsZS1mcmFtZXMtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMGE5NjYKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNyBAQAorVGVzdHMgdXNpbmcgQmF0dGVyeVN0YXR1cyBm
cm9tIG11bHRpcGxlIGZyYW1lcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BB
U1MgYmF0dGVyeS5jaGFyZ2luZyBpcyBtb2NrQ2hhcmdpbmcKK1BBU1MgYmF0dGVyeS5jaGFyZ2lu
Z1RpbWUgaXMgbW9ja0NoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBp
cyBtb2NrRGlzY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkubGV2ZWwgaXMgbW9ja0xldmVsCitQ
QVNTIGNoaWxkQmF0dGVyeS5jaGFyZ2luZyBpcyBtb2NrQ2hhcmdpbmcKK1BBU1MgY2hpbGRCYXR0
ZXJ5LmNoYXJnaW5nVGltZSBpcyBtb2NrQ2hhcmdpbmdUaW1lCitQQVNTIGNoaWxkQmF0dGVyeS5k
aXNjaGFyZ2luZ1RpbWUgaXMgbW9ja0Rpc2NoYXJnaW5nVGltZQorUEFTUyBjaGlsZEJhdHRlcnku
bGV2ZWwgaXMgbW9ja0xldmVsCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0
YXR1cy9tdWx0aXBsZS1mcmFtZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlT
dGF0dXMvbXVsdGlwbGUtZnJhbWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNGY3OWNhYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Jh
dHRlcnlTdGF0dXMvbXVsdGlwbGUtZnJhbWVzLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbXVs
dGlwbGUtZnJhbWVzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvbm8tcGFnZS1jYWNoZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL25vLXBhZ2UtY2Fj
aGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNDE5
ODQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVz
L25vLXBhZ2UtY2FjaGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1Rlc3RzIHRoYXQg
cGFnZXMgdGhhdCB1c2UgQmF0dGVyeVN0YXR1cyBhcmUgbm90IHB1dCBpbiB0aGUgcGFnZSBjYWNo
ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK01haW4gcGFnZSBvcGVuaW5nIHJl
c291cmNlcy9jYWNoZWQtcGFnZS0xLmh0bWwKK3Jlc291cmNlcy9jYWNoZWQtcGFnZS0xLmh0bWwg
b25sb2FkIGZpcmVkLCBjb3VudCA9IDEKK3Jlc291cmNlcy9jYWNoZWQtcGFnZS0xLmh0bWwgYWJv
dXQgdG8gbmF2aWdhdGUgdG8gcmVzb3VyY2VzL2NhY2hlZC1wYWdlLTIuaHRtbAorcmVzb3VyY2Vz
L2NhY2hlZC1wYWdlLTIuaHRtbCBhYm91dCB0byBnbyBiYWNrIHRvIHJlc291cmNlcy9jYWNoZWQt
cGFnZS0xLmh0bWwKK3Jlc291cmNlcy9jYWNoZWQtcGFnZS0xLmh0bWwgb25sb2FkIGZpcmVkLCBj
b3VudCA9IDIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL25vLXBh
Z2UtY2FjaGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvbm8tcGFn
ZS1jYWNoZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOGQ5MDAK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL25v
LXBhZ2UtY2FjaGUuaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9uby1wYWdlLWNhY2hlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZG9tL0JhdHRlcnlTdGF0dXMvcmVzb3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvcmVzb3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDExYTg5Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9yZXNvdXJjZXMvY2Fj
aGVkLXBhZ2UtMS5odG1sCkBAIC0wLDAgKzEsMTEgQEAKKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2Fk
TmV4dCgpIHsKKyAgICBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdj
aGFyZ2luZ2NoYW5nZScsIGZ1bmN0aW9uKCkge30pOworICAgIGlmICh3aW5kb3cub3BlbmVyLnJl
cG9ydFBhZ2VPbmVPbmxvYWQoKSA9PSAxKSB7CisgICAgICAgIHdpbmRvdy5vcGVuZXIuZGVidWco
J3Jlc291cmNlcy9jYWNoZWQtcGFnZS0xLmh0bWwgYWJvdXQgdG8gbmF2aWdhdGUgdG8gcmVzb3Vy
Y2VzL2NhY2hlZC1wYWdlLTIuaHRtbCcpCisgICAgICAgIC8vIExvY2F0aW9uIGNoYW5nZXMgbmVl
ZCB0byBoYXBwZW4gb3V0c2lkZSB0aGUgb25sb2FkIGhhbmRsZXIgdG8gZ2VuZXJhdGUgaGlzdG9y
eSBlbnRyaWVzLgorICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBsb2NhdGlvbi5ocmVm
ID0gJ2NhY2hlZC1wYWdlLTIuaHRtbCc7IH0sIDApOworICAgIH0KK30KKzwvc2NyaXB0PgorPGJv
ZHkgb25sb2FkPSJsb2FkTmV4dCgpIj48L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Jlc291cmNlcy9jYWNoZWQtcGFnZS0yLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Jlc291cmNlcy9jYWNoZWQtcGFnZS0yLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3OGY5YwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvcmVzb3VyY2VzL2Nh
Y2hlZC1wYWdlLTIuaHRtbApAQCAtMCwwICsxLDggQEAKKzxzY3JpcHQ+CitmdW5jdGlvbiBpbml0
KCkgeworICAgIHdpbmRvdy5vcGVuZXIucGFnZVR3b0xvYWRlZCA9IHRydWU7CisgICAgd2luZG93
Lm9wZW5lci5kZWJ1ZygncmVzb3VyY2VzL2NhY2hlZC1wYWdlLTIuaHRtbCBhYm91dCB0byBnbyBi
YWNrIHRvIHJlc291cmNlcy9jYWNoZWQtcGFnZS0xLmh0bWwnKTsKKyAgICBoaXN0b3J5LmJhY2so
KTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJpbml0KCkiPjwvYm9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvcmVzb3VyY2VzL2V2ZW50LWFm
dGVyLW5hdmlnYXRpb24tbmV3Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3Rh
dHVzL3Jlc291cmNlcy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLW5ldy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTdiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Jlc291cmNlcy9ldmVudC1hZnRlci1uYXZp
Z2F0aW9uLW5ldy5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzxodG1sPgorICA8aGVhZD4KKyAgPC9o
ZWFkPgorICA8Ym9keT4KKyAgICBUZXN0cyBmb3IgYSBjcmFzaCB3aGVyZSBhbiBldmVudCBpcyBm
aXJlZCBhZnRlciB0aGUgcGFnZSBoYXMgYmVlbiBuYXZpZ2F0ZWQKKyAgICBhd2F5IHdoZW4gdGhl
IG9yaWdpbmFsIHBhZ2UgaXMgaW4gdGhlIHBhZ2UgY2FjaGUuPGJyPjxicj4KKyAgICBTVUNDRVNT
CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0TW9ja0JhdHRlcnlTdGF0dXMo
J2NoYXJnaW5nY2hhbmdlJywgdHJ1ZSwgMCwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCAxLjAp
OworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAg
ICB9CisgICAgPC9zY3JpcHQ+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2FkZC1saXN0ZW5lci1m
cm9tLWNhbGxiYWNrLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3Jp
cHQtdGVzdHMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDI5YTdkNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2FkZC1saXN0ZW5lci1mcm9tLWNh
bGxiYWNrLmpzCkBAIC0wLDAgKzEsNDkgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyB0aGF0IGFkZGlu
ZyBhIG5ldyBldmVudCBsaXN0ZW5lciBmcm9tIGEgY2FsbGJhY2sgd29ya3MgYXMgZXhwZWN0ZWQu
Jyk7CisKK3ZhciBtb2NrQ2hhcmdpbmcgPSB0cnVlOwordmFyIG1vY2tDaGFyZ2luZ1RpbWUgPSAw
OwordmFyIG1vY2tEaXNjaGFyZ2luZ1RpbWUgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7Cit2
YXIgbW9ja0xldmVsID0gMS4wOworCit2YXIgYmF0dGVyeSA9IG5hdmlnYXRvci53ZWJraXRCYXR0
ZXJ5OworCitmdW5jdGlvbiBjaGVja0JhdHRlcnlTdGF0dXMoKSB7CisgICAgc2hvdWxkQmUoJ2Jh
dHRlcnkuY2hhcmdpbmcnLCAnbW9ja0NoYXJnaW5nJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnku
Y2hhcmdpbmdUaW1lJywgJ21vY2tDaGFyZ2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVy
eS5kaXNjaGFyZ2luZ1RpbWUnLCAnbW9ja0Rpc2NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJl
KCdiYXR0ZXJ5LmxldmVsJywgJ21vY2tMZXZlbCcpOworfQorCit2YXIgZmlyc3RMaXN0ZW5lckV2
ZW50cyA9IDA7CitmdW5jdGlvbiBmaXJzdExpc3RlbmVyKCkgeworICAgIGNoZWNrQmF0dGVyeVN0
YXR1cygpOworICAgIGlmICgrK2ZpcnN0TGlzdGVuZXJFdmVudHMgPT0gMSkgeworICAgICAgICBi
YXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywgc2Vjb25kTGlzdGVuZXIp
OworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrQmF0dGVyeVN0YXR1cygnY2hh
cmdpbmdjaGFuZ2UnLCBtb2NrQ2hhcmdpbmcsIG1vY2tDaGFyZ2luZ1RpbWUsIG1vY2tEaXNjaGFy
Z2luZ1RpbWUsIG1vY2tMZXZlbCk7CisgICAgfQorICAgIGVsc2UgaWYgKGZpcnN0TGlzdGVuZXJF
dmVudHMgPiAyKQorICAgICAgICB0ZXN0RmFpbGVkKCdUb28gbWFueSBldmVudHMgZm9yIGZpcnN0
IGxpc3RlbmVyLicpOworICAgIG1heWJlRmluaXNoVGVzdCgpOworfQorCit2YXIgc2Vjb25kTGlz
dGVuZXJFdmVudHMgPSAwOworZnVuY3Rpb24gc2Vjb25kTGlzdGVuZXIoKSB7CisgICAgY2hlY2tC
YXR0ZXJ5U3RhdHVzKCk7CisgICAgaWYgKCsrc2Vjb25kTGlzdGVuZXJFdmVudHMgPiAxKQorICAg
ICAgICB0ZXN0RmFpbGVkKCdUb28gbWFueSBldmVudHMgZm9yIHNlY29uZCBsaXN0ZW5lci4nKTsK
KyAgICBtYXliZUZpbmlzaFRlc3QoKTsKK30KKworZnVuY3Rpb24gbWF5YmVGaW5pc2hUZXN0KCkg
eworICAgIGlmIChmaXJzdExpc3RlbmVyRXZlbnRzID09IDIgJiYgc2Vjb25kTGlzdGVuZXJFdmVu
dHMgPT0gMSkKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2JhdHRlcnkuYWRkRXZlbnRM
aXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBmaXJzdExpc3RlbmVyKTsKKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrQmF0
dGVyeVN0YXR1cygnY2hhcmdpbmdjaGFuZ2UnLCBtb2NrQ2hhcmdpbmcsIG1vY2tDaGFyZ2luZ1Rp
bWUsIG1vY2tEaXNjaGFyZ2luZ1RpbWUsIG1vY2tMZXZlbCk7CitlbHNlCisgICAgZGVidWcoJ1Ro
aXMgdGVzdCBjYW4gbm90IGJlIHJ1biB3aXRob3V0IHRoZSBMYXlvdXRUZXN0Q29udHJvbGxlcicp
OworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9iYXNpYy1vcGVyYXRpb24uanMg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9iYXNpYy1v
cGVyYXRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIzMDdjYwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2Ny
aXB0LXRlc3RzL2Jhc2ljLW9wZXJhdGlvbi5qcwpAQCAtMCwwICsxLDIzIEBACitkZXNjcmlwdGlv
bignVGVzdHMgdGhlIGJhc2ljIG9wZXJhdGlvbiBvZiBCYXR0ZXJ5U3RhdHVzIHVzaW5nIHRoZSBt
b2NrLicpOworCit2YXIgbW9ja0NoYXJnaW5nID0gdHJ1ZTsKK3ZhciBtb2NrQ2hhcmdpbmdUaW1l
ID0gMDsKK3ZhciBtb2NrRGlzY2hhcmdpbmdUaW1lID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZ
OwordmFyIG1vY2tMZXZlbCA9IDEuMDsKKwordmFyIGJhdHRlcnkgPSBuYXZpZ2F0b3Iud2Via2l0
QmF0dGVyeTsKKworYmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2NoYW5nZScsIGZ1
bmN0aW9uKCkgeworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmNoYXJnaW5nJywgJ21vY2tDaGFyZ2lu
ZycpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmNoYXJnaW5nVGltZScsICdtb2NrQ2hhcmdpbmdU
aW1lJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuZGlzY2hhcmdpbmdUaW1lJywgJ21vY2tEaXNj
aGFyZ2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5sZXZlbCcsICdtb2NrTGV2ZWwn
KTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tCYXR0ZXJ5U3RhdHVzKCdj
aGFyZ2luZ2NoYW5nZScsIG1vY2tDaGFyZ2luZywgbW9ja0NoYXJnaW5nVGltZSwgbW9ja0Rpc2No
YXJnaW5nVGltZSwgbW9ja0xldmVsKTsKK2Vsc2UKKyAgICBkZWJ1ZygnVGhpcyB0ZXN0IGNhbiBu
b3QgYmUgcnVuIHdpdGhvdXQgdGhlIExheW91dFRlc3RDb250cm9sbGVyJyk7CisKK3dpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Jh
dHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24uanMgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9ldmVudC1hZnRlci1u
YXZpZ2F0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlN2M1MTIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Nj
cmlwdC10ZXN0cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLmpzCkBAIC0wLDAgKzEsMTMgQEAKK2Rl
c2NyaXB0aW9uKCdUZXN0cyBmb3IgYSBjcmFzaCB3aGVyZSBhbiBldmVudCBpcyBmaXJlZCBhZnRl
ciB0aGUgcGFnZSBoYXMgYmVlbiBuYXZpZ2F0ZWQgYXdheSB3aGVuIHRoZSBvcmlnaW5hbCBwYWdl
IGlzIGluIHRoZSBwYWdlIGNhY2hlLicpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgnV2ViS2l0
VXNlc1BhZ2VDYWNoZVByZWZlcmVuY2VLZXknLCAxKTsKK2Vsc2UKKyAgICBkZWJ1ZygnVGhpcyB0
ZXN0IGNhbiBub3QgYmUgcnVuIHdpdGhvdXQgdGhlIExheW91dFRlc3RDb250cm9sbGVyJyk7CisK
K2RvY3VtZW50LmJvZHkub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgbmF2aWdhdG9yLndlYmtp
dEJhdHRlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBmdW5jdGlvbigpIHsg
fSApOworICAgIHdpbmRvdy5sb2NhdGlvbiA9ICJyZXNvdXJjZXMvZXZlbnQtYWZ0ZXItbmF2aWdh
dGlvbi1uZXcuaHRtbCI7Cit9CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL211
bHRpcGxlLWZyYW1lcy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2Ny
aXB0LXRlc3RzL211bHRpcGxlLWZyYW1lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kNjIwZWVhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
QmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvbXVsdGlwbGUtZnJhbWVzLmpzCkBAIC0wLDAgKzEs
NTUgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyB1c2luZyBCYXR0ZXJ5U3RhdHVzIGZyb20gbXVsdGlw
bGUgZnJhbWVzLicpOworCit2YXIgbW9ja0NoYXJnaW5nID0gdHJ1ZTsKK3ZhciBtb2NrQ2hhcmdp
bmdUaW1lID0gMDsKK3ZhciBtb2NrRGlzY2hhcmdpbmdUaW1lID0gTnVtYmVyLlBPU0lUSVZFX0lO
RklOSVRZOwordmFyIG1vY2tMZXZlbCA9IDEuMDsKKwordmFyIGJhdHRlcnkgPSBuYXZpZ2F0b3Iu
d2Via2l0QmF0dGVyeTsKKworZnVuY3Rpb24gY2hlY2tCYXR0ZXJ5U3RhdHVzKCkgeworICAgIHNo
b3VsZEJlKCdiYXR0ZXJ5LmNoYXJnaW5nJywgJ21vY2tDaGFyZ2luZycpOworICAgIHNob3VsZEJl
KCdiYXR0ZXJ5LmNoYXJnaW5nVGltZScsICdtb2NrQ2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxk
QmUoJ2JhdHRlcnkuZGlzY2hhcmdpbmdUaW1lJywgJ21vY2tEaXNjaGFyZ2luZ1RpbWUnKTsKKyAg
ICBzaG91bGRCZSgnYmF0dGVyeS5sZXZlbCcsICdtb2NrTGV2ZWwnKTsKK30KKworZnVuY3Rpb24g
Y2hlY2tDaGlsZEJhdHRlcnlTdGF0dXMoKSB7CisgICAgc2hvdWxkQmUoJ2NoaWxkQmF0dGVyeS5j
aGFyZ2luZycsICdtb2NrQ2hhcmdpbmcnKTsKKyAgICBzaG91bGRCZSgnY2hpbGRCYXR0ZXJ5LmNo
YXJnaW5nVGltZScsICdtb2NrQ2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUoJ2NoaWxkQmF0
dGVyeS5kaXNjaGFyZ2luZ1RpbWUnLCAnbW9ja0Rpc2NoYXJnaW5nVGltZScpOworICAgIHNob3Vs
ZEJlKCdjaGlsZEJhdHRlcnkubGV2ZWwnLCAnbW9ja0xldmVsJyk7Cit9CisKK3ZhciBoYXNNYWlu
RnJhbWVFdmVudEZpcmVkID0gZmFsc2U7CitmdW5jdGlvbiBtYWluRnJhbWVMaXN0ZW5lcigpIHsK
KyAgICBoYXNNYWluRnJhbWVFdmVudEZpcmVkID0gdHJ1ZTsKKyAgICBtYXliZUZpbmlzaFRlc3Qo
KTsKK30KKwordmFyIGhhc0NoaWxkRnJhbWVFdmVudEZpcmVkID0gZmFsc2U7CitmdW5jdGlvbiBj
aGlsZEZyYW1lTGlzdGVuZXIoKSB7CisgICAgaGFzQ2hpbGRGcmFtZUV2ZW50RmlyZWQgPSB0cnVl
OworICAgIG1heWJlRmluaXNoVGVzdCgpOworfQorCitmdW5jdGlvbiBtYXliZUZpbmlzaFRlc3Qo
KSB7CisgICAgaWYgKGhhc01haW5GcmFtZUV2ZW50RmlyZWQgJiYgaGFzQ2hpbGRGcmFtZUV2ZW50
RmlyZWQpIHsKKyAgICAgICAgY2hlY2tCYXR0ZXJ5U3RhdHVzKCk7CisgICAgICAgIGNoZWNrQ2hp
bGRCYXR0ZXJ5U3RhdHVzKCk7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30KKwor
dmFyIGNoaWxkRnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKK2RvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2hpbGRGcmFtZSk7Cit2YXIgY2hpbGRCYXR0ZXJ5ID0gY2hp
bGRGcmFtZS5jb250ZW50V2luZG93Lm5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5CitjaGlsZEJhdHRl
cnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBjaGlsZEZyYW1lTGlzdGVuZXIp
OworYmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2NoYW5nZScsIG1haW5GcmFtZUxp
c3RlbmVyKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5zZXRNb2NrQmF0dGVyeVN0YXR1cygnY2hhcmdpbmdjaGFuZ2UnLCBtb2Nr
Q2hhcmdpbmcsIG1vY2tDaGFyZ2luZ1RpbWUsIG1vY2tEaXNjaGFyZ2luZ1RpbWUsIG1vY2tMZXZl
bCk7CitlbHNlCisgICAgZGVidWcoJ1RoaXMgdGVzdCBjYW4gbm90IGJlIHJ1biB3aXRob3V0IHRo
ZSBMYXlvdXRUZXN0Q29udHJvbGxlcicpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10
ZXN0cy9uby1wYWdlLWNhY2hlLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1
cy9zY3JpcHQtdGVzdHMvbm8tcGFnZS1jYWNoZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5hZGNlZjAxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvbm8tcGFnZS1jYWNoZS5qcwpAQCAtMCwwICsx
LDIzIEBACitkZXNjcmlwdGlvbignVGVzdHMgdGhhdCBwYWdlcyB0aGF0IHVzZSBCYXR0ZXJ5U3Rh
dHVzIGFyZSBub3QgcHV0IGluIHRoZSBwYWdlIGNhY2hlLicpOworCitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldENhbk9wZW5XaW5kb3dzKCk7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCdXZWJLaXRVc2VzUGFnZUNh
Y2hlUHJlZmVyZW5jZUtleScsIDEpOworfSBlbHNlCisgICAgZGVidWcoJ1RoaXMgdGVzdCBjYW4g
bm90IGJlIHJ1biB3aXRob3V0IHRoZSBMYXlvdXRUZXN0Q29udHJvbGxlcicpOworCit2YXIgcGFn
ZU9uZU9ubG9hZENvdW50ID0gMDsKK2Z1bmN0aW9uIHJlcG9ydFBhZ2VPbmVPbmxvYWQoKSB7Cisg
ICAgKytwYWdlT25lT25sb2FkQ291bnQ7CisgICAgZGVidWcoJ3Jlc291cmNlcy9jYWNoZWQtcGFn
ZS0xLmh0bWwgb25sb2FkIGZpcmVkLCBjb3VudCA9ICcgKyBwYWdlT25lT25sb2FkQ291bnQpOwor
ICAgIGlmIChwYWdlT25lT25sb2FkQ291bnQgPT0gMikgeworICAgICAgICBmaW5pc2hKU1Rlc3Qo
KTsKKyAgICB9CisgICAgcmV0dXJuIHBhZ2VPbmVPbmxvYWRDb3VudDsKK30KKworZGVidWcoIk1h
aW4gcGFnZSBvcGVuaW5nIHJlc291cmNlcy9jYWNoZWQtcGFnZS0xLmh0bWwiKTsKK3dpbmRvdy5v
cGVuKCJyZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMS5odG1sIik7CisKK3dpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0
dXMvc2NyaXB0LXRlc3RzL3VwZGF0ZXMuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5
U3RhdHVzL3NjcmlwdC10ZXN0cy91cGRhdGVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmMwOGEyYTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy91cGRhdGVzLmpzCkBAIC0wLDAgKzEsNDQgQEAK
K2Rlc2NyaXB0aW9uKCdUZXN0cyB0aGF0IHVwZGF0ZXMgdG8gdGhlIGJhdHRlcnkgZXZlbnQgY2F1
c2VzIG5ldyBldmVudHMgdG8gZmlyZS4nKTsKKwordmFyIG1vY2tDaGFyZ2luZyA9IGZhbHNlOwor
dmFyIG1vY2tDaGFyZ2luZ1RpbWUgPSAwOwordmFyIG1vY2tEaXNjaGFyZ2luZ1RpbWUgPSBOdW1i
ZXIuUE9TSVRJVkVfSU5GSU5JVFk7Cit2YXIgbW9ja0xldmVsID0gMS4wOworCit2YXIgYmF0dGVy
eSA9IG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5OworCitmdW5jdGlvbiBjaGVja0JhdHRlcnlTdGF0
dXMoKSB7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmcnLCAnbW9ja0NoYXJnaW5nJyk7
CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmdUaW1lJywgJ21vY2tDaGFyZ2luZ1RpbWUn
KTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUnLCAnbW9ja0Rpc2NoYXJn
aW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmxldmVsJywgJ21vY2tMZXZlbCcpOwor
fQorCitmdW5jdGlvbiBzZXRNb2NrQmF0dGVyeVN0YXR1cygpIHsKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2Nr
QmF0dGVyeVN0YXR1cygnY2hhcmdpbmdjaGFuZ2UnLCBtb2NrQ2hhcmdpbmcsIG1vY2tDaGFyZ2lu
Z1RpbWUsIG1vY2tEaXNjaGFyZ2luZ1RpbWUsIG1vY2tMZXZlbCk7CisgICAgZWxzZQorICAgICAg
ICBkZWJ1ZygnVGhpcyB0ZXN0IGNhbiBub3QgYmUgcnVuIHdpdGhvdXQgdGhlIExheW91dFRlc3RD
b250cm9sbGVyJyk7Cit9CisKK2Z1bmN0aW9uIGZpcnN0TGlzdGVuZXIoKSB7CisgICAgY2hlY2tC
YXR0ZXJ5U3RhdHVzKCk7CisgICAgYmF0dGVyeS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFyZ2lu
Z2NoYW5nZScsIGZpcnN0TGlzdGVuZXIpOworCisgICAgYmF0dGVyeS5hZGRFdmVudExpc3RlbmVy
KCdjaGFyZ2luZ2NoYW5nZScsIHVwZGF0ZUxpc3RlbmVyKTsKKyAgICBtb2NrQ2hhcmdpbmcgPSB0
cnVlOworICAgIG1vY2tDaGFyZ2luZ1RpbWUgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7Cisg
ICAgbW9ja0Rpc2NoYXJnaW5nVGltZSA9IDA7CisgICAgbW9ja0xldmVsID0gMC4wOworCXNldE1v
Y2tCYXR0ZXJ5U3RhdHVzKCk7Cit9CisKK2Z1bmN0aW9uIHVwZGF0ZUxpc3RlbmVyKGV2ZW50KSB7
CisgICAgY2hlY2tCYXR0ZXJ5U3RhdHVzKGV2ZW50KTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30K
KworYmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2NoYW5nZScsIGZpcnN0TGlzdGVu
ZXIpOworc2V0TW9ja0JhdHRlcnlTdGF0dXMoKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0
cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3Jp
cHQtdGVzdHMvd2luZG93LXByb3BlcnR5LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVy
eVN0YXR1cy9zY3JpcHQtdGVzdHMvd2luZG93LXByb3BlcnR5LmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmZlZmUzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy93aW5kb3ctcHJvcGVydHkuanMK
QEAgLTAsMCArMSwyMyBAQAorZGVzY3JpcHRpb24oJ1Rlc3RzIHRoYXQgdGhlIHdpbmRvdy5uYXZp
Z2F0b3IuYmF0dGVyeSBwcm9wZXJ0aWVzIGFyZSBwcmVzZW50LicpOworCitmdW5jdGlvbiBoYXNP
bkJhdHRlcnlQcm9wZXJ0eSgpCit7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIg
cHJvcGVydHkgaW4gbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkpIHsKKyAgICAgICAgaWYgKHByb3Bl
cnR5ID09ICdvbmNoYXJnaW5nY2hhbmdlJyB8fAorICAgICAgICAgICAgcHJvcGVydHkgPT0gJ29u
Y2hhcmdpbmd0aW1lY2hhbmdlJyB8fAorICAgICAgICAgICAgcHJvcGVydHkgPT0gJ29uZGlzY2hh
cmdpbmd0aW1lY2hhbmdlJyB8fAorICAgICAgICAgICAgcHJvcGVydHkgPT0gJ29ubGV2ZWxjaGFu
Z2UnKQorICAgICAgICAgICAgcmVzdWx0ICs9IDE7CisgICAgfQorICAgIGlmIChyZXN1bHQgPT0g
NCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRC
ZVRydWUoInR5cGVvZiBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeSA9PSAnb2JqZWN0JyIpOworc2hv
dWxkQmVUcnVlKCJoYXNPbkJhdHRlcnlQcm9wZXJ0eSgpIik7CitzaG91bGRCZVRydWUoIm5hdmln
YXRvci53ZWJraXRCYXR0ZXJ5Lmhhc093blByb3BlcnR5KCdvbmNoYXJnaW5nY2hhbmdlJykiKTsK
K3Nob3VsZEJlVHJ1ZSgibmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29u
Y2hhcmdpbmd0aW1lY2hhbmdlJykiKTsKK3Nob3VsZEJlVHJ1ZSgibmF2aWdhdG9yLndlYmtpdEJh
dHRlcnkuaGFzT3duUHJvcGVydHkoJ29uZGlzY2hhcmdpbmd0aW1lY2hhbmdlJykiKTsKK3Nob3Vs
ZEJlVHJ1ZSgibmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29ubGV2ZWxj
aGFuZ2UnKSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1
cy91cGRhdGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0
dXMvdXBkYXRlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNWJlM2U3YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRl
cnlTdGF0dXMvdXBkYXRlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNyBAQAorVGVzdHMgdGhh
dCB1cGRhdGVzIHRvIHRoZSBiYXR0ZXJ5IGV2ZW50IGNhdXNlcyBuZXcgZXZlbnRzIHRvIGZpcmUu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGJhdHRlcnkuY2hhcmdpbmcg
aXMgbW9ja0NoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIG1vY2tDaGFyZ2lu
Z1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgbW9ja0Rpc2NoYXJnaW5nVGlt
ZQorUEFTUyBiYXR0ZXJ5LmxldmVsIGlzIG1vY2tMZXZlbAorUEFTUyBiYXR0ZXJ5LmNoYXJnaW5n
IGlzIG1vY2tDaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBtb2NrQ2hhcmdp
bmdUaW1lCitQQVNTIGJhdHRlcnkuZGlzY2hhcmdpbmdUaW1lIGlzIG1vY2tEaXNjaGFyZ2luZ1Rp
bWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBtb2NrTGV2ZWwKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3VwZGF0ZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L0JhdHRlcnlTdGF0dXMvdXBkYXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjgyMjUyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9C
YXR0ZXJ5U3RhdHVzL3VwZGF0ZXMuaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy91cGRhdGVzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvd2luZG93LXByb3BlcnR5LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvd2luZG93LXByb3BlcnR5LWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWU2ZmQ1Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy93aW5kb3ctcHJv
cGVydHktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1Rlc3RzIHRoYXQgdGhlIHdpbmRv
dy5uYXZpZ2F0b3IuYmF0dGVyeSBwcm9wZXJ0aWVzIGFyZSBwcmVzZW50LgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyB0eXBlb2YgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkg
PT0gJ29iamVjdCcgaXMgdHJ1ZQorUEFTUyBoYXNPbkJhdHRlcnlQcm9wZXJ0eSgpIGlzIHRydWUK
K1BBU1MgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29uY2hhcmdpbmdj
aGFuZ2UnKSBpcyB0cnVlCitQQVNTIG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5Lmhhc093blByb3Bl
cnR5KCdvbmNoYXJnaW5ndGltZWNoYW5nZScpIGlzIHRydWUKK1BBU1MgbmF2aWdhdG9yLndlYmtp
dEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29uZGlzY2hhcmdpbmd0aW1lY2hhbmdlJykgaXMgdHJ1
ZQorUEFTUyBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5oYXNPd25Qcm9wZXJ0eSgnb25sZXZlbGNo
YW5nZScpIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVz
L3dpbmRvdy1wcm9wZXJ0eS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1
cy93aW5kb3ctcHJvcGVydHkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li45ZjNmZDNhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVy
eVN0YXR1cy93aW5kb3ctcHJvcGVydHkuaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy93aW5kb3ct
cHJvcGVydHkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4IGNk
YTE5MzYuLmZlMDdkYjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTExMiw2ICsxMTIsOSBAQCBCVUdDUjEwMzkzOSBT
S0lQIDogaHR0cC90ZXN0cy9hcHBjYWNoZS93cm9uZy1jb250ZW50LXR5cGUuaHRtbCA9IFRFWFQK
IC8vIFZpYnJhdGlvbiBBUEkgaXMgbm90IHN1cHBvcnRlZCB5ZXQgaW4gdGhlIGNocm9taXVtIHBv
cnQuCiBCVUdXSzcyMDEwIFNLSVAgOiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwg
PSBGQUlMCiAKKy8vIEJhdHRlcnkgU3RhdHVzIEFQSSBpcyBub3Qgc3VwcG9ydGVkIHlldCBpbiB0
aGUgY2hyb21pdW0gcG9ydC4KK0JVR1dLNjI2OTggU0tJUCA6IGZhc3QvZG9tL0JhdHRlcnlTdGF0
dXMgPSBQQVNTIEZBSUwKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFdPTlRGSVggVEVTVFMKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IGYyZjQ4MjEuLmI1M2E2MTkgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC0zOTQsNiArMzk0LDkgQEAgaHR0cC90ZXN0cy9zZWN1
cml0eS93ZWJnbC1yZW1vdGUtcmVhZC1yZW1vdGUtaW1hZ2UtYWxsb3dlZC13aXRoLWNyZWRlbnRp
YWxzLmh0bWwKICNWaWJyYXRpb24gQVBJIHN1cHBvcnQgbm90IHlldC4gaHR0cDovL3dlYmtpdC5v
cmcvYi83MjAxMAogZmFzdC9kb20vbmF2aWdhdG9yLXZpYnJhdGlvbi5odG1sCiAKKyNCYXR0ZXJ5
IFN0YXR1cyBBUEkgc3VwcG9ydCBub3QgeWV0LiBodHRwOi8vd2Via2l0Lm9yZy9iLzYyNjk4Citm
YXN0L2RvbS9CYXR0ZXJ5U3RhdHVzCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgVEVTVFMg
RkFJTElORwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApp
bmRleCBjNzcyODFjLi42YjFlMGE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtNTY3
LDMgKzU2Nyw3IEBAIGZhc3QvbXV0YXRpb24vZW5kLW9mLXRhc2stZGVsaXZlcnkuaHRtbAogIyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwMTAKICMgTmVlZHMgUGFn
ZUNsaWVudHM6OnZpYnJhdGlvbkNsaWVudCgpIGltcGxlbWVudGF0aW9uLgogZmFzdC9kb20vbmF2
aWdhdG9yLXZpYnJhdGlvbi5odG1sCisKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYyNjk4CisjIE5lZWRzIEJhdHRlcnlDbGllbnQgaW1wbGVtZW50YXRpb24uCitm
YXN0L2RvbS9CYXR0ZXJ5U3RhdHVzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRleCA2NjUyOWE5
Li40ZDY2YWI0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTM0MSw2ICszNDEsOSBAQCBm
YXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFycmF5cy5odG1sCiAjVmlicmF0aW9u
IEFQSSBpcyBub3QgaW1wbGVtZW50ZWQuCiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0
bWwKIAorI0JhdHRlcnkgU3RhdHVzIEFQSSBpcyBub3QgaW1wbGVtZW50ZWQuCitmYXN0L2RvbS9C
YXR0ZXJ5U3RhdHVzCisKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMKICMgICAgICAgRHJhZyBhbmQg
RHJvcCBTdXBwb3J0IGluIERSVC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICMKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbi9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKaW5k
ZXggNDI0NzIyZC4uMTQ5YjUyNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKQEAgLTE2NTks
MyArMTY1OSw2IEBAIGZhc3QvcmVwYWludC90cmFuc2Zvcm0tYWJzb2x1dGUtaW4tcG9zaXRpb25l
ZC1jb250YWluZXIuaHRtbAogCiAjVmlicmF0aW9uIEFQSSBpcyBub3QgaW1wbGVtZW50ZWQuCiBm
YXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwKKworI0JhdHRlcnkgU3RhdHVzIEFQSSBp
cyBub3QgaW1wbGVtZW50ZWQuCitmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luY2Fpcm8vU2tpcHBlZAppbmRleCA5MDhhZTIxLi5iODdkYzZkIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbmNhaXJvL1NraXBwZWQKQEAgLTIwNTcsMyArMjA1Nyw2IEBAIGZhc3QvbXV0YXRp
b24vZW5kLW9mLXRhc2stZGVsaXZlcnkuaHRtbAogCiAjVmlicmF0aW9uIEFQSSBpcyBub3QgaW1w
bGVtZW50ZWQuCiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwKKworI0JhdHRlcnkg
U3RhdHVzIEFQSSBpcyBub3QgaW1wbGVtZW50ZWQuCitmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CmluZGV4IDYyZjE1MzUuLmU3OTljMTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CkBAIC0yMjg5LDYgKzIyODksMjMgQEAgSUYgKEVOQUJMRV9WSUJSQVRJT04pCiAgICAgKQog
RU5ESUYgKCkKIAorSUYgKEVOQUJMRV9CQVRURVJZX1NUQVRVUykKKyAgICBMSVNUKEFQUEVORCBX
ZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVs
ZXMvYmF0dGVyeSIKKyAgICApCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JRExfRklMRVMKKyAg
ICAgICAgTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuaWRsCisgICAgICAgIE1vZHVs
ZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5pZGwKKyAgICApCisgICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCisgICAgICAgIHBsYXRmb3JtL21vY2svQmF0dGVyeUNsaWVudE1vY2suY3Bw
CisgICAgICAgIE1vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNwcAorICAgICAgICBN
b2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwCisgICAgICAgIE1vZHVsZXMvYmF0
dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHAKKyAgICAgICAgTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlT
dGF0dXMuY3BwCisgICAgKQorRU5ESUYgKCkKKwogIyBNb2R1bGVzIHRoYXQgdGhlIGJpbmRpbmdz
IGdlbmVyYXRvciBzY3JpcHRzIG1heSB1c2UKIFNFVChTQ1JJUFRTX1JFU09MVkVfU1VQUExFTUVO
VEFMCiAgICAgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA5MGRkYzkwLi5hZTU2YzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTExIEBA
CisyMDEyLTAzLTAxICBLaWhvbmcgS3dvbiAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgorCisg
ICAgICAgIFN1cHBvcnQgZm9yIEJhdHRlcnkgU3RhdHVzIEFQSQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKworICAgICAgICBUaGlzIEFQSSBp
cyBpbXBsZW1lbnRlZCB1bmRlciB0aGUgTmF2aWdhdG9yIGNsYXNzLgorICAgICAgICBUaGVyZSBh
cmUgZm91ciB0eXBlcyBvZiBldmVudHM6IG9uY2hhcmdpbmdjaGFuZ2UsIG9uY2hhcmdpbmd0aW1l
Y2hhbmdlLCBvbmRpc2NoYXJnaW5ndGltZWNoYW5nZSwgb25sZXZlbGNoYW5nZS4KKyAgICAgICAg
QWxsIGV2ZW50cyBhcmUgb3BlcmF0ZWQgYmFzZWQgb24gYSBjYWxsYmFjayBtZWNoYW5pc20uCisg
ICAgICAgIFdoZW4gYmF0dGVyeSBldmVudCBpcyByYWlzZWQsIHRoZSBldmVudCBsaXN0ZW5lciB3
YXRjaGluZyBiYXR0ZXJ5IHN0YXR1cyBoYXMgdG8gYmUgY2FsbGVkLgorICAgICAgICBCYXR0ZXJ5
IHN0YXR1cyBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgQmF0dGVyeU1hbmFnZXIobmF2aWdhdG9yLndl
YmtpdEJhdHRlcnkpLgorICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9iYXR0ZXJ5LXN0YXR1
cy8KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
czogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5odG1s
CisgICAgICAgICAgICAgICBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2Jhc2ljLW9wZXJhdGlvbi5o
dG1sCisgICAgICAgICAgICAgICBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2V2ZW50LWFmdGVyLW5h
dmlnYXRpb24uaHRtbAorICAgICAgICAgICAgICAgZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9tdWx0
aXBsZS1mcmFtZXMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9u
by1wYWdlLWNhY2hlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMv
dXBkYXRlcy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3dpbmRv
dy1wcm9wZXJ0eS5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBN
b2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoQmF0dGVyeUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xp
ZW50Ojp+QmF0dGVyeUNsaWVudCk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlD
b250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhdHRlcnlDb250cm9sbGVyOjpCYXR0ZXJ5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6fkJhdHRlcnlDb250cm9sbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0
dGVyeUNvbnRyb2xsZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlD
b250cm9sbGVyOjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29u
dHJvbGxlcjo6cmVtb3ZlQWxsTGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlD
b250cm9sbGVyOjpkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
dHRlcnlDb250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0
ZXJ5Q29udHJvbGxlcjo6aXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6cHJvdmlkZUJhdHRl
cnlUbyk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCYXR0ZXJ5Q29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6Y2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjpmcm9tKToKKyAgICAgICAgKiBNb2R1bGVzL2JhdHRl
cnkvQmF0dGVyeU1hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
YXR0ZXJ5TWFuYWdlcjo6fkJhdHRlcnlNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRl
cnlNYW5hZ2VyOjpCYXR0ZXJ5TWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFu
YWdlcjo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdl
cjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdl
cjo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1h
bmFnZXI6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5
TWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQmF0dGVyeU1h
bmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmludGVyZmFjZU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmNoYXJnaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpjaGFyZ2luZ1RpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmF0dGVyeU1hbmFnZXI6OmRpc2NoYXJnaW5nVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXR0ZXJ5TWFuYWdlcjo6bGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFn
ZXI6OmJhdHRlcnlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2Vy
OjpldmVudFRhcmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmVu
c3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6
cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmRlcmVm
RXZlbnRUYXJnZXQpOgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5p
ZGw6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5U3RhdHVzLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0
dXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzOjpCYXR0ZXJ5U3Rh
dHVzKToKKyAgICAgICAgKiBNb2R1bGVzL2JhdHRlcnkvQmF0dGVyeVN0YXR1cy5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChX
ZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzOjpjaGFyZ2luZyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0
ZXJ5U3RhdHVzOjpjaGFyZ2luZ1RpbWUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1
czo6ZGlzY2hhcmdpbmdUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6Omxl
dmVsKToKKyAgICAgICAgKiBNb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JCYXR0
ZXJ5OjpOYXZpZ2F0b3JCYXR0ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckJhdHRl
cnk6On5OYXZpZ2F0b3JCYXR0ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckJhdHRl
cnk6OndlYmtpdEJhdHRlcnkpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yQmF0dGVyeTo6
ZnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JCYXR0ZXJ5OjpiYXR0ZXJ5TWFuYWdl
cik6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE5hdmlnYXRvckJhdHRlcnkpOgorICAgICAg
ICAqIE1vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmlkbDogQWRkZWQuCisgICAgICAg
ICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVB
bGxFdmVudExpc3RlbmVycyk6CisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldEZhY3RvcnkuaW46CisgICAgICAg
ICogcGxhdGZvcm0vbW9jay9CYXR0ZXJ5Q2xpZW50TW9jay5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50TW9jazo6QmF0dGVyeUNs
aWVudE1vY2spOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudE1vY2s6On5CYXR0ZXJ5
Q2xpZW50TW9jayk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50TW9jazo6c2V0Q29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50TW9jazo6c3RhcnRVcGRh
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50TW9jazo6c3RvcFVwZGF0aW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRNb2NrOjpiYXR0ZXJ5Q29udHJvbGxl
ckRlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50TW9jazo6c2V0QmF0
dGVyeVN0YXR1cyk6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9CYXR0ZXJ5Q2xpZW50TW9jay5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQmF0dGVyeUNsaWVudE1vY2sp
OgorCiAyMDEyLTAzLTAxICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW2Nocm9taXVtXSBMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCBpcyByZWR1
bmRhbnQgd2l0aCBzZXROZWVkc0Rpc3BsYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Jh
dHRlcnkvQmF0dGVyeUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
Ljc3Y2NiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRl
cnkvQmF0dGVyeUNsaWVudC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0ZXJ5Q2xp
ZW50X2gKKyNkZWZpbmUgQmF0dGVyeUNsaWVudF9oCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFU
VVMpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5Q29udHJvbGxlcjsKK2NsYXNzIFBhZ2U7CisKK2NsYXNz
IEJhdHRlcnlDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkJhdHRlcnlDbGllbnQoKSB7
IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250cm9sbGVyKEJhdHRlcnlDb250cm9sbGVyKikg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBzdGFydFVwZGF0aW5nKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZyhjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiYXR0ZXJ5Q29udHJv
bGxlckRlc3Ryb3llZCgpID0gMDsKK307CisKK3ZvaWQgcHJvdmlkZUJhdHRlcnlUbyhQYWdlKiwg
QmF0dGVyeUNsaWVudCopOworCit9CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworI2VuZGlm
IC8vIEJhdHRlcnlDbGllbnRfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9i
YXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40ZjcyOWFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVyeUNvbnRyb2xsZXIuaCIKKworI2lmIEVO
QUJMRShCQVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUgIkJhdHRlcnlDbGllbnQuaCIKKyNpbmNs
dWRlICJCYXR0ZXJ5TWFuYWdlci5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXMuaCIKKyNpbmNs
dWRlICJFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0JhdHRlcnlDb250cm9sbGVy
OjpCYXR0ZXJ5Q29udHJvbGxlcihCYXR0ZXJ5Q2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVu
dChjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+c2V0Q29u
dHJvbGxlcih0aGlzKTsKK30KKworQmF0dGVyeUNvbnRyb2xsZXI6On5CYXR0ZXJ5Q29udHJvbGxl
cigpCit7CisgICAgbV9jbGllbnQtPmJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCk7Cit9CisK
K1Bhc3NPd25QdHI8QmF0dGVyeUNvbnRyb2xsZXI+IEJhdHRlcnlDb250cm9sbGVyOjpjcmVhdGUo
QmF0dGVyeUNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQmF0dGVy
eUNvbnRyb2xsZXIoY2xpZW50KSk7Cit9CisKK3ZvaWQgQmF0dGVyeUNvbnRyb2xsZXI6OmFkZExp
c3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBCYXR0ZXJ5TWFuYWdlciogYmF0
dGVyeU1hbmFnZXIpCit7CisgICAgaWYgKG1fYmF0dGVyeUxpc3RlbmVycy5maW5kKGV2ZW50VHlw
ZSkgPT0gbV9iYXR0ZXJ5TGlzdGVuZXJzLmVuZCgpKQorICAgICAgICBtX2JhdHRlcnlMaXN0ZW5l
cnMuYWRkKGV2ZW50VHlwZSwgbmV3IExpc3RlbmVyU2V0KTsKKworICAgIGlmIChtX2JhdHRlcnlM
aXN0ZW5lcnMuZmluZChldmVudFR5cGUpLT5zZWNvbmQtPmZpbmQoYmF0dGVyeU1hbmFnZXIpID09
IG1fYmF0dGVyeUxpc3RlbmVycy5maW5kKGV2ZW50VHlwZSktPnNlY29uZC0+ZW5kKCkpIHsKKyAg
ICAgICAgbV9iYXR0ZXJ5TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKS0+c2Vjb25kLT5hZGQoYmF0
dGVyeU1hbmFnZXIpOworICAgICAgICBtX2NsaWVudC0+c3RhcnRVcGRhdGluZyhldmVudFR5cGUp
OworICAgIH0KK30KKwordm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6cmVtb3ZlTGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEJhdHRlcnlNYW5hZ2VyKiBiYXR0ZXJ5TWFuYWdl
cikKK3sKKyAgICBCYXR0ZXJ5TGlzdGVuZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9iYXR0ZXJ5TGlz
dGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKKyAgICBpZiAoaXQgPT0gbV9iYXR0ZXJ5TGlzdGVuZXJz
LmVuZCgpIHx8IShpdC0+c2Vjb25kKSB8fCBpdC0+c2Vjb25kLT5maW5kKGJhdHRlcnlNYW5hZ2Vy
KSA9PSBpdC0+c2Vjb25kLT5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9iYXR0ZXJ5
TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKS0+c2Vjb25kLT5yZW1vdmUoYmF0dGVyeU1hbmFnZXIp
OworICAgIG1fY2xpZW50LT5zdG9wVXBkYXRpbmcoZXZlbnRUeXBlKTsKK30KKwordm9pZCBCYXR0
ZXJ5Q29udHJvbGxlcjo6cmVtb3ZlQWxsTGlzdGVuZXJzKCkKK3sKKyAgICBmb3IgKEJhdHRlcnlM
aXN0ZW5lck1hcDo6aXRlcmF0b3IgaXQgPSBtX2JhdHRlcnlMaXN0ZW5lcnMuYmVnaW4oKTsgaXQg
IT0gbV9iYXR0ZXJ5TGlzdGVuZXJzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIExpc3RlbmVyU2V0
KiBsaXN0ZW5lclNldCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyKCk7
CisgICAgICAgIGRlbGV0ZSBsaXN0ZW5lclNldDsKKyAgICB9CisgICAgbV9iYXR0ZXJ5TGlzdGVu
ZXJzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQmF0dGVyeUNvbnRyb2xsZXI6OmRpZENoYW5nZUJhdHRl
cnlTdGF0dXMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8QmF0dGVy
eVN0YXR1cz4gYmF0dGVyeVN0YXR1cykKK3sKKyAgICBCYXR0ZXJ5TGlzdGVuZXJNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9iYXR0ZXJ5TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKKyAgICBpZiAoaXQg
PT0gbV9iYXR0ZXJ5TGlzdGVuZXJzLmVuZCgpIHx8ICEoaXQtPnNlY29uZCkgfHwgaXQtPnNlY29u
ZC0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50
ID0gRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGZhbHNlLCBmYWxzZSk7CisgICAgUmVmUHRyPEJh
dHRlcnlTdGF0dXM+IGJhdHRlcnkgPSBiYXR0ZXJ5U3RhdHVzOworICAgIFZlY3RvcjxSZWZQdHI8
QmF0dGVyeU1hbmFnZXI+ID4gbGlzdGVuZXJWZWN0b3I7CisgICAgY29weVRvVmVjdG9yKCoobV9i
YXR0ZXJ5TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKS0+c2Vjb25kKSwgbGlzdGVuZXJWZWN0b3Ip
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdGVuZXJWZWN0b3Iuc2l6ZSgpOyArK2kp
CisgICAgICAgIGxpc3RlbmVyVmVjdG9yW2ldLT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBiYXR0ZXJ5
KTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBCYXR0ZXJ5Q29udHJvbGxlcjo6c3VwcGxlbWVu
dE5hbWUoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAo
IkJhdHRlcnlDb250cm9sbGVyIikpOworICAgIHJldHVybiBuYW1lOworfQorCitib29sIEJhdHRl
cnlDb250cm9sbGVyOjppc0FjdGl2ZShQYWdlKiBwYWdlKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxib29sPihCYXR0ZXJ5Q29udHJvbGxlcjo6ZnJvbShwYWdlKSk7Cit9CisKK3ZvaWQgcHJv
dmlkZUJhdHRlcnlUbyhQYWdlKiBwYWdlLCBCYXR0ZXJ5Q2xpZW50KiBjbGllbnQpCit7CisgICAg
U3VwcGxlbWVudDxQYWdlPjo6cHJvdmlkZVRvKHBhZ2UsIEJhdHRlcnlDb250cm9sbGVyOjpzdXBw
bGVtZW50TmFtZSgpLCBCYXR0ZXJ5Q29udHJvbGxlcjo6Y3JlYXRlKGNsaWVudCkpOworfQorCit9
CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmNlNTY2YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDYzIEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgQmF0dGVyeUNvbnRyb2xsZXJfaAorI2RlZmluZSBCYXR0ZXJ5Q29udHJvbGxlcl9oCisK
KyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5TWFuYWdlci5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCYXR0
ZXJ5Q2xpZW50OworCitjbGFzcyBCYXR0ZXJ5Q29udHJvbGxlciA6IHB1YmxpYyBTdXBwbGVtZW50
PFBhZ2U+IHsKK3B1YmxpYzoKKyAgICB+QmF0dGVyeUNvbnRyb2xsZXIoKTsKKworICAgIHN0YXRp
YyBQYXNzT3duUHRyPEJhdHRlcnlDb250cm9sbGVyPiBjcmVhdGUoQmF0dGVyeUNsaWVudCopOwor
CisgICAgdm9pZCBhZGRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgQmF0
dGVyeU1hbmFnZXIqKTsKKyAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBCYXR0ZXJ5TWFuYWdlciopOworICAgIHZvaWQgcmVtb3ZlQWxsTGlzdGVu
ZXJzKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+KTsKKworICAgIEJhdHRlcnlD
bGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKKyAgICBzdGF0aWMg
Y29uc3QgQXRvbWljU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBCYXR0ZXJ5
Q29udHJvbGxlciogZnJvbShQYWdlKiBwYWdlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxCYXR0ZXJ5
Q29udHJvbGxlcio+KFN1cHBsZW1lbnQ8UGFnZT46OmZyb20ocGFnZSwgc3VwcGxlbWVudE5hbWUo
KSkpOyB9CisgICAgc3RhdGljIGJvb2wgaXNBY3RpdmUoUGFnZSopOworCitwcml2YXRlOgorICAg
IEJhdHRlcnlDb250cm9sbGVyKEJhdHRlcnlDbGllbnQqKTsKKworICAgIEJhdHRlcnlDbGllbnQq
IG1fY2xpZW50OworCisgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxCYXR0ZXJ5TWFuYWdlcj4g
PiBMaXN0ZW5lclNldDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5l
clNldCo+IEJhdHRlcnlMaXN0ZW5lck1hcDsKKyAgICBCYXR0ZXJ5TGlzdGVuZXJNYXAgbV9iYXR0
ZXJ5TGlzdGVuZXJzOworfTsKKworfQorCisjZW5kaWYgLy8gQkFUVEVSWV9TVEFUVVMKKyNlbmRp
ZiAvLyBCYXR0ZXJ5Q29udHJvbGxlcl9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmM5YjFlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlNYW5hZ2VyLmgiCisKKyNpZiBFTkFCTEUoQkFU
VEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5Q29udHJvbGxlci5oIgorI2luY2x1ZGUg
IkJhdHRlcnlTdGF0dXMuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisjaW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8QmF0dGVyeU1hbmFnZXI+IEJhdHRlcnlNYW5hZ2VyOjpj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogZXhlY0NvbnRleHQsIE5hdmlnYXRvciogbmF2
aWdhdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmF0dGVyeU1hbmFnZXIoZXhlY0Nv
bnRleHQsIG5hdmlnYXRvcikpOworfQorCitCYXR0ZXJ5TWFuYWdlcjo6fkJhdHRlcnlNYW5hZ2Vy
KCkKK3sKK30KKworQmF0dGVyeU1hbmFnZXI6OkJhdHRlcnlNYW5hZ2VyKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGV4ZWNDb250ZXh0LCBOYXZpZ2F0b3IqIG5hdmlnYXRvcikKKyAgICA6IG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dChleGVjQ29udGV4dCkKKyAgICAsIG1fYmF0dGVyeUNvbnRyb2xs
ZXIoQmF0dGVyeUNvbnRyb2xsZXI6OmZyb20obmF2aWdhdG9yLT5mcmFtZSgpLT5wYWdlKCkpKQor
ICAgICwgbV9iYXR0ZXJ5U3RhdHVzKDApCit7Cit9CisKK2Jvb2wgQmF0dGVyeU1hbmFnZXI6OmFk
ZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAgICBpZiAoIUV2
ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1
cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2JhdHRlcnlDb250cm9sbGVyLT5h
ZGRMaXN0ZW5lcihldmVudFR5cGUsIHRoaXMpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEJhdHRlcnlNYW5hZ2VyOjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQorewor
ICAgIGlmICghRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0
ZW5lciwgdXNlQ2FwdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fYmF0dGVy
eUNvbnRyb2xsZXItPnJlbW92ZUxpc3RlbmVyKGV2ZW50VHlwZSwgdGhpcyk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgQmF0dGVyeU1hbmFnZXI6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJz
KCkKK3sKKyAgICBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICBt
X2JhdHRlcnlDb250cm9sbGVyLT5yZW1vdmVBbGxMaXN0ZW5lcnMoKTsKK30KKworYm9vbCBCYXR0
ZXJ5TWFuYWdlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUGFzc1Jl
ZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQoreworICAgIG1fYmF0dGVyeVN0YXR1
cyA9IGJhdHRlcnlTdGF0dXM7CisgICAgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50
KGV2ZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQkFUVEVS
WV9TVEFUVVMKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0Jh
dHRlcnlNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1h
bmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2I5MGZiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5h
Z2VyLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEJhdHRlcnlNYW5hZ2VyX2gKKyNkZWZp
bmUgQmF0dGVyeU1hbmFnZXJfaAorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5j
bHVkZSAiQmF0dGVyeVN0YXR1cy5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeUNvbnRyb2xsZXI7CitjbGFzcyBOYXZpZ2F0
b3I7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBCYXR0ZXJ5TWFuYWdl
ciA6IHB1YmxpYyBSZWZDb3VudGVkPEJhdHRlcnlNYW5hZ2VyPiwgcHVibGljIEV2ZW50VGFyZ2V0
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5CYXR0ZXJ5TWFuYWdlcigpOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEJhdHRlcnlNYW5hZ2VyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IE5hdmlnYXRvciopOworCisgICAgdmlydHVhbCBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgaW50
ZXJmYWNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JCYXR0
ZXJ5TWFuYWdlcjsgfQorICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsgfQorCisgICAgYm9vbCBjaGFyZ2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmF0dGVyeVN0YXR1
cy0+Y2hhcmdpbmcoKTsgfQorICAgIGRvdWJsZSBjaGFyZ2luZ1RpbWUoKSBjb25zdCAgeyByZXR1
cm4gbV9iYXR0ZXJ5U3RhdHVzLT5jaGFyZ2luZ1RpbWUoKTsgfQorICAgIGRvdWJsZSBkaXNjaGFy
Z2luZ1RpbWUoKSBjb25zdCAgeyByZXR1cm4gbV9iYXR0ZXJ5U3RhdHVzLT5kaXNjaGFyZ2luZ1Rp
bWUoKTsgfQorICAgIGRvdWJsZSBsZXZlbCgpIGNvbnN0ICB7IHJldHVybiBtX2JhdHRlcnlTdGF0
dXMtPmxldmVsKCk7IH0KKworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoY2hh
cmdpbmdjaGFuZ2UpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoY2hhcmdp
bmd0aW1lY2hhbmdlKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGRpc2No
YXJnaW5ndGltZWNoYW5nZSk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihs
ZXZlbGNoYW5nZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1
c2VDYXB0dXJlKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7
CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CisgICAgYm9vbCBk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+
KTsKKworICAgIHVzaW5nIFJlZkNvdW50ZWQ8QmF0dGVyeU1hbmFnZXI+OjpyZWY7CisgICAgdXNp
bmcgUmVmQ291bnRlZDxCYXR0ZXJ5TWFuYWdlcj46OmRlcmVmOworCisgICAgQmF0dGVyeUNvbnRy
b2xsZXIqIGJhdHRlcnlDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYXR0ZXJ5Q29udHJv
bGxlcjsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50
VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorICAgIHZpcnR1YWwg
RXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVu
dFRhcmdldERhdGE7IH0KKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5TWFuYWdlcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgTmF2aWdhdG9yKik7CisKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKKyAgICAvLyBFdmVudFRhcmdldCBpbXBsZW1l
bnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KKworICAgIEJh
dHRlcnlDb250cm9sbGVyKiBtX2JhdHRlcnlDb250cm9sbGVyOworICAgIEV2ZW50VGFyZ2V0RGF0
YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKyAgICBSZWZQdHI8QmF0dGVyeVN0YXR1cz4gbV9iYXR0ZXJ5
U3RhdHVzOworfTsKKworfQorCisjZW5kaWYgLy8gQkFUVEVSWV9TVEFUVVMKKyNlbmRpZiAvLyBC
YXR0ZXJ5TWFuYWdlcl9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0
dGVyeS9CYXR0ZXJ5TWFuYWdlci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
QmF0dGVyeU1hbmFnZXIuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4
MDgwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
QmF0dGVyeU1hbmFnZXIuaWRsCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisK
KyAgICAvLyBodHRwOi8vZGV2LnczLm9yZy8yMDA5L2RhcC9zeXN0ZW0taW5mby9iYXR0ZXJ5LXN0
YXR1cy5odG1sCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9QkFUVEVSWV9T
VEFUVVMsCisgICAgICAgIEV2ZW50VGFyZ2V0LAorICAgICBdIEJhdHRlcnlNYW5hZ2VyIHsKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gY2hhcmdpbmc7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBkb3VibGUgY2hhcmdpbmdUaW1lOworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgZG91YmxlIGRpc2NoYXJnaW5nVGltZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IGRvdWJsZSBsZXZlbDsKKworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNoYXJn
aW5nY2hhbmdlOworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNoYXJnaW5ndGlt
ZWNoYW5nZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25kaXNjaGFyZ2luZ3Rp
bWVjaGFuZ2U7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubGV2ZWxjaGFuZ2U7
CisKKyAgICAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9vbGVhbiB1c2VDYXB0
dXJlKTsKKyAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0
ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9v
bGVhbiB1c2VDYXB0dXJlKTsKKyAgICB9OworCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5U3RhdHVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5U3RhdHVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4zZWQ1ZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXMuaCIKKworI2lmIEVOQUJMRShC
QVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUgPGxpbWl0cz4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IEJhdHRlcnlTdGF0dXM6OmNyZWF0ZSgpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCYXR0ZXJ5U3RhdHVzKTsKK30KKworUGFzc1JlZlB0
cjxCYXR0ZXJ5U3RhdHVzPiBCYXR0ZXJ5U3RhdHVzOjpjcmVhdGUoYm9vbCBjaGFyZ2luZywgZG91
YmxlIGNoYXJnaW5nVGltZSwgZG91YmxlIGRpc2NoYXJnaW5nVGltZSwgZG91YmxlIGxldmVsKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmF0dGVyeVN0YXR1cyhjaGFyZ2luZywgY2hhcmdp
bmdUaW1lLCBkaXNjaGFyZ2luZ1RpbWUsIGxldmVsKSk7Cit9CisKKworQmF0dGVyeVN0YXR1czo6
QmF0dGVyeVN0YXR1cygpCisgICAgOiBtX2NoYXJnaW5nKHRydWUpCisgICAgLCBtX2NoYXJnaW5n
VGltZSgwKQorICAgICwgbV9kaXNjaGFyZ2luZ1RpbWUoc3RkOjpudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjppbmZpbml0eSgpKQorICAgICwgbV9sZXZlbCgxKQoreworfQorCitCYXR0ZXJ5U3RhdHVz
OjpCYXR0ZXJ5U3RhdHVzKGJvb2wgY2hhcmdpbmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJs
ZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZlbCkKKyAgICA6IG1fY2hhcmdpbmcoY2hhcmdp
bmcpCisgICAgLCBtX2NoYXJnaW5nVGltZShjaGFyZ2luZ1RpbWUpCisgICAgLCBtX2Rpc2NoYXJn
aW5nVGltZShkaXNjaGFyZ2luZ1RpbWUpCisgICAgLCBtX2xldmVsKGxldmVsKQoreworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeVN0YXR1cy5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQ1MWFiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuaApAQCAtMCwwICsxLDU0
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgQmF0dGVyeVN0YXR1c19oCisjZGVmaW5lIEJhdHRlcnlTdGF0dXNfaAor
CisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEJhdHRlcnlTdGF0dXMgOiBwdWJsaWMgUmVmQ291bnRlZDxCYXR0ZXJ5U3RhdHVzPiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gY3JlYXRlKCk7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gY3JlYXRlKGJvb2wgY2hhcmdp
bmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBs
ZXZlbCk7CisKKyAgICBib29sIGNoYXJnaW5nKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyZ2luZzsg
fQorICAgIGRvdWJsZSBjaGFyZ2luZ1RpbWUoKSBjb25zdCAgeyByZXR1cm4gbV9jaGFyZ2luZ1Rp
bWU7IH0KKyAgICBkb3VibGUgZGlzY2hhcmdpbmdUaW1lKCkgY29uc3QgIHsgcmV0dXJuIG1fZGlz
Y2hhcmdpbmdUaW1lOyB9CisgICAgZG91YmxlIGxldmVsKCkgY29uc3QgIHsgcmV0dXJuIG1fbGV2
ZWw7IH0KKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5U3RhdHVzKCk7CisgICAgQmF0dGVyeVN0YXR1
cyhib29sIGNoYXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdU
aW1lLCBkb3VibGUgbGV2ZWwpOworCisgICAgYm9vbCBtX2NoYXJnaW5nOworICAgIGRvdWJsZSBt
X2NoYXJnaW5nVGltZTsKKyAgICBkb3VibGUgbV9kaXNjaGFyZ2luZ1RpbWU7CisgICAgZG91Ymxl
IG1fbGV2ZWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCQVRU
RVJZX1NUQVRVUworI2VuZGlmIC8vIEJhdHRlcnlTdGF0dXNfaAorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRmYjM2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNwcApAQCAtMCwwICsx
LDY3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3JCYXR0ZXJ5
LmgiCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5TWFu
YWdlci5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXZpZ2F0b3JCYXR0ZXJ5OjpO
YXZpZ2F0b3JCYXR0ZXJ5KCkKK3sKK30KKworTmF2aWdhdG9yQmF0dGVyeTo6fk5hdmlnYXRvckJh
dHRlcnkoKQoreworfQorCitCYXR0ZXJ5TWFuYWdlciogTmF2aWdhdG9yQmF0dGVyeTo6d2Via2l0
QmF0dGVyeShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBOYXZpZ2F0b3IqIG5hdmln
YXRvcikKK3sKKyAgICBOYXZpZ2F0b3JCYXR0ZXJ5KiBuYXZpZ2F0b3JCYXR0ZXJ5ID0gTmF2aWdh
dG9yQmF0dGVyeTo6ZnJvbShuYXZpZ2F0b3IpOworICAgIGlmICghbmF2aWdhdG9yQmF0dGVyeS0+
bV9iYXR0ZXJ5TWFuYWdlcikKKyAgICAgICAgbmF2aWdhdG9yQmF0dGVyeS0+bV9iYXR0ZXJ5TWFu
YWdlciA9IEJhdHRlcnlNYW5hZ2VyOjpjcmVhdGUoY29udGV4dCwgbmF2aWdhdG9yKTsKKyAgICBy
ZXR1cm4gbmF2aWdhdG9yQmF0dGVyeS0+bV9iYXR0ZXJ5TWFuYWdlci5nZXQoKTsKK30KKworTmF2
aWdhdG9yQmF0dGVyeSogTmF2aWdhdG9yQmF0dGVyeTo6ZnJvbShOYXZpZ2F0b3IqIG5hdmlnYXRv
cikKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwgKCJOYXZp
Z2F0b3JCYXR0ZXJ5IikpOworICAgIE5hdmlnYXRvckJhdHRlcnkqIHN1cHBsZW1lbnQgPSBzdGF0
aWNfY2FzdDxOYXZpZ2F0b3JCYXR0ZXJ5Kj4oU3VwcGxlbWVudDxOYXZpZ2F0b3I+Ojpmcm9tKG5h
dmlnYXRvciwgbmFtZSkpOworICAgIGlmICghc3VwcGxlbWVudCkgeworICAgICAgICBzdXBwbGVt
ZW50ID0gbmV3IE5hdmlnYXRvckJhdHRlcnkoKTsKKyAgICAgICAgcHJvdmlkZVRvKG5hdmlnYXRv
ciwgbmFtZSwgYWRvcHRQdHIoc3VwcGxlbWVudCkpOworICAgIH0KKyAgICByZXR1cm4gc3VwcGxl
bWVudDsKK30KKworQmF0dGVyeU1hbmFnZXIqIE5hdmlnYXRvckJhdHRlcnk6OmJhdHRlcnlNYW5h
Z2VyKCkKK3sKKyAgICByZXR1cm4gbV9iYXR0ZXJ5TWFuYWdlci5nZXQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0
ZXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYzFjNDgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5o
CkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBOYXZpZ2F0b3JCYXR0ZXJ5X2gKKyNkZWZpbmUg
TmF2aWdhdG9yQmF0dGVyeV9oCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNs
dWRlICJQYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeU1hbmFn
ZXI7CitjbGFzcyBOYXZpZ2F0b3I7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitj
bGFzcyBOYXZpZ2F0b3JCYXR0ZXJ5IDogcHVibGljIFN1cHBsZW1lbnQ8TmF2aWdhdG9yPiB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+TmF2aWdhdG9yQmF0dGVyeSgpOworCisgICAgc3RhdGljIE5h
dmlnYXRvckJhdHRlcnkqIGZyb20oTmF2aWdhdG9yKik7CisKKyAgICBzdGF0aWMgQmF0dGVyeU1h
bmFnZXIqIHdlYmtpdEJhdHRlcnkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE5hdmlnYXRvciop
OworICAgIEJhdHRlcnlNYW5hZ2VyKiBiYXR0ZXJ5TWFuYWdlcigpOworCisgcHJpdmF0ZToKKyAg
ICBOYXZpZ2F0b3JCYXR0ZXJ5KCk7CisKKyAgICBSZWZQdHI8QmF0dGVyeU1hbmFnZXI+IG1fYmF0
dGVyeU1hbmFnZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNlbmRpZiAvLyBOYXZpZ2F0b3JCYXR0ZXJ5X2gKKwor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0
dGVyeS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVy
eS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkYjc4MwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0
ZXJ5LmlkbApAQCAtMCwwICsxLDMxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKK21vZHVsZSB3aW5kb3cgeworCisgICAgaW50ZXJm
YWNlIFsKKyAgICAgICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwKKyAgICAgICAg
Q29uZGl0aW9uYWw9QkFUVEVSWV9TVEFUVVMsCisgICAgICAgIFN1cHBsZW1lbnRhbD1OYXZpZ2F0
b3IKKyAgICBdIE5hdmlnYXRvckJhdHRlcnkgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
QmF0dGVyeU1hbmFnZXIgd2Via2l0QmF0dGVyeTsKKyAgICB9OworCit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCmluZGV4IDY5ZTUyMDYuLjU1MTkxMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cApAQCAtMjA2LDYgKzIwNiwxMSBAQAogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisjaW5jbHVkZSAiQmF0dGVyeUNvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3JCYXR0ZXJ5LmgiCisjZW5kaWYKKwogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2UgVW5pY29k
ZTsKQEAgLTE5NDksNiArMTk1NCwxMyBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVBbGxFdmVudExp
c3RlbmVycygpCiAgICAgICAgIGRvbVdpbmRvdy0+cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsK
ICAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50
cmF2ZXJzZU5leHROb2RlKCkpCiAgICAgICAgIG5vZGUtPnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJz
KCk7CisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisgICAgaWYgKCFwYWdlKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoQmF0dGVyeUNvbnRyb2xsZXIqIGJhdHRlcnlDb250cm9sbGVy
ID0gQmF0dGVyeUNvbnRyb2xsZXI6OmZyb20ocGFnZSgpKSkKKyAgICAgICAgYmF0dGVyeUNvbnRy
b2xsZXItPnJlbW92ZUFsbExpc3RlbmVycygpOworI2VuZGlmCiB9CiAKIHZvaWQgRG9jdW1lbnQ6
OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yU3VzcGVu
c2lvbiB3aHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAppbmRleCBhNjE2Zjc0Li43Y2M1ZDg5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKQEAgLTQxLDYgKzQxLDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIG1hY3JvKGJsdXIpIFwKICAgICBtYWNybyhjYWNoZWQpIFwKICAgICBtYWNybyhj
aGFuZ2UpIFwKKyAgICBtYWNybyhjaGFyZ2luZ2NoYW5nZSkgXAorICAgIG1hY3JvKGNoYXJnaW5n
dGltZWNoYW5nZSkgXAogICAgIG1hY3JvKGNoZWNraW5nKSBcCiAgICAgbWFjcm8oY2xpY2spIFwK
ICAgICBtYWNybyhjbG9zZSkgXApAQCAtNTYsNiArNTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgbWFjcm8oZGV2aWNlbW90aW9uKSBcCiAgICAgbWFjcm8oZGV2aWNlb3JpZW50YXRpb24p
IFwKICAgICBtYWNybyhkaXNwbGF5KSBcCisgICAgbWFjcm8oZGlzY2hhcmdpbmd0aW1lY2hhbmdl
KSBcCiAgICAgbWFjcm8oZG93bmxvYWRpbmcpIFwKICAgICBtYWNybyhkcmFnKSBcCiAgICAgbWFj
cm8oZHJhZ2VuZCkgXApAQCAtNzQsNiArNzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
bWFjcm8oa2V5ZG93bikgXAogICAgIG1hY3JvKGtleXByZXNzKSBcCiAgICAgbWFjcm8oa2V5dXAp
IFwKKyAgICBtYWNybyhsZXZlbGNoYW5nZSkgXAogICAgIG1hY3JvKGxvYWQpIFwKICAgICBtYWNy
byhsb2Fkc3RhcnQpIFwKICAgICBtYWNybyhtZXNzYWdlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0RmFjdG9yeS5pbgppbmRleCA3ODM5NmJkLi43YTFiM2NiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldEZhY3RvcnkuaW4KQEAgLTEsNiArMSw3IEBACiBuYW1lc3BhY2U9
IkV2ZW50VGFyZ2V0IgogCiBBdWRpb0NvbnRleHQgY29uZGl0aW9uYWw9V0VCX0FVRElPCitCYXR0
ZXJ5TWFuYWdlciBjb25kaXRpb25hbD1CQVRURVJZX1NUQVRVUwogRGVkaWNhdGVkV29ya2VyQ29u
dGV4dCBjb25kaXRpb25hbD1XT1JLRVJTCiBET01BcHBsaWNhdGlvbkNhY2hlCiBET01XaW5kb3cK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQmF0dGVyeUNsaWVudE1v
Y2suY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9CYXR0ZXJ5Q2xpZW50TW9jay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0MDhiOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQmF0dGVyeUNsaWVudE1vY2su
Y3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJh
dHRlcnlDbGllbnRNb2NrLmgiCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNs
dWRlICJCYXR0ZXJ5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0JhdHRl
cnlDbGllbnRNb2NrOjpCYXR0ZXJ5Q2xpZW50TW9jaygpCisgICAgOiBtX2NvbnRyb2xsZXIoMCkK
K3sKK30KKworQmF0dGVyeUNsaWVudE1vY2s6On5CYXR0ZXJ5Q2xpZW50TW9jaygpCit7Cit9CisK
K3ZvaWQgQmF0dGVyeUNsaWVudE1vY2s6OnNldENvbnRyb2xsZXIoQmF0dGVyeUNvbnRyb2xsZXIq
IGNvbnRyb2xsZXIpCit7CisgICAgQVNTRVJUKCFtX2NvbnRyb2xsZXIpOworICAgIG1fY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7CisgICAgQVNTRVJUKG1fY29udHJvbGxlcik7Cit9CisKK2Jvb2wg
QmF0dGVyeUNsaWVudE1vY2s6OnN0YXJ0VXBkYXRpbmcoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVudE1vY2s6
OnN0b3BVcGRhdGluZyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKK3sKK30KKwordm9p
ZCBCYXR0ZXJ5Q2xpZW50TW9jazo6YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKQoreworICAg
IGRlbGV0ZSB0aGlzOworfQorCit2b2lkIEJhdHRlcnlDbGllbnRNb2NrOjpzZXRCYXR0ZXJ5U3Rh
dHVzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0
dXM+IGJhdHRlcnlTdGF0dXMpCit7CisgICAgbV9jb250cm9sbGVyLT5kaWRDaGFuZ2VCYXR0ZXJ5
U3RhdHVzKGV2ZW50VHlwZSwgYmF0dGVyeVN0YXR1cyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2svQmF0dGVyeUNsaWVudE1vY2suaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svQmF0dGVyeUNsaWVudE1vY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44YTUxZTZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9CYXR0ZXJ5Q2xpZW50TW9jay5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBCYXR0ZXJ5Q2xpZW50TW9ja19oCisjZGVmaW5lIEJhdHRlcnlDbGllbnRNb2NrX2gKKwor
I2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUgIkJhdHRlcnlDbGllbnQuaCIK
KyNpbmNsdWRlICJCYXR0ZXJ5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEJhdHRlcnlTdGF0dXM7CisKK2NsYXNzIEJhdHRlcnlDbGllbnRNb2NrIDogcHVibGlj
IEJhdHRlcnlDbGllbnQgeworcHVibGljOgorICAgIEJhdHRlcnlDbGllbnRNb2NrKCk7CisgICAg
fkJhdHRlcnlDbGllbnRNb2NrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJvbGxlcihC
YXR0ZXJ5Q29udHJvbGxlciopOworICAgIHZpcnR1YWwgYm9vbCBzdGFydFVwZGF0aW5nKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5n
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmF0dGVy
eUNvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKworICAgIHZvaWQgc2V0QmF0dGVyeVN0YXR1cyhjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPik7CisK
K3ByaXZhdGU6CisgICAgQmF0dGVyeUNvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKK307CisKK30K
KworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisjZW5kaWYgLy8gQmF0dGVyeUNsaWVudE1vY2tf
aAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IDI1ZDNmNzguLmFmZDkxY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTItMDMtMDEgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisK
KyAgICAgICAgU3VwcG9ydCBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjY5OAorCisgICAgICAgIEFkZCBpbmNs
dWRlIGRpcmVjdG9yeSBhbmQgZmlsZS4KKyAgICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvYmF0
dGVyeS1zdGF0dXMvCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKwogMjAxMi0wMi0yNCAgR3J6ZWdvcnogQ3phamtv
d3NraSAgPGcuY3phamtvd3NraUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtEUlRdIElt
cGxlbWVudCBzZXRWYWx1ZUZvclVzZXIgYW5kIHNldEF1dG9maWxsZWQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCAxZGViZTM2Li5jMTliN2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UK
QEAgLTEzLDYgKzEzLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3d0Zi9nb2JqZWN0IgogICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9lZmwiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tb2NrIgogICAgICR7Q2Fpcm9f
SU5DTFVERV9ESVJTfQogICAgICR7RUNPUkVfWF9JTkNMVURFX0RJUlN9CiAgICAgJHtFREpFX0lO
Q0xVREVfRElSU30KQEAgLTEyNiw2ICsxMjcsMTAgQEAgSUYgKEVOQUJMRV9WSUJSQVRJT04pCiAg
ICAgKQogRU5ESUYgKCkKIAorSUYgKEVOQUJMRV9CQVRURVJZX1NUQVRVUykKKyAgICBMSVNUKEFQ
UEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUyAke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2Jh
dHRlcnkpCisgICAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMgZWZsL1dlYkNvcmVTdXBwb3J0
L0JhdHRlcnlDbGllbnRFZmwuY3BwKQorRU5ESUYgKCkKIAogU0VUKFdlYktpdF9USEVNRV9ERUZJ
TklUSU9OICIiKQogSUYgKEVOQUJMRV9QUk9HUkVTU19UQUcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXgg
YTlhNTNmYi4uZjJlNDUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEy
LTAzLTAxICBLaWhvbmcgS3dvbiAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgorCisgICAgICAg
IFN1cHBvcnQgZm9yIEJhdHRlcnkgU3RhdHVzIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKworICAgICAgICBBZGQgQmF0dGVyeUNsaWVu
dEVmbCBhbmQgRHVtcFJlbmVyVHJlZVN1cHBvcnRFZmwgY2xhc3MgaW1wbGVtZW50YXRpb24gZm9y
IHRoZSBsYXlvdXQgdGVzdHMuCisgICAgICAgIFRoZSBsYXlvdXQgdGVzdHMgYXJlIHJ1biB1c2lu
ZyB0aGUgQmF0dGVyeUNsaWVudE1vY2sgY2xhc3MuCisgICAgICAgIEJhdHRlcnlDbGllbnRFZmwg
Y2xhc3MsIGhvd2V2ZXIsIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZCBpbiB0aGlzIHBhdGNoLgor
ICAgICAgICAoSXQgd2lsbCBiZSBjb21wbGV0ZWQgYnkgb3RoZXIgcGF0Y2ggYXMgbmVjZXNzYXJ5
IGluIHRoZSBFZmwgcG9ydC4pCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2JhdHRlcnkt
c3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpCYXR0ZXJ5Q2xp
ZW50RWZsKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRFZmw6OnNldENvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6c3RhcnRVcGRhdGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpzdG9wVXBkYXRpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6c2V0QmF0dGVyeVN0YXR1
cyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQmF0dGVyeUNsaWVudEVmbCk6CisgICAgICAg
IChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjp+QmF0dGVyeUNsaWVudEVmbCk6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcDoKKyAgICAgICAg
KER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0TW9ja0JhdHRlcnlTdGF0dXMpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oOgorICAgICAgICAq
IGV3ay9ld2tfdmlldy5jcHA6CisgICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAg
ICAgICAgKF9ld2tfdmlld19wcml2X25ldyk6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfYWRk
KToKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuaDoKKwogMjAxMi0wMi0yOSAgVG9tYXN6IE1vcmF3
c2tpICA8dC5tb3Jhd3NraUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBSZXBsYWNlIG1h
bGxvYy9jYWxsb2MvZnJlZSB0byBuZXcvZGVsZXRlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4zMmE1OGJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHAKQEAgLTAsMCArMSw2
MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudEVmbC5o
IgorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVyeUNvbnRy
b2xsZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCYXR0ZXJ5Q2xpZW50RWZsOjpCYXR0
ZXJ5Q2xpZW50RWZsKCkKKyAgICA6IG1fY29udHJvbGxlcigwKQoreworfQorCit2b2lkIEJhdHRl
cnlDbGllbnRFZmw6OnNldENvbnRyb2xsZXIoQmF0dGVyeUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIp
Cit7CisgICAgbV9jb250cm9sbGVyID0gY29udHJvbGxlcjsKK30KKworYm9vbCBCYXR0ZXJ5Q2xp
ZW50RWZsOjpzdGFydFVwZGF0aW5nKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQorewor
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBmb3IgZ2V0dGluZyBiYXR0ZXJ5IHN0YXR1
cyB0byB0aGUgZWZsIHBvcnQuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQmF0dGVyeUNs
aWVudEVmbDo6c3RvcFVwZGF0aW5nKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQorewor
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBmb3IgZ2V0dGluZyBiYXR0ZXJ5IHN0YXR1
cyB0byB0aGUgZWZsIHBvcnQKK30KKwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpiYXR0ZXJ5Q29u
dHJvbGxlckRlc3Ryb3llZCgpCit7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgQmF0dGVy
eUNsaWVudEVmbDo6c2V0QmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQoreworICAgIG1fY29u
dHJvbGxlci0+ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhldmVudFR5cGUsIGJhdHRlcnlTdGF0dXMp
OworfQorCit9CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmggYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwZmNkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlDbGllbnRFZmwuaApAQCAtMCwwICsx
LDUyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgQmF0dGVyeUNsaWVudEVmbF9oCisjZGVmaW5lIEJhdHRlcnlDbGll
bnRFZmxfaAorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVy
eUNsaWVudC5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXMuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBCYXR0ZXJ5Q29udHJvbGxlcjsKKworY2xhc3MgQmF0dGVyeUNsaWVudEVm
bCA6IHB1YmxpYyBCYXR0ZXJ5Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBCYXR0ZXJ5Q2xpZW50RWZs
KCk7CisgICAgfkJhdHRlcnlDbGllbnRFZmwoKSB7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udHJvbGxlcihCYXR0ZXJ5Q29udHJvbGxlciopOworICAgIHZpcnR1YWwgYm9vbCBzdGFydFVw
ZGF0aW5nKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3RvcFVwZGF0aW5nKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKworICAgIHZvaWQgc2V0QmF0dGVy
eVN0YXR1cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5
U3RhdHVzPik7CisKK3ByaXZhdGU6CisgICAgQmF0dGVyeUNvbnRyb2xsZXIqIG1fY29udHJvbGxl
cjsKK307CisKK30KKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisjZW5kaWYgLy8gQmF0dGVy
eUNsaWVudEVmbF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCmluZGV4IGZkM2Q2YjUuLjE0
OGZiNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcApAQCAtMjEsNiArMjEsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgog
CisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudE1vY2suaCIKKyNpbmNsdWRlICJCYXR0ZXJ5Q29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiZXdr
X3ByaXZhdGUuaCIKIApAQCAtMzg5LDYgKzM5MSwxMyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJvb2wgZW5hYmxlKQogICAgIFdlYkNv
cmU6OlNldHRpbmdzOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoZW5hYmxlKTsKIH0KIAordm9p
ZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldE1vY2tCYXR0ZXJ5U3RhdHVzKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlLCBib29sIGNoYXJnaW5nLCBkb3Vi
bGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2ZWwpCit7
CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IEVXS1ByaXZhdGU6OmNvcmVQYWdlKGV3a1ZpZXcp
OworICAgIFdlYkNvcmU6OkJhdHRlcnlDbGllbnRNb2NrKiBtb2NrQ2xpZW50ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6QmF0dGVyeUNsaWVudE1vY2sqPihXZWJDb3JlOjpCYXR0ZXJ5Q29udHJvbGxl
cjo6ZnJvbShwYWdlKS0+Y2xpZW50KCkpOworICAgIG1vY2tDbGllbnQtPnNldEJhdHRlcnlTdGF0
dXMoZXZlbnRUeXBlLCBXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzOjpjcmVhdGUoY2hhcmdpbmcsIGNo
YXJnaW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZlbCkpOworfQorCiB2b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6ZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChFdmFzX09iamVj
dCogZXdrVmlldywgaW50IGRldmljZURQSSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGV2aWNl
U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYXZhaWxhYmxlU2l6ZSkKIHsKICAgICBXZWJD
b3JlOjpQYWdlKiBwYWdlID0gRVdLUHJpdmF0ZTo6Y29yZVBhZ2UoZXdrVmlldyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbC5oCmluZGV4IDk1MGE3OGQuLjM0YTJiY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bC5oCkBAIC03Nyw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc1RhcmdldEl0
ZW0oY29uc3QgRXdrX0hpc3RvcnlfSXRlbSopOwogCiAgICAgc3RhdGljIHZvaWQgc2V0TW9ja1Nj
cm9sbGJhcnNFbmFibGVkKGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldE1vY2tCYXR0ZXJ5U3Rh
dHVzKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlLCBib29sIGNo
YXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3Vi
bGUgbGV2ZWwpOwogCiAgICAgc3RhdGljIHZvaWQgZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9y
dChFdmFzX09iamVjdCogZXdrVmlldywgaW50IGRldmljZURQSSwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgZGV2aWNlU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYXZhaWxhYmxlU2l6ZSk7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5kZXggMTdhNmVhMC4uODMwODAyYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCkBAIC03NCw2ICs3NCwxMSBAQAogI2luY2x1
ZGUgIlZpYnJhdGlvbkNsaWVudEVmbC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQkFUVEVSWV9T
VEFUVVMpCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudEVmbC5oIgorI2luY2x1ZGUgIkJhdHRlcnlD
bGllbnRNb2NrLmgiCisjZW5kaWYKKwogc3RhdGljIGNvbnN0IGZsb2F0IHpvb21NaW5pbXVtID0g
MC4wNTsKIHN0YXRpYyBjb25zdCBmbG9hdCB6b29tTWF4aW11bSA9IDQuMDsKIApAQCAtNjE4LDYg
KzYyMywxMyBAQCBzdGF0aWMgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9u
ZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogICAgIFdlYkNvcmU6OnByb3ZpZGVW
aWJyYXRpb25Ubyhwcml2LT5wYWdlLmdldCgpLCBuZXcgV2ViQ29yZTo6VmlicmF0aW9uQ2xpZW50
RWZsKHNtYXJ0RGF0YS0+c2VsZikpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFU
VVMpCisgICAgaWYgKHNtYXJ0RGF0YS0+YXBpLT51c2VNb2NrKQorICAgICAgICBXZWJDb3JlOjpw
cm92aWRlQmF0dGVyeVRvKHByaXYtPnBhZ2UuZ2V0KCksIG5ldyBXZWJDb3JlOjpCYXR0ZXJ5Q2xp
ZW50TW9jayk7CisgICAgZWxzZQorICAgICAgICBXZWJDb3JlOjpwcm92aWRlQmF0dGVyeVRvKHBy
aXYtPnBhZ2UuZ2V0KCksIG5ldyBXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsKTsKKyNlbmRpZgor
CiAgICAgcHJpdi0+cGFnZVNldHRpbmdzID0gcHJpdi0+cGFnZS0+c2V0dGluZ3MoKTsKIAogICAg
IHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLndpZHRoID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVu
dHM6OlZhbHVlQXV0bzsKQEAgLTc2NCw4ICs3NzYsOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIHNtYXJ0RGF0YS0+YmdfY29sb3Iu
YSA9IDI1NTsKIAogICAgIHNtYXJ0RGF0YS0+c2VsZiA9IGV3a1ZpZXc7Ci0gICAgc21hcnREYXRh
LT5fcHJpdiA9IF9ld2tfdmlld19wcml2X25ldyhzbWFydERhdGEpOwogICAgIHNtYXJ0RGF0YS0+
YXBpID0gYXBpOworICAgIHNtYXJ0RGF0YS0+X3ByaXYgPSBfZXdrX3ZpZXdfcHJpdl9uZXcoc21h
cnREYXRhKTsKIAogICAgIF9wYXJlbnRfc2MuYWRkKGV3a1ZpZXcpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdmlldy5oCmluZGV4IDdkZTBlNDYuLjk2MDFmMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmll
dy5oCkBAIC0xMjIsNiArMTIyLDcgQEAgdHlwZWRlZiBlbnVtIF9Fd2tfRm9jdXNfRGlyZWN0aW9u
IEV3a19Gb2N1c19EaXJlY3Rpb247CiBzdHJ1Y3QgX0V3a19WaWV3X1NtYXJ0X0NsYXNzIHsKICAg
ICBFdmFzX1NtYXJ0X0NsYXNzIHNjOyAvKio8IEFsbCBidXQgJ2RhdGEnIGlzIGZyZWUgdG8gYmUg
Y2hhbmdlZC4gKi8KICAgICB1bnNpZ25lZCBsb25nIHZlcnNpb247CisgICAgRWluYV9Cb29sIHVz
ZU1vY2s7CiAKICAgICBFdmFzX09iamVjdCAqKCp3aW5kb3dfY3JlYXRlKShFd2tfVmlld19TbWFy
dF9EYXRhICpzZCwgRWluYV9Cb29sIGphdmFzY3JpcHQsIGNvbnN0IEV3a19XaW5kb3dfRmVhdHVy
ZXMgKndpbmRvd19mZWF0dXJlcyk7IC8qKjwgY3JlYXRlcyBhIG5ldyB3aW5kb3csIHJlcXVlc3Rl
ZCBieSB3ZWJraXQgKi8KICAgICB2b2lkICgqd2luZG93X2Nsb3NlKShFd2tfVmlld19TbWFydF9E
YXRhICpzZCk7IC8qKjwgY2xvc2VzIGEgd2luZG93ICovCkBAIC0yMzY0LDYgKzIzNjUsOCBAQCBF
QVBJIFNvdXBTZXNzaW9uKiBld2tfdmlld19zb3VwX3Nlc3Npb25fZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0ICpvKTsKICAqLwogRUFQSSB2b2lkIGV3a192aWV3X3NvdXBfc2Vzc2lvbl9zZXQoRXZhc19P
YmplY3QgKm8sIFNvdXBTZXNzaW9uICpzZXNzaW9uKTsKIAorRUFQSSB2b2lkIGV3a192aWV3X2R1
bXBfcmVuZGVyX3RyZWVfbW9kZV9lbmFibGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9v
bCBmbGFnKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21h
a2UKaW5kZXggNzY5ODU1Yy4uMzYzZTRlMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlv
bnNFZmwuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTYzLDYg
KzYzLDcgQEAgU0VUKFRIRU1FX0JJTkFSWV9ESVIgJHtDTUFLRV9CSU5BUllfRElSfS9XZWJLaXQv
ZWZsL0RlZmF1bHRUaGVtZSkKIAogU0VUKFZFUlNJT05fU0NSSVBUICItV2wsLS12ZXJzaW9uLXNj
cmlwdCwke0NNQUtFX01PRFVMRV9QQVRIfS9lZmxzeW1ib2xzLmZpbHRlciIpCiAKK1dFQktJVF9G
RUFUVVJFKEVOQUJMRV9CQVRURVJZX1NUQVRVUyAiRW5hYmxlIGJhdHRlcnkgc3RhdHVzIGFwaSIg
REVGQVVMVCBPTikKIFdFQktJVF9GRUFUVVJFKEVOQUJMRV9CTE9CICJFbmFibGUgYmxvYiBzbGlj
ZSIgREVGQVVMVCBPRkYpCiBXRUJLSVRfRkVBVFVSRShFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcg
IkVuYWJsZSBjaGFubmVsIG1lc3NhZ2luZyIgREVGQVVMVCBPTikKIFdFQktJVF9GRUFUVVJFKEVO
QUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04gIkVuYWJsZSBjbGllbnQgYmFzZWQgZ2VvbG9j
YXRpb24iIERFRkFVTFQgT0ZGKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlY29uZmlnLmguY21h
a2UgYi9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQppbmRleCBmZWY3MzBhLi45ZWQ1NDlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Vj
b25maWcuaC5jbWFrZQpAQCAtNiw2ICs2LDcgQEAKIAogCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVf
QVNfSU1BR0UKKyNjbWFrZWRlZmluZTAxIEVOQUJMRV9CQVRURVJZX1NUQVRVUwogI2NtYWtlZGVm
aW5lMDEgRU5BQkxFX0JMT0IKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9DSEFOTkVMX01FU1NBR0lO
RwogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTgpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGEwZDBiYTguLjc5
ZjEwZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNCBAQAorMjAxMi0wMy0wMSAgS2lob25nIEt3b24gIDxraWhvbmcua3dvbkBz
YW1zdW5nLmNvbT4KKworICAgICAgICBTdXBwb3J0IGZvciBCYXR0ZXJ5IFN0YXR1cyBBUEkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAg
ICAgICAgQWRkIHNldE1vY2tCYXR0ZXJ5U3RhdHVzIEFQSSB0byBsYXlvdXRUZXN0Q29udHJvbGxl
ciBmb3IgdGVzdGluZyB0aGUgQmF0dGVyeSBTdGF0dXMgQVBJLiAKKyAgICAgICAgaHR0cDovL3d3
dy53My5vcmcvVFIvYmF0dGVyeS1zdGF0dXMvCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChzZXRNb2NrQmF0dGVyeVN0YXR1c0NhbGxiYWNrKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlVmll
dy5jcHA6CisgICAgICAgIChkcnRWaWV3QWRkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9l
ZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldE1vY2tCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdl
YmtpdDoKKwogMjAxMi0wMy0wMSAgTWljaGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29vZ2xlLmNv
bT4KIAogICAgICAgICBbY2hyb21pdW1dIFVzZSB3ZWJraXRfc3VwcG9ydCB0byBjcmVhdGUgc2Vz
c2lvbiBzdG9yYWdlIG5hbWVzcGFjZXMgaW4gRFJULgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDA3N2IwODIuLjBiODZmYTMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKQEAgLTEyODgsNiAr
MTI4OCwyNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVu
Rm9yVVJMU2NoZW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRNb2NrQmF0dGVy
eVN0YXR1c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAo
YXJndW1lbnRDb3VudCA8IDUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRl
cnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZXZlbnRUeXBlKEFkb3B0
LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBib29sIG1fY2hhcmdpbmcgPSBKU1ZhbHVl
VG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1sxXSk7CisgICAgZG91YmxlIG1fY2hhcmdpbmdU
aW1lID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKTsK
KyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGRvdWJsZSBtX2Rpc2NoYXJnaW5nVGltZSA9
IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbM10sIGV4Y2VwdGlvbik7CisgICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBkb3VibGUgbV9sZXZlbCA9IEpTVmFsdWVUb051bWJl
cihjb250ZXh0LCBhcmd1bWVudHNbNF0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKKworICAgIGNvbnRyb2xsZXItPnNldE1vY2tCYXR0ZXJ5U3RhdHVzKGV2ZW50VHlwZS5n
ZXQoKSwgbV9jaGFyZ2luZywgbV9jaGFyZ2luZ1RpbWUsIG1fZGlzY2hhcmdpbmdUaW1lLCBtX2xl
dmVsKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIHN0
YXRpYyBKU1ZhbHVlUmVmIHNldE1vY2tEZXZpY2VPcmllbnRhdGlvbkNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDYpCkBAIC0y
NDQ1LDYgKzI0NjYsNyBAQCBKU1N0YXRpY0Z1bmN0aW9uKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c3RhdGljRnVuY3Rpb25zKCkKICAgICAgICAgeyAic2V0SmF2YVNjcmlwdFByb2ZpbGluZ0VuYWJs
ZWQiLCBzZXRKYXZhU2NyaXB0UHJvZmlsaW5nRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAg
ICAgIHsgInNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIiLCBzZXRNYWluRnJhbWVJc0ZpcnN0
UmVzcG9uZGVyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0TWluaW11bVRpbWVySW50
ZXJ2YWwiLCBzZXRNaW5pbXVtVGltZXJJbnRlcnZhbENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAg
IHsgInNldE1vY2tCYXR0ZXJ5U3RhdHVzIiwgc2V0TW9ja0JhdHRlcnlTdGF0dXNDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24iLCBzZXRNb2NrRGV2
aWNlT3JpZW50YXRpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRNb2NrR2VvbG9j
YXRpb25FcnJvciIsIHNldE1vY2tHZW9sb2NhdGlvbkVycm9yQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICAgICAgeyAic2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iLCBzZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuaAppbmRleCA0NTI2NWRiLi42Yzc2YjEzIDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRKYXZhU2NyaXB0UHJvZmlsaW5nRW5hYmxlZChib29sIHByb2ZpbGluZ0Vu
YWJsZWQpOwogICAgIHZvaWQgc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGZs
YWcpOwogICAgIHZvaWQgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpOwor
ICAgIHZvaWQgc2V0TW9ja0JhdHRlcnlTdGF0dXMoSlNTdHJpbmdSZWYgZXZlbnRUeXBlLCBib29s
IGNoYXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBk
b3VibGUgbGV2ZWwpOwogICAgIHZvaWQgc2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wgY2Fu
UHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBi
ZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKTsKICAgICB2b2lkIHNldE1v
Y2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdlKTsKICAgICB2
b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxv
bmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZs
L0R1bXBSZW5kZXJUcmVlVmlldy5jcHAKaW5kZXggYjE2NDAxYS4uY2RhMDEwMiAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlVmlldy5jcHAKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlVmlldy5jcHAKQEAgLTExMiw1
ICsxMTIsNyBAQCBFdmFzX09iamVjdCogZHJ0Vmlld0FkZChFdmFzKiBldmFzKQogICAgIGFwaS53
aW5kb3dfY3JlYXRlID0gb25XaW5kb3dDcmVhdGU7CiAgICAgYXBpLndpbmRvd19jbG9zZSA9IG9u
V2luZG93Q2xvc2U7CiAKKyAgICBhcGkudXNlTW9jayA9IHRydWU7CisKICAgICByZXR1cm4gZXZh
c19vYmplY3Rfc21hcnRfYWRkKGV2YXMsIGV2YXNfc21hcnRfY2xhc3NfbmV3KCZhcGkuc2MpKTsK
IH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJv
bGxlckVmbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xs
ZXJFZmwuY3BwCmluZGV4IGRhMGM3Y2EuLjdkY2IyOGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcApAQCAtMzQ5LDYgKzM0
OSwxNSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRNb2NrQmF0dGVyeVN0YXR1cyhKU1N0cmluZ1JlZiBldmVudFR5cGUsIGJvb2wgY2hhcmdpbmcs
IGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZl
bCkKK3sKKyAgICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJp
bmdTaXplKGV2ZW50VHlwZSk7CisgICAgY2hhciogZXZlbnRUeXBlQnVmZmVyID0gbmV3IGNoYXJb
bWF4TGVuZ3RoICsgMV07CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhldmVudFR5cGUsIGV2
ZW50VHlwZUJ1ZmZlciwgbWF4TGVuZ3RoICsgMSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsOjpzZXRNb2NrQmF0dGVyeVN0YXR1cyhicm93c2VyLT5tYWluVmlldygpLCBldmVudFR5cGVC
dWZmZXIsIGNoYXJnaW5nLCBjaGFyZ2luZ1RpbWUsIGRpc2NoYXJnaW5nVGltZSwgbGV2ZWwpOwor
ICAgIGRlbGV0ZVtdIGV2ZW50VHlwZUJ1ZmZlcjsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wsIGRvdWJsZSwgYm9vbCwgZG91Ymxl
LCBib29sLCBkb3VibGUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgRGV2aWNlT3Jp
ZW50YXRpb24gbGF5b3V0IHRlc3RzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13
ZWJraXQgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCBmMjBhYWFlLi4zMGFkODA3
IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3Jp
cHRzL2J1aWxkLXdlYmtpdApAQCAtNzAsNiArNzAsNyBAQCBteSAoCiAgICAgJHRocmVlRFJlbmRl
cmluZ1N1cHBvcnQsCiAgICAgJGFjY2VsZXJhdGVkMmRDYW52YXNTdXBwb3J0LAogICAgICRhbmlt
YXRpb25BUElTdXBwb3J0LAorICAgICRiYXR0ZXJ5c3RhdHVzQVBJU3VwcG9ydCwKICAgICAkYmxv
YlN1cHBvcnQsCiAgICAgJGNoYW5uZWxNZXNzYWdpbmdTdXBwb3J0LAogICAgICRjbGllbnRCYXNl
ZEdlb2xvY2F0aW9uU3VwcG9ydCwKQEAgLTE1OSw2ICsxNjAsOSBAQCBteSBAZmVhdHVyZXMgPSAo
CiAgICAgeyBvcHRpb24gPT4gImFuaW1hdGlvbi1hcGkiLCBkZXNjID0+ICJUb2dnbGUgYW5pbWF0
aW9uIEFQSSBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0FOSU1BVElPTl9BUEki
LCBkZWZhdWx0ID0+IGlzQmxhY2tCZXJyeSgpLCB2YWx1ZSA9PiBcJGFuaW1hdGlvbkFQSVN1cHBv
cnQgfSwKIAorICAgIHsgb3B0aW9uID0+ICJiYXR0ZXJ5LXN0YXR1cy1hcGkiLCBkZXNjID0+ICJU
b2dnbGUgYmF0dGVyeSBzdGF0dXMgQVBJIHN1cHBvcnQiLAorICAgICAgZGVmaW5lID0+ICJFTkFC
TEVfQkFUVEVSWV9TVEFUVVMiLCBkZWZhdWx0ID0+IGlzRWZsKCksIHZhbHVlID0+IFwkYmF0dGVy
eXN0YXR1c0FQSVN1cHBvcnQgfSwKKwogICAgIHsgb3B0aW9uID0+ICJibG9iIiwgZGVzYyA9PiAi
VG9nZ2xlIEJsb2Igc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9CTE9CIiwgZGVm
YXVsdCA9PiAoaXNBcHBsZU1hY1dlYktpdCgpIHx8IGlzR3RrKCkgfHwgaXNDaHJvbWl1bSgpIHx8
IGlzQmxhY2tCZXJyeSgpKSwgdmFsdWUgPT4gXCRibG9iU3VwcG9ydCB9LAogCg==
</data>
<flag name="commit-queue"
          id="132587"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129837</attachid>
            <date>2012-03-02 00:24:46 -0800</date>
            <delta_ts>2012-03-07 00:56:06 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>battery_03.patch</filename>
            <type>text/plain</type>
            <size>94010</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1MjI4M2RlLi4xMWU3NDhi
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTItMDMtMDEgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgU3VwcG9ydCBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKworICAgICAgICBFbmFibGUgQkFU
VEVSWV9TVEFUVVMgZm9yIFdlYktpdC1FZmwuCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RS
L2JhdHRlcnktc3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2U6CisgICAgICAgICogU291
cmNlL2NtYWtlY29uZmlnLmguY21ha2U6CisKIDIwMTItMDMtMDEgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGVyZi1vLW1hdGljOiBnZW5lcmF0ZSBkYXNoYm9h
cmQgaW1hZ2VzIGZvciAzMCwgOTAsIGFuZCAzNjUgZGF5cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGZmZmVlZjUuLjk5NDcz
MTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMi0wMy0wMSAgS2lob25nIEt3b24gIDxraWhv
bmcua3dvbkBzYW1zdW5nLmNvbT4KKworICAgICAgICBTdXBwb3J0IGZvciBCYXR0ZXJ5IFN0YXR1
cyBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MjY5OAorCisgICAgICAgIEFkZCBuZXcgdGVzdCBjYXNlcyBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJ
LgorICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9iYXR0ZXJ5LXN0YXR1cy8KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL0JhdHRl
cnlTdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2stZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxi
YWNrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYmFzaWMt
b3BlcmF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVy
eVN0YXR1cy9iYXNpYy1vcGVyYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20v
QmF0dGVyeVN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9u
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvbXVsdGlwbGUt
ZnJhbWVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0
YXR1cy9tdWx0aXBsZS1mcmFtZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9uby1wYWdlLWNhY2hlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9uby1wYWdlLWNhY2hlLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvcmVzb3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9yZXNvdXJjZXMvY2FjaGVk
LXBhZ2UtMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Jl
c291cmNlcy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLW5ldy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9hZGQtbGlzdGVuZXItZnJvbS1j
YWxsYmFjay5qczogQWRkZWQuCisgICAgICAgIChjaGVja0JhdHRlcnlTdGF0dXMpOgorICAgICAg
ICAoZmlyc3RMaXN0ZW5lcik6CisgICAgICAgIChzZWNvbmRMaXN0ZW5lcik6CisgICAgICAgICht
YXliZUZpbmlzaFRlc3QpOgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0
LXRlc3RzL2Jhc2ljLW9wZXJhdGlvbi5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5qczogQWRkZWQu
CisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvbXVsdGlwbGUt
ZnJhbWVzLmpzOiBBZGRlZC4KKyAgICAgICAgKGNoZWNrQmF0dGVyeVN0YXR1cyk6CisgICAgICAg
IChjaGVja0NoaWxkQmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChtYWluRnJhbWVMaXN0ZW5lcik6
CisgICAgICAgIChjaGlsZEZyYW1lTGlzdGVuZXIpOgorICAgICAgICAobWF5YmVGaW5pc2hUZXN0
KToKKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9uby1wYWdl
LWNhY2hlLmpzOiBBZGRlZC4KKyAgICAgICAgKHJlcG9ydFBhZ2VPbmVPbmxvYWQpOgorICAgICAg
ICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL3VwZGF0ZXMuanM6IEFkZGVk
LgorICAgICAgICAoY2hlY2tCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKHNldE1vY2tCYXR0ZXJ5
U3RhdHVzKToKKyAgICAgICAgKGZpcnN0TGlzdGVuZXIpOgorICAgICAgICAodXBkYXRlTGlzdGVu
ZXIpOgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL3dpbmRv
dy1wcm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChoYXNPbkJhdHRlcnlQcm9wZXJ0eSk6Cisg
ICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy91cGRhdGVzLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy91cGRhdGVzLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvd2luZG93LXByb3BlcnR5LWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy93aW5kb3ct
cHJvcGVydHkuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0OgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6
CisgICAgICAgICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vd2lu
Y2Fpcm8vU2tpcHBlZDoKKwogMjAxMi0wMy0wMSAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZ2FyZGVuaW5nLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxs
YmFjay1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2Fk
ZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lMjE0N2RlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwyMSBAQAorVGVzdHMgdGhhdCBhZGRpbmcgYSBuZXcgZXZlbnQgbGlz
dGVuZXIgZnJvbSBhIGNhbGxiYWNrIHdvcmtzIGFzIGV4cGVjdGVkLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIG1vY2tDaGFyZ2luZwor
UEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBtb2NrQ2hhcmdpbmdUaW1lCitQQVNTIGJhdHRl
cnkuZGlzY2hhcmdpbmdUaW1lIGlzIG1vY2tEaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5s
ZXZlbCBpcyBtb2NrTGV2ZWwKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBpcyBtb2NrQ2hhcmdpbmcK
K1BBU1MgYmF0dGVyeS5jaGFyZ2luZ1RpbWUgaXMgbW9ja0NoYXJnaW5nVGltZQorUEFTUyBiYXR0
ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBtb2NrRGlzY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnku
bGV2ZWwgaXMgbW9ja0xldmVsCitQQVNTIGJhdHRlcnkuY2hhcmdpbmcgaXMgbW9ja0NoYXJnaW5n
CitQQVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIG1vY2tDaGFyZ2luZ1RpbWUKK1BBU1MgYmF0
dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgbW9ja0Rpc2NoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5
LmxldmVsIGlzIG1vY2tMZXZlbAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlT
dGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL0JhdHRlcnlTdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWQ5OTg0Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxs
YmFjay5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNr
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYmFzaWMtb3BlcmF0aW9uLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYmFzaWMtb3BlcmF0aW9uLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzliZTNhCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9iYXNpYy1v
cGVyYXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3RzIHRoZSBiYXNpYyBv
cGVyYXRpb24gb2YgQmF0dGVyeVN0YXR1cyB1c2luZyB0aGUgbW9jay4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBpcyBtb2NrQ2hhcmdpbmcK
K1BBU1MgYmF0dGVyeS5jaGFyZ2luZ1RpbWUgaXMgbW9ja0NoYXJnaW5nVGltZQorUEFTUyBiYXR0
ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBtb2NrRGlzY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnku
bGV2ZWwgaXMgbW9ja0xldmVsCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0
YXR1cy9iYXNpYy1vcGVyYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlT
dGF0dXMvYmFzaWMtb3BlcmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOTE1N2JlNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Jh
dHRlcnlTdGF0dXMvYmFzaWMtb3BlcmF0aW9uLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvYmFz
aWMtb3BlcmF0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvZXZlbnQtYWZ0ZXItbmF2aWdh
dGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2V2
ZW50LWFmdGVyLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjhlNmJjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9CYXR0ZXJ5U3RhdHVzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMyBAQAorVGVzdHMgZm9yIGEgY3Jhc2ggd2hlcmUgYW4gZXZlbnQgaXMgZmlyZWQg
YWZ0ZXIgdGhlIHBhZ2UgaGFzIGJlZW4gbmF2aWdhdGVkIGF3YXkgd2hlbiB0aGUgb3JpZ2luYWwg
cGFnZSBpcyBpbiB0aGUgcGFnZSBjYWNoZS4KKworU1VDQ0VTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2V2ZW50LWFmdGVyLW5hdmlnYXRp
b24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDU3YWVmCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9ldmVudC1h
ZnRlci1uYXZpZ2F0aW9uLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZXZlbnQtYWZ0ZXItbmF2
aWdhdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1l
cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIwYTk2
NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMv
bXVsdGlwbGUtZnJhbWVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUZXN0cyB1c2lu
ZyBCYXR0ZXJ5U3RhdHVzIGZyb20gbXVsdGlwbGUgZnJhbWVzLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIG1vY2tDaGFyZ2luZworUEFT
UyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBtb2NrQ2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnku
ZGlzY2hhcmdpbmdUaW1lIGlzIG1vY2tEaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZl
bCBpcyBtb2NrTGV2ZWwKK1BBU1MgY2hpbGRCYXR0ZXJ5LmNoYXJnaW5nIGlzIG1vY2tDaGFyZ2lu
ZworUEFTUyBjaGlsZEJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIG1vY2tDaGFyZ2luZ1RpbWUKK1BB
U1MgY2hpbGRCYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBtb2NrRGlzY2hhcmdpbmdUaW1lCitQ
QVNTIGNoaWxkQmF0dGVyeS5sZXZlbCBpcyBtb2NrTGV2ZWwKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9tdWx0aXBsZS1mcmFtZXMuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjc5Y2FjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9tdWx0aXBsZS1mcmFtZXMuaHRtbApAQCAtMCww
ICsxLDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9
InNjcmlwdC10ZXN0cy9tdWx0aXBsZS1mcmFtZXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9u
by1wYWdlLWNhY2hlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlT
dGF0dXMvbm8tcGFnZS1jYWNoZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZWM0MTk4NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL0JhdHRlcnlTdGF0dXMvbm8tcGFnZS1jYWNoZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
NCBAQAorVGVzdHMgdGhhdCBwYWdlcyB0aGF0IHVzZSBCYXR0ZXJ5U3RhdHVzIGFyZSBub3QgcHV0
IGluIHRoZSBwYWdlIGNhY2hlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworTWFp
biBwYWdlIG9wZW5pbmcgcmVzb3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRtbAorcmVzb3VyY2VzL2Nh
Y2hlZC1wYWdlLTEuaHRtbCBvbmxvYWQgZmlyZWQsIGNvdW50ID0gMQorcmVzb3VyY2VzL2NhY2hl
ZC1wYWdlLTEuaHRtbCBhYm91dCB0byBuYXZpZ2F0ZSB0byByZXNvdXJjZXMvY2FjaGVkLXBhZ2Ut
Mi5odG1sCityZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMi5odG1sIGFib3V0IHRvIGdvIGJhY2sgdG8g
cmVzb3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRtbAorcmVzb3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRt
bCBvbmxvYWQgZmlyZWQsIGNvdW50ID0gMgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Jh
dHRlcnlTdGF0dXMvbm8tcGFnZS1jYWNoZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9uby1wYWdlLWNhY2hlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNTE4ZDkwMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L0JhdHRlcnlTdGF0dXMvbm8tcGFnZS1jYWNoZS5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL25v
LXBhZ2UtY2FjaGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9yZXNvdXJjZXMvY2FjaGVkLXBh
Z2UtMS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9yZXNvdXJjZXMv
Y2FjaGVkLXBhZ2UtMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZk
MTFhODkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3Rh
dHVzL3Jlc291cmNlcy9jYWNoZWQtcGFnZS0xLmh0bWwKQEAgLTAsMCArMSwxMSBAQAorPHNjcmlw
dD4KK2Z1bmN0aW9uIGxvYWROZXh0KCkgeworICAgIG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5LmFk
ZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywgZnVuY3Rpb24oKSB7fSk7CisgICAgaWYg
KHdpbmRvdy5vcGVuZXIucmVwb3J0UGFnZU9uZU9ubG9hZCgpID09IDEpIHsKKyAgICAgICAgd2lu
ZG93Lm9wZW5lci5kZWJ1ZygncmVzb3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRtbCBhYm91dCB0byBu
YXZpZ2F0ZSB0byByZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMi5odG1sJykKKyAgICAgICAgLy8gTG9j
YXRpb24gY2hhbmdlcyBuZWVkIHRvIGhhcHBlbiBvdXRzaWRlIHRoZSBvbmxvYWQgaGFuZGxlciB0
byBnZW5lcmF0ZSBoaXN0b3J5IGVudHJpZXMuCisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7IGxvY2F0aW9uLmhyZWYgPSAnY2FjaGVkLXBhZ2UtMi5odG1sJzsgfSwgMCk7CisgICAgfQor
fQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9ImxvYWROZXh0KCkiPjwvYm9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvcmVzb3VyY2VzL2NhY2hlZC1w
YWdlLTIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvcmVzb3VyY2Vz
L2NhY2hlZC1wYWdlLTIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
NDc4ZjljCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0
YXR1cy9yZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMi5odG1sCkBAIC0wLDAgKzEsOCBAQAorPHNjcmlw
dD4KK2Z1bmN0aW9uIGluaXQoKSB7CisgICAgd2luZG93Lm9wZW5lci5wYWdlVHdvTG9hZGVkID0g
dHJ1ZTsKKyAgICB3aW5kb3cub3BlbmVyLmRlYnVnKCdyZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMi5o
dG1sIGFib3V0IHRvIGdvIGJhY2sgdG8gcmVzb3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRtbCcpOwor
ICAgIGhpc3RvcnkuYmFjaygpOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9ImluaXQoKSI+
PC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9y
ZXNvdXJjZXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi1uZXcuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL0JhdHRlcnlTdGF0dXMvcmVzb3VyY2VzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24tbmV3
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlN2JiMgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvcmVzb3VyY2Vz
L2V2ZW50LWFmdGVyLW5hdmlnYXRpb24tbmV3Lmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPGh0bWw+
CisgIDxoZWFkPgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIFRlc3RzIGZvciBhIGNyYXNoIHdo
ZXJlIGFuIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHRoZSBwYWdlIGhhcyBiZWVuIG5hdmlnYXRlZAor
ICAgIGF3YXkgd2hlbiB0aGUgb3JpZ2luYWwgcGFnZSBpcyBpbiB0aGUgcGFnZSBjYWNoZS48YnI+
PGJyPgorICAgIFNVQ0NFU1MKKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRN
b2NrQmF0dGVyeVN0YXR1cygnY2hhcmdpbmdjaGFuZ2UnLCB0cnVlLCAwLCBOdW1iZXIuUE9TSVRJ
VkVfSU5GSU5JVFksIDEuMCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVz
dHMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suanMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9C
YXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjlhN2Q3Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvYWRk
LWxpc3RlbmVyLWZyb20tY2FsbGJhY2suanMKQEAgLTAsMCArMSw0OSBAQAorZGVzY3JpcHRpb24o
J1Rlc3RzIHRoYXQgYWRkaW5nIGEgbmV3IGV2ZW50IGxpc3RlbmVyIGZyb20gYSBjYWxsYmFjayB3
b3JrcyBhcyBleHBlY3RlZC4nKTsKKwordmFyIG1vY2tDaGFyZ2luZyA9IHRydWU7Cit2YXIgbW9j
a0NoYXJnaW5nVGltZSA9IDA7Cit2YXIgbW9ja0Rpc2NoYXJnaW5nVGltZSA9IE51bWJlci5QT1NJ
VElWRV9JTkZJTklUWTsKK3ZhciBtb2NrTGV2ZWwgPSAxLjA7CisKK3ZhciBiYXR0ZXJ5ID0gbmF2
aWdhdG9yLndlYmtpdEJhdHRlcnk7CisKK2Z1bmN0aW9uIGNoZWNrQmF0dGVyeVN0YXR1cygpIHsK
KyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFyZ2luZycsICdtb2NrQ2hhcmdpbmcnKTsKKyAgICBz
aG91bGRCZSgnYmF0dGVyeS5jaGFyZ2luZ1RpbWUnLCAnbW9ja0NoYXJnaW5nVGltZScpOworICAg
IHNob3VsZEJlKCdiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZScsICdtb2NrRGlzY2hhcmdpbmdUaW1l
Jyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkubGV2ZWwnLCAnbW9ja0xldmVsJyk7Cit9CisKK3Zh
ciBmaXJzdExpc3RlbmVyRXZlbnRzID0gMDsKK2Z1bmN0aW9uIGZpcnN0TGlzdGVuZXIoKSB7Cisg
ICAgY2hlY2tCYXR0ZXJ5U3RhdHVzKCk7CisgICAgaWYgKCsrZmlyc3RMaXN0ZW5lckV2ZW50cyA9
PSAxKSB7CisgICAgICAgIGJhdHRlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhcmdpbmdjaGFuZ2Un
LCBzZWNvbmRMaXN0ZW5lcik7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tC
YXR0ZXJ5U3RhdHVzKCdjaGFyZ2luZ2NoYW5nZScsIG1vY2tDaGFyZ2luZywgbW9ja0NoYXJnaW5n
VGltZSwgbW9ja0Rpc2NoYXJnaW5nVGltZSwgbW9ja0xldmVsKTsKKyAgICB9CisgICAgZWxzZSBp
ZiAoZmlyc3RMaXN0ZW5lckV2ZW50cyA+IDIpCisgICAgICAgIHRlc3RGYWlsZWQoJ1RvbyBtYW55
IGV2ZW50cyBmb3IgZmlyc3QgbGlzdGVuZXIuJyk7CisgICAgbWF5YmVGaW5pc2hUZXN0KCk7Cit9
CisKK3ZhciBzZWNvbmRMaXN0ZW5lckV2ZW50cyA9IDA7CitmdW5jdGlvbiBzZWNvbmRMaXN0ZW5l
cigpIHsKKyAgICBjaGVja0JhdHRlcnlTdGF0dXMoKTsKKyAgICBpZiAoKytzZWNvbmRMaXN0ZW5l
ckV2ZW50cyA+IDEpCisgICAgICAgIHRlc3RGYWlsZWQoJ1RvbyBtYW55IGV2ZW50cyBmb3Igc2Vj
b25kIGxpc3RlbmVyLicpOworICAgIG1heWJlRmluaXNoVGVzdCgpOworfQorCitmdW5jdGlvbiBt
YXliZUZpbmlzaFRlc3QoKSB7CisgICAgaWYgKGZpcnN0TGlzdGVuZXJFdmVudHMgPT0gMiAmJiBz
ZWNvbmRMaXN0ZW5lckV2ZW50cyA9PSAxKQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKwor
YmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2NoYW5nZScsIGZpcnN0TGlzdGVuZXIp
OworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250
cm9sbGVyLnNldE1vY2tCYXR0ZXJ5U3RhdHVzKCdjaGFyZ2luZ2NoYW5nZScsIG1vY2tDaGFyZ2lu
ZywgbW9ja0NoYXJnaW5nVGltZSwgbW9ja0Rpc2NoYXJnaW5nVGltZSwgbW9ja0xldmVsKTsKK2Vs
c2UKKyAgICBkZWJ1ZygnVGhpcyB0ZXN0IGNhbiBub3QgYmUgcnVuIHdpdGhvdXQgdGhlIExheW91
dFRlc3RDb250cm9sbGVyJyk7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2Jh
c2ljLW9wZXJhdGlvbi5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2Ny
aXB0LXRlc3RzL2Jhc2ljLW9wZXJhdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jMjMwN2NjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
QmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvYmFzaWMtb3BlcmF0aW9uLmpzCkBAIC0wLDAgKzEs
MjMgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyB0aGUgYmFzaWMgb3BlcmF0aW9uIG9mIEJhdHRlcnlT
dGF0dXMgdXNpbmcgdGhlIG1vY2suJyk7CisKK3ZhciBtb2NrQ2hhcmdpbmcgPSB0cnVlOwordmFy
IG1vY2tDaGFyZ2luZ1RpbWUgPSAwOwordmFyIG1vY2tEaXNjaGFyZ2luZ1RpbWUgPSBOdW1iZXIu
UE9TSVRJVkVfSU5GSU5JVFk7Cit2YXIgbW9ja0xldmVsID0gMS4wOworCit2YXIgYmF0dGVyeSA9
IG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5OworCitiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2No
YXJnaW5nY2hhbmdlJywgZnVuY3Rpb24oKSB7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdp
bmcnLCAnbW9ja0NoYXJnaW5nJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmdUaW1l
JywgJ21vY2tDaGFyZ2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5kaXNjaGFyZ2lu
Z1RpbWUnLCAnbW9ja0Rpc2NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5Lmxl
dmVsJywgJ21vY2tMZXZlbCcpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0TW9j
a0JhdHRlcnlTdGF0dXMoJ2NoYXJnaW5nY2hhbmdlJywgbW9ja0NoYXJnaW5nLCBtb2NrQ2hhcmdp
bmdUaW1lLCBtb2NrRGlzY2hhcmdpbmdUaW1lLCBtb2NrTGV2ZWwpOworZWxzZQorICAgIGRlYnVn
KCdUaGlzIHRlc3QgY2FuIG5vdCBiZSBydW4gd2l0aG91dCB0aGUgTGF5b3V0VGVzdENvbnRyb2xs
ZXInKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvZXZlbnQtYWZ0ZXItbmF2
aWdhdGlvbi5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRl
c3RzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZGU3YzUxMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24uanMKQEAg
LTAsMCArMSwxMyBAQAorZGVzY3JpcHRpb24oJ1Rlc3RzIGZvciBhIGNyYXNoIHdoZXJlIGFuIGV2
ZW50IGlzIGZpcmVkIGFmdGVyIHRoZSBwYWdlIGhhcyBiZWVuIG5hdmlnYXRlZCBhd2F5IHdoZW4g
dGhlIG9yaWdpbmFsIHBhZ2UgaXMgaW4gdGhlIHBhZ2UgY2FjaGUuJyk7CisKK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQ
cmVmZXJlbmNlKCdXZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVyZW5jZUtleScsIDEpOworZWxzZQor
ICAgIGRlYnVnKCdUaGlzIHRlc3QgY2FuIG5vdCBiZSBydW4gd2l0aG91dCB0aGUgTGF5b3V0VGVz
dENvbnRyb2xsZXInKTsKKworZG9jdW1lbnQuYm9keS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAg
ICBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2NoYW5n
ZScsIGZ1bmN0aW9uKCkgeyB9ICk7CisgICAgd2luZG93LmxvY2F0aW9uID0gInJlc291cmNlcy9l
dmVudC1hZnRlci1uYXZpZ2F0aW9uLW5ldy5odG1sIjsKK30KKword2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1
cy9zY3JpcHQtdGVzdHMvbXVsdGlwbGUtZnJhbWVzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
QmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvbXVsdGlwbGUtZnJhbWVzLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MjBlZWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9tdWx0aXBsZS1mcmFt
ZXMuanMKQEAgLTAsMCArMSw1NSBAQAorZGVzY3JpcHRpb24oJ1Rlc3RzIHVzaW5nIEJhdHRlcnlT
dGF0dXMgZnJvbSBtdWx0aXBsZSBmcmFtZXMuJyk7CisKK3ZhciBtb2NrQ2hhcmdpbmcgPSB0cnVl
OwordmFyIG1vY2tDaGFyZ2luZ1RpbWUgPSAwOwordmFyIG1vY2tEaXNjaGFyZ2luZ1RpbWUgPSBO
dW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7Cit2YXIgbW9ja0xldmVsID0gMS4wOworCit2YXIgYmF0
dGVyeSA9IG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5OworCitmdW5jdGlvbiBjaGVja0JhdHRlcnlT
dGF0dXMoKSB7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmcnLCAnbW9ja0NoYXJnaW5n
Jyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmdUaW1lJywgJ21vY2tDaGFyZ2luZ1Rp
bWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUnLCAnbW9ja0Rpc2No
YXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmxldmVsJywgJ21vY2tMZXZlbCcp
OworfQorCitmdW5jdGlvbiBjaGVja0NoaWxkQmF0dGVyeVN0YXR1cygpIHsKKyAgICBzaG91bGRC
ZSgnY2hpbGRCYXR0ZXJ5LmNoYXJnaW5nJywgJ21vY2tDaGFyZ2luZycpOworICAgIHNob3VsZEJl
KCdjaGlsZEJhdHRlcnkuY2hhcmdpbmdUaW1lJywgJ21vY2tDaGFyZ2luZ1RpbWUnKTsKKyAgICBz
aG91bGRCZSgnY2hpbGRCYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZScsICdtb2NrRGlzY2hhcmdpbmdU
aW1lJyk7CisgICAgc2hvdWxkQmUoJ2NoaWxkQmF0dGVyeS5sZXZlbCcsICdtb2NrTGV2ZWwnKTsK
K30KKwordmFyIGhhc01haW5GcmFtZUV2ZW50RmlyZWQgPSBmYWxzZTsKK2Z1bmN0aW9uIG1haW5G
cmFtZUxpc3RlbmVyKCkgeworICAgIGhhc01haW5GcmFtZUV2ZW50RmlyZWQgPSB0cnVlOworICAg
IG1heWJlRmluaXNoVGVzdCgpOworfQorCit2YXIgaGFzQ2hpbGRGcmFtZUV2ZW50RmlyZWQgPSBm
YWxzZTsKK2Z1bmN0aW9uIGNoaWxkRnJhbWVMaXN0ZW5lcigpIHsKKyAgICBoYXNDaGlsZEZyYW1l
RXZlbnRGaXJlZCA9IHRydWU7CisgICAgbWF5YmVGaW5pc2hUZXN0KCk7Cit9CisKK2Z1bmN0aW9u
IG1heWJlRmluaXNoVGVzdCgpIHsKKyAgICBpZiAoaGFzTWFpbkZyYW1lRXZlbnRGaXJlZCAmJiBo
YXNDaGlsZEZyYW1lRXZlbnRGaXJlZCkgeworICAgICAgICBjaGVja0JhdHRlcnlTdGF0dXMoKTsK
KyAgICAgICAgY2hlY2tDaGlsZEJhdHRlcnlTdGF0dXMoKTsKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgfQorfQorCit2YXIgY2hpbGRGcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2lmcmFtZScpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjaGlsZEZyYW1lKTsKK3ZhciBj
aGlsZEJhdHRlcnkgPSBjaGlsZEZyYW1lLmNvbnRlbnRXaW5kb3cubmF2aWdhdG9yLndlYmtpdEJh
dHRlcnkKK2NoaWxkQmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2NoYW5nZScsIGNo
aWxkRnJhbWVMaXN0ZW5lcik7CitiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hh
bmdlJywgbWFpbkZyYW1lTGlzdGVuZXIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tCYXR0ZXJ5U3RhdHVzKCdjaGFy
Z2luZ2NoYW5nZScsIG1vY2tDaGFyZ2luZywgbW9ja0NoYXJnaW5nVGltZSwgbW9ja0Rpc2NoYXJn
aW5nVGltZSwgbW9ja0xldmVsKTsKK2Vsc2UKKyAgICBkZWJ1ZygnVGhpcyB0ZXN0IGNhbiBub3Qg
YmUgcnVuIHdpdGhvdXQgdGhlIExheW91dFRlc3RDb250cm9sbGVyJyk7CisKK3dpbmRvdy5qc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRl
cnlTdGF0dXMvc2NyaXB0LXRlc3RzL25vLXBhZ2UtY2FjaGUuanMgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9uby1wYWdlLWNhY2hlLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkY2VmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9uby1wYWdlLWNh
Y2hlLmpzCkBAIC0wLDAgKzEsMjMgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyB0aGF0IHBhZ2VzIHRo
YXQgdXNlIEJhdHRlcnlTdGF0dXMgYXJlIG5vdCBwdXQgaW4gdGhlIHBhZ2UgY2FjaGUuJyk7CisK
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q2FuT3Bl
bldpbmRvd3MoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2Uo
J1dlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5JywgMSk7Cit9IGVsc2UKKyAgICBkZWJ1
ZygnVGhpcyB0ZXN0IGNhbiBub3QgYmUgcnVuIHdpdGhvdXQgdGhlIExheW91dFRlc3RDb250cm9s
bGVyJyk7CisKK3ZhciBwYWdlT25lT25sb2FkQ291bnQgPSAwOworZnVuY3Rpb24gcmVwb3J0UGFn
ZU9uZU9ubG9hZCgpIHsKKyAgICArK3BhZ2VPbmVPbmxvYWRDb3VudDsKKyAgICBkZWJ1ZygncmVz
b3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRtbCBvbmxvYWQgZmlyZWQsIGNvdW50ID0gJyArIHBhZ2VP
bmVPbmxvYWRDb3VudCk7CisgICAgaWYgKHBhZ2VPbmVPbmxvYWRDb3VudCA9PSAyKSB7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KKyAgICByZXR1cm4gcGFnZU9uZU9ubG9hZENvdW50
OworfQorCitkZWJ1ZygiTWFpbiBwYWdlIG9wZW5pbmcgcmVzb3VyY2VzL2NhY2hlZC1wYWdlLTEu
aHRtbCIpOword2luZG93Lm9wZW4oInJlc291cmNlcy9jYWNoZWQtcGFnZS0xLmh0bWwiKTsKKwor
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvdXBkYXRlcy5qcyBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL3VwZGF0ZXMuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4YTJhOAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL3VwZGF0ZXMuanMK
QEAgLTAsMCArMSw0NCBAQAorZGVzY3JpcHRpb24oJ1Rlc3RzIHRoYXQgdXBkYXRlcyB0byB0aGUg
YmF0dGVyeSBldmVudCBjYXVzZXMgbmV3IGV2ZW50cyB0byBmaXJlLicpOworCit2YXIgbW9ja0No
YXJnaW5nID0gZmFsc2U7Cit2YXIgbW9ja0NoYXJnaW5nVGltZSA9IDA7Cit2YXIgbW9ja0Rpc2No
YXJnaW5nVGltZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKK3ZhciBtb2NrTGV2ZWwgPSAx
LjA7CisKK3ZhciBiYXR0ZXJ5ID0gbmF2aWdhdG9yLndlYmtpdEJhdHRlcnk7CisKK2Z1bmN0aW9u
IGNoZWNrQmF0dGVyeVN0YXR1cygpIHsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFyZ2luZycs
ICdtb2NrQ2hhcmdpbmcnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFyZ2luZ1RpbWUnLCAn
bW9ja0NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmRpc2NoYXJnaW5nVGlt
ZScsICdtb2NrRGlzY2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkubGV2ZWwn
LCAnbW9ja0xldmVsJyk7Cit9CisKK2Z1bmN0aW9uIHNldE1vY2tCYXR0ZXJ5U3RhdHVzKCkgewor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLnNldE1vY2tCYXR0ZXJ5U3RhdHVzKCdjaGFyZ2luZ2NoYW5nZScsIG1vY2tDaGFy
Z2luZywgbW9ja0NoYXJnaW5nVGltZSwgbW9ja0Rpc2NoYXJnaW5nVGltZSwgbW9ja0xldmVsKTsK
KyAgICBlbHNlCisgICAgICAgIGRlYnVnKCdUaGlzIHRlc3QgY2FuIG5vdCBiZSBydW4gd2l0aG91
dCB0aGUgTGF5b3V0VGVzdENvbnRyb2xsZXInKTsKK30KKworZnVuY3Rpb24gZmlyc3RMaXN0ZW5l
cigpIHsKKyAgICBjaGVja0JhdHRlcnlTdGF0dXMoKTsKKyAgICBiYXR0ZXJ5LnJlbW92ZUV2ZW50
TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywgZmlyc3RMaXN0ZW5lcik7CisKKyAgICBiYXR0ZXJ5
LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywgdXBkYXRlTGlzdGVuZXIpOworICAg
IG1vY2tDaGFyZ2luZyA9IHRydWU7CisgICAgbW9ja0NoYXJnaW5nVGltZSA9IE51bWJlci5QT1NJ
VElWRV9JTkZJTklUWTsKKyAgICBtb2NrRGlzY2hhcmdpbmdUaW1lID0gMDsKKyAgICBtb2NrTGV2
ZWwgPSAwLjA7CisJc2V0TW9ja0JhdHRlcnlTdGF0dXMoKTsKK30KKworZnVuY3Rpb24gdXBkYXRl
TGlzdGVuZXIoZXZlbnQpIHsKKyAgICBjaGVja0JhdHRlcnlTdGF0dXMoZXZlbnQpOworICAgIGZp
bmlzaEpTVGVzdCgpOworfQorCitiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hh
bmdlJywgZmlyc3RMaXN0ZW5lcik7CitzZXRNb2NrQmF0dGVyeVN0YXR1cygpOworCit3aW5kb3cu
anNUZXN0SXNBc3luYyA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9C
YXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy93aW5kb3ctcHJvcGVydHkuanMgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy93aW5kb3ctcHJvcGVydHkuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmZTM3NgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL3dp
bmRvdy1wcm9wZXJ0eS5qcwpAQCAtMCwwICsxLDIzIEBACitkZXNjcmlwdGlvbignVGVzdHMgdGhh
dCB0aGUgd2luZG93Lm5hdmlnYXRvci5iYXR0ZXJ5IHByb3BlcnRpZXMgYXJlIHByZXNlbnQuJyk7
CisKK2Z1bmN0aW9uIGhhc09uQmF0dGVyeVByb3BlcnR5KCkKK3sKKyAgICB2YXIgcmVzdWx0ID0g
MDsKKyAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeSkgewor
ICAgICAgICBpZiAocHJvcGVydHkgPT0gJ29uY2hhcmdpbmdjaGFuZ2UnIHx8CisgICAgICAgICAg
ICBwcm9wZXJ0eSA9PSAnb25jaGFyZ2luZ3RpbWVjaGFuZ2UnIHx8CisgICAgICAgICAgICBwcm9w
ZXJ0eSA9PSAnb25kaXNjaGFyZ2luZ3RpbWVjaGFuZ2UnIHx8CisgICAgICAgICAgICBwcm9wZXJ0
eSA9PSAnb25sZXZlbGNoYW5nZScpCisgICAgICAgICAgICByZXN1bHQgKz0gMTsKKyAgICB9Cisg
ICAgaWYgKHJlc3VsdCA9PSA0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3Nob3VsZEJlVHJ1ZSgidHlwZW9mIG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5ID09
ICdvYmplY3QnIik7CitzaG91bGRCZVRydWUoImhhc09uQmF0dGVyeVByb3BlcnR5KCkiKTsKK3No
b3VsZEJlVHJ1ZSgibmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29uY2hh
cmdpbmdjaGFuZ2UnKSIpOworc2hvdWxkQmVUcnVlKCJuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5o
YXNPd25Qcm9wZXJ0eSgnb25jaGFyZ2luZ3RpbWVjaGFuZ2UnKSIpOworc2hvdWxkQmVUcnVlKCJu
YXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5oYXNPd25Qcm9wZXJ0eSgnb25kaXNjaGFyZ2luZ3RpbWVj
aGFuZ2UnKSIpOworc2hvdWxkQmVUcnVlKCJuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5oYXNPd25Q
cm9wZXJ0eSgnb25sZXZlbGNoYW5nZScpIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9CYXR0ZXJ5U3RhdHVzL3VwZGF0ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vQmF0dGVyeVN0YXR1cy91cGRhdGVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41YmUzZTdjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy91cGRhdGVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDE3IEBACitUZXN0cyB0aGF0IHVwZGF0ZXMgdG8gdGhlIGJhdHRlcnkgZXZlbnQgY2F1c2VzIG5l
dyBldmVudHMgdG8gZmlyZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
YmF0dGVyeS5jaGFyZ2luZyBpcyBtb2NrQ2hhcmdpbmcKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZ1Rp
bWUgaXMgbW9ja0NoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBt
b2NrRGlzY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkubGV2ZWwgaXMgbW9ja0xldmVsCitQQVNT
IGJhdHRlcnkuY2hhcmdpbmcgaXMgbW9ja0NoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hhcmdpbmdU
aW1lIGlzIG1vY2tDaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMg
bW9ja0Rpc2NoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmxldmVsIGlzIG1vY2tMZXZlbAorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvdXBkYXRlcy5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy91cGRhdGVzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyNTI2OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvdXBkYXRlcy5odG1sCkBAIC0wLDAgKzEsOSBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL3VwZGF0ZXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy93aW5kb3ctcHJvcGVydHkt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy93aW5kb3ct
cHJvcGVydHktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjQxZTZmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5
U3RhdHVzL3dpbmRvdy1wcm9wZXJ0eS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNSBAQAorVGVz
dHMgdGhhdCB0aGUgd2luZG93Lm5hdmlnYXRvci5iYXR0ZXJ5IHByb3BlcnRpZXMgYXJlIHByZXNl
bnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHR5cGVvZiBuYXZpZ2F0
b3Iud2Via2l0QmF0dGVyeSA9PSAnb2JqZWN0JyBpcyB0cnVlCitQQVNTIGhhc09uQmF0dGVyeVBy
b3BlcnR5KCkgaXMgdHJ1ZQorUEFTUyBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5oYXNPd25Qcm9w
ZXJ0eSgnb25jaGFyZ2luZ2NoYW5nZScpIGlzIHRydWUKK1BBU1MgbmF2aWdhdG9yLndlYmtpdEJh
dHRlcnkuaGFzT3duUHJvcGVydHkoJ29uY2hhcmdpbmd0aW1lY2hhbmdlJykgaXMgdHJ1ZQorUEFT
UyBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5oYXNPd25Qcm9wZXJ0eSgnb25kaXNjaGFyZ2luZ3Rp
bWVjaGFuZ2UnKSBpcyB0cnVlCitQQVNTIG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5Lmhhc093blBy
b3BlcnR5KCdvbmxldmVsY2hhbmdlJykgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL0JhdHRlcnlTdGF0dXMvd2luZG93LXByb3BlcnR5Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9CYXR0ZXJ5U3RhdHVzL3dpbmRvdy1wcm9wZXJ0eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjlmM2ZkM2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3dpbmRvdy1wcm9wZXJ0eS5odG1sCkBAIC0wLDAgKzEs
OSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL3dpbmRvdy1wcm9wZXJ0eS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVj
dGF0aW9ucy50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0
aW9ucy50eHQKaW5kZXggYTkwZmNiMy4uYTJiZWQ4ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dApAQCAtMTEyLDYgKzExMiw5
IEBAIEJVR0NSMTAzOTM5IFNLSVAgOiBodHRwL3Rlc3RzL2FwcGNhY2hlL3dyb25nLWNvbnRlbnQt
dHlwZS5odG1sID0gVEVYVAogLy8gVmlicmF0aW9uIEFQSSBpcyBub3Qgc3VwcG9ydGVkIHlldCBp
biB0aGUgY2hyb21pdW0gcG9ydC4KIEJVR1dLNzIwMTAgU0tJUCA6IGZhc3QvZG9tL25hdmlnYXRv
ci12aWJyYXRpb24uaHRtbCA9IEZBSUwKIAorLy8gQmF0dGVyeSBTdGF0dXMgQVBJIGlzIG5vdCBz
dXBwb3J0ZWQgeWV0IGluIHRoZSBjaHJvbWl1bSBwb3J0LgorQlVHV0s2MjY5OCBTS0lQIDogZmFz
dC9kb20vQmF0dGVyeVN0YXR1cyA9IFBBU1MgRkFJTAorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gV09OVEZJ
WCBURVNUUwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggZjJmNDgy
MS4uYjUzYTYxOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTM5NCw2ICszOTQsOSBA
QCBodHRwL3Rlc3RzL3NlY3VyaXR5L3dlYmdsLXJlbW90ZS1yZWFkLXJlbW90ZS1pbWFnZS1hbGxv
d2VkLXdpdGgtY3JlZGVudGlhbHMuaHRtbAogI1ZpYnJhdGlvbiBBUEkgc3VwcG9ydCBub3QgeWV0
LiBodHRwOi8vd2Via2l0Lm9yZy9iLzcyMDEwCiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9u
Lmh0bWwKIAorI0JhdHRlcnkgU3RhdHVzIEFQSSBzdXBwb3J0IG5vdCB5ZXQuIGh0dHA6Ly93ZWJr
aXQub3JnL2IvNjI2OTgKK2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMKKwogIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIwogIyBURVNUUyBGQUlMSU5HCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9Ta2lwcGVkCmluZGV4IGM3NzI4MWMuLjZiMWUwYTYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9Ta2lwcGVkCkBAIC01NjcsMyArNTY3LDcgQEAgZmFzdC9tdXRhdGlvbi9lbmQtb2YtdGFzay1k
ZWxpdmVyeS5odG1sCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MjAxMAogIyBOZWVkcyBQYWdlQ2xpZW50czo6dmlicmF0aW9uQ2xpZW50KCkgaW1wbGVtZW50YXRp
b24uCiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwKKworIyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKyMgTmVlZHMgQmF0dGVyeUNsaWVudCBp
bXBsZW1lbnRhdGlvbi4KK2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lw
cGVkCmluZGV4IDY2NTI5YTkuLjRkNjZhYjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZApAQCAt
MzQxLDYgKzM0MSw5IEBAIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtYXJyYXlz
Lmh0bWwKICNWaWJyYXRpb24gQVBJIGlzIG5vdCBpbXBsZW1lbnRlZC4KIGZhc3QvZG9tL25hdmln
YXRvci12aWJyYXRpb24uaHRtbAogCisjQmF0dGVyeSBTdGF0dXMgQVBJIGlzIG5vdCBpbXBsZW1l
bnRlZC4KK2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMKKwogIyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIwog
IyAgICAgICBEcmFnIGFuZCBEcm9wIFN1cHBvcnQgaW4gRFJULiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIwogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW4vU2tpcHBlZAppbmRleCA0MjQ3MjJkLi4xNDliNTI3IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4v
U2tpcHBlZApAQCAtMTY1OSwzICsxNjU5LDYgQEAgZmFzdC9yZXBhaW50L3RyYW5zZm9ybS1hYnNv
bHV0ZS1pbi1wb3NpdGlvbmVkLWNvbnRhaW5lci5odG1sCiAKICNWaWJyYXRpb24gQVBJIGlzIG5v
dCBpbXBsZW1lbnRlZC4KIGZhc3QvZG9tL25hdmlnYXRvci12aWJyYXRpb24uaHRtbAorCisjQmF0
dGVyeSBTdGF0dXMgQVBJIGlzIG5vdCBpbXBsZW1lbnRlZC4KK2Zhc3QvZG9tL0JhdHRlcnlTdGF0
dXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1NraXBwZWQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCmluZGV4IDkwOGFlMjEuLmI4N2Rj
NmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1NraXBwZWQKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZApAQCAtMjA1NywzICsyMDU3
LDYgQEAgZmFzdC9tdXRhdGlvbi9lbmQtb2YtdGFzay1kZWxpdmVyeS5odG1sCiAKICNWaWJyYXRp
b24gQVBJIGlzIG5vdCBpbXBsZW1lbnRlZC4KIGZhc3QvZG9tL25hdmlnYXRvci12aWJyYXRpb24u
aHRtbAorCisjQmF0dGVyeSBTdGF0dXMgQVBJIGlzIG5vdCBpbXBsZW1lbnRlZC4KK2Zhc3QvZG9t
L0JhdHRlcnlTdGF0dXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYWI3NTIyOS4uMjBjM2Y4NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyOTIsNiArMjI5MiwyMyBAQCBJRiAoRU5BQkxFX1ZJ
QlJBVElPTikKICAgICApCiBFTkRJRiAoKQogCitJRiAoRU5BQkxFX0JBVFRFUllfU1RBVFVTKQor
ICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAiJHtX
RUJDT1JFX0RJUn0vTW9kdWxlcy9iYXR0ZXJ5IgorICAgICkKKyAgICBMSVNUKEFQUEVORCBXZWJD
b3JlX0lETF9GSUxFUworICAgICAgICBNb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5p
ZGwKKyAgICAgICAgTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmlkbAorICAgICkKKyAg
ICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxhdGZvcm0vbW9jay9CYXR0
ZXJ5Q2xpZW50TW9jay5jcHAKKyAgICAgICAgTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRl
cnkuY3BwCisgICAgICAgIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAKKyAg
ICAgICAgTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcAorICAgICAgICBNb2R1bGVz
L2JhdHRlcnkvQmF0dGVyeVN0YXR1cy5jcHAKKyAgICApCitFTkRJRiAoKQorCiAjIE1vZHVsZXMg
dGhhdCB0aGUgYmluZGluZ3MgZ2VuZXJhdG9yIHNjcmlwdHMgbWF5IHVzZQogU0VUKFNDUklQVFNf
UkVTT0xWRV9TVVBQTEVNRU5UQUwKICAgICAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRz
L0lETFBhcnNlci5wbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGMzM2U4M2MuLmY2ZmExZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMTEgQEAKKzIwMTItMDMtMDEgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25A
c2Ftc3VuZy5jb20+CisKKyAgICAgICAgU3VwcG9ydCBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjY5OAorCisg
ICAgICAgIFRoaXMgQVBJIGlzIGltcGxlbWVudGVkIHVuZGVyIHRoZSBOYXZpZ2F0b3IgY2xhc3Mu
CisgICAgICAgIFRoZXJlIGFyZSBmb3VyIHR5cGVzIG9mIGV2ZW50czogb25jaGFyZ2luZ2NoYW5n
ZSwgb25jaGFyZ2luZ3RpbWVjaGFuZ2UsIG9uZGlzY2hhcmdpbmd0aW1lY2hhbmdlLCBvbmxldmVs
Y2hhbmdlLgorICAgICAgICBBbGwgZXZlbnRzIGFyZSBvcGVyYXRlZCBiYXNlZCBvbiBhIGNhbGxi
YWNrIG1lY2hhbmlzbS4KKyAgICAgICAgV2hlbiBiYXR0ZXJ5IGV2ZW50IGlzIHJhaXNlZCwgdGhl
IGV2ZW50IGxpc3RlbmVyIHdhdGNoaW5nIGJhdHRlcnkgc3RhdHVzIGhhcyB0byBiZSBjYWxsZWQu
CisgICAgICAgIEJhdHRlcnkgc3RhdHVzIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyBCYXR0ZXJ5TWFu
YWdlcihuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeSkuCisgICAgICAgIGh0dHA6Ly93d3cudzMub3Jn
L1RSL2JhdHRlcnktc3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3RzOiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2FkZC1saXN0ZW5lci1m
cm9tLWNhbGxiYWNrLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMv
YmFzaWMtb3BlcmF0aW9uLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL0JhdHRlcnlTdGF0
dXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5odG1sCisgICAgICAgICAgICAgICBmYXN0L2RvbS9C
YXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Rv
bS9CYXR0ZXJ5U3RhdHVzL25vLXBhZ2UtY2FjaGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9k
b20vQmF0dGVyeVN0YXR1cy91cGRhdGVzLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL0Jh
dHRlcnlTdGF0dXMvd2luZG93LXByb3BlcnR5Lmh0bWwKKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q2xpZW50Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCYXR0ZXJ5Q2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkJhdHRlcnlDbGllbnQ6On5CYXR0ZXJ5Q2xpZW50KToKKyAgICAgICAgKiBNb2R1bGVz
L2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6OkJhdHRlcnlDb250cm9sbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjp+QmF0dGVyeUNvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6YWRkTGlzdGVuZXIpOgorICAgICAgICAo
V2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6OnJlbW92ZUxpc3RlbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjpyZW1vdmVBbGxMaXN0ZW5lcnMpOgorICAgICAgICAo
V2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMpOgorICAg
ICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJD
b3JlOjpwcm92aWRlQmF0dGVyeVRvKToKKyAgICAgICAgKiBNb2R1bGVzL2JhdHRlcnkvQmF0dGVy
eUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEJhdHRl
cnlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjpjbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6OmZyb20pOgorICAgICAg
ICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjp+QmF0dGVyeU1hbmFnZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OkJhdHRlcnlNYW5hZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhdHRlcnlNYW5hZ2VyOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhdHRlcnlNYW5hZ2VyOjpyZW1vdmVBbGxFdmVudExpc3RlbmVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogTW9kdWxl
cy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChCYXR0ZXJ5TWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdl
cjo6aW50ZXJmYWNlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6
Y2hhcmdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmNoYXJnaW5nVGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6ZGlzY2hhcmdpbmdUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpsZXZlbCk6CisgICAgICAgIChXZWJD
b3JlOjpCYXR0ZXJ5TWFuYWdlcjo6YmF0dGVyeUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QmF0dGVyeU1hbmFnZXI6OmV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpC
YXR0ZXJ5TWFuYWdlcjo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkJhdHRlcnlNYW5hZ2VyOjpyZWZFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0
ZXJ5TWFuYWdlcjo6ZGVyZWZFdmVudFRhcmdldCk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5
L0JhdHRlcnlNYW5hZ2VyLmlkbDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L0Jh
dHRlcnlTdGF0dXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmF0dGVyeVN0YXR1czo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlT
dGF0dXM6OkJhdHRlcnlTdGF0dXMpOgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5
U3RhdHVzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCYXR0ZXJ5U3Rh
dHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6OmNoYXJnaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6OmNoYXJnaW5nVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpCYXR0ZXJ5U3RhdHVzOjpkaXNjaGFyZ2luZ1RpbWUpOgorICAgICAgICAoV2ViQ29yZTo6
QmF0dGVyeVN0YXR1czo6bGV2ZWwpOgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0
b3JCYXR0ZXJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5hdmlnYXRvckJhdHRlcnk6Ok5hdmlnYXRvckJhdHRlcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6TmF2aWdhdG9yQmF0dGVyeTo6fk5hdmlnYXRvckJhdHRlcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6TmF2aWdhdG9yQmF0dGVyeTo6d2Via2l0QmF0dGVyeSk6CisgICAgICAgIChXZWJDb3JlOjpO
YXZpZ2F0b3JCYXR0ZXJ5Ojpmcm9tKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckJhdHRl
cnk6OmJhdHRlcnlNYW5hZ2VyKToKKyAgICAgICAgKiBNb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9y
QmF0dGVyeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTmF2aWdhdG9y
QmF0dGVyeSk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuaWRs
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKiBkb20vRXZlbnRO
YW1lcy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0RmFj
dG9yeS5pbjoKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL0JhdHRlcnlDbGllbnRNb2NrLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGll
bnRNb2NrOjpCYXR0ZXJ5Q2xpZW50TW9jayk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xp
ZW50TW9jazo6fkJhdHRlcnlDbGllbnRNb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlD
bGllbnRNb2NrOjpzZXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGll
bnRNb2NrOjpzdGFydFVwZGF0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRN
b2NrOjpzdG9wVXBkYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudE1vY2s6
OmJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlD
bGllbnRNb2NrOjpzZXRCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL0Jh
dHRlcnlDbGllbnRNb2NrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChC
YXR0ZXJ5Q2xpZW50TW9jayk6CisKIDIwMTItMDMtMDEgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJlYmFzZWxpbmVkIHJ1bi1iaW5k
aW5ncy10ZXN0cyByZXN1bHRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9i
YXR0ZXJ5L0JhdHRlcnlDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9C
YXR0ZXJ5Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjY2Jl
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0
ZXJ5Q2xpZW50LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEJhdHRlcnlDbGllbnRfaAor
I2RlZmluZSBCYXR0ZXJ5Q2xpZW50X2gKKworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKwor
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEJhdHRlcnlDb250cm9sbGVyOworY2xhc3MgUGFnZTsKKworY2xhc3MgQmF0dGVy
eUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QmF0dGVyeUNsaWVudCgpIHsgfQorCisg
ICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoQmF0dGVyeUNvbnRyb2xsZXIqKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIHN0YXJ0VXBkYXRpbmcoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJhdHRlcnlDb250cm9sbGVyRGVz
dHJveWVkKCkgPSAwOworfTsKKwordm9pZCBwcm92aWRlQmF0dGVyeVRvKFBhZ2UqLCBCYXR0ZXJ5
Q2xpZW50Kik7CisKK30KKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisjZW5kaWYgLy8gQmF0
dGVyeUNsaWVudF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVy
eS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
QmF0dGVyeUNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjRmNzI5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRl
cnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCYXR0ZXJ5Q29udHJvbGxlci5oIgorCisjaWYgRU5BQkxFKEJB
VFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudC5oIgorI2luY2x1ZGUgIkJh
dHRlcnlNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1cy5oIgorI2luY2x1ZGUgIkV2
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQmF0dGVyeUNvbnRyb2xsZXI6OkJhdHRl
cnlDb250cm9sbGVyKEJhdHRlcnlDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVu
dCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50LT5zZXRDb250cm9sbGVy
KHRoaXMpOworfQorCitCYXR0ZXJ5Q29udHJvbGxlcjo6fkJhdHRlcnlDb250cm9sbGVyKCkKK3sK
KyAgICBtX2NsaWVudC0+YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKTsKK30KKworUGFzc093
blB0cjxCYXR0ZXJ5Q29udHJvbGxlcj4gQmF0dGVyeUNvbnRyb2xsZXI6OmNyZWF0ZShCYXR0ZXJ5
Q2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBCYXR0ZXJ5Q29udHJv
bGxlcihjbGllbnQpKTsKK30KKwordm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6YWRkTGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEJhdHRlcnlNYW5hZ2VyKiBiYXR0ZXJ5TWFu
YWdlcikKK3sKKyAgICBpZiAobV9iYXR0ZXJ5TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKSA9PSBt
X2JhdHRlcnlMaXN0ZW5lcnMuZW5kKCkpCisgICAgICAgIG1fYmF0dGVyeUxpc3RlbmVycy5hZGQo
ZXZlbnRUeXBlLCBuZXcgTGlzdGVuZXJTZXQpOworCisgICAgaWYgKG1fYmF0dGVyeUxpc3RlbmVy
cy5maW5kKGV2ZW50VHlwZSktPnNlY29uZC0+ZmluZChiYXR0ZXJ5TWFuYWdlcikgPT0gbV9iYXR0
ZXJ5TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKS0+c2Vjb25kLT5lbmQoKSkgeworICAgICAgICBt
X2JhdHRlcnlMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpLT5zZWNvbmQtPmFkZChiYXR0ZXJ5TWFu
YWdlcik7CisgICAgICAgIG1fY2xpZW50LT5zdGFydFVwZGF0aW5nKGV2ZW50VHlwZSk7CisgICAg
fQorfQorCit2b2lkIEJhdHRlcnlDb250cm9sbGVyOjpyZW1vdmVMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgQmF0dGVyeU1hbmFnZXIqIGJhdHRlcnlNYW5hZ2VyKQorewor
ICAgIEJhdHRlcnlMaXN0ZW5lck1hcDo6aXRlcmF0b3IgaXQgPSBtX2JhdHRlcnlMaXN0ZW5lcnMu
ZmluZChldmVudFR5cGUpOworICAgIGlmIChpdCA9PSBtX2JhdHRlcnlMaXN0ZW5lcnMuZW5kKCkg
fHwhKGl0LT5zZWNvbmQpIHx8IGl0LT5zZWNvbmQtPmZpbmQoYmF0dGVyeU1hbmFnZXIpID09IGl0
LT5zZWNvbmQtPmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2JhdHRlcnlMaXN0ZW5l
cnMuZmluZChldmVudFR5cGUpLT5zZWNvbmQtPnJlbW92ZShiYXR0ZXJ5TWFuYWdlcik7CisgICAg
bV9jbGllbnQtPnN0b3BVcGRhdGluZyhldmVudFR5cGUpOworfQorCit2b2lkIEJhdHRlcnlDb250
cm9sbGVyOjpyZW1vdmVBbGxMaXN0ZW5lcnMoKQoreworICAgIGZvciAoQmF0dGVyeUxpc3RlbmVy
TWFwOjppdGVyYXRvciBpdCA9IG1fYmF0dGVyeUxpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX2Jh
dHRlcnlMaXN0ZW5lcnMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgTGlzdGVuZXJTZXQqIGxpc3Rl
bmVyU2V0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXIoKTsKKyAgICAg
ICAgZGVsZXRlIGxpc3RlbmVyU2V0OworICAgIH0KKyAgICBtX2JhdHRlcnlMaXN0ZW5lcnMuY2xl
YXIoKTsKK30KKwordm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1
cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVz
PiBiYXR0ZXJ5U3RhdHVzKQoreworICAgIEJhdHRlcnlMaXN0ZW5lck1hcDo6aXRlcmF0b3IgaXQg
PSBtX2JhdHRlcnlMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOworICAgIGlmIChpdCA9PSBtX2Jh
dHRlcnlMaXN0ZW5lcnMuZW5kKCkgfHwgIShpdC0+c2Vjb25kKSB8fCBpdC0+c2Vjb25kLT5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVu
dDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFsc2UsIGZhbHNlKTsKKyAgICBSZWZQdHI8QmF0dGVyeVN0
YXR1cz4gYmF0dGVyeSA9IGJhdHRlcnlTdGF0dXM7CisgICAgVmVjdG9yPFJlZlB0cjxCYXR0ZXJ5
TWFuYWdlcj4gPiBsaXN0ZW5lclZlY3RvcjsKKyAgICBjb3B5VG9WZWN0b3IoKihtX2JhdHRlcnlM
aXN0ZW5lcnMuZmluZChldmVudFR5cGUpLT5zZWNvbmQpLCBsaXN0ZW5lclZlY3Rvcik7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lclZlY3Rvci5zaXplKCk7ICsraSkKKyAgICAg
ICAgbGlzdGVuZXJWZWN0b3JbaV0tPmRpc3BhdGNoRXZlbnQoZXZlbnQsIGJhdHRlcnkpOworfQor
Citjb25zdCBBdG9taWNTdHJpbmcmIEJhdHRlcnlDb250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hbWUsICgiQmF0dGVy
eUNvbnRyb2xsZXIiKSk7CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK2Jvb2wgQmF0dGVyeUNvbnRy
b2xsZXI6OmlzQWN0aXZlKFBhZ2UqIHBhZ2UpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJv
b2w+KEJhdHRlcnlDb250cm9sbGVyOjpmcm9tKHBhZ2UpKTsKK30KKwordm9pZCBwcm92aWRlQmF0
dGVyeVRvKFBhZ2UqIHBhZ2UsIEJhdHRlcnlDbGllbnQqIGNsaWVudCkKK3sKKyAgICBTdXBwbGVt
ZW50PFBhZ2U+Ojpwcm92aWRlVG8ocGFnZSwgQmF0dGVyeUNvbnRyb2xsZXI6OnN1cHBsZW1lbnRO
YW1lKCksIEJhdHRlcnlDb250cm9sbGVyOjpjcmVhdGUoY2xpZW50KSk7Cit9CisKK30KKworI2Vu
ZGlmIC8vIEJBVFRFUllfU1RBVFVTCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9i
YXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uY2U1NjZhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
YmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBC
YXR0ZXJ5Q29udHJvbGxlcl9oCisjZGVmaW5lIEJhdHRlcnlDb250cm9sbGVyX2gKKworI2lmIEVO
QUJMRShCQVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUgIkJhdHRlcnlNYW5hZ2VyLmgiCisjaW5j
bHVkZSAiUGFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJhdHRlcnlDbGll
bnQ7CisKK2NsYXNzIEJhdHRlcnlDb250cm9sbGVyIDogcHVibGljIFN1cHBsZW1lbnQ8UGFnZT4g
eworcHVibGljOgorICAgIH5CYXR0ZXJ5Q29udHJvbGxlcigpOworCisgICAgc3RhdGljIFBhc3NP
d25QdHI8QmF0dGVyeUNvbnRyb2xsZXI+IGNyZWF0ZShCYXR0ZXJ5Q2xpZW50Kik7CisKKyAgICB2
b2lkIGFkZExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBCYXR0ZXJ5TWFu
YWdlciopOworICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIEJhdHRlcnlNYW5hZ2VyKik7CisgICAgdm9pZCByZW1vdmVBbGxMaXN0ZW5lcnMoKTsK
KyAgICB2b2lkIGRpZENoYW5nZUJhdHRlcnlTdGF0dXMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pOworCisgICAgQmF0dGVyeUNsaWVudCog
Y2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworICAgIHN0YXRpYyBjb25zdCBB
dG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIEJhdHRlcnlDb250cm9s
bGVyKiBmcm9tKFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJhdHRlcnlDb250cm9s
bGVyKj4oU3VwcGxlbWVudDxQYWdlPjo6ZnJvbShwYWdlLCBzdXBwbGVtZW50TmFtZSgpKSk7IH0K
KyAgICBzdGF0aWMgYm9vbCBpc0FjdGl2ZShQYWdlKik7CisKK3ByaXZhdGU6CisgICAgQmF0dGVy
eUNvbnRyb2xsZXIoQmF0dGVyeUNsaWVudCopOworCisgICAgQmF0dGVyeUNsaWVudCogbV9jbGll
bnQ7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPEJhdHRlcnlNYW5hZ2VyPiA+IExpc3Rl
bmVyU2V0OworICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIExpc3RlbmVyU2V0Kj4g
QmF0dGVyeUxpc3RlbmVyTWFwOworICAgIEJhdHRlcnlMaXN0ZW5lck1hcCBtX2JhdHRlcnlMaXN0
ZW5lcnM7Cit9OworCit9CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworI2VuZGlmIC8vIEJh
dHRlcnlDb250cm9sbGVyX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9i
YXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVy
eS9CYXR0ZXJ5TWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YzliMWU0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVy
eS9CYXR0ZXJ5TWFuYWdlci5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQmF0dGVyeU1hbmFnZXIuaCIKKworI2lmIEVOQUJMRShCQVRURVJZX1NU
QVRVUykKKworI2luY2x1ZGUgIkJhdHRlcnlDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiQmF0dGVy
eVN0YXR1cy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJOYXZpZ2F0b3IuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc1JlZlB0cjxCYXR0ZXJ5TWFuYWdlcj4gQmF0dGVyeU1hbmFnZXI6OmNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBleGVjQ29udGV4dCwgTmF2aWdhdG9yKiBuYXZpZ2F0b3Ip
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCYXR0ZXJ5TWFuYWdlcihleGVjQ29udGV4dCwg
bmF2aWdhdG9yKSk7Cit9CisKK0JhdHRlcnlNYW5hZ2VyOjp+QmF0dGVyeU1hbmFnZXIoKQorewor
fQorCitCYXR0ZXJ5TWFuYWdlcjo6QmF0dGVyeU1hbmFnZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogZXhlY0NvbnRleHQsIE5hdmlnYXRvciogbmF2aWdhdG9yKQorICAgIDogbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0KGV4ZWNDb250ZXh0KQorICAgICwgbV9iYXR0ZXJ5Q29udHJvbGxlcihCYXR0
ZXJ5Q29udHJvbGxlcjo6ZnJvbShuYXZpZ2F0b3ItPmZyYW1lKCktPnBhZ2UoKSkpCisgICAgLCBt
X2JhdHRlcnlTdGF0dXMoMCkKK3sKK30KKworYm9vbCBCYXR0ZXJ5TWFuYWdlcjo6YWRkRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIGlmICghRXZlbnRUYXJn
ZXQ6OmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fYmF0dGVyeUNvbnRyb2xsZXItPmFkZExpc3Rl
bmVyKGV2ZW50VHlwZSwgdGhpcyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQmF0dGVy
eU1hbmFnZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit7CisgICAgaWYg
KCFFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB1
c2VDYXB0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9iYXR0ZXJ5Q29udHJv
bGxlci0+cmVtb3ZlTGlzdGVuZXIoZXZlbnRUeXBlLCB0aGlzKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBCYXR0ZXJ5TWFuYWdlcjo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQorewor
ICAgIEV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpOworICAgIG1fYmF0dGVy
eUNvbnRyb2xsZXItPnJlbW92ZUFsbExpc3RlbmVycygpOworfQorCitib29sIEJhdHRlcnlNYW5h
Z2VyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEJh
dHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMpCit7CisgICAgbV9iYXR0ZXJ5U3RhdHVzID0gYmF0
dGVyeVN0YXR1czsKKyAgICByZXR1cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRV
UworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1h
bmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYjkwZmIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaApA
QCAtMCwwICsxLDg0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0
cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQmF0dGVyeU1hbmFnZXJfaAorI2RlZmluZSBCYXR0
ZXJ5TWFuYWdlcl9oCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJC
YXR0ZXJ5U3RhdHVzLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5Q29udHJvbGxlcjsKK2NsYXNzIE5hdmlnYXRvcjsKK2Ns
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIEJhdHRlcnlNYW5hZ2VyIDogcHVi
bGljIFJlZkNvdW50ZWQ8QmF0dGVyeU1hbmFnZXI+LCBwdWJsaWMgRXZlbnRUYXJnZXQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfkJhdHRlcnlNYW5hZ2VyKCk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QmF0dGVyeU1hbmFnZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTmF2aWdh
dG9yKik7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3QgeyByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckJhdHRlcnlNYW5h
Z2VyOyB9CisgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OyB9CisK
KyAgICBib29sIGNoYXJnaW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYXR0ZXJ5U3RhdHVzLT5jaGFy
Z2luZygpOyB9CisgICAgZG91YmxlIGNoYXJnaW5nVGltZSgpIGNvbnN0ICB7IHJldHVybiBtX2Jh
dHRlcnlTdGF0dXMtPmNoYXJnaW5nVGltZSgpOyB9CisgICAgZG91YmxlIGRpc2NoYXJnaW5nVGlt
ZSgpIGNvbnN0ICB7IHJldHVybiBtX2JhdHRlcnlTdGF0dXMtPmRpc2NoYXJnaW5nVGltZSgpOyB9
CisgICAgZG91YmxlIGxldmVsKCkgY29uc3QgIHsgcmV0dXJuIG1fYmF0dGVyeVN0YXR1cy0+bGV2
ZWwoKTsgfQorCisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihjaGFyZ2luZ2No
YW5nZSk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihjaGFyZ2luZ3RpbWVj
aGFuZ2UpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZGlzY2hhcmdpbmd0
aW1lY2hhbmdlKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGxldmVsY2hh
bmdlKTsKKworICAgIHZpcnR1YWwgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1
cmUpOworICAgIHZpcnR1YWwgYm9vbCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICBib29sIGRpc3BhdGNo
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pOworCisg
ICAgdXNpbmcgUmVmQ291bnRlZDxCYXR0ZXJ5TWFuYWdlcj46OnJlZjsKKyAgICB1c2luZyBSZWZD
b3VudGVkPEJhdHRlcnlNYW5hZ2VyPjo6ZGVyZWY7CisKKyAgICBCYXR0ZXJ5Q29udHJvbGxlciog
YmF0dGVyeUNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX2JhdHRlcnlDb250cm9sbGVyOyB9
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXRE
YXRhKCkgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CisgICAgdmlydHVhbCBFdmVudFRh
cmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0
RGF0YTsgfQorCitwcml2YXRlOgorICAgIEJhdHRlcnlNYW5hZ2VyKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBOYXZpZ2F0b3IqKTsKKworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKKworICAgIC8vIEV2ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9u
LgorICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorCisgICAgQmF0dGVyeUNv
bnRyb2xsZXIqIG1fYmF0dGVyeUNvbnRyb2xsZXI7CisgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZl
bnRUYXJnZXREYXRhOworICAgIFJlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBtX2JhdHRlcnlTdGF0dXM7
Cit9OworCit9CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworI2VuZGlmIC8vIEJhdHRlcnlN
YW5hZ2VyX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0Jh
dHRlcnlNYW5hZ2VyLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5
TWFuYWdlci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwODBkMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5
TWFuYWdlci5pZGwKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCittb2R1bGUgd2luZG93IHsKKworICAgIC8v
IGh0dHA6Ly9kZXYudzMub3JnLzIwMDkvZGFwL3N5c3RlbS1pbmZvL2JhdHRlcnktc3RhdHVzLmh0
bWwKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1CQVRURVJZX1NUQVRVUywK
KyAgICAgICAgRXZlbnRUYXJnZXQsCisgICAgIF0gQmF0dGVyeU1hbmFnZXIgeworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBjaGFyZ2luZzsKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIGRvdWJsZSBjaGFyZ2luZ1RpbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBk
b3VibGUgZGlzY2hhcmdpbmdUaW1lOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91Ymxl
IGxldmVsOworCisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY2hhcmdpbmdjaGFu
Z2U7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY2hhcmdpbmd0aW1lY2hhbmdl
OworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmRpc2NoYXJnaW5ndGltZWNoYW5n
ZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25sZXZlbGNoYW5nZTsKKworICAg
ICAgICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOwor
ICAgICAgICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBib29sZWFuIHVz
ZUNhcHR1cmUpOworICAgIH07CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9i
YXR0ZXJ5L0JhdHRlcnlTdGF0dXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjAwZjUzMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Jh
dHRlcnkvQmF0dGVyeVN0YXR1cy5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1cy5oIgorCisjaWYgRU5BQkxFKEJBVFRFUllf
U1RBVFVTKQorCisjaW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gQmF0dGVyeVN0YXR1czo6Y3JlYXRlKCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEJhdHRlcnlTdGF0dXMpOworfQorCitQYXNzUmVmUHRyPEJhdHRl
cnlTdGF0dXM+IEJhdHRlcnlTdGF0dXM6OmNyZWF0ZShib29sIGNoYXJnaW5nLCBkb3VibGUgY2hh
cmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2ZWwpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBCYXR0ZXJ5U3RhdHVzKGNoYXJnaW5nLCBjaGFyZ2luZ1RpbWUs
IGRpc2NoYXJnaW5nVGltZSwgbGV2ZWwpKTsKK30KKworQmF0dGVyeVN0YXR1czo6QmF0dGVyeVN0
YXR1cygpCisgICAgOiBtX2NoYXJnaW5nKHRydWUpCisgICAgLCBtX2NoYXJnaW5nVGltZSgwKQor
ICAgICwgbV9kaXNjaGFyZ2luZ1RpbWUoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZp
bml0eSgpKQorICAgICwgbV9sZXZlbCgxKQoreworfQorCitCYXR0ZXJ5U3RhdHVzOjpCYXR0ZXJ5
U3RhdHVzKGJvb2wgY2hhcmdpbmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFy
Z2luZ1RpbWUsIGRvdWJsZSBsZXZlbCkKKyAgICA6IG1fY2hhcmdpbmcoY2hhcmdpbmcpCisgICAg
LCBtX2NoYXJnaW5nVGltZShjaGFyZ2luZ1RpbWUpCisgICAgLCBtX2Rpc2NoYXJnaW5nVGltZShk
aXNjaGFyZ2luZ1RpbWUpCisgICAgLCBtX2xldmVsKGxldmVsKQoreworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeVN0YXR1cy5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4yYzQ1MWFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuaApAQCAtMCwwICsxLDU0IEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgQmF0dGVyeVN0YXR1c19oCisjZGVmaW5lIEJhdHRlcnlTdGF0dXNfaAorCisjaWYgRU5B
QkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJh
dHRlcnlTdGF0dXMgOiBwdWJsaWMgUmVmQ291bnRlZDxCYXR0ZXJ5U3RhdHVzPiB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gY3JlYXRlKCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gY3JlYXRlKGJvb2wgY2hhcmdpbmcsIGRvdWJs
ZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZlbCk7CisK
KyAgICBib29sIGNoYXJnaW5nKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyZ2luZzsgfQorICAgIGRv
dWJsZSBjaGFyZ2luZ1RpbWUoKSBjb25zdCAgeyByZXR1cm4gbV9jaGFyZ2luZ1RpbWU7IH0KKyAg
ICBkb3VibGUgZGlzY2hhcmdpbmdUaW1lKCkgY29uc3QgIHsgcmV0dXJuIG1fZGlzY2hhcmdpbmdU
aW1lOyB9CisgICAgZG91YmxlIGxldmVsKCkgY29uc3QgIHsgcmV0dXJuIG1fbGV2ZWw7IH0KKwor
cHJpdmF0ZToKKyAgICBCYXR0ZXJ5U3RhdHVzKCk7CisgICAgQmF0dGVyeVN0YXR1cyhib29sIGNo
YXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3Vi
bGUgbGV2ZWwpOworCisgICAgYm9vbCBtX2NoYXJnaW5nOworICAgIGRvdWJsZSBtX2NoYXJnaW5n
VGltZTsKKyAgICBkb3VibGUgbV9kaXNjaGFyZ2luZ1RpbWU7CisgICAgZG91YmxlIG1fbGV2ZWw7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRV
UworI2VuZGlmIC8vIEJhdHRlcnlTdGF0dXNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzRmYjM2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNwcApAQCAtMCwwICsxLDY3IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3JCYXR0ZXJ5LmgiCisKKyNp
ZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5TWFuYWdlci5oIgor
I2luY2x1ZGUgIk5hdmlnYXRvci5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXZpZ2F0b3JCYXR0ZXJ5OjpOYXZpZ2F0b3JC
YXR0ZXJ5KCkKK3sKK30KKworTmF2aWdhdG9yQmF0dGVyeTo6fk5hdmlnYXRvckJhdHRlcnkoKQor
eworfQorCitCYXR0ZXJ5TWFuYWdlciogTmF2aWdhdG9yQmF0dGVyeTo6d2Via2l0QmF0dGVyeShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBOYXZpZ2F0b3IqIG5hdmlnYXRvcikKK3sK
KyAgICBOYXZpZ2F0b3JCYXR0ZXJ5KiBuYXZpZ2F0b3JCYXR0ZXJ5ID0gTmF2aWdhdG9yQmF0dGVy
eTo6ZnJvbShuYXZpZ2F0b3IpOworICAgIGlmICghbmF2aWdhdG9yQmF0dGVyeS0+bV9iYXR0ZXJ5
TWFuYWdlcikKKyAgICAgICAgbmF2aWdhdG9yQmF0dGVyeS0+bV9iYXR0ZXJ5TWFuYWdlciA9IEJh
dHRlcnlNYW5hZ2VyOjpjcmVhdGUoY29udGV4dCwgbmF2aWdhdG9yKTsKKyAgICByZXR1cm4gbmF2
aWdhdG9yQmF0dGVyeS0+bV9iYXR0ZXJ5TWFuYWdlci5nZXQoKTsKK30KKworTmF2aWdhdG9yQmF0
dGVyeSogTmF2aWdhdG9yQmF0dGVyeTo6ZnJvbShOYXZpZ2F0b3IqIG5hdmlnYXRvcikKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwgKCJOYXZpZ2F0b3JCYXR0
ZXJ5IikpOworICAgIE5hdmlnYXRvckJhdHRlcnkqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxO
YXZpZ2F0b3JCYXR0ZXJ5Kj4oU3VwcGxlbWVudDxOYXZpZ2F0b3I+Ojpmcm9tKG5hdmlnYXRvciwg
bmFtZSkpOworICAgIGlmICghc3VwcGxlbWVudCkgeworICAgICAgICBzdXBwbGVtZW50ID0gbmV3
IE5hdmlnYXRvckJhdHRlcnkoKTsKKyAgICAgICAgcHJvdmlkZVRvKG5hdmlnYXRvciwgbmFtZSwg
YWRvcHRQdHIoc3VwcGxlbWVudCkpOworICAgIH0KKyAgICByZXR1cm4gc3VwcGxlbWVudDsKK30K
KworQmF0dGVyeU1hbmFnZXIqIE5hdmlnYXRvckJhdHRlcnk6OmJhdHRlcnlNYW5hZ2VyKCkKK3sK
KyAgICByZXR1cm4gbV9iYXR0ZXJ5TWFuYWdlci5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYzFjNDgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5oCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBOYXZpZ2F0b3JCYXR0ZXJ5X2gKKyNkZWZpbmUgTmF2aWdhdG9y
QmF0dGVyeV9oCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJQYWdl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeU1hbmFnZXI7CitjbGFz
cyBOYXZpZ2F0b3I7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBOYXZp
Z2F0b3JCYXR0ZXJ5IDogcHVibGljIFN1cHBsZW1lbnQ8TmF2aWdhdG9yPiB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+TmF2aWdhdG9yQmF0dGVyeSgpOworCisgICAgc3RhdGljIE5hdmlnYXRvckJh
dHRlcnkqIGZyb20oTmF2aWdhdG9yKik7CisKKyAgICBzdGF0aWMgQmF0dGVyeU1hbmFnZXIqIHdl
YmtpdEJhdHRlcnkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE5hdmlnYXRvciopOworICAgIEJh
dHRlcnlNYW5hZ2VyKiBiYXR0ZXJ5TWFuYWdlcigpOworCisgcHJpdmF0ZToKKyAgICBOYXZpZ2F0
b3JCYXR0ZXJ5KCk7CisKKyAgICBSZWZQdHI8QmF0dGVyeU1hbmFnZXI+IG1fYmF0dGVyeU1hbmFn
ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQkFU
VEVSWV9TVEFUVVMpCisKKyNlbmRpZiAvLyBOYXZpZ2F0b3JCYXR0ZXJ5X2gKKworCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5pZGwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkYjc4MwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmlkbApA
QCAtMCwwICsxLDMxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0
cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKK21vZHVsZSB3aW5kb3cgeworCisgICAgaW50ZXJmYWNlIFsKKyAg
ICAgICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwKKyAgICAgICAgQ29uZGl0aW9u
YWw9QkFUVEVSWV9TVEFUVVMsCisgICAgICAgIFN1cHBsZW1lbnRhbD1OYXZpZ2F0b3IKKyAgICBd
IE5hdmlnYXRvckJhdHRlcnkgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQmF0dGVyeU1h
bmFnZXIgd2Via2l0QmF0dGVyeTsKKyAgICB9OworCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CmluZGV4IDY5ZTUyMDYuLmM0ZmJjZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMjA2
LDYgKzIwNiwxMSBAQAogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoQkFUVEVSWV9TVEFUVVMpCisjaW5jbHVkZSAiQmF0dGVyeUNvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJOYXZpZ2F0b3JCYXR0ZXJ5LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKQEAgLTE5
NDksNiArMTk1NCwxNCBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygp
CiAgICAgICAgIGRvbVdpbmRvdy0+cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKCkpCiAgICAgICAgIG5vZGUtPnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CisKKyNp
ZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisgICAgaWYgKCFwYWdlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChCYXR0ZXJ5Q29udHJvbGxlciogYmF0dGVyeUNvbnRyb2xsZXIgPSBCYXR0
ZXJ5Q29udHJvbGxlcjo6ZnJvbShwYWdlKCkpKQorICAgICAgICBiYXR0ZXJ5Q29udHJvbGxlci0+
cmVtb3ZlQWxsTGlzdGVuZXJzKCk7CisjZW5kaWYKIH0KIAogdm9pZCBEb2N1bWVudDo6c3VzcGVu
ZEFjdGl2ZURPTU9iamVjdHMoQWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uIHdo
eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCmluZGV4IGE2MTZmNzQuLmM1YjFlZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50TmFtZXMuaApAQCAtNDEsNiArNDEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgbWFjcm8oYmx1cikgXAogICAgIG1hY3JvKGNhY2hlZCkgXAogICAgIG1hY3JvKGNoYW5nZSkg
XAorICAgIG1hY3JvKGNoYXJnaW5nY2hhbmdlKSBcCisgICAgbWFjcm8oY2hhcmdpbmd0aW1lY2hh
bmdlKSBcCiAgICAgbWFjcm8oY2hlY2tpbmcpIFwKICAgICBtYWNybyhjbGljaykgXAogICAgIG1h
Y3JvKGNsb3NlKSBcCkBAIC01NSw2ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBt
YWNybyhkYmxjbGljaykgXAogICAgIG1hY3JvKGRldmljZW1vdGlvbikgXAogICAgIG1hY3JvKGRl
dmljZW9yaWVudGF0aW9uKSBcCisgICAgbWFjcm8oZGlzY2hhcmdpbmd0aW1lY2hhbmdlKSBcCiAg
ICAgbWFjcm8oZGlzcGxheSkgXAogICAgIG1hY3JvKGRvd25sb2FkaW5nKSBcCiAgICAgbWFjcm8o
ZHJhZykgXApAQCAtNzQsNiArNzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgbWFjcm8o
a2V5ZG93bikgXAogICAgIG1hY3JvKGtleXByZXNzKSBcCiAgICAgbWFjcm8oa2V5dXApIFwKKyAg
ICBtYWNybyhsZXZlbGNoYW5nZSkgXAogICAgIG1hY3JvKGxvYWQpIFwKICAgICBtYWNybyhsb2Fk
c3RhcnQpIFwKICAgICBtYWNybyhtZXNzYWdlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFy
Z2V0RmFjdG9yeS5pbgppbmRleCA3ODM5NmJkLi43YTFiM2NiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudFRhcmdldEZhY3RvcnkuaW4KQEAgLTEsNiArMSw3IEBACiBuYW1lc3BhY2U9IkV2ZW50
VGFyZ2V0IgogCiBBdWRpb0NvbnRleHQgY29uZGl0aW9uYWw9V0VCX0FVRElPCitCYXR0ZXJ5TWFu
YWdlciBjb25kaXRpb25hbD1CQVRURVJZX1NUQVRVUwogRGVkaWNhdGVkV29ya2VyQ29udGV4dCBj
b25kaXRpb25hbD1XT1JLRVJTCiBET01BcHBsaWNhdGlvbkNhY2hlCiBET01XaW5kb3cKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQmF0dGVyeUNsaWVudE1vY2suY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9CYXR0ZXJ5Q2xpZW50TW9jay5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0MDhiOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQmF0dGVyeUNsaWVudE1vY2suY3BwCkBA
IC0wLDAgKzEsNjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlD
bGllbnRNb2NrLmgiCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJC
YXR0ZXJ5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0JhdHRlcnlDbGll
bnRNb2NrOjpCYXR0ZXJ5Q2xpZW50TW9jaygpCisgICAgOiBtX2NvbnRyb2xsZXIoMCkKK3sKK30K
KworQmF0dGVyeUNsaWVudE1vY2s6On5CYXR0ZXJ5Q2xpZW50TW9jaygpCit7Cit9CisKK3ZvaWQg
QmF0dGVyeUNsaWVudE1vY2s6OnNldENvbnRyb2xsZXIoQmF0dGVyeUNvbnRyb2xsZXIqIGNvbnRy
b2xsZXIpCit7CisgICAgQVNTRVJUKCFtX2NvbnRyb2xsZXIpOworICAgIG1fY29udHJvbGxlciA9
IGNvbnRyb2xsZXI7CisgICAgQVNTRVJUKG1fY29udHJvbGxlcik7Cit9CisKK2Jvb2wgQmF0dGVy
eUNsaWVudE1vY2s6OnN0YXJ0VXBkYXRpbmcoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUp
Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVudE1vY2s6OnN0b3BV
cGRhdGluZyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKK3sKK30KKwordm9pZCBCYXR0
ZXJ5Q2xpZW50TW9jazo6YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKQoreworICAgIGRlbGV0
ZSB0aGlzOworfQorCit2b2lkIEJhdHRlcnlDbGllbnRNb2NrOjpzZXRCYXR0ZXJ5U3RhdHVzKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJh
dHRlcnlTdGF0dXMpCit7CisgICAgbV9jb250cm9sbGVyLT5kaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVz
KGV2ZW50VHlwZSwgYmF0dGVyeVN0YXR1cyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svQmF0dGVyeUNsaWVudE1vY2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svQmF0dGVyeUNsaWVudE1vY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44YTUxZTZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9CYXR0ZXJ5Q2xpZW50TW9jay5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBC
YXR0ZXJ5Q2xpZW50TW9ja19oCisjZGVmaW5lIEJhdHRlcnlDbGllbnRNb2NrX2gKKworI2lmIEVO
QUJMRShCQVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUgIkJhdHRlcnlDbGllbnQuaCIKKyNpbmNs
dWRlICJCYXR0ZXJ5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEJhdHRlcnlTdGF0dXM7CisKK2NsYXNzIEJhdHRlcnlDbGllbnRNb2NrIDogcHVibGljIEJhdHRl
cnlDbGllbnQgeworcHVibGljOgorICAgIEJhdHRlcnlDbGllbnRNb2NrKCk7CisgICAgfkJhdHRl
cnlDbGllbnRNb2NrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJvbGxlcihCYXR0ZXJ5
Q29udHJvbGxlciopOworICAgIHZpcnR1YWwgYm9vbCBzdGFydFVwZGF0aW5nKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmF0dGVyeUNvbnRy
b2xsZXJEZXN0cm95ZWQoKTsKKworICAgIHZvaWQgc2V0QmF0dGVyeVN0YXR1cyhjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPik7CisKK3ByaXZh
dGU6CisgICAgQmF0dGVyeUNvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKK307CisKK30KKworI2Vu
ZGlmIC8vIEJBVFRFUllfU1RBVFVTCisjZW5kaWYgLy8gQmF0dGVyeUNsaWVudE1vY2tfaAorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IDI1ZDNmNzguLmFmZDkxY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTItMDMtMDEgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisKKyAgICAg
ICAgU3VwcG9ydCBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjY5OAorCisgICAgICAgIEFkZCBpbmNsdWRlIGRp
cmVjdG9yeSBhbmQgZmlsZS4KKyAgICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvYmF0dGVyeS1z
dGF0dXMvCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBQbGF0Zm9ybUVmbC5jbWFrZToKKwogMjAxMi0wMi0yNCAgR3J6ZWdvcnogQ3phamtvd3NraSAg
PGcuY3phamtvd3NraUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtEUlRdIEltcGxlbWVu
dCBzZXRWYWx1ZUZvclVzZXIgYW5kIHNldEF1dG9maWxsZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCAxZGViZTM2Li5jMTliN2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEz
LDYgKzEzLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAi
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3d0Zi9nb2JqZWN0IgogICAgICIke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9lZmwiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
IgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tb2NrIgogICAgICR7Q2Fpcm9fSU5DTFVE
RV9ESVJTfQogICAgICR7RUNPUkVfWF9JTkNMVURFX0RJUlN9CiAgICAgJHtFREpFX0lOQ0xVREVf
RElSU30KQEAgLTEyNiw2ICsxMjcsMTAgQEAgSUYgKEVOQUJMRV9WSUJSQVRJT04pCiAgICAgKQog
RU5ESUYgKCkKIAorSUYgKEVOQUJMRV9CQVRURVJZX1NUQVRVUykKKyAgICBMSVNUKEFQUEVORCBX
ZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUyAke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2JhdHRlcnkp
CisgICAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMgZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRl
cnlDbGllbnRFZmwuY3BwKQorRU5ESUYgKCkKIAogU0VUKFdlYktpdF9USEVNRV9ERUZJTklUSU9O
ICIiKQogSUYgKEVOQUJMRV9QUk9HUkVTU19UQUcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggYTlhNTNm
Yi4uZjJlNDUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTAzLTAx
ICBLaWhvbmcgS3dvbiAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgorCisgICAgICAgIFN1cHBv
cnQgZm9yIEJhdHRlcnkgU3RhdHVzIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKworICAgICAgICBBZGQgQmF0dGVyeUNsaWVudEVmbCBh
bmQgRHVtcFJlbmVyVHJlZVN1cHBvcnRFZmwgY2xhc3MgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBs
YXlvdXQgdGVzdHMuCisgICAgICAgIFRoZSBsYXlvdXQgdGVzdHMgYXJlIHJ1biB1c2luZyB0aGUg
QmF0dGVyeUNsaWVudE1vY2sgY2xhc3MuCisgICAgICAgIEJhdHRlcnlDbGllbnRFZmwgY2xhc3Ms
IGhvd2V2ZXIsIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZCBpbiB0aGlzIHBhdGNoLgorICAgICAg
ICAoSXQgd2lsbCBiZSBjb21wbGV0ZWQgYnkgb3RoZXIgcGF0Y2ggYXMgbmVjZXNzYXJ5IGluIHRo
ZSBFZmwgcG9ydC4pCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2JhdHRlcnktc3RhdHVz
LworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpCYXR0ZXJ5Q2xpZW50RWZs
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRFZmw6OnNldENvbnRyb2xsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6c3RhcnRVcGRhdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpzdG9wVXBkYXRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6c2V0QmF0dGVyeVN0YXR1cyk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoQmF0dGVyeUNsaWVudEVmbCk6CisgICAgICAgIChXZWJD
b3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjp+QmF0dGVyeUNsaWVudEVmbCk6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcDoKKyAgICAgICAgKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0TW9ja0JhdHRlcnlTdGF0dXMpOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oOgorICAgICAgICAqIGV3ay9l
d2tfdmlldy5jcHA6CisgICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAg
KF9ld2tfdmlld19wcml2X25ldyk6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfYWRkKToKKyAg
ICAgICAgKiBld2svZXdrX3ZpZXcuaDoKKwogMjAxMi0wMi0yOSAgVG9tYXN6IE1vcmF3c2tpICA8
dC5tb3Jhd3NraUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBSZXBsYWNlIG1hbGxvYy9j
YWxsb2MvZnJlZSB0byBuZXcvZGVsZXRlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
V2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9X
ZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zMmE1OGJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9l
ZmwvV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHAKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudEVmbC5oIgorCisj
aWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVyeUNvbnRyb2xsZXIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCYXR0ZXJ5Q2xpZW50RWZsOjpCYXR0ZXJ5Q2xp
ZW50RWZsKCkKKyAgICA6IG1fY29udHJvbGxlcigwKQoreworfQorCit2b2lkIEJhdHRlcnlDbGll
bnRFZmw6OnNldENvbnRyb2xsZXIoQmF0dGVyeUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7Cisg
ICAgbV9jb250cm9sbGVyID0gY29udHJvbGxlcjsKK30KKworYm9vbCBCYXR0ZXJ5Q2xpZW50RWZs
OjpzdGFydFVwZGF0aW5nKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQoreworICAgIC8v
IEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBmb3IgZ2V0dGluZyBiYXR0ZXJ5IHN0YXR1cyB0byB0
aGUgZWZsIHBvcnQuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVudEVm
bDo6c3RvcFVwZGF0aW5nKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQoreworICAgIC8v
IEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBmb3IgZ2V0dGluZyBiYXR0ZXJ5IHN0YXR1cyB0byB0
aGUgZWZsIHBvcnQKK30KKwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpiYXR0ZXJ5Q29udHJvbGxl
ckRlc3Ryb3llZCgpCit7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVu
dEVmbDo6c2V0QmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQoreworICAgIG1fY29udHJvbGxl
ci0+ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhldmVudFR5cGUsIGJhdHRlcnlTdGF0dXMpOworfQor
Cit9CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0
L2VmbC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMWQwZmNkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlDbGllbnRFZmwuaApAQCAtMCwwICsxLDUyIEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgQmF0dGVyeUNsaWVudEVmbF9oCisjZGVmaW5lIEJhdHRlcnlDbGllbnRFZmxf
aAorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVu
dC5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBCYXR0ZXJ5Q29udHJvbGxlcjsKKworY2xhc3MgQmF0dGVyeUNsaWVudEVmbCA6IHB1
YmxpYyBCYXR0ZXJ5Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBCYXR0ZXJ5Q2xpZW50RWZsKCk7Cisg
ICAgfkJhdHRlcnlDbGllbnRFZmwoKSB7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJv
bGxlcihCYXR0ZXJ5Q29udHJvbGxlciopOworICAgIHZpcnR1YWwgYm9vbCBzdGFydFVwZGF0aW5n
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVw
ZGF0aW5nKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKworICAgIHZvaWQgc2V0QmF0dGVyeVN0YXR1
cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVz
Pik7CisKK3ByaXZhdGU6CisgICAgQmF0dGVyeUNvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKK307
CisKK30KKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisjZW5kaWYgLy8gQmF0dGVyeUNsaWVu
dEVmbF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCmluZGV4IGZkM2Q2YjUuLjE0OGZiNzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcApAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgogCisjaW5j
bHVkZSAiQmF0dGVyeUNsaWVudE1vY2suaCIKKyNpbmNsdWRlICJCYXR0ZXJ5Q29udHJvbGxlci5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiZXdrX3ByaXZh
dGUuaCIKIApAQCAtMzg5LDYgKzM5MSwxMyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJvb2wgZW5hYmxlKQogICAgIFdlYkNvcmU6OlNl
dHRpbmdzOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoZW5hYmxlKTsKIH0KIAordm9pZCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldE1vY2tCYXR0ZXJ5U3RhdHVzKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlLCBib29sIGNoYXJnaW5nLCBkb3VibGUgY2hh
cmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2ZWwpCit7CisgICAg
V2ViQ29yZTo6UGFnZSogcGFnZSA9IEVXS1ByaXZhdGU6OmNvcmVQYWdlKGV3a1ZpZXcpOworICAg
IFdlYkNvcmU6OkJhdHRlcnlDbGllbnRNb2NrKiBtb2NrQ2xpZW50ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6QmF0dGVyeUNsaWVudE1vY2sqPihXZWJDb3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6ZnJv
bShwYWdlKS0+Y2xpZW50KCkpOworICAgIG1vY2tDbGllbnQtPnNldEJhdHRlcnlTdGF0dXMoZXZl
bnRUeXBlLCBXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzOjpjcmVhdGUoY2hhcmdpbmcsIGNoYXJnaW5n
VGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZlbCkpOworfQorCiB2b2lkIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6ZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChFdmFzX09iamVjdCogZXdr
VmlldywgaW50IGRldmljZURQSSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGV2aWNlU2l6ZSwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYXZhaWxhYmxlU2l6ZSkKIHsKICAgICBXZWJDb3JlOjpQ
YWdlKiBwYWdlID0gRVdLUHJpdmF0ZTo6Y29yZVBhZ2UoZXdrVmlldyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwu
aCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbC5oCmluZGV4IDk1MGE3OGQuLjM0YTJiY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
ZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oCkBA
IC03Nyw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc1RhcmdldEl0ZW0oY29u
c3QgRXdrX0hpc3RvcnlfSXRlbSopOwogCiAgICAgc3RhdGljIHZvaWQgc2V0TW9ja1Njcm9sbGJh
cnNFbmFibGVkKGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldE1vY2tCYXR0ZXJ5U3RhdHVzKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlLCBib29sIGNoYXJnaW5n
LCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2
ZWwpOwogCiAgICAgc3RhdGljIHZvaWQgZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChFdmFz
X09iamVjdCogZXdrVmlldywgaW50IGRldmljZURQSSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
ZGV2aWNlU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYXZhaWxhYmxlU2l6ZSk7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5kZXggMTdhNmVhMC4uMDMyMGZmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCkBAIC03NCw2ICs3NCwxMSBAQAogI2luY2x1ZGUgIlZp
YnJhdGlvbkNsaWVudEVmbC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMp
CisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudEVmbC5oIgorI2luY2x1ZGUgIkJhdHRlcnlDbGllbnRN
b2NrLmgiCisjZW5kaWYKKwogc3RhdGljIGNvbnN0IGZsb2F0IHpvb21NaW5pbXVtID0gMC4wNTsK
IHN0YXRpYyBjb25zdCBmbG9hdCB6b29tTWF4aW11bSA9IDQuMDsKIApAQCAtNjE4LDYgKzYyMywx
MyBAQCBzdGF0aWMgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogICAgIFdlYkNvcmU6OnByb3ZpZGVWaWJyYXRp
b25Ubyhwcml2LT5wYWdlLmdldCgpLCBuZXcgV2ViQ29yZTo6VmlicmF0aW9uQ2xpZW50RWZsKHNt
YXJ0RGF0YS0+c2VsZikpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisg
ICAgaWYgKHNtYXJ0RGF0YS0+YXBpLT51c2VfbW9jaykKKyAgICAgICAgV2ViQ29yZTo6cHJvdmlk
ZUJhdHRlcnlUbyhwcml2LT5wYWdlLmdldCgpLCBuZXcgV2ViQ29yZTo6QmF0dGVyeUNsaWVudE1v
Y2spOworICAgIGVsc2UKKyAgICAgICAgV2ViQ29yZTo6cHJvdmlkZUJhdHRlcnlUbyhwcml2LT5w
YWdlLmdldCgpLCBuZXcgV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbCk7CisjZW5kaWYKKwogICAg
IHByaXYtPnBhZ2VTZXR0aW5ncyA9IHByaXYtPnBhZ2UtPnNldHRpbmdzKCk7CiAKICAgICBwcml2
LT52aWV3cG9ydEFyZ3VtZW50cy53aWR0aCA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpW
YWx1ZUF1dG87CkBAIC03NjQsOCArNzc2LDggQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0
X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKICAgICBzbWFydERhdGEtPmJnX2NvbG9yLmEgPSAy
NTU7CiAKICAgICBzbWFydERhdGEtPnNlbGYgPSBld2tWaWV3OwotICAgIHNtYXJ0RGF0YS0+X3By
aXYgPSBfZXdrX3ZpZXdfcHJpdl9uZXcoc21hcnREYXRhKTsKICAgICBzbWFydERhdGEtPmFwaSA9
IGFwaTsKKyAgICBzbWFydERhdGEtPl9wcml2ID0gX2V3a192aWV3X3ByaXZfbmV3KHNtYXJ0RGF0
YSk7CiAKICAgICBfcGFyZW50X3NjLmFkZChld2tWaWV3KTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXcuaAppbmRleCA3ZGUwZTQ2Li5kYjMyYzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuaApA
QCAtMTIyLDYgKzEyMiw3IEBAIHR5cGVkZWYgZW51bSBfRXdrX0ZvY3VzX0RpcmVjdGlvbiBFd2tf
Rm9jdXNfRGlyZWN0aW9uOwogc3RydWN0IF9Fd2tfVmlld19TbWFydF9DbGFzcyB7CiAgICAgRXZh
c19TbWFydF9DbGFzcyBzYzsgLyoqPCBBbGwgYnV0ICdkYXRhJyBpcyBmcmVlIHRvIGJlIGNoYW5n
ZWQuICovCiAgICAgdW5zaWduZWQgbG9uZyB2ZXJzaW9uOworICAgIEVpbmFfQm9vbCB1c2VfbW9j
azsKIAogICAgIEV2YXNfT2JqZWN0ICooKndpbmRvd19jcmVhdGUpKEV3a19WaWV3X1NtYXJ0X0Rh
dGEgKnNkLCBFaW5hX0Jvb2wgamF2YXNjcmlwdCwgY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyAq
d2luZG93X2ZlYXR1cmVzKTsgLyoqPCBjcmVhdGVzIGEgbmV3IHdpbmRvdywgcmVxdWVzdGVkIGJ5
IHdlYmtpdCAqLwogICAgIHZvaWQgKCp3aW5kb3dfY2xvc2UpKEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNkKTsgLyoqPCBjbG9zZXMgYSB3aW5kb3cgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9P
cHRpb25zRWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggNzY5
ODU1Yy4uMzYzZTRlMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UK
KysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTYzLDYgKzYzLDcgQEAgU0VU
KFRIRU1FX0JJTkFSWV9ESVIgJHtDTUFLRV9CSU5BUllfRElSfS9XZWJLaXQvZWZsL0RlZmF1bHRU
aGVtZSkKIAogU0VUKFZFUlNJT05fU0NSSVBUICItV2wsLS12ZXJzaW9uLXNjcmlwdCwke0NNQUtF
X01PRFVMRV9QQVRIfS9lZmxzeW1ib2xzLmZpbHRlciIpCiAKK1dFQktJVF9GRUFUVVJFKEVOQUJM
RV9CQVRURVJZX1NUQVRVUyAiRW5hYmxlIGJhdHRlcnkgc3RhdHVzIGFwaSIgREVGQVVMVCBPTikK
IFdFQktJVF9GRUFUVVJFKEVOQUJMRV9CTE9CICJFbmFibGUgYmxvYiBzbGljZSIgREVGQVVMVCBP
RkYpCiBXRUJLSVRfRkVBVFVSRShFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgIkVuYWJsZSBjaGFu
bmVsIG1lc3NhZ2luZyIgREVGQVVMVCBPTikKIFdFQktJVF9GRUFUVVJFKEVOQUJMRV9DTElFTlRf
QkFTRURfR0VPTE9DQVRJT04gIkVuYWJsZSBjbGllbnQgYmFzZWQgZ2VvbG9jYXRpb24iIERFRkFV
TFQgT0ZGKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UgYi9Tb3VyY2Uv
Y21ha2Vjb25maWcuaC5jbWFrZQppbmRleCBmZWY3MzBhLi45ZWQ1NDlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Vjb25maWcuaC5jbWFr
ZQpAQCAtNiw2ICs2LDcgQEAKIAogCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfQVNfSU1BR0UKKyNj
bWFrZWRlZmluZTAxIEVOQUJMRV9CQVRURVJZX1NUQVRVUwogI2NtYWtlZGVmaW5lMDEgRU5BQkxF
X0JMT0IKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORwogI2NtYWtlZGVm
aW5lMDEgRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTgpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDdkNWE5NWQuLmY1ZmQxNzAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0
MSBAQAorMjAxMi0wMy0wMSAgS2lob25nIEt3b24gIDxraWhvbmcua3dvbkBzYW1zdW5nLmNvbT4K
KworICAgICAgICBTdXBwb3J0IGZvciBCYXR0ZXJ5IFN0YXR1cyBBUEkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgQWRkIHNl
dE1vY2tCYXR0ZXJ5U3RhdHVzIEFQSSB0byBsYXlvdXRUZXN0Q29udHJvbGxlciBmb3IgdGVzdGlu
ZyB0aGUgQmF0dGVyeSBTdGF0dXMgQVBJLgorICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9i
YXR0ZXJ5LXN0YXR1cy8KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKHNldE1vY2tCYXR0ZXJ5U3RhdHVzQ2FsbGJhY2spOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRlc3RDb250cm9sbGVyQmxh
Y2tCZXJyeS5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0JhdHRl
cnlTdGF0dXMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0
Q29udHJvbGxlcik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0JhdHRl
cnlTdGF0dXMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RD
b250cm9sbGVyLmg6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlVmlldy5jcHA6CisgICAgICAgIChkcnRW
aWV3QWRkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xs
ZXJFZmwuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tCYXR0ZXJ5
U3RhdHVzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xs
ZXJHdGsuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tCYXR0ZXJ5
U3RhdHVzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxl
clF0LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrQmF0dGVyeVN0
YXR1cyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJR
dC5oOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TW9ja0JhdHRlcnlTdGF0dXMpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1vY2tCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKiBTY3JpcHRzL2J1
aWxkLXdlYmtpdDoKKwogMjAxMi0wMy0wMSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBBY3R1YWxseSBsb29rIGF0IHRoZSBhcmdzIGluIGRyaXZlcl9pbnB1
dCA6KC4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApp
bmRleCAwNzdiMDgyLi4wYjg2ZmEzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0
VGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xMjg4LDYgKzEyODgsMjcgQEAgc3RhdGljIEpTVmFsdWVS
ZWYgc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZgogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAor
c3RhdGljIEpTVmFsdWVSZWYgc2V0TW9ja0JhdHRlcnlTdGF0dXNDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCA1KQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IGV2ZW50VHlwZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7
CisgICAgYm9vbCBtX2NoYXJnaW5nID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVu
dHNbMV0pOworICAgIGRvdWJsZSBtX2NoYXJnaW5nVGltZSA9IEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsK
KyAgICBkb3VibGUgbV9kaXNjaGFyZ2luZ1RpbWUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
YXJndW1lbnRzWzNdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAg
ZG91YmxlIG1fbGV2ZWwgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzRdLCBl
eGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBjb250cm9sbGVyLT5z
ZXRNb2NrQmF0dGVyeVN0YXR1cyhldmVudFR5cGUuZ2V0KCksIG1fY2hhcmdpbmcsIG1fY2hhcmdp
bmdUaW1lLCBtX2Rpc2NoYXJnaW5nVGltZSwgbV9sZXZlbCk7CisgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCiBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRNb2NrRGV2
aWNlT3JpZW50YXRpb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPCA2KQpAQCAtMjQ0NSw2ICsyNDY2LDcgQEAgSlNTdGF0aWNG
dW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAg
IHsgInNldEphdmFTY3JpcHRQcm9maWxpbmdFbmFibGVkIiwgc2V0SmF2YVNjcmlwdFByb2ZpbGlu
Z0VuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRNYWluRnJhbWVJc0ZpcnN0
UmVzcG9uZGVyIiwgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlckNhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgICAgIHsgInNldE1pbmltdW1UaW1lckludGVydmFsIiwgc2V0TWluaW11bVRpbWVySW50
ZXJ2YWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRNb2NrQmF0dGVyeVN0YXR1cyIs
IHNldE1vY2tCYXR0ZXJ5U3RhdHVzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0TW9j
a0RldmljZU9yaWVudGF0aW9uIiwgc2V0TW9ja0RldmljZU9yaWVudGF0aW9uQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKICAgICAgICAgeyAic2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IiLCBzZXRNb2NrR2VvbG9j
YXRpb25FcnJvckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uIiwgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25DYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKaW5kZXggNDUyNjVk
Yi4uNmM3NmIxMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5oCkBAIC0xMDQsNiArMTA0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SmF2YVNjcmlwdFBy
b2ZpbGluZ0VuYWJsZWQoYm9vbCBwcm9maWxpbmdFbmFibGVkKTsKICAgICB2b2lkIHNldEphdmFT
Y3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBmbGFnKTsKICAgICB2b2lkIHNldE1haW5GcmFt
ZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKTsKKyAgICB2b2lkIHNldE1vY2tCYXR0ZXJ5U3Rh
dHVzKEpTU3RyaW5nUmVmIGV2ZW50VHlwZSwgYm9vbCBjaGFyZ2luZywgZG91YmxlIGNoYXJnaW5n
VGltZSwgZG91YmxlIGRpc2NoYXJnaW5nVGltZSwgZG91YmxlIGxldmVsKTsKICAgICB2b2lkIHNl
dE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhh
LCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEs
IGRvdWJsZSBnYW1tYSk7CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29k
ZSwgSlNTdHJpbmdSZWYgbWVzc2FnZSk7CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3Np
dGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSk7
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRlc3RD
b250cm9sbGVyQmxhY2tCZXJyeS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5
L0xheW91dFRlc3RDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAKaW5kZXggMTQ5MDFhZS4uMmQ2ZjQ2
YiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9MYXlvdXRUZXN0
Q29udHJvbGxlckJsYWNrQmVycnkuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNr
YmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0JlcnJ5LmNwcApAQCAtNjgyLDYgKzY4Miwx
MSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lu
UXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1bwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tCYXR0ZXJ5U3RhdHVzKEpTU3RyaW5n
UmVmIGV2ZW50VHlwZSwgYm9vbCBjaGFyZ2luZywgZG91YmxlIGNoYXJnaW5nVGltZSwgZG91Ymxl
IGRpc2NoYXJnaW5nVGltZSwgZG91YmxlIGxldmVsKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlv
bihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRh
LCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSkKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDljNjhkZmYuLjFhMWE0M2IgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAKQEAgLTE4NCw2ICsxODQsNyBAQCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5
b3V0VGVzdENvbnRyb2xsZXIoVGVzdFNoZWxsKiBzaGVsbCkKICAgICBiaW5kTWV0aG9kKCJzZXRK
YXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRK
YXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKTsKICAgICBiaW5kTWV0aG9kKCJzZXRKYXZhU2Ny
aXB0UHJvZmlsaW5nRW5hYmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlw
dFByb2ZpbGluZ0VuYWJsZWQpOwogICAgIGJpbmRNZXRob2QoInNldE1pbmltdW1UaW1lckludGVy
dmFsIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCk7Cisg
ICAgYmluZE1ldGhvZCgic2V0TW9ja0JhdHRlcnlTdGF0dXMiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldE1vY2tCYXR0ZXJ5U3RhdHVzKTsKICAgICBiaW5kTWV0aG9kKCJzZXRNb2NrRGV2aWNl
T3JpZW50YXRpb24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRh
dGlvbik7CiAgICAgYmluZE1ldGhvZCgic2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKTsKICAgICBiaW5kTWV0aG9k
KCJzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24pOwpAQCAtMTg4OSw2ICsxODkwLDExIEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEVkaXRpbmdCZWhhdmlvcihjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywKICAgICAgICAgbG9nRXJyb3JUb0NvbnNvbGUoIlBhc3NlZCBpbnZhbGlk
IGVkaXRpbmcgYmVoYXZpb3IuIFNob3VsZCBiZSAnbWFjJywgJ3dpbicsIG9yICd1bml4Jy4iKTsK
IH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0JhdHRlcnlTdGF0dXMoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICAvLyBOb3QgSW1wbGVtZW50ZWQKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TW9ja0RldmljZU9yaWVudGF0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAppbmRl
eCAwZjUwNTliLi5mZWE2YzhjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgKQEAgLTM2NCw2ICszNjQsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhZGRVc2VyU2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKICAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKIAorICAgIC8vIEJhdHRlcnlTdGF0dXMgcmVsYXRlZCBmdW5jdGlvbnMK
KyAgICB2b2lkIHNldE1vY2tCYXR0ZXJ5U3RhdHVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKKwogICAgIC8vIERldmljZU9yaWVudGF0aW9uIHJlbGF0ZWQgZnVuY3Rpb25z
CiAgICAgdm9pZCBzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
RHVtcFJlbmRlclRyZWVWaWV3LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVu
ZGVyVHJlZVZpZXcuY3BwCmluZGV4IGIxNjQwMWEuLmM3MGVkODUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcuY3BwCkBAIC0xMTIsNSArMTEyLDcg
QEAgRXZhc19PYmplY3QqIGRydFZpZXdBZGQoRXZhcyogZXZhcykKICAgICBhcGkud2luZG93X2Ny
ZWF0ZSA9IG9uV2luZG93Q3JlYXRlOwogICAgIGFwaS53aW5kb3dfY2xvc2UgPSBvbldpbmRvd0Ns
b3NlOwogCisgICAgYXBpLnVzZV9tb2NrID0gdHJ1ZTsKKwogICAgIHJldHVybiBldmFzX29iamVj
dF9zbWFydF9hZGQoZXZhcywgZXZhc19zbWFydF9jbGFzc19uZXcoJmFwaS5zYykpOwogfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZs
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5j
cHAKaW5kZXggZGEwYzdjYS4uN2RjYjI4ZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCkBAIC0zNDksNiArMzQ5LDE1IEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tC
YXR0ZXJ5U3RhdHVzKEpTU3RyaW5nUmVmIGV2ZW50VHlwZSwgYm9vbCBjaGFyZ2luZywgZG91Ymxl
IGNoYXJnaW5nVGltZSwgZG91YmxlIGRpc2NoYXJnaW5nVGltZSwgZG91YmxlIGxldmVsKQorewor
ICAgIHNpemVfdCBtYXhMZW5ndGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUo
ZXZlbnRUeXBlKTsKKyAgICBjaGFyKiBldmVudFR5cGVCdWZmZXIgPSBuZXcgY2hhclttYXhMZW5n
dGggKyAxXTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGV2ZW50VHlwZSwgZXZlbnRUeXBl
QnVmZmVyLCBtYXhMZW5ndGggKyAxKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNl
dE1vY2tCYXR0ZXJ5U3RhdHVzKGJyb3dzZXItPm1haW5WaWV3KCksIGV2ZW50VHlwZUJ1ZmZlciwg
Y2hhcmdpbmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZlbCk7CisgICAgZGVs
ZXRlW10gZXZlbnRUeXBlQnVmZmVyOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCwgZG91YmxlLCBib29sLCBkb3VibGUsIGJvb2ws
IGRvdWJsZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBEZXZpY2VPcmllbnRhdGlv
biBsYXlvdXQgdGVzdHMuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5
b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91
dFRlc3RDb250cm9sbGVyR3RrLmNwcAppbmRleCAxMjY2Y2NiLi44MzNlNzM5IDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAK
QEAgLTQ3Miw2ICs0NzIsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUlt
YWdlTG9hZGluZygpCiAgICAgLy8gQWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBpbWFnZSBsb2FkaW5n
IGlzIHJlLWVuYWJsZWQgZm9yIGVhY2ggbmV3IHRlc3QuCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1vY2tCYXR0ZXJ5U3RhdHVzKEpTU3RyaW5nUmVmIGV2ZW50VHlwZSwgYm9v
bCBjaGFyZ2luZywgZG91YmxlIGNoYXJnaW5nVGltZSwgZG91YmxlIGRpc2NoYXJnaW5nVGltZSwg
ZG91YmxlIGxldmVsKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEJhdHRlcnlTdGF0
dXMgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjI2OTguCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1v
Y2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBi
b29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRv
dWJsZSBnYW1tYSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBEZXZpY2VPcmllbnRh
dGlvbiBsYXlvdXQgdGVzdHMuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9M
YXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91
dFRlc3RDb250cm9sbGVyUXQuY3BwCmluZGV4IDY2ZmRmMWUuLmI0ZTg4ODMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCkBAIC04
NDcsNiArODQ3LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEVkaXRpbmdCZWhh
dmlvcihjb25zdCBRU3RyaW5nJiBlZGl0aW5nQmVoYXZpb3IpCiAgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OnNldEVkaXRpbmdCZWhhdmlvcihtX2RydC0+d2ViUGFnZSgpLCBlZGl0aW5nQmVo
YXZpb3IpOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrQmF0dGVyeVN0
YXR1cyhjb25zdCBRU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2hhcmdpbmcsIGRvdWJsZSBjaGFy
Z2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZlbCkKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGZvciBCYXR0ZXJ5U3RhdHVzIGxheW91dCB0ZXN0cy4KKyAgICAv
LyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4LgorfQor
CiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9v
bCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91
YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCiB7CiAgICAgUUxp
c3Q8V2ViQ29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2VzKCk7CmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0Lmgg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgKaW5kZXgg
NDc1YjkyNC4uYzBjM2Q1NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5
b3V0VGVzdENvbnRyb2xsZXJRdC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91
dFRlc3RDb250cm9sbGVyUXQuaApAQCAtMjI2LDYgKzIyNiw3IEBAIHB1YmxpYyBzbG90czoKICAg
ICAvLyB3aGljaCBpcyBhIE1hYy1zcGVjaWZpYyB0ZXN0LgogICAgIHZvaWQgYWRkRGlzYWxsb3dl
ZFVSTChjb25zdCBRU3RyaW5nJikge30KIAorICAgIHZvaWQgc2V0TW9ja0JhdHRlcnlTdGF0dXMo
Y29uc3QgUVN0cmluZyYgZXZlbnRUeXBlLCBib29sIGNoYXJnaW5nLCBkb3VibGUgY2hhcmdpbmdU
aW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2ZWwpOwogICAgIHZvaWQgc2V0
TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEs
IGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwg
ZG91YmxlIGdhbW1hKTsKIAogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoaW50IGNv
ZGUsIGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKaW5kZXggNTE4NWE4Zi4uN2ExOThi
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9s
bGVyV2luLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRy
b2xsZXJXaW4uY3BwCkBAIC00MTQsNiArNDE0LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgc2V0RGVsZWdhdGUsIGJvb2wgcGVybWlz
CiAgICAgICAgIHdlYlZpZXctPnNldFBvbGljeURlbGVnYXRlKDApOwogfQogCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrQmF0dGVyeVN0YXR1cyhKU1N0cmluZ1JlZiBldmVudFR5
cGUsIGJvb2wgY2hhcmdpbmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2lu
Z1RpbWUsIGRvdWJsZSBsZXZlbCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBCYXR0
ZXJ5U3RhdHVzIGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTYyNjk4LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBh
bHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdh
bW1hLCBkb3VibGUgZ2FtbWEpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgRGV2aWNl
T3JpZW50YXRpb24gbGF5b3V0IHRlc3RzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93
eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAppbmRleCBmZjc0NjQ0Li45Njk4YThjIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNw
cApAQCAtMzQwLDYgKzM0MCwxMiBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRy
YW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0JhdHRlcnlT
dGF0dXMoSlNTdHJpbmdSZWYgZXZlbnRUeXBlLCBib29sIGNoYXJnaW5nLCBkb3VibGUgY2hhcmdp
bmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2ZWwpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudCBmb3IgQmF0dGVyeVN0YXR1cyBsYXlvdXQgdGVzdHMuCisgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjY5OC4KK30KKwog
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wg
Y2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJs
ZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgZm9yIERldmljZU9yaWVudGF0aW9uIGxheW91dCB0ZXN0cy4KZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0IGIvVG9vbHMvU2NyaXB0cy9idWlsZC13
ZWJraXQKaW5kZXggZjIwYWFhZS4uMzBhZDgwNyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9i
dWlsZC13ZWJraXQKKysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKQEAgLTcwLDYgKzcw
LDcgQEAgbXkgKAogICAgICR0aHJlZURSZW5kZXJpbmdTdXBwb3J0LAogICAgICRhY2NlbGVyYXRl
ZDJkQ2FudmFzU3VwcG9ydCwKICAgICAkYW5pbWF0aW9uQVBJU3VwcG9ydCwKKyAgICAkYmF0dGVy
eXN0YXR1c0FQSVN1cHBvcnQsCiAgICAgJGJsb2JTdXBwb3J0LAogICAgICRjaGFubmVsTWVzc2Fn
aW5nU3VwcG9ydCwKICAgICAkY2xpZW50QmFzZWRHZW9sb2NhdGlvblN1cHBvcnQsCkBAIC0xNTks
NiArMTYwLDkgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgIHsgb3B0aW9uID0+ICJhbmltYXRpb24t
YXBpIiwgZGVzYyA9PiAiVG9nZ2xlIGFuaW1hdGlvbiBBUEkgc3VwcG9ydCIsCiAgICAgICBkZWZp
bmUgPT4gIkVOQUJMRV9BTklNQVRJT05fQVBJIiwgZGVmYXVsdCA9PiBpc0JsYWNrQmVycnkoKSwg
dmFsdWUgPT4gXCRhbmltYXRpb25BUElTdXBwb3J0IH0sCiAKKyAgICB7IG9wdGlvbiA9PiAiYmF0
dGVyeS1zdGF0dXMtYXBpIiwgZGVzYyA9PiAiVG9nZ2xlIGJhdHRlcnkgc3RhdHVzIEFQSSBzdXBw
b3J0IiwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0JBVFRFUllfU1RBVFVTIiwgZGVmYXVsdCA9
PiBpc0VmbCgpLCB2YWx1ZSA9PiBcJGJhdHRlcnlzdGF0dXNBUElTdXBwb3J0IH0sCisKICAgICB7
IG9wdGlvbiA9PiAiYmxvYiIsIGRlc2MgPT4gIlRvZ2dsZSBCbG9iIHN1cHBvcnQiLAogICAgICAg
ZGVmaW5lID0+ICJFTkFCTEVfQkxPQiIsIGRlZmF1bHQgPT4gKGlzQXBwbGVNYWNXZWJLaXQoKSB8
fCBpc0d0aygpIHx8IGlzQ2hyb21pdW0oKSB8fCBpc0JsYWNrQmVycnkoKSksIHZhbHVlID0+IFwk
YmxvYlN1cHBvcnQgfSwKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130562</attachid>
            <date>2012-03-07 00:56:06 -0800</date>
            <delta_ts>2012-03-15 04:41:07 -0700</delta_ts>
            <desc>Modified the patch according to comment #43.</desc>
            <filename>battery04.patch</filename>
            <type>text/plain</type>
            <size>91521</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzYjg2NTkzLi4wYmE2NGU3
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTItMDMtMDYgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgU3VwcG9ydCBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKworICAgICAgICBFbmFibGUgQkFU
VEVSWV9TVEFUVVMgZm9yIFdlYktpdC1FZmwuCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RS
L2JhdHRlcnktc3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2U6CisgICAgICAgICogU291
cmNlL2NtYWtlY29uZmlnLmguY21ha2U6CisKIDIwMTItMDMtMDYgIFJhcGhhZWwgS3VibyBkYSBD
b3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgdW5kZWZpbmVkIHJlZmVyZW5j
ZSB0byBKU0M6OklkZW50aWZpZXJUYWJsZTo6fklkZW50aWZpZXJUYWJsZSgpIG9uIEVGTCBwb3J0
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggZWUyOWQ5YS4uMjA5YmIwNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTAz
LTA2ICBLaWhvbmcgS3dvbiAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgorCisgICAgICAgIFN1
cHBvcnQgZm9yIEJhdHRlcnkgU3RhdHVzIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgQWRkIG5ldyB0ZXN0IGNhc2Vz
IGZvciBCYXR0ZXJ5IFN0YXR1cyBBUEkuCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2Jh
dHRlcnktc3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFj
ay1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMv
YWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9k
b20vQmF0dGVyeVN0YXR1cy9iYXNpYy1vcGVyYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2Jhc2ljLW9wZXJhdGlvbi5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2V2ZW50LWFmdGVyLW5hdmlnYXRp
b24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVz
L2V2ZW50LWFmdGVyLW5hdmlnYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20v
QmF0dGVyeVN0YXR1cy9tdWx0aXBsZS1mcmFtZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL25vLXBhZ2UtY2FjaGUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL25vLXBhZ2UtY2Fj
aGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9yZXNvdXJj
ZXMvY2FjaGVkLXBhZ2UtMS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5
U3RhdHVzL3Jlc291cmNlcy9jYWNoZWQtcGFnZS0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZG9tL0JhdHRlcnlTdGF0dXMvcmVzb3VyY2VzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24tbmV3
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRl
c3RzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLmpzOiBBZGRlZC4KKyAgICAgICAgKGNoZWNr
QmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChmaXJzdExpc3RlbmVyKToKKyAgICAgICAgKHNlY29u
ZExpc3RlbmVyKToKKyAgICAgICAgKG1heWJlRmluaXNoVGVzdCk6CisgICAgICAgICogZmFzdC9k
b20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvYmFzaWMtb3BlcmF0aW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9ldmVudC1hZnRl
ci1uYXZpZ2F0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVz
L3NjcmlwdC10ZXN0cy9tdWx0aXBsZS1mcmFtZXMuanM6IEFkZGVkLgorICAgICAgICAoY2hlY2tC
YXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKGNoZWNrQ2hpbGRCYXR0ZXJ5U3RhdHVzKToKKyAgICAg
ICAgKG1haW5GcmFtZUxpc3RlbmVyKToKKyAgICAgICAgKGNoaWxkRnJhbWVMaXN0ZW5lcik6Cisg
ICAgICAgIChtYXliZUZpbmlzaFRlc3QpOgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0
dXMvc2NyaXB0LXRlc3RzL25vLXBhZ2UtY2FjaGUuanM6IEFkZGVkLgorICAgICAgICAocmVwb3J0
UGFnZU9uZU9ubG9hZCk6CisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQt
dGVzdHMvdXBkYXRlcy5qczogQWRkZWQuCisgICAgICAgIChjaGVja0JhdHRlcnlTdGF0dXMpOgor
ICAgICAgICAoc2V0TW9ja0JhdHRlcnlTdGF0dXMpOgorICAgICAgICAoZmlyc3RMaXN0ZW5lcik6
CisgICAgICAgICh1cGRhdGVMaXN0ZW5lcik6CisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0
YXR1cy9zY3JpcHQtdGVzdHMvd2luZG93LXByb3BlcnR5LmpzOiBBZGRlZC4KKyAgICAgICAgKGhh
c09uQmF0dGVyeVByb3BlcnR5KToKKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Vw
ZGF0ZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3Rh
dHVzL3VwZGF0ZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1
cy93aW5kb3ctcHJvcGVydHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Rv
bS9CYXR0ZXJ5U3RhdHVzL3dpbmRvdy1wcm9wZXJ0eS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisgICAgICAgICogcGxhdGZv
cm0vZ3RrL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1NraXBwZWQ6CisgICAgICAg
ICogcGxhdGZvcm0vcXQvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkOgorCiAyMDEyLTAzLTA2ICBBZHJp
ZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgdXBk
YXRlIG1hYyB0ZXh0IGJhc2VsaW5lcyBhZnRlciByMTA5ODUxCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYWRkLWxpc3Rl
bmVyLWZyb20tY2FsbGJhY2stZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmUyMTQ3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9CYXR0ZXJ5U3RhdHVzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDIxIEBACitUZXN0cyB0aGF0IGFkZGluZyBhIG5ldyBldmVudCBsaXN0ZW5lciBm
cm9tIGEgY2FsbGJhY2sgd29ya3MgYXMgZXhwZWN0ZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIGJhdHRlcnkuY2hhcmdpbmcgaXMgbW9ja0NoYXJnaW5nCitQQVNTIGJh
dHRlcnkuY2hhcmdpbmdUaW1lIGlzIG1vY2tDaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNj
aGFyZ2luZ1RpbWUgaXMgbW9ja0Rpc2NoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmxldmVsIGlz
IG1vY2tMZXZlbAorUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIG1vY2tDaGFyZ2luZworUEFTUyBi
YXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBtb2NrQ2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkuZGlz
Y2hhcmdpbmdUaW1lIGlzIG1vY2tEaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBp
cyBtb2NrTGV2ZWwKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBpcyBtb2NrQ2hhcmdpbmcKK1BBU1Mg
YmF0dGVyeS5jaGFyZ2luZ1RpbWUgaXMgbW9ja0NoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRp
c2NoYXJnaW5nVGltZSBpcyBtb2NrRGlzY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkubGV2ZWwg
aXMgbW9ja0xldmVsCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9h
ZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZDk5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLmh0
bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9kb20vQmF0dGVyeVN0YXR1cy9iYXNpYy1vcGVyYXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9iYXNpYy1vcGVyYXRpb24tZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOWJlM2EKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2Jhc2ljLW9wZXJhdGlv
bi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGVzdHMgdGhlIGJhc2ljIG9wZXJhdGlv
biBvZiBCYXR0ZXJ5U3RhdHVzIHVzaW5nIHRoZSBtb2NrLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIG1vY2tDaGFyZ2luZworUEFTUyBi
YXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBtb2NrQ2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkuZGlz
Y2hhcmdpbmdUaW1lIGlzIG1vY2tEaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBp
cyBtb2NrTGV2ZWwKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2Jh
c2ljLW9wZXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9i
YXNpYy1vcGVyYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45
MTU3YmU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0
YXR1cy9iYXNpYy1vcGVyYXRpb24uaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9iYXNpYy1vcGVy
YXRpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvZXZlbnQtYWZ0
ZXItbmF2aWdhdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOGU2YmMzOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Jh
dHRlcnlTdGF0dXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwzIEBACitUZXN0cyBmb3IgYSBjcmFzaCB3aGVyZSBhbiBldmVudCBpcyBmaXJlZCBhZnRlciB0
aGUgcGFnZSBoYXMgYmVlbiBuYXZpZ2F0ZWQgYXdheSB3aGVuIHRoZSBvcmlnaW5hbCBwYWdlIGlz
IGluIHRoZSBwYWdlIGNhY2hlLgorCitTVUNDRVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24uaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTdhZWYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2V2ZW50LWFmdGVyLW5h
dmlnYXRpb24uaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9u
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvbXVsdGlwbGUtZnJhbWVzLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvbXVsdGlwbGUtZnJhbWVzLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjBhOTY2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9tdWx0aXBs
ZS1mcmFtZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1Rlc3RzIHVzaW5nIEJhdHRl
cnlTdGF0dXMgZnJvbSBtdWx0aXBsZSBmcmFtZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIGJhdHRlcnkuY2hhcmdpbmcgaXMgbW9ja0NoYXJnaW5nCitQQVNTIGJhdHRl
cnkuY2hhcmdpbmdUaW1lIGlzIG1vY2tDaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFy
Z2luZ1RpbWUgaXMgbW9ja0Rpc2NoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmxldmVsIGlzIG1v
Y2tMZXZlbAorUEFTUyBjaGlsZEJhdHRlcnkuY2hhcmdpbmcgaXMgbW9ja0NoYXJnaW5nCitQQVNT
IGNoaWxkQmF0dGVyeS5jaGFyZ2luZ1RpbWUgaXMgbW9ja0NoYXJnaW5nVGltZQorUEFTUyBjaGls
ZEJhdHRlcnkuZGlzY2hhcmdpbmdUaW1lIGlzIG1vY2tEaXNjaGFyZ2luZ1RpbWUKK1BBU1MgY2hp
bGRCYXR0ZXJ5LmxldmVsIGlzIG1vY2tMZXZlbAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L0JhdHRlcnlTdGF0dXMvbXVsdGlwbGUtZnJhbWVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjRmNzljYWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy5odG1sCkBAIC0wLDAgKzEsOSBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL211bHRpcGxlLWZyYW1lcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL25vLXBhZ2Ut
Y2FjaGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9u
by1wYWdlLWNhY2hlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5lYzQxOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9uby1wYWdlLWNhY2hlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE0IEBACitU
ZXN0cyB0aGF0IHBhZ2VzIHRoYXQgdXNlIEJhdHRlcnlTdGF0dXMgYXJlIG5vdCBwdXQgaW4gdGhl
IHBhZ2UgY2FjaGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitNYWluIHBhZ2Ug
b3BlbmluZyByZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMS5odG1sCityZXNvdXJjZXMvY2FjaGVkLXBh
Z2UtMS5odG1sIG9ubG9hZCBmaXJlZCwgY291bnQgPSAxCityZXNvdXJjZXMvY2FjaGVkLXBhZ2Ut
MS5odG1sIGFib3V0IHRvIG5hdmlnYXRlIHRvIHJlc291cmNlcy9jYWNoZWQtcGFnZS0yLmh0bWwK
K3Jlc291cmNlcy9jYWNoZWQtcGFnZS0yLmh0bWwgYWJvdXQgdG8gZ28gYmFjayB0byByZXNvdXJj
ZXMvY2FjaGVkLXBhZ2UtMS5odG1sCityZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMS5odG1sIG9ubG9h
ZCBmaXJlZCwgY291bnQgPSAyCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0
YXR1cy9uby1wYWdlLWNhY2hlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3Rh
dHVzL25vLXBhZ2UtY2FjaGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41MThkOTAwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVy
eVN0YXR1cy9uby1wYWdlLWNhY2hlLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbm8tcGFnZS1j
YWNoZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Jlc291cmNlcy9jYWNoZWQtcGFnZS0xLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Jlc291cmNlcy9jYWNoZWQt
cGFnZS0xLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEwMjE2Ywot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvcmVz
b3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRtbApAQCAtMCwwICsxLDEyIEBACis8c2NyaXB0PgorZnVu
Y3Rpb24gbG9hZE5leHQoKSB7CisgICAgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuYWRkRXZlbnRM
aXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBmdW5jdGlvbigpIHt9KTsKKyAgICB2YXIgcmVzdWx0
ID0gd2luZG93Lm9wZW5lci5yZXBvcnRQYWdlT25lT25sb2FkKCk7IAorICAgIGlmIChyZXN1bHQg
PT0gMSkgeworICAgICAgICB3aW5kb3cub3BlbmVyLmRlYnVnKCdyZXNvdXJjZXMvY2FjaGVkLXBh
Z2UtMS5odG1sIGFib3V0IHRvIG5hdmlnYXRlIHRvIHJlc291cmNlcy9jYWNoZWQtcGFnZS0yLmh0
bWwnKQorICAgICAgICAvLyBMb2NhdGlvbiBjaGFuZ2VzIG5lZWQgdG8gaGFwcGVuIG91dHNpZGUg
dGhlIG9ubG9hZCBoYW5kbGVyIHRvIGdlbmVyYXRlIGhpc3RvcnkgZW50cmllcy4KKyAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsgbG9jYXRpb24uaHJlZiA9ICdjYWNoZWQtcGFnZS0yLmh0
bWwnOyB9LCAwKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0ibG9hZE5leHQo
KSI+PC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1
cy9yZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9yZXNvdXJjZXMvY2FjaGVkLXBhZ2UtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjU0NzhmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Jlc291cmNlcy9jYWNoZWQtcGFnZS0yLmh0bWwKQEAg
LTAsMCArMSw4IEBACis8c2NyaXB0PgorZnVuY3Rpb24gaW5pdCgpIHsKKyAgICB3aW5kb3cub3Bl
bmVyLnBhZ2VUd29Mb2FkZWQgPSB0cnVlOworICAgIHdpbmRvdy5vcGVuZXIuZGVidWcoJ3Jlc291
cmNlcy9jYWNoZWQtcGFnZS0yLmh0bWwgYWJvdXQgdG8gZ28gYmFjayB0byByZXNvdXJjZXMvY2Fj
aGVkLXBhZ2UtMS5odG1sJyk7CisgICAgaGlzdG9yeS5iYWNrKCk7Cit9Cis8L3NjcmlwdD4KKzxi
b2R5IG9ubG9hZD0iaW5pdCgpIj48L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9CYXR0ZXJ5U3RhdHVzL3Jlc291cmNlcy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLW5ldy5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9yZXNvdXJjZXMvZXZlbnQt
YWZ0ZXItbmF2aWdhdGlvbi1uZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43NjYxYzFiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9yZXNvdXJjZXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi1uZXcuaHRtbApAQCAt
MCwwICsxLDE1IEBACis8aHRtbD4KKyAgPGhlYWQ+CisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICAg
VGVzdHMgZm9yIGEgY3Jhc2ggd2hlcmUgYW4gZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgdGhlIHBhZ2Ug
aGFzIGJlZW4gbmF2aWdhdGVkCisgICAgYXdheSB3aGVuIHRoZSBvcmlnaW5hbCBwYWdlIGlzIGlu
IHRoZSBwYWdlIGNhY2hlLjxicj48YnI+CisgICAgU1VDQ0VTUworICAgIDxzY3JpcHQ+CisgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLnNldE1vY2tCYXR0ZXJ5U3RhdHVzKCdjaGFyZ2luZ2NoYW5nZScsIHRy
dWUsIDMwMDAsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgMC41KTsKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0
PgorICA8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvYWRk
LWxpc3RlbmVyLWZyb20tY2FsbGJhY2suanMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5
U3RhdHVzL3NjcmlwdC10ZXN0cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWRmNmRlCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvYWRkLWxpc3Rl
bmVyLWZyb20tY2FsbGJhY2suanMKQEAgLTAsMCArMSw0OSBAQAorZGVzY3JpcHRpb24oJ1Rlc3Rz
IHRoYXQgYWRkaW5nIGEgbmV3IGV2ZW50IGxpc3RlbmVyIGZyb20gYSBjYWxsYmFjayB3b3JrcyBh
cyBleHBlY3RlZC4nKTsKKwordmFyIG1vY2tDaGFyZ2luZyA9IGZhbHNlOwordmFyIG1vY2tDaGFy
Z2luZ1RpbWUgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7Cit2YXIgbW9ja0Rpc2NoYXJnaW5n
VGltZSA9IDYwMDA7Cit2YXIgbW9ja0xldmVsID0gMC43OworCit2YXIgYmF0dGVyeSA9IG5hdmln
YXRvci53ZWJraXRCYXR0ZXJ5OworCitmdW5jdGlvbiBjaGVja0JhdHRlcnlTdGF0dXMoKSB7Cisg
ICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmcnLCAnbW9ja0NoYXJnaW5nJyk7CisgICAgc2hv
dWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmdUaW1lJywgJ21vY2tDaGFyZ2luZ1RpbWUnKTsKKyAgICBz
aG91bGRCZSgnYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUnLCAnbW9ja0Rpc2NoYXJnaW5nVGltZScp
OworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmxldmVsJywgJ21vY2tMZXZlbCcpOworfQorCit2YXIg
Zmlyc3RMaXN0ZW5lckV2ZW50cyA9IDA7CitmdW5jdGlvbiBmaXJzdExpc3RlbmVyKCkgeworICAg
IGNoZWNrQmF0dGVyeVN0YXR1cygpOworICAgIGlmICgrK2ZpcnN0TGlzdGVuZXJFdmVudHMgPT0g
MSkgeworICAgICAgICBiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywg
c2Vjb25kTGlzdGVuZXIpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrQmF0
dGVyeVN0YXR1cygnY2hhcmdpbmdjaGFuZ2UnLCBtb2NrQ2hhcmdpbmcsIG1vY2tDaGFyZ2luZ1Rp
bWUsIG1vY2tEaXNjaGFyZ2luZ1RpbWUsIG1vY2tMZXZlbCk7CisgICAgfQorICAgIGVsc2UgaWYg
KGZpcnN0TGlzdGVuZXJFdmVudHMgPiAyKQorICAgICAgICB0ZXN0RmFpbGVkKCdUb28gbWFueSBl
dmVudHMgZm9yIGZpcnN0IGxpc3RlbmVyLicpOworICAgIG1heWJlRmluaXNoVGVzdCgpOworfQor
Cit2YXIgc2Vjb25kTGlzdGVuZXJFdmVudHMgPSAwOworZnVuY3Rpb24gc2Vjb25kTGlzdGVuZXIo
KSB7CisgICAgY2hlY2tCYXR0ZXJ5U3RhdHVzKCk7CisgICAgaWYgKCsrc2Vjb25kTGlzdGVuZXJF
dmVudHMgPiAxKQorICAgICAgICB0ZXN0RmFpbGVkKCdUb28gbWFueSBldmVudHMgZm9yIHNlY29u
ZCBsaXN0ZW5lci4nKTsKKyAgICBtYXliZUZpbmlzaFRlc3QoKTsKK30KKworZnVuY3Rpb24gbWF5
YmVGaW5pc2hUZXN0KCkgeworICAgIGlmIChmaXJzdExpc3RlbmVyRXZlbnRzID09IDIgJiYgc2Vj
b25kTGlzdGVuZXJFdmVudHMgPT0gMSkKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Jh
dHRlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBmaXJzdExpc3RlbmVyKTsK
KworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5zZXRNb2NrQmF0dGVyeVN0YXR1cygnY2hhcmdpbmdjaGFuZ2UnLCBtb2NrQ2hhcmdpbmcs
IG1vY2tDaGFyZ2luZ1RpbWUsIG1vY2tEaXNjaGFyZ2luZ1RpbWUsIG1vY2tMZXZlbCk7CitlbHNl
CisgICAgZGVidWcoJ1RoaXMgdGVzdCBjYW4gbm90IGJlIHJ1biB3aXRob3V0IHRoZSBMYXlvdXRU
ZXN0Q29udHJvbGxlcicpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9iYXNp
Yy1vcGVyYXRpb24uanMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Njcmlw
dC10ZXN0cy9iYXNpYy1vcGVyYXRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMTlmNzkwMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Jh
dHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2Jhc2ljLW9wZXJhdGlvbi5qcwpAQCAtMCwwICsxLDIz
IEBACitkZXNjcmlwdGlvbignVGVzdHMgdGhlIGJhc2ljIG9wZXJhdGlvbiBvZiBCYXR0ZXJ5U3Rh
dHVzIHVzaW5nIHRoZSBtb2NrLicpOworCit2YXIgbW9ja0NoYXJnaW5nID0gZmFsc2U7Cit2YXIg
bW9ja0NoYXJnaW5nVGltZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKK3ZhciBtb2NrRGlz
Y2hhcmdpbmdUaW1lID0gNjAwMDsKK3ZhciBtb2NrTGV2ZWwgPSAwLjc7CisKK3ZhciBiYXR0ZXJ5
ID0gbmF2aWdhdG9yLndlYmtpdEJhdHRlcnk7CisKK2JhdHRlcnkuYWRkRXZlbnRMaXN0ZW5lcign
Y2hhcmdpbmdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFy
Z2luZycsICdtb2NrQ2hhcmdpbmcnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFyZ2luZ1Rp
bWUnLCAnbW9ja0NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmRpc2NoYXJn
aW5nVGltZScsICdtb2NrRGlzY2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnku
bGV2ZWwnLCAnbW9ja0xldmVsJyk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKworaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRN
b2NrQmF0dGVyeVN0YXR1cygnY2hhcmdpbmdjaGFuZ2UnLCBtb2NrQ2hhcmdpbmcsIG1vY2tDaGFy
Z2luZ1RpbWUsIG1vY2tEaXNjaGFyZ2luZ1RpbWUsIG1vY2tMZXZlbCk7CitlbHNlCisgICAgZGVi
dWcoJ1RoaXMgdGVzdCBjYW4gbm90IGJlIHJ1biB3aXRob3V0IHRoZSBMYXlvdXRUZXN0Q29udHJv
bGxlcicpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9ldmVudC1hZnRlci1u
YXZpZ2F0aW9uLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQt
dGVzdHMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5kZTdjNTEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5qcwpA
QCAtMCwwICsxLDEzIEBACitkZXNjcmlwdGlvbignVGVzdHMgZm9yIGEgY3Jhc2ggd2hlcmUgYW4g
ZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgdGhlIHBhZ2UgaGFzIGJlZW4gbmF2aWdhdGVkIGF3YXkgd2hl
biB0aGUgb3JpZ2luYWwgcGFnZSBpcyBpbiB0aGUgcGFnZSBjYWNoZS4nKTsKKworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlk
ZVByZWZlcmVuY2UoJ1dlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5JywgMSk7CitlbHNl
CisgICAgZGVidWcoJ1RoaXMgdGVzdCBjYW4gbm90IGJlIHJ1biB3aXRob3V0IHRoZSBMYXlvdXRU
ZXN0Q29udHJvbGxlcicpOworCitkb2N1bWVudC5ib2R5Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgewor
ICAgIG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hh
bmdlJywgZnVuY3Rpb24oKSB7IH0gKTsKKyAgICB3aW5kb3cubG9jYXRpb24gPSAicmVzb3VyY2Vz
L2V2ZW50LWFmdGVyLW5hdmlnYXRpb24tbmV3Lmh0bWwiOworfQorCit3aW5kb3cuanNUZXN0SXNB
c3luYyA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3Rh
dHVzL3NjcmlwdC10ZXN0cy9tdWx0aXBsZS1mcmFtZXMuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9tdWx0aXBsZS1mcmFtZXMuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3OWEyNAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL211bHRpcGxlLWZy
YW1lcy5qcwpAQCAtMCwwICsxLDU1IEBACitkZXNjcmlwdGlvbignVGVzdHMgdXNpbmcgQmF0dGVy
eVN0YXR1cyBmcm9tIG11bHRpcGxlIGZyYW1lcy4nKTsKKwordmFyIG1vY2tDaGFyZ2luZyA9IGZh
bHNlOwordmFyIG1vY2tDaGFyZ2luZ1RpbWUgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7Cit2
YXIgbW9ja0Rpc2NoYXJnaW5nVGltZSA9IDYwMDA7Cit2YXIgbW9ja0xldmVsID0gMC43OworCit2
YXIgYmF0dGVyeSA9IG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5OworCitmdW5jdGlvbiBjaGVja0Jh
dHRlcnlTdGF0dXMoKSB7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmcnLCAnbW9ja0No
YXJnaW5nJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmdUaW1lJywgJ21vY2tDaGFy
Z2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUnLCAnbW9j
a0Rpc2NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmxldmVsJywgJ21vY2tM
ZXZlbCcpOworfQorCitmdW5jdGlvbiBjaGVja0NoaWxkQmF0dGVyeVN0YXR1cygpIHsKKyAgICBz
aG91bGRCZSgnY2hpbGRCYXR0ZXJ5LmNoYXJnaW5nJywgJ21vY2tDaGFyZ2luZycpOworICAgIHNo
b3VsZEJlKCdjaGlsZEJhdHRlcnkuY2hhcmdpbmdUaW1lJywgJ21vY2tDaGFyZ2luZ1RpbWUnKTsK
KyAgICBzaG91bGRCZSgnY2hpbGRCYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZScsICdtb2NrRGlzY2hh
cmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUoJ2NoaWxkQmF0dGVyeS5sZXZlbCcsICdtb2NrTGV2
ZWwnKTsKK30KKwordmFyIGhhc01haW5GcmFtZUV2ZW50RmlyZWQgPSBmYWxzZTsKK2Z1bmN0aW9u
IG1haW5GcmFtZUxpc3RlbmVyKCkgeworICAgIGhhc01haW5GcmFtZUV2ZW50RmlyZWQgPSB0cnVl
OworICAgIG1heWJlRmluaXNoVGVzdCgpOworfQorCit2YXIgaGFzQ2hpbGRGcmFtZUV2ZW50Rmly
ZWQgPSBmYWxzZTsKK2Z1bmN0aW9uIGNoaWxkRnJhbWVMaXN0ZW5lcigpIHsKKyAgICBoYXNDaGls
ZEZyYW1lRXZlbnRGaXJlZCA9IHRydWU7CisgICAgbWF5YmVGaW5pc2hUZXN0KCk7Cit9CisKK2Z1
bmN0aW9uIG1heWJlRmluaXNoVGVzdCgpIHsKKyAgICBpZiAoaGFzTWFpbkZyYW1lRXZlbnRGaXJl
ZCAmJiBoYXNDaGlsZEZyYW1lRXZlbnRGaXJlZCkgeworICAgICAgICBjaGVja0JhdHRlcnlTdGF0
dXMoKTsKKyAgICAgICAgY2hlY2tDaGlsZEJhdHRlcnlTdGF0dXMoKTsKKyAgICAgICAgZmluaXNo
SlNUZXN0KCk7CisgICAgfQorfQorCit2YXIgY2hpbGRGcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2lmcmFtZScpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjaGlsZEZyYW1lKTsK
K3ZhciBjaGlsZEJhdHRlcnkgPSBjaGlsZEZyYW1lLmNvbnRlbnRXaW5kb3cubmF2aWdhdG9yLndl
YmtpdEJhdHRlcnkKK2NoaWxkQmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2NoYW5n
ZScsIGNoaWxkRnJhbWVMaXN0ZW5lcik7CitiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJn
aW5nY2hhbmdlJywgbWFpbkZyYW1lTGlzdGVuZXIpOworCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tCYXR0ZXJ5U3RhdHVz
KCdjaGFyZ2luZ2NoYW5nZScsIG1vY2tDaGFyZ2luZywgbW9ja0NoYXJnaW5nVGltZSwgbW9ja0Rp
c2NoYXJnaW5nVGltZSwgbW9ja0xldmVsKTsKK2Vsc2UKKyAgICBkZWJ1ZygnVGhpcyB0ZXN0IGNh
biBub3QgYmUgcnVuIHdpdGhvdXQgdGhlIExheW91dFRlc3RDb250cm9sbGVyJyk7CisKK3dpbmRv
dy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL25vLXBhZ2UtY2FjaGUuanMgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9uby1wYWdlLWNhY2hlLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NjNlMGMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9uby1w
YWdlLWNhY2hlLmpzCkBAIC0wLDAgKzEsMjMgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyB0aGF0IHBh
Z2VzIHRoYXQgdXNlIEJhdHRlcnlTdGF0dXMgYXJlIG5vdCBwdXQgaW4gdGhlIHBhZ2UgY2FjaGUu
Jyk7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0
Q2FuT3BlbldpbmRvd3MoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZl
cmVuY2UoJ1dlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5JywgMSk7Cit9IGVsc2UKKyAg
ICBkZWJ1ZygnVGhpcyB0ZXN0IGNhbiBub3QgYmUgcnVuIHdpdGhvdXQgdGhlIExheW91dFRlc3RD
b250cm9sbGVyJyk7CisKK3ZhciBwYWdlT25lT25sb2FkQ291bnQgPSAwOworZnVuY3Rpb24gcmVw
b3J0UGFnZU9uZU9ubG9hZCgpIHsKKyAgICArK3BhZ2VPbmVPbmxvYWRDb3VudDsKKyAgICBkZWJ1
ZygncmVzb3VyY2VzL2NhY2hlZC1wYWdlLTEuaHRtbCBvbmxvYWQgZmlyZWQsIGNvdW50ID0gJyAr
IHBhZ2VPbmVPbmxvYWRDb3VudCk7CisgICAgaWYgKHBhZ2VPbmVPbmxvYWRDb3VudCA9PSAyKSB7
CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KKyAgICByZXR1cm4gcGFnZU9uZU9ubG9h
ZENvdW50OworfQorCitkZWJ1ZygiTWFpbiBwYWdlIG9wZW5pbmcgcmVzb3VyY2VzL2NhY2hlZC1w
YWdlLTEuaHRtbCIpOword2luZG93Lm9wZW4oInJlc291cmNlcy9jYWNoZWQtcGFnZS0xLmh0bWwi
KTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2Ny
aXB0LXRlc3RzL3VwZGF0ZXMuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVz
L3NjcmlwdC10ZXN0cy91cGRhdGVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjYyZTE4Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0
ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy91cGRhdGVzLmpzCkBAIC0wLDAgKzEsNDMgQEAKK2Rlc2Ny
aXB0aW9uKCdUZXN0cyB0aGF0IHVwZGF0ZXMgdG8gdGhlIGJhdHRlcnkgZXZlbnQgY2F1c2VzIG5l
dyBldmVudHMgdG8gZmlyZS4nKTsKKwordmFyIG1vY2tDaGFyZ2luZyA9IGZhbHNlOwordmFyIG1v
Y2tDaGFyZ2luZ1RpbWUgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7Cit2YXIgbW9ja0Rpc2No
YXJnaW5nVGltZSA9IDYwMDA7Cit2YXIgbW9ja0xldmVsID0gMC43OworCit2YXIgYmF0dGVyeSA9
IG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5OworCitmdW5jdGlvbiBjaGVja0JhdHRlcnlTdGF0dXMo
KSB7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmcnLCAnbW9ja0NoYXJnaW5nJyk7Cisg
ICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmdUaW1lJywgJ21vY2tDaGFyZ2luZ1RpbWUnKTsK
KyAgICBzaG91bGRCZSgnYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUnLCAnbW9ja0Rpc2NoYXJnaW5n
VGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmxldmVsJywgJ21vY2tMZXZlbCcpOworfQor
CitmdW5jdGlvbiBzZXRNb2NrQmF0dGVyeVN0YXR1cygpIHsKKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrQmF0
dGVyeVN0YXR1cygnY2hhcmdpbmdjaGFuZ2UnLCBtb2NrQ2hhcmdpbmcsIG1vY2tDaGFyZ2luZ1Rp
bWUsIG1vY2tEaXNjaGFyZ2luZ1RpbWUsIG1vY2tMZXZlbCk7CisgICAgZWxzZQorICAgICAgICBk
ZWJ1ZygnVGhpcyB0ZXN0IGNhbiBub3QgYmUgcnVuIHdpdGhvdXQgdGhlIExheW91dFRlc3RDb250
cm9sbGVyJyk7Cit9CisKK2Z1bmN0aW9uIGZpcnN0TGlzdGVuZXIoKSB7CisgICAgY2hlY2tCYXR0
ZXJ5U3RhdHVzKCk7CisgICAgYmF0dGVyeS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2No
YW5nZScsIGZpcnN0TGlzdGVuZXIpOworICAgIGJhdHRlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hh
cmdpbmdjaGFuZ2UnLCB1cGRhdGVMaXN0ZW5lcik7CisgICAgbW9ja0NoYXJnaW5nID0gdHJ1ZTsK
KyAgICBtb2NrQ2hhcmdpbmdUaW1lID0gNzAwMDsKKyAgICBtb2NrRGlzY2hhcmdpbmdUaW1lID0g
TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOworICAgIG1vY2tMZXZlbCA9IDAuMzsKKwlzZXRNb2Nr
QmF0dGVyeVN0YXR1cygpOworfQorCitmdW5jdGlvbiB1cGRhdGVMaXN0ZW5lcihldmVudCkgewor
ICAgIGNoZWNrQmF0dGVyeVN0YXR1cyhldmVudCk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisK
K2JhdHRlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBmaXJzdExpc3RlbmVy
KTsKK3NldE1vY2tCYXR0ZXJ5U3RhdHVzKCk7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1
ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0
LXRlc3RzL3dpbmRvdy1wcm9wZXJ0eS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlT
dGF0dXMvc2NyaXB0LXRlc3RzL3dpbmRvdy1wcm9wZXJ0eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5mZWZlMzc2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvd2luZG93LXByb3BlcnR5LmpzCkBA
IC0wLDAgKzEsMjMgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyB0aGF0IHRoZSB3aW5kb3cubmF2aWdh
dG9yLmJhdHRlcnkgcHJvcGVydGllcyBhcmUgcHJlc2VudC4nKTsKKworZnVuY3Rpb24gaGFzT25C
YXR0ZXJ5UHJvcGVydHkoKQoreworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIHBy
b3BlcnR5IGluIG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5KSB7CisgICAgICAgIGlmIChwcm9wZXJ0
eSA9PSAnb25jaGFyZ2luZ2NoYW5nZScgfHwKKyAgICAgICAgICAgIHByb3BlcnR5ID09ICdvbmNo
YXJnaW5ndGltZWNoYW5nZScgfHwKKyAgICAgICAgICAgIHByb3BlcnR5ID09ICdvbmRpc2NoYXJn
aW5ndGltZWNoYW5nZScgfHwKKyAgICAgICAgICAgIHByb3BlcnR5ID09ICdvbmxldmVsY2hhbmdl
JykKKyAgICAgICAgICAgIHJlc3VsdCArPSAxOworICAgIH0KKyAgICBpZiAocmVzdWx0ID09IDQp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVU
cnVlKCJ0eXBlb2YgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkgPT0gJ29iamVjdCciKTsKK3Nob3Vs
ZEJlVHJ1ZSgiaGFzT25CYXR0ZXJ5UHJvcGVydHkoKSIpOworc2hvdWxkQmVUcnVlKCJuYXZpZ2F0
b3Iud2Via2l0QmF0dGVyeS5oYXNPd25Qcm9wZXJ0eSgnb25jaGFyZ2luZ2NoYW5nZScpIik7Citz
aG91bGRCZVRydWUoIm5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5Lmhhc093blByb3BlcnR5KCdvbmNo
YXJnaW5ndGltZWNoYW5nZScpIik7CitzaG91bGRCZVRydWUoIm5hdmlnYXRvci53ZWJraXRCYXR0
ZXJ5Lmhhc093blByb3BlcnR5KCdvbmRpc2NoYXJnaW5ndGltZWNoYW5nZScpIik7CitzaG91bGRC
ZVRydWUoIm5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5Lmhhc093blByb3BlcnR5KCdvbmxldmVsY2hh
bmdlJykiKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMv
dXBkYXRlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVz
L3VwZGF0ZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjViZTNlN2MKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5
U3RhdHVzL3VwZGF0ZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1Rlc3RzIHRoYXQg
dXBkYXRlcyB0byB0aGUgYmF0dGVyeSBldmVudCBjYXVzZXMgbmV3IGV2ZW50cyB0byBmaXJlLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlz
IG1vY2tDaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBtb2NrQ2hhcmdpbmdU
aW1lCitQQVNTIGJhdHRlcnkuZGlzY2hhcmdpbmdUaW1lIGlzIG1vY2tEaXNjaGFyZ2luZ1RpbWUK
K1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBtb2NrTGV2ZWwKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBp
cyBtb2NrQ2hhcmdpbmcKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZ1RpbWUgaXMgbW9ja0NoYXJnaW5n
VGltZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBtb2NrRGlzY2hhcmdpbmdUaW1l
CitQQVNTIGJhdHRlcnkubGV2ZWwgaXMgbW9ja0xldmVsCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9kb20vQmF0dGVyeVN0YXR1cy91cGRhdGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9C
YXR0ZXJ5U3RhdHVzL3VwZGF0ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44MjI1MjY5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy91cGRhdGVzLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvdXBkYXRlcy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3dpbmRvdy1wcm9wZXJ0eS1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3dpbmRvdy1wcm9wZXJ0eS1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlNmZkNQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvd2luZG93LXByb3Bl
cnR5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1IEBACitUZXN0cyB0aGF0IHRoZSB3aW5kb3cu
bmF2aWdhdG9yLmJhdHRlcnkgcHJvcGVydGllcyBhcmUgcHJlc2VudC4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1MgdHlwZW9mIG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5ID09
ICdvYmplY3QnIGlzIHRydWUKK1BBU1MgaGFzT25CYXR0ZXJ5UHJvcGVydHkoKSBpcyB0cnVlCitQ
QVNTIG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5Lmhhc093blByb3BlcnR5KCdvbmNoYXJnaW5nY2hh
bmdlJykgaXMgdHJ1ZQorUEFTUyBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5oYXNPd25Qcm9wZXJ0
eSgnb25jaGFyZ2luZ3RpbWVjaGFuZ2UnKSBpcyB0cnVlCitQQVNTIG5hdmlnYXRvci53ZWJraXRC
YXR0ZXJ5Lmhhc093blByb3BlcnR5KCdvbmRpc2NoYXJnaW5ndGltZWNoYW5nZScpIGlzIHRydWUK
K1BBU1MgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29ubGV2ZWxjaGFu
Z2UnKSBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy93
aW5kb3ctcHJvcGVydHkuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMv
d2luZG93LXByb3BlcnR5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OWYzZmQzYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlT
dGF0dXMvd2luZG93LXByb3BlcnR5Lmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvd2luZG93LXBy
b3BlcnR5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCBhNmNi
M2JkLi4xM2M0NTZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90
ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC0xMTQsNiArMTE0LDkgQEAgQlVHQ1IxMDM5MzkgU0tJ
UCA6IGh0dHAvdGVzdHMvYXBwY2FjaGUvd3JvbmctY29udGVudC10eXBlLmh0bWwgPSBURVhUCiAv
LyBWaWJyYXRpb24gQVBJIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGluIHRoZSBjaHJvbWl1bSBwb3J0
LgogQlVHV0s3MjAxMCBTS0lQIDogZmFzdC9kb20vbmF2aWdhdG9yLXZpYnJhdGlvbi5odG1sID0g
RkFJTAogCisvLyBCYXR0ZXJ5IFN0YXR1cyBBUEkgaXMgbm90IHN1cHBvcnRlZCB5ZXQgaW4gdGhl
IGNocm9taXVtIHBvcnQuCitCVUdXSzYyNjk4IFNLSVAgOiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVz
ID0gUEFTUyBGQUlMCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBXT05URklYIFRFU1RTCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA2NGQ4ZmU1Li5kNjIzMTk1IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtMzk0LDYgKzM5NCw5IEBAIGh0dHAvdGVzdHMvc2VjdXJp
dHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3RlLWltYWdlLWFsbG93ZWQtd2l0aC1jcmVkZW50aWFs
cy5odG1sCiAjVmlicmF0aW9uIEFQSSBzdXBwb3J0IG5vdCB5ZXQuIGh0dHA6Ly93ZWJraXQub3Jn
L2IvNzIwMTAKIGZhc3QvZG9tL25hdmlnYXRvci12aWJyYXRpb24uaHRtbAogCisjQmF0dGVyeSBT
dGF0dXMgQVBJIHN1cHBvcnQgbm90IHlldC4gaHR0cDovL3dlYmtpdC5vcmcvYi82MjY5OAorZmFz
dC9kb20vQmF0dGVyeVN0YXR1cworCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFRFU1RTIEZB
SUxJTkcKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKaW5k
ZXggYzc3MjgxYy4uNmIxZTBhNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKQEAgLTU2Nywz
ICs1NjcsNyBAQCBmYXN0L211dGF0aW9uL2VuZC1vZi10YXNrLWRlbGl2ZXJ5Lmh0bWwKICMgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDEwCiAjIE5lZWRzIFBhZ2VD
bGllbnRzOjp2aWJyYXRpb25DbGllbnQoKSBpbXBsZW1lbnRhdGlvbi4KIGZhc3QvZG9tL25hdmln
YXRvci12aWJyYXRpb24uaHRtbAorCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MjY5OAorIyBOZWVkcyBCYXR0ZXJ5Q2xpZW50IGltcGxlbWVudGF0aW9uLgorZmFz
dC9kb20vQmF0dGVyeVN0YXR1cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
U2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKaW5kZXggYjQ3Y2M4NS4u
ZGYyODUzNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCkBAIC0zNDgsNiArMzQ4LDkgQEAgZmFz
dC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1hcnJheXMuaHRtbAogI1ZpYnJhdGlvbiBB
UEkgaXMgbm90IGltcGxlbWVudGVkLgogZmFzdC9kb20vbmF2aWdhdG9yLXZpYnJhdGlvbi5odG1s
CiAKKyNCYXR0ZXJ5IFN0YXR1cyBBUEkgaXMgbm90IGltcGxlbWVudGVkLgorZmFzdC9kb20vQmF0
dGVyeVN0YXR1cworCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAjCiAjICAgICAgIERyYWcgYW5kIERy
b3AgU3VwcG9ydCBpbiBEUlQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAjCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PSAjCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4
IDQyNDcyMmQuLjE0OWI1MjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9T
a2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC0xNjU5LDMg
KzE2NTksNiBAQCBmYXN0L3JlcGFpbnQvdHJhbnNmb3JtLWFic29sdXRlLWluLXBvc2l0aW9uZWQt
Y29udGFpbmVyLmh0bWwKIAogI1ZpYnJhdGlvbiBBUEkgaXMgbm90IGltcGxlbWVudGVkLgogZmFz
dC9kb20vbmF2aWdhdG9yLXZpYnJhdGlvbi5odG1sCisKKyNCYXR0ZXJ5IFN0YXR1cyBBUEkgaXMg
bm90IGltcGxlbWVudGVkLgorZmFzdC9kb20vQmF0dGVyeVN0YXR1cwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1NraXBwZWQKaW5kZXggOTA4YWUyMS4uYjg3ZGM2ZCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW5jYWlyby9Ta2lwcGVkCkBAIC0yMDU3LDMgKzIwNTcsNiBAQCBmYXN0L211dGF0aW9u
L2VuZC1vZi10YXNrLWRlbGl2ZXJ5Lmh0bWwKIAogI1ZpYnJhdGlvbiBBUEkgaXMgbm90IGltcGxl
bWVudGVkLgogZmFzdC9kb20vbmF2aWdhdG9yLXZpYnJhdGlvbi5odG1sCisKKyNCYXR0ZXJ5IFN0
YXR1cyBBUEkgaXMgbm90IGltcGxlbWVudGVkLgorZmFzdC9kb20vQmF0dGVyeVN0YXR1cwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCBiNmJjMDU1Li4zMWNkNGRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dApAQCAtMjMzNiw2ICsyMzM2LDIzIEBAIFNFVChXZWJDb3JlVGVzdFN1cHBvcnRfU09VUkNFUwog
ICAgIHRlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAKICkKIAorSUYgKEVOQUJMRV9CQVRURVJZ
X1NUQVRVUykKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAg
ICAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvYmF0dGVyeSIKKyAgICApCisgICAgTElTVChB
UFBFTkQgV2ViQ29yZV9JRExfRklMRVMKKyAgICAgICAgTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRv
ckJhdHRlcnkuaWRsCisgICAgICAgIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5pZGwK
KyAgICApCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIHBsYXRmb3Jt
L21vY2svQmF0dGVyeUNsaWVudE1vY2suY3BwCisgICAgICAgIE1vZHVsZXMvYmF0dGVyeS9OYXZp
Z2F0b3JCYXR0ZXJ5LmNwcAorICAgICAgICBNb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xs
ZXIuY3BwCisgICAgICAgIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHAKKyAgICAg
ICAgTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuY3BwCisgICAgKQorRU5ESUYgKCkKKwog
IyBNb2R1bGVzIHRoYXQgdGhlIGJpbmRpbmdzIGdlbmVyYXRvciBzY3JpcHRzIG1heSB1c2UKIFNF
VChTQ1JJUFRTX1JFU09MVkVfU1VQUExFTUVOVEFMCiAgICAgJHtXRUJDT1JFX0RJUn0vYmluZGlu
Z3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2NzM2ZTA0Li4zN2I2MzlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA2IEBACisyMDEyLTAzLTA2ICBLaWhvbmcgS3dvbiAgPGtp
aG9uZy5rd29uQHNhbXN1bmcuY29tPgorCisgICAgICAgIFN1cHBvcnQgZm9yIEJhdHRlcnkgU3Rh
dHVzIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjI2OTgKKworICAgICAgICBUaGlzIEFQSSBpcyBpbXBsZW1lbnRlZCB1bmRlciB0aGUgTmF2aWdh
dG9yIGNsYXNzLgorICAgICAgICBUaGVyZSBhcmUgZm91ciB0eXBlcyBvZiBldmVudHM6IG9uY2hh
cmdpbmdjaGFuZ2UsIG9uY2hhcmdpbmd0aW1lY2hhbmdlLCBvbmRpc2NoYXJnaW5ndGltZWNoYW5n
ZSwgb25sZXZlbGNoYW5nZS4KKyAgICAgICAgQWxsIGV2ZW50cyBhcmUgb3BlcmF0ZWQgYmFzZWQg
b24gYSBjYWxsYmFjayBtZWNoYW5pc20uCisgICAgICAgIFdoZW4gYmF0dGVyeSBldmVudCBoYXMg
cmFpc2VkLCB0aGUgZXZlbnQgbGlzdGVuZXIgd2F0Y2hpbmcgYmF0dGVyeSBzdGF0dXMgaGFzIHRv
IGJlIGNhbGxlZC4KKyAgICAgICAgVGhlIGJhdHRlcnkgc3RhdHVzIGNhbiBiZSBhY2Nlc3NlZCB1
c2luZyBCYXR0ZXJ5TWFuYWdlcihuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeSkuCisgICAgICAgIGh0
dHA6Ly93d3cudzMub3JnL1RSL2JhdHRlcnktc3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVz
L2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9t
L0JhdHRlcnlTdGF0dXMvYmFzaWMtb3BlcmF0aW9uLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qv
ZG9tL0JhdHRlcnlTdGF0dXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5odG1sCisgICAgICAgICAg
ICAgICBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy5odG1sCisgICAgICAg
ICAgICAgICBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL25vLXBhZ2UtY2FjaGUuaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC9kb20vQmF0dGVyeVN0YXR1cy91cGRhdGVzLmh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvd2luZG93LXByb3BlcnR5Lmh0bWwKKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q2xp
ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCYXR0ZXJ5Q2xpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnQ6On5CYXR0ZXJ5Q2xpZW50KToKKyAg
ICAgICAgKiBNb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6OkJh
dHRlcnlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjp+
QmF0dGVyeUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6YWRkTGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6OnJlbW92ZUxpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjpkaWRDaGFuZ2VCYXR0ZXJ5
U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjpzdXBwbGVtZW50
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6aXNBY3RpdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvdmlkZUJhdHRlcnlUbyk6CisgICAgICAgICogTW9kdWxlcy9i
YXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChCYXR0ZXJ5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29u
dHJvbGxlcjo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjpm
cm9tKToKKyAgICAgICAgKiBNb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6fkJhdHRlcnlNYW5h
Z2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpCYXR0ZXJ5TWFuYWdlcik6
CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6Y2hhcmdpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmNoYXJnaW5nVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXR0ZXJ5TWFuYWdlcjo6ZGlzY2hhcmdpbmdUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
dHRlcnlNYW5hZ2VyOjpsZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6
ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L0JhdHRl
cnlNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCYXR0ZXJ5
TWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6aW50ZXJmYWNlTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6YmF0dGVyeUNvbnRyb2xs
ZXJEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmV2ZW50VGFy
Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6ZW5zdXJlRXZlbnRU
YXJnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpyZWZFdmVudFRh
cmdldCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6ZGVyZWZFdmVudFRhcmdl
dCk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmlkbDogQWRkZWQu
CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1czo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6OkJhdHRlcnlTdGF0dXMpOgorICAg
ICAgICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5U3RhdHVzLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
dHRlcnlTdGF0dXM6OmNoYXJnaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6
OmNoYXJnaW5nVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzOjpkaXNjaGFy
Z2luZ1RpbWUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1czo6bGV2ZWwpOgorICAg
ICAgICAqIE1vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckJhdHRlcnk6Ok5hdmln
YXRvckJhdHRlcnkpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yQmF0dGVyeTo6fk5hdmln
YXRvckJhdHRlcnkpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yQmF0dGVyeTo6d2Via2l0
QmF0dGVyeSk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JCYXR0ZXJ5Ojpmcm9tKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckJhdHRlcnk6OmJhdHRlcnlNYW5hZ2VyKToKKyAgICAg
ICAgKiBNb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoTmF2aWdhdG9yQmF0dGVyeSk6CisgICAgICAgICogTW9kdWxl
cy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgorICAgICAgICAqIGRvbS9FdmVudE5hbWVzLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluOgorICAgICAgICAqIHBsYXRm
b3JtL21vY2svQmF0dGVyeUNsaWVudE1vY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudE1vY2s6OkJhdHRlcnlDbGllbnRNb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRNb2NrOjp+QmF0dGVyeUNsaWVudE1v
Y2spOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudE1vY2s6OnNldENvbnRyb2xsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudE1vY2s6OnN0YXJ0VXBkYXRpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudE1vY2s6OnN0b3BVcGRhdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50TW9jazo6YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudE1vY2s6OnNldEJhdHRlcnlTdGF0
dXMpOgorICAgICAgICAqIHBsYXRmb3JtL21vY2svQmF0dGVyeUNsaWVudE1vY2suaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEJhdHRlcnlDbGllbnRNb2NrKToKKwogMjAx
Mi0wMy0wNiAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
W1Y4XVtQZXJmb3JtYW5jZV0gT3B0aW1pemUgVjggYmluZGluZ3MgZm9yIEhUTUxFbGVtZW50LmNs
YXNzTGlzdCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0
ZXJ5Q2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNsaWVu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNTYzMzYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNsaWVudC5o
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0ZXJ5Q2xpZW50X2gKKyNkZWZpbmUgQmF0
dGVyeUNsaWVudF9oCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeUNvbnRyb2xsZXI7CitjbGFzcyBQYWdlOworCitjbGFz
cyBCYXR0ZXJ5Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5CYXR0ZXJ5Q2xpZW50KCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJvbGxlcihCYXR0ZXJ5Q29udHJvbGxlciop
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZygpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RvcFVwZGF0aW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiYXR0ZXJ5Q29udHJv
bGxlckRlc3Ryb3llZCgpID0gMDsKK307CisKK3ZvaWQgcHJvdmlkZUJhdHRlcnlUbyhQYWdlKiwg
QmF0dGVyeUNsaWVudCopOworCit9CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworI2VuZGlm
IC8vIEJhdHRlcnlDbGllbnRfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9i
YXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi43YWQxMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDkwIEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYXR0ZXJ5Q29udHJvbGxlci5oIgorCisjaWYgRU5B
QkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudC5oIgorI2luY2x1
ZGUgIkJhdHRlcnlTdGF0dXMuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0JhdHRlcnlDb250cm9sbGVyOjpCYXR0ZXJ5Q29udHJvbGxlcihCYXR0ZXJ5Q2xp
ZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xp
ZW50KTsKKyAgICBtX2NsaWVudC0+c2V0Q29udHJvbGxlcih0aGlzKTsKK30KKworQmF0dGVyeUNv
bnRyb2xsZXI6On5CYXR0ZXJ5Q29udHJvbGxlcigpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2xpc3RlbmVycy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9saXN0ZW5lcnNbaV0tPmJh
dHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCk7CisgICAgbV9jbGllbnQtPmJhdHRlcnlDb250cm9s
bGVyRGVzdHJveWVkKCk7Cit9CisKK1Bhc3NPd25QdHI8QmF0dGVyeUNvbnRyb2xsZXI+IEJhdHRl
cnlDb250cm9sbGVyOjpjcmVhdGUoQmF0dGVyeUNsaWVudCogY2xpZW50KQoreworICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQmF0dGVyeUNvbnRyb2xsZXIoY2xpZW50KSk7Cit9CisKK3ZvaWQgQmF0
dGVyeUNvbnRyb2xsZXI6OmFkZExpc3RlbmVyKEJhdHRlcnlNYW5hZ2VyKiBiYXR0ZXJ5TWFuYWdl
cikKK3sKKyAgICBtX2xpc3RlbmVycy5hcHBlbmQoYmF0dGVyeU1hbmFnZXIpOworICAgIG1fY2xp
ZW50LT5zdGFydFVwZGF0aW5nKCk7Cit9CisKK3ZvaWQgQmF0dGVyeUNvbnRyb2xsZXI6OnJlbW92
ZUxpc3RlbmVyKEJhdHRlcnlNYW5hZ2VyKiBiYXR0ZXJ5TWFuYWdlcikKK3sKKyAgICBtX2xpc3Rl
bmVycy5yZW1vdmUobV9saXN0ZW5lcnMuZmluZChiYXR0ZXJ5TWFuYWdlcikpOworICAgIGlmICht
X2xpc3RlbmVycy5pc0VtcHR5KCkpCisgICAgICAgIG1fY2xpZW50LT5zdG9wVXBkYXRpbmcoKTsK
K30KKwordm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0
ZXJ5U3RhdHVzKQoreworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2
ZW50VHlwZSwgZmFsc2UsIGZhbHNlKTsKKyAgICBSZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVy
eSA9IGJhdHRlcnlTdGF0dXM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xpc3RlbmVy
cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9saXN0ZW5lcnNbaV0tPmRpZENoYW5nZUJhdHRlcnlT
dGF0dXMoZXZlbnQsIGJhdHRlcnkpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIEJhdHRlcnlD
b250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChB
dG9taWNTdHJpbmcsIG5hbWUsICgiQmF0dGVyeUNvbnRyb2xsZXIiKSk7CisgICAgcmV0dXJuIG5h
bWU7Cit9CisKK2Jvb2wgQmF0dGVyeUNvbnRyb2xsZXI6OmlzQWN0aXZlKFBhZ2UqIHBhZ2UpCit7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KEJhdHRlcnlDb250cm9sbGVyOjpmcm9tKHBh
Z2UpKTsKK30KKwordm9pZCBwcm92aWRlQmF0dGVyeVRvKFBhZ2UqIHBhZ2UsIEJhdHRlcnlDbGll
bnQqIGNsaWVudCkKK3sKKyAgICBTdXBwbGVtZW50PFBhZ2U+Ojpwcm92aWRlVG8ocGFnZSwgQmF0
dGVyeUNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKCksIEJhdHRlcnlDb250cm9sbGVyOjpjcmVh
dGUoY2xpZW50KSk7Cit9CisKK30KKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc1YTA1MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5oCkBA
IC0wLDAgKzEsNjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0ZXJ5Q29udHJvbGxlcl9oCisjZGVmaW5lIEJh
dHRlcnlDb250cm9sbGVyX2gKKworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworI2luY2x1
ZGUgIkJhdHRlcnlNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEJhdHRlcnlDbGllbnQ7CisKK2NsYXNzIEJhdHRlcnlDb250cm9sbGVy
IDogcHVibGljIFN1cHBsZW1lbnQ8UGFnZT4geworcHVibGljOgorICAgIH5CYXR0ZXJ5Q29udHJv
bGxlcigpOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8QmF0dGVyeUNvbnRyb2xsZXI+IGNyZWF0
ZShCYXR0ZXJ5Q2xpZW50Kik7CisKKyAgICB2b2lkIGFkZExpc3RlbmVyKEJhdHRlcnlNYW5hZ2Vy
Kik7CisgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihCYXR0ZXJ5TWFuYWdlciopOworICAgIHZvaWQg
ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPik7CisKKyAgICBCYXR0ZXJ5Q2xpZW50KiBjbGllbnQoKSBj
b25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorCisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0aWMgQmF0dGVyeUNvbnRyb2xsZXIqIGZyb20o
UGFnZSogcGFnZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmF0dGVyeUNvbnRyb2xsZXIqPihTdXBw
bGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1cHBsZW1lbnROYW1lKCkpKTsgfQorICAgIHN0YXRp
YyBib29sIGlzQWN0aXZlKFBhZ2UqKTsKKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5Q29udHJvbGxl
cihCYXR0ZXJ5Q2xpZW50Kik7CisKKyAgICBCYXR0ZXJ5Q2xpZW50KiBtX2NsaWVudDsKKyAgICB0
eXBlZGVmIFZlY3RvcjxCYXR0ZXJ5TWFuYWdlcio+IExpc3RlbmVyVmVjdG9yOworICAgIExpc3Rl
bmVyVmVjdG9yIG1fbGlzdGVuZXJzOworfTsKKworfQorCisjZW5kaWYgLy8gQkFUVEVSWV9TVEFU
VVMKKyNlbmRpZiAvLyBCYXR0ZXJ5Q29udHJvbGxlcl9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjYxODZmZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlNYW5hZ2VyLmgiCisKKyNpZiBF
TkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5Q29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkJhdHRlcnlTdGF0dXMuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisjaW5jbHVkZSA8bGltaXRzPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8QmF0dGVyeU1hbmFnZXI+IEJhdHRlcnlN
YW5hZ2VyOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogZXhlY0NvbnRleHQsIE5hdmln
YXRvciogbmF2aWdhdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmF0dGVyeU1hbmFn
ZXIoZXhlY0NvbnRleHQsIG5hdmlnYXRvcikpOworfQorCitCYXR0ZXJ5TWFuYWdlcjo6fkJhdHRl
cnlNYW5hZ2VyKCkKK3sKKyAgICBpZiAobV9iYXR0ZXJ5Q29udHJvbGxlcikKKyAgICAgICAgbV9i
YXR0ZXJ5Q29udHJvbGxlci0+cmVtb3ZlTGlzdGVuZXIodGhpcyk7Cit9CisKK0JhdHRlcnlNYW5h
Z2VyOjpCYXR0ZXJ5TWFuYWdlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBleGVjQ29udGV4dCwg
TmF2aWdhdG9yKiBuYXZpZ2F0b3IpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoZXhl
Y0NvbnRleHQpCisgICAgLCBtX2JhdHRlcnlDb250cm9sbGVyKEJhdHRlcnlDb250cm9sbGVyOjpm
cm9tKG5hdmlnYXRvci0+ZnJhbWUoKS0+cGFnZSgpKSkKKyAgICAsIG1fYmF0dGVyeVN0YXR1cygw
KQoreworICAgIG1fYmF0dGVyeUNvbnRyb2xsZXItPmFkZExpc3RlbmVyKHRoaXMpOworfQorCiti
b29sIEJhdHRlcnlNYW5hZ2VyOjpjaGFyZ2luZygpCit7CisgICAgcmV0dXJuIG1fYmF0dGVyeVN0
YXR1cy0+Y2hhcmdpbmcoKTsKK30KKworZG91YmxlIEJhdHRlcnlNYW5hZ2VyOjpjaGFyZ2luZ1Rp
bWUoKQoreworICAgIGlmICghbV9iYXR0ZXJ5U3RhdHVzLT5jaGFyZ2luZygpKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworCisgICAgcmV0
dXJuIG1fYmF0dGVyeVN0YXR1cy0+Y2hhcmdpbmdUaW1lKCk7Cit9CisKK2RvdWJsZSBCYXR0ZXJ5
TWFuYWdlcjo6ZGlzY2hhcmdpbmdUaW1lKCkKK3sKKyAgICBpZiAobV9iYXR0ZXJ5U3RhdHVzLT5j
aGFyZ2luZygpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpOworCisgICAgcmV0dXJuIG1fYmF0dGVyeVN0YXR1cy0+ZGlzY2hhcmdpbmdUaW1l
KCk7Cit9CisKK2RvdWJsZSBCYXR0ZXJ5TWFuYWdlcjo6bGV2ZWwoKQoreworICAgIHJldHVybiBt
X2JhdHRlcnlTdGF0dXMtPmxldmVsKCk7Cit9CisKK3ZvaWQgQmF0dGVyeU1hbmFnZXI6OmRpZENo
YW5nZUJhdHRlcnlTdGF0dXMoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8QmF0
dGVyeVN0YXR1cz4gYmF0dGVyeVN0YXR1cykKK3sKKyAgICBtX2JhdHRlcnlTdGF0dXMgPSBiYXR0
ZXJ5U3RhdHVzOworICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmZiODU5MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaApAQCAtMCwwICsxLDgwIEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgQmF0dGVyeU1hbmFnZXJfaAorI2RlZmluZSBCYXR0ZXJ5TWFuYWdlcl9oCisKKyNpZiBF
TkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzLmgiCisjaW5j
bHVkZSAiRXZlbnRUYXJnZXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCYXR0
ZXJ5Q29udHJvbGxlcjsKK2NsYXNzIE5hdmlnYXRvcjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CisKK2NsYXNzIEJhdHRlcnlNYW5hZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8QmF0dGVy
eU1hbmFnZXI+LCBwdWJsaWMgRXZlbnRUYXJnZXQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkJh
dHRlcnlNYW5hZ2VyKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmF0dGVyeU1hbmFnZXI+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTmF2aWdhdG9yKik7CisKKyAgICB2aXJ0dWFs
IGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgeyByZXR1cm4g
ZXZlbnROYW1lcygpLmludGVyZmFjZUZvckJhdHRlcnlNYW5hZ2VyOyB9CisgICAgdmlydHVhbCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OyB9CisKKyAgICBib29sIGNoYXJnaW5nKCk7
CisgICAgZG91YmxlIGNoYXJnaW5nVGltZSgpOworICAgIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUo
KTsKKyAgICBkb3VibGUgbGV2ZWwoKTsKKworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIoY2hhcmdpbmdjaGFuZ2UpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoY2hhcmdpbmd0aW1lY2hhbmdlKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKGRpc2NoYXJnaW5ndGltZWNoYW5nZSk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9M
SVNURU5FUihsZXZlbGNoYW5nZSk7CisKKyAgICB2b2lkIGRpZENoYW5nZUJhdHRlcnlTdGF0dXMo
UGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pOworICAgIHZvaWQg
YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKSB7IG1fYmF0dGVyeUNvbnRyb2xsZXIgPSAwOyB9
CisKKyAgICB1c2luZyBSZWZDb3VudGVkPEJhdHRlcnlNYW5hZ2VyPjo6cmVmOworICAgIHVzaW5n
IFJlZkNvdW50ZWQ8QmF0dGVyeU1hbmFnZXI+OjpkZXJlZjsKKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVu
dFRhcmdldERhdGE7IH0KKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRU
YXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CisKK3ByaXZhdGU6Cisg
ICAgQmF0dGVyeU1hbmFnZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE5hdmlnYXRvciopOwor
CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Owor
CisgICAgLy8gRXZlbnRUYXJnZXQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIHJl
ZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFy
Z2V0KCkgeyBkZXJlZigpOyB9CisKKyAgICBCYXR0ZXJ5Q29udHJvbGxlciogbV9iYXR0ZXJ5Q29u
dHJvbGxlcjsKKyAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CisgICAgUmVm
UHRyPEJhdHRlcnlTdGF0dXM+IG1fYmF0dGVyeVN0YXR1czsKK307CisKK30KKworI2VuZGlmIC8v
IEJBVFRFUllfU1RBVFVTCisjZW5kaWYgLy8gQmF0dGVyeU1hbmFnZXJfaAorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaWRsIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmlkbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDVhZWIxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmlkbApAQCAtMCwwICsx
LDQ5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKK21vZHVsZSB3aW5kb3cgeworCisgICAgLy8gaHR0cDovL2Rldi53My5vcmcvMjAw
OS9kYXAvc3lzdGVtLWluZm8vYmF0dGVyeS1zdGF0dXMuaHRtbAorICAgIGludGVyZmFjZSBbCisg
ICAgICAgIENvbmRpdGlvbmFsPUJBVFRFUllfU1RBVFVTLAorICAgICAgICBFdmVudFRhcmdldAor
ICAgICBdIEJhdHRlcnlNYW5hZ2VyIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xl
YW4gY2hhcmdpbmc7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgY2hhcmdpbmdU
aW1lOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIGRpc2NoYXJnaW5nVGltZTsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGRvdWJsZSBsZXZlbDsKKworICAgICAgICBhdHRy
aWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNoYXJnaW5nY2hhbmdlOworICAgICAgICBhdHRyaWJ1dGUg
RXZlbnRMaXN0ZW5lciBvbmNoYXJnaW5ndGltZWNoYW5nZTsKKyAgICAgICAgYXR0cmlidXRlIEV2
ZW50TGlzdGVuZXIgb25kaXNjaGFyZ2luZ3RpbWVjaGFuZ2U7CisgICAgICAgIGF0dHJpYnV0ZSBF
dmVudExpc3RlbmVyIG9ubGV2ZWxjaGFuZ2U7CisKKyAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50
ZXJmYWNlCisgICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNl
Q2FwdHVyZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIg
bGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxd
IGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBF
dmVudCBldnQpCisgICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOworICAgIH07CisK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlT
dGF0dXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZjUzMGIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeVN0YXR1cy5j
cHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBF
bGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0
dGVyeVN0YXR1cy5oIgorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSA8
bGltaXRzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8QmF0dGVyeVN0YXR1
cz4gQmF0dGVyeVN0YXR1czo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJh
dHRlcnlTdGF0dXMpOworfQorCitQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IEJhdHRlcnlTdGF0
dXM6OmNyZWF0ZShib29sIGNoYXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlz
Y2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2ZWwpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBC
YXR0ZXJ5U3RhdHVzKGNoYXJnaW5nLCBjaGFyZ2luZ1RpbWUsIGRpc2NoYXJnaW5nVGltZSwgbGV2
ZWwpKTsKK30KKworQmF0dGVyeVN0YXR1czo6QmF0dGVyeVN0YXR1cygpCisgICAgOiBtX2NoYXJn
aW5nKHRydWUpCisgICAgLCBtX2NoYXJnaW5nVGltZSgwKQorICAgICwgbV9kaXNjaGFyZ2luZ1Rp
bWUoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQorICAgICwgbV9sZXZl
bCgxKQoreworfQorCitCYXR0ZXJ5U3RhdHVzOjpCYXR0ZXJ5U3RhdHVzKGJvb2wgY2hhcmdpbmcs
IGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZl
bCkKKyAgICA6IG1fY2hhcmdpbmcoY2hhcmdpbmcpCisgICAgLCBtX2NoYXJnaW5nVGltZShjaGFy
Z2luZ1RpbWUpCisgICAgLCBtX2Rpc2NoYXJnaW5nVGltZShkaXNjaGFyZ2luZ1RpbWUpCisgICAg
LCBtX2xldmVsKGxldmVsKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBCQVRURVJZX1NUQVRVUworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2JhdHRlcnkvQmF0dGVyeVN0YXR1cy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5
L0JhdHRlcnlTdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQ1
MWFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0Jh
dHRlcnlTdGF0dXMuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQmF0dGVyeVN0YXR1c19o
CisjZGVmaW5lIEJhdHRlcnlTdGF0dXNfaAorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQor
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJhdHRlcnlTdGF0dXMgOiBwdWJsaWMg
UmVmQ291bnRlZDxCYXR0ZXJ5U3RhdHVzPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QmF0dGVyeVN0YXR1cz4gY3JlYXRlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmF0dGVy
eVN0YXR1cz4gY3JlYXRlKGJvb2wgY2hhcmdpbmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJs
ZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZlbCk7CisKKyAgICBib29sIGNoYXJnaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9jaGFyZ2luZzsgfQorICAgIGRvdWJsZSBjaGFyZ2luZ1RpbWUoKSBj
b25zdCAgeyByZXR1cm4gbV9jaGFyZ2luZ1RpbWU7IH0KKyAgICBkb3VibGUgZGlzY2hhcmdpbmdU
aW1lKCkgY29uc3QgIHsgcmV0dXJuIG1fZGlzY2hhcmdpbmdUaW1lOyB9CisgICAgZG91YmxlIGxl
dmVsKCkgY29uc3QgIHsgcmV0dXJuIG1fbGV2ZWw7IH0KKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5
U3RhdHVzKCk7CisgICAgQmF0dGVyeVN0YXR1cyhib29sIGNoYXJnaW5nLCBkb3VibGUgY2hhcmdp
bmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2ZWwpOworCisgICAgYm9v
bCBtX2NoYXJnaW5nOworICAgIGRvdWJsZSBtX2NoYXJnaW5nVGltZTsKKyAgICBkb3VibGUgbV9k
aXNjaGFyZ2luZ1RpbWU7CisgICAgZG91YmxlIG1fbGV2ZWw7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworI2VuZGlmIC8vIEJhdHRlcnlT
dGF0dXNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2
aWdhdG9yQmF0dGVyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdh
dG9yQmF0dGVyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2NzI0
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZp
Z2F0b3JCYXR0ZXJ5LmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJOYXZpZ2F0b3JCYXR0ZXJ5LmgiCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFU
VVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkJhdHRlcnlN
YW5hZ2VyLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdmlnYXRvckJhdHRlcnk6
Ok5hdmlnYXRvckJhdHRlcnkoKQoreworfQorCitOYXZpZ2F0b3JCYXR0ZXJ5Ojp+TmF2aWdhdG9y
QmF0dGVyeSgpCit7Cit9CisKK0JhdHRlcnlNYW5hZ2VyKiBOYXZpZ2F0b3JCYXR0ZXJ5Ojp3ZWJr
aXRCYXR0ZXJ5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE5hdmlnYXRvciogbmF2
aWdhdG9yKQoreworICAgIE5hdmlnYXRvckJhdHRlcnkqIG5hdmlnYXRvckJhdHRlcnkgPSBOYXZp
Z2F0b3JCYXR0ZXJ5Ojpmcm9tKG5hdmlnYXRvcik7CisgICAgaWYgKCFuYXZpZ2F0b3JCYXR0ZXJ5
LT5tX2JhdHRlcnlNYW5hZ2VyKQorICAgICAgICBuYXZpZ2F0b3JCYXR0ZXJ5LT5tX2JhdHRlcnlN
YW5hZ2VyID0gQmF0dGVyeU1hbmFnZXI6OmNyZWF0ZShjb250ZXh0LCBuYXZpZ2F0b3IpOworICAg
IHJldHVybiBuYXZpZ2F0b3JCYXR0ZXJ5LT5tX2JhdHRlcnlNYW5hZ2VyLmdldCgpOworfQorCitO
YXZpZ2F0b3JCYXR0ZXJ5KiBOYXZpZ2F0b3JCYXR0ZXJ5Ojpmcm9tKE5hdmlnYXRvciogbmF2aWdh
dG9yKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIk5h
dmlnYXRvckJhdHRlcnkiKSk7CisgICAgTmF2aWdhdG9yQmF0dGVyeSogc3VwcGxlbWVudCA9IHN0
YXRpY19jYXN0PE5hdmlnYXRvckJhdHRlcnkqPihTdXBwbGVtZW50PE5hdmlnYXRvcj46OmZyb20o
bmF2aWdhdG9yLCBuYW1lKSk7CisgICAgaWYgKCFzdXBwbGVtZW50KSB7CisgICAgICAgIHN1cHBs
ZW1lbnQgPSBuZXcgTmF2aWdhdG9yQmF0dGVyeSgpOworICAgICAgICBwcm92aWRlVG8obmF2aWdh
dG9yLCBuYW1lLCBhZG9wdFB0cihzdXBwbGVtZW50KSk7CisgICAgfQorICAgIHJldHVybiBzdXBw
bGVtZW50OworfQorCitCYXR0ZXJ5TWFuYWdlciogTmF2aWdhdG9yQmF0dGVyeTo6YmF0dGVyeU1h
bmFnZXIoKQoreworICAgIHJldHVybiBtX2JhdHRlcnlNYW5hZ2VyLmdldCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJh
dHRlcnkuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjMWM0OAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5
LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBF
bGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIE5hdmlnYXRvckJhdHRlcnlfaAorI2RlZmlu
ZSBOYXZpZ2F0b3JCYXR0ZXJ5X2gKKworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworI2lu
Y2x1ZGUgIlBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5TWFu
YWdlcjsKK2NsYXNzIE5hdmlnYXRvcjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisK
K2NsYXNzIE5hdmlnYXRvckJhdHRlcnkgOiBwdWJsaWMgU3VwcGxlbWVudDxOYXZpZ2F0b3I+IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5OYXZpZ2F0b3JCYXR0ZXJ5KCk7CisKKyAgICBzdGF0aWMg
TmF2aWdhdG9yQmF0dGVyeSogZnJvbShOYXZpZ2F0b3IqKTsKKworICAgIHN0YXRpYyBCYXR0ZXJ5
TWFuYWdlciogd2Via2l0QmF0dGVyeShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTmF2aWdhdG9y
Kik7CisgICAgQmF0dGVyeU1hbmFnZXIqIGJhdHRlcnlNYW5hZ2VyKCk7CisKKyBwcml2YXRlOgor
ICAgIE5hdmlnYXRvckJhdHRlcnkoKTsKKworICAgIFJlZlB0cjxCYXR0ZXJ5TWFuYWdlcj4gbV9i
YXR0ZXJ5TWFuYWdlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworI2VuZGlmIC8vIE5hdmlnYXRvckJhdHRlcnlfaAor
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JC
YXR0ZXJ5LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0
ZXJ5LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2RiNzgzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJh
dHRlcnkuaWRsCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRl
cmZhY2UgWworICAgICAgICBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LAorICAgICAg
ICBDb25kaXRpb25hbD1CQVRURVJZX1NUQVRVUywKKyAgICAgICAgU3VwcGxlbWVudGFsPU5hdmln
YXRvcgorICAgIF0gTmF2aWdhdG9yQmF0dGVyeSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBCYXR0ZXJ5TWFuYWdlciB3ZWJraXRCYXR0ZXJ5OworICAgIH07CisKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKaW5kZXggMDM3ZjJlYi4uOGZkZTAwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCkBAIC0yMDcsNiArMjA3LDExIEBACiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjZW5k
aWYKIAorI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKyNpbmNsdWRlICJCYXR0ZXJ5Q29udHJv
bGxlci5oIgorI2luY2x1ZGUgIk5hdmlnYXRvckJhdHRlcnkuaCIKKyNlbmRpZgorCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBVbmlj
b2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKaW5kZXggYTYxNmY3NC4uYzViMWVmYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnROYW1lcy5oCkBAIC00MSw2ICs0MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBtYWNybyhibHVyKSBcCiAgICAgbWFjcm8oY2FjaGVkKSBcCiAgICAgbWFjcm8oY2hhbmdl
KSBcCisgICAgbWFjcm8oY2hhcmdpbmdjaGFuZ2UpIFwKKyAgICBtYWNybyhjaGFyZ2luZ3RpbWVj
aGFuZ2UpIFwKICAgICBtYWNybyhjaGVja2luZykgXAogICAgIG1hY3JvKGNsaWNrKSBcCiAgICAg
bWFjcm8oY2xvc2UpIFwKQEAgLTU1LDYgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IG1hY3JvKGRibGNsaWNrKSBcCiAgICAgbWFjcm8oZGV2aWNlbW90aW9uKSBcCiAgICAgbWFjcm8o
ZGV2aWNlb3JpZW50YXRpb24pIFwKKyAgICBtYWNybyhkaXNjaGFyZ2luZ3RpbWVjaGFuZ2UpIFwK
ICAgICBtYWNybyhkaXNwbGF5KSBcCiAgICAgbWFjcm8oZG93bmxvYWRpbmcpIFwKICAgICBtYWNy
byhkcmFnKSBcCkBAIC03NCw2ICs3Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNy
byhrZXlkb3duKSBcCiAgICAgbWFjcm8oa2V5cHJlc3MpIFwKICAgICBtYWNybyhrZXl1cCkgXAor
ICAgIG1hY3JvKGxldmVsY2hhbmdlKSBcCiAgICAgbWFjcm8obG9hZCkgXAogICAgIG1hY3JvKGxv
YWRzdGFydCkgXAogICAgIG1hY3JvKG1lc3NhZ2UpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldEZhY3RvcnkuaW4gYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXRGYWN0b3J5LmluCmluZGV4IDc4Mzk2YmQuLjdhMWIzY2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldEZhY3RvcnkuaW4KKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbgpAQCAtMSw2ICsxLDcgQEAKIG5hbWVzcGFjZT0iRXZl
bnRUYXJnZXQiCiAKIEF1ZGlvQ29udGV4dCBjb25kaXRpb25hbD1XRUJfQVVESU8KK0JhdHRlcnlN
YW5hZ2VyIGNvbmRpdGlvbmFsPUJBVFRFUllfU1RBVFVTCiBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0
IGNvbmRpdGlvbmFsPVdPUktFUlMKIERPTUFwcGxpY2F0aW9uQ2FjaGUKIERPTVdpbmRvdwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9CYXR0ZXJ5Q2xpZW50TW9jay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0JhdHRlcnlDbGllbnRNb2NrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTRmNTE4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9CYXR0ZXJ5Q2xpZW50TW9jay5jcHAK
QEAgLTAsMCArMSw2NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVj
dHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVy
eUNsaWVudE1vY2suaCIKKworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUg
IkJhdHRlcnlDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQmF0dGVyeUNs
aWVudE1vY2s6OkJhdHRlcnlDbGllbnRNb2NrKCkKKyAgICA6IG1fY29udHJvbGxlcigwKQorewor
fQorCitCYXR0ZXJ5Q2xpZW50TW9jazo6fkJhdHRlcnlDbGllbnRNb2NrKCkKK3sKK30KKwordm9p
ZCBCYXR0ZXJ5Q2xpZW50TW9jazo6c2V0Q29udHJvbGxlcihCYXR0ZXJ5Q29udHJvbGxlciogY29u
dHJvbGxlcikKK3sKKyAgICBBU1NFUlQoIW1fY29udHJvbGxlcik7CisgICAgbV9jb250cm9sbGVy
ID0gY29udHJvbGxlcjsKKyAgICBBU1NFUlQobV9jb250cm9sbGVyKTsKK30KKwordm9pZCBCYXR0
ZXJ5Q2xpZW50TW9jazo6c3RhcnRVcGRhdGluZygpCit7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVu
dE1vY2s6OnN0b3BVcGRhdGluZygpCit7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVudE1vY2s6OmJh
dHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9p
ZCBCYXR0ZXJ5Q2xpZW50TW9jazo6c2V0QmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQorewor
ICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhldmVudFR5cGUsIGJhdHRl
cnlTdGF0dXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCQVRU
RVJZX1NUQVRVUworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0Jh
dHRlcnlDbGllbnRNb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0JhdHRlcnlD
bGllbnRNb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0MzY2Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQmF0dGVyeUNs
aWVudE1vY2suaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBT
YW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQmF0dGVyeUNsaWVudE1vY2tf
aAorI2RlZmluZSBCYXR0ZXJ5Q2xpZW50TW9ja19oCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFU
VVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeUNvbnRy
b2xsZXI7CitjbGFzcyBCYXR0ZXJ5U3RhdHVzOworCitjbGFzcyBCYXR0ZXJ5Q2xpZW50TW9jayA6
IHB1YmxpYyBCYXR0ZXJ5Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBCYXR0ZXJ5Q2xpZW50TW9jaygp
OworICAgIH5CYXR0ZXJ5Q2xpZW50TW9jaygpOworCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRy
b2xsZXIoQmF0dGVyeUNvbnRyb2xsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGlu
ZygpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKworICAgIHZvaWQgc2V0QmF0dGVyeVN0YXR1
cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVz
Pik7CisKK3ByaXZhdGU6CisgICAgQmF0dGVyeUNvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKK307
CisKK30KKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisjZW5kaWYgLy8gQmF0dGVyeUNsaWVu
dE1vY2tfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDEzOGM0MGQuLjM1MjZkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMTItMDMtMDYgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5j
b20+CisKKyAgICAgICAgU3VwcG9ydCBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjY5OAorCisgICAgICAgIEFk
ZCBpbmNsdWRlIGRpcmVjdG9yeSBhbmQgZmlsZS4KKyAgICAgICAgaHR0cDovL3d3dy53My5vcmcv
VFIvYmF0dGVyeS1zdGF0dXMvCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKwogMjAxMi0wMy0wNiAgUmFwaGFlbCBL
dWJvIGRhIENvc3RhICA8a3Vib0Bwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBbRUZMXSBVbnJl
dmlld2VkOyBmaXggdGhlIGJ1aWxkIGFmdGVyIHIxMDk4NzcuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCAxZGViZTM2Li5jMTliN2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEz
LDYgKzEzLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAi
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3d0Zi9nb2JqZWN0IgogICAgICIke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9lZmwiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
IgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tb2NrIgogICAgICR7Q2Fpcm9fSU5DTFVE
RV9ESVJTfQogICAgICR7RUNPUkVfWF9JTkNMVURFX0RJUlN9CiAgICAgJHtFREpFX0lOQ0xVREVf
RElSU30KQEAgLTEyNiw2ICsxMjcsMTAgQEAgSUYgKEVOQUJMRV9WSUJSQVRJT04pCiAgICAgKQog
RU5ESUYgKCkKIAorSUYgKEVOQUJMRV9CQVRURVJZX1NUQVRVUykKKyAgICBMSVNUKEFQUEVORCBX
ZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUyAke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2JhdHRlcnkp
CisgICAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMgZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRl
cnlDbGllbnRFZmwuY3BwKQorRU5ESUYgKCkKIAogU0VUKFdlYktpdF9USEVNRV9ERUZJTklUSU9O
ICIiKQogSUYgKEVOQUJMRV9QUk9HUkVTU19UQUcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggMjUxMjkz
NC4uNWY4NjMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTAzLTA2
ICBLaWhvbmcgS3dvbiAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgorCisgICAgICAgIFN1cHBv
cnQgZm9yIEJhdHRlcnkgU3RhdHVzIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKworICAgICAgICBBZGQgQmF0dGVyeUNsaWVudEVmbCBh
bmQgRHVtcFJlbmVyVHJlZVN1cHBvcnRFZmwgY2xhc3MgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBs
YXlvdXQgdGVzdHMuCisgICAgICAgIFRoZSBsYXlvdXQgdGVzdHMgYXJlIHJ1biB1c2luZyB0aGUg
QmF0dGVyeUNsaWVudE1vY2sgY2xhc3MuCisgICAgICAgIEJhdHRlcnlDbGllbnRFZmwgY2xhc3Ms
IGhvd2V2ZXIsIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZCBpbiB0aGlzIHBhdGNoLgorICAgICAg
ICAoSXQgd2lsbCBiZSBjb21wbGV0ZWQgYnkgb3RoZXIgcGF0Y2ggYXMgbmVjZXNzYXJ5IGluIHRo
ZSBFZmwgcG9ydC4pCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2JhdHRlcnktc3RhdHVz
LworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpCYXR0ZXJ5Q2xpZW50RWZs
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRFZmw6OnNldENvbnRyb2xsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6c3RhcnRVcGRhdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpzdG9wVXBkYXRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6c2V0QmF0dGVyeVN0YXR1cyk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoQmF0dGVyeUNsaWVudEVmbCk6CisgICAgICAgIChXZWJD
b3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjp+QmF0dGVyeUNsaWVudEVmbCk6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcDoKKyAgICAgICAgKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0TW9ja0JhdHRlcnlTdGF0dXMpOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oOgorICAgICAgICAqIGV3ay9l
d2tfdmlldy5jcHA6CisgICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAg
KF9ld2tfdmlld19wcml2X25ldyk6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfYWRkKToKKyAg
ICAgICAgKiBld2svZXdrX3ZpZXcuaDoKKwogMjAxMi0wMy0wMiAgR3J6ZWdvcnogQ3phamtvd3Nr
aSAgPGcuY3phamtvd3NraUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBFbmFibGluZyAn
SW5zcGVjdCBFbGVtZW50JyBpbiBFd2tfQ29udGV4dF9NZW51X0FjdGlvbi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlDbGllbnRFZmwuY3BwIGIv
U291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkYmZkOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlDbGllbnRFZmwuY3Bw
CkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRl
cnlDbGllbnRFZmwuaCIKKworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUg
IkJhdHRlcnlDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQmF0dGVyeUNs
aWVudEVmbDo6QmF0dGVyeUNsaWVudEVmbCgpCisgICAgOiBtX2NvbnRyb2xsZXIoMCkKK3sKK30K
Kwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpzZXRDb250cm9sbGVyKEJhdHRlcnlDb250cm9sbGVy
KiBjb250cm9sbGVyKQoreworICAgIG1fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cit9CisKK3Zv
aWQgQmF0dGVyeUNsaWVudEVmbDo6c3RhcnRVcGRhdGluZygpCit7CisgICAgLy8gRklYTUU6IE5l
ZWQgdG8gaW1wbGVtZW50IGZvciBnZXR0aW5nIGJhdHRlcnkgc3RhdHVzIHRvIHRoZSBlZmwgcG9y
dC4KK30KKwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpzdG9wVXBkYXRpbmcoKQoreworICAgIC8v
IEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBmb3IgZ2V0dGluZyBiYXR0ZXJ5IHN0YXR1cyB0byB0
aGUgZWZsIHBvcnQKK30KKwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpiYXR0ZXJ5Q29udHJvbGxl
ckRlc3Ryb3llZCgpCit7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVu
dEVmbDo6c2V0QmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQoreworICAgIG1fY29udHJvbGxl
ci0+ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhldmVudFR5cGUsIGJhdHRlcnlTdGF0dXMpOworfQor
Cit9CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0
L2VmbC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYTRmNzFjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlDbGllbnRFZmwuaApAQCAtMCwwICsxLDUzIEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgQmF0dGVyeUNsaWVudEVmbF9oCisjZGVmaW5lIEJhdHRlcnlDbGllbnRFZmxf
aAorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVu
dC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEJhdHRlcnlDb250cm9sbGVyOworY2xhc3MgQmF0dGVyeVN0YXR1czsK
KworY2xhc3MgQmF0dGVyeUNsaWVudEVmbCA6IHB1YmxpYyBCYXR0ZXJ5Q2xpZW50IHsKK3B1Ymxp
YzoKKyAgICBCYXR0ZXJ5Q2xpZW50RWZsKCk7CisgICAgfkJhdHRlcnlDbGllbnRFZmwoKSB7IH07
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJvbGxlcihCYXR0ZXJ5Q29udHJvbGxlciopOwor
ICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3BV
cGRhdGluZygpOworICAgIHZpcnR1YWwgdm9pZCBiYXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3llZCgp
OworCisgICAgdm9pZCBzZXRCYXR0ZXJ5U3RhdHVzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+KTsKKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5
Q29udHJvbGxlciogbV9jb250cm9sbGVyOworfTsKKworfQorCisjZW5kaWYgLy8gQkFUVEVSWV9T
VEFUVVMKKyNlbmRpZiAvLyBCYXR0ZXJ5Q2xpZW50RWZsX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bC5jcHAKaW5kZXggZmQzZDZiNS4uMTQ4ZmI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9l
ZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3Bw
CkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsLmgiCiAKKyNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50TW9jay5oIgor
I2luY2x1ZGUgIkJhdHRlcnlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGll
bnRFZmwuaCIKICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgogCkBAIC0zODksNiArMzkxLDEzIEBA
IHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQo
Ym9vbCBlbmFibGUpCiAgICAgV2ViQ29yZTo6U2V0dGluZ3M6OnNldE1vY2tTY3JvbGxiYXJzRW5h
YmxlZChlbmFibGUpOwogfQogCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0TW9j
a0JhdHRlcnlTdGF0dXMoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEF0b21pY1N0cmluZyBldmVudFR5
cGUsIGJvb2wgY2hhcmdpbmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2lu
Z1RpbWUsIGRvdWJsZSBsZXZlbCkKK3sKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdLUHJp
dmF0ZTo6Y29yZVBhZ2UoZXdrVmlldyk7CisgICAgV2ViQ29yZTo6QmF0dGVyeUNsaWVudE1vY2sq
IG1vY2tDbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50TW9jayo+KFdl
YkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjpmcm9tKHBhZ2UpLT5jbGllbnQoKSk7CisgICAgbW9j
a0NsaWVudC0+c2V0QmF0dGVyeVN0YXR1cyhldmVudFR5cGUsIFdlYkNvcmU6OkJhdHRlcnlTdGF0
dXM6OmNyZWF0ZShjaGFyZ2luZywgY2hhcmdpbmdUaW1lLCBkaXNjaGFyZ2luZ1RpbWUsIGxldmVs
KSk7Cit9CisKIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpkdW1wQ29uZmlndXJhdGlv
bkZvclZpZXdwb3J0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgZGV2aWNlRFBJLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBkZXZpY2VTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBhdmFp
bGFibGVTaXplKQogewogICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBFV0tQcml2YXRlOjpjb3Jl
UGFnZShld2tWaWV3KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgKaW5kZXggOTUwYTc4ZC4uMzRhMmJj
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsLmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgKQEAgLTc3LDYgKzc3LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBib29sIGlzVGFyZ2V0SXRlbShjb25zdCBFd2tfSGlzdG9yeV9JdGVtKik7CiAKICAg
ICBzdGF0aWMgdm9pZCBzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoYm9vbCk7CisgICAgc3RhdGlj
IHZvaWQgc2V0TW9ja0JhdHRlcnlTdGF0dXMoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEF0b21pY1N0
cmluZyBldmVudFR5cGUsIGJvb2wgY2hhcmdpbmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJs
ZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZlbCk7CiAKICAgICBzdGF0aWMgdm9pZCBkdW1w
Q29uZmlndXJhdGlvbkZvclZpZXdwb3J0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgZGV2aWNl
RFBJLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZXZpY2VTaXplLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBhdmFpbGFibGVTaXplKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcApp
bmRleCAxN2E2ZWEwLi4wMzIwZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAg
LTc0LDYgKzc0LDExIEBACiAjaW5jbHVkZSAiVmlicmF0aW9uQ2xpZW50RWZsLmgiCiAjZW5kaWYK
IAorI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKyNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50RWZs
LmgiCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudE1vY2suaCIKKyNlbmRpZgorCiBzdGF0aWMgY29u
c3QgZmxvYXQgem9vbU1pbmltdW0gPSAwLjA1Owogc3RhdGljIGNvbnN0IGZsb2F0IHpvb21NYXhp
bXVtID0gNC4wOwogCkBAIC02MTgsNiArNjIzLDEzIEBAIHN0YXRpYyBFd2tfVmlld19Qcml2YXRl
X0RhdGEqIF9ld2tfdmlld19wcml2X25ldyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEp
CiAgICAgV2ViQ29yZTo6cHJvdmlkZVZpYnJhdGlvblRvKHByaXYtPnBhZ2UuZ2V0KCksIG5ldyBX
ZWJDb3JlOjpWaWJyYXRpb25DbGllbnRFZmwoc21hcnREYXRhLT5zZWxmKSk7CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKyAgICBpZiAoc21hcnREYXRhLT5hcGktPnVzZV9t
b2NrKQorICAgICAgICBXZWJDb3JlOjpwcm92aWRlQmF0dGVyeVRvKHByaXYtPnBhZ2UuZ2V0KCks
IG5ldyBXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50TW9jayk7CisgICAgZWxzZQorICAgICAgICBXZWJD
b3JlOjpwcm92aWRlQmF0dGVyeVRvKHByaXYtPnBhZ2UuZ2V0KCksIG5ldyBXZWJDb3JlOjpCYXR0
ZXJ5Q2xpZW50RWZsKTsKKyNlbmRpZgorCiAgICAgcHJpdi0+cGFnZVNldHRpbmdzID0gcHJpdi0+
cGFnZS0+c2V0dGluZ3MoKTsKIAogICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLndpZHRoID0g
V2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKQEAgLTc2NCw4ICs3NzYsOCBA
QCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQog
ICAgIHNtYXJ0RGF0YS0+YmdfY29sb3IuYSA9IDI1NTsKIAogICAgIHNtYXJ0RGF0YS0+c2VsZiA9
IGV3a1ZpZXc7Ci0gICAgc21hcnREYXRhLT5fcHJpdiA9IF9ld2tfdmlld19wcml2X25ldyhzbWFy
dERhdGEpOwogICAgIHNtYXJ0RGF0YS0+YXBpID0gYXBpOworICAgIHNtYXJ0RGF0YS0+X3ByaXYg
PSBfZXdrX3ZpZXdfcHJpdl9uZXcoc21hcnREYXRhKTsKIAogICAgIF9wYXJlbnRfc2MuYWRkKGV3
a1ZpZXcpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuaCBi
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCmluZGV4IDdkZTBlNDYuLmRiMzJjOTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCkBAIC0xMjIsNiArMTIyLDcgQEAgdHlwZWRlZiBl
bnVtIF9Fd2tfRm9jdXNfRGlyZWN0aW9uIEV3a19Gb2N1c19EaXJlY3Rpb247CiBzdHJ1Y3QgX0V3
a19WaWV3X1NtYXJ0X0NsYXNzIHsKICAgICBFdmFzX1NtYXJ0X0NsYXNzIHNjOyAvKio8IEFsbCBi
dXQgJ2RhdGEnIGlzIGZyZWUgdG8gYmUgY2hhbmdlZC4gKi8KICAgICB1bnNpZ25lZCBsb25nIHZl
cnNpb247CisgICAgRWluYV9Cb29sIHVzZV9tb2NrOwogCiAgICAgRXZhc19PYmplY3QgKigqd2lu
ZG93X2NyZWF0ZSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEVpbmFfQm9vbCBqYXZhc2NyaXB0
LCBjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzICp3aW5kb3dfZmVhdHVyZXMpOyAvKio8IGNyZWF0
ZXMgYSBuZXcgd2luZG93LCByZXF1ZXN0ZWQgYnkgd2Via2l0ICovCiAgICAgdm9pZCAoKndpbmRv
d19jbG9zZSkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpOyAvKio8IGNsb3NlcyBhIHdpbmRvdyAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UgYi9Tb3VyY2UvY21h
a2UvT3B0aW9uc0VmbC5jbWFrZQppbmRleCA3Njk4NTVjLi4zNjNlNGUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0Vm
bC5jbWFrZQpAQCAtNjMsNiArNjMsNyBAQCBTRVQoVEhFTUVfQklOQVJZX0RJUiAke0NNQUtFX0JJ
TkFSWV9ESVJ9L1dlYktpdC9lZmwvRGVmYXVsdFRoZW1lKQogCiBTRVQoVkVSU0lPTl9TQ1JJUFQg
Ii1XbCwtLXZlcnNpb24tc2NyaXB0LCR7Q01BS0VfTU9EVUxFX1BBVEh9L2VmbHN5bWJvbHMuZmls
dGVyIikKIAorV0VCS0lUX0ZFQVRVUkUoRU5BQkxFX0JBVFRFUllfU1RBVFVTICJFbmFibGUgYmF0
dGVyeSBzdGF0dXMgYXBpIiBERUZBVUxUIE9OKQogV0VCS0lUX0ZFQVRVUkUoRU5BQkxFX0JMT0Ig
IkVuYWJsZSBibG9iIHNsaWNlIiBERUZBVUxUIE9GRikKIFdFQktJVF9GRUFUVVJFKEVOQUJMRV9D
SEFOTkVMX01FU1NBR0lORyAiRW5hYmxlIGNoYW5uZWwgbWVzc2FnaW5nIiBERUZBVUxUIE9OKQog
V0VCS0lUX0ZFQVRVUkUoRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTiAiRW5hYmxlIGNs
aWVudCBiYXNlZCBnZW9sb2NhdGlvbiIgREVGQVVMVCBPRkYpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Y21ha2Vjb25maWcuaC5jbWFrZSBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCmluZGV4IGZl
ZjczMGEuLjllZDU0OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCisr
KyBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCkBAIC02LDYgKzYsNyBAQAogCiAKICNjbWFr
ZWRlZmluZTAxIEVOQUJMRV9BU19JTUFHRQorI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0JBVFRFUllf
U1RBVFVTCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfQkxPQgogI2NtYWtlZGVmaW5lMDEgRU5BQkxF
X0NIQU5ORUxfTUVTU0FHSU5HCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dF
T0xPQ0FUSU9OCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggMzMyNmFkNy4uZjJjM2Q3OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTAzLTA2ICBLaWhvbmcgS3dv
biAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgorCisgICAgICAgIFN1cHBvcnQgZm9yIEJhdHRl
cnkgU3RhdHVzIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjI2OTgKKworICAgICAgICBBZGQgc2V0TW9ja0JhdHRlcnlTdGF0dXMgQVBJIHRvIGxh
eW91dFRlc3RDb250cm9sbGVyIGZvciB0ZXN0aW5nIHRoZSBCYXR0ZXJ5IFN0YXR1cyBBUEkuCisg
ICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2JhdHRlcnktc3RhdHVzLworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoc2V0TW9ja0JhdHRlcnlTdGF0dXNDYWxs
YmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2JsYWNr
YmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrQmF0dGVyeVN0YXR1cyk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrQmF0dGVyeVN0YXR1cyk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRl
clRyZWUuY3BwOgorICAgICAgICAocnVuVGVzdGluZ1NlcnZlckxvb3ApOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcuY3BwOgorICAgICAgICAoZHJ0Vmll
d0FkZCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVy
RWZsLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrQmF0dGVyeVN0
YXR1cyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVy
R3RrLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrQmF0dGVyeVN0
YXR1cyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJR
dC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0JhdHRlcnlTdGF0
dXMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQu
aDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1vY2tCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRNb2NrQmF0dGVyeVN0YXR1cyk6CisgICAgICAgICogU2NyaXB0cy9idWls
ZC13ZWJraXQ6CisKIDIwMTItMDMtMDYgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMgaXMgb2Jzb2xl
dGUgYW5kIHNob3VsZCBiZSByZW1vdmVkCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAKaW5kZXggY2I4NDdiYS4uZWNlYmY0YyAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtMTI4OSw2ICsxMjg5LDI3
IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxT
Y2hlbWVDYWxsYmFjayhKU0NvbnRleHRSZWYKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldE1vY2tCYXR0ZXJ5U3RhdHVz
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVu
dENvdW50IDwgNSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBldmVudFR5cGUoQWRvcHQsIEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBB
U1NFUlQoISpleGNlcHRpb24pOworICAgIGJvb2wgbV9jaGFyZ2luZyA9IEpTVmFsdWVUb0Jvb2xl
YW4oY29udGV4dCwgYXJndW1lbnRzWzFdKTsKKyAgICBkb3VibGUgbV9jaGFyZ2luZ1RpbWUgPSBK
U1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pOworICAgIEFT
U0VSVCghKmV4Y2VwdGlvbik7CisgICAgZG91YmxlIG1fZGlzY2hhcmdpbmdUaW1lID0gSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1szXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQo
ISpleGNlcHRpb24pOworICAgIGRvdWJsZSBtX2xldmVsID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIGFyZ3VtZW50c1s0XSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOwor
CisgICAgY29udHJvbGxlci0+c2V0TW9ja0JhdHRlcnlTdGF0dXMoZXZlbnRUeXBlLmdldCgpLCBt
X2NoYXJnaW5nLCBtX2NoYXJnaW5nVGltZSwgbV9kaXNjaGFyZ2luZ1RpbWUsIG1fbGV2ZWwpOwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwogc3RhdGljIEpT
VmFsdWVSZWYgc2V0TW9ja0RldmljZU9yaWVudGF0aW9uQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQogewogICAgIGlmIChhcmd1bWVudENvdW50IDwgNikKQEAgLTI0NTEsNiAr
MjQ3Miw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNG
dW5jdGlvbnMoKQogICAgICAgICB7ICJzZXRKYXZhU2NyaXB0UHJvZmlsaW5nRW5hYmxlZCIsIHNl
dEphdmFTY3JpcHRQcm9maWxpbmdFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlciIsIHNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25k
ZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCIs
IHNldE1pbmltdW1UaW1lckludGVydmFsQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0
TW9ja0JhdHRlcnlTdGF0dXMiLCBzZXRNb2NrQmF0dGVyeVN0YXR1c0NhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgICAgIHsgInNldE1vY2tEZXZpY2VPcmllbnRhdGlvbiIsIHNldE1vY2tEZXZpY2VPcmll
bnRhdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldE1vY2tHZW9sb2NhdGlvbkVy
cm9yIiwgc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3JDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIsIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5oCmluZGV4IDQ1MjY1ZGIuLjZjNzZiMTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuaApAQCAtMTA0LDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEphdmFTY3JpcHRQcm9maWxpbmdFbmFibGVkKGJvb2wgcHJvZmlsaW5nRW5hYmxlZCk7
CiAgICAgdm9pZCBzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZmxhZyk7CiAg
ICAgdm9pZCBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgZmxhZyk7CisgICAgdm9p
ZCBzZXRNb2NrQmF0dGVyeVN0YXR1cyhKU1N0cmluZ1JlZiBldmVudFR5cGUsIGJvb2wgY2hhcmdp
bmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBs
ZXZlbCk7CiAgICAgdm9pZCBzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRl
QWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJv
b2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpOwogICAgIHZvaWQgc2V0TW9ja0dlb2xv
Y2F0aW9uRXJyb3IoaW50IGNvZGUsIEpTU3RyaW5nUmVmIG1lc3NhZ2UpOwogICAgIHZvaWQgc2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRl
LCBkb3VibGUgYWNjdXJhY3kpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxh
Y2tiZXJyeS9MYXlvdXRUZXN0Q29udHJvbGxlckJsYWNrQmVycnkuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvYmxhY2tiZXJyeS9MYXlvdXRUZXN0Q29udHJvbGxlckJsYWNrQmVycnkuY3BwCmlu
ZGV4IDFjMDIwNTQuLjE5Zjk0YTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Js
YWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0JlcnJ5LmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRlc3RDb250cm9sbGVyQmxhY2tCZXJyeS5j
cHAKQEAgLTY4Miw2ICs2ODIsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBw
bGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW8KICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrQmF0
dGVyeVN0YXR1cyhKU1N0cmluZ1JlZiBldmVudFR5cGUsIGJvb2wgY2hhcmdpbmcsIGRvdWJsZSBj
aGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZlbCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRN
b2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwg
Ym9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBk
b3VibGUgZ2FtbWEpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAppbmRleCA5
YzY4ZGZmLi4xYTFhNDNiIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xODQsNiArMTg0LDcgQEAgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKFRlc3RTaGVsbCogc2hlbGwpCiAg
ICAgYmluZE1ldGhvZCgic2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCk7CiAgICAgYmlu
ZE1ldGhvZCgic2V0SmF2YVNjcmlwdFByb2ZpbGluZ0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEphdmFTY3JpcHRQcm9maWxpbmdFbmFibGVkKTsKICAgICBiaW5kTWV0aG9kKCJz
ZXRNaW5pbXVtVGltZXJJbnRlcnZhbCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11
bVRpbWVySW50ZXJ2YWwpOworICAgIGJpbmRNZXRob2QoInNldE1vY2tCYXR0ZXJ5U3RhdHVzIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrQmF0dGVyeVN0YXR1cyk7CiAgICAgYmluZE1l
dGhvZCgic2V0TW9ja0RldmljZU9yaWVudGF0aW9uIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRNb2NrRGV2aWNlT3JpZW50YXRpb24pOwogICAgIGJpbmRNZXRob2QoInNldE1vY2tHZW9sb2Nh
dGlvbkVycm9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJv
cik7CiAgICAgYmluZE1ldGhvZCgic2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTsKQEAgLTE4ODksNiAr
MTg5MCwxMSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRFZGl0aW5nQmVoYXZpb3Io
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsCiAgICAgICAgIGxvZ0Vycm9yVG9Db25z
b2xlKCJQYXNzZWQgaW52YWxpZCBlZGl0aW5nIGJlaGF2aW9yLiBTaG91bGQgYmUgJ21hYycsICd3
aW4nLCBvciAndW5peCcuIik7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1v
Y2tCYXR0ZXJ5U3RhdHVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0
VGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRl
c3RDb250cm9sbGVyLmgKaW5kZXggMGY1MDU5Yi4uZmVhNmM4YyAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC0zNjQs
NiArMzY0LDkgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVXNlclNjcmlwdChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKKyAgICAvLyBCYXR0ZXJ5U3RhdHVz
IHJlbGF0ZWQgZnVuY3Rpb25zCisgICAgdm9pZCBzZXRNb2NrQmF0dGVyeVN0YXR1cyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKICAgICAvLyBEZXZpY2VPcmllbnRhdGlv
biByZWxhdGVkIGZ1bmN0aW9ucwogICAgIHZvaWQgc2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlVmlldy5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVWaWV3LmNwcAppbmRleCBiMTY0MDFhLi5jNzBlZDg1
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVWaWV3
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVWaWV3LmNw
cApAQCAtMTEyLDUgKzExMiw3IEBAIEV2YXNfT2JqZWN0KiBkcnRWaWV3QWRkKEV2YXMqIGV2YXMp
CiAgICAgYXBpLndpbmRvd19jcmVhdGUgPSBvbldpbmRvd0NyZWF0ZTsKICAgICBhcGkud2luZG93
X2Nsb3NlID0gb25XaW5kb3dDbG9zZTsKIAorICAgIGFwaS51c2VfbW9jayA9IHRydWU7CisKICAg
ICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGV2YXMsIGV2YXNfc21hcnRfY2xhc3NfbmV3
KCZhcGkuc2MpKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlv
dXRUZXN0Q29udHJvbGxlckVmbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0
VGVzdENvbnRyb2xsZXJFZmwuY3BwCmluZGV4IGRhMGM3Y2EuLjdkY2IyOGQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcApA
QCAtMzQ5LDYgKzM0OSwxNSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1h
Z2VMb2FkaW5nKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRNb2NrQmF0dGVyeVN0YXR1cyhKU1N0cmluZ1JlZiBldmVudFR5cGUsIGJv
b2wgY2hhcmdpbmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUs
IGRvdWJsZSBsZXZlbCkKK3sKKyAgICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhp
bXVtVVRGOENTdHJpbmdTaXplKGV2ZW50VHlwZSk7CisgICAgY2hhciogZXZlbnRUeXBlQnVmZmVy
ID0gbmV3IGNoYXJbbWF4TGVuZ3RoICsgMV07CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhl
dmVudFR5cGUsIGV2ZW50VHlwZUJ1ZmZlciwgbWF4TGVuZ3RoICsgMSk7CisgICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsOjpzZXRNb2NrQmF0dGVyeVN0YXR1cyhicm93c2VyLT5tYWluVmlldygp
LCBldmVudFR5cGVCdWZmZXIsIGNoYXJnaW5nLCBjaGFyZ2luZ1RpbWUsIGRpc2NoYXJnaW5nVGlt
ZSwgbGV2ZWwpOworICAgIGRlbGV0ZVtdIGV2ZW50VHlwZUJ1ZmZlcjsKK30KKwogdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wsIGRvdWJsZSwg
Ym9vbCwgZG91YmxlLCBib29sLCBkb3VibGUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBm
b3IgRGV2aWNlT3JpZW50YXRpb24gbGF5b3V0IHRlc3RzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKaW5kZXggMWE5YjJjOS4u
YjAxZjE5MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RD
b250cm9sbGVyR3RrLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVz
dENvbnRyb2xsZXJHdGsuY3BwCkBAIC00NzIsNiArNDcyLDEyIEBAIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQogICAgIC8vIEFsc28gbmVlZCB0byBtYWtl
IHN1cmUgaW1hZ2UgbG9hZGluZyBpcyByZS1lbmFibGVkIGZvciBlYWNoIG5ldyB0ZXN0LgogfQog
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrQmF0dGVyeVN0YXR1cyhKU1N0cmlu
Z1JlZiBldmVudFR5cGUsIGJvb2wgY2hhcmdpbmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJs
ZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZlbCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IGZvciBCYXR0ZXJ5U3RhdHVzIGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4LgorfQorCiB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxw
aGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wg
Y2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBmb3IgRGV2aWNlT3JpZW50YXRpb24gbGF5b3V0IHRlc3RzLgpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAppbmRleCA2NmZkZjFlLi5i
NGU4ODgzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29u
dHJvbGxlclF0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29u
dHJvbGxlclF0LmNwcApAQCAtODQ3LDYgKzg0NywxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRFZGl0aW5nQmVoYXZpb3IoY29uc3QgUVN0cmluZyYgZWRpdGluZ0JlaGF2aW9yKQog
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRFZGl0aW5nQmVoYXZpb3IobV9kcnQtPndl
YlBhZ2UoKSwgZWRpdGluZ0JlaGF2aW9yKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0TW9ja0JhdHRlcnlTdGF0dXMoY29uc3QgUVN0cmluZyYgZXZlbnRUeXBlLCBib29sIGNo
YXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3Vi
bGUgbGV2ZWwpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgQmF0dGVyeVN0YXR1cyBs
YXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MjY5OC4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0Rl
dmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wg
Y2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91Ymxl
IGdhbW1hKQogewogICAgIFFMaXN0PFdlYkNvcmU6OldlYlBhZ2UqPiBwYWdlcyA9IG1fZHJ0LT5n
ZXRBbGxQYWdlcygpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0
VGVzdENvbnRyb2xsZXJRdC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENv
bnRyb2xsZXJRdC5oCmluZGV4IDQ3NWI5MjQuLmMwYzNkNTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgKQEAgLTIyNiw2ICsyMjYsNyBA
QCBwdWJsaWMgc2xvdHM6CiAgICAgLy8gd2hpY2ggaXMgYSBNYWMtc3BlY2lmaWMgdGVzdC4KICAg
ICB2b2lkIGFkZERpc2FsbG93ZWRVUkwoY29uc3QgUVN0cmluZyYpIHt9CiAKKyAgICB2b2lkIHNl
dE1vY2tCYXR0ZXJ5U3RhdHVzKGNvbnN0IFFTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjaGFyZ2lu
ZywgZG91YmxlIGNoYXJnaW5nVGltZSwgZG91YmxlIGRpc2NoYXJnaW5nVGltZSwgZG91YmxlIGxl
dmVsKTsKICAgICB2b2lkIHNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVB
bHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9v
bCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSk7CiAKICAgICB2b2lkIHNldE1vY2tHZW9s
b2NhdGlvbkVycm9yKGludCBjb2RlLCBjb25zdCBRU3RyaW5nJiBtZXNzYWdlKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCmlu
ZGV4IDUxODVhOGYuLjdhMTk4YmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcApAQCAtNDE0LDYgKzQxNCwxMiBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERl
bGVnYXRlLCBib29sIHBlcm1pcwogICAgICAgICB3ZWJWaWV3LT5zZXRQb2xpY3lEZWxlZ2F0ZSgw
KTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0JhdHRlcnlTdGF0dXMo
SlNTdHJpbmdSZWYgZXZlbnRUeXBlLCBib29sIGNoYXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1l
LCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2ZWwpCit7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCBmb3IgQmF0dGVyeVN0YXR1cyBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjY5OC4KK30KKwogdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJv
dmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRh
LCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQogewogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgZm9yIERldmljZU9yaWVudGF0aW9uIGxheW91dCB0ZXN0cy4KZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAKaW5kZXggZmY3
NDY0NC4uOTY5OGE4YyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0
VGVzdENvbnRyb2xsZXJXeC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0
VGVzdENvbnRyb2xsZXJXeC5jcHAKQEAgLTM0MCw2ICszNDAsMTIgQEAgYm9vbCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5n
UmVmIHByb3AKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldE1vY2tCYXR0ZXJ5U3RhdHVzKEpTU3RyaW5nUmVmIGV2ZW50VHlwZSwgYm9vbCBjaGFy
Z2luZywgZG91YmxlIGNoYXJnaW5nVGltZSwgZG91YmxlIGRpc2NoYXJnaW5nVGltZSwgZG91Ymxl
IGxldmVsKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEJhdHRlcnlTdGF0dXMgbGF5
b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjI2OTguCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZp
Y2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNh
blByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBn
YW1tYSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBEZXZpY2VPcmllbnRhdGlvbiBs
YXlvdXQgdGVzdHMuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBiL1Rv
b2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CmluZGV4IGU5ZjBlMzMuLjI5NzI1ZTcgMTAwNzU1Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0CkBAIC03MCw2ICs3MCw3IEBAIG15ICgKICAgICAkdGhyZWVEUmVuZGVyaW5nU3VwcG9y
dCwKICAgICAkYWNjZWxlcmF0ZWQyZENhbnZhc1N1cHBvcnQsCiAgICAgJGFuaW1hdGlvbkFQSVN1
cHBvcnQsCisgICAgJGJhdHRlcnlzdGF0dXNBUElTdXBwb3J0LAogICAgICRibG9iU3VwcG9ydCwK
ICAgICAkY2hhbm5lbE1lc3NhZ2luZ1N1cHBvcnQsCiAgICAgJGNsaWVudEJhc2VkR2VvbG9jYXRp
b25TdXBwb3J0LApAQCAtMTYwLDYgKzE2MSw5IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICB7IG9w
dGlvbiA9PiAiYW5pbWF0aW9uLWFwaSIsIGRlc2MgPT4gIlRvZ2dsZSBhbmltYXRpb24gQVBJIHN1
cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfQU5JTUFUSU9OX0FQSSIsIGRlZmF1bHQg
PT4gaXNCbGFja0JlcnJ5KCksIHZhbHVlID0+IFwkYW5pbWF0aW9uQVBJU3VwcG9ydCB9LAogCisg
ICAgeyBvcHRpb24gPT4gImJhdHRlcnktc3RhdHVzLWFwaSIsIGRlc2MgPT4gIlRvZ2dsZSBiYXR0
ZXJ5IHN0YXR1cyBBUEkgc3VwcG9ydCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9CQVRURVJZ
X1NUQVRVUyIsIGRlZmF1bHQgPT4gaXNFZmwoKSwgdmFsdWUgPT4gXCRiYXR0ZXJ5c3RhdHVzQVBJ
U3VwcG9ydCB9LAorCiAgICAgeyBvcHRpb24gPT4gImJsb2IiLCBkZXNjID0+ICJUb2dnbGUgQmxv
YiBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0JMT0IiLCBkZWZhdWx0ID0+IChp
c0FwcGxlTWFjV2ViS2l0KCkgfHwgaXNHdGsoKSB8fCBpc0Nocm9taXVtKCkgfHwgaXNCbGFja0Jl
cnJ5KCkpLCB2YWx1ZSA9PiBcJGJsb2JTdXBwb3J0IH0sCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132019</attachid>
            <date>2012-03-15 04:41:07 -0700</date>
            <delta_ts>2012-03-15 21:38:21 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>battery05.patch</filename>
            <type>text/plain</type>
            <size>71649</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBkZDBiZmI3Li4wZTlhZmNh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTItMDMtMTUgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgU3VwcG9ydCBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKworICAgICAgICBFbmFibGUgQkFU
VEVSWV9TVEFUVVMgZm9yIFdlYktpdC1FZmwuCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RS
L2JhdHRlcnktc3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2U6CisgICAgICAgICogU291
cmNlL2NtYWtlY29uZmlnLmguY21ha2U6CisKIDIwMTItMDMtMTQgIE1hdHQgRmFsa2VuaGFnZW4g
IDxmYWxrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFsbG93IHBlci1zY3JpcHQgZm9udCBz
ZXR0aW5ncyB0byBiZSBzcGVjaWZpZWQgaW4gbGF5b3V0IHRlc3RzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjczY2NkZC4u
MmY2NWQ1NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAzLTE1ICBLaWhvbmcgS3dvbiAg
PGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgorCisgICAgICAgIFN1cHBvcnQgZm9yIEJhdHRlcnkg
U3RhdHVzIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYyNjk4CisKKyAgICAgICAgQWRkIG5ldyB0ZXN0IGNhc2VzIGZvciBCYXR0ZXJ5IFN0YXR1
cyBBUEkuCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2JhdHRlcnktc3RhdHVzLworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20v
QmF0dGVyeVN0YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20t
Y2FsbGJhY2suaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9i
YXNpYy1hbGwtdHlwZXMtb2YtZXZlbnRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9iYXNpYy1hbGwtdHlwZXMtb2YtZXZlbnRzLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYmFzaWMtb3BlcmF0aW9uLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9iYXNp
Yy1vcGVyYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1
cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvbXVsdGlwbGUtZnJhbWVzLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9tdWx0aXBs
ZS1mcmFtZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9y
ZXNvdXJjZXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi1uZXcuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvYWRkLWxpc3RlbmVyLWZyb20t
Y2FsbGJhY2suanM6IEFkZGVkLgorICAgICAgICAoY2hlY2tCYXR0ZXJ5U3RhdHVzKToKKyAgICAg
ICAgKGZpcnN0TGlzdGVuZXIpOgorICAgICAgICAoc2Vjb25kTGlzdGVuZXIpOgorICAgICAgICAo
bWF5YmVGaW5pc2hUZXN0KToKKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Njcmlw
dC10ZXN0cy9iYXNpYy1hbGwtdHlwZXMtb2YtZXZlbnRzLmpzOiBBZGRlZC4KKyAgICAgICAgKGNo
ZWNrQmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChiYXR0ZXJ5KToKKyAgICAgICAgKiBmYXN0L2Rv
bS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy9iYXNpYy1vcGVyYXRpb24uanM6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2V2ZW50LWFmdGVy
LW5hdmlnYXRpb24uanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMv
c2NyaXB0LXRlc3RzL211bHRpcGxlLWZyYW1lcy5qczogQWRkZWQuCisgICAgICAgIChjaGVja0Jh
dHRlcnlTdGF0dXMpOgorICAgICAgICAoY2hlY2tDaGlsZEJhdHRlcnlTdGF0dXMpOgorICAgICAg
ICAobWFpbkZyYW1lTGlzdGVuZXIpOgorICAgICAgICAoY2hpbGRGcmFtZUxpc3RlbmVyKToKKyAg
ICAgICAgKG1heWJlRmluaXNoVGVzdCk6CisgICAgICAgICogZmFzdC9kb20vQmF0dGVyeVN0YXR1
cy9zY3JpcHQtdGVzdHMvdXBkYXRlcy5qczogQWRkZWQuCisgICAgICAgIChjaGVja0JhdHRlcnlT
dGF0dXMpOgorICAgICAgICAoc2V0QmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChmaXJzdExpc3Rl
bmVyKToKKyAgICAgICAgKHVwZGF0ZUxpc3RlbmVyKToKKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0
ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy93aW5kb3ctcHJvcGVydHkuanM6IEFkZGVkLgorICAgICAg
ICAoaGFzT25CYXR0ZXJ5UHJvcGVydHkpOgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRlcnlTdGF0
dXMvdXBkYXRlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0JhdHRl
cnlTdGF0dXMvdXBkYXRlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9CYXR0ZXJ5
U3RhdHVzL3dpbmRvdy1wcm9wZXJ0eS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZG9tL0JhdHRlcnlTdGF0dXMvd2luZG93LXByb3BlcnR5Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lw
cGVkOgorICAgICAgICAqIHBsYXRmb3JtL3dpbmNhaXJvL1NraXBwZWQ6CisKIDIwMTItMDMtMTQg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBqYXZhL2ph
dmEtYW5kLXBsdWdpbnMuaHRtbCB0ZXN0IGZhaWxpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2stZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9hZGQtbGlzdGVuZXIt
ZnJvbS1jYWxsYmFjay1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOGU2NzQ1OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Jh
dHRlcnlTdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2stZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMjEgQEAKK1Rlc3RzIHRoYXQgYWRkaW5nIGEgbmV3IGV2ZW50IGxpc3RlbmVyIGZyb20g
YSBjYWxsYmFjayB3b3JrcyBhcyBleHBlY3RlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBpcyBjaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNo
YXJnaW5nVGltZSBpcyBjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUg
aXMgZGlzY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkubGV2ZWwgaXMgbGV2ZWwKK1BBU1MgYmF0
dGVyeS5jaGFyZ2luZyBpcyBjaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBj
aGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgZGlzY2hhcmdpbmdU
aW1lCitQQVNTIGJhdHRlcnkubGV2ZWwgaXMgbGV2ZWwKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBp
cyBjaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBjaGFyZ2luZ1RpbWUKK1BB
U1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgZGlzY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRl
cnkubGV2ZWwgaXMgbGV2ZWwKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3Rh
dHVzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9CYXR0ZXJ5U3RhdHVzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkOTk4NAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJh
Y2suaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2Jhc2ljLWFsbC10eXBlcy1vZi1ldmVudHMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9iYXNpYy1hbGwtdHlw
ZXMtb2YtZXZlbnRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43MWMzNzRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9iYXNpYy1hbGwtdHlwZXMtb2YtZXZlbnRzLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDI5IEBACitUZXN0cyB0aGUgYmFzaWMgb3BlcmF0aW9uIG9mIGFsbCBCYXR0ZXJ5U3RhdHVz
IGV2ZW50cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2NoYXJnaW5nY2hhbmdl
IGV2ZW50IGlzIHJhaXNlZAorUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIGNoYXJnaW5nCitQQVNT
IGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIGNoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRpc2No
YXJnaW5nVGltZSBpcyBkaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBsZXZl
bAorY2hhcmdpbmd0aW1lY2hhbmdlIGV2ZW50IGlzIHJhaXNlZAorUEFTUyBiYXR0ZXJ5LmNoYXJn
aW5nIGlzIGNoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIGNoYXJnaW5nVGlt
ZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBkaXNjaGFyZ2luZ1RpbWUKK1BBU1Mg
YmF0dGVyeS5sZXZlbCBpcyBsZXZlbAorZGlzY2hhcmdpbmd0aW1lY2hhbmdlIGV2ZW50IGlzIHJh
aXNlZAorUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIGNoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hh
cmdpbmdUaW1lIGlzIGNoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBp
cyBkaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBsZXZlbAorbGV2ZWxjaGFu
Z2UgZXZlbnQgaXMgcmFpc2VkCitQQVNTIGJhdHRlcnkuY2hhcmdpbmcgaXMgY2hhcmdpbmcKK1BB
U1MgYmF0dGVyeS5jaGFyZ2luZ1RpbWUgaXMgY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkuZGlz
Y2hhcmdpbmdUaW1lIGlzIGRpc2NoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmxldmVsIGlzIGxl
dmVsCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9iYXNpYy1hbGwt
dHlwZXMtb2YtZXZlbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVz
L2Jhc2ljLWFsbC10eXBlcy1vZi1ldmVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi44NTgxZWIyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vQmF0dGVyeVN0YXR1cy9iYXNpYy1hbGwtdHlwZXMtb2YtZXZlbnRzLmh0bWwKQEAgLTAsMCAr
MSw5IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvYmFzaWMtYWxsLXR5cGVzLW9mLWV2ZW50cy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5
U3RhdHVzL2Jhc2ljLW9wZXJhdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9CYXR0ZXJ5U3RhdHVzL2Jhc2ljLW9wZXJhdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzYzhmMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvYmFzaWMtb3BlcmF0aW9uLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDEzIEBACitUZXN0cyB0aGUgYmFzaWMgb3BlcmF0aW9uIG9mIEJhdHRlcnlT
dGF0dXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGJhdHRlcnkuY2hh
cmdpbmcgaXMgY2hhcmdpbmcKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZ1RpbWUgaXMgY2hhcmdpbmdU
aW1lCitQQVNTIGJhdHRlcnkuZGlzY2hhcmdpbmdUaW1lIGlzIGRpc2NoYXJnaW5nVGltZQorUEFT
UyBiYXR0ZXJ5LmxldmVsIGlzIGxldmVsCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9iYXNpYy1vcGVyYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Jh
dHRlcnlTdGF0dXMvYmFzaWMtb3BlcmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOTE1N2JlNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL0JhdHRlcnlTdGF0dXMvYmFzaWMtb3BlcmF0aW9uLmh0bWwKQEAgLTAsMCArMSw5IEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVz
dHMvYmFzaWMtb3BlcmF0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvZXZlbnQtYWZ0ZXIt
bmF2aWdhdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3Rh
dHVzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjhlNmJjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24tZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMyBAQAorVGVzdHMgZm9yIGEgY3Jhc2ggd2hlcmUgYW4gZXZlbnQgaXMg
ZmlyZWQgYWZ0ZXIgdGhlIHBhZ2UgaGFzIGJlZW4gbmF2aWdhdGVkIGF3YXkgd2hlbiB0aGUgb3Jp
Z2luYWwgcGFnZSBpcyBpbiB0aGUgcGFnZSBjYWNoZS4KKworU1VDQ0VTUwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9u
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2V2ZW50LWFmdGVyLW5h
dmlnYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDU3YWVm
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9l
dmVudC1hZnRlci1uYXZpZ2F0aW9uLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZXZlbnQtYWZ0
ZXItbmF2aWdhdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxl
LWZyYW1lcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OWRlMmNkMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlT
dGF0dXMvbXVsdGlwbGUtZnJhbWVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUZXN0
cyB1c2luZyBCYXR0ZXJ5U3RhdHVzIGZyb20gbXVsdGlwbGUgZnJhbWVzLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIGNoYXJnaW5nCitQ
QVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIGNoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRp
c2NoYXJnaW5nVGltZSBpcyBkaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBs
ZXZlbAorUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIGNoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hh
cmdpbmdUaW1lIGlzIGNoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBp
cyBkaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBsZXZlbAorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvbXVsdGlwbGUtZnJhbWVzLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNzljYWMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL211bHRpcGxlLWZyYW1lcy5o
dG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL211bHRpcGxlLWZyYW1lcy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0
ZXJ5U3RhdHVzL3Jlc291cmNlcy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLW5ldy5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9yZXNvdXJjZXMvZXZlbnQtYWZ0ZXItbmF2
aWdhdGlvbi1uZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTMy
YjVhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1
cy9yZXNvdXJjZXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi1uZXcuaHRtbApAQCAtMCwwICsxLDEz
IEBACis8aHRtbD4KKyAgPGhlYWQ+CisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICAgVGVzdHMgZm9y
IGEgY3Jhc2ggd2hlcmUgYW4gZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgdGhlIHBhZ2UgaGFzIGJlZW4g
bmF2aWdhdGVkCisgICAgYXdheSB3aGVuIHRoZSBvcmlnaW5hbCBwYWdlIGlzIGluIHRoZSBwYWdl
IGNhY2hlLjxicj48YnI+CisgICAgU1VDQ0VTUworICAgIDxzY3JpcHQ+CisgICAgICAgIGludGVy
bmFscy5zZXRCYXR0ZXJ5U3RhdHVzKGRvY3VtZW50LCAnY2hhcmdpbmdjaGFuZ2UnLCB0cnVlLCAz
MDAwLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksIDAuNSk7CisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICA8L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9odG1s
PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxi
YWNrLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMv
YWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNzM3NjY4OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLmpz
CkBAIC0wLDAgKzEsNDQgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyB0aGF0IGFkZGluZyBhIG5ldyBl
dmVudCBsaXN0ZW5lciBmcm9tIGEgY2FsbGJhY2sgd29ya3MgYXMgZXhwZWN0ZWQuJyk7CisKK3Zh
ciBjaGFyZ2luZyA9IGZhbHNlOwordmFyIGNoYXJnaW5nVGltZSA9IE51bWJlci5QT1NJVElWRV9J
TkZJTklUWTsKK3ZhciBkaXNjaGFyZ2luZ1RpbWUgPSA2MDAwOwordmFyIGxldmVsID0gMC43Owor
Cit2YXIgYmF0dGVyeSA9IG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5OworCitmdW5jdGlvbiBjaGVj
a0JhdHRlcnlTdGF0dXMoKSB7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmcnLCAnY2hh
cmdpbmcnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFyZ2luZ1RpbWUnLCAnY2hhcmdpbmdU
aW1lJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuZGlzY2hhcmdpbmdUaW1lJywgJ2Rpc2NoYXJn
aW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmxldmVsJywgJ2xldmVsJyk7Cit9CisK
K3ZhciBmaXJzdExpc3RlbmVyRXZlbnRzID0gMDsKK2Z1bmN0aW9uIGZpcnN0TGlzdGVuZXIoKSB7
CisgICAgY2hlY2tCYXR0ZXJ5U3RhdHVzKCk7CisgICAgaWYgKCsrZmlyc3RMaXN0ZW5lckV2ZW50
cyA9PSAxKSB7CisgICAgICAgIGJhdHRlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhcmdpbmdjaGFu
Z2UnLCBzZWNvbmRMaXN0ZW5lcik7CisgICAgICAgIGludGVybmFscy5zZXRCYXR0ZXJ5U3RhdHVz
KGRvY3VtZW50LCAnY2hhcmdpbmdjaGFuZ2UnLCBjaGFyZ2luZywgY2hhcmdpbmdUaW1lLCBkaXNj
aGFyZ2luZ1RpbWUsIGxldmVsKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZmlyc3RMaXN0ZW5lckV2
ZW50cyA+IDIpCisgICAgICAgIHRlc3RGYWlsZWQoJ1RvbyBtYW55IGV2ZW50cyBmb3IgZmlyc3Qg
bGlzdGVuZXIuJyk7CisgICAgbWF5YmVGaW5pc2hUZXN0KCk7Cit9CisKK3ZhciBzZWNvbmRMaXN0
ZW5lckV2ZW50cyA9IDA7CitmdW5jdGlvbiBzZWNvbmRMaXN0ZW5lcigpIHsKKyAgICBjaGVja0Jh
dHRlcnlTdGF0dXMoKTsKKyAgICBpZiAoKytzZWNvbmRMaXN0ZW5lckV2ZW50cyA+IDEpCisgICAg
ICAgIHRlc3RGYWlsZWQoJ1RvbyBtYW55IGV2ZW50cyBmb3Igc2Vjb25kIGxpc3RlbmVyLicpOwor
ICAgIG1heWJlRmluaXNoVGVzdCgpOworfQorCitmdW5jdGlvbiBtYXliZUZpbmlzaFRlc3QoKSB7
CisgICAgaWYgKGZpcnN0TGlzdGVuZXJFdmVudHMgPT0gMiAmJiBzZWNvbmRMaXN0ZW5lckV2ZW50
cyA9PSAxKQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworYmF0dGVyeS5hZGRFdmVudExp
c3RlbmVyKCdjaGFyZ2luZ2NoYW5nZScsIGZpcnN0TGlzdGVuZXIpOworaW50ZXJuYWxzLnNldEJh
dHRlcnlTdGF0dXMoZG9jdW1lbnQsICdjaGFyZ2luZ2NoYW5nZScsIGNoYXJnaW5nLCBjaGFyZ2lu
Z1RpbWUsIGRpc2NoYXJnaW5nVGltZSwgbGV2ZWwpOword2luZG93LmpzVGVzdElzQXN5bmMgPSB0
cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3Jp
cHQtdGVzdHMvYmFzaWMtYWxsLXR5cGVzLW9mLWV2ZW50cy5qcyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2Jhc2ljLWFsbC10eXBlcy1vZi1ldmVudHMu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmYmUxZQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3Rz
L2Jhc2ljLWFsbC10eXBlcy1vZi1ldmVudHMuanMKQEAgLTAsMCArMSw0MiBAQAorZGVzY3JpcHRp
b24oJ1Rlc3RzIHRoZSBiYXNpYyBvcGVyYXRpb24gb2YgYWxsIEJhdHRlcnlTdGF0dXMgZXZlbnRz
LicpOworCit2YXIgY2hhcmdpbmcgPSBmYWxzZTsKK3ZhciBjaGFyZ2luZ1RpbWUgPSBOdW1iZXIu
UE9TSVRJVkVfSU5GSU5JVFk7Cit2YXIgZGlzY2hhcmdpbmdUaW1lID0gNjAwMDsKK3ZhciBsZXZl
bCA9IDAuNzsKKwordmFyIGJhdHRlcnkgPSBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeTsKKworZnVu
Y3Rpb24gY2hlY2tCYXR0ZXJ5U3RhdHVzKCkgeworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmNoYXJn
aW5nJywgJ2NoYXJnaW5nJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmdUaW1lJywg
J2NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZScs
ICdkaXNjaGFyZ2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5sZXZlbCcsICdsZXZl
bCcpOworfQorCitiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywgZnVu
Y3Rpb24oKSB7CisgICAgZGVidWcoJ2NoYXJnaW5nY2hhbmdlIGV2ZW50IGlzIHJhaXNlZCcpOwor
ICAgIGNoZWNrQmF0dGVyeVN0YXR1cygpOworfSk7CisKK2JhdHRlcnkuYWRkRXZlbnRMaXN0ZW5l
cignY2hhcmdpbmd0aW1lY2hhbmdlJywgZnVuY3Rpb24oKSB7CisgICAgZGVidWcoJ2NoYXJnaW5n
dGltZWNoYW5nZSBldmVudCBpcyByYWlzZWQnKTsKKyAgICBjaGVja0JhdHRlcnlTdGF0dXMoKTsK
K30pOworCitiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2Rpc2NoYXJnaW5ndGltZWNoYW5nZScs
IGZ1bmN0aW9uKCkgeworICAgIGRlYnVnKCdkaXNjaGFyZ2luZ3RpbWVjaGFuZ2UgZXZlbnQgaXMg
cmFpc2VkJyk7CisgICAgY2hlY2tCYXR0ZXJ5U3RhdHVzKCk7Cit9KTsKKworYmF0dGVyeS5hZGRF
dmVudExpc3RlbmVyKCdsZXZlbGNoYW5nZScsIGZ1bmN0aW9uKCkgeworICAgIGRlYnVnKCdsZXZl
bGNoYW5nZSBldmVudCBpcyByYWlzZWQnKTsKKyAgICBjaGVja0JhdHRlcnlTdGF0dXMoKTsKKyAg
ICBmaW5pc2hKU1Rlc3QoKTsKK30pOworCitpbnRlcm5hbHMuc2V0QmF0dGVyeVN0YXR1cyhkb2N1
bWVudCwgJ2NoYXJnaW5nY2hhbmdlJywgY2hhcmdpbmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdp
bmdUaW1lLCBsZXZlbCk7CitpbnRlcm5hbHMuc2V0QmF0dGVyeVN0YXR1cyhkb2N1bWVudCwgJ2No
YXJnaW5ndGltZWNoYW5nZScsIGNoYXJnaW5nLCBjaGFyZ2luZ1RpbWUsIGRpc2NoYXJnaW5nVGlt
ZSwgbGV2ZWwpOworaW50ZXJuYWxzLnNldEJhdHRlcnlTdGF0dXMoZG9jdW1lbnQsICdkaXNjaGFy
Z2luZ3RpbWVjaGFuZ2UnLCBjaGFyZ2luZywgY2hhcmdpbmdUaW1lLCBkaXNjaGFyZ2luZ1RpbWUs
IGxldmVsKTsKK2ludGVybmFscy5zZXRCYXR0ZXJ5U3RhdHVzKGRvY3VtZW50LCAnbGV2ZWxjaGFu
Z2UnLCBjaGFyZ2luZywgY2hhcmdpbmdUaW1lLCBkaXNjaGFyZ2luZ1RpbWUsIGxldmVsKTsKK3dp
bmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2Jhc2ljLW9wZXJhdGlvbi5qcyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2Jhc2ljLW9wZXJhdGlv
bi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNThmMThjCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVz
dHMvYmFzaWMtb3BlcmF0aW9uLmpzCkBAIC0wLDAgKzEsMTkgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0
cyB0aGUgYmFzaWMgb3BlcmF0aW9uIG9mIEJhdHRlcnlTdGF0dXMuJyk7CisKK3ZhciBjaGFyZ2lu
ZyA9IGZhbHNlOwordmFyIGNoYXJnaW5nVGltZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsK
K3ZhciBkaXNjaGFyZ2luZ1RpbWUgPSA2MDAwOwordmFyIGxldmVsID0gMC43OworCit2YXIgYmF0
dGVyeSA9IG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5OworCitiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVu
ZXIoJ2NoYXJnaW5nY2hhbmdlJywgZnVuY3Rpb24oKSB7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnku
Y2hhcmdpbmcnLCAnY2hhcmdpbmcnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFyZ2luZ1Rp
bWUnLCAnY2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuZGlzY2hhcmdpbmdU
aW1lJywgJ2Rpc2NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmxldmVsJywg
J2xldmVsJyk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKworaW50ZXJuYWxzLnNldEJhdHRl
cnlTdGF0dXMoZG9jdW1lbnQsICdjaGFyZ2luZ2NoYW5nZScsIGNoYXJnaW5nLCBjaGFyZ2luZ1Rp
bWUsIGRpc2NoYXJnaW5nVGltZSwgbGV2ZWwpOword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVl
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQt
dGVzdHMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Jh
dHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24uanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU3YzUxMgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL2V2ZW50LWFm
dGVyLW5hdmlnYXRpb24uanMKQEAgLTAsMCArMSwxMyBAQAorZGVzY3JpcHRpb24oJ1Rlc3RzIGZv
ciBhIGNyYXNoIHdoZXJlIGFuIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHRoZSBwYWdlIGhhcyBiZWVu
IG5hdmlnYXRlZCBhd2F5IHdoZW4gdGhlIG9yaWdpbmFsIHBhZ2UgaXMgaW4gdGhlIHBhZ2UgY2Fj
aGUuJyk7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCdXZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVy
ZW5jZUtleScsIDEpOworZWxzZQorICAgIGRlYnVnKCdUaGlzIHRlc3QgY2FuIG5vdCBiZSBydW4g
d2l0aG91dCB0aGUgTGF5b3V0VGVzdENvbnRyb2xsZXInKTsKKworZG9jdW1lbnQuYm9keS5vbmxv
YWQgPSBmdW5jdGlvbigpIHsKKyAgICBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5hZGRFdmVudExp
c3RlbmVyKCdjaGFyZ2luZ2NoYW5nZScsIGZ1bmN0aW9uKCkgeyB9ICk7CisgICAgd2luZG93Lmxv
Y2F0aW9uID0gInJlc291cmNlcy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLW5ldy5odG1sIjsKK30K
Kword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvbXVsdGlwbGUtZnJhbWVzLmpzIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9zY3JpcHQtdGVzdHMvbXVsdGlwbGUt
ZnJhbWVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OTU4MWEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3Njcmlw
dC10ZXN0cy9tdWx0aXBsZS1mcmFtZXMuanMKQEAgLTAsMCArMSw1MSBAQAorZGVzY3JpcHRpb24o
J1Rlc3RzIHVzaW5nIEJhdHRlcnlTdGF0dXMgZnJvbSBtdWx0aXBsZSBmcmFtZXMuJyk7CisKK3Zh
ciBjaGFyZ2luZyA9IGZhbHNlOwordmFyIGNoYXJnaW5nVGltZSA9IE51bWJlci5QT1NJVElWRV9J
TkZJTklUWTsKK3ZhciBkaXNjaGFyZ2luZ1RpbWUgPSA2MDAwOwordmFyIGxldmVsID0gMC43Owor
Cit2YXIgYmF0dGVyeSA9IG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5OworCitmdW5jdGlvbiBjaGVj
a0JhdHRlcnlTdGF0dXMoKSB7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmcnLCAnY2hh
cmdpbmcnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFyZ2luZ1RpbWUnLCAnY2hhcmdpbmdU
aW1lJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuZGlzY2hhcmdpbmdUaW1lJywgJ2Rpc2NoYXJn
aW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmxldmVsJywgJ2xldmVsJyk7Cit9CisK
K2Z1bmN0aW9uIGNoZWNrQ2hpbGRCYXR0ZXJ5U3RhdHVzKCkgeworICAgIHNob3VsZEJlKCdiYXR0
ZXJ5LmNoYXJnaW5nJywgJ2NoYXJnaW5nJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdp
bmdUaW1lJywgJ2NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmRpc2NoYXJn
aW5nVGltZScsICdkaXNjaGFyZ2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5sZXZl
bCcsICdsZXZlbCcpOworfQorCit2YXIgaGFzTWFpbkZyYW1lRXZlbnRGaXJlZCA9IGZhbHNlOwor
ZnVuY3Rpb24gbWFpbkZyYW1lTGlzdGVuZXIoKSB7CisgICAgaGFzTWFpbkZyYW1lRXZlbnRGaXJl
ZCA9IHRydWU7CisgICAgbWF5YmVGaW5pc2hUZXN0KCk7Cit9CisKK3ZhciBoYXNDaGlsZEZyYW1l
RXZlbnRGaXJlZCA9IGZhbHNlOworZnVuY3Rpb24gY2hpbGRGcmFtZUxpc3RlbmVyKCkgeworICAg
IGhhc0NoaWxkRnJhbWVFdmVudEZpcmVkID0gdHJ1ZTsKKyAgICBtYXliZUZpbmlzaFRlc3QoKTsK
K30KKworZnVuY3Rpb24gbWF5YmVGaW5pc2hUZXN0KCkgeworICAgIGlmIChoYXNNYWluRnJhbWVF
dmVudEZpcmVkICYmIGhhc0NoaWxkRnJhbWVFdmVudEZpcmVkKSB7CisgICAgICAgIGNoZWNrQmF0
dGVyeVN0YXR1cygpOworICAgICAgICBjaGVja0NoaWxkQmF0dGVyeVN0YXR1cygpOworICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9Cit9CisKK3ZhciBjaGlsZEZyYW1lID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNoaWxk
RnJhbWUpOwordmFyIGNoaWxkQmF0dGVyeSA9IGNoaWxkRnJhbWUuY29udGVudFdpbmRvdy5uYXZp
Z2F0b3Iud2Via2l0QmF0dGVyeQorY2hpbGRCYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJn
aW5nY2hhbmdlJywgY2hpbGRGcmFtZUxpc3RlbmVyKTsKK2JhdHRlcnkuYWRkRXZlbnRMaXN0ZW5l
cignY2hhcmdpbmdjaGFuZ2UnLCBtYWluRnJhbWVMaXN0ZW5lcik7CisKK2ludGVybmFscy5zZXRC
YXR0ZXJ5U3RhdHVzKGRvY3VtZW50LCAnY2hhcmdpbmdjaGFuZ2UnLCBjaGFyZ2luZywgY2hhcmdp
bmdUaW1lLCBkaXNjaGFyZ2luZ1RpbWUsIGxldmVsKTsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2Ny
aXB0LXRlc3RzL3VwZGF0ZXMuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVz
L3NjcmlwdC10ZXN0cy91cGRhdGVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjdhOTY2NjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0
ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy91cGRhdGVzLmpzCkBAIC0wLDAgKzEsMzkgQEAKK2Rlc2Ny
aXB0aW9uKCdUZXN0cyB0aGF0IHVwZGF0ZXMgdG8gdGhlIGJhdHRlcnkgZXZlbnQgY2F1c2VzIG5l
dyBldmVudHMgdG8gZmlyZS4nKTsKKwordmFyIGNoYXJnaW5nID0gZmFsc2U7Cit2YXIgY2hhcmdp
bmdUaW1lID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwordmFyIGRpc2NoYXJnaW5nVGltZSA9
IDYwMDA7Cit2YXIgbGV2ZWwgPSAwLjc7CisKK3ZhciBiYXR0ZXJ5ID0gbmF2aWdhdG9yLndlYmtp
dEJhdHRlcnk7CisKK2Z1bmN0aW9uIGNoZWNrQmF0dGVyeVN0YXR1cygpIHsKKyAgICBzaG91bGRC
ZSgnYmF0dGVyeS5jaGFyZ2luZycsICdjaGFyZ2luZycpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5
LmNoYXJnaW5nVGltZScsICdjaGFyZ2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5k
aXNjaGFyZ2luZ1RpbWUnLCAnZGlzY2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRl
cnkubGV2ZWwnLCAnbGV2ZWwnKTsKK30KKworZnVuY3Rpb24gc2V0QmF0dGVyeVN0YXR1cygpIHsK
KyAgICBpbnRlcm5hbHMuc2V0QmF0dGVyeVN0YXR1cyhkb2N1bWVudCwgJ2NoYXJnaW5nY2hhbmdl
JywgY2hhcmdpbmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZlbCk7Cit9CisK
K2Z1bmN0aW9uIGZpcnN0TGlzdGVuZXIoKSB7CisgICAgY2hlY2tCYXR0ZXJ5U3RhdHVzKCk7Cisg
ICAgYmF0dGVyeS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2NoYW5nZScsIGZpcnN0TGlz
dGVuZXIpOworICAgIGJhdHRlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCB1
cGRhdGVMaXN0ZW5lcik7CisgICAgY2hhcmdpbmcgPSB0cnVlOworICAgIGNoYXJnaW5nVGltZSA9
IDcwMDA7CisgICAgZGlzY2hhcmdpbmdUaW1lID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwor
ICAgIGxldmVsID0gMC4zOworCXNldEJhdHRlcnlTdGF0dXMoKTsKK30KKworZnVuY3Rpb24gdXBk
YXRlTGlzdGVuZXIoZXZlbnQpIHsKKyAgICBjaGVja0JhdHRlcnlTdGF0dXMoZXZlbnQpOworICAg
IGZpbmlzaEpTVGVzdCgpOworfQorCitiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5n
Y2hhbmdlJywgZmlyc3RMaXN0ZW5lcik7CitzZXRCYXR0ZXJ5U3RhdHVzKCk7Cit3aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0
ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy93aW5kb3ctcHJvcGVydHkuanMgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3NjcmlwdC10ZXN0cy93aW5kb3ctcHJvcGVydHkuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmZTM3NgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvc2NyaXB0LXRlc3RzL3dpbmRv
dy1wcm9wZXJ0eS5qcwpAQCAtMCwwICsxLDIzIEBACitkZXNjcmlwdGlvbignVGVzdHMgdGhhdCB0
aGUgd2luZG93Lm5hdmlnYXRvci5iYXR0ZXJ5IHByb3BlcnRpZXMgYXJlIHByZXNlbnQuJyk7CisK
K2Z1bmN0aW9uIGhhc09uQmF0dGVyeVByb3BlcnR5KCkKK3sKKyAgICB2YXIgcmVzdWx0ID0gMDsK
KyAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeSkgeworICAg
ICAgICBpZiAocHJvcGVydHkgPT0gJ29uY2hhcmdpbmdjaGFuZ2UnIHx8CisgICAgICAgICAgICBw
cm9wZXJ0eSA9PSAnb25jaGFyZ2luZ3RpbWVjaGFuZ2UnIHx8CisgICAgICAgICAgICBwcm9wZXJ0
eSA9PSAnb25kaXNjaGFyZ2luZ3RpbWVjaGFuZ2UnIHx8CisgICAgICAgICAgICBwcm9wZXJ0eSA9
PSAnb25sZXZlbGNoYW5nZScpCisgICAgICAgICAgICByZXN1bHQgKz0gMTsKKyAgICB9CisgICAg
aWYgKHJlc3VsdCA9PSA0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3Nob3VsZEJlVHJ1ZSgidHlwZW9mIG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5ID09ICdv
YmplY3QnIik7CitzaG91bGRCZVRydWUoImhhc09uQmF0dGVyeVByb3BlcnR5KCkiKTsKK3Nob3Vs
ZEJlVHJ1ZSgibmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29uY2hhcmdp
bmdjaGFuZ2UnKSIpOworc2hvdWxkQmVUcnVlKCJuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5oYXNP
d25Qcm9wZXJ0eSgnb25jaGFyZ2luZ3RpbWVjaGFuZ2UnKSIpOworc2hvdWxkQmVUcnVlKCJuYXZp
Z2F0b3Iud2Via2l0QmF0dGVyeS5oYXNPd25Qcm9wZXJ0eSgnb25kaXNjaGFyZ2luZ3RpbWVjaGFu
Z2UnKSIpOworc2hvdWxkQmVUcnVlKCJuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5oYXNPd25Qcm9w
ZXJ0eSgnb25sZXZlbGNoYW5nZScpIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9CYXR0ZXJ5U3RhdHVzL3VwZGF0ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vQmF0dGVyeVN0YXR1cy91cGRhdGVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4zMTczNGMxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vQmF0dGVyeVN0YXR1cy91cGRhdGVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3
IEBACitUZXN0cyB0aGF0IHVwZGF0ZXMgdG8gdGhlIGJhdHRlcnkgZXZlbnQgY2F1c2VzIG5ldyBl
dmVudHMgdG8gZmlyZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYmF0
dGVyeS5jaGFyZ2luZyBpcyBjaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBj
aGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgZGlzY2hhcmdpbmdU
aW1lCitQQVNTIGJhdHRlcnkubGV2ZWwgaXMgbGV2ZWwKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBp
cyBjaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBjaGFyZ2luZ1RpbWUKK1BB
U1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgZGlzY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRl
cnkubGV2ZWwgaXMgbGV2ZWwKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3Rh
dHVzL3VwZGF0ZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlTdGF0dXMvdXBk
YXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMjUyNjkKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3VwZGF0
ZXMuaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy91cGRhdGVzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0JhdHRlcnlT
dGF0dXMvd2luZG93LXByb3BlcnR5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L0JhdHRlcnlTdGF0dXMvd2luZG93LXByb3BlcnR5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWU2ZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy93aW5kb3ctcHJvcGVydHktZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTUgQEAKK1Rlc3RzIHRoYXQgdGhlIHdpbmRvdy5uYXZpZ2F0b3IuYmF0dGVy
eSBwcm9wZXJ0aWVzIGFyZSBwcmVzZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyB0eXBlb2YgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkgPT0gJ29iamVjdCcgaXMgdHJ1
ZQorUEFTUyBoYXNPbkJhdHRlcnlQcm9wZXJ0eSgpIGlzIHRydWUKK1BBU1MgbmF2aWdhdG9yLndl
YmtpdEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29uY2hhcmdpbmdjaGFuZ2UnKSBpcyB0cnVlCitQ
QVNTIG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5Lmhhc093blByb3BlcnR5KCdvbmNoYXJnaW5ndGlt
ZWNoYW5nZScpIGlzIHRydWUKK1BBU1MgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3duUHJv
cGVydHkoJ29uZGlzY2hhcmdpbmd0aW1lY2hhbmdlJykgaXMgdHJ1ZQorUEFTUyBuYXZpZ2F0b3Iu
d2Via2l0QmF0dGVyeS5oYXNPd25Qcm9wZXJ0eSgnb25sZXZlbGNoYW5nZScpIGlzIHRydWUKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3dpbmRvdy1wcm9wZXJ0eS5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy93aW5kb3ctcHJvcGVydHku
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjNmZDNhCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vQmF0dGVyeVN0YXR1cy93aW5kb3ctcHJv
cGVydHkuaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy93aW5kb3ctcHJvcGVydHkuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4IDhiM2E5ZDUuLjRjN2U0M2YgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25z
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9u
cy50eHQKQEAgLTExNCw2ICsxMTQsOSBAQCBCVUdDUjEwMzkzOSBTS0lQIDogaHR0cC90ZXN0cy9h
cHBjYWNoZS93cm9uZy1jb250ZW50LXR5cGUuaHRtbCA9IFRFWFQKIC8vIFZpYnJhdGlvbiBBUEkg
aXMgbm90IHN1cHBvcnRlZCB5ZXQgaW4gdGhlIGNocm9taXVtIHBvcnQuCiBCVUdXSzcyMDEwIFNL
SVAgOiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwgPSBGQUlMCiAKKy8vIEJhdHRl
cnkgU3RhdHVzIEFQSSBpcyBub3Qgc3VwcG9ydGVkIHlldCBpbiB0aGUgY2hyb21pdW0gcG9ydC4K
K0JVR1dLNjI2OTggU0tJUCA6IGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMgPSBQQVNTIEZBSUwKKwog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIC8vIFdPTlRGSVggVEVTVFMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9Ta2lwcGVkCmluZGV4IDkwYjY3MGIuLjJkM2FjYTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lw
cGVkCkBAIC00MDcsNiArNDA3LDkgQEAgd2ViaW50ZW50cy8KICMgUG9pbnRlciBMb2NrIGlzIG5v
dCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIAorI0JhdHRlcnkgU3RhdHVzIEFQSSBzdXBw
b3J0IG5vdCB5ZXQuIGh0dHA6Ly93ZWJraXQub3JnL2IvNjI2OTgKK2Zhc3QvZG9tL0JhdHRlcnlT
dGF0dXMKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBURVNUUyBGQUlMSU5HCiAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tp
cHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCmluZGV4IDljZGQ5MDQuLjM4
OTMzZmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCkBAIC01NzcsMyArNTc3LDcgQEAgZmFz
dC9kb20vbmF2aWdhdG9yLXZpYnJhdGlvbi5odG1sCiAjIGh0dHA6Ly8vd2Via2l0Lm9yZy9iLzgw
NTMxCiAjIFJFR1JFU1NJT04ocjExMDA3Mik6IGZhc3QvZm9ybXMvdGV4dGZpZWxkLW92ZXJmbG93
Lmh0bWwgaXMgZmFpbGluZwogZmFzdC9mb3Jtcy90ZXh0ZmllbGQtb3ZlcmZsb3cuaHRtbAorCisj
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjY5OAorIyBOZWVkcyBC
YXR0ZXJ5Q2xpZW50IGltcGxlbWVudGF0aW9uLgorZmFzdC9kb20vQmF0dGVyeVN0YXR1cwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L1NraXBwZWQKaW5kZXggY2UwMjE5OS4uNGFjMmM5MiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9Ta2lwcGVkCkBAIC0zNjIsNiArMzYyLDkgQEAgZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0
bWVzc2FnZS1hcnJheXMuaHRtbAogI1ZpYnJhdGlvbiBBUEkgaXMgbm90IGltcGxlbWVudGVkLgog
ZmFzdC9kb20vbmF2aWdhdG9yLXZpYnJhdGlvbi5odG1sCiAKKyNCYXR0ZXJ5IFN0YXR1cyBBUEkg
aXMgbm90IGltcGxlbWVudGVkLgorZmFzdC9kb20vQmF0dGVyeVN0YXR1cworCiAjID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PSAjCiAjICAgICAgIERyYWcgYW5kIERyb3AgU3VwcG9ydCBpbiBEUlQuICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiAjID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PSAjCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4IDFkNDU4ZTcuLmU1NjZlMWIgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC0xNjY1LDYgKzE2NjUsOSBAQCBmYXN0L3JlcGFpbnQv
dHJhbnNmb3JtLWFic29sdXRlLWluLXBvc2l0aW9uZWQtY29udGFpbmVyLmh0bWwKICNWaWJyYXRp
b24gQVBJIGlzIG5vdCBpbXBsZW1lbnRlZC4KIGZhc3QvZG9tL25hdmlnYXRvci12aWJyYXRpb24u
aHRtbAogCisjQmF0dGVyeSBTdGF0dXMgQVBJIGlzIG5vdCBpbXBsZW1lbnRlZC4KK2Zhc3QvZG9t
L0JhdHRlcnlTdGF0dXMKKwogIyBUaG9zZSB0ZXN0cyBuZWVkIGEgdGV4dCBiYXNlbGluZSBhZnRl
ciBsYXppbHkgYWxsb2NhdGluZyBsYXllcnMuCiAjIFRoZSBjaGFuZ2Ugc2hvdWxkIG9ubHkgYmUg
bGF5ZXIgcmVtb3ZhbC4KIGFuaW1hdGlvbnMvY29tYm8tdHJhbnNmb3JtLXRyYW5zbGF0ZStzY2Fs
ZS5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVk
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZAppbmRleCBhNTA2NjIwLi4y
OTI1NjIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1NraXBwZWQKQEAgLTIwNjIsMyAr
MjA2Miw2IEBAIGZhc3QvbXV0YXRpb24vZW5kLW9mLXRhc2stZGVsaXZlcnkuaHRtbAogCiAjVmli
cmF0aW9uIEFQSSBpcyBub3QgaW1wbGVtZW50ZWQuCiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0
aW9uLmh0bWwKKworI0JhdHRlcnkgU3RhdHVzIEFQSSBpcyBub3QgaW1wbGVtZW50ZWQuCitmYXN0
L2RvbS9CYXR0ZXJ5U3RhdHVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGRhNGM5YzkuLjRjNDFl
N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMzMzLDYgKzIzMzMsMjIgQEAgU0VUKFdlYkNv
cmVUZXN0U3VwcG9ydF9TT1VSQ0VTCiAgICAgdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcAog
KQogCitJRiAoRU5BQkxFX0JBVFRFUllfU1RBVFVTKQorICAgIExJU1QoQVBQRU5EIFdlYkNvcmVf
SU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9iYXR0
ZXJ5IgorICAgICkKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0lETF9GSUxFUworICAgICAgICBN
b2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5pZGwKKyAgICAgICAgTW9kdWxlcy9iYXR0
ZXJ5L0JhdHRlcnlNYW5hZ2VyLmlkbAorICAgICkKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKKyAgICAgICAgTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuY3BwCisgICAg
ICAgIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAKKyAgICAgICAgTW9kdWxl
cy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcAorICAgICAgICBNb2R1bGVzL2JhdHRlcnkvQmF0
dGVyeVN0YXR1cy5jcHAKKyAgICApCitFTkRJRiAoKQorCiAjIE1vZHVsZXMgdGhhdCB0aGUgYmlu
ZGluZ3MgZ2VuZXJhdG9yIHNjcmlwdHMgbWF5IHVzZQogU0VUKFNDUklQVFNfUkVTT0xWRV9TVVBQ
TEVNRU5UQUwKICAgICAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5w
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDVlNTljZGYuLjU1ZGI1OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MDQgQEAKKzIwMTItMDMtMTUgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+
CisKKyAgICAgICAgU3VwcG9ydCBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjY5OAorCisgICAgICAgIEJhdHRl
cnkgU3RhdHVzIEFQSSBpcyBpbXBsZW1lbnRlZCB1bmRlciB0aGUgTmF2aWdhdG9yIGNsYXNzLgor
ICAgICAgICBCYXR0ZXJ5IFN0YXR1cyBBUEkgaGFzIGZvdXIgdHlwZXMgb2YgZXZlbnRzLCBhbmQg
YWxsIGV2ZW50cyBhcmUgb3BlcmF0ZWQgYmFzZWQgb24gYSBjYWxsYmFjayBtZWNoYW5pc20uCisg
ICAgICAgICA6IG9uY2hhcmdpbmdjaGFuZ2UsIG9uY2hhcmdpbmd0aW1lY2hhbmdlLCBvbmRpc2No
YXJnaW5ndGltZWNoYW5nZSwgb25sZXZlbGNoYW5nZS4KKyAgICAgICAgVGhlIGJhdHRlcnkgc3Rh
dHVzIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyBCYXR0ZXJ5TWFuYWdlcihuYXZpZ2F0b3Iud2Via2l0
QmF0dGVyeSksIGFuZCBiYXR0ZXJ5IHN0YXR1cyBpcyBjb250cm9sbGVkIGJ5IEJhdHRlcnlDb250
cm9sbGVyIHdoaWNoIG1hbmFnZXMgaW5zdGFuY2VzIG9mIEJhdHRlcnlNYW5hZ2VyLgorICAgICAg
ICBXaGVuIGJhdHRlcnkgc3RhdHVzIGV2ZW50IGlzIHJhaXNlZCwgQmF0dGVyeUNvbnRyb2xsZXIg
Y2FsbHMgYWxsIHJlZ2lzdGVyZWQgQmF0dGVyeU1hbmFnZXIncyBldmVudCBkaXNwYXRjaGVyLgor
ICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9iYXR0ZXJ5LXN0YXR1cy8KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC9kb20vQmF0
dGVyeVN0YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5odG1sCisgICAgICAgICAgICAg
ICBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL2Jhc2ljLWFsbC10eXBlcy1vZi1ldmVudHMuaHRtbAor
ICAgICAgICAgICAgICAgZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9iYXNpYy1vcGVyYXRpb24uaHRt
bAorICAgICAgICAgICAgICAgZmFzdC9kb20vQmF0dGVyeVN0YXR1cy9ldmVudC1hZnRlci1uYXZp
Z2F0aW9uLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvbXVsdGlw
bGUtZnJhbWVzLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL0JhdHRlcnlTdGF0dXMvdXBk
YXRlcy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2RvbS9CYXR0ZXJ5U3RhdHVzL3dpbmRvdy1w
cm9wZXJ0eS5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBNb2R1
bGVzL2JhdHRlcnkvQmF0dGVyeUNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQmF0dGVyeUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50
Ojp+QmF0dGVyeUNsaWVudCk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250
cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJhdHRlcnlDb250cm9sbGVyOjpCYXR0ZXJ5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpCYXR0ZXJ5Q29udHJvbGxlcjo6fkJhdHRlcnlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhdHRlcnlDb250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVy
eUNvbnRyb2xsZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDb250
cm9sbGVyOjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29udHJv
bGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5
Q29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNv
bnRyb2xsZXI6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OnByb3ZpZGVCYXR0ZXJ5VG8p
OgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQmF0dGVyeUNvbnRyb2xsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6OmNsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXR0ZXJ5Q29udHJvbGxlcjo6ZnJvbSk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L0Jh
dHRlcnlNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVy
eU1hbmFnZXI6On5CYXR0ZXJ5TWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFu
YWdlcjo6QmF0dGVyeU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6
OmNoYXJnaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpjaGFyZ2luZ1Rp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmRpc2NoYXJnaW5nVGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6bGV2ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6QmF0dGVyeU1hbmFnZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMpOgorICAgICAgICAo
V2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0
dGVyeU1hbmFnZXI6OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6
c3RvcCk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCYXR0ZXJ5TWFuYWdlcik6CisgICAgICAg
IChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6aW50ZXJmYWNlTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpCYXR0ZXJ5TWFuYWdlcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmNhblN1c3BlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6QmF0dGVyeU1hbmFnZXI6OmV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXR0ZXJ5TWFuYWdlcjo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhdHRlcnlNYW5hZ2VyOjpyZWZFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpC
YXR0ZXJ5TWFuYWdlcjo6ZGVyZWZFdmVudFRhcmdldCk6CisgICAgICAgICogTW9kdWxlcy9iYXR0
ZXJ5L0JhdHRlcnlNYW5hZ2VyLmlkbDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5
L0JhdHRlcnlTdGF0dXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QmF0dGVyeVN0YXR1czo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRl
cnlTdGF0dXM6OkJhdHRlcnlTdGF0dXMpOgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0
ZXJ5U3RhdHVzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCYXR0ZXJ5
U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6OmNoYXJnaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6OmNoYXJnaW5nVGltZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzOjpkaXNjaGFyZ2luZ1RpbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QmF0dGVyeVN0YXR1czo6bGV2ZWwpOgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9OYXZp
Z2F0b3JCYXR0ZXJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5hdmlnYXRvckJhdHRlcnk6Ok5hdmlnYXRvckJhdHRlcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6TmF2aWdhdG9yQmF0dGVyeTo6fk5hdmlnYXRvckJhdHRlcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6TmF2aWdhdG9yQmF0dGVyeTo6d2Via2l0QmF0dGVyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpOYXZpZ2F0b3JCYXR0ZXJ5Ojpmcm9tKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckJh
dHRlcnk6OmJhdHRlcnlNYW5hZ2VyKToKKyAgICAgICAgKiBNb2R1bGVzL2JhdHRlcnkvTmF2aWdh
dG9yQmF0dGVyeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTmF2aWdh
dG9yQmF0dGVyeSk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnku
aWRsOiBBZGRlZC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAqIGRvbS9F
dmVudE5hbWVzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJn
ZXRGYWN0b3J5LmluOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkludGVybmFsczo6c2V0QmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAoSW50ZXJuYWxzKToK
KyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTItMDMtMTQgIENocmlzIEZs
ZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogZW1iZWRkZWQgYXR0
YWNobWVudHMgZG8gbm90IHJlcG9ydCB0aGVpciBwYXJlbnRzIGNvcnJlY3RseQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDbGllbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1NjMzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q2xpZW50LmgKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIEJhdHRlcnlDbGllbnRfaAorI2RlZmluZSBCYXR0ZXJ5Q2xpZW50X2gKKworI2lm
IEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBC
YXR0ZXJ5Q29udHJvbGxlcjsKK2NsYXNzIFBhZ2U7CisKK2NsYXNzIEJhdHRlcnlDbGllbnQgewor
cHVibGljOgorICAgIHZpcnR1YWwgfkJhdHRlcnlDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBzZXRDb250cm9sbGVyKEJhdHRlcnlDb250cm9sbGVyKikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzdGFydFVwZGF0aW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmco
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCkgPSAw
OworfTsKKwordm9pZCBwcm92aWRlQmF0dGVyeVRvKFBhZ2UqLCBCYXR0ZXJ5Q2xpZW50Kik7CisK
K30KKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisjZW5kaWYgLy8gQmF0dGVyeUNsaWVudF9o
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRy
b2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMTkyYTkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNv
bnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkJhdHRlcnlDb250cm9sbGVyLmgiCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMp
CisKKyNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50LmgiCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1cy5o
IgorI2luY2x1ZGUgIkV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQmF0dGVyeUNv
bnRyb2xsZXI6OkJhdHRlcnlDb250cm9sbGVyKEJhdHRlcnlDbGllbnQqIGNsaWVudCkKKyAgICA6
IG1fY2xpZW50KGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50
LT5zZXRDb250cm9sbGVyKHRoaXMpOworfQorCitCYXR0ZXJ5Q29udHJvbGxlcjo6fkJhdHRlcnlD
b250cm9sbGVyKCkKK3sKKyAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciBpdCA9IG1f
bGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbGlzdGVuZXJzLmVuZCgpOyArK2l0KQorICAgICAg
ICAoKml0KS0+YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKyAgICBtX2NsaWVudC0+YmF0
dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKTsKK30KKworUGFzc093blB0cjxCYXR0ZXJ5Q29udHJv
bGxlcj4gQmF0dGVyeUNvbnRyb2xsZXI6OmNyZWF0ZShCYXR0ZXJ5Q2xpZW50KiBjbGllbnQpCit7
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBCYXR0ZXJ5Q29udHJvbGxlcihjbGllbnQpKTsKK30K
Kwordm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6YWRkTGlzdGVuZXIoQmF0dGVyeU1hbmFnZXIqIGJh
dHRlcnlNYW5hZ2VyKQoreworICAgIG1fbGlzdGVuZXJzLmFwcGVuZChiYXR0ZXJ5TWFuYWdlcik7
CisgICAgbV9jbGllbnQtPnN0YXJ0VXBkYXRpbmcoKTsKK30KKwordm9pZCBCYXR0ZXJ5Q29udHJv
bGxlcjo6cmVtb3ZlTGlzdGVuZXIoQmF0dGVyeU1hbmFnZXIqIGJhdHRlcnlNYW5hZ2VyKQorewor
ICAgIHNpemVfdCBwb3MgPSBtX2xpc3RlbmVycy5maW5kKGJhdHRlcnlNYW5hZ2VyKTsKKyAgICBp
ZiAocG9zID09IFdURjo6bm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2xpc3RlbmVy
cy5yZW1vdmUocG9zKTsKKyAgICBpZiAobV9saXN0ZW5lcnMuaXNFbXB0eSgpKQorICAgICAgICBt
X2NsaWVudC0+c3RvcFVwZGF0aW5nKCk7Cit9CisKK3ZvaWQgQmF0dGVyeUNvbnRyb2xsZXI6OmRp
ZENoYW5nZUJhdHRlcnlTdGF0dXMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NS
ZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YXR1cykKK3sKKyAgICBSZWZQdHI8RXZlbnQ+
IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGZhbHNlLCBmYWxzZSk7CisgICAgUmVm
UHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnkgPSBiYXR0ZXJ5U3RhdHVzOworICAgIGZvciAoTGlz
dGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gbV9saXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9s
aXN0ZW5lcnMuZW5kKCk7ICsraXQpCisgICAgICAgICgqaXQpLT5kaWRDaGFuZ2VCYXR0ZXJ5U3Rh
dHVzKGV2ZW50LCBiYXR0ZXJ5KTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBCYXR0ZXJ5Q29u
dHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCBuYW1lLCAoIkJhdHRlcnlDb250cm9sbGVyIikpOworICAgIHJldHVybiBuYW1l
OworfQorCitib29sIEJhdHRlcnlDb250cm9sbGVyOjppc0FjdGl2ZShQYWdlKiBwYWdlKQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihCYXR0ZXJ5Q29udHJvbGxlcjo6ZnJvbShwYWdl
KSk7Cit9CisKK3ZvaWQgcHJvdmlkZUJhdHRlcnlUbyhQYWdlKiBwYWdlLCBCYXR0ZXJ5Q2xpZW50
KiBjbGllbnQpCit7CisgICAgU3VwcGxlbWVudDxQYWdlPjo6cHJvdmlkZVRvKHBhZ2UsIEJhdHRl
cnlDb250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpLCBCYXR0ZXJ5Q29udHJvbGxlcjo6Y3JlYXRl
KGNsaWVudCkpOworfQorCit9CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NWEwNTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuaApAQCAt
MCwwICsxLDYwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgQmF0dGVyeUNvbnRyb2xsZXJfaAorI2RlZmluZSBCYXR0
ZXJ5Q29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRl
ICJCYXR0ZXJ5TWFuYWdlci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBCYXR0ZXJ5Q2xpZW50OworCitjbGFzcyBCYXR0ZXJ5Q29udHJvbGxlciA6
IHB1YmxpYyBTdXBwbGVtZW50PFBhZ2U+IHsKK3B1YmxpYzoKKyAgICB+QmF0dGVyeUNvbnRyb2xs
ZXIoKTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEJhdHRlcnlDb250cm9sbGVyPiBjcmVhdGUo
QmF0dGVyeUNsaWVudCopOworCisgICAgdm9pZCBhZGRMaXN0ZW5lcihCYXR0ZXJ5TWFuYWdlciop
OworICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoQmF0dGVyeU1hbmFnZXIqKTsKKyAgICB2b2lkIGRp
ZENoYW5nZUJhdHRlcnlTdGF0dXMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NS
ZWZQdHI8QmF0dGVyeVN0YXR1cz4pOworCisgICAgQmF0dGVyeUNsaWVudCogY2xpZW50KCkgY29u
c3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIEJhdHRlcnlDb250cm9sbGVyKiBmcm9tKFBh
Z2UqIHBhZ2UpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJhdHRlcnlDb250cm9sbGVyKj4oU3VwcGxl
bWVudDxQYWdlPjo6ZnJvbShwYWdlLCBzdXBwbGVtZW50TmFtZSgpKSk7IH0KKyAgICBzdGF0aWMg
Ym9vbCBpc0FjdGl2ZShQYWdlKik7CisKK3ByaXZhdGU6CisgICAgQmF0dGVyeUNvbnRyb2xsZXIo
QmF0dGVyeUNsaWVudCopOworCisgICAgQmF0dGVyeUNsaWVudCogbV9jbGllbnQ7CisgICAgdHlw
ZWRlZiBWZWN0b3I8QmF0dGVyeU1hbmFnZXIqPiBMaXN0ZW5lclZlY3RvcjsKKyAgICBMaXN0ZW5l
clZlY3RvciBtX2xpc3RlbmVyczsKK307CisKK30KKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVT
CisjZW5kaWYgLy8gQmF0dGVyeUNvbnRyb2xsZXJfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43ZThkMTMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDEwNiBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVyeU1hbmFnZXIuaCIKKworI2lmIEVO
QUJMRShCQVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUgIkJhdHRlcnlDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiQmF0dGVyeVN0YXR1cy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxCYXR0ZXJ5TWFuYWdlcj4gQmF0dGVyeU1h
bmFnZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBOYXZpZ2F0b3Iq
IG5hdmlnYXRvcikKK3sKKyAgICBSZWZQdHI8QmF0dGVyeU1hbmFnZXI+IGJhdHRlcnlNYW5hZ2Vy
KGFkb3B0UmVmKG5ldyBCYXR0ZXJ5TWFuYWdlcihjb250ZXh0LCBuYXZpZ2F0b3IpKSk7CisgICAg
YmF0dGVyeU1hbmFnZXItPnN1c3BlbmRJZk5lZWRlZCgpOworICAgIHJldHVybiBiYXR0ZXJ5TWFu
YWdlci5yZWxlYXNlKCk7Cit9CisKK0JhdHRlcnlNYW5hZ2VyOjp+QmF0dGVyeU1hbmFnZXIoKQor
eworfQorCitCYXR0ZXJ5TWFuYWdlcjo6QmF0dGVyeU1hbmFnZXIoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgTmF2aWdhdG9yKiBuYXZpZ2F0b3IpCisgICAgOiBBY3RpdmVET01PYmpl
Y3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1fYmF0dGVyeUNvbnRyb2xsZXIoQmF0dGVyeUNvbnRy
b2xsZXI6OmZyb20obmF2aWdhdG9yLT5mcmFtZSgpLT5wYWdlKCkpKQorICAgICwgbV9iYXR0ZXJ5
U3RhdHVzKDApCit7CisgICAgbV9iYXR0ZXJ5Q29udHJvbGxlci0+YWRkTGlzdGVuZXIodGhpcyk7
Cit9CisKK2Jvb2wgQmF0dGVyeU1hbmFnZXI6OmNoYXJnaW5nKCkKK3sKKyAgICByZXR1cm4gbV9i
YXR0ZXJ5U3RhdHVzLT5jaGFyZ2luZygpOworfQorCitkb3VibGUgQmF0dGVyeU1hbmFnZXI6OmNo
YXJnaW5nVGltZSgpCit7CisgICAgaWYgKCFtX2JhdHRlcnlTdGF0dXMtPmNoYXJnaW5nKCkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7CisK
KyAgICByZXR1cm4gbV9iYXR0ZXJ5U3RhdHVzLT5jaGFyZ2luZ1RpbWUoKTsKK30KKworZG91Ymxl
IEJhdHRlcnlNYW5hZ2VyOjpkaXNjaGFyZ2luZ1RpbWUoKQoreworICAgIGlmIChtX2JhdHRlcnlT
dGF0dXMtPmNoYXJnaW5nKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OmluZmluaXR5KCk7CisKKyAgICByZXR1cm4gbV9iYXR0ZXJ5U3RhdHVzLT5kaXNjaGFy
Z2luZ1RpbWUoKTsKK30KKworZG91YmxlIEJhdHRlcnlNYW5hZ2VyOjpsZXZlbCgpCit7CisgICAg
cmV0dXJuIG1fYmF0dGVyeVN0YXR1cy0+bGV2ZWwoKTsKK30KKwordm9pZCBCYXR0ZXJ5TWFuYWdl
cjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUGFzc1Jl
ZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQoreworICAgIG1fYmF0dGVyeVN0YXR1
cyA9IGJhdHRlcnlTdGF0dXM7CisgICAgZGlzcGF0Y2hFdmVudChldmVudCk7Cit9CisKK3ZvaWQg
QmF0dGVyeU1hbmFnZXI6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbikKK3sKKyAgICBpZiAo
bV9iYXR0ZXJ5Q29udHJvbGxlcikKKyAgICAgICAgbV9iYXR0ZXJ5Q29udHJvbGxlci0+cmVtb3Zl
TGlzdGVuZXIodGhpcyk7Cit9CisKK3ZvaWQgQmF0dGVyeU1hbmFnZXI6OnJlc3VtZSgpCit7Cisg
ICAgaWYgKG1fYmF0dGVyeUNvbnRyb2xsZXIpCisgICAgICAgIG1fYmF0dGVyeUNvbnRyb2xsZXIt
PmFkZExpc3RlbmVyKHRoaXMpOworfQorCit2b2lkIEJhdHRlcnlNYW5hZ2VyOjpzdG9wKCkKK3sK
KyAgICBpZiAobV9iYXR0ZXJ5Q29udHJvbGxlcikKKyAgICAgICAgbV9iYXR0ZXJ5Q29udHJvbGxl
ci0+cmVtb3ZlTGlzdGVuZXIodGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9i
YXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNzk3OGRkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0
dGVyeS9CYXR0ZXJ5TWFuYWdlci5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0ZXJ5
TWFuYWdlcl9oCisjZGVmaW5lIEJhdHRlcnlNYW5hZ2VyX2gKKworI2lmIEVOQUJMRShCQVRURVJZ
X1NUQVRVUykKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkJhdHRl
cnlTdGF0dXMuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEJhdHRlcnlDb250cm9sbGVyOworY2xhc3MgTmF2aWdhdG9yOworY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgQmF0dGVyeU1hbmFnZXIgOiBwdWJsaWMg
QWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgUmVmQ291bnRlZDxCYXR0ZXJ5TWFuYWdlcj4sIHB1Ymxp
YyBFdmVudFRhcmdldCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QmF0dGVyeU1hbmFnZXIoKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYXR0ZXJ5TWFuYWdlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBOYXZpZ2F0b3IqKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0IGltcGxlbWVu
dGF0aW9uLgorICAgIHZpcnR1YWwgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGludGVyZmFjZU5h
bWUoKSBjb25zdCB7IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQmF0dGVyeU1hbmFn
ZXI7IH0KKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsgfQorCisgICAgYm9vbCBjaGFyZ2luZygpOworICAgIGRvdWJsZSBjaGFyZ2lu
Z1RpbWUoKTsKKyAgICBkb3VibGUgZGlzY2hhcmdpbmdUaW1lKCk7CisgICAgZG91YmxlIGxldmVs
KCk7CisKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNoYXJnaW5nY2hhbmdl
KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNoYXJnaW5ndGltZWNoYW5n
ZSk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihkaXNjaGFyZ2luZ3RpbWVj
aGFuZ2UpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobGV2ZWxjaGFuZ2Up
OworCisgICAgdm9pZCBkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKFBhc3NSZWZQdHI8RXZlbnQ+LCBQ
YXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+KTsKKyAgICB2b2lkIGJhdHRlcnlDb250cm9sbGVyRGVz
dHJveWVkKCkgeyBtX2JhdHRlcnlDb250cm9sbGVyID0gMDsgfQorCisgICAgdXNpbmcgUmVmQ291
bnRlZDxCYXR0ZXJ5TWFuYWdlcj46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPEJhdHRlcnlN
YW5hZ2VyPjo6ZGVyZWY7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QgaW1wbGVtZW50YXRpb24u
CisgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbik7CisgICAgdmlydHVh
bCB2b2lkIHJlc3VtZSgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4g
Jm1fZXZlbnRUYXJnZXREYXRhOyB9CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3Vy
ZUV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorCitwcml2
YXRlOgorICAgIEJhdHRlcnlNYW5hZ2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBOYXZpZ2F0
b3IqKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwg
dm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZF
dmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorCisgICAgQmF0dGVyeUNvbnRyb2xsZXIqIG1fYmF0
dGVyeUNvbnRyb2xsZXI7CisgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwor
ICAgIFJlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBtX2JhdHRlcnlTdGF0dXM7Cit9OworCit9CisKKyNl
bmRpZiAvLyBCQVRURVJZX1NUQVRVUworI2VuZGlmIC8vIEJhdHRlcnlNYW5hZ2VyX2gKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5pZGwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU1MmRmMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5pZGwKQEAg
LTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJv
bmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCittb2R1bGUgd2luZG93IHsKKworICAgIC8vIGh0dHA6Ly9kZXYudzMu
b3JnLzIwMDkvZGFwL3N5c3RlbS1pbmZvL2JhdHRlcnktc3RhdHVzLmh0bWwKKyAgICBpbnRlcmZh
Y2UgWworICAgICAgICBDb25kaXRpb25hbD1CQVRURVJZX1NUQVRVUywKKyAgICAgICAgQWN0aXZl
RE9NT2JqZWN0LAorICAgICAgICBFdmVudFRhcmdldAorICAgICBdIEJhdHRlcnlNYW5hZ2VyIHsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gY2hhcmdpbmc7CisgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgY2hhcmdpbmdUaW1lOworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgZG91YmxlIGRpc2NoYXJnaW5nVGltZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIGRvdWJsZSBsZXZlbDsKKworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNo
YXJnaW5nY2hhbmdlOworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNoYXJnaW5n
dGltZWNoYW5nZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25kaXNjaGFyZ2lu
Z3RpbWVjaGFuZ2U7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubGV2ZWxjaGFu
Z2U7CisKKyAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCisgICAgICAgIHZvaWQgYWRk
RXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIHZvaWQg
cmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Cisg
ICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCisgICAgICAgICAgICBy
YWlzZXMoRXZlbnRFeGNlcHRpb24pOworICAgIH07CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjAwZjUzMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeVN0YXR1cy5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1cy5oIgorCisjaWYgRU5B
QkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1Bhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gQmF0dGVyeVN0YXR1czo6Y3JlYXRl
KCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJhdHRlcnlTdGF0dXMpOworfQorCitQYXNz
UmVmUHRyPEJhdHRlcnlTdGF0dXM+IEJhdHRlcnlTdGF0dXM6OmNyZWF0ZShib29sIGNoYXJnaW5n
LCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2
ZWwpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCYXR0ZXJ5U3RhdHVzKGNoYXJnaW5nLCBj
aGFyZ2luZ1RpbWUsIGRpc2NoYXJnaW5nVGltZSwgbGV2ZWwpKTsKK30KKworQmF0dGVyeVN0YXR1
czo6QmF0dGVyeVN0YXR1cygpCisgICAgOiBtX2NoYXJnaW5nKHRydWUpCisgICAgLCBtX2NoYXJn
aW5nVGltZSgwKQorICAgICwgbV9kaXNjaGFyZ2luZ1RpbWUoc3RkOjpudW1lcmljX2xpbWl0czxk
b3VibGU+OjppbmZpbml0eSgpKQorICAgICwgbV9sZXZlbCgxKQoreworfQorCitCYXR0ZXJ5U3Rh
dHVzOjpCYXR0ZXJ5U3RhdHVzKGJvb2wgY2hhcmdpbmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRv
dWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZlbCkKKyAgICA6IG1fY2hhcmdpbmcoY2hh
cmdpbmcpCisgICAgLCBtX2NoYXJnaW5nVGltZShjaGFyZ2luZ1RpbWUpCisgICAgLCBtX2Rpc2No
YXJnaW5nVGltZShkaXNjaGFyZ2luZ1RpbWUpCisgICAgLCBtX2xldmVsKGxldmVsKQoreworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeVN0YXR1cy5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQ1MWFiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuaApAQCAtMCwwICsx
LDU0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgQmF0dGVyeVN0YXR1c19oCisjZGVmaW5lIEJhdHRlcnlTdGF0dXNf
aAorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEJhdHRlcnlTdGF0dXMgOiBwdWJsaWMgUmVmQ291bnRlZDxCYXR0ZXJ5U3RhdHVz
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gY3JlYXRl
KCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gY3JlYXRlKGJvb2wgY2hh
cmdpbmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJs
ZSBsZXZlbCk7CisKKyAgICBib29sIGNoYXJnaW5nKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyZ2lu
ZzsgfQorICAgIGRvdWJsZSBjaGFyZ2luZ1RpbWUoKSBjb25zdCAgeyByZXR1cm4gbV9jaGFyZ2lu
Z1RpbWU7IH0KKyAgICBkb3VibGUgZGlzY2hhcmdpbmdUaW1lKCkgY29uc3QgIHsgcmV0dXJuIG1f
ZGlzY2hhcmdpbmdUaW1lOyB9CisgICAgZG91YmxlIGxldmVsKCkgY29uc3QgIHsgcmV0dXJuIG1f
bGV2ZWw7IH0KKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5U3RhdHVzKCk7CisgICAgQmF0dGVyeVN0
YXR1cyhib29sIGNoYXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdp
bmdUaW1lLCBkb3VibGUgbGV2ZWwpOworCisgICAgYm9vbCBtX2NoYXJnaW5nOworICAgIGRvdWJs
ZSBtX2NoYXJnaW5nVGltZTsKKyAgICBkb3VibGUgbV9kaXNjaGFyZ2luZ1RpbWU7CisgICAgZG91
YmxlIG1fbGV2ZWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBC
QVRURVJZX1NUQVRVUworI2VuZGlmIC8vIEJhdHRlcnlTdGF0dXNfaAorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2NzI0OAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNwcApAQCAtMCww
ICsxLDY4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNz
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3JCYXR0
ZXJ5LmgiCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkJhdHRlcnlNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTmF2
aWdhdG9yLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK05hdmlnYXRvckJhdHRlcnk6Ok5hdmlnYXRvckJhdHRlcnkoKQorewor
fQorCitOYXZpZ2F0b3JCYXR0ZXJ5Ojp+TmF2aWdhdG9yQmF0dGVyeSgpCit7Cit9CisKK0JhdHRl
cnlNYW5hZ2VyKiBOYXZpZ2F0b3JCYXR0ZXJ5Ojp3ZWJraXRCYXR0ZXJ5KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIE5hdmlnYXRvciogbmF2aWdhdG9yKQoreworICAgIE5hdmlnYXRv
ckJhdHRlcnkqIG5hdmlnYXRvckJhdHRlcnkgPSBOYXZpZ2F0b3JCYXR0ZXJ5Ojpmcm9tKG5hdmln
YXRvcik7CisgICAgaWYgKCFuYXZpZ2F0b3JCYXR0ZXJ5LT5tX2JhdHRlcnlNYW5hZ2VyKQorICAg
ICAgICBuYXZpZ2F0b3JCYXR0ZXJ5LT5tX2JhdHRlcnlNYW5hZ2VyID0gQmF0dGVyeU1hbmFnZXI6
OmNyZWF0ZShjb250ZXh0LCBuYXZpZ2F0b3IpOworICAgIHJldHVybiBuYXZpZ2F0b3JCYXR0ZXJ5
LT5tX2JhdHRlcnlNYW5hZ2VyLmdldCgpOworfQorCitOYXZpZ2F0b3JCYXR0ZXJ5KiBOYXZpZ2F0
b3JCYXR0ZXJ5Ojpmcm9tKE5hdmlnYXRvciogbmF2aWdhdG9yKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIk5hdmlnYXRvckJhdHRlcnkiKSk7CisgICAg
TmF2aWdhdG9yQmF0dGVyeSogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PE5hdmlnYXRvckJhdHRl
cnkqPihTdXBwbGVtZW50PE5hdmlnYXRvcj46OmZyb20obmF2aWdhdG9yLCBuYW1lKSk7CisgICAg
aWYgKCFzdXBwbGVtZW50KSB7CisgICAgICAgIHN1cHBsZW1lbnQgPSBuZXcgTmF2aWdhdG9yQmF0
dGVyeSgpOworICAgICAgICBwcm92aWRlVG8obmF2aWdhdG9yLCBuYW1lLCBhZG9wdFB0cihzdXBw
bGVtZW50KSk7CisgICAgfQorICAgIHJldHVybiBzdXBwbGVtZW50OworfQorCitCYXR0ZXJ5TWFu
YWdlciogTmF2aWdhdG9yQmF0dGVyeTo6YmF0dGVyeU1hbmFnZXIoKQoreworICAgIHJldHVybiBt
X2JhdHRlcnlNYW5hZ2VyLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOWZhZTlkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmgKQEAgLTAsMCArMSw1NCBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIE5hdmlnYXRvckJhdHRlcnlfaAorI2RlZmluZSBOYXZpZ2F0b3JCYXR0ZXJ5X2gKKwor
I2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeU1hbmFnZXI7CitjbGFzcyBO
YXZpZ2F0b3I7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBOYXZpZ2F0
b3JCYXR0ZXJ5IDogcHVibGljIFN1cHBsZW1lbnQ8TmF2aWdhdG9yPiB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+TmF2aWdhdG9yQmF0dGVyeSgpOworCisgICAgc3RhdGljIE5hdmlnYXRvckJhdHRl
cnkqIGZyb20oTmF2aWdhdG9yKik7CisKKyAgICBzdGF0aWMgQmF0dGVyeU1hbmFnZXIqIHdlYmtp
dEJhdHRlcnkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE5hdmlnYXRvciopOworICAgIEJhdHRl
cnlNYW5hZ2VyKiBiYXR0ZXJ5TWFuYWdlcigpOworCisgcHJpdmF0ZToKKyAgICBOYXZpZ2F0b3JC
YXR0ZXJ5KCk7CisKKyAgICBSZWZQdHI8QmF0dGVyeU1hbmFnZXI+IG1fYmF0dGVyeU1hbmFnZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQkFUVEVS
WV9TVEFUVVMpCisKKyNlbmRpZiAvLyBOYXZpZ2F0b3JCYXR0ZXJ5X2gKKworCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5pZGwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkYjc4MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmlkbApAQCAt
MCwwICsxLDMxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKK21vZHVsZSB3aW5kb3cgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAg
ICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwKKyAgICAgICAgQ29uZGl0aW9uYWw9
QkFUVEVSWV9TVEFUVVMsCisgICAgICAgIFN1cHBsZW1lbnRhbD1OYXZpZ2F0b3IKKyAgICBdIE5h
dmlnYXRvckJhdHRlcnkgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQmF0dGVyeU1hbmFn
ZXIgd2Via2l0QmF0dGVyeTsKKyAgICB9OworCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmlu
ZGV4IDQ2NmFmNTQuLjFlNzU5MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMjA3LDYg
KzIwNywxMSBAQAogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoQkFUVEVSWV9TVEFUVVMpCisjaW5jbHVkZSAiQmF0dGVyeUNvbnRyb2xsZXIuaCIKKyNpbmNs
dWRlICJOYXZpZ2F0b3JCYXR0ZXJ5LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnROYW1lcy5oCmluZGV4IGRiZmM0ZjkuLjZlMjJiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFt
ZXMuaApAQCAtNDEsNiArNDEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgbWFjcm8oYmx1
cikgXAogICAgIG1hY3JvKGNhY2hlZCkgXAogICAgIG1hY3JvKGNoYW5nZSkgXAorICAgIG1hY3Jv
KGNoYXJnaW5nY2hhbmdlKSBcCisgICAgbWFjcm8oY2hhcmdpbmd0aW1lY2hhbmdlKSBcCiAgICAg
bWFjcm8oY2hlY2tpbmcpIFwKICAgICBtYWNybyhjbGljaykgXAogICAgIG1hY3JvKGNsb3NlKSBc
CkBAIC01NSw2ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNybyhkYmxjbGlj
aykgXAogICAgIG1hY3JvKGRldmljZW1vdGlvbikgXAogICAgIG1hY3JvKGRldmljZW9yaWVudGF0
aW9uKSBcCisgICAgbWFjcm8oZGlzY2hhcmdpbmd0aW1lY2hhbmdlKSBcCiAgICAgbWFjcm8oZGlz
cGxheSkgXAogICAgIG1hY3JvKGRvd25sb2FkaW5nKSBcCiAgICAgbWFjcm8oZHJhZykgXApAQCAt
NzQsNiArNzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgbWFjcm8oa2V5ZG93bikgXAog
ICAgIG1hY3JvKGtleXByZXNzKSBcCiAgICAgbWFjcm8oa2V5dXApIFwKKyAgICBtYWNybyhsZXZl
bGNoYW5nZSkgXAogICAgIG1hY3JvKGxvYWQpIFwKICAgICBtYWNybyhsb2Fkc3RhcnQpIFwKICAg
ICBtYWNybyhtZXNzYWdlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXRGYWN0b3J5LmluIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5p
bgppbmRleCBjOGQyNzZlLi4yMTA5NzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXRGYWN0b3J5LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdl
dEZhY3RvcnkuaW4KQEAgLTEsNiArMSw3IEBACiBuYW1lc3BhY2U9IkV2ZW50VGFyZ2V0IgogCiBB
dWRpb0NvbnRleHQgY29uZGl0aW9uYWw9V0VCX0FVRElPCitCYXR0ZXJ5TWFuYWdlciBjb25kaXRp
b25hbD1CQVRURVJZX1NUQVRVUwogRGVkaWNhdGVkV29ya2VyQ29udGV4dCBjb25kaXRpb25hbD1X
T1JLRVJTCiBET01BcHBsaWNhdGlvbkNhY2hlCiBET01XaW5kb3cKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAppbmRleCBjMjkzNjg2Li42MjJiNjRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCkBAIC02Nyw2ICs2NywxMCBAQAogI2luY2x1ZGUgIkNvbG9yQ2hvb3Nl
ci5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisjaW5jbHVkZSAiQmF0
dGVyeUNvbnRyb2xsZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBib29sIG1hcmtlclR5cGVzRnJvbShjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlcyYgcmVzdWx0KQpAQCAtNzE0LDQgKzcxOCwyMiBAQCB2b2lkIElu
dGVybmFsczo6ZW1pdEluc3BlY3RvckRpZENhbmNlbEZyYW1lKCkKICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZENhbmNlbEZyYW1lKGZyYW1lKCktPnBhZ2UoKSk7CiB9CiAKK3ZvaWQg
SW50ZXJuYWxzOjpzZXRCYXR0ZXJ5U3RhdHVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3Ry
aW5nJiBldmVudFR5cGUsIGJvb2wgY2hhcmdpbmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJs
ZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkgeworICAgICAgICBlYyA9IElO
VkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShC
QVRURVJZX1NUQVRVUykKKyAgICBCYXR0ZXJ5Q29udHJvbGxlcjo6ZnJvbShkb2N1bWVudC0+cGFn
ZSgpKS0+ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhldmVudFR5cGUsIEJhdHRlcnlTdGF0dXM6OmNy
ZWF0ZShjaGFyZ2luZywgY2hhcmdpbmdUaW1lLCBkaXNjaGFyZ2luZ1RpbWUsIGxldmVsKSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShldmVudFR5cGUpOworICAgIFVOVVNFRF9QQVJBTShjaGFy
Z2luZyk7CisgICAgVU5VU0VEX1BBUkFNKGNoYXJnaW5nVGltZSk7CisgICAgVU5VU0VEX1BBUkFN
KGRpc2NoYXJnaW5nVGltZSk7CisgICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyNlbmRpZgorfQor
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCA2N2MwOTIyLi45NzE2YTNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTEzNiw2ICsxMzYsOCBAQCBwdWJsaWM6
CiAKICAgICBJbnRlcm5hbFNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0
dGluZ3MuZ2V0KCk7IH0KIAorICAgIHZvaWQgc2V0QmF0dGVyeVN0YXR1cyhEb2N1bWVudCosIGNv
bnN0IFN0cmluZyYgZXZlbnRUeXBlLCBib29sIGNoYXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1l
LCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2ZWwsIEV4Y2VwdGlvbkNvZGUmKTsK
KwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBJbnRlcm5hbHMoRG9jdW1lbnQqKTsKICAgICBEb2N1
bWVudE1hcmtlciogbWFya2VyQXQoTm9kZSosIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5z
aWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmlkbAppbmRleCBkOTg1NmFkLi43MmJmOTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaWRsCkBAIC0xMTAsNiArMTEwLDEwIEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICB2b2lk
IGVtaXRJbnNwZWN0b3JEaWRDYW5jZWxGcmFtZSgpOwogCiAgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBJbnRlcm5hbFNldHRpbmdzIHNldHRpbmdzOworCisjaWYgZGVmaW5lZChFTkFCTEVfQkFU
VEVSWV9TVEFUVVMpICYmIEVOQUJMRV9CQVRURVJZX1NUQVRVUworICAgICAgICB2b2lkIHNldEJh
dHRlcnlTdGF0dXMoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIERPTVN0cmluZyBldmVudFR5cGUs
IGluIGJvb2xlYW4gY2hhcmdpbmcsIGluIGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGluIGRvdWJsZSBk
aXNjaGFyZ2luZ1RpbWUsIGluIGRvdWJsZSBsZXZlbCkgcmFpc2VzIChET01FeGNlcHRpb24pOwor
I2VuZGlmCiAgICAgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA0ZjFjZjU4Li43MzZmYzA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAzLTE1ICBLaWhvbmcgS3dvbiAgPGtpaG9uZy5rd29u
QHNhbXN1bmcuY29tPgorCisgICAgICAgIFN1cHBvcnQgZm9yIEJhdHRlcnkgU3RhdHVzIEFQSQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKwor
ICAgICAgICBBZGQgaW5jbHVkZSBkaXJlY3RvcnkgYW5kIGZpbGUuCisgICAgICAgIGh0dHA6Ly93
d3cudzMub3JnL1RSL2JhdHRlcnktc3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisKIDIwMTItMDMtMTEg
IFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBo
b3cgdGhlIFdlYiBJbnNwZWN0b3IgcmVzb3VyY2VzIGFyZSBsb2FkZWQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCAxZGViZTM2Li4xNTg0MTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UK
QEAgLTEyNiw2ICsxMjYsMTAgQEAgSUYgKEVOQUJMRV9WSUJSQVRJT04pCiAgICAgKQogRU5ESUYg
KCkKIAorSUYgKEVOQUJMRV9CQVRURVJZX1NUQVRVUykKKyAgICBMSVNUKEFQUEVORCBXZWJLaXRf
SU5DTFVERV9ESVJFQ1RPUklFUyAke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2JhdHRlcnkpCisgICAg
TElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMgZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlDbGll
bnRFZmwuY3BwKQorRU5ESUYgKCkKIAogU0VUKFdlYktpdF9USEVNRV9ERUZJTklUSU9OICIiKQog
SUYgKEVOQUJMRV9QUk9HUkVTU19UQUcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggMzA2Nzc1YS4uMmM0
OTVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAzLTE1ICBLaWhv
bmcgS3dvbiAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgorCisgICAgICAgIFN1cHBvcnQgZm9y
IEJhdHRlcnkgU3RhdHVzIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjI2OTgKKworICAgICAgICBBZGQgQmF0dGVyeUNsaWVudEVmbCBjbGFzcyBp
bXBsZW1lbnRhdGlvbiBmb3IgdGhlIGxheW91dCB0ZXN0cyBub3cuCisgICAgICAgIEJhdHRlcnlD
bGllbnRFZmwgY2xhc3MgaXMgbm90IGZ1bGx5IGltcGxlbWVudGVkIGluIHRoaXMgcGF0Y2guCisg
ICAgICAgIChJdCB3aWxsIGJlIGNvbXBsZXRlZCBieSBvdGhlciBwYXRjaCBhcyBuZWNlc3Nhcnkg
aW4gdGhlIEVmbCBwb3J0LikKKyAgICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvYmF0dGVyeS1z
dGF0dXMvCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRFZmw6OkJhdHRlcnlDbGll
bnRFZmwpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6c2V0Q29udHJvbGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpzdGFydFVwZGF0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRFZmw6OnN0b3BVcGRhdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpiYXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3ll
ZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpzZXRCYXR0ZXJ5U3RhdHVz
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCYXR0ZXJ5Q2xpZW50RWZsKToKKyAgICAgICAg
KFdlYkNvcmU6OkJhdHRlcnlDbGllbnRFZmw6On5CYXR0ZXJ5Q2xpZW50RWZsKToKKyAgICAgICAg
KiBld2svZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX0V3a19WaWV3X1ByaXZhdGVfRGF0YSk6Cisg
ICAgICAgIChfZXdrX3ZpZXdfcHJpdl9uZXcpOgorCiAyMDEyLTAzLTEzICBKb24gTGVlICA8am9u
bGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBTZXBhcmF0ZSBOT1RJRklDQVRJT05TIGFuZCBMRUdB
Q1lfTk9USUZJQ0FUSU9OUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3Vw
cG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44OGRiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29y
ZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudEVmbC5oIgorCisjaWYgRU5BQkxF
KEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVyeUNvbnRyb2xsZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitCYXR0ZXJ5Q2xpZW50RWZsOjpCYXR0ZXJ5Q2xpZW50RWZsKCkK
KyAgICA6IG1fY29udHJvbGxlcigwKQoreworfQorCit2b2lkIEJhdHRlcnlDbGllbnRFZmw6OnNl
dENvbnRyb2xsZXIoQmF0dGVyeUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7CisgICAgbV9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKK30KKwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpzdGFydFVw
ZGF0aW5nKCkKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgZm9yIGdldHRpbmcg
YmF0dGVyeSBzdGF0dXMgdG8gdGhlIGVmbCBwb3J0LgorfQorCit2b2lkIEJhdHRlcnlDbGllbnRF
Zmw6OnN0b3BVcGRhdGluZygpCit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IGZv
ciBnZXR0aW5nIGJhdHRlcnkgc3RhdHVzIHRvIHRoZSBlZmwgcG9ydAorfQorCit2b2lkIEJhdHRl
cnlDbGllbnRFZmw6OmJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCkKK3sKKyAgICBkZWxldGUg
dGhpczsKK30KKwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpzZXRCYXR0ZXJ5U3RhdHVzKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRl
cnlTdGF0dXMpCit7CisgICAgbV9jb250cm9sbGVyLT5kaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGV2
ZW50VHlwZSwgYmF0dGVyeVN0YXR1cyk7Cit9CisKK30KKworI2VuZGlmIC8vIEJBVFRFUllfU1RB
VFVTCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRl
cnlDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlD
bGllbnRFZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGY3MWM4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQmF0dGVy
eUNsaWVudEVmbC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0ZXJ5Q2xpZW50RWZs
X2gKKyNkZWZpbmUgQmF0dGVyeUNsaWVudEVmbF9oCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFU
VVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeUNvbnRy
b2xsZXI7CitjbGFzcyBCYXR0ZXJ5U3RhdHVzOworCitjbGFzcyBCYXR0ZXJ5Q2xpZW50RWZsIDog
cHVibGljIEJhdHRlcnlDbGllbnQgeworcHVibGljOgorICAgIEJhdHRlcnlDbGllbnRFZmwoKTsK
KyAgICB+QmF0dGVyeUNsaWVudEVmbCgpIHsgfTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
cm9sbGVyKEJhdHRlcnlDb250cm9sbGVyKik7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRp
bmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCk7CisgICAgdmlydHVhbCB2b2lk
IGJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCk7CisKKyAgICB2b2lkIHNldEJhdHRlcnlTdGF0
dXMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1
cz4pOworCitwcml2YXRlOgorICAgIEJhdHRlcnlDb250cm9sbGVyKiBtX2NvbnRyb2xsZXI7Cit9
OworCit9CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworI2VuZGlmIC8vIEJhdHRlcnlDbGll
bnRFZmxfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAppbmRleCAxN2E2ZWEwLi43YTUy
Y2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAgLTc0LDYgKzc0LDEwIEBACiAj
aW5jbHVkZSAiVmlicmF0aW9uQ2xpZW50RWZsLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShCQVRU
RVJZX1NUQVRVUykKKyNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50RWZsLmgiCisjZW5kaWYKKwogc3Rh
dGljIGNvbnN0IGZsb2F0IHpvb21NaW5pbXVtID0gMC4wNTsKIHN0YXRpYyBjb25zdCBmbG9hdCB6
b29tTWF4aW11bSA9IDQuMDsKIApAQCAtNjE4LDYgKzYyMiwxMCBAQCBzdGF0aWMgRXdrX1ZpZXdf
UHJpdmF0ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhKQogICAgIFdlYkNvcmU6OnByb3ZpZGVWaWJyYXRpb25Ubyhwcml2LT5wYWdlLmdldCgp
LCBuZXcgV2ViQ29yZTo6VmlicmF0aW9uQ2xpZW50RWZsKHNtYXJ0RGF0YS0+c2VsZikpOwogI2Vu
ZGlmCiAKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisgICAgV2ViQ29yZTo6cHJvdmlkZUJh
dHRlcnlUbyhwcml2LT5wYWdlLmdldCgpLCBuZXcgV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbCk7
CisjZW5kaWYKKwogICAgIHByaXYtPnBhZ2VTZXR0aW5ncyA9IHByaXYtPnBhZ2UtPnNldHRpbmdz
KCk7CiAKICAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy53aWR0aCA9IFdlYkNvcmU6OlZpZXdw
b3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9u
c0VmbC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCmluZGV4IGI3M2NmYjYu
LjRlZTI0NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCisrKyBi
L1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCkBAIC02Myw2ICs2Myw3IEBAIFNFVChUSEVN
RV9CSU5BUllfRElSICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0L2VmbC9EZWZhdWx0VGhlbWUp
CiAKIFNFVChWRVJTSU9OX1NDUklQVCAiLVdsLC0tdmVyc2lvbi1zY3JpcHQsJHtDTUFLRV9NT0RV
TEVfUEFUSH0vZWZsc3ltYm9scy5maWx0ZXIiKQogCitXRUJLSVRfRkVBVFVSRShFTkFCTEVfQkFU
VEVSWV9TVEFUVVMgIkVuYWJsZSBiYXR0ZXJ5IHN0YXR1cyBhcGkiIERFRkFVTFQgT04pCiBXRUJL
SVRfRkVBVFVSRShFTkFCTEVfQkxPQiAiRW5hYmxlIGJsb2Igc2xpY2UiIERFRkFVTFQgT0ZGKQog
V0VCS0lUX0ZFQVRVUkUoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HICJFbmFibGUgY2hhbm5lbCBt
ZXNzYWdpbmciIERFRkFVTFQgT04pCiBXRUJLSVRfRkVBVFVSRShFTkFCTEVfREFUQUxJU1QgIkVu
YWJsZSBkYXRhbGlzdCIgREVGQVVMVCBPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZWNvbmZp
Zy5oLmNtYWtlIGIvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKaW5kZXggY2UyMTZhYi4uODJj
YWY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKKysrIGIvU291cmNl
L2NtYWtlY29uZmlnLmguY21ha2UKQEAgLTYsNiArNiw3IEBACiAKIAogI2NtYWtlZGVmaW5lMDEg
RU5BQkxFX0FTX0lNQUdFCisjY21ha2VkZWZpbmUwMSBFTkFCTEVfQkFUVEVSWV9TVEFUVVMKICNj
bWFrZWRlZmluZTAxIEVOQUJMRV9CTE9CCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfQ0hBTk5FTF9N
RVNTQUdJTkcKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9EQVRBTElTVApkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDRlOWMwNmUuLmIwNDgyMGIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAxMi0wMy0xNSAgS2lob25nIEt3b24gIDxraWhvbmcua3dvbkBzYW1zdW5nLmNv
bT4KKworICAgICAgICBTdXBwb3J0IGZvciBCYXR0ZXJ5IFN0YXR1cyBBUEkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgRW5h
YmxlIEJhdHRlcnkgU3RhdHVzIEFQSS4KKyAgICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvYmF0
dGVyeS1zdGF0dXMvCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDoKKwogMjAxMi0wMy0xNCAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBOUldUIHNob3VsZCByZXNwZWN0
IC0tYWRkaXRpb25hbC1wbGF0Zm9ybS1kaXJlY3RvcnkncyBTa2lwcGVkIGxpc3QKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0IGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJr
aXQKaW5kZXggYzI3NmY3NS4uMmY2NjhhMyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWls
ZC13ZWJraXQKKysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKQEAgLTcwLDYgKzcwLDcg
QEAgbXkgKAogICAgICR0aHJlZURSZW5kZXJpbmdTdXBwb3J0LAogICAgICRhY2NlbGVyYXRlZDJk
Q2FudmFzU3VwcG9ydCwKICAgICAkYW5pbWF0aW9uQVBJU3VwcG9ydCwKKyAgICAkYmF0dGVyeXN0
YXR1c0FQSVN1cHBvcnQsCiAgICAgJGJsb2JTdXBwb3J0LAogICAgICRjaGFubmVsTWVzc2FnaW5n
U3VwcG9ydCwKICAgICAkY292ZXJhZ2VTdXBwb3J0LApAQCAtMTYwLDYgKzE2MSw5IEBAIG15IEBm
ZWF0dXJlcyA9ICgKICAgICB7IG9wdGlvbiA9PiAiYW5pbWF0aW9uLWFwaSIsIGRlc2MgPT4gIlRv
Z2dsZSBhbmltYXRpb24gQVBJIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfQU5J
TUFUSU9OX0FQSSIsIGRlZmF1bHQgPT4gaXNCbGFja0JlcnJ5KCksIHZhbHVlID0+IFwkYW5pbWF0
aW9uQVBJU3VwcG9ydCB9LAogCisgICAgeyBvcHRpb24gPT4gImJhdHRlcnktc3RhdHVzLWFwaSIs
IGRlc2MgPT4gIlRvZ2dsZSBiYXR0ZXJ5IHN0YXR1cyBBUEkgc3VwcG9ydCIsCisgICAgICBkZWZp
bmUgPT4gIkVOQUJMRV9CQVRURVJZX1NUQVRVUyIsIGRlZmF1bHQgPT4gaXNFZmwoKSwgdmFsdWUg
PT4gXCRiYXR0ZXJ5c3RhdHVzQVBJU3VwcG9ydCB9LAorCiAgICAgeyBvcHRpb24gPT4gImJsb2Ii
LCBkZXNjID0+ICJUb2dnbGUgQmxvYiBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxF
X0JMT0IiLCBkZWZhdWx0ID0+IChpc0FwcGxlTWFjV2ViS2l0KCkgfHwgaXNHdGsoKSB8fCBpc0No
cm9taXVtKCkgfHwgaXNCbGFja0JlcnJ5KCkpLCB2YWx1ZSA9PiBcJGJsb2JTdXBwb3J0IH0sCiAK
</data>
<flag name="review"
          id="135532"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="135533"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132193</attachid>
            <date>2012-03-15 21:38:21 -0700</date>
            <delta_ts>2012-03-15 23:03:57 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>battery06.patch</filename>
            <type>text/plain</type>
            <size>70336</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBkZDBiZmI3Li4wZTlhZmNh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTItMDMtMTUgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgU3VwcG9ydCBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKworICAgICAgICBFbmFibGUgQkFU
VEVSWV9TVEFUVVMgZm9yIFdlYktpdC1FZmwuCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RS
L2JhdHRlcnktc3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2U6CisgICAgICAgICogU291
cmNlL2NtYWtlY29uZmlnLmguY21ha2U6CisKIDIwMTItMDMtMTQgIE1hdHQgRmFsa2VuaGFnZW4g
IDxmYWxrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFsbG93IHBlci1zY3JpcHQgZm9udCBz
ZXR0aW5ncyB0byBiZSBzcGVjaWZpZWQgaW4gbGF5b3V0IHRlc3RzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjczY2NkZC4u
NjljMDlkYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAzLTE1ICBLaWhvbmcgS3dvbiAg
PGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgorCisgICAgICAgIFN1cHBvcnQgZm9yIEJhdHRlcnkg
U3RhdHVzIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYyNjk4CisKKyAgICAgICAgQWRkIG5ldyB0ZXN0IGNhc2VzIGZvciBCYXR0ZXJ5IFN0YXR1
cyBBUEkuCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2JhdHRlcnktc3RhdHVzLworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmF0dGVyeXN0
YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGJhdHRlcnlzdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suaHRtbDogQWRk
ZWQuCisgICAgICAgICogYmF0dGVyeXN0YXR1cy9iYXNpYy1hbGwtdHlwZXMtb2YtZXZlbnRzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYmF0dGVyeXN0YXR1cy9iYXNpYy1hbGwtdHlw
ZXMtb2YtZXZlbnRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGJhdHRlcnlzdGF0dXMvYmFzaWMt
b3BlcmF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYmF0dGVyeXN0YXR1cy9i
YXNpYy1vcGVyYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogYmF0dGVyeXN0YXR1cy9ldmVu
dC1hZnRlci1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYmF0dGVy
eXN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGJh
dHRlcnlzdGF0dXMvbXVsdGlwbGUtZnJhbWVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogYmF0dGVyeXN0YXR1cy9tdWx0aXBsZS1mcmFtZXMuaHRtbDogQWRkZWQuCisgICAgICAgICog
YmF0dGVyeXN0YXR1cy9yZXNvdXJjZXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi1uZXcuaHRtbDog
QWRkZWQuCisgICAgICAgICogYmF0dGVyeXN0YXR1cy9zY3JpcHQtdGVzdHMvYWRkLWxpc3RlbmVy
LWZyb20tY2FsbGJhY2suanM6IEFkZGVkLgorICAgICAgICAoY2hlY2tCYXR0ZXJ5U3RhdHVzKToK
KyAgICAgICAgKGZpcnN0TGlzdGVuZXIpOgorICAgICAgICAoc2Vjb25kTGlzdGVuZXIpOgorICAg
ICAgICAobWF5YmVGaW5pc2hUZXN0KToKKyAgICAgICAgKiBiYXR0ZXJ5c3RhdHVzL3NjcmlwdC10
ZXN0cy9iYXNpYy1hbGwtdHlwZXMtb2YtZXZlbnRzLmpzOiBBZGRlZC4KKyAgICAgICAgKGNoZWNr
QmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChiYXR0ZXJ5KToKKyAgICAgICAgKiBiYXR0ZXJ5c3Rh
dHVzL3NjcmlwdC10ZXN0cy9iYXNpYy1vcGVyYXRpb24uanM6IEFkZGVkLgorICAgICAgICAqIGJh
dHRlcnlzdGF0dXMvc2NyaXB0LXRlc3RzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24uanM6IEFkZGVk
LgorICAgICAgICAqIGJhdHRlcnlzdGF0dXMvc2NyaXB0LXRlc3RzL211bHRpcGxlLWZyYW1lcy5q
czogQWRkZWQuCisgICAgICAgIChjaGVja0JhdHRlcnlTdGF0dXMpOgorICAgICAgICAoY2hlY2tD
aGlsZEJhdHRlcnlTdGF0dXMpOgorICAgICAgICAobWFpbkZyYW1lTGlzdGVuZXIpOgorICAgICAg
ICAoY2hpbGRGcmFtZUxpc3RlbmVyKToKKyAgICAgICAgKG1heWJlRmluaXNoVGVzdCk6CisgICAg
ICAgICogYmF0dGVyeXN0YXR1cy9zY3JpcHQtdGVzdHMvdXBkYXRlcy5qczogQWRkZWQuCisgICAg
ICAgIChjaGVja0JhdHRlcnlTdGF0dXMpOgorICAgICAgICAoc2V0QmF0dGVyeVN0YXR1cyk6Cisg
ICAgICAgIChmaXJzdExpc3RlbmVyKToKKyAgICAgICAgKHVwZGF0ZUxpc3RlbmVyKToKKyAgICAg
ICAgKiBiYXR0ZXJ5c3RhdHVzL3NjcmlwdC10ZXN0cy93aW5kb3ctcHJvcGVydHkuanM6IEFkZGVk
LgorICAgICAgICAoaGFzT25CYXR0ZXJ5UHJvcGVydHkpOgorICAgICAgICAqIGJhdHRlcnlzdGF0
dXMvdXBkYXRlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGJhdHRlcnlzdGF0dXMv
dXBkYXRlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBiYXR0ZXJ5c3RhdHVzL3dpbmRvdy1wcm9w
ZXJ0eS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGJhdHRlcnlzdGF0dXMvd2luZG93
LXByb3BlcnR5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3Rf
ZXhwZWN0YXRpb25zLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVk
OgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bmNhaXJvL1NraXBwZWQ6CisKIDIwMTItMDMtMTQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2Nh
QGFwcGxlLmNvbT4KIAogICAgICAgICBqYXZhL2phdmEtYW5kLXBsdWdpbnMuaHRtbCB0ZXN0IGZh
aWxpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvYWRkLWxpc3RlbmVy
LWZyb20tY2FsbGJhY2stZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9h
ZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uOGU2NzQ1OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2JhdHRlcnlzdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2stZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMjEgQEAKK1Rlc3RzIHRoYXQgYWRkaW5nIGEgbmV3IGV2ZW50IGxpc3RlbmVyIGZy
b20gYSBjYWxsYmFjayB3b3JrcyBhcyBleHBlY3RlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBpcyBjaGFyZ2luZworUEFTUyBiYXR0ZXJ5
LmNoYXJnaW5nVGltZSBpcyBjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1Rp
bWUgaXMgZGlzY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkubGV2ZWwgaXMgbGV2ZWwKK1BBU1Mg
YmF0dGVyeS5jaGFyZ2luZyBpcyBjaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBp
cyBjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgZGlzY2hhcmdp
bmdUaW1lCitQQVNTIGJhdHRlcnkubGV2ZWwgaXMgbGV2ZWwKK1BBU1MgYmF0dGVyeS5jaGFyZ2lu
ZyBpcyBjaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBjaGFyZ2luZ1RpbWUK
K1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgZGlzY2hhcmdpbmdUaW1lCitQQVNTIGJh
dHRlcnkubGV2ZWwgaXMgbGV2ZWwKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL2Fk
ZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLmh0bWwgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVz
L2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZDRiMjI5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2JhdHRl
cnlzdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suaHRtbApAQCAtMCwwICsxLDkgQEAK
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9iYXNp
Yy1hbGwtdHlwZXMtb2YtZXZlbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2JhdHRlcnlz
dGF0dXMvYmFzaWMtYWxsLXR5cGVzLW9mLWV2ZW50cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjMzc0ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2JhdHRlcnlzdGF0dXMvYmFzaWMtYWxsLXR5cGVzLW9mLWV2ZW50cy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwyOSBAQAorVGVzdHMgdGhlIGJhc2ljIG9wZXJhdGlvbiBvZiBhbGwgQmF0
dGVyeVN0YXR1cyBldmVudHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitjaGFy
Z2luZ2NoYW5nZSBldmVudCBpcyByYWlzZWQKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBpcyBjaGFy
Z2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0
dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgZGlzY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkubGV2
ZWwgaXMgbGV2ZWwKK2NoYXJnaW5ndGltZWNoYW5nZSBldmVudCBpcyByYWlzZWQKK1BBU1MgYmF0
dGVyeS5jaGFyZ2luZyBpcyBjaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBj
aGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgZGlzY2hhcmdpbmdU
aW1lCitQQVNTIGJhdHRlcnkubGV2ZWwgaXMgbGV2ZWwKK2Rpc2NoYXJnaW5ndGltZWNoYW5nZSBl
dmVudCBpcyByYWlzZWQKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBpcyBjaGFyZ2luZworUEFTUyBi
YXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFy
Z2luZ1RpbWUgaXMgZGlzY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkubGV2ZWwgaXMgbGV2ZWwK
K2xldmVsY2hhbmdlIGV2ZW50IGlzIHJhaXNlZAorUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIGNo
YXJnaW5nCitQQVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIGNoYXJnaW5nVGltZQorUEFTUyBi
YXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBkaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5s
ZXZlbCBpcyBsZXZlbAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvYmFzaWMtYWxs
LXR5cGVzLW9mLWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9iYXNpYy1h
bGwtdHlwZXMtb2YtZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uN2ZlZTRlMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMv
YmFzaWMtYWxsLXR5cGVzLW9mLWV2ZW50cy5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvYmFz
aWMtYWxsLXR5cGVzLW9mLWV2ZW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvYmFzaWMtb3BlcmF0aW9u
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvYmFzaWMtb3BlcmF0aW9u
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTNjOGYw
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9iYXNpYy1vcGVy
YXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3RzIHRoZSBiYXNpYyBvcGVy
YXRpb24gb2YgQmF0dGVyeVN0YXR1cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1MgYmF0dGVyeS5jaGFyZ2luZyBpcyBjaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5n
VGltZSBpcyBjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgZGlz
Y2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkubGV2ZWwgaXMgbGV2ZWwKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9iYXR0ZXJ5c3RhdHVzL2Jhc2ljLW9wZXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvYmF0
dGVyeXN0YXR1cy9iYXNpYy1vcGVyYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lMmQ0NDc0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYmF0dGVy
eXN0YXR1cy9iYXNpYy1vcGVyYXRpb24uaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2Jhc2lj
LW9wZXJhdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL2V2ZW50LWFmdGVyLW5hdmlnYXRp
b24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNmJj
MzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL2V2ZW50LWFm
dGVyLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorVGVzdHMgZm9yIGEg
Y3Jhc2ggd2hlcmUgYW4gZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgdGhlIHBhZ2UgaGFzIGJlZW4gbmF2
aWdhdGVkIGF3YXkgd2hlbiB0aGUgb3JpZ2luYWwgcGFnZSBpcyBpbiB0aGUgcGFnZSBjYWNoZS4K
KworU1VDQ0VTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9ldmVudC1h
ZnRlci1uYXZpZ2F0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL2V2ZW50LWFm
dGVyLW5hdmlnYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45
NmIwYzVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9ldmVu
dC1hZnRlci1uYXZpZ2F0aW9uLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9ldmVudC1hZnRl
ci1uYXZpZ2F0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9tdWx0aXBsZS1mcmFtZXMtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9tdWx0aXBsZS1mcmFtZXMtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTJjZDAKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL211bHRpcGxlLWZyYW1lcy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwxNyBAQAorVGVzdHMgdXNpbmcgQmF0dGVyeVN0YXR1cyBmcm9t
IG11bHRpcGxlIGZyYW1lcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
YmF0dGVyeS5jaGFyZ2luZyBpcyBjaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBp
cyBjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgZGlzY2hhcmdp
bmdUaW1lCitQQVNTIGJhdHRlcnkubGV2ZWwgaXMgbGV2ZWwKK1BBU1MgYmF0dGVyeS5jaGFyZ2lu
ZyBpcyBjaGFyZ2luZworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nVGltZSBpcyBjaGFyZ2luZ1RpbWUK
K1BBU1MgYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUgaXMgZGlzY2hhcmdpbmdUaW1lCitQQVNTIGJh
dHRlcnkubGV2ZWwgaXMgbGV2ZWwKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL211
bHRpcGxlLWZyYW1lcy5odG1sIGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9tdWx0aXBsZS1m
cmFtZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODZiMGEyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9tdWx0aXBsZS1mcmFt
ZXMuaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL211bHRpcGxlLWZyYW1lcy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2JhdHRl
cnlzdGF0dXMvcmVzb3VyY2VzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24tbmV3Lmh0bWwgYi9MYXlv
dXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL3Jlc291cmNlcy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLW5l
dy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMzJiNWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL3Jlc291cmNlcy9ldmVudC1h
ZnRlci1uYXZpZ2F0aW9uLW5ldy5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgorICA8aGVh
ZD4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICBUZXN0cyBmb3IgYSBjcmFzaCB3aGVyZSBhbiBl
dmVudCBpcyBmaXJlZCBhZnRlciB0aGUgcGFnZSBoYXMgYmVlbiBuYXZpZ2F0ZWQKKyAgICBhd2F5
IHdoZW4gdGhlIG9yaWdpbmFsIHBhZ2UgaXMgaW4gdGhlIHBhZ2UgY2FjaGUuPGJyPjxicj4KKyAg
ICBTVUNDRVNTCisgICAgPHNjcmlwdD4KKyAgICAgICAgaW50ZXJuYWxzLnNldEJhdHRlcnlTdGF0
dXMoZG9jdW1lbnQsICdjaGFyZ2luZ2NoYW5nZScsIHRydWUsIDMwMDAsIE51bWJlci5QT1NJVElW
RV9JTkZJTklUWSwgMC41KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgIDwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9zY3JpcHQt
dGVzdHMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suanMgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5
c3RhdHVzL3NjcmlwdC10ZXN0cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzc2Njg5Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9zY3JpcHQtdGVzdHMvYWRkLWxpc3RlbmVyLWZyb20t
Y2FsbGJhY2suanMKQEAgLTAsMCArMSw0NCBAQAorZGVzY3JpcHRpb24oJ1Rlc3RzIHRoYXQgYWRk
aW5nIGEgbmV3IGV2ZW50IGxpc3RlbmVyIGZyb20gYSBjYWxsYmFjayB3b3JrcyBhcyBleHBlY3Rl
ZC4nKTsKKwordmFyIGNoYXJnaW5nID0gZmFsc2U7Cit2YXIgY2hhcmdpbmdUaW1lID0gTnVtYmVy
LlBPU0lUSVZFX0lORklOSVRZOwordmFyIGRpc2NoYXJnaW5nVGltZSA9IDYwMDA7Cit2YXIgbGV2
ZWwgPSAwLjc7CisKK3ZhciBiYXR0ZXJ5ID0gbmF2aWdhdG9yLndlYmtpdEJhdHRlcnk7CisKK2Z1
bmN0aW9uIGNoZWNrQmF0dGVyeVN0YXR1cygpIHsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFy
Z2luZycsICdjaGFyZ2luZycpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmNoYXJnaW5nVGltZScs
ICdjaGFyZ2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUn
LCAnZGlzY2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkubGV2ZWwnLCAnbGV2
ZWwnKTsKK30KKwordmFyIGZpcnN0TGlzdGVuZXJFdmVudHMgPSAwOworZnVuY3Rpb24gZmlyc3RM
aXN0ZW5lcigpIHsKKyAgICBjaGVja0JhdHRlcnlTdGF0dXMoKTsKKyAgICBpZiAoKytmaXJzdExp
c3RlbmVyRXZlbnRzID09IDEpIHsKKyAgICAgICAgYmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdj
aGFyZ2luZ2NoYW5nZScsIHNlY29uZExpc3RlbmVyKTsKKyAgICAgICAgaW50ZXJuYWxzLnNldEJh
dHRlcnlTdGF0dXMoZG9jdW1lbnQsICdjaGFyZ2luZ2NoYW5nZScsIGNoYXJnaW5nLCBjaGFyZ2lu
Z1RpbWUsIGRpc2NoYXJnaW5nVGltZSwgbGV2ZWwpOworICAgIH0KKyAgICBlbHNlIGlmIChmaXJz
dExpc3RlbmVyRXZlbnRzID4gMikKKyAgICAgICAgdGVzdEZhaWxlZCgnVG9vIG1hbnkgZXZlbnRz
IGZvciBmaXJzdCBsaXN0ZW5lci4nKTsKKyAgICBtYXliZUZpbmlzaFRlc3QoKTsKK30KKwordmFy
IHNlY29uZExpc3RlbmVyRXZlbnRzID0gMDsKK2Z1bmN0aW9uIHNlY29uZExpc3RlbmVyKCkgewor
ICAgIGNoZWNrQmF0dGVyeVN0YXR1cygpOworICAgIGlmICgrK3NlY29uZExpc3RlbmVyRXZlbnRz
ID4gMSkKKyAgICAgICAgdGVzdEZhaWxlZCgnVG9vIG1hbnkgZXZlbnRzIGZvciBzZWNvbmQgbGlz
dGVuZXIuJyk7CisgICAgbWF5YmVGaW5pc2hUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIG1heWJlRmlu
aXNoVGVzdCgpIHsKKyAgICBpZiAoZmlyc3RMaXN0ZW5lckV2ZW50cyA9PSAyICYmIHNlY29uZExp
c3RlbmVyRXZlbnRzID09IDEpCisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitiYXR0ZXJ5
LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywgZmlyc3RMaXN0ZW5lcik7CitpbnRl
cm5hbHMuc2V0QmF0dGVyeVN0YXR1cyhkb2N1bWVudCwgJ2NoYXJnaW5nY2hhbmdlJywgY2hhcmdp
bmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZlbCk7Cit3aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL3Nj
cmlwdC10ZXN0cy9iYXNpYy1hbGwtdHlwZXMtb2YtZXZlbnRzLmpzIGIvTGF5b3V0VGVzdHMvYmF0
dGVyeXN0YXR1cy9zY3JpcHQtdGVzdHMvYmFzaWMtYWxsLXR5cGVzLW9mLWV2ZW50cy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWZiZTFlCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9zY3JpcHQtdGVzdHMvYmFzaWMtYWxsLXR5cGVz
LW9mLWV2ZW50cy5qcwpAQCAtMCwwICsxLDQyIEBACitkZXNjcmlwdGlvbignVGVzdHMgdGhlIGJh
c2ljIG9wZXJhdGlvbiBvZiBhbGwgQmF0dGVyeVN0YXR1cyBldmVudHMuJyk7CisKK3ZhciBjaGFy
Z2luZyA9IGZhbHNlOwordmFyIGNoYXJnaW5nVGltZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklU
WTsKK3ZhciBkaXNjaGFyZ2luZ1RpbWUgPSA2MDAwOwordmFyIGxldmVsID0gMC43OworCit2YXIg
YmF0dGVyeSA9IG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5OworCitmdW5jdGlvbiBjaGVja0JhdHRl
cnlTdGF0dXMoKSB7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmcnLCAnY2hhcmdpbmcn
KTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFyZ2luZ1RpbWUnLCAnY2hhcmdpbmdUaW1lJyk7
CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuZGlzY2hhcmdpbmdUaW1lJywgJ2Rpc2NoYXJnaW5nVGlt
ZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmxldmVsJywgJ2xldmVsJyk7Cit9CisKK2JhdHRl
cnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKKyAgICBk
ZWJ1ZygnY2hhcmdpbmdjaGFuZ2UgZXZlbnQgaXMgcmFpc2VkJyk7CisgICAgY2hlY2tCYXR0ZXJ5
U3RhdHVzKCk7Cit9KTsKKworYmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2luZ3RpbWVj
aGFuZ2UnLCBmdW5jdGlvbigpIHsKKyAgICBkZWJ1ZygnY2hhcmdpbmd0aW1lY2hhbmdlIGV2ZW50
IGlzIHJhaXNlZCcpOworICAgIGNoZWNrQmF0dGVyeVN0YXR1cygpOworfSk7CisKK2JhdHRlcnku
YWRkRXZlbnRMaXN0ZW5lcignZGlzY2hhcmdpbmd0aW1lY2hhbmdlJywgZnVuY3Rpb24oKSB7Cisg
ICAgZGVidWcoJ2Rpc2NoYXJnaW5ndGltZWNoYW5nZSBldmVudCBpcyByYWlzZWQnKTsKKyAgICBj
aGVja0JhdHRlcnlTdGF0dXMoKTsKK30pOworCitiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2xl
dmVsY2hhbmdlJywgZnVuY3Rpb24oKSB7CisgICAgZGVidWcoJ2xldmVsY2hhbmdlIGV2ZW50IGlz
IHJhaXNlZCcpOworICAgIGNoZWNrQmF0dGVyeVN0YXR1cygpOworICAgIGZpbmlzaEpTVGVzdCgp
OworfSk7CisKK2ludGVybmFscy5zZXRCYXR0ZXJ5U3RhdHVzKGRvY3VtZW50LCAnY2hhcmdpbmdj
aGFuZ2UnLCBjaGFyZ2luZywgY2hhcmdpbmdUaW1lLCBkaXNjaGFyZ2luZ1RpbWUsIGxldmVsKTsK
K2ludGVybmFscy5zZXRCYXR0ZXJ5U3RhdHVzKGRvY3VtZW50LCAnY2hhcmdpbmd0aW1lY2hhbmdl
JywgY2hhcmdpbmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZlbCk7CitpbnRl
cm5hbHMuc2V0QmF0dGVyeVN0YXR1cyhkb2N1bWVudCwgJ2Rpc2NoYXJnaW5ndGltZWNoYW5nZScs
IGNoYXJnaW5nLCBjaGFyZ2luZ1RpbWUsIGRpc2NoYXJnaW5nVGltZSwgbGV2ZWwpOworaW50ZXJu
YWxzLnNldEJhdHRlcnlTdGF0dXMoZG9jdW1lbnQsICdsZXZlbGNoYW5nZScsIGNoYXJnaW5nLCBj
aGFyZ2luZ1RpbWUsIGRpc2NoYXJnaW5nVGltZSwgbGV2ZWwpOword2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9zY3JpcHQt
dGVzdHMvYmFzaWMtb3BlcmF0aW9uLmpzIGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9zY3Jp
cHQtdGVzdHMvYmFzaWMtb3BlcmF0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmI1OGYxOGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3Rh
dHVzL3NjcmlwdC10ZXN0cy9iYXNpYy1vcGVyYXRpb24uanMKQEAgLTAsMCArMSwxOSBAQAorZGVz
Y3JpcHRpb24oJ1Rlc3RzIHRoZSBiYXNpYyBvcGVyYXRpb24gb2YgQmF0dGVyeVN0YXR1cy4nKTsK
KwordmFyIGNoYXJnaW5nID0gZmFsc2U7Cit2YXIgY2hhcmdpbmdUaW1lID0gTnVtYmVyLlBPU0lU
SVZFX0lORklOSVRZOwordmFyIGRpc2NoYXJnaW5nVGltZSA9IDYwMDA7Cit2YXIgbGV2ZWwgPSAw
Ljc7CisKK3ZhciBiYXR0ZXJ5ID0gbmF2aWdhdG9yLndlYmtpdEJhdHRlcnk7CisKK2JhdHRlcnku
YWRkRXZlbnRMaXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKKyAgICBzaG91
bGRCZSgnYmF0dGVyeS5jaGFyZ2luZycsICdjaGFyZ2luZycpOworICAgIHNob3VsZEJlKCdiYXR0
ZXJ5LmNoYXJnaW5nVGltZScsICdjaGFyZ2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVy
eS5kaXNjaGFyZ2luZ1RpbWUnLCAnZGlzY2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUoJ2Jh
dHRlcnkubGV2ZWwnLCAnbGV2ZWwnKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworCitpbnRl
cm5hbHMuc2V0QmF0dGVyeVN0YXR1cyhkb2N1bWVudCwgJ2NoYXJnaW5nY2hhbmdlJywgY2hhcmdp
bmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZlbCk7Cit3aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL3Nj
cmlwdC10ZXN0cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLmpzIGIvTGF5b3V0VGVzdHMvYmF0dGVy
eXN0YXR1cy9zY3JpcHQtdGVzdHMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTdjNTEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9zY3JpcHQtdGVzdHMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlv
bi5qcwpAQCAtMCwwICsxLDEzIEBACitkZXNjcmlwdGlvbignVGVzdHMgZm9yIGEgY3Jhc2ggd2hl
cmUgYW4gZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgdGhlIHBhZ2UgaGFzIGJlZW4gbmF2aWdhdGVkIGF3
YXkgd2hlbiB0aGUgb3JpZ2luYWwgcGFnZSBpcyBpbiB0aGUgcGFnZSBjYWNoZS4nKTsKKworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5v
dmVycmlkZVByZWZlcmVuY2UoJ1dlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5JywgMSk7
CitlbHNlCisgICAgZGVidWcoJ1RoaXMgdGVzdCBjYW4gbm90IGJlIHJ1biB3aXRob3V0IHRoZSBM
YXlvdXRUZXN0Q29udHJvbGxlcicpOworCitkb2N1bWVudC5ib2R5Lm9ubG9hZCA9IGZ1bmN0aW9u
KCkgeworICAgIG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJn
aW5nY2hhbmdlJywgZnVuY3Rpb24oKSB7IH0gKTsKKyAgICB3aW5kb3cubG9jYXRpb24gPSAicmVz
b3VyY2VzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24tbmV3Lmh0bWwiOworfQorCit3aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVz
L3NjcmlwdC10ZXN0cy9tdWx0aXBsZS1mcmFtZXMuanMgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3Rh
dHVzL3NjcmlwdC10ZXN0cy9tdWx0aXBsZS1mcmFtZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZTY5NTgxYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Jh
dHRlcnlzdGF0dXMvc2NyaXB0LXRlc3RzL211bHRpcGxlLWZyYW1lcy5qcwpAQCAtMCwwICsxLDUx
IEBACitkZXNjcmlwdGlvbignVGVzdHMgdXNpbmcgQmF0dGVyeVN0YXR1cyBmcm9tIG11bHRpcGxl
IGZyYW1lcy4nKTsKKwordmFyIGNoYXJnaW5nID0gZmFsc2U7Cit2YXIgY2hhcmdpbmdUaW1lID0g
TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwordmFyIGRpc2NoYXJnaW5nVGltZSA9IDYwMDA7Cit2
YXIgbGV2ZWwgPSAwLjc7CisKK3ZhciBiYXR0ZXJ5ID0gbmF2aWdhdG9yLndlYmtpdEJhdHRlcnk7
CisKK2Z1bmN0aW9uIGNoZWNrQmF0dGVyeVN0YXR1cygpIHsKKyAgICBzaG91bGRCZSgnYmF0dGVy
eS5jaGFyZ2luZycsICdjaGFyZ2luZycpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmNoYXJnaW5n
VGltZScsICdjaGFyZ2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5kaXNjaGFyZ2lu
Z1RpbWUnLCAnZGlzY2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkubGV2ZWwn
LCAnbGV2ZWwnKTsKK30KKworZnVuY3Rpb24gY2hlY2tDaGlsZEJhdHRlcnlTdGF0dXMoKSB7Cisg
ICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmcnLCAnY2hhcmdpbmcnKTsKKyAgICBzaG91bGRC
ZSgnYmF0dGVyeS5jaGFyZ2luZ1RpbWUnLCAnY2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUo
J2JhdHRlcnkuZGlzY2hhcmdpbmdUaW1lJywgJ2Rpc2NoYXJnaW5nVGltZScpOworICAgIHNob3Vs
ZEJlKCdiYXR0ZXJ5LmxldmVsJywgJ2xldmVsJyk7Cit9CisKK3ZhciBoYXNNYWluRnJhbWVFdmVu
dEZpcmVkID0gZmFsc2U7CitmdW5jdGlvbiBtYWluRnJhbWVMaXN0ZW5lcigpIHsKKyAgICBoYXNN
YWluRnJhbWVFdmVudEZpcmVkID0gdHJ1ZTsKKyAgICBtYXliZUZpbmlzaFRlc3QoKTsKK30KKwor
dmFyIGhhc0NoaWxkRnJhbWVFdmVudEZpcmVkID0gZmFsc2U7CitmdW5jdGlvbiBjaGlsZEZyYW1l
TGlzdGVuZXIoKSB7CisgICAgaGFzQ2hpbGRGcmFtZUV2ZW50RmlyZWQgPSB0cnVlOworICAgIG1h
eWJlRmluaXNoVGVzdCgpOworfQorCitmdW5jdGlvbiBtYXliZUZpbmlzaFRlc3QoKSB7CisgICAg
aWYgKGhhc01haW5GcmFtZUV2ZW50RmlyZWQgJiYgaGFzQ2hpbGRGcmFtZUV2ZW50RmlyZWQpIHsK
KyAgICAgICAgY2hlY2tCYXR0ZXJ5U3RhdHVzKCk7CisgICAgICAgIGNoZWNrQ2hpbGRCYXR0ZXJ5
U3RhdHVzKCk7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30KKwordmFyIGNoaWxk
RnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKK2RvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQoY2hpbGRGcmFtZSk7Cit2YXIgY2hpbGRCYXR0ZXJ5ID0gY2hpbGRGcmFtZS5j
b250ZW50V2luZG93Lm5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5CitjaGlsZEJhdHRlcnkuYWRkRXZl
bnRMaXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBjaGlsZEZyYW1lTGlzdGVuZXIpOworYmF0dGVy
eS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2NoYW5nZScsIG1haW5GcmFtZUxpc3RlbmVyKTsK
KworaW50ZXJuYWxzLnNldEJhdHRlcnlTdGF0dXMoZG9jdW1lbnQsICdjaGFyZ2luZ2NoYW5nZScs
IGNoYXJnaW5nLCBjaGFyZ2luZ1RpbWUsIGRpc2NoYXJnaW5nVGltZSwgbGV2ZWwpOword2luZG93
LmpzVGVzdElzQXN5bmMgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0
YXR1cy9zY3JpcHQtdGVzdHMvdXBkYXRlcy5qcyBiL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMv
c2NyaXB0LXRlc3RzL3VwZGF0ZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uN2E5NjY2NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMv
c2NyaXB0LXRlc3RzL3VwZGF0ZXMuanMKQEAgLTAsMCArMSwzOSBAQAorZGVzY3JpcHRpb24oJ1Rl
c3RzIHRoYXQgdXBkYXRlcyB0byB0aGUgYmF0dGVyeSBldmVudCBjYXVzZXMgbmV3IGV2ZW50cyB0
byBmaXJlLicpOworCit2YXIgY2hhcmdpbmcgPSBmYWxzZTsKK3ZhciBjaGFyZ2luZ1RpbWUgPSBO
dW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7Cit2YXIgZGlzY2hhcmdpbmdUaW1lID0gNjAwMDsKK3Zh
ciBsZXZlbCA9IDAuNzsKKwordmFyIGJhdHRlcnkgPSBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeTsK
KworZnVuY3Rpb24gY2hlY2tCYXR0ZXJ5U3RhdHVzKCkgeworICAgIHNob3VsZEJlKCdiYXR0ZXJ5
LmNoYXJnaW5nJywgJ2NoYXJnaW5nJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmdU
aW1lJywgJ2NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmRpc2NoYXJnaW5n
VGltZScsICdkaXNjaGFyZ2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5sZXZlbCcs
ICdsZXZlbCcpOworfQorCitmdW5jdGlvbiBzZXRCYXR0ZXJ5U3RhdHVzKCkgeworICAgIGludGVy
bmFscy5zZXRCYXR0ZXJ5U3RhdHVzKGRvY3VtZW50LCAnY2hhcmdpbmdjaGFuZ2UnLCBjaGFyZ2lu
ZywgY2hhcmdpbmdUaW1lLCBkaXNjaGFyZ2luZ1RpbWUsIGxldmVsKTsKK30KKworZnVuY3Rpb24g
Zmlyc3RMaXN0ZW5lcigpIHsKKyAgICBjaGVja0JhdHRlcnlTdGF0dXMoKTsKKyAgICBiYXR0ZXJ5
LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywgZmlyc3RMaXN0ZW5lcik7Cisg
ICAgYmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2NoYW5nZScsIHVwZGF0ZUxpc3Rl
bmVyKTsKKyAgICBjaGFyZ2luZyA9IHRydWU7CisgICAgY2hhcmdpbmdUaW1lID0gNzAwMDsKKyAg
ICBkaXNjaGFyZ2luZ1RpbWUgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CisgICAgbGV2ZWwg
PSAwLjM7CisJc2V0QmF0dGVyeVN0YXR1cygpOworfQorCitmdW5jdGlvbiB1cGRhdGVMaXN0ZW5l
cihldmVudCkgeworICAgIGNoZWNrQmF0dGVyeVN0YXR1cyhldmVudCk7CisgICAgZmluaXNoSlNU
ZXN0KCk7Cit9CisKK2JhdHRlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBm
aXJzdExpc3RlbmVyKTsKK3NldEJhdHRlcnlTdGF0dXMoKTsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5j
ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvc2NyaXB0LXRl
c3RzL3dpbmRvdy1wcm9wZXJ0eS5qcyBiL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvc2NyaXB0
LXRlc3RzL3dpbmRvdy1wcm9wZXJ0eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mZWZlMzc2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1
cy9zY3JpcHQtdGVzdHMvd2luZG93LXByb3BlcnR5LmpzCkBAIC0wLDAgKzEsMjMgQEAKK2Rlc2Ny
aXB0aW9uKCdUZXN0cyB0aGF0IHRoZSB3aW5kb3cubmF2aWdhdG9yLmJhdHRlcnkgcHJvcGVydGll
cyBhcmUgcHJlc2VudC4nKTsKKworZnVuY3Rpb24gaGFzT25CYXR0ZXJ5UHJvcGVydHkoKQorewor
ICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIHByb3BlcnR5IGluIG5hdmlnYXRvci53
ZWJraXRCYXR0ZXJ5KSB7CisgICAgICAgIGlmIChwcm9wZXJ0eSA9PSAnb25jaGFyZ2luZ2NoYW5n
ZScgfHwKKyAgICAgICAgICAgIHByb3BlcnR5ID09ICdvbmNoYXJnaW5ndGltZWNoYW5nZScgfHwK
KyAgICAgICAgICAgIHByb3BlcnR5ID09ICdvbmRpc2NoYXJnaW5ndGltZWNoYW5nZScgfHwKKyAg
ICAgICAgICAgIHByb3BlcnR5ID09ICdvbmxldmVsY2hhbmdlJykKKyAgICAgICAgICAgIHJlc3Vs
dCArPSAxOworICAgIH0KKyAgICBpZiAocmVzdWx0ID09IDQpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVUcnVlKCJ0eXBlb2YgbmF2aWdhdG9y
LndlYmtpdEJhdHRlcnkgPT0gJ29iamVjdCciKTsKK3Nob3VsZEJlVHJ1ZSgiaGFzT25CYXR0ZXJ5
UHJvcGVydHkoKSIpOworc2hvdWxkQmVUcnVlKCJuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5oYXNP
d25Qcm9wZXJ0eSgnb25jaGFyZ2luZ2NoYW5nZScpIik7CitzaG91bGRCZVRydWUoIm5hdmlnYXRv
ci53ZWJraXRCYXR0ZXJ5Lmhhc093blByb3BlcnR5KCdvbmNoYXJnaW5ndGltZWNoYW5nZScpIik7
CitzaG91bGRCZVRydWUoIm5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5Lmhhc093blByb3BlcnR5KCdv
bmRpc2NoYXJnaW5ndGltZWNoYW5nZScpIik7CitzaG91bGRCZVRydWUoIm5hdmlnYXRvci53ZWJr
aXRCYXR0ZXJ5Lmhhc093blByb3BlcnR5KCdvbmxldmVsY2hhbmdlJykiKTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvdXBkYXRlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9iYXR0ZXJ5c3RhdHVzL3VwZGF0ZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjMxNzM0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9iYXR0ZXJ5c3RhdHVzL3VwZGF0ZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1Rl
c3RzIHRoYXQgdXBkYXRlcyB0byB0aGUgYmF0dGVyeSBldmVudCBjYXVzZXMgbmV3IGV2ZW50cyB0
byBmaXJlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBiYXR0ZXJ5LmNo
YXJnaW5nIGlzIGNoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIGNoYXJnaW5n
VGltZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBkaXNjaGFyZ2luZ1RpbWUKK1BB
U1MgYmF0dGVyeS5sZXZlbCBpcyBsZXZlbAorUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIGNoYXJn
aW5nCitQQVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIGNoYXJnaW5nVGltZQorUEFTUyBiYXR0
ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBkaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZl
bCBpcyBsZXZlbAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvdXBkYXRlcy5odG1s
IGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy91cGRhdGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZTczM2FkMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2JhdHRlcnlzdGF0dXMvdXBkYXRlcy5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvdXBk
YXRlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvd2luZG93LXByb3BlcnR5LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvd2luZG93LXByb3BlcnR5LWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWU2ZmQ1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy93aW5kb3ctcHJvcGVydHktZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTUgQEAKK1Rlc3RzIHRoYXQgdGhlIHdpbmRvdy5uYXZpZ2F0b3IuYmF0dGVy
eSBwcm9wZXJ0aWVzIGFyZSBwcmVzZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyB0eXBlb2YgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkgPT0gJ29iamVjdCcgaXMgdHJ1
ZQorUEFTUyBoYXNPbkJhdHRlcnlQcm9wZXJ0eSgpIGlzIHRydWUKK1BBU1MgbmF2aWdhdG9yLndl
YmtpdEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29uY2hhcmdpbmdjaGFuZ2UnKSBpcyB0cnVlCitQ
QVNTIG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5Lmhhc093blByb3BlcnR5KCdvbmNoYXJnaW5ndGlt
ZWNoYW5nZScpIGlzIHRydWUKK1BBU1MgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3duUHJv
cGVydHkoJ29uZGlzY2hhcmdpbmd0aW1lY2hhbmdlJykgaXMgdHJ1ZQorUEFTUyBuYXZpZ2F0b3Iu
d2Via2l0QmF0dGVyeS5oYXNPd25Qcm9wZXJ0eSgnb25sZXZlbGNoYW5nZScpIGlzIHRydWUKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL3dpbmRvdy1wcm9wZXJ0eS5odG1sIGIvTGF5
b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy93aW5kb3ctcHJvcGVydHkuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTA4OGYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvYmF0dGVyeXN0YXR1cy93aW5kb3ctcHJvcGVydHkuaHRtbApAQCAtMCwwICsxLDkgQEAK
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL3dpbmRvdy1wcm9wZXJ0eS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0
YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRp
b25zLnR4dAppbmRleCA4YjNhOWQ1Li43NGQzYmUxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC0xMTQsNiArMTE0LDkg
QEAgQlVHQ1IxMDM5MzkgU0tJUCA6IGh0dHAvdGVzdHMvYXBwY2FjaGUvd3JvbmctY29udGVudC10
eXBlLmh0bWwgPSBURVhUCiAvLyBWaWJyYXRpb24gQVBJIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGlu
IHRoZSBjaHJvbWl1bSBwb3J0LgogQlVHV0s3MjAxMCBTS0lQIDogZmFzdC9kb20vbmF2aWdhdG9y
LXZpYnJhdGlvbi5odG1sID0gRkFJTAogCisvLyBCYXR0ZXJ5IFN0YXR1cyBBUEkgaXMgbm90IHN1
cHBvcnRlZCB5ZXQgaW4gdGhlIGNocm9taXVtIHBvcnQuCitCVUdXSzYyNjk4IFNLSVAgOiBiYXR0
ZXJ5c3RhdHVzID0gUEFTUyBGQUlMCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBXT05URklYIFRFU1RTCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA5MGI2NzBiLi5jYjA3NDVi
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtNDA3LDYgKzQwNyw5IEBAIHdlYmludGVu
dHMvCiAjIFBvaW50ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50ZWQuCiBwb2ludGVyLWxvY2svCiAK
KyNCYXR0ZXJ5IFN0YXR1cyBBUEkgc3VwcG9ydCBub3QgeWV0LiBodHRwOi8vd2Via2l0Lm9yZy9i
LzYyNjk4CitiYXR0ZXJ5c3RhdHVzCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgVEVTVFMg
RkFJTElORwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApp
bmRleCA5Y2RkOTA0Li43ODNkYjkzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtNTc3
LDMgKzU3Nyw3IEBAIGZhc3QvZG9tL25hdmlnYXRvci12aWJyYXRpb24uaHRtbAogIyBodHRwOi8v
L3dlYmtpdC5vcmcvYi84MDUzMQogIyBSRUdSRVNTSU9OKHIxMTAwNzIpOiBmYXN0L2Zvcm1zL3Rl
eHRmaWVsZC1vdmVyZmxvdy5odG1sIGlzIGZhaWxpbmcKIGZhc3QvZm9ybXMvdGV4dGZpZWxkLW92
ZXJmbG93Lmh0bWwKKworIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjI2OTgKKyMgTmVlZHMgQmF0dGVyeUNsaWVudCBpbXBsZW1lbnRhdGlvbi4KK2JhdHRlcnlzdGF0
dXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCmluZGV4IGNlMDIxOTkuLmY2YWQyNDggMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvU2tpcHBlZApAQCAtMzYyLDYgKzM2Miw5IEBAIGZhc3QvZG9tL1dpbmRvdy93aW5k
b3ctcG9zdG1lc3NhZ2UtYXJyYXlzLmh0bWwKICNWaWJyYXRpb24gQVBJIGlzIG5vdCBpbXBsZW1l
bnRlZC4KIGZhc3QvZG9tL25hdmlnYXRvci12aWJyYXRpb24uaHRtbAogCisjQmF0dGVyeSBTdGF0
dXMgQVBJIGlzIG5vdCBpbXBsZW1lbnRlZC4KK2JhdHRlcnlzdGF0dXMKKwogIyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0gIwogIyAgICAgICBEcmFnIGFuZCBEcm9wIFN1cHBvcnQgaW4gRFJULiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwogIyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0g
IwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCAxZDQ1OGU3Li4wOWYwYjZlIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtMTY2NSw2ICsxNjY1LDkgQEAgZmFzdC9yZXBhaW50L3Ry
YW5zZm9ybS1hYnNvbHV0ZS1pbi1wb3NpdGlvbmVkLWNvbnRhaW5lci5odG1sCiAjVmlicmF0aW9u
IEFQSSBpcyBub3QgaW1wbGVtZW50ZWQuCiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0
bWwKIAorI0JhdHRlcnkgU3RhdHVzIEFQSSBpcyBub3QgaW1wbGVtZW50ZWQuCitiYXR0ZXJ5c3Rh
dHVzCisKICMgVGhvc2UgdGVzdHMgbmVlZCBhIHRleHQgYmFzZWxpbmUgYWZ0ZXIgbGF6aWx5IGFs
bG9jYXRpbmcgbGF5ZXJzLgogIyBUaGUgY2hhbmdlIHNob3VsZCBvbmx5IGJlIGxheWVyIHJlbW92
YWwuCiBhbmltYXRpb25zL2NvbWJvLXRyYW5zZm9ybS10cmFuc2xhdGUrc2NhbGUuaHRtbApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZCBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL3dpbmNhaXJvL1NraXBwZWQKaW5kZXggYTUwNjYyMC4uZmY2Y2MyZCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCkBAIC0yMDYyLDMgKzIwNjIsNiBAQCBm
YXN0L211dGF0aW9uL2VuZC1vZi10YXNrLWRlbGl2ZXJ5Lmh0bWwKIAogI1ZpYnJhdGlvbiBBUEkg
aXMgbm90IGltcGxlbWVudGVkLgogZmFzdC9kb20vbmF2aWdhdG9yLXZpYnJhdGlvbi5odG1sCisK
KyNCYXR0ZXJ5IFN0YXR1cyBBUEkgaXMgbm90IGltcGxlbWVudGVkLgorYmF0dGVyeXN0YXR1cwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCBkYTRjOWM5Li40YzQxZTdmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtMjMzMyw2ICsyMzMzLDIyIEBAIFNFVChXZWJDb3JlVGVzdFN1cHBvcnRfU09VUkNF
UwogICAgIHRlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAKICkKIAorSUYgKEVOQUJMRV9CQVRU
RVJZX1NUQVRVUykKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMK
KyAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvYmF0dGVyeSIKKyAgICApCisgICAgTElT
VChBUFBFTkQgV2ViQ29yZV9JRExfRklMRVMKKyAgICAgICAgTW9kdWxlcy9iYXR0ZXJ5L05hdmln
YXRvckJhdHRlcnkuaWRsCisgICAgICAgIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5p
ZGwKKyAgICApCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIE1vZHVs
ZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNwcAorICAgICAgICBNb2R1bGVzL2JhdHRlcnkv
QmF0dGVyeUNvbnRyb2xsZXIuY3BwCisgICAgICAgIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFu
YWdlci5jcHAKKyAgICAgICAgTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuY3BwCisgICAg
KQorRU5ESUYgKCkKKwogIyBNb2R1bGVzIHRoYXQgdGhlIGJpbmRpbmdzIGdlbmVyYXRvciBzY3Jp
cHRzIG1heSB1c2UKIFNFVChTQ1JJUFRTX1JFU09MVkVfU1VQUExFTUVOVEFMCiAgICAgJHtXRUJD
T1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1ZTU5
Y2RmLi4wMjM2OTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAzIEBACisyMDEyLTAzLTE1ICBL
aWhvbmcgS3dvbiAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgorCisgICAgICAgIFN1cHBvcnQg
Zm9yIEJhdHRlcnkgU3RhdHVzIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKworICAgICAgICBCYXR0ZXJ5IFN0YXR1cyBBUEkgaXMgaW1w
bGVtZW50ZWQgdW5kZXIgdGhlIE5hdmlnYXRvciBjbGFzcy4KKyAgICAgICAgQmF0dGVyeSBTdGF0
dXMgQVBJIGhhcyBmb3VyIHR5cGVzIG9mIGV2ZW50cywgYW5kIGFsbCBldmVudHMgYXJlIG9wZXJh
dGVkIGJhc2VkIG9uIGEgY2FsbGJhY2sgbWVjaGFuaXNtLgorICAgICAgICAgOiBvbmNoYXJnaW5n
Y2hhbmdlLCBvbmNoYXJnaW5ndGltZWNoYW5nZSwgb25kaXNjaGFyZ2luZ3RpbWVjaGFuZ2UsIG9u
bGV2ZWxjaGFuZ2UuCisgICAgICAgIFRoZSBiYXR0ZXJ5IHN0YXR1cyBjYW4gYmUgYWNjZXNzZWQg
dXNpbmcgQmF0dGVyeU1hbmFnZXIobmF2aWdhdG9yLndlYmtpdEJhdHRlcnkpLCBhbmQgYmF0dGVy
eSBzdGF0dXMgaXMgY29udHJvbGxlZCBieSBCYXR0ZXJ5Q29udHJvbGxlciB3aGljaCBtYW5hZ2Vz
IGluc3RhbmNlcyBvZiBCYXR0ZXJ5TWFuYWdlci4KKyAgICAgICAgV2hlbiBiYXR0ZXJ5IHN0YXR1
cyBldmVudCBpcyByYWlzZWQsIEJhdHRlcnlDb250cm9sbGVyIGNhbGxzIGFsbCByZWdpc3RlcmVk
IEJhdHRlcnlNYW5hZ2VyJ3MgZXZlbnQgZGlzcGF0Y2hlci4KKyAgICAgICAgaHR0cDovL3d3dy53
My5vcmcvVFIvYmF0dGVyeS1zdGF0dXMvCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGVzdHM6IGJhdHRlcnlzdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20t
Y2FsbGJhY2suaHRtbAorICAgICAgICAgICAgICAgYmF0dGVyeXN0YXR1cy9iYXNpYy1hbGwtdHlw
ZXMtb2YtZXZlbnRzLmh0bWwKKyAgICAgICAgICAgICAgIGJhdHRlcnlzdGF0dXMvYmFzaWMtb3Bl
cmF0aW9uLmh0bWwKKyAgICAgICAgICAgICAgIGJhdHRlcnlzdGF0dXMvZXZlbnQtYWZ0ZXItbmF2
aWdhdGlvbi5odG1sCisgICAgICAgICAgICAgICBiYXR0ZXJ5c3RhdHVzL211bHRpcGxlLWZyYW1l
cy5odG1sCisgICAgICAgICAgICAgICBiYXR0ZXJ5c3RhdHVzL3VwZGF0ZXMuaHRtbAorICAgICAg
ICAgICAgICAgYmF0dGVyeXN0YXR1cy93aW5kb3ctcHJvcGVydHkuaHRtbAorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDbGllbnQu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEJhdHRlcnlDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudDo6fkJhdHRlcnlDbGllbnQpOgorICAgICAg
ICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6QmF0dGVy
eUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6On5CYXR0
ZXJ5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjphZGRMaXN0ZW5lcik6
CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6cmVtb3ZlTGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0
dXMpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjppc0FjdGl2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpwcm92aWRlQmF0dGVyeVRvKToKKyAgICAgICAgKiBNb2R1bGVzL2JhdHRl
cnkvQmF0dGVyeUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKEJhdHRlcnlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDb250cm9s
bGVyOjpjbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6OmZyb20p
OgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjp+QmF0dGVyeU1hbmFnZXIp
OgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OkJhdHRlcnlNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpjaGFyZ2luZyk6CisgICAgICAgIChXZWJD
b3JlOjpCYXR0ZXJ5TWFuYWdlcjo6Y2hhcmdpbmdUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
dHRlcnlNYW5hZ2VyOjpkaXNjaGFyZ2luZ1RpbWUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVy
eU1hbmFnZXI6OmxldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpkaWRD
aGFuZ2VCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpz
dXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpyZXN1bWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OnN0b3ApOgorICAgICAgICAqIE1vZHVsZXMv
YmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoQmF0dGVyeU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6
OmludGVyZmFjZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmJh
dHRlcnlDb250cm9sbGVyRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5h
Z2VyOjpjYW5TdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpldmVu
dFRhcmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmVuc3VyZUV2
ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6cmVmRXZl
bnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmRlcmVmRXZlbnRU
YXJnZXQpOgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5pZGw6IEFk
ZGVkLgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5U3RhdHVzLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzOjpCYXR0ZXJ5U3RhdHVzKToK
KyAgICAgICAgKiBNb2R1bGVzL2JhdHRlcnkvQmF0dGVyeVN0YXR1cy5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoQmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXR0ZXJ5U3RhdHVzOjpjaGFyZ2luZyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5U3Rh
dHVzOjpjaGFyZ2luZ1RpbWUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1czo6ZGlz
Y2hhcmdpbmdUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6OmxldmVsKToK
KyAgICAgICAgKiBNb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JCYXR0ZXJ5OjpO
YXZpZ2F0b3JCYXR0ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckJhdHRlcnk6On5O
YXZpZ2F0b3JCYXR0ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckJhdHRlcnk6Ondl
YmtpdEJhdHRlcnkpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yQmF0dGVyeTo6ZnJvbSk6
CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JCYXR0ZXJ5OjpiYXR0ZXJ5TWFuYWdlcik6Cisg
ICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKE5hdmlnYXRvckJhdHRlcnkpOgorICAgICAgICAqIE1v
ZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmlkbDogQWRkZWQuCisgICAgICAgICogZG9t
L0V2ZW50TmFtZXMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9FdmVudFRh
cmdldEZhY3RvcnkuaW46CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgIChJbnRlcm5hbHMp
OgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAxMi0wMy0xNCAgQ2hyaXMg
RmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBlbWJlZGRlZCBh
dHRhY2htZW50cyBkbyBub3QgcmVwb3J0IHRoZWlyIHBhcmVudHMgY29ycmVjdGx5CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNsaWVudC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDbGllbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjU2MzM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDbGllbnQuaApAQCAtMCwwICsxLDQ2IEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgQmF0dGVyeUNsaWVudF9oCisjZGVmaW5lIEJhdHRlcnlDbGllbnRfaAorCisj
aWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEJhdHRlcnlDb250cm9sbGVyOworY2xhc3MgUGFnZTsKKworY2xhc3MgQmF0dGVyeUNsaWVudCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+QmF0dGVyeUNsaWVudCgpIHsgfQorCisgICAgdmlydHVh
bCB2b2lkIHNldENvbnRyb2xsZXIoQmF0dGVyeUNvbnRyb2xsZXIqKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHN0YXJ0VXBkYXRpbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGlu
ZygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKSA9
IDA7Cit9OworCit2b2lkIHByb3ZpZGVCYXR0ZXJ5VG8oUGFnZSosIEJhdHRlcnlDbGllbnQqKTsK
KworfQorCisjZW5kaWYgLy8gQkFUVEVSWV9TVEFUVVMKKyNlbmRpZiAvLyBCYXR0ZXJ5Q2xpZW50
X2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29u
dHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxOTJhOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5
Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQmF0dGVyeUNvbnRyb2xsZXIuaCIKKworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRV
UykKKworI2luY2x1ZGUgIkJhdHRlcnlDbGllbnQuaCIKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVz
LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCYXR0ZXJ5
Q29udHJvbGxlcjo6QmF0dGVyeUNvbnRyb2xsZXIoQmF0dGVyeUNsaWVudCogY2xpZW50KQorICAg
IDogbV9jbGllbnQoY2xpZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGll
bnQtPnNldENvbnRyb2xsZXIodGhpcyk7Cit9CisKK0JhdHRlcnlDb250cm9sbGVyOjp+QmF0dGVy
eUNvbnRyb2xsZXIoKQoreworICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGl0ID0g
bV9saXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnMuZW5kKCk7ICsraXQpCisgICAg
ICAgICgqaXQpLT5iYXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3llZCgpOworICAgIG1fY2xpZW50LT5i
YXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3llZCgpOworfQorCitQYXNzT3duUHRyPEJhdHRlcnlDb250
cm9sbGVyPiBCYXR0ZXJ5Q29udHJvbGxlcjo6Y3JlYXRlKEJhdHRlcnlDbGllbnQqIGNsaWVudCkK
K3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEJhdHRlcnlDb250cm9sbGVyKGNsaWVudCkpOwor
fQorCit2b2lkIEJhdHRlcnlDb250cm9sbGVyOjphZGRMaXN0ZW5lcihCYXR0ZXJ5TWFuYWdlciog
YmF0dGVyeU1hbmFnZXIpCit7CisgICAgbV9saXN0ZW5lcnMuYXBwZW5kKGJhdHRlcnlNYW5hZ2Vy
KTsKKyAgICBtX2NsaWVudC0+c3RhcnRVcGRhdGluZygpOworfQorCit2b2lkIEJhdHRlcnlDb250
cm9sbGVyOjpyZW1vdmVMaXN0ZW5lcihCYXR0ZXJ5TWFuYWdlciogYmF0dGVyeU1hbmFnZXIpCit7
CisgICAgc2l6ZV90IHBvcyA9IG1fbGlzdGVuZXJzLmZpbmQoYmF0dGVyeU1hbmFnZXIpOworICAg
IGlmIChwb3MgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbGlzdGVu
ZXJzLnJlbW92ZShwb3MpOworICAgIGlmIChtX2xpc3RlbmVycy5pc0VtcHR5KCkpCisgICAgICAg
IG1fY2xpZW50LT5zdG9wVXBkYXRpbmcoKTsKK30KKwordm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6
ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQoreworICAgIFJlZlB0cjxFdmVu
dD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFsc2UsIGZhbHNlKTsKKyAgICBS
ZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeSA9IGJhdHRlcnlTdGF0dXM7CisgICAgZm9yIChM
aXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBtX2xpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBt
X2xpc3RlbmVycy5lbmQoKTsgKytpdCkKKyAgICAgICAgKCppdCktPmRpZENoYW5nZUJhdHRlcnlT
dGF0dXMoZXZlbnQsIGJhdHRlcnkpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIEJhdHRlcnlD
b250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChB
dG9taWNTdHJpbmcsIG5hbWUsICgiQmF0dGVyeUNvbnRyb2xsZXIiKSk7CisgICAgcmV0dXJuIG5h
bWU7Cit9CisKK2Jvb2wgQmF0dGVyeUNvbnRyb2xsZXI6OmlzQWN0aXZlKFBhZ2UqIHBhZ2UpCit7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KEJhdHRlcnlDb250cm9sbGVyOjpmcm9tKHBh
Z2UpKTsKK30KKwordm9pZCBwcm92aWRlQmF0dGVyeVRvKFBhZ2UqIHBhZ2UsIEJhdHRlcnlDbGll
bnQqIGNsaWVudCkKK3sKKyAgICBTdXBwbGVtZW50PFBhZ2U+Ojpwcm92aWRlVG8ocGFnZSwgQmF0
dGVyeUNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKCksIEJhdHRlcnlDb250cm9sbGVyOjpjcmVh
dGUoY2xpZW50KSk7Cit9CisKK30KKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkNzc5YQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5oCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0ZXJ5Q29udHJvbGxlcl9oCisjZGVmaW5lIEJh
dHRlcnlDb250cm9sbGVyX2gKKworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworI2luY2x1
ZGUgIkJhdHRlcnlNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEJhdHRlcnlDbGllbnQ7CisKK2NsYXNzIEJhdHRlcnlDb250cm9sbGVy
IDogcHVibGljIFN1cHBsZW1lbnQ8UGFnZT4geworcHVibGljOgorICAgIH5CYXR0ZXJ5Q29udHJv
bGxlcigpOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8QmF0dGVyeUNvbnRyb2xsZXI+IGNyZWF0
ZShCYXR0ZXJ5Q2xpZW50Kik7CisKKyAgICB2b2lkIGFkZExpc3RlbmVyKEJhdHRlcnlNYW5hZ2Vy
Kik7CisgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihCYXR0ZXJ5TWFuYWdlciopOworICAgIHZvaWQg
ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPik7CisKKyAgICBCYXR0ZXJ5Q2xpZW50KiBjbGllbnQoKSBj
b25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorCisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0aWMgQmF0dGVyeUNvbnRyb2xsZXIqIGZyb20o
UGFnZSogcGFnZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmF0dGVyeUNvbnRyb2xsZXIqPihTdXBw
bGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1cHBsZW1lbnROYW1lKCkpKTsgfQorICAgIHN0YXRp
YyBib29sIGlzQWN0aXZlKFBhZ2UqKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFZlY3RvcjxC
YXR0ZXJ5TWFuYWdlcio+IExpc3RlbmVyVmVjdG9yOworCisgICAgZXhwbGljaXQgQmF0dGVyeUNv
bnRyb2xsZXIoQmF0dGVyeUNsaWVudCopOworCisgICAgQmF0dGVyeUNsaWVudCogbV9jbGllbnQ7
CisgICAgTGlzdGVuZXJWZWN0b3IgbV9saXN0ZW5lcnM7Cit9OworCit9CisKKyNlbmRpZiAvLyBC
QVRURVJZX1NUQVRVUworI2VuZGlmIC8vIEJhdHRlcnlDb250cm9sbGVyX2gKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4ZDEzMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHAKQEAgLTAsMCAr
MSwxMDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlNYW5hZ2Vy
LmgiCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5Q29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXMuaCIKKyNpbmNsdWRlICJFdmVudC5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisjaW5jbHVkZSA8
bGltaXRzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8QmF0dGVyeU1hbmFn
ZXI+IEJhdHRlcnlNYW5hZ2VyOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgTmF2aWdhdG9yKiBuYXZpZ2F0b3IpCit7CisgICAgUmVmUHRyPEJhdHRlcnlNYW5hZ2VyPiBi
YXR0ZXJ5TWFuYWdlcihhZG9wdFJlZihuZXcgQmF0dGVyeU1hbmFnZXIoY29udGV4dCwgbmF2aWdh
dG9yKSkpOworICAgIGJhdHRlcnlNYW5hZ2VyLT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1
cm4gYmF0dGVyeU1hbmFnZXIucmVsZWFzZSgpOworfQorCitCYXR0ZXJ5TWFuYWdlcjo6fkJhdHRl
cnlNYW5hZ2VyKCkKK3sKK30KKworQmF0dGVyeU1hbmFnZXI6OkJhdHRlcnlNYW5hZ2VyKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE5hdmlnYXRvciogbmF2aWdhdG9yKQorICAgIDog
QWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAgLCBtX2JhdHRlcnlDb250cm9sbGVy
KEJhdHRlcnlDb250cm9sbGVyOjpmcm9tKG5hdmlnYXRvci0+ZnJhbWUoKS0+cGFnZSgpKSkKKyAg
ICAsIG1fYmF0dGVyeVN0YXR1cygwKQoreworICAgIG1fYmF0dGVyeUNvbnRyb2xsZXItPmFkZExp
c3RlbmVyKHRoaXMpOworfQorCitib29sIEJhdHRlcnlNYW5hZ2VyOjpjaGFyZ2luZygpCit7Cisg
ICAgcmV0dXJuIG1fYmF0dGVyeVN0YXR1cy0+Y2hhcmdpbmcoKTsKK30KKworZG91YmxlIEJhdHRl
cnlNYW5hZ2VyOjpjaGFyZ2luZ1RpbWUoKQoreworICAgIGlmICghbV9iYXR0ZXJ5U3RhdHVzLT5j
aGFyZ2luZygpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpOworCisgICAgcmV0dXJuIG1fYmF0dGVyeVN0YXR1cy0+Y2hhcmdpbmdUaW1lKCk7
Cit9CisKK2RvdWJsZSBCYXR0ZXJ5TWFuYWdlcjo6ZGlzY2hhcmdpbmdUaW1lKCkKK3sKKyAgICBp
ZiAobV9iYXR0ZXJ5U3RhdHVzLT5jaGFyZ2luZygpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworCisgICAgcmV0dXJuIG1fYmF0dGVyeVN0
YXR1cy0+ZGlzY2hhcmdpbmdUaW1lKCk7Cit9CisKK2RvdWJsZSBCYXR0ZXJ5TWFuYWdlcjo6bGV2
ZWwoKQoreworICAgIHJldHVybiBtX2JhdHRlcnlTdGF0dXMtPmxldmVsKCk7Cit9CisKK3ZvaWQg
QmF0dGVyeU1hbmFnZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQsIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YXR1cykKK3sKKyAgICBt
X2JhdHRlcnlTdGF0dXMgPSBiYXR0ZXJ5U3RhdHVzOworICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQp
OworfQorCit2b2lkIEJhdHRlcnlNYW5hZ2VyOjpzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24p
Cit7CisgICAgaWYgKG1fYmF0dGVyeUNvbnRyb2xsZXIpCisgICAgICAgIG1fYmF0dGVyeUNvbnRy
b2xsZXItPnJlbW92ZUxpc3RlbmVyKHRoaXMpOworfQorCit2b2lkIEJhdHRlcnlNYW5hZ2VyOjpy
ZXN1bWUoKQoreworICAgIGlmIChtX2JhdHRlcnlDb250cm9sbGVyKQorICAgICAgICBtX2JhdHRl
cnlDb250cm9sbGVyLT5hZGRMaXN0ZW5lcih0aGlzKTsKK30KKwordm9pZCBCYXR0ZXJ5TWFuYWdl
cjo6c3RvcCgpCit7CisgICAgaWYgKG1fYmF0dGVyeUNvbnRyb2xsZXIpCisgICAgICAgIG1fYmF0
dGVyeUNvbnRyb2xsZXItPnJlbW92ZUxpc3RlbmVyKHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjc5NzhkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaApAQCAtMCwwICsxLDg2IEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgQmF0dGVyeU1hbmFnZXJfaAorI2RlZmluZSBCYXR0ZXJ5TWFuYWdlcl9oCisKKyNpZiBF
TkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNp
bmNsdWRlICJCYXR0ZXJ5U3RhdHVzLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5Q29udHJvbGxlcjsKK2NsYXNzIE5hdmln
YXRvcjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIEJhdHRlcnlNYW5h
Z2VyIDogcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIFJlZkNvdW50ZWQ8QmF0dGVyeU1h
bmFnZXI+LCBwdWJsaWMgRXZlbnRUYXJnZXQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkJhdHRl
cnlNYW5hZ2VyKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmF0dGVyeU1hbmFnZXI+IGNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTmF2aWdhdG9yKik7CisKKyAgICAvLyBFdmVudFRh
cmdldCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGNvbnN0IFdURjo6QXRvbWljU3RyaW5n
JiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgeyByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZv
ckJhdHRlcnlNYW5hZ2VyOyB9CisgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KKworICAgIGJvb2wgY2hhcmdpbmcoKTsKKyAgICBk
b3VibGUgY2hhcmdpbmdUaW1lKCk7CisgICAgZG91YmxlIGRpc2NoYXJnaW5nVGltZSgpOworICAg
IGRvdWJsZSBsZXZlbCgpOworCisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihj
aGFyZ2luZ2NoYW5nZSk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihjaGFy
Z2luZ3RpbWVjaGFuZ2UpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZGlz
Y2hhcmdpbmd0aW1lY2hhbmdlKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KGxldmVsY2hhbmdlKTsKKworICAgIHZvaWQgZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhQYXNzUmVm
UHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPik7CisgICAgdm9pZCBiYXR0ZXJ5
Q29udHJvbGxlckRlc3Ryb3llZCgpIHsgbV9iYXR0ZXJ5Q29udHJvbGxlciA9IDA7IH0KKworICAg
IHVzaW5nIFJlZkNvdW50ZWQ8QmF0dGVyeU1hbmFnZXI+OjpyZWY7CisgICAgdXNpbmcgUmVmQ291
bnRlZDxCYXR0ZXJ5TWFuYWdlcj46OmRlcmVmOworCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0IGlt
cGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24p
OworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0
YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorICAgIHZpcnR1YWwgRXZlbnRUYXJn
ZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdldERh
dGE7IH0KKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5TWFuYWdlcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgTmF2aWdhdG9yKik7CisKKyAgICAvLyBFdmVudFRhcmdldCBpbXBsZW1lbnRhdGlvbi4K
KyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgdmlydHVh
bCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KKworICAgIEJhdHRlcnlDb250
cm9sbGVyKiBtX2JhdHRlcnlDb250cm9sbGVyOworICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50
VGFyZ2V0RGF0YTsKKyAgICBSZWZQdHI8QmF0dGVyeVN0YXR1cz4gbV9iYXR0ZXJ5U3RhdHVzOwor
fTsKKworfQorCisjZW5kaWYgLy8gQkFUVEVSWV9TVEFUVVMKKyNlbmRpZiAvLyBCYXR0ZXJ5TWFu
YWdlcl9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0
ZXJ5TWFuYWdlci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1h
bmFnZXIuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NTJkZjMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1h
bmFnZXIuaWRsCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICAvLyBo
dHRwOi8vZGV2LnczLm9yZy8yMDA5L2RhcC9zeXN0ZW0taW5mby9iYXR0ZXJ5LXN0YXR1cy5odG1s
CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9QkFUVEVSWV9TVEFUVVMsCisg
ICAgICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICAgICAgRXZlbnRUYXJnZXQKKyAgICAgXSBCYXR0
ZXJ5TWFuYWdlciB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGNoYXJnaW5n
OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIGNoYXJnaW5nVGltZTsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWU7CisgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgbGV2ZWw7CisKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb25jaGFyZ2luZ2NoYW5nZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25jaGFyZ2luZ3RpbWVjaGFuZ2U7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVy
IG9uZGlzY2hhcmdpbmd0aW1lY2hhbmdlOworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5l
ciBvbmxldmVsY2hhbmdlOworCisgICAgICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQorICAg
ICAgICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOwor
ICAgICAgICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBib29sZWFuIHVz
ZUNhcHR1cmUpOworICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQor
ICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKKyAgICB9OworCit9CisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5U3RhdHVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5U3RhdHVzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGY1MzBiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuY3BwCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlTdGF0dXMu
aCIKKworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUgPGxpbWl0cz4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IEJhdHRlcnlT
dGF0dXM6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCYXR0ZXJ5U3RhdHVz
KTsKK30KKworUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBCYXR0ZXJ5U3RhdHVzOjpjcmVhdGUo
Ym9vbCBjaGFyZ2luZywgZG91YmxlIGNoYXJnaW5nVGltZSwgZG91YmxlIGRpc2NoYXJnaW5nVGlt
ZSwgZG91YmxlIGxldmVsKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmF0dGVyeVN0YXR1
cyhjaGFyZ2luZywgY2hhcmdpbmdUaW1lLCBkaXNjaGFyZ2luZ1RpbWUsIGxldmVsKSk7Cit9CisK
K0JhdHRlcnlTdGF0dXM6OkJhdHRlcnlTdGF0dXMoKQorICAgIDogbV9jaGFyZ2luZyh0cnVlKQor
ICAgICwgbV9jaGFyZ2luZ1RpbWUoMCkKKyAgICAsIG1fZGlzY2hhcmdpbmdUaW1lKHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkKKyAgICAsIG1fbGV2ZWwoMSkKK3sKK30K
KworQmF0dGVyeVN0YXR1czo6QmF0dGVyeVN0YXR1cyhib29sIGNoYXJnaW5nLCBkb3VibGUgY2hh
cmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2ZWwpCisgICAgOiBt
X2NoYXJnaW5nKGNoYXJnaW5nKQorICAgICwgbV9jaGFyZ2luZ1RpbWUoY2hhcmdpbmdUaW1lKQor
ICAgICwgbV9kaXNjaGFyZ2luZ1RpbWUoZGlzY2hhcmdpbmdUaW1lKQorICAgICwgbV9sZXZlbChs
ZXZlbCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQkFUVEVS
WV9TVEFUVVMKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0Jh
dHRlcnlTdGF0dXMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5U3Rh
dHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0NTFhYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5U3RhdHVz
LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBF
bGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEJhdHRlcnlTdGF0dXNfaAorI2RlZmluZSBC
YXR0ZXJ5U3RhdHVzX2gKKworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5U3RhdHVzIDogcHVibGljIFJlZkNvdW50ZWQ8
QmF0dGVyeVN0YXR1cz4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJhdHRlcnlT
dGF0dXM+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGNy
ZWF0ZShib29sIGNoYXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdp
bmdUaW1lLCBkb3VibGUgbGV2ZWwpOworCisgICAgYm9vbCBjaGFyZ2luZygpIGNvbnN0IHsgcmV0
dXJuIG1fY2hhcmdpbmc7IH0KKyAgICBkb3VibGUgY2hhcmdpbmdUaW1lKCkgY29uc3QgIHsgcmV0
dXJuIG1fY2hhcmdpbmdUaW1lOyB9CisgICAgZG91YmxlIGRpc2NoYXJnaW5nVGltZSgpIGNvbnN0
ICB7IHJldHVybiBtX2Rpc2NoYXJnaW5nVGltZTsgfQorICAgIGRvdWJsZSBsZXZlbCgpIGNvbnN0
ICB7IHJldHVybiBtX2xldmVsOyB9CisKK3ByaXZhdGU6CisgICAgQmF0dGVyeVN0YXR1cygpOwor
ICAgIEJhdHRlcnlTdGF0dXMoYm9vbCBjaGFyZ2luZywgZG91YmxlIGNoYXJnaW5nVGltZSwgZG91
YmxlIGRpc2NoYXJnaW5nVGltZSwgZG91YmxlIGxldmVsKTsKKworICAgIGJvb2wgbV9jaGFyZ2lu
ZzsKKyAgICBkb3VibGUgbV9jaGFyZ2luZ1RpbWU7CisgICAgZG91YmxlIG1fZGlzY2hhcmdpbmdU
aW1lOworICAgIGRvdWJsZSBtX2xldmVsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gQkFUVEVSWV9TVEFUVVMKKyNlbmRpZiAvLyBCYXR0ZXJ5U3RhdHVzX2gKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRl
cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNjcyNDgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVy
eS5jcHAKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TmF2aWdhdG9yQmF0dGVyeS5oIgorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5j
bHVkZSAiQmF0dGVyeUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJCYXR0ZXJ5TWFuYWdlci5oIgor
I2luY2x1ZGUgIk5hdmlnYXRvci5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXZpZ2F0b3JCYXR0ZXJ5OjpOYXZpZ2F0b3JC
YXR0ZXJ5KCkKK3sKK30KKworTmF2aWdhdG9yQmF0dGVyeTo6fk5hdmlnYXRvckJhdHRlcnkoKQor
eworfQorCitCYXR0ZXJ5TWFuYWdlciogTmF2aWdhdG9yQmF0dGVyeTo6d2Via2l0QmF0dGVyeShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBOYXZpZ2F0b3IqIG5hdmlnYXRvcikKK3sK
KyAgICBOYXZpZ2F0b3JCYXR0ZXJ5KiBuYXZpZ2F0b3JCYXR0ZXJ5ID0gTmF2aWdhdG9yQmF0dGVy
eTo6ZnJvbShuYXZpZ2F0b3IpOworICAgIGlmICghbmF2aWdhdG9yQmF0dGVyeS0+bV9iYXR0ZXJ5
TWFuYWdlcikKKyAgICAgICAgbmF2aWdhdG9yQmF0dGVyeS0+bV9iYXR0ZXJ5TWFuYWdlciA9IEJh
dHRlcnlNYW5hZ2VyOjpjcmVhdGUoY29udGV4dCwgbmF2aWdhdG9yKTsKKyAgICByZXR1cm4gbmF2
aWdhdG9yQmF0dGVyeS0+bV9iYXR0ZXJ5TWFuYWdlci5nZXQoKTsKK30KKworTmF2aWdhdG9yQmF0
dGVyeSogTmF2aWdhdG9yQmF0dGVyeTo6ZnJvbShOYXZpZ2F0b3IqIG5hdmlnYXRvcikKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmFtZSwgKCJOYXZpZ2F0b3JCYXR0
ZXJ5IikpOworICAgIE5hdmlnYXRvckJhdHRlcnkqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxO
YXZpZ2F0b3JCYXR0ZXJ5Kj4oU3VwcGxlbWVudDxOYXZpZ2F0b3I+Ojpmcm9tKG5hdmlnYXRvciwg
bmFtZSkpOworICAgIGlmICghc3VwcGxlbWVudCkgeworICAgICAgICBzdXBwbGVtZW50ID0gbmV3
IE5hdmlnYXRvckJhdHRlcnkoKTsKKyAgICAgICAgcHJvdmlkZVRvKG5hdmlnYXRvciwgbmFtZSwg
YWRvcHRQdHIoc3VwcGxlbWVudCkpOworICAgIH0KKyAgICByZXR1cm4gc3VwcGxlbWVudDsKK30K
KworQmF0dGVyeU1hbmFnZXIqIE5hdmlnYXRvckJhdHRlcnk6OmJhdHRlcnlNYW5hZ2VyKCkKK3sK
KyAgICByZXR1cm4gbV9iYXR0ZXJ5TWFuYWdlci5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYWU5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0dGVyeS5oCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBOYXZpZ2F0b3JCYXR0ZXJ5X2gKKyNkZWZpbmUgTmF2aWdhdG9y
QmF0dGVyeV9oCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJTdXBw
bGVtZW50YWJsZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJhdHRlcnlNYW5h
Z2VyOworY2xhc3MgTmF2aWdhdG9yOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKwor
Y2xhc3MgTmF2aWdhdG9yQmF0dGVyeSA6IHB1YmxpYyBTdXBwbGVtZW50PE5hdmlnYXRvcj4gewor
cHVibGljOgorICAgIHZpcnR1YWwgfk5hdmlnYXRvckJhdHRlcnkoKTsKKworICAgIHN0YXRpYyBO
YXZpZ2F0b3JCYXR0ZXJ5KiBmcm9tKE5hdmlnYXRvciopOworCisgICAgc3RhdGljIEJhdHRlcnlN
YW5hZ2VyKiB3ZWJraXRCYXR0ZXJ5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBOYXZpZ2F0b3Iq
KTsKKyAgICBCYXR0ZXJ5TWFuYWdlciogYmF0dGVyeU1hbmFnZXIoKTsKKworIHByaXZhdGU6Cisg
ICAgTmF2aWdhdG9yQmF0dGVyeSgpOworCisgICAgUmVmUHRyPEJhdHRlcnlNYW5hZ2VyPiBtX2Jh
dHRlcnlNYW5hZ2VyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjZW5kaWYgLy8gTmF2aWdhdG9yQmF0dGVyeV9oCisK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJh
dHRlcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRl
cnkuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZGI3ODMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvTmF2aWdhdG9yQmF0
dGVyeS5pZGwKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ft
c3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCittb2R1bGUgd2luZG93IHsKKworICAgIGludGVy
ZmFjZSBbCisgICAgICAgIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCisgICAgICAg
IENvbmRpdGlvbmFsPUJBVFRFUllfU1RBVFVTLAorICAgICAgICBTdXBwbGVtZW50YWw9TmF2aWdh
dG9yCisgICAgXSBOYXZpZ2F0b3JCYXR0ZXJ5IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IEJhdHRlcnlNYW5hZ2VyIHdlYmtpdEJhdHRlcnk7CisgICAgfTsKKworfQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50TmFtZXMuaAppbmRleCBkYmZjNGY5Li42ZTIyYjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnROYW1lcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVz
LmgKQEAgLTQxLDYgKzQxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIG1hY3JvKGJsdXIp
IFwKICAgICBtYWNybyhjYWNoZWQpIFwKICAgICBtYWNybyhjaGFuZ2UpIFwKKyAgICBtYWNybyhj
aGFyZ2luZ2NoYW5nZSkgXAorICAgIG1hY3JvKGNoYXJnaW5ndGltZWNoYW5nZSkgXAogICAgIG1h
Y3JvKGNoZWNraW5nKSBcCiAgICAgbWFjcm8oY2xpY2spIFwKICAgICBtYWNybyhjbG9zZSkgXApA
QCAtNTUsNiArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgbWFjcm8oZGJsY2xpY2sp
IFwKICAgICBtYWNybyhkZXZpY2Vtb3Rpb24pIFwKICAgICBtYWNybyhkZXZpY2VvcmllbnRhdGlv
bikgXAorICAgIG1hY3JvKGRpc2NoYXJnaW5ndGltZWNoYW5nZSkgXAogICAgIG1hY3JvKGRpc3Bs
YXkpIFwKICAgICBtYWNybyhkb3dubG9hZGluZykgXAogICAgIG1hY3JvKGRyYWcpIFwKQEAgLTc0
LDYgKzc3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIG1hY3JvKGtleWRvd24pIFwKICAg
ICBtYWNybyhrZXlwcmVzcykgXAogICAgIG1hY3JvKGtleXVwKSBcCisgICAgbWFjcm8obGV2ZWxj
aGFuZ2UpIFwKICAgICBtYWNybyhsb2FkKSBcCiAgICAgbWFjcm8obG9hZHN0YXJ0KSBcCiAgICAg
bWFjcm8obWVzc2FnZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFy
Z2V0RmFjdG9yeS5pbiBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldEZhY3RvcnkuaW4K
aW5kZXggYzhkMjc2ZS4uMjEwOTc3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0RmFjdG9yeS5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXRG
YWN0b3J5LmluCkBAIC0xLDYgKzEsNyBAQAogbmFtZXNwYWNlPSJFdmVudFRhcmdldCIKIAogQXVk
aW9Db250ZXh0IGNvbmRpdGlvbmFsPVdFQl9BVURJTworQmF0dGVyeU1hbmFnZXIgY29uZGl0aW9u
YWw9QkFUVEVSWV9TVEFUVVMKIERlZGljYXRlZFdvcmtlckNvbnRleHQgY29uZGl0aW9uYWw9V09S
S0VSUwogRE9NQXBwbGljYXRpb25DYWNoZQogRE9NV2luZG93CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKaW5kZXggYzI5MzY4Ni4uNjIyYjY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcApAQCAtNjcsNiArNjcsMTAgQEAKICNpbmNsdWRlICJDb2xvckNob29zZXIu
aCIKICNlbmRpZgogCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorI2luY2x1ZGUgIkJhdHRl
cnlDb250cm9sbGVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
Ym9vbCBtYXJrZXJUeXBlc0Zyb20oY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZXMmIHJlc3VsdCkKQEAgLTcxNCw0ICs3MTgsMjIgQEAgdm9pZCBJbnRl
cm5hbHM6OmVtaXRJbnNwZWN0b3JEaWRDYW5jZWxGcmFtZSgpCiAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRDYW5jZWxGcmFtZShmcmFtZSgpLT5wYWdlKCkpOwogfQogCit2b2lkIElu
dGVybmFsczo6c2V0QmF0dGVyeVN0YXR1cyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmlu
ZyYgZXZlbnRUeXBlLCBib29sIGNoYXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUg
ZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2ZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5wYWdlKCkpIHsKKyAgICAgICAgZWMgPSBJTlZB
TElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoQkFU
VEVSWV9TVEFUVVMpCisgICAgQmF0dGVyeUNvbnRyb2xsZXI6OmZyb20oZG9jdW1lbnQtPnBhZ2Uo
KSktPmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoZXZlbnRUeXBlLCBCYXR0ZXJ5U3RhdHVzOjpjcmVh
dGUoY2hhcmdpbmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZlbCkpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oZXZlbnRUeXBlKTsKKyAgICBVTlVTRURfUEFSQU0oY2hhcmdp
bmcpOworICAgIFVOVVNFRF9QQVJBTShjaGFyZ2luZ1RpbWUpOworICAgIFVOVVNFRF9QQVJBTShk
aXNjaGFyZ2luZ1RpbWUpOworICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7CisjZW5kaWYKK30KKwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggNjdjMDkyMi4uOTcxNmEzYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0xMzYsNiArMTM2LDggQEAgcHVibGljOgog
CiAgICAgSW50ZXJuYWxTZXR0aW5ncyogc2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3NldHRp
bmdzLmdldCgpOyB9CiAKKyAgICB2b2lkIHNldEJhdHRlcnlTdGF0dXMoRG9jdW1lbnQqLCBjb25z
dCBTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjaGFyZ2luZywgZG91YmxlIGNoYXJnaW5nVGltZSwg
ZG91YmxlIGRpc2NoYXJnaW5nVGltZSwgZG91YmxlIGxldmVsLCBFeGNlcHRpb25Db2RlJik7CisK
IHByaXZhdGU6CiAgICAgZXhwbGljaXQgSW50ZXJuYWxzKERvY3VtZW50Kik7CiAgICAgRG9jdW1l
bnRNYXJrZXIqIG1hcmtlckF0KE5vZGUqLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2ln
bmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5p
ZGwKaW5kZXggZDk4NTZhZC4uNzJiZjkwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmlkbApAQCAtMTEwLDYgKzExMCwxMCBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgdm9pZCBl
bWl0SW5zcGVjdG9yRGlkQ2FuY2VsRnJhbWUoKTsKIAogICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgSW50ZXJuYWxTZXR0aW5ncyBzZXR0aW5nczsKKworI2lmIGRlZmluZWQoRU5BQkxFX0JBVFRF
UllfU1RBVFVTKSAmJiBFTkFCTEVfQkFUVEVSWV9TVEFUVVMKKyAgICAgICAgdm9pZCBzZXRCYXR0
ZXJ5U3RhdHVzKGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBET01TdHJpbmcgZXZlbnRUeXBlLCBp
biBib29sZWFuIGNoYXJnaW5nLCBpbiBkb3VibGUgY2hhcmdpbmdUaW1lLCBpbiBkb3VibGUgZGlz
Y2hhcmdpbmdUaW1lLCBpbiBkb3VibGUgbGV2ZWwpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyNl
bmRpZgogICAgIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNGYxY2Y1OC4uNzM2ZmMwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0xNSAgS2lob25nIEt3b24gIDxraWhvbmcua3dvbkBz
YW1zdW5nLmNvbT4KKworICAgICAgICBTdXBwb3J0IGZvciBCYXR0ZXJ5IFN0YXR1cyBBUEkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAg
ICAgICAgQWRkIGluY2x1ZGUgZGlyZWN0b3J5IGFuZCBmaWxlLgorICAgICAgICBodHRwOi8vd3d3
LnczLm9yZy9UUi9iYXR0ZXJ5LXN0YXR1cy8KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorCiAyMDEyLTAzLTExICBU
aW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgaG93
IHRoZSBXZWIgSW5zcGVjdG9yIHJlc291cmNlcyBhcmUgbG9hZGVkLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwu
Y21ha2UKaW5kZXggMWRlYmUzNi4uMTU4NDEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCkBA
IC0xMjYsNiArMTI2LDEwIEBAIElGIChFTkFCTEVfVklCUkFUSU9OKQogICAgICkKIEVORElGICgp
CiAKK0lGIChFTkFCTEVfQkFUVEVSWV9TVEFUVVMpCisgICAgTElTVChBUFBFTkQgV2ViS2l0X0lO
Q0xVREVfRElSRUNUT1JJRVMgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9iYXR0ZXJ5KQorICAgIExJ
U1QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTIGVmbC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50
RWZsLmNwcCkKK0VORElGICgpCiAKIFNFVChXZWJLaXRfVEhFTUVfREVGSU5JVElPTiAiIikKIElG
IChFTkFCTEVfUFJPR1JFU1NfVEFHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDMwNjc3NWEuLjJjNDk1
ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0wMy0xNSAgS2lob25n
IEt3b24gIDxraWhvbmcua3dvbkBzYW1zdW5nLmNvbT4KKworICAgICAgICBTdXBwb3J0IGZvciBC
YXR0ZXJ5IFN0YXR1cyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgQWRkIEJhdHRlcnlDbGllbnRFZmwgY2xhc3MgaW1w
bGVtZW50YXRpb24gZm9yIHRoZSBsYXlvdXQgdGVzdHMgbm93LgorICAgICAgICBCYXR0ZXJ5Q2xp
ZW50RWZsIGNsYXNzIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZCBpbiB0aGlzIHBhdGNoLgorICAg
ICAgICAoSXQgd2lsbCBiZSBjb21wbGV0ZWQgYnkgb3RoZXIgcGF0Y2ggYXMgbmVjZXNzYXJ5IGlu
IHRoZSBFZmwgcG9ydC4pCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2JhdHRlcnktc3Rh
dHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpCYXR0ZXJ5Q2xpZW50
RWZsKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRFZmw6OnNldENvbnRyb2xsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6c3RhcnRVcGRhdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpzdG9wVXBkYXRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6c2V0QmF0dGVyeVN0YXR1cyk6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQmF0dGVyeUNsaWVudEVmbCk6CisgICAgICAgIChX
ZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjp+QmF0dGVyeUNsaWVudEVmbCk6CisgICAgICAgICog
ZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKF9Fd2tfVmlld19Qcml2YXRlX0RhdGEpOgorICAg
ICAgICAoX2V3a192aWV3X3ByaXZfbmV3KToKKwogMjAxMi0wMy0xMyAgSm9uIExlZSAgPGpvbmxl
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgU2VwYXJhdGUgTk9USUZJQ0FUSU9OUyBhbmQgTEVHQUNZ
X05PVElGSUNBVElPTlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBw
b3J0L0JhdHRlcnlDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBv
cnQvQmF0dGVyeUNsaWVudEVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uODhkYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVT
dXBwb3J0L0JhdHRlcnlDbGllbnRFZmwuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlDbGllbnRFZmwuaCIKKworI2lmIEVOQUJMRShC
QVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUgIkJhdHRlcnlDb250cm9sbGVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworQmF0dGVyeUNsaWVudEVmbDo6QmF0dGVyeUNsaWVudEVmbCgpCisg
ICAgOiBtX2NvbnRyb2xsZXIoMCkKK3sKK30KKwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpzZXRD
b250cm9sbGVyKEJhdHRlcnlDb250cm9sbGVyKiBjb250cm9sbGVyKQoreworICAgIG1fY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVudEVmbDo6c3RhcnRVcGRh
dGluZygpCit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IGZvciBnZXR0aW5nIGJh
dHRlcnkgc3RhdHVzIHRvIHRoZSBlZmwgcG9ydC4KK30KKwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZs
OjpzdG9wVXBkYXRpbmcoKQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBmb3Ig
Z2V0dGluZyBiYXR0ZXJ5IHN0YXR1cyB0byB0aGUgZWZsIHBvcnQKK30KKwordm9pZCBCYXR0ZXJ5
Q2xpZW50RWZsOjpiYXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3llZCgpCit7CisgICAgZGVsZXRlIHRo
aXM7Cit9CisKK3ZvaWQgQmF0dGVyeUNsaWVudEVmbDo6c2V0QmF0dGVyeVN0YXR1cyhjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5
U3RhdHVzKQoreworICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhldmVu
dFR5cGUsIGJhdHRlcnlTdGF0dXMpOworfQorCit9CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRV
UworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5
Q2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xp
ZW50RWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmNzFjOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0JhdHRlcnlD
bGllbnRFZmwuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBT
YW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQmF0dGVyeUNsaWVudEVmbF9o
CisjZGVmaW5lIEJhdHRlcnlDbGllbnRFZmxfaAorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVT
KQorCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJhdHRlcnlDb250cm9s
bGVyOworY2xhc3MgQmF0dGVyeVN0YXR1czsKKworY2xhc3MgQmF0dGVyeUNsaWVudEVmbCA6IHB1
YmxpYyBCYXR0ZXJ5Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBCYXR0ZXJ5Q2xpZW50RWZsKCk7Cisg
ICAgfkJhdHRlcnlDbGllbnRFZmwoKSB7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJv
bGxlcihCYXR0ZXJ5Q29udHJvbGxlciopOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5n
KCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpOworICAgIHZpcnR1YWwgdm9pZCBi
YXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3llZCgpOworCisgICAgdm9pZCBzZXRCYXR0ZXJ5U3RhdHVz
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+
KTsKKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5Q29udHJvbGxlciogbV9jb250cm9sbGVyOworfTsK
KworfQorCisjZW5kaWYgLy8gQkFUVEVSWV9TVEFUVVMKKyNlbmRpZiAvLyBCYXR0ZXJ5Q2xpZW50
RWZsX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5kZXggMTdhNmVhMC4uN2E1MmNh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCkBAIC03NCw2ICs3NCwxMCBAQAogI2lu
Y2x1ZGUgIlZpYnJhdGlvbkNsaWVudEVmbC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQkFUVEVS
WV9TVEFUVVMpCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudEVmbC5oIgorI2VuZGlmCisKIHN0YXRp
YyBjb25zdCBmbG9hdCB6b29tTWluaW11bSA9IDAuMDU7CiBzdGF0aWMgY29uc3QgZmxvYXQgem9v
bU1heGltdW0gPSA0LjA7CiAKQEAgLTYxOCw2ICs2MjIsMTAgQEAgc3RhdGljIEV3a19WaWV3X1By
aXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSkKICAgICBXZWJDb3JlOjpwcm92aWRlVmlicmF0aW9uVG8ocHJpdi0+cGFnZS5nZXQoKSwg
bmV3IFdlYkNvcmU6OlZpYnJhdGlvbkNsaWVudEVmbChzbWFydERhdGEtPnNlbGYpKTsKICNlbmRp
ZgogCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorICAgIFdlYkNvcmU6OnByb3ZpZGVCYXR0
ZXJ5VG8ocHJpdi0+cGFnZS5nZXQoKSwgbmV3IFdlYkNvcmU6OkJhdHRlcnlDbGllbnRFZmwpOwor
I2VuZGlmCisKICAgICBwcml2LT5wYWdlU2V0dGluZ3MgPSBwcml2LT5wYWdlLT5zZXR0aW5ncygp
OwogCiAgICAgcHJpdi0+dmlld3BvcnRBcmd1bWVudHMud2lkdGggPSBXZWJDb3JlOjpWaWV3cG9y
dEFyZ3VtZW50czo6VmFsdWVBdXRvOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNF
ZmwuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQppbmRleCBiNzNjZmI2Li40
ZWUyNDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgYi9T
b3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQpAQCAtNjMsNiArNjMsNyBAQCBTRVQoVEhFTUVf
QklOQVJZX0RJUiAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdC9lZmwvRGVmYXVsdFRoZW1lKQog
CiBTRVQoVkVSU0lPTl9TQ1JJUFQgIi1XbCwtLXZlcnNpb24tc2NyaXB0LCR7Q01BS0VfTU9EVUxF
X1BBVEh9L2VmbHN5bWJvbHMuZmlsdGVyIikKIAorV0VCS0lUX0ZFQVRVUkUoRU5BQkxFX0JBVFRF
UllfU1RBVFVTICJFbmFibGUgYmF0dGVyeSBzdGF0dXMgYXBpIiBERUZBVUxUIE9OKQogV0VCS0lU
X0ZFQVRVUkUoRU5BQkxFX0JMT0IgIkVuYWJsZSBibG9iIHNsaWNlIiBERUZBVUxUIE9GRikKIFdF
QktJVF9GRUFUVVJFKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORyAiRW5hYmxlIGNoYW5uZWwgbWVz
c2FnaW5nIiBERUZBVUxUIE9OKQogV0VCS0lUX0ZFQVRVUkUoRU5BQkxFX0RBVEFMSVNUICJFbmFi
bGUgZGF0YWxpc3QiIERFRkFVTFQgT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Vjb25maWcu
aC5jbWFrZSBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCmluZGV4IGNlMjE2YWIuLjgyY2Fm
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCisrKyBiL1NvdXJjZS9j
bWFrZWNvbmZpZy5oLmNtYWtlCkBAIC02LDYgKzYsNyBAQAogCiAKICNjbWFrZWRlZmluZTAxIEVO
QUJMRV9BU19JTUFHRQorI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0JBVFRFUllfU1RBVFVTCiAjY21h
a2VkZWZpbmUwMSBFTkFCTEVfQkxPQgogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX0NIQU5ORUxfTUVT
U0FHSU5HCiAjY21ha2VkZWZpbmUwMSBFTkFCTEVfREFUQUxJU1QKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0ZTljMDZlLi5iMDQ4MjBiIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMTItMDMtMTUgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+
CisKKyAgICAgICAgU3VwcG9ydCBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjY5OAorCisgICAgICAgIEVuYWJs
ZSBCYXR0ZXJ5IFN0YXR1cyBBUEkuCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2JhdHRl
cnktc3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6CisKIDIwMTItMDMtMTQgIFRpbSBIb3J0b24gIDx0
aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgTlJXVCBzaG91bGQgcmVzcGVjdCAt
LWFkZGl0aW9uYWwtcGxhdGZvcm0tZGlyZWN0b3J5J3MgU2tpcHBlZCBsaXN0CmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0
CmluZGV4IGMyNzZmNzUuLjJmNjY4YTMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0CisrKyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CkBAIC03MCw2ICs3MCw3IEBA
IG15ICgKICAgICAkdGhyZWVEUmVuZGVyaW5nU3VwcG9ydCwKICAgICAkYWNjZWxlcmF0ZWQyZENh
bnZhc1N1cHBvcnQsCiAgICAgJGFuaW1hdGlvbkFQSVN1cHBvcnQsCisgICAgJGJhdHRlcnlzdGF0
dXNBUElTdXBwb3J0LAogICAgICRibG9iU3VwcG9ydCwKICAgICAkY2hhbm5lbE1lc3NhZ2luZ1N1
cHBvcnQsCiAgICAgJGNvdmVyYWdlU3VwcG9ydCwKQEAgLTE2MCw2ICsxNjEsOSBAQCBteSBAZmVh
dHVyZXMgPSAoCiAgICAgeyBvcHRpb24gPT4gImFuaW1hdGlvbi1hcGkiLCBkZXNjID0+ICJUb2dn
bGUgYW5pbWF0aW9uIEFQSSBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0FOSU1B
VElPTl9BUEkiLCBkZWZhdWx0ID0+IGlzQmxhY2tCZXJyeSgpLCB2YWx1ZSA9PiBcJGFuaW1hdGlv
bkFQSVN1cHBvcnQgfSwKIAorICAgIHsgb3B0aW9uID0+ICJiYXR0ZXJ5LXN0YXR1cy1hcGkiLCBk
ZXNjID0+ICJUb2dnbGUgYmF0dGVyeSBzdGF0dXMgQVBJIHN1cHBvcnQiLAorICAgICAgZGVmaW5l
ID0+ICJFTkFCTEVfQkFUVEVSWV9TVEFUVVMiLCBkZWZhdWx0ID0+IGlzRWZsKCksIHZhbHVlID0+
IFwkYmF0dGVyeXN0YXR1c0FQSVN1cHBvcnQgfSwKKwogICAgIHsgb3B0aW9uID0+ICJibG9iIiwg
ZGVzYyA9PiAiVG9nZ2xlIEJsb2Igc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9C
TE9CIiwgZGVmYXVsdCA9PiAoaXNBcHBsZU1hY1dlYktpdCgpIHx8IGlzR3RrKCkgfHwgaXNDaHJv
bWl1bSgpIHx8IGlzQmxhY2tCZXJyeSgpKSwgdmFsdWUgPT4gXCRibG9iU3VwcG9ydCB9LAogCg==
</data>
<flag name="commit-queue"
          id="135756"
          type_id="3"
          status="+"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132203</attachid>
            <date>2012-03-15 23:03:57 -0700</date>
            <delta_ts>2012-03-22 11:38:49 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>battery07.patch</filename>
            <type>text/plain</type>
            <size>70309</size>
            <attacher name="Kihong Kwon">kihong.kwon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3Mzg3Y2RmLi44YWU2Mzcy
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTItMDMtMTUgIEtpaG9uZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgU3VwcG9ydCBmb3IgQmF0dGVyeSBTdGF0dXMgQVBJLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKworICAgICAgICBFbmFibGUgQkFU
VEVSWV9TVEFUVVMgZm9yIFdlYktpdC1FZmwuCisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RS
L2JhdHRlcnktc3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAg
ICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZToKKyAgICAgICAgKiBTb3VyY2Uv
Y21ha2Vjb25maWcuaC5jbWFrZToKKwogMjAxMi0wMy0xNSAgUGF0cmljayBHYW5zdGVyZXIgIDxw
YXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBbRUZMXSBNYWtlIHpsaWIgYSBnZW5lcmFsIGJ1
aWxkIHJlcXVpcmVtZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2Y4MjZiNS4uMjFhMWZhYiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDU3IEBACisyMDEyLTAzLTE1ICBLaWhvbmcgS3dvbiAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29t
PgorCisgICAgICAgIFN1cHBvcnQgZm9yIEJhdHRlcnkgU3RhdHVzIEFQSS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgQWRk
IG5ldyB0ZXN0IGNhc2VzIGZvciBCYXR0ZXJ5IFN0YXR1cyBBUEkuCisgICAgICAgIGh0dHA6Ly93
d3cudzMub3JnL1RSL2JhdHRlcnktc3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0g
QmFydGguCisKKyAgICAgICAgKiBiYXR0ZXJ5c3RhdHVzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxi
YWNrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYmF0dGVyeXN0YXR1cy9hZGQtbGlz
dGVuZXItZnJvbS1jYWxsYmFjay5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBiYXR0ZXJ5c3RhdHVz
L2Jhc2ljLWFsbC10eXBlcy1vZi1ldmVudHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBiYXR0ZXJ5c3RhdHVzL2Jhc2ljLWFsbC10eXBlcy1vZi1ldmVudHMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogYmF0dGVyeXN0YXR1cy9iYXNpYy1vcGVyYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBiYXR0ZXJ5c3RhdHVzL2Jhc2ljLW9wZXJhdGlvbi5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBiYXR0ZXJ5c3RhdHVzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24tZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBiYXR0ZXJ5c3RhdHVzL2V2ZW50LWFmdGVyLW5hdmlnYXRp
b24uaHRtbDogQWRkZWQuCisgICAgICAgICogYmF0dGVyeXN0YXR1cy9tdWx0aXBsZS1mcmFtZXMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBiYXR0ZXJ5c3RhdHVzL211bHRpcGxlLWZy
YW1lcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBiYXR0ZXJ5c3RhdHVzL3Jlc291cmNlcy9ldmVu
dC1hZnRlci1uYXZpZ2F0aW9uLW5ldy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBiYXR0ZXJ5c3Rh
dHVzL3NjcmlwdC10ZXN0cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5qczogQWRkZWQuCisg
ICAgICAgIChjaGVja0JhdHRlcnlTdGF0dXMpOgorICAgICAgICAoZmlyc3RMaXN0ZW5lcik6Cisg
ICAgICAgIChzZWNvbmRMaXN0ZW5lcik6CisgICAgICAgIChtYXliZUZpbmlzaFRlc3QpOgorICAg
ICAgICAqIGJhdHRlcnlzdGF0dXMvc2NyaXB0LXRlc3RzL2Jhc2ljLWFsbC10eXBlcy1vZi1ldmVu
dHMuanM6IEFkZGVkLgorICAgICAgICAoY2hlY2tCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKGJh
dHRlcnkpOgorICAgICAgICAqIGJhdHRlcnlzdGF0dXMvc2NyaXB0LXRlc3RzL2Jhc2ljLW9wZXJh
dGlvbi5qczogQWRkZWQuCisgICAgICAgICogYmF0dGVyeXN0YXR1cy9zY3JpcHQtdGVzdHMvZXZl
bnQtYWZ0ZXItbmF2aWdhdGlvbi5qczogQWRkZWQuCisgICAgICAgICogYmF0dGVyeXN0YXR1cy9z
Y3JpcHQtdGVzdHMvbXVsdGlwbGUtZnJhbWVzLmpzOiBBZGRlZC4KKyAgICAgICAgKGNoZWNrQmF0
dGVyeVN0YXR1cyk6CisgICAgICAgIChjaGVja0NoaWxkQmF0dGVyeVN0YXR1cyk6CisgICAgICAg
IChtYWluRnJhbWVMaXN0ZW5lcik6CisgICAgICAgIChjaGlsZEZyYW1lTGlzdGVuZXIpOgorICAg
ICAgICAobWF5YmVGaW5pc2hUZXN0KToKKyAgICAgICAgKiBiYXR0ZXJ5c3RhdHVzL3NjcmlwdC10
ZXN0cy91cGRhdGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKGNoZWNrQmF0dGVyeVN0YXR1cyk6Cisg
ICAgICAgIChzZXRCYXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKGZpcnN0TGlzdGVuZXIpOgorICAg
ICAgICAodXBkYXRlTGlzdGVuZXIpOgorICAgICAgICAqIGJhdHRlcnlzdGF0dXMvc2NyaXB0LXRl
c3RzL3dpbmRvdy1wcm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChoYXNPbkJhdHRlcnlQcm9w
ZXJ0eSk6CisgICAgICAgICogYmF0dGVyeXN0YXR1cy91cGRhdGVzLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogYmF0dGVyeXN0YXR1cy91cGRhdGVzLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGJhdHRlcnlzdGF0dXMvd2luZG93LXByb3BlcnR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogYmF0dGVyeXN0YXR1cy93aW5kb3ctcHJvcGVydHkuaHRtbDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorICAgICAgICAq
IHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6Cisg
ICAgICAgICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vd2luY2Fp
cm8vU2tpcHBlZDoKKwogMjAxMi0wMy0xNSAgTWF0dCBGYWxrZW5oYWdlbiAgPGZhbGtlbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgQ2hhbmdlIHBlci1zY3JpcHQgZm9udCB0ZXN0cyB0byB1c2Ug
SW50ZXJuYWxTZXR0aW5ncwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9h
ZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9iYXR0
ZXJ5c3RhdHVzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNrLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTY3NDU5Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwyMSBAQAorVGVzdHMgdGhhdCBhZGRpbmcgYSBuZXcgZXZlbnQg
bGlzdGVuZXIgZnJvbSBhIGNhbGxiYWNrIHdvcmtzIGFzIGV4cGVjdGVkLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIGNoYXJnaW5nCitQ
QVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIGNoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRp
c2NoYXJnaW5nVGltZSBpcyBkaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBs
ZXZlbAorUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIGNoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hh
cmdpbmdUaW1lIGlzIGNoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBp
cyBkaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBsZXZlbAorUEFTUyBiYXR0
ZXJ5LmNoYXJnaW5nIGlzIGNoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIGNo
YXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBkaXNjaGFyZ2luZ1Rp
bWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBsZXZlbAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2JhdHRl
cnlzdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suaHRtbCBiL0xheW91dFRlc3RzL2Jh
dHRlcnlzdGF0dXMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGIyMjkxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvYmF0dGVyeXN0YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5odG1sCkBAIC0w
LDAgKzEsOSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvYWRkLWxpc3RlbmVyLWZyb20tY2FsbGJhY2suanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9iYXR0ZXJ5
c3RhdHVzL2Jhc2ljLWFsbC10eXBlcy1vZi1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvYmF0dGVyeXN0YXR1cy9iYXNpYy1hbGwtdHlwZXMtb2YtZXZlbnRzLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWMzNzRmCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9iYXNpYy1hbGwtdHlwZXMtb2YtZXZlbnRz
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI5IEBACitUZXN0cyB0aGUgYmFzaWMgb3BlcmF0aW9u
IG9mIGFsbCBCYXR0ZXJ5U3RhdHVzIGV2ZW50cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK2NoYXJnaW5nY2hhbmdlIGV2ZW50IGlzIHJhaXNlZAorUEFTUyBiYXR0ZXJ5LmNoYXJn
aW5nIGlzIGNoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIGNoYXJnaW5nVGlt
ZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBkaXNjaGFyZ2luZ1RpbWUKK1BBU1Mg
YmF0dGVyeS5sZXZlbCBpcyBsZXZlbAorY2hhcmdpbmd0aW1lY2hhbmdlIGV2ZW50IGlzIHJhaXNl
ZAorUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIGNoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hhcmdp
bmdUaW1lIGlzIGNoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBk
aXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBsZXZlbAorZGlzY2hhcmdpbmd0
aW1lY2hhbmdlIGV2ZW50IGlzIHJhaXNlZAorUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIGNoYXJn
aW5nCitQQVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIGNoYXJnaW5nVGltZQorUEFTUyBiYXR0
ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBkaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZl
bCBpcyBsZXZlbAorbGV2ZWxjaGFuZ2UgZXZlbnQgaXMgcmFpc2VkCitQQVNTIGJhdHRlcnkuY2hh
cmdpbmcgaXMgY2hhcmdpbmcKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZ1RpbWUgaXMgY2hhcmdpbmdU
aW1lCitQQVNTIGJhdHRlcnkuZGlzY2hhcmdpbmdUaW1lIGlzIGRpc2NoYXJnaW5nVGltZQorUEFT
UyBiYXR0ZXJ5LmxldmVsIGlzIGxldmVsCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1
cy9iYXNpYy1hbGwtdHlwZXMtb2YtZXZlbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3Rh
dHVzL2Jhc2ljLWFsbC10eXBlcy1vZi1ldmVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43ZmVlNGUwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYmF0
dGVyeXN0YXR1cy9iYXNpYy1hbGwtdHlwZXMtb2YtZXZlbnRzLmh0bWwKQEAgLTAsMCArMSw5IEBA
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlw
dC10ZXN0cy9iYXNpYy1hbGwtdHlwZXMtb2YtZXZlbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9iYXNp
Yy1vcGVyYXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9iYXNp
Yy1vcGVyYXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQxM2M4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVz
L2Jhc2ljLW9wZXJhdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGVzdHMgdGhl
IGJhc2ljIG9wZXJhdGlvbiBvZiBCYXR0ZXJ5U3RhdHVzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIGNoYXJnaW5nCitQQVNTIGJhdHRl
cnkuY2hhcmdpbmdUaW1lIGlzIGNoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5n
VGltZSBpcyBkaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBsZXZlbAorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvYmFzaWMtb3BlcmF0aW9uLmh0bWwgYi9MYXlv
dXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL2Jhc2ljLW9wZXJhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZDQ0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9iYXR0ZXJ5c3RhdHVzL2Jhc2ljLW9wZXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsOSBAQAor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQt
dGVzdHMvYmFzaWMtb3BlcmF0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9ldmVudC1hZnRlci1uYXZp
Z2F0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvZXZlbnQtYWZ0
ZXItbmF2aWdhdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOGU2YmMzOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0
dXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACitU
ZXN0cyBmb3IgYSBjcmFzaCB3aGVyZSBhbiBldmVudCBpcyBmaXJlZCBhZnRlciB0aGUgcGFnZSBo
YXMgYmVlbiBuYXZpZ2F0ZWQgYXdheSB3aGVuIHRoZSBvcmlnaW5hbCBwYWdlIGlzIGluIHRoZSBw
YWdlIGNhY2hlLgorCitTVUNDRVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3Rh
dHVzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0
dXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjk2YjBjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5
c3RhdHVzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24uaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3Rz
L2V2ZW50LWFmdGVyLW5hdmlnYXRpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL211bHRpcGxlLWZyYW1l
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL211bHRpcGxlLWZyYW1l
cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMmNk
MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvbXVsdGlwbGUt
ZnJhbWVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUZXN0cyB1c2luZyBCYXR0ZXJ5
U3RhdHVzIGZyb20gbXVsdGlwbGUgZnJhbWVzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBiYXR0ZXJ5LmNoYXJnaW5nIGlzIGNoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hh
cmdpbmdUaW1lIGlzIGNoYXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBp
cyBkaXNjaGFyZ2luZ1RpbWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBsZXZlbAorUEFTUyBiYXR0
ZXJ5LmNoYXJnaW5nIGlzIGNoYXJnaW5nCitQQVNTIGJhdHRlcnkuY2hhcmdpbmdUaW1lIGlzIGNo
YXJnaW5nVGltZQorUEFTUyBiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZSBpcyBkaXNjaGFyZ2luZ1Rp
bWUKK1BBU1MgYmF0dGVyeS5sZXZlbCBpcyBsZXZlbAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2JhdHRl
cnlzdGF0dXMvbXVsdGlwbGUtZnJhbWVzLmh0bWwgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVz
L211bHRpcGxlLWZyYW1lcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjM4NmIwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL211
bHRpcGxlLWZyYW1lcy5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbXVsdGlwbGUtZnJhbWVz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvYmF0dGVyeXN0YXR1cy9yZXNvdXJjZXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi1uZXcu
aHRtbCBiL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvcmVzb3VyY2VzL2V2ZW50LWFmdGVyLW5h
dmlnYXRpb24tbmV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEz
MmI1YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvcmVzb3Vy
Y2VzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24tbmV3Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPGh0
bWw+CisgIDxoZWFkPgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIFRlc3RzIGZvciBhIGNyYXNo
IHdoZXJlIGFuIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHRoZSBwYWdlIGhhcyBiZWVuIG5hdmlnYXRl
ZAorICAgIGF3YXkgd2hlbiB0aGUgb3JpZ2luYWwgcGFnZSBpcyBpbiB0aGUgcGFnZSBjYWNoZS48
YnI+PGJyPgorICAgIFNVQ0NFU1MKKyAgICA8c2NyaXB0PgorICAgICAgICBpbnRlcm5hbHMuc2V0
QmF0dGVyeVN0YXR1cyhkb2N1bWVudCwgJ2NoYXJnaW5nY2hhbmdlJywgdHJ1ZSwgMzAwMCwgTnVt
YmVyLlBPU0lUSVZFX0lORklOSVRZLCAwLjUpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7CisgICAgPC9zY3JpcHQ+CisgIDwvYm9keT4KKzwvaHRtbD4KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3Rh
dHVzL3NjcmlwdC10ZXN0cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5qcyBiL0xheW91dFRl
c3RzL2JhdHRlcnlzdGF0dXMvc2NyaXB0LXRlc3RzL2FkZC1saXN0ZW5lci1mcm9tLWNhbGxiYWNr
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNzY2ODkKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL3NjcmlwdC10ZXN0cy9hZGQtbGlz
dGVuZXItZnJvbS1jYWxsYmFjay5qcwpAQCAtMCwwICsxLDQ0IEBACitkZXNjcmlwdGlvbignVGVz
dHMgdGhhdCBhZGRpbmcgYSBuZXcgZXZlbnQgbGlzdGVuZXIgZnJvbSBhIGNhbGxiYWNrIHdvcmtz
IGFzIGV4cGVjdGVkLicpOworCit2YXIgY2hhcmdpbmcgPSBmYWxzZTsKK3ZhciBjaGFyZ2luZ1Rp
bWUgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7Cit2YXIgZGlzY2hhcmdpbmdUaW1lID0gNjAw
MDsKK3ZhciBsZXZlbCA9IDAuNzsKKwordmFyIGJhdHRlcnkgPSBuYXZpZ2F0b3Iud2Via2l0QmF0
dGVyeTsKKworZnVuY3Rpb24gY2hlY2tCYXR0ZXJ5U3RhdHVzKCkgeworICAgIHNob3VsZEJlKCdi
YXR0ZXJ5LmNoYXJnaW5nJywgJ2NoYXJnaW5nJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkuY2hh
cmdpbmdUaW1lJywgJ2NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmRpc2No
YXJnaW5nVGltZScsICdkaXNjaGFyZ2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5s
ZXZlbCcsICdsZXZlbCcpOworfQorCit2YXIgZmlyc3RMaXN0ZW5lckV2ZW50cyA9IDA7CitmdW5j
dGlvbiBmaXJzdExpc3RlbmVyKCkgeworICAgIGNoZWNrQmF0dGVyeVN0YXR1cygpOworICAgIGlm
ICgrK2ZpcnN0TGlzdGVuZXJFdmVudHMgPT0gMSkgeworICAgICAgICBiYXR0ZXJ5LmFkZEV2ZW50
TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywgc2Vjb25kTGlzdGVuZXIpOworICAgICAgICBpbnRl
cm5hbHMuc2V0QmF0dGVyeVN0YXR1cyhkb2N1bWVudCwgJ2NoYXJnaW5nY2hhbmdlJywgY2hhcmdp
bmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZlbCk7CisgICAgfQorICAgIGVs
c2UgaWYgKGZpcnN0TGlzdGVuZXJFdmVudHMgPiAyKQorICAgICAgICB0ZXN0RmFpbGVkKCdUb28g
bWFueSBldmVudHMgZm9yIGZpcnN0IGxpc3RlbmVyLicpOworICAgIG1heWJlRmluaXNoVGVzdCgp
OworfQorCit2YXIgc2Vjb25kTGlzdGVuZXJFdmVudHMgPSAwOworZnVuY3Rpb24gc2Vjb25kTGlz
dGVuZXIoKSB7CisgICAgY2hlY2tCYXR0ZXJ5U3RhdHVzKCk7CisgICAgaWYgKCsrc2Vjb25kTGlz
dGVuZXJFdmVudHMgPiAxKQorICAgICAgICB0ZXN0RmFpbGVkKCdUb28gbWFueSBldmVudHMgZm9y
IHNlY29uZCBsaXN0ZW5lci4nKTsKKyAgICBtYXliZUZpbmlzaFRlc3QoKTsKK30KKworZnVuY3Rp
b24gbWF5YmVGaW5pc2hUZXN0KCkgeworICAgIGlmIChmaXJzdExpc3RlbmVyRXZlbnRzID09IDIg
JiYgc2Vjb25kTGlzdGVuZXJFdmVudHMgPT0gMSkKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9
CisKK2JhdHRlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBmaXJzdExpc3Rl
bmVyKTsKK2ludGVybmFscy5zZXRCYXR0ZXJ5U3RhdHVzKGRvY3VtZW50LCAnY2hhcmdpbmdjaGFu
Z2UnLCBjaGFyZ2luZywgY2hhcmdpbmdUaW1lLCBkaXNjaGFyZ2luZ1RpbWUsIGxldmVsKTsKK3dp
bmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2JhdHRl
cnlzdGF0dXMvc2NyaXB0LXRlc3RzL2Jhc2ljLWFsbC10eXBlcy1vZi1ldmVudHMuanMgYi9MYXlv
dXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL3NjcmlwdC10ZXN0cy9iYXNpYy1hbGwtdHlwZXMtb2YtZXZl
bnRzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZmJlMWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL3NjcmlwdC10ZXN0cy9iYXNp
Yy1hbGwtdHlwZXMtb2YtZXZlbnRzLmpzCkBAIC0wLDAgKzEsNDIgQEAKK2Rlc2NyaXB0aW9uKCdU
ZXN0cyB0aGUgYmFzaWMgb3BlcmF0aW9uIG9mIGFsbCBCYXR0ZXJ5U3RhdHVzIGV2ZW50cy4nKTsK
KwordmFyIGNoYXJnaW5nID0gZmFsc2U7Cit2YXIgY2hhcmdpbmdUaW1lID0gTnVtYmVyLlBPU0lU
SVZFX0lORklOSVRZOwordmFyIGRpc2NoYXJnaW5nVGltZSA9IDYwMDA7Cit2YXIgbGV2ZWwgPSAw
Ljc7CisKK3ZhciBiYXR0ZXJ5ID0gbmF2aWdhdG9yLndlYmtpdEJhdHRlcnk7CisKK2Z1bmN0aW9u
IGNoZWNrQmF0dGVyeVN0YXR1cygpIHsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFyZ2luZycs
ICdjaGFyZ2luZycpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmNoYXJnaW5nVGltZScsICdjaGFy
Z2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUnLCAnZGlz
Y2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkubGV2ZWwnLCAnbGV2ZWwnKTsK
K30KKworYmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2NoYW5nZScsIGZ1bmN0aW9u
KCkgeworICAgIGRlYnVnKCdjaGFyZ2luZ2NoYW5nZSBldmVudCBpcyByYWlzZWQnKTsKKyAgICBj
aGVja0JhdHRlcnlTdGF0dXMoKTsKK30pOworCitiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2No
YXJnaW5ndGltZWNoYW5nZScsIGZ1bmN0aW9uKCkgeworICAgIGRlYnVnKCdjaGFyZ2luZ3RpbWVj
aGFuZ2UgZXZlbnQgaXMgcmFpc2VkJyk7CisgICAgY2hlY2tCYXR0ZXJ5U3RhdHVzKCk7Cit9KTsK
KworYmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdkaXNjaGFyZ2luZ3RpbWVjaGFuZ2UnLCBmdW5j
dGlvbigpIHsKKyAgICBkZWJ1ZygnZGlzY2hhcmdpbmd0aW1lY2hhbmdlIGV2ZW50IGlzIHJhaXNl
ZCcpOworICAgIGNoZWNrQmF0dGVyeVN0YXR1cygpOworfSk7CisKK2JhdHRlcnkuYWRkRXZlbnRM
aXN0ZW5lcignbGV2ZWxjaGFuZ2UnLCBmdW5jdGlvbigpIHsKKyAgICBkZWJ1ZygnbGV2ZWxjaGFu
Z2UgZXZlbnQgaXMgcmFpc2VkJyk7CisgICAgY2hlY2tCYXR0ZXJ5U3RhdHVzKCk7CisgICAgZmlu
aXNoSlNUZXN0KCk7Cit9KTsKKworaW50ZXJuYWxzLnNldEJhdHRlcnlTdGF0dXMoZG9jdW1lbnQs
ICdjaGFyZ2luZ2NoYW5nZScsIGNoYXJnaW5nLCBjaGFyZ2luZ1RpbWUsIGRpc2NoYXJnaW5nVGlt
ZSwgbGV2ZWwpOworaW50ZXJuYWxzLnNldEJhdHRlcnlTdGF0dXMoZG9jdW1lbnQsICdjaGFyZ2lu
Z3RpbWVjaGFuZ2UnLCBjaGFyZ2luZywgY2hhcmdpbmdUaW1lLCBkaXNjaGFyZ2luZ1RpbWUsIGxl
dmVsKTsKK2ludGVybmFscy5zZXRCYXR0ZXJ5U3RhdHVzKGRvY3VtZW50LCAnZGlzY2hhcmdpbmd0
aW1lY2hhbmdlJywgY2hhcmdpbmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZl
bCk7CitpbnRlcm5hbHMuc2V0QmF0dGVyeVN0YXR1cyhkb2N1bWVudCwgJ2xldmVsY2hhbmdlJywg
Y2hhcmdpbmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZlbCk7Cit3aW5kb3cu
anNUZXN0SXNBc3luYyA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3Rh
dHVzL3NjcmlwdC10ZXN0cy9iYXNpYy1vcGVyYXRpb24uanMgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5
c3RhdHVzL3NjcmlwdC10ZXN0cy9iYXNpYy1vcGVyYXRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjU4ZjE4YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2JhdHRlcnlzdGF0dXMvc2NyaXB0LXRlc3RzL2Jhc2ljLW9wZXJhdGlvbi5qcwpAQCAtMCwwICsx
LDE5IEBACitkZXNjcmlwdGlvbignVGVzdHMgdGhlIGJhc2ljIG9wZXJhdGlvbiBvZiBCYXR0ZXJ5
U3RhdHVzLicpOworCit2YXIgY2hhcmdpbmcgPSBmYWxzZTsKK3ZhciBjaGFyZ2luZ1RpbWUgPSBO
dW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7Cit2YXIgZGlzY2hhcmdpbmdUaW1lID0gNjAwMDsKK3Zh
ciBsZXZlbCA9IDAuNzsKKwordmFyIGJhdHRlcnkgPSBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeTsK
KworYmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2NoYW5nZScsIGZ1bmN0aW9uKCkg
eworICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmNoYXJnaW5nJywgJ2NoYXJnaW5nJyk7CisgICAgc2hv
dWxkQmUoJ2JhdHRlcnkuY2hhcmdpbmdUaW1lJywgJ2NoYXJnaW5nVGltZScpOworICAgIHNob3Vs
ZEJlKCdiYXR0ZXJ5LmRpc2NoYXJnaW5nVGltZScsICdkaXNjaGFyZ2luZ1RpbWUnKTsKKyAgICBz
aG91bGRCZSgnYmF0dGVyeS5sZXZlbCcsICdsZXZlbCcpOworICAgIGZpbmlzaEpTVGVzdCgpOwor
fSk7CisKK2ludGVybmFscy5zZXRCYXR0ZXJ5U3RhdHVzKGRvY3VtZW50LCAnY2hhcmdpbmdjaGFu
Z2UnLCBjaGFyZ2luZywgY2hhcmdpbmdUaW1lLCBkaXNjaGFyZ2luZ1RpbWUsIGxldmVsKTsKK3dp
bmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2JhdHRl
cnlzdGF0dXMvc2NyaXB0LXRlc3RzL2V2ZW50LWFmdGVyLW5hdmlnYXRpb24uanMgYi9MYXlvdXRU
ZXN0cy9iYXR0ZXJ5c3RhdHVzL3NjcmlwdC10ZXN0cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlN2M1MTIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL3NjcmlwdC10ZXN0cy9ldmVudC1hZnRl
ci1uYXZpZ2F0aW9uLmpzCkBAIC0wLDAgKzEsMTMgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyBmb3Ig
YSBjcmFzaCB3aGVyZSBhbiBldmVudCBpcyBmaXJlZCBhZnRlciB0aGUgcGFnZSBoYXMgYmVlbiBu
YXZpZ2F0ZWQgYXdheSB3aGVuIHRoZSBvcmlnaW5hbCBwYWdlIGlzIGluIHRoZSBwYWdlIGNhY2hl
LicpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgnV2ViS2l0VXNlc1BhZ2VDYWNoZVByZWZlcmVu
Y2VLZXknLCAxKTsKK2Vsc2UKKyAgICBkZWJ1ZygnVGhpcyB0ZXN0IGNhbiBub3QgYmUgcnVuIHdp
dGhvdXQgdGhlIExheW91dFRlc3RDb250cm9sbGVyJyk7CisKK2RvY3VtZW50LmJvZHkub25sb2Fk
ID0gZnVuY3Rpb24oKSB7CisgICAgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuYWRkRXZlbnRMaXN0
ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBmdW5jdGlvbigpIHsgfSApOworICAgIHdpbmRvdy5sb2Nh
dGlvbiA9ICJyZXNvdXJjZXMvZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi1uZXcuaHRtbCI7Cit9CisK
K3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Jh
dHRlcnlzdGF0dXMvc2NyaXB0LXRlc3RzL211bHRpcGxlLWZyYW1lcy5qcyBiL0xheW91dFRlc3Rz
L2JhdHRlcnlzdGF0dXMvc2NyaXB0LXRlc3RzL211bHRpcGxlLWZyYW1lcy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjk1ODFhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy9zY3JpcHQtdGVzdHMvbXVsdGlwbGUtZnJhbWVzLmpzCkBA
IC0wLDAgKzEsNTEgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyB1c2luZyBCYXR0ZXJ5U3RhdHVzIGZy
b20gbXVsdGlwbGUgZnJhbWVzLicpOworCit2YXIgY2hhcmdpbmcgPSBmYWxzZTsKK3ZhciBjaGFy
Z2luZ1RpbWUgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7Cit2YXIgZGlzY2hhcmdpbmdUaW1l
ID0gNjAwMDsKK3ZhciBsZXZlbCA9IDAuNzsKKwordmFyIGJhdHRlcnkgPSBuYXZpZ2F0b3Iud2Vi
a2l0QmF0dGVyeTsKKworZnVuY3Rpb24gY2hlY2tCYXR0ZXJ5U3RhdHVzKCkgeworICAgIHNob3Vs
ZEJlKCdiYXR0ZXJ5LmNoYXJnaW5nJywgJ2NoYXJnaW5nJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRl
cnkuY2hhcmdpbmdUaW1lJywgJ2NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0ZXJ5
LmRpc2NoYXJnaW5nVGltZScsICdkaXNjaGFyZ2luZ1RpbWUnKTsKKyAgICBzaG91bGRCZSgnYmF0
dGVyeS5sZXZlbCcsICdsZXZlbCcpOworfQorCitmdW5jdGlvbiBjaGVja0NoaWxkQmF0dGVyeVN0
YXR1cygpIHsKKyAgICBzaG91bGRCZSgnYmF0dGVyeS5jaGFyZ2luZycsICdjaGFyZ2luZycpOwor
ICAgIHNob3VsZEJlKCdiYXR0ZXJ5LmNoYXJnaW5nVGltZScsICdjaGFyZ2luZ1RpbWUnKTsKKyAg
ICBzaG91bGRCZSgnYmF0dGVyeS5kaXNjaGFyZ2luZ1RpbWUnLCAnZGlzY2hhcmdpbmdUaW1lJyk7
CisgICAgc2hvdWxkQmUoJ2JhdHRlcnkubGV2ZWwnLCAnbGV2ZWwnKTsKK30KKwordmFyIGhhc01h
aW5GcmFtZUV2ZW50RmlyZWQgPSBmYWxzZTsKK2Z1bmN0aW9uIG1haW5GcmFtZUxpc3RlbmVyKCkg
eworICAgIGhhc01haW5GcmFtZUV2ZW50RmlyZWQgPSB0cnVlOworICAgIG1heWJlRmluaXNoVGVz
dCgpOworfQorCit2YXIgaGFzQ2hpbGRGcmFtZUV2ZW50RmlyZWQgPSBmYWxzZTsKK2Z1bmN0aW9u
IGNoaWxkRnJhbWVMaXN0ZW5lcigpIHsKKyAgICBoYXNDaGlsZEZyYW1lRXZlbnRGaXJlZCA9IHRy
dWU7CisgICAgbWF5YmVGaW5pc2hUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIG1heWJlRmluaXNoVGVz
dCgpIHsKKyAgICBpZiAoaGFzTWFpbkZyYW1lRXZlbnRGaXJlZCAmJiBoYXNDaGlsZEZyYW1lRXZl
bnRGaXJlZCkgeworICAgICAgICBjaGVja0JhdHRlcnlTdGF0dXMoKTsKKyAgICAgICAgY2hlY2tD
aGlsZEJhdHRlcnlTdGF0dXMoKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfQorfQor
Cit2YXIgY2hpbGRGcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChjaGlsZEZyYW1lKTsKK3ZhciBjaGlsZEJhdHRlcnkgPSBj
aGlsZEZyYW1lLmNvbnRlbnRXaW5kb3cubmF2aWdhdG9yLndlYmtpdEJhdHRlcnkKK2NoaWxkQmF0
dGVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2luZ2NoYW5nZScsIGNoaWxkRnJhbWVMaXN0ZW5l
cik7CitiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywgbWFpbkZyYW1l
TGlzdGVuZXIpOworCitpbnRlcm5hbHMuc2V0QmF0dGVyeVN0YXR1cyhkb2N1bWVudCwgJ2NoYXJn
aW5nY2hhbmdlJywgY2hhcmdpbmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdpbmdUaW1lLCBsZXZl
bCk7Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9iYXR0ZXJ5c3RhdHVzL3NjcmlwdC10ZXN0cy91cGRhdGVzLmpzIGIvTGF5b3V0VGVzdHMvYmF0
dGVyeXN0YXR1cy9zY3JpcHQtdGVzdHMvdXBkYXRlcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43YTk2NjY3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYmF0
dGVyeXN0YXR1cy9zY3JpcHQtdGVzdHMvdXBkYXRlcy5qcwpAQCAtMCwwICsxLDM5IEBACitkZXNj
cmlwdGlvbignVGVzdHMgdGhhdCB1cGRhdGVzIHRvIHRoZSBiYXR0ZXJ5IGV2ZW50IGNhdXNlcyBu
ZXcgZXZlbnRzIHRvIGZpcmUuJyk7CisKK3ZhciBjaGFyZ2luZyA9IGZhbHNlOwordmFyIGNoYXJn
aW5nVGltZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKK3ZhciBkaXNjaGFyZ2luZ1RpbWUg
PSA2MDAwOwordmFyIGxldmVsID0gMC43OworCit2YXIgYmF0dGVyeSA9IG5hdmlnYXRvci53ZWJr
aXRCYXR0ZXJ5OworCitmdW5jdGlvbiBjaGVja0JhdHRlcnlTdGF0dXMoKSB7CisgICAgc2hvdWxk
QmUoJ2JhdHRlcnkuY2hhcmdpbmcnLCAnY2hhcmdpbmcnKTsKKyAgICBzaG91bGRCZSgnYmF0dGVy
eS5jaGFyZ2luZ1RpbWUnLCAnY2hhcmdpbmdUaW1lJyk7CisgICAgc2hvdWxkQmUoJ2JhdHRlcnku
ZGlzY2hhcmdpbmdUaW1lJywgJ2Rpc2NoYXJnaW5nVGltZScpOworICAgIHNob3VsZEJlKCdiYXR0
ZXJ5LmxldmVsJywgJ2xldmVsJyk7Cit9CisKK2Z1bmN0aW9uIHNldEJhdHRlcnlTdGF0dXMoKSB7
CisgICAgaW50ZXJuYWxzLnNldEJhdHRlcnlTdGF0dXMoZG9jdW1lbnQsICdjaGFyZ2luZ2NoYW5n
ZScsIGNoYXJnaW5nLCBjaGFyZ2luZ1RpbWUsIGRpc2NoYXJnaW5nVGltZSwgbGV2ZWwpOworfQor
CitmdW5jdGlvbiBmaXJzdExpc3RlbmVyKCkgeworICAgIGNoZWNrQmF0dGVyeVN0YXR1cygpOwor
ICAgIGJhdHRlcnkucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhcmdpbmdjaGFuZ2UnLCBmaXJzdExp
c3RlbmVyKTsKKyAgICBiYXR0ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYXJnaW5nY2hhbmdlJywg
dXBkYXRlTGlzdGVuZXIpOworICAgIGNoYXJnaW5nID0gdHJ1ZTsKKyAgICBjaGFyZ2luZ1RpbWUg
PSA3MDAwOworICAgIGRpc2NoYXJnaW5nVGltZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsK
KyAgICBsZXZlbCA9IDAuMzsKKwlzZXRCYXR0ZXJ5U3RhdHVzKCk7Cit9CisKK2Z1bmN0aW9uIHVw
ZGF0ZUxpc3RlbmVyKGV2ZW50KSB7CisgICAgY2hlY2tCYXR0ZXJ5U3RhdHVzKGV2ZW50KTsKKyAg
ICBmaW5pc2hKU1Rlc3QoKTsKK30KKworYmF0dGVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFyZ2lu
Z2NoYW5nZScsIGZpcnN0TGlzdGVuZXIpOworc2V0QmF0dGVyeVN0YXR1cygpOword2luZG93Lmpz
VGVzdElzQXN5bmMgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1
cy9zY3JpcHQtdGVzdHMvd2luZG93LXByb3BlcnR5LmpzIGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0
YXR1cy9zY3JpcHQtdGVzdHMvd2luZG93LXByb3BlcnR5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmZlZmUzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9i
YXR0ZXJ5c3RhdHVzL3NjcmlwdC10ZXN0cy93aW5kb3ctcHJvcGVydHkuanMKQEAgLTAsMCArMSwy
MyBAQAorZGVzY3JpcHRpb24oJ1Rlc3RzIHRoYXQgdGhlIHdpbmRvdy5uYXZpZ2F0b3IuYmF0dGVy
eSBwcm9wZXJ0aWVzIGFyZSBwcmVzZW50LicpOworCitmdW5jdGlvbiBoYXNPbkJhdHRlcnlQcm9w
ZXJ0eSgpCit7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgcHJvcGVydHkgaW4g
bmF2aWdhdG9yLndlYmtpdEJhdHRlcnkpIHsKKyAgICAgICAgaWYgKHByb3BlcnR5ID09ICdvbmNo
YXJnaW5nY2hhbmdlJyB8fAorICAgICAgICAgICAgcHJvcGVydHkgPT0gJ29uY2hhcmdpbmd0aW1l
Y2hhbmdlJyB8fAorICAgICAgICAgICAgcHJvcGVydHkgPT0gJ29uZGlzY2hhcmdpbmd0aW1lY2hh
bmdlJyB8fAorICAgICAgICAgICAgcHJvcGVydHkgPT0gJ29ubGV2ZWxjaGFuZ2UnKQorICAgICAg
ICAgICAgcmVzdWx0ICs9IDE7CisgICAgfQorICAgIGlmIChyZXN1bHQgPT0gNCkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZVRydWUoInR5cGVv
ZiBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeSA9PSAnb2JqZWN0JyIpOworc2hvdWxkQmVUcnVlKCJo
YXNPbkJhdHRlcnlQcm9wZXJ0eSgpIik7CitzaG91bGRCZVRydWUoIm5hdmlnYXRvci53ZWJraXRC
YXR0ZXJ5Lmhhc093blByb3BlcnR5KCdvbmNoYXJnaW5nY2hhbmdlJykiKTsKK3Nob3VsZEJlVHJ1
ZSgibmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29uY2hhcmdpbmd0aW1l
Y2hhbmdlJykiKTsKK3Nob3VsZEJlVHJ1ZSgibmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3du
UHJvcGVydHkoJ29uZGlzY2hhcmdpbmd0aW1lY2hhbmdlJykiKTsKK3Nob3VsZEJlVHJ1ZSgibmF2
aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29ubGV2ZWxjaGFuZ2UnKSIpOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy91cGRhdGVzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvdXBkYXRlcy1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE3MzRjMQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvdXBkYXRlcy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxNyBAQAorVGVzdHMgdGhhdCB1cGRhdGVzIHRvIHRoZSBiYXR0ZXJ5IGV2ZW50IGNhdXNlcyBu
ZXcgZXZlbnRzIHRvIGZpcmUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IGJhdHRlcnkuY2hhcmdpbmcgaXMgY2hhcmdpbmcKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZ1RpbWUg
aXMgY2hhcmdpbmdUaW1lCitQQVNTIGJhdHRlcnkuZGlzY2hhcmdpbmdUaW1lIGlzIGRpc2NoYXJn
aW5nVGltZQorUEFTUyBiYXR0ZXJ5LmxldmVsIGlzIGxldmVsCitQQVNTIGJhdHRlcnkuY2hhcmdp
bmcgaXMgY2hhcmdpbmcKK1BBU1MgYmF0dGVyeS5jaGFyZ2luZ1RpbWUgaXMgY2hhcmdpbmdUaW1l
CitQQVNTIGJhdHRlcnkuZGlzY2hhcmdpbmdUaW1lIGlzIGRpc2NoYXJnaW5nVGltZQorUEFTUyBi
YXR0ZXJ5LmxldmVsIGlzIGxldmVsCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy91
cGRhdGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL3VwZGF0ZXMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzMzYWQxCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy91cGRhdGVzLmh0bWwKQEAgLTAsMCArMSw5IEBA
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlw
dC10ZXN0cy91cGRhdGVzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy93aW5kb3ctcHJvcGVydHktZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvYmF0dGVyeXN0YXR1cy93aW5kb3ctcHJvcGVydHktZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZTZmZDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL3dpbmRvdy1wcm9wZXJ0eS1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNSBAQAorVGVzdHMgdGhhdCB0aGUgd2luZG93Lm5hdmln
YXRvci5iYXR0ZXJ5IHByb3BlcnRpZXMgYXJlIHByZXNlbnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIHR5cGVvZiBuYXZpZ2F0b3Iud2Via2l0QmF0dGVyeSA9PSAnb2Jq
ZWN0JyBpcyB0cnVlCitQQVNTIGhhc09uQmF0dGVyeVByb3BlcnR5KCkgaXMgdHJ1ZQorUEFTUyBu
YXZpZ2F0b3Iud2Via2l0QmF0dGVyeS5oYXNPd25Qcm9wZXJ0eSgnb25jaGFyZ2luZ2NoYW5nZScp
IGlzIHRydWUKK1BBU1MgbmF2aWdhdG9yLndlYmtpdEJhdHRlcnkuaGFzT3duUHJvcGVydHkoJ29u
Y2hhcmdpbmd0aW1lY2hhbmdlJykgaXMgdHJ1ZQorUEFTUyBuYXZpZ2F0b3Iud2Via2l0QmF0dGVy
eS5oYXNPd25Qcm9wZXJ0eSgnb25kaXNjaGFyZ2luZ3RpbWVjaGFuZ2UnKSBpcyB0cnVlCitQQVNT
IG5hdmlnYXRvci53ZWJraXRCYXR0ZXJ5Lmhhc093blByb3BlcnR5KCdvbmxldmVsY2hhbmdlJykg
aXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2JhdHRlcnlzdGF0dXMvd2luZG93LXByb3BlcnR5
Lmh0bWwgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL3dpbmRvdy1wcm9wZXJ0eS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MDg4ZjIKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9iYXR0ZXJ5c3RhdHVzL3dpbmRvdy1wcm9wZXJ0eS5odG1sCkBAIC0w
LDAgKzEsOSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvd2luZG93LXByb3BlcnR5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVz
dF9leHBlY3RhdGlvbnMudHh0CmluZGV4IDEyMWUyOGEuLjk0YTYxZTcgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTEx
NCw2ICsxMTQsOSBAQCBCVUdDUjEwMzkzOSBTS0lQIDogaHR0cC90ZXN0cy9hcHBjYWNoZS93cm9u
Zy1jb250ZW50LXR5cGUuaHRtbCA9IFRFWFQKIC8vIFZpYnJhdGlvbiBBUEkgaXMgbm90IHN1cHBv
cnRlZCB5ZXQgaW4gdGhlIGNocm9taXVtIHBvcnQuCiBCVUdXSzcyMDEwIFNLSVAgOiBmYXN0L2Rv
bS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwgPSBGQUlMCiAKKy8vIEJhdHRlcnkgU3RhdHVzIEFQ
SSBpcyBub3Qgc3VwcG9ydGVkIHlldCBpbiB0aGUgY2hyb21pdW0gcG9ydC4KK0JVR1dLNjI2OTgg
U0tJUCA6IGJhdHRlcnlzdGF0dXMgPSBQQVNTIEZBSUwKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFdPTlRG
SVggVEVTVFMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IDA0ZjA0
ZjYuLmIzNTY3ZWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC00MDIsNiArNDAyLDkg
QEAgd2ViaW50ZW50cy8KICMgUG9pbnRlciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50
ZXItbG9jay8KIAorI0JhdHRlcnkgU3RhdHVzIEFQSSBzdXBwb3J0IG5vdCB5ZXQuIGh0dHA6Ly93
ZWJraXQub3JnL2IvNjI2OTgKK2JhdHRlcnlzdGF0dXMKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IwogIyBURVNUUyBGQUlMSU5HCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9Ta2lwcGVkCmluZGV4IGVhZmI5YTEuLmViYWZkMDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lw
cGVkCkBAIC01ODMsMyArNTgzLDcgQEAgc3ZnL2N1c3RvbS9kZWxldGUtdGV4dC1jcmFzaC5odG1s
CiBjYW52YXMvcGhpbGlwL3Rlc3RzLzJkLmxpbmUuY2FwLnJvdW5kLmh0bWwKIGNhbnZhcy9waGls
aXAvdGVzdHMvMmQuc2hhZG93LmNhbnZhcy50cmFuc3BhcmVudC4yLmh0bWwKIGNhbnZhcy9waGls
aXAvdGVzdHMvMmQuc2hhZG93LmltYWdlLnRyYW5zcGFyZW50LjIuaHRtbAorCisjIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjY5OAorIyBOZWVkcyBCYXR0ZXJ5Q2xp
ZW50IGltcGxlbWVudGF0aW9uLgorYmF0dGVyeXN0YXR1cy8KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVk
CmluZGV4IGYxN2E0ZWEuLjBhOThiM2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZApAQCAtMzYy
LDYgKzM2Miw5IEBAIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtYXJyYXlzLmh0
bWwKICNWaWJyYXRpb24gQVBJIGlzIG5vdCBpbXBsZW1lbnRlZC4KIGZhc3QvZG9tL25hdmlnYXRv
ci12aWJyYXRpb24uaHRtbAogCisjQmF0dGVyeSBTdGF0dXMgQVBJIGlzIG5vdCBpbXBsZW1lbnRl
ZC4KK2JhdHRlcnlzdGF0dXMKKwogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIwogIyAgICAgICBEcmFn
IGFuZCBEcm9wIFN1cHBvcnQgaW4gRFJULiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIwogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBl
ZAppbmRleCAzY2RlZjA5Li5mNzViNmE5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW4vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAt
MTY2MSw2ICsxNjYxLDkgQEAgZmFzdC9yZXBhaW50L3RyYW5zZm9ybS1hYnNvbHV0ZS1pbi1wb3Np
dGlvbmVkLWNvbnRhaW5lci5odG1sCiAjVmlicmF0aW9uIEFQSSBpcyBub3QgaW1wbGVtZW50ZWQu
CiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwKIAorI0JhdHRlcnkgU3RhdHVzIEFQ
SSBpcyBub3QgaW1wbGVtZW50ZWQuCitiYXR0ZXJ5c3RhdHVzCisKICMgVGhvc2UgdGVzdHMgbmVl
ZCBhIHRleHQgYmFzZWxpbmUgYWZ0ZXIgbGF6aWx5IGFsbG9jYXRpbmcgbGF5ZXJzLgogIyBUaGUg
Y2hhbmdlIHNob3VsZCBvbmx5IGJlIGxheWVyIHJlbW92YWwuCiBhbmltYXRpb25zL2NvbWJvLXRy
YW5zZm9ybS10cmFuc2xhdGUrc2NhbGUuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luY2Fpcm8vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Nr
aXBwZWQKaW5kZXggMWQ3NzdmNC4uYjhjMzdkZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luY2Fpcm8vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWly
by9Ta2lwcGVkCkBAIC0yMDU4LDMgKzIwNTgsNiBAQCBmYXN0L211dGF0aW9uL2VuZC1vZi10YXNr
LWRlbGl2ZXJ5Lmh0bWwKIAogI1ZpYnJhdGlvbiBBUEkgaXMgbm90IGltcGxlbWVudGVkLgogZmFz
dC9kb20vbmF2aWdhdG9yLXZpYnJhdGlvbi5odG1sCisKKyNCYXR0ZXJ5IFN0YXR1cyBBUEkgaXMg
bm90IGltcGxlbWVudGVkLgorYmF0dGVyeXN0YXR1cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA0
MmZhMDAyLi44MWUxMmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjMzNCw2ICsyMzM0LDIy
IEBAIFNFVChXZWJDb3JlVGVzdFN1cHBvcnRfU09VUkNFUwogICAgIHRlc3RpbmcvSW50ZXJuYWxT
ZXR0aW5ncy5jcHAKICkKIAorSUYgKEVOQUJMRV9CQVRURVJZX1NUQVRVUykKKyAgICBMSVNUKEFQ
UEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgIiR7V0VCQ09SRV9ESVJ9
L01vZHVsZXMvYmF0dGVyeSIKKyAgICApCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JRExfRklM
RVMKKyAgICAgICAgTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuaWRsCisgICAgICAg
IE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5pZGwKKyAgICApCisgICAgTElTVChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIE1vZHVsZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0
ZXJ5LmNwcAorICAgICAgICBNb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwCisg
ICAgICAgIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHAKKyAgICAgICAgTW9kdWxl
cy9iYXR0ZXJ5L0JhdHRlcnlTdGF0dXMuY3BwCisgICAgKQorRU5ESUYgKCkKKwogIyBNb2R1bGVz
IHRoYXQgdGhlIGJpbmRpbmdzIGdlbmVyYXRvciBzY3JpcHRzIG1heSB1c2UKIFNFVChTQ1JJUFRT
X1JFU09MVkVfU1VQUExFTUVOVEFMCiAgICAgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0
cy9JRExQYXJzZXIucG0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZWRmNzI3Li5jMWE2M2UyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTAzIEBACisyMDEyLTAzLTE1ICBLaWhvbmcgS3dvbiAgPGtpaG9uZy5rd29u
QHNhbXN1bmcuY29tPgorCisgICAgICAgIFN1cHBvcnQgZm9yIEJhdHRlcnkgU3RhdHVzIEFQSQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2OTgKKwor
ICAgICAgICBCYXR0ZXJ5IFN0YXR1cyBBUEkgaXMgaW1wbGVtZW50ZWQgdW5kZXIgdGhlIE5hdmln
YXRvciBjbGFzcy4KKyAgICAgICAgQmF0dGVyeSBTdGF0dXMgQVBJIGhhcyBmb3VyIHR5cGVzIG9m
IGV2ZW50cywgYW5kIGFsbCBldmVudHMgYXJlIG9wZXJhdGVkIGJhc2VkIG9uIGEgY2FsbGJhY2sg
bWVjaGFuaXNtLgorICAgICAgICAgOiBvbmNoYXJnaW5nY2hhbmdlLCBvbmNoYXJnaW5ndGltZWNo
YW5nZSwgb25kaXNjaGFyZ2luZ3RpbWVjaGFuZ2UsIG9ubGV2ZWxjaGFuZ2UuCisgICAgICAgIFRo
ZSBiYXR0ZXJ5IHN0YXR1cyBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgQmF0dGVyeU1hbmFnZXIobmF2
aWdhdG9yLndlYmtpdEJhdHRlcnkpLCBhbmQgYmF0dGVyeSBzdGF0dXMgaXMgY29udHJvbGxlZCBi
eSBCYXR0ZXJ5Q29udHJvbGxlciB3aGljaCBtYW5hZ2VzIGluc3RhbmNlcyBvZiBCYXR0ZXJ5TWFu
YWdlci4KKyAgICAgICAgV2hlbiBiYXR0ZXJ5IHN0YXR1cyBldmVudCBpcyByYWlzZWQsIEJhdHRl
cnlDb250cm9sbGVyIGNhbGxzIGFsbCByZWdpc3RlcmVkIEJhdHRlcnlNYW5hZ2VyJ3MgZXZlbnQg
ZGlzcGF0Y2hlci4KKyAgICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvYmF0dGVyeS1zdGF0dXMv
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAgICAgICBUZXN0czogYmF0
dGVyeXN0YXR1cy9hZGQtbGlzdGVuZXItZnJvbS1jYWxsYmFjay5odG1sCisgICAgICAgICAgICAg
ICBiYXR0ZXJ5c3RhdHVzL2Jhc2ljLWFsbC10eXBlcy1vZi1ldmVudHMuaHRtbAorICAgICAgICAg
ICAgICAgYmF0dGVyeXN0YXR1cy9iYXNpYy1vcGVyYXRpb24uaHRtbAorICAgICAgICAgICAgICAg
YmF0dGVyeXN0YXR1cy9ldmVudC1hZnRlci1uYXZpZ2F0aW9uLmh0bWwKKyAgICAgICAgICAgICAg
IGJhdHRlcnlzdGF0dXMvbXVsdGlwbGUtZnJhbWVzLmh0bWwKKyAgICAgICAgICAgICAgIGJhdHRl
cnlzdGF0dXMvdXBkYXRlcy5odG1sCisgICAgICAgICAgICAgICBiYXR0ZXJ5c3RhdHVzL3dpbmRv
dy1wcm9wZXJ0eS5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBN
b2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoQmF0dGVyeUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xp
ZW50Ojp+QmF0dGVyeUNsaWVudCk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlD
b250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhdHRlcnlDb250cm9sbGVyOjpCYXR0ZXJ5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6fkJhdHRlcnlDb250cm9sbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkJhdHRlcnlDb250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0
dGVyeUNvbnRyb2xsZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlD
b250cm9sbGVyOjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q29u
dHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0
ZXJ5Q29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVy
eUNvbnRyb2xsZXI6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OnByb3ZpZGVCYXR0ZXJ5
VG8pOgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQmF0dGVyeUNvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6QmF0dGVyeUNvbnRyb2xsZXI6OmNsaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpCYXR0ZXJ5Q29udHJvbGxlcjo6ZnJvbSk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5
L0JhdHRlcnlNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0
dGVyeU1hbmFnZXI6On5CYXR0ZXJ5TWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5
TWFuYWdlcjo6QmF0dGVyeU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFn
ZXI6OmNoYXJnaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpjaGFyZ2lu
Z1RpbWUpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmRpc2NoYXJnaW5nVGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6bGV2ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMpOgorICAgICAg
ICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
QmF0dGVyeU1hbmFnZXI6OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdl
cjo6c3RvcCk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCYXR0ZXJ5TWFuYWdlcik6CisgICAg
ICAgIChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6aW50ZXJmYWNlTmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcjo6YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmNhblN1c3BlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI6OmV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpCYXR0ZXJ5TWFuYWdlcjo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkJhdHRlcnlNYW5hZ2VyOjpyZWZFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXR0ZXJ5TWFuYWdlcjo6ZGVyZWZFdmVudFRhcmdldCk6CisgICAgICAgICogTW9kdWxlcy9i
YXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmlkbDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9iYXR0
ZXJ5L0JhdHRlcnlTdGF0dXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6QmF0dGVyeVN0YXR1czo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
dHRlcnlTdGF0dXM6OkJhdHRlcnlTdGF0dXMpOgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9C
YXR0ZXJ5U3RhdHVzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCYXR0
ZXJ5U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6OmNoYXJnaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlTdGF0dXM6OmNoYXJnaW5nVGltZSk6CisgICAgICAg
IChXZWJDb3JlOjpCYXR0ZXJ5U3RhdHVzOjpkaXNjaGFyZ2luZ1RpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmF0dGVyeVN0YXR1czo6bGV2ZWwpOgorICAgICAgICAqIE1vZHVsZXMvYmF0dGVyeS9O
YXZpZ2F0b3JCYXR0ZXJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5hdmlnYXRvckJhdHRlcnk6Ok5hdmlnYXRvckJhdHRlcnkpOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdG9yQmF0dGVyeTo6fk5hdmlnYXRvckJhdHRlcnkpOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdG9yQmF0dGVyeTo6d2Via2l0QmF0dGVyeSk6CisgICAgICAgIChXZWJD
b3JlOjpOYXZpZ2F0b3JCYXR0ZXJ5Ojpmcm9tKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRv
ckJhdHRlcnk6OmJhdHRlcnlNYW5hZ2VyKToKKyAgICAgICAgKiBNb2R1bGVzL2JhdHRlcnkvTmF2
aWdhdG9yQmF0dGVyeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTmF2
aWdhdG9yQmF0dGVyeSk6CisgICAgICAgICogTW9kdWxlcy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRl
cnkuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBkb20vRXZlbnROYW1lcy5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbjoKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldEJh
dHRlcnlTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogdGVzdGluZy9JbnRl
cm5hbHMuaDoKKyAgICAgICAgKEludGVybmFscyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuaWRsOgorCiAyMDEyLTAzLTE1ICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0Bnb29nbGUu
Y29tPgogCiAgICAgICAgIE1lZGlhU3RyZWFtIEFQSSAoSlNFUCk6IEludHJvZHVjaW5nIFNlc3Np
b25EZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5
L0JhdHRlcnlDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5
Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1NjMzNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q2xp
ZW50LmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEJhdHRlcnlDbGllbnRfaAorI2RlZmlu
ZSBCYXR0ZXJ5Q2xpZW50X2gKKworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5Q29udHJvbGxlcjsKK2NsYXNzIFBhZ2U7CisK
K2NsYXNzIEJhdHRlcnlDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkJhdHRlcnlDbGll
bnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250cm9sbGVyKEJhdHRlcnlDb250cm9s
bGVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJhdHRlcnlD
b250cm9sbGVyRGVzdHJveWVkKCkgPSAwOworfTsKKwordm9pZCBwcm92aWRlQmF0dGVyeVRvKFBh
Z2UqLCBCYXR0ZXJ5Q2xpZW50Kik7CisKK30KKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisj
ZW5kaWYgLy8gQmF0dGVyeUNsaWVudF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVkMTkyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsOTMgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhdHRlcnlDb250cm9sbGVyLmgiCisKKyNp
ZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50LmgiCisj
aW5jbHVkZSAiQmF0dGVyeVN0YXR1cy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworQmF0dGVyeUNvbnRyb2xsZXI6OkJhdHRlcnlDb250cm9sbGVyKEJhdHRl
cnlDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKKyAgICBBU1NFUlQo
bV9jbGllbnQpOworICAgIG1fY2xpZW50LT5zZXRDb250cm9sbGVyKHRoaXMpOworfQorCitCYXR0
ZXJ5Q29udHJvbGxlcjo6fkJhdHRlcnlDb250cm9sbGVyKCkKK3sKKyAgICBmb3IgKExpc3RlbmVy
VmVjdG9yOjppdGVyYXRvciBpdCA9IG1fbGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbGlzdGVu
ZXJzLmVuZCgpOyArK2l0KQorICAgICAgICAoKml0KS0+YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95
ZWQoKTsKKyAgICBtX2NsaWVudC0+YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKTsKK30KKwor
UGFzc093blB0cjxCYXR0ZXJ5Q29udHJvbGxlcj4gQmF0dGVyeUNvbnRyb2xsZXI6OmNyZWF0ZShC
YXR0ZXJ5Q2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBCYXR0ZXJ5
Q29udHJvbGxlcihjbGllbnQpKTsKK30KKwordm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6YWRkTGlz
dGVuZXIoQmF0dGVyeU1hbmFnZXIqIGJhdHRlcnlNYW5hZ2VyKQoreworICAgIG1fbGlzdGVuZXJz
LmFwcGVuZChiYXR0ZXJ5TWFuYWdlcik7CisgICAgbV9jbGllbnQtPnN0YXJ0VXBkYXRpbmcoKTsK
K30KKwordm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6cmVtb3ZlTGlzdGVuZXIoQmF0dGVyeU1hbmFn
ZXIqIGJhdHRlcnlNYW5hZ2VyKQoreworICAgIHNpemVfdCBwb3MgPSBtX2xpc3RlbmVycy5maW5k
KGJhdHRlcnlNYW5hZ2VyKTsKKyAgICBpZiAocG9zID09IFdURjo6bm90Rm91bmQpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2xpc3RlbmVycy5yZW1vdmUocG9zKTsKKyAgICBpZiAobV9saXN0ZW5l
cnMuaXNFbXB0eSgpKQorICAgICAgICBtX2NsaWVudC0+c3RvcFVwZGF0aW5nKCk7Cit9CisKK3Zv
aWQgQmF0dGVyeUNvbnRyb2xsZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YXR1
cykKK3sKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUs
IGZhbHNlLCBmYWxzZSk7CisgICAgUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnkgPSBiYXR0
ZXJ5U3RhdHVzOworICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gbV9saXN0
ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnMuZW5kKCk7ICsraXQpCisgICAgICAgICgq
aXQpLT5kaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGV2ZW50LCBiYXR0ZXJ5KTsKK30KKworY29uc3Qg
QXRvbWljU3RyaW5nJiBCYXR0ZXJ5Q29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYW1lLCAoIkJhdHRlcnlDb250cm9s
bGVyIikpOworICAgIHJldHVybiBuYW1lOworfQorCitib29sIEJhdHRlcnlDb250cm9sbGVyOjpp
c0FjdGl2ZShQYWdlKiBwYWdlKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihCYXR0
ZXJ5Q29udHJvbGxlcjo6ZnJvbShwYWdlKSk7Cit9CisKK3ZvaWQgcHJvdmlkZUJhdHRlcnlUbyhQ
YWdlKiBwYWdlLCBCYXR0ZXJ5Q2xpZW50KiBjbGllbnQpCit7CisgICAgU3VwcGxlbWVudDxQYWdl
Pjo6cHJvdmlkZVRvKHBhZ2UsIEJhdHRlcnlDb250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpLCBC
YXR0ZXJ5Q29udHJvbGxlcjo6Y3JlYXRlKGNsaWVudCkpOworfQorCit9CisKKyNlbmRpZiAvLyBC
QVRURVJZX1NUQVRVUworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRl
cnkvQmF0dGVyeUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9C
YXR0ZXJ5Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1
ZDc3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
QmF0dGVyeUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQmF0dGVyeUNv
bnRyb2xsZXJfaAorI2RlZmluZSBCYXR0ZXJ5Q29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoQkFU
VEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5TWFuYWdlci5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCYXR0ZXJ5Q2xpZW50OworCitj
bGFzcyBCYXR0ZXJ5Q29udHJvbGxlciA6IHB1YmxpYyBTdXBwbGVtZW50PFBhZ2U+IHsKK3B1Ymxp
YzoKKyAgICB+QmF0dGVyeUNvbnRyb2xsZXIoKTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEJh
dHRlcnlDb250cm9sbGVyPiBjcmVhdGUoQmF0dGVyeUNsaWVudCopOworCisgICAgdm9pZCBhZGRM
aXN0ZW5lcihCYXR0ZXJ5TWFuYWdlciopOworICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoQmF0dGVy
eU1hbmFnZXIqKTsKKyAgICB2b2lkIGRpZENoYW5nZUJhdHRlcnlTdGF0dXMoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pOworCisgICAgQmF0
dGVyeUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworICAgIHN0
YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CisgICAgc3RhdGljIEJh
dHRlcnlDb250cm9sbGVyKiBmcm9tKFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJh
dHRlcnlDb250cm9sbGVyKj4oU3VwcGxlbWVudDxQYWdlPjo6ZnJvbShwYWdlLCBzdXBwbGVtZW50
TmFtZSgpKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0FjdGl2ZShQYWdlKik7CisKK3ByaXZhdGU6
CisgICAgdHlwZWRlZiBWZWN0b3I8QmF0dGVyeU1hbmFnZXIqPiBMaXN0ZW5lclZlY3RvcjsKKwor
ICAgIGV4cGxpY2l0IEJhdHRlcnlDb250cm9sbGVyKEJhdHRlcnlDbGllbnQqKTsKKworICAgIEJh
dHRlcnlDbGllbnQqIG1fY2xpZW50OworICAgIExpc3RlbmVyVmVjdG9yIG1fbGlzdGVuZXJzOwor
fTsKKworfQorCisjZW5kaWYgLy8gQkFUVEVSWV9TVEFUVVMKKyNlbmRpZiAvLyBCYXR0ZXJ5Q29u
dHJvbGxlcl9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9C
YXR0ZXJ5TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVy
eU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOGQxMzEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVy
eU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCYXR0ZXJ5TWFuYWdlci5oIgorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQor
CisjaW5jbHVkZSAiQmF0dGVyeUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVz
LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk5h
dmlnYXRvci5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQ
YXNzUmVmUHRyPEJhdHRlcnlNYW5hZ2VyPiBCYXR0ZXJ5TWFuYWdlcjo6Y3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE5hdmlnYXRvciogbmF2aWdhdG9yKQoreworICAgIFJl
ZlB0cjxCYXR0ZXJ5TWFuYWdlcj4gYmF0dGVyeU1hbmFnZXIoYWRvcHRSZWYobmV3IEJhdHRlcnlN
YW5hZ2VyKGNvbnRleHQsIG5hdmlnYXRvcikpKTsKKyAgICBiYXR0ZXJ5TWFuYWdlci0+c3VzcGVu
ZElmTmVlZGVkKCk7CisgICAgcmV0dXJuIGJhdHRlcnlNYW5hZ2VyLnJlbGVhc2UoKTsKK30KKwor
QmF0dGVyeU1hbmFnZXI6On5CYXR0ZXJ5TWFuYWdlcigpCit7Cit9CisKK0JhdHRlcnlNYW5hZ2Vy
OjpCYXR0ZXJ5TWFuYWdlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBOYXZpZ2F0
b3IqIG5hdmlnYXRvcikKKyAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQorICAg
ICwgbV9iYXR0ZXJ5Q29udHJvbGxlcihCYXR0ZXJ5Q29udHJvbGxlcjo6ZnJvbShuYXZpZ2F0b3It
PmZyYW1lKCktPnBhZ2UoKSkpCisgICAgLCBtX2JhdHRlcnlTdGF0dXMoMCkKK3sKKyAgICBtX2Jh
dHRlcnlDb250cm9sbGVyLT5hZGRMaXN0ZW5lcih0aGlzKTsKK30KKworYm9vbCBCYXR0ZXJ5TWFu
YWdlcjo6Y2hhcmdpbmcoKQoreworICAgIHJldHVybiBtX2JhdHRlcnlTdGF0dXMtPmNoYXJnaW5n
KCk7Cit9CisKK2RvdWJsZSBCYXR0ZXJ5TWFuYWdlcjo6Y2hhcmdpbmdUaW1lKCkKK3sKKyAgICBp
ZiAoIW1fYmF0dGVyeVN0YXR1cy0+Y2hhcmdpbmcoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKworICAgIHJldHVybiBtX2JhdHRlcnlT
dGF0dXMtPmNoYXJnaW5nVGltZSgpOworfQorCitkb3VibGUgQmF0dGVyeU1hbmFnZXI6OmRpc2No
YXJnaW5nVGltZSgpCit7CisgICAgaWYgKG1fYmF0dGVyeVN0YXR1cy0+Y2hhcmdpbmcoKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKwor
ICAgIHJldHVybiBtX2JhdHRlcnlTdGF0dXMtPmRpc2NoYXJnaW5nVGltZSgpOworfQorCitkb3Vi
bGUgQmF0dGVyeU1hbmFnZXI6OmxldmVsKCkKK3sKKyAgICByZXR1cm4gbV9iYXR0ZXJ5U3RhdHVz
LT5sZXZlbCgpOworfQorCit2b2lkIEJhdHRlcnlNYW5hZ2VyOjpkaWRDaGFuZ2VCYXR0ZXJ5U3Rh
dHVzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJh
dHRlcnlTdGF0dXMpCit7CisgICAgbV9iYXR0ZXJ5U3RhdHVzID0gYmF0dGVyeVN0YXR1czsKKyAg
ICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBCYXR0ZXJ5TWFuYWdlcjo6c3VzcGVu
ZChSZWFzb25Gb3JTdXNwZW5zaW9uKQoreworICAgIGlmIChtX2JhdHRlcnlDb250cm9sbGVyKQor
ICAgICAgICBtX2JhdHRlcnlDb250cm9sbGVyLT5yZW1vdmVMaXN0ZW5lcih0aGlzKTsKK30KKwor
dm9pZCBCYXR0ZXJ5TWFuYWdlcjo6cmVzdW1lKCkKK3sKKyAgICBpZiAobV9iYXR0ZXJ5Q29udHJv
bGxlcikKKyAgICAgICAgbV9iYXR0ZXJ5Q29udHJvbGxlci0+YWRkTGlzdGVuZXIodGhpcyk7Cit9
CisKK3ZvaWQgQmF0dGVyeU1hbmFnZXI6OnN0b3AoKQoreworICAgIGlmIChtX2JhdHRlcnlDb250
cm9sbGVyKQorICAgICAgICBtX2JhdHRlcnlDb250cm9sbGVyLT5yZW1vdmVMaXN0ZW5lcih0aGlz
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQkFUVEVSWV9TVEFU
VVMKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTc4ZGRjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgK
QEAgLTAsMCArMSw4NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVj
dHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEJhdHRlcnlNYW5hZ2VyX2gKKyNkZWZpbmUgQmF0
dGVyeU1hbmFnZXJfaAorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQmF0dGVyeVN0YXR1cy5oIgorI2luY2x1ZGUg
IkV2ZW50VGFyZ2V0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeUNv
bnRyb2xsZXI7CitjbGFzcyBOYXZpZ2F0b3I7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OworCitjbGFzcyBCYXR0ZXJ5TWFuYWdlciA6IHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1Ymxp
YyBSZWZDb3VudGVkPEJhdHRlcnlNYW5hZ2VyPiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5CYXR0ZXJ5TWFuYWdlcigpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEJhdHRlcnlNYW5hZ2VyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE5hdmlnYXRv
ciopOworCisgICAgLy8gRXZlbnRUYXJnZXQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCBj
b25zdCBXVEY6OkF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JCYXR0ZXJ5TWFuYWdlcjsgfQorICAgIHZpcnR1YWwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CisKKyAgICBi
b29sIGNoYXJnaW5nKCk7CisgICAgZG91YmxlIGNoYXJnaW5nVGltZSgpOworICAgIGRvdWJsZSBk
aXNjaGFyZ2luZ1RpbWUoKTsKKyAgICBkb3VibGUgbGV2ZWwoKTsKKworICAgIERFRklORV9BVFRS
SUJVVEVfRVZFTlRfTElTVEVORVIoY2hhcmdpbmdjaGFuZ2UpOworICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIoY2hhcmdpbmd0aW1lY2hhbmdlKTsKKyAgICBERUZJTkVfQVRUUklC
VVRFX0VWRU5UX0xJU1RFTkVSKGRpc2NoYXJnaW5ndGltZWNoYW5nZSk7CisgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihsZXZlbGNoYW5nZSk7CisKKyAgICB2b2lkIGRpZENoYW5n
ZUJhdHRlcnlTdGF0dXMoUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1
cz4pOworICAgIHZvaWQgYmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKSB7IG1fYmF0dGVyeUNv
bnRyb2xsZXIgPSAwOyB9CisKKyAgICB1c2luZyBSZWZDb3VudGVkPEJhdHRlcnlNYW5hZ2VyPjo6
cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8QmF0dGVyeU1hbmFnZXI+OjpkZXJlZjsKKworICAg
IC8vIEFjdGl2ZURPTU9iamVjdCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgY2Fu
U3VzcGVuZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVu
ZChSZWFzb25Gb3JTdXNwZW5zaW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCk7CisgICAg
dmlydHVhbCB2b2lkIHN0b3AoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRXZlbnRUYXJn
ZXREYXRhKiBldmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0K
KyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkgeyBy
ZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CisKK3ByaXZhdGU6CisgICAgQmF0dGVyeU1hbmFn
ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE5hdmlnYXRvciopOworCisgICAgLy8gRXZlbnRU
YXJnZXQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkg
eyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigp
OyB9CisKKyAgICBCYXR0ZXJ5Q29udHJvbGxlciogbV9iYXR0ZXJ5Q29udHJvbGxlcjsKKyAgICBF
dmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CisgICAgUmVmUHRyPEJhdHRlcnlTdGF0
dXM+IG1fYmF0dGVyeVN0YXR1czsKK307CisKK30KKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVT
CisjZW5kaWYgLy8gQmF0dGVyeU1hbmFnZXJfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lNTUyZGYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmlkbApAQCAtMCwwICsxLDUwIEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKK21vZHVs
ZSB3aW5kb3cgeworCisgICAgLy8gaHR0cDovL2Rldi53My5vcmcvMjAwOS9kYXAvc3lzdGVtLWlu
Zm8vYmF0dGVyeS1zdGF0dXMuaHRtbAorICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlv
bmFsPUJBVFRFUllfU1RBVFVTLAorICAgICAgICBBY3RpdmVET01PYmplY3QsCisgICAgICAgIEV2
ZW50VGFyZ2V0CisgICAgIF0gQmF0dGVyeU1hbmFnZXIgeworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgYm9vbGVhbiBjaGFyZ2luZzsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGRvdWJs
ZSBjaGFyZ2luZ1RpbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgZGlzY2hh
cmdpbmdUaW1lOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIGxldmVsOworCisg
ICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY2hhcmdpbmdjaGFuZ2U7CisgICAgICAg
IGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY2hhcmdpbmd0aW1lY2hhbmdlOworICAgICAgICBh
dHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmRpc2NoYXJnaW5ndGltZWNoYW5nZTsKKyAgICAgICAg
YXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25sZXZlbGNoYW5nZTsKKworICAgICAgICAvLyBFdmVu
dFRhcmdldCBpbnRlcmZhY2UKKyAgICAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0
cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5l
ciBsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0g
Ym9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGlu
IERPTVN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZl
bnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IFtPcHRpb25hbF0gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRj
aEV2ZW50KGluIEV2ZW50IGV2dCkKKyAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7
CisgICAgfTsKKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRl
cnkvQmF0dGVyeVN0YXR1cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0
dGVyeVN0YXR1cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmNTMw
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0
ZXJ5U3RhdHVzLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCYXR0ZXJ5U3RhdHVzLmgiCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisK
KyNpbmNsdWRlIDxsaW1pdHM+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxC
YXR0ZXJ5U3RhdHVzPiBCYXR0ZXJ5U3RhdHVzOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQmF0dGVyeVN0YXR1cyk7Cit9CisKK1Bhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4g
QmF0dGVyeVN0YXR1czo6Y3JlYXRlKGJvb2wgY2hhcmdpbmcsIGRvdWJsZSBjaGFyZ2luZ1RpbWUs
IGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZlbCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEJhdHRlcnlTdGF0dXMoY2hhcmdpbmcsIGNoYXJnaW5nVGltZSwgZGlzY2hhcmdp
bmdUaW1lLCBsZXZlbCkpOworfQorCitCYXR0ZXJ5U3RhdHVzOjpCYXR0ZXJ5U3RhdHVzKCkKKyAg
ICA6IG1fY2hhcmdpbmcodHJ1ZSkKKyAgICAsIG1fY2hhcmdpbmdUaW1lKDApCisgICAgLCBtX2Rp
c2NoYXJnaW5nVGltZShzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCisg
ICAgLCBtX2xldmVsKDEpCit7Cit9CisKK0JhdHRlcnlTdGF0dXM6OkJhdHRlcnlTdGF0dXMoYm9v
bCBjaGFyZ2luZywgZG91YmxlIGNoYXJnaW5nVGltZSwgZG91YmxlIGRpc2NoYXJnaW5nVGltZSwg
ZG91YmxlIGxldmVsKQorICAgIDogbV9jaGFyZ2luZyhjaGFyZ2luZykKKyAgICAsIG1fY2hhcmdp
bmdUaW1lKGNoYXJnaW5nVGltZSkKKyAgICAsIG1fZGlzY2hhcmdpbmdUaW1lKGRpc2NoYXJnaW5n
VGltZSkKKyAgICAsIG1fbGV2ZWwobGV2ZWwpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5U3RhdHVzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2JhdHRlcnkvQmF0dGVyeVN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjJjNDUxYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2JhdHRlcnkvQmF0dGVyeVN0YXR1cy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0
ZXJ5U3RhdHVzX2gKKyNkZWZpbmUgQmF0dGVyeVN0YXR1c19oCisKKyNpZiBFTkFCTEUoQkFUVEVS
WV9TVEFUVVMpCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmF0dGVyeVN0YXR1
cyA6IHB1YmxpYyBSZWZDb3VudGVkPEJhdHRlcnlTdGF0dXM+IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxCYXR0ZXJ5U3RhdHVzPiBjcmVhdGUoYm9vbCBjaGFyZ2luZywgZG91YmxlIGNoYXJnaW5n
VGltZSwgZG91YmxlIGRpc2NoYXJnaW5nVGltZSwgZG91YmxlIGxldmVsKTsKKworICAgIGJvb2wg
Y2hhcmdpbmcoKSBjb25zdCB7IHJldHVybiBtX2NoYXJnaW5nOyB9CisgICAgZG91YmxlIGNoYXJn
aW5nVGltZSgpIGNvbnN0ICB7IHJldHVybiBtX2NoYXJnaW5nVGltZTsgfQorICAgIGRvdWJsZSBk
aXNjaGFyZ2luZ1RpbWUoKSBjb25zdCAgeyByZXR1cm4gbV9kaXNjaGFyZ2luZ1RpbWU7IH0KKyAg
ICBkb3VibGUgbGV2ZWwoKSBjb25zdCAgeyByZXR1cm4gbV9sZXZlbDsgfQorCitwcml2YXRlOgor
ICAgIEJhdHRlcnlTdGF0dXMoKTsKKyAgICBCYXR0ZXJ5U3RhdHVzKGJvb2wgY2hhcmdpbmcsIGRv
dWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZlbCk7
CisKKyAgICBib29sIG1fY2hhcmdpbmc7CisgICAgZG91YmxlIG1fY2hhcmdpbmdUaW1lOworICAg
IGRvdWJsZSBtX2Rpc2NoYXJnaW5nVGltZTsKKyAgICBkb3VibGUgbV9sZXZlbDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJBVFRFUllfU1RBVFVTCisjZW5kaWYg
Ly8gQmF0dGVyeVN0YXR1c19oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
YmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0
dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xYjY3MjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9i
YXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuY3BwCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk5hdmlnYXRvckJhdHRlcnkuaCIKKworI2lmIEVOQUJMRShC
QVRURVJZX1NUQVRVUykKKworI2luY2x1ZGUgIkJhdHRlcnlDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiQmF0dGVyeU1hbmFnZXIuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKKyNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTmF2aWdh
dG9yQmF0dGVyeTo6TmF2aWdhdG9yQmF0dGVyeSgpCit7Cit9CisKK05hdmlnYXRvckJhdHRlcnk6
On5OYXZpZ2F0b3JCYXR0ZXJ5KCkKK3sKK30KKworQmF0dGVyeU1hbmFnZXIqIE5hdmlnYXRvckJh
dHRlcnk6OndlYmtpdEJhdHRlcnkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTmF2
aWdhdG9yKiBuYXZpZ2F0b3IpCit7CisgICAgTmF2aWdhdG9yQmF0dGVyeSogbmF2aWdhdG9yQmF0
dGVyeSA9IE5hdmlnYXRvckJhdHRlcnk6OmZyb20obmF2aWdhdG9yKTsKKyAgICBpZiAoIW5hdmln
YXRvckJhdHRlcnktPm1fYmF0dGVyeU1hbmFnZXIpCisgICAgICAgIG5hdmlnYXRvckJhdHRlcnkt
Pm1fYmF0dGVyeU1hbmFnZXIgPSBCYXR0ZXJ5TWFuYWdlcjo6Y3JlYXRlKGNvbnRleHQsIG5hdmln
YXRvcik7CisgICAgcmV0dXJuIG5hdmlnYXRvckJhdHRlcnktPm1fYmF0dGVyeU1hbmFnZXIuZ2V0
KCk7Cit9CisKK05hdmlnYXRvckJhdHRlcnkqIE5hdmlnYXRvckJhdHRlcnk6OmZyb20oTmF2aWdh
dG9yKiBuYXZpZ2F0b3IpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IG5hbWUsICgiTmF2aWdhdG9yQmF0dGVyeSIpKTsKKyAgICBOYXZpZ2F0b3JCYXR0ZXJ5KiBzdXBw
bGVtZW50ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdG9yQmF0dGVyeSo+KFN1cHBsZW1lbnQ8TmF2aWdh
dG9yPjo6ZnJvbShuYXZpZ2F0b3IsIG5hbWUpKTsKKyAgICBpZiAoIXN1cHBsZW1lbnQpIHsKKyAg
ICAgICAgc3VwcGxlbWVudCA9IG5ldyBOYXZpZ2F0b3JCYXR0ZXJ5KCk7CisgICAgICAgIHByb3Zp
ZGVUbyhuYXZpZ2F0b3IsIG5hbWUsIGFkb3B0UHRyKHN1cHBsZW1lbnQpKTsKKyAgICB9CisgICAg
cmV0dXJuIHN1cHBsZW1lbnQ7Cit9CisKK0JhdHRlcnlNYW5hZ2VyKiBOYXZpZ2F0b3JCYXR0ZXJ5
OjpiYXR0ZXJ5TWFuYWdlcigpCit7CisgICAgcmV0dXJuIG1fYmF0dGVyeU1hbmFnZXIuZ2V0KCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShCQVRURVJZ
X1NUQVRVUykKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
TmF2aWdhdG9yQmF0dGVyeS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmln
YXRvckJhdHRlcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmFlOWRm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L05hdmln
YXRvckJhdHRlcnkuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgTmF2aWdhdG9yQmF0dGVy
eV9oCisjZGVmaW5lIE5hdmlnYXRvckJhdHRlcnlfaAorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RB
VFVTKQorCisjaW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBCYXR0ZXJ5TWFuYWdlcjsKK2NsYXNzIE5hdmlnYXRvcjsKK2NsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIE5hdmlnYXRvckJhdHRlcnkgOiBwdWJsaWMgU3Vw
cGxlbWVudDxOYXZpZ2F0b3I+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5OYXZpZ2F0b3JCYXR0
ZXJ5KCk7CisKKyAgICBzdGF0aWMgTmF2aWdhdG9yQmF0dGVyeSogZnJvbShOYXZpZ2F0b3IqKTsK
KworICAgIHN0YXRpYyBCYXR0ZXJ5TWFuYWdlciogd2Via2l0QmF0dGVyeShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgTmF2aWdhdG9yKik7CisgICAgQmF0dGVyeU1hbmFnZXIqIGJhdHRlcnlNYW5h
Z2VyKCk7CisKKyBwcml2YXRlOgorICAgIE5hdmlnYXRvckJhdHRlcnkoKTsKKworICAgIFJlZlB0
cjxCYXR0ZXJ5TWFuYWdlcj4gbV9iYXR0ZXJ5TWFuYWdlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworI2VuZGlmIC8v
IE5hdmlnYXRvckJhdHRlcnlfaAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
YmF0dGVyeS9OYXZpZ2F0b3JCYXR0ZXJ5LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi42Y2RiNzgzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9iYXR0ZXJ5L05hdmlnYXRvckJhdHRlcnkuaWRsCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworbW9kdWxl
IHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDYWxsV2l0aD1TY3JpcHRFeGVj
dXRpb25Db250ZXh0LAorICAgICAgICBDb25kaXRpb25hbD1CQVRURVJZX1NUQVRVUywKKyAgICAg
ICAgU3VwcGxlbWVudGFsPU5hdmlnYXRvcgorICAgIF0gTmF2aWdhdG9yQmF0dGVyeSB7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBCYXR0ZXJ5TWFuYWdlciB3ZWJraXRCYXR0ZXJ5OworICAg
IH07CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKaW5kZXggZGJmYzRmOS4uNmUyMmI3MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCkBAIC00MSw2ICs0MSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBtYWNybyhibHVyKSBcCiAgICAgbWFjcm8oY2FjaGVkKSBcCiAgICAgbWFjcm8o
Y2hhbmdlKSBcCisgICAgbWFjcm8oY2hhcmdpbmdjaGFuZ2UpIFwKKyAgICBtYWNybyhjaGFyZ2lu
Z3RpbWVjaGFuZ2UpIFwKICAgICBtYWNybyhjaGVja2luZykgXAogICAgIG1hY3JvKGNsaWNrKSBc
CiAgICAgbWFjcm8oY2xvc2UpIFwKQEAgLTU1LDYgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIG1hY3JvKGRibGNsaWNrKSBcCiAgICAgbWFjcm8oZGV2aWNlbW90aW9uKSBcCiAgICAg
bWFjcm8oZGV2aWNlb3JpZW50YXRpb24pIFwKKyAgICBtYWNybyhkaXNjaGFyZ2luZ3RpbWVjaGFu
Z2UpIFwKICAgICBtYWNybyhkaXNwbGF5KSBcCiAgICAgbWFjcm8oZG93bmxvYWRpbmcpIFwKICAg
ICBtYWNybyhkcmFnKSBcCkBAIC03NCw2ICs3Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBtYWNybyhrZXlkb3duKSBcCiAgICAgbWFjcm8oa2V5cHJlc3MpIFwKICAgICBtYWNybyhrZXl1
cCkgXAorICAgIG1hY3JvKGxldmVsY2hhbmdlKSBcCiAgICAgbWFjcm8obG9hZCkgXAogICAgIG1h
Y3JvKGxvYWRzdGFydCkgXAogICAgIG1hY3JvKG1lc3NhZ2UpIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldEZhY3RvcnkuaW4gYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXRGYWN0b3J5LmluCmluZGV4IGM4ZDI3NmUuLjIxMDk3N2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldEZhY3RvcnkuaW4KKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbgpAQCAtMSw2ICsxLDcgQEAKIG5hbWVzcGFj
ZT0iRXZlbnRUYXJnZXQiCiAKIEF1ZGlvQ29udGV4dCBjb25kaXRpb25hbD1XRUJfQVVESU8KK0Jh
dHRlcnlNYW5hZ2VyIGNvbmRpdGlvbmFsPUJBVFRFUllfU1RBVFVTCiBEZWRpY2F0ZWRXb3JrZXJD
b250ZXh0IGNvbmRpdGlvbmFsPVdPUktFUlMKIERPTUFwcGxpY2F0aW9uQ2FjaGUKIERPTVdpbmRv
dwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGMyOTM2ODYuLjYyMmI2NGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTY3LDYgKzY3LDEwIEBACiAj
aW5jbHVkZSAiQ29sb3JDaG9vc2VyLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShCQVRURVJZX1NU
QVRVUykKKyNpbmNsdWRlICJCYXR0ZXJ5Q29udHJvbGxlci5oIgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RhdGljIGJvb2wgbWFya2VyVHlwZXNGcm9tKGNvbnN0IFN0cmluZyYg
bWFya2VyVHlwZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzJiByZXN1bHQpCkBAIC03MTQs
NCArNzE4LDIyIEBAIHZvaWQgSW50ZXJuYWxzOjplbWl0SW5zcGVjdG9yRGlkQ2FuY2VsRnJhbWUo
KQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FuY2VsRnJhbWUoZnJhbWUoKS0+
cGFnZSgpKTsKIH0KIAordm9pZCBJbnRlcm5hbHM6OnNldEJhdHRlcnlTdGF0dXMoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjaGFyZ2luZywgZG91Ymxl
IGNoYXJnaW5nVGltZSwgZG91YmxlIGRpc2NoYXJnaW5nVGltZSwgZG91YmxlIGxldmVsLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgp
KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorICAgIEJhdHRlcnlDb250cm9sbGVy
Ojpmcm9tKGRvY3VtZW50LT5wYWdlKCkpLT5kaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGV2ZW50VHlw
ZSwgQmF0dGVyeVN0YXR1czo6Y3JlYXRlKGNoYXJnaW5nLCBjaGFyZ2luZ1RpbWUsIGRpc2NoYXJn
aW5nVGltZSwgbGV2ZWwpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGV2ZW50VHlwZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGNoYXJnaW5nKTsKKyAgICBVTlVTRURfUEFSQU0oY2hhcmdpbmdUaW1l
KTsKKyAgICBVTlVTRURfUEFSQU0oZGlzY2hhcmdpbmdUaW1lKTsKKyAgICBVTlVTRURfUEFSQU0o
bGV2ZWwpOworI2VuZGlmCit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4
IDY3YzA5MjIuLjk3MTZhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtMTM2
LDYgKzEzNiw4IEBAIHB1YmxpYzoKIAogICAgIEludGVybmFsU2V0dGluZ3MqIHNldHRpbmdzKCkg
Y29uc3QgeyByZXR1cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogCisgICAgdm9pZCBzZXRCYXR0ZXJ5
U3RhdHVzKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2hhcmdpbmcs
IGRvdWJsZSBjaGFyZ2luZ1RpbWUsIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUsIGRvdWJsZSBsZXZl
bCwgRXhjZXB0aW9uQ29kZSYpOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEludGVybmFscyhE
b2N1bWVudCopOwogICAgIERvY3VtZW50TWFya2VyKiBtYXJrZXJBdChOb2RlKiwgY29uc3QgU3Ry
aW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IGQ5ODU2YWQuLjcyYmY5MDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTExMCw2ICsxMTAsMTAgQEAgbW9kdWxlIHdp
bmRvdyB7CiAgICAgICAgIHZvaWQgZW1pdEluc3BlY3RvckRpZENhbmNlbEZyYW1lKCk7CiAKICAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEludGVybmFsU2V0dGluZ3Mgc2V0dGluZ3M7CisKKyNp
ZiBkZWZpbmVkKEVOQUJMRV9CQVRURVJZX1NUQVRVUykgJiYgRU5BQkxFX0JBVFRFUllfU1RBVFVT
CisgICAgICAgIHZvaWQgc2V0QmF0dGVyeVN0YXR1cyhpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4g
RE9NU3RyaW5nIGV2ZW50VHlwZSwgaW4gYm9vbGVhbiBjaGFyZ2luZywgaW4gZG91YmxlIGNoYXJn
aW5nVGltZSwgaW4gZG91YmxlIGRpc2NoYXJnaW5nVGltZSwgaW4gZG91YmxlIGxldmVsKSByYWlz
ZXMgKERPTUV4Y2VwdGlvbik7CisjZW5kaWYKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRmMWNm
NTguLjcyNzhlZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDMtMTUgIEtpaG9u
ZyBLd29uICA8a2lob25nLmt3b25Ac2Ftc3VuZy5jb20+CisKKyAgICAgICAgU3VwcG9ydCBmb3Ig
QmF0dGVyeSBTdGF0dXMgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MjY5OAorCisgICAgICAgIEFkZCBpbmNsdWRlIGRpcmVjdG9yeSBhbmQgZmls
ZS4KKyAgICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvYmF0dGVyeS1zdGF0dXMvCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtl
OgorCiAyMDEyLTAzLTExICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAog
ICAgICAgICBVcGRhdGUgaG93IHRoZSBXZWIgSW5zcGVjdG9yIHJlc291cmNlcyBhcmUgbG9hZGVk
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMWRlYmUzNi4uMTU4NDEzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtRWZsLmNtYWtlCkBAIC0xMjYsNiArMTI2LDEwIEBAIElGIChFTkFCTEVfVklCUkFUSU9O
KQogICAgICkKIEVORElGICgpCiAKK0lGIChFTkFCTEVfQkFUVEVSWV9TVEFUVVMpCisgICAgTElT
VChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMgJHtXRUJDT1JFX0RJUn0vTW9kdWxl
cy9iYXR0ZXJ5KQorICAgIExJU1QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTIGVmbC9XZWJDb3JlU3Vw
cG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcCkKK0VORElGICgpCiAKIFNFVChXZWJLaXRfVEhFTUVf
REVGSU5JVElPTiAiIikKIElGIChFTkFCTEVfUFJPR1JFU1NfVEFHKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmlu
ZGV4IDMwNjc3NWEuLjBlZjc0MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAor
MjAxMi0wMy0xNSAgS2lob25nIEt3b24gIDxraWhvbmcua3dvbkBzYW1zdW5nLmNvbT4KKworICAg
ICAgICBTdXBwb3J0IGZvciBCYXR0ZXJ5IFN0YXR1cyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4CisKKyAgICAgICAgQWRkIEJhdHRlcnlD
bGllbnRFZmwgY2xhc3MgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBsYXlvdXQgdGVzdHMgbm93Lgor
ICAgICAgICBCYXR0ZXJ5Q2xpZW50RWZsIGNsYXNzIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZCBp
biB0aGlzIHBhdGNoLgorICAgICAgICAoSXQgd2lsbCBiZSBjb21wbGV0ZWQgYnkgb3RoZXIgcGF0
Y2ggYXMgbmVjZXNzYXJ5IGluIHRoZSBFZmwgcG9ydC4pCisgICAgICAgIGh0dHA6Ly93d3cudzMu
b3JnL1RSL2JhdHRlcnktc3RhdHVzLworCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGgu
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRFZmw6
OkJhdHRlcnlDbGllbnRFZmwpOgorICAgICAgICAoV2ViQ29yZTo6QmF0dGVyeUNsaWVudEVmbDo6
c2V0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpzdGFy
dFVwZGF0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRFZmw6OnN0b3BVcGRh
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpiYXR0ZXJ5Q29udHJv
bGxlckRlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXR0ZXJ5Q2xpZW50RWZsOjpzZXRC
YXR0ZXJ5U3RhdHVzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZs
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCYXR0ZXJ5Q2xpZW50RWZs
KToKKyAgICAgICAgKFdlYkNvcmU6OkJhdHRlcnlDbGllbnRFZmw6On5CYXR0ZXJ5Q2xpZW50RWZs
KToKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX0V3a19WaWV3X1ByaXZh
dGVfRGF0YSk6CisgICAgICAgIChfZXdrX3ZpZXdfcHJpdl9uZXcpOgorCiAyMDEyLTAzLTEzICBK
b24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBTZXBhcmF0ZSBOT1RJRklDQVRJ
T05TIGFuZCBMRUdBQ1lfTk9USUZJQ0FUSU9OUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9l
ZmwvV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9XZWJDb3JlU3VwcG9ydC9CYXR0ZXJ5Q2xpZW50RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44OGRiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9lZmwvV2ViQ29yZVN1cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5jcHAKQEAgLTAsMCArMSw2MiBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmF0dGVyeUNsaWVudEVmbC5oIgor
CisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCisjaW5jbHVkZSAiQmF0dGVyeUNvbnRyb2xs
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCYXR0ZXJ5Q2xpZW50RWZsOjpCYXR0ZXJ5
Q2xpZW50RWZsKCkKKyAgICA6IG1fY29udHJvbGxlcigwKQoreworfQorCit2b2lkIEJhdHRlcnlD
bGllbnRFZmw6OnNldENvbnRyb2xsZXIoQmF0dGVyeUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7
CisgICAgbV9jb250cm9sbGVyID0gY29udHJvbGxlcjsKK30KKwordm9pZCBCYXR0ZXJ5Q2xpZW50
RWZsOjpzdGFydFVwZGF0aW5nKCkKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQg
Zm9yIGdldHRpbmcgYmF0dGVyeSBzdGF0dXMgdG8gdGhlIGVmbCBwb3J0LgorfQorCit2b2lkIEJh
dHRlcnlDbGllbnRFZmw6OnN0b3BVcGRhdGluZygpCit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8g
aW1wbGVtZW50IGZvciBnZXR0aW5nIGJhdHRlcnkgc3RhdHVzIHRvIHRoZSBlZmwgcG9ydAorfQor
Cit2b2lkIEJhdHRlcnlDbGllbnRFZmw6OmJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCkKK3sK
KyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBCYXR0ZXJ5Q2xpZW50RWZsOjpzZXRCYXR0ZXJ5
U3RhdHVzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlT
dGF0dXM+IGJhdHRlcnlTdGF0dXMpCit7CisgICAgbV9jb250cm9sbGVyLT5kaWRDaGFuZ2VCYXR0
ZXJ5U3RhdHVzKGV2ZW50VHlwZSwgYmF0dGVyeVN0YXR1cyk7Cit9CisKK30KKworI2VuZGlmIC8v
IEJBVFRFUllfU1RBVFVTCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVT
dXBwb3J0L0JhdHRlcnlDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBw
b3J0L0JhdHRlcnlDbGllbnRFZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hNGY3MWM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvQmF0dGVyeUNsaWVudEVmbC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBCYXR0
ZXJ5Q2xpZW50RWZsX2gKKyNkZWZpbmUgQmF0dGVyeUNsaWVudEVmbF9oCisKKyNpZiBFTkFCTEUo
QkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50LmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
QmF0dGVyeUNvbnRyb2xsZXI7CitjbGFzcyBCYXR0ZXJ5U3RhdHVzOworCitjbGFzcyBCYXR0ZXJ5
Q2xpZW50RWZsIDogcHVibGljIEJhdHRlcnlDbGllbnQgeworcHVibGljOgorICAgIEJhdHRlcnlD
bGllbnRFZmwoKTsKKyAgICB+QmF0dGVyeUNsaWVudEVmbCgpIHsgfTsKKworICAgIHZpcnR1YWwg
dm9pZCBzZXRDb250cm9sbGVyKEJhdHRlcnlDb250cm9sbGVyKik7CisgICAgdmlydHVhbCB2b2lk
IHN0YXJ0VXBkYXRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCk7CisgICAg
dmlydHVhbCB2b2lkIGJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCk7CisKKyAgICB2b2lkIHNl
dEJhdHRlcnlTdGF0dXMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8
QmF0dGVyeVN0YXR1cz4pOworCitwcml2YXRlOgorICAgIEJhdHRlcnlDb250cm9sbGVyKiBtX2Nv
bnRyb2xsZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBCQVRURVJZX1NUQVRVUworI2VuZGlmIC8v
IEJhdHRlcnlDbGllbnRFZmxfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAppbmRleCAx
N2E2ZWEwLi43YTUyY2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAgLTc0LDYg
Kzc0LDEwIEBACiAjaW5jbHVkZSAiVmlicmF0aW9uQ2xpZW50RWZsLmgiCiAjZW5kaWYKIAorI2lm
IEVOQUJMRShCQVRURVJZX1NUQVRVUykKKyNpbmNsdWRlICJCYXR0ZXJ5Q2xpZW50RWZsLmgiCisj
ZW5kaWYKKwogc3RhdGljIGNvbnN0IGZsb2F0IHpvb21NaW5pbXVtID0gMC4wNTsKIHN0YXRpYyBj
b25zdCBmbG9hdCB6b29tTWF4aW11bSA9IDQuMDsKIApAQCAtNjE4LDYgKzYyMiwxMCBAQCBzdGF0
aWMgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21h
cnRfRGF0YSogc21hcnREYXRhKQogICAgIFdlYkNvcmU6OnByb3ZpZGVWaWJyYXRpb25Ubyhwcml2
LT5wYWdlLmdldCgpLCBuZXcgV2ViQ29yZTo6VmlicmF0aW9uQ2xpZW50RWZsKHNtYXJ0RGF0YS0+
c2VsZikpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisgICAgV2ViQ29y
ZTo6cHJvdmlkZUJhdHRlcnlUbyhwcml2LT5wYWdlLmdldCgpLCBuZXcgV2ViQ29yZTo6QmF0dGVy
eUNsaWVudEVmbCk7CisjZW5kaWYKKwogICAgIHByaXYtPnBhZ2VTZXR0aW5ncyA9IHByaXYtPnBh
Z2UtPnNldHRpbmdzKCk7CiAKICAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy53aWR0aCA9IFdl
YkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Y21ha2UvT3B0aW9uc0VmbC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCmlu
ZGV4IDQwZTg3MzAuLjQxZjUwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZs
LmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCkBAIC02NCw2ICs2NCw3
IEBAIFNFVChUSEVNRV9CSU5BUllfRElSICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0L2VmbC9E
ZWZhdWx0VGhlbWUpCiAKIFNFVChWRVJTSU9OX1NDUklQVCAiLVdsLC0tdmVyc2lvbi1zY3JpcHQs
JHtDTUFLRV9NT0RVTEVfUEFUSH0vZWZsc3ltYm9scy5maWx0ZXIiKQogCitXRUJLSVRfRkVBVFVS
RShFTkFCTEVfQkFUVEVSWV9TVEFUVVMgIkVuYWJsZSBiYXR0ZXJ5IHN0YXR1cyBhcGkiIERFRkFV
TFQgT04pCiBXRUJLSVRfRkVBVFVSRShFTkFCTEVfQkxPQiAiRW5hYmxlIGJsb2Igc2xpY2UiIERF
RkFVTFQgT0ZGKQogV0VCS0lUX0ZFQVRVUkUoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HICJFbmFi
bGUgY2hhbm5lbCBtZXNzYWdpbmciIERFRkFVTFQgT04pCiBXRUJLSVRfRkVBVFVSRShFTkFCTEVf
REFUQUxJU1QgIkVuYWJsZSBkYXRhbGlzdCIgREVGQVVMVCBPTikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9jbWFrZWNvbmZpZy5oLmNtYWtlIGIvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKaW5kZXgg
Y2UyMTZhYi4uODJjYWY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UK
KysrIGIvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UKQEAgLTYsNiArNiw3IEBACiAKIAogI2Nt
YWtlZGVmaW5lMDEgRU5BQkxFX0FTX0lNQUdFCisjY21ha2VkZWZpbmUwMSBFTkFCTEVfQkFUVEVS
WV9TVEFUVVMKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9CTE9CCiAjY21ha2VkZWZpbmUwMSBFTkFC
TEVfQ0hBTk5FTF9NRVNTQUdJTkcKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9EQVRBTElTVApkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDViZDE5ZDYu
LmQ0OWYzZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0xNSAgS2lob25nIEt3b24gIDxraWhvbmcua3dv
bkBzYW1zdW5nLmNvbT4KKworICAgICAgICBTdXBwb3J0IGZvciBCYXR0ZXJ5IFN0YXR1cyBBUEkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjk4CisK
KyAgICAgICAgQWRkIGluY2x1ZGUgZGlyZWN0b3J5IGFuZCBmaWxlLgorICAgICAgICBodHRwOi8v
d3d3LnczLm9yZy9UUi9iYXR0ZXJ5LXN0YXR1cy8KKworICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IEJhcnRoLgorCisgICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6CisKIDIwMTItMDMtMTUg
IEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBUaGUgY29tbWl0LXF1
ZXVlIHNob3VsZCBmYXN0LXRyYWNrIHBhdGNoZXMgdGhhdCBoYXZlIGFscmVhZHkgcGFzc2VkIHRo
ZSB0ZXN0aW5nIEVXUyBib3RzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtp
dCBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CmluZGV4IGMyNzZmNzUuLjJmNjY4YTMgMTAw
NzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1NjcmlwdHMv
YnVpbGQtd2Via2l0CkBAIC03MCw2ICs3MCw3IEBAIG15ICgKICAgICAkdGhyZWVEUmVuZGVyaW5n
U3VwcG9ydCwKICAgICAkYWNjZWxlcmF0ZWQyZENhbnZhc1N1cHBvcnQsCiAgICAgJGFuaW1hdGlv
bkFQSVN1cHBvcnQsCisgICAgJGJhdHRlcnlzdGF0dXNBUElTdXBwb3J0LAogICAgICRibG9iU3Vw
cG9ydCwKICAgICAkY2hhbm5lbE1lc3NhZ2luZ1N1cHBvcnQsCiAgICAgJGNvdmVyYWdlU3VwcG9y
dCwKQEAgLTE2MCw2ICsxNjEsOSBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAgeyBvcHRpb24gPT4g
ImFuaW1hdGlvbi1hcGkiLCBkZXNjID0+ICJUb2dnbGUgYW5pbWF0aW9uIEFQSSBzdXBwb3J0IiwK
ICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0FOSU1BVElPTl9BUEkiLCBkZWZhdWx0ID0+IGlzQmxh
Y2tCZXJyeSgpLCB2YWx1ZSA9PiBcJGFuaW1hdGlvbkFQSVN1cHBvcnQgfSwKIAorICAgIHsgb3B0
aW9uID0+ICJiYXR0ZXJ5LXN0YXR1cy1hcGkiLCBkZXNjID0+ICJUb2dnbGUgYmF0dGVyeSBzdGF0
dXMgQVBJIHN1cHBvcnQiLAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfQkFUVEVSWV9TVEFUVVMi
LCBkZWZhdWx0ID0+IGlzRWZsKCksIHZhbHVlID0+IFwkYmF0dGVyeXN0YXR1c0FQSVN1cHBvcnQg
fSwKKwogICAgIHsgb3B0aW9uID0+ICJibG9iIiwgZGVzYyA9PiAiVG9nZ2xlIEJsb2Igc3VwcG9y
dCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9CTE9CIiwgZGVmYXVsdCA9PiAoaXNBcHBsZU1h
Y1dlYktpdCgpIHx8IGlzR3RrKCkgfHwgaXNDaHJvbWl1bSgpIHx8IGlzQmxhY2tCZXJyeSgpKSwg
dmFsdWUgPT4gXCRibG9iU3VwcG9ydCB9LAogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>