<?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>91290</bug_id>
          
          <creation_ts>2012-07-13 15:11:48 -0700</creation_ts>
          <short_desc>Support an event propagation across seamless iframes.</short_desc>
          <delta_ts>2022-08-07 10:15:38 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>92613</dependson>
    
    <dependson>92614</dependson>
    
    <dependson>92621</dependson>
    
    <dependson>92625</dependson>
    
    <dependson>93322</dependson>
    
    <dependson>93452</dependson>
    
    <dependson>93678</dependson>
    
    <dependson>93696</dependson>
    
    <dependson>93959</dependson>
          <blocked>45950</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ojan Vafai">ojan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>arv</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>hayato</cc>
    
    <cc>morrita</cc>
    
    <cc>philn</cc>
    
    <cc>shinyak</cc>
    
    <cc>syoichi</cc>
    
    <cc>tasak</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>669479</commentid>
    <comment_count>0</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-13 15:11:48 -0700</bug_when>
    <thetext>See http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-July/036584.html. Off-thread, it sounds like Hixie is fine with this conceptually and will spec whatever we implement.

We should implement this using http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#event-retargeting. The only thing we need to add to that is that mouse events need to have their coordinate space appropriately changed when crossing the document boundary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669568</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-07-13 16:31:57 -0700</bug_when>
    <thetext>When you get a moment, if you could write some sort of test case, that would help me better understand what you&apos;re asking me to implement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669569</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-07-13 16:32:23 -0700</bug_when>
    <thetext>It doesn&apos;t have to be exotic, just something I can make pass as a v1.  Obviously I&apos;ll have to write more from the spec myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671755</commentid>
    <comment_count>3</comment_count>
      <attachid>152875</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-17 16:54:31 -0700</bug_when>
    <thetext>Created attachment 152875
click event test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671756</commentid>
    <comment_count>4</comment_count>
      <attachid>152876</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-17 16:55:41 -0700</bug_when>
    <thetext>Created attachment 152876
focus doesn&apos;t retarget test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671759</commentid>
    <comment_count>5</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-17 16:57:23 -0700</bug_when>
    <thetext>Made a couple clunky testcases. Hopefully it&apos;s enough to illustrate.

See http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-July/036644.html for how I think this should work and Erik&apos;s followup that we shouldn&apos;t refire events where target and relatedTarget are in the same document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671992</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-07-17 22:43:48 -0700</bug_when>
    <thetext>Thank you Ojan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672402</commentid>
    <comment_count>7</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-18 08:37:35 -0700</bug_when>
    <thetext>See also http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-July/036647.html. We should probably reuse the event retargeting stuff from web components here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673315</commentid>
    <comment_count>8</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-07-19 01:58:12 -0700</bug_when>
    <thetext>Thank you, Ojan.

Let me think how to implement it.

The complexity of event-retargeting spec in Shadow DOM is caused by distributed nodes.
Re-targeting events in seamless iframe should not be complex in concept because that does not have such a distributed node. But we should be careful in its implementations.

Let me investigate further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677707</commentid>
    <comment_count>9</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-07-24 23:51:55 -0700</bug_when>
    <thetext>I think we can treat seamless iframe as Web Components conceptually in some cases:

A). Non-seamless iframe: No behavior change. Events should stop at iframe boundary definitely.

B). Cross-origin seamless iframe: iframe should act like a Web Component. Events should be re-targeted at boundary and propagate to the parent document.

C). Same-origin seamless iframe: There should not be boundary at iframe. Events should pass-through the iframe and propagate to parent document.

I&apos;d like to avoid adding dependency between WebComponents and seamless iframe spec as much as possible. Let me think further. If you have any opinion, that&apos;d be welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677711</commentid>
    <comment_count>10</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-07-24 23:56:33 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I think we can treat seamless iframe as Web Components conceptually in some cases:
&gt; 
&gt; A). Non-seamless iframe: No behavior change. Events should stop at iframe boundary definitely.
&gt; 
&gt; B). Cross-origin seamless iframe: iframe should act like a Web Component. Events should be re-targeted at boundary and propagate to the parent document.
&gt; 
&gt; C). Same-origin seamless iframe: There should not be boundary at iframe. Events should pass-through the iframe and propagate to parent document.
&gt; 
&gt; I&apos;d like to avoid adding dependency between WebComponents and seamless iframe spec as much as possible. Let me think further. If you have any opinion, that&apos;d be welcome.

I believe this is conceptually good. I think we should define both the event retargeting algorithm for iframe and web components in spec, since they should be separate. However, they can and should be compatible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677899</commentid>
    <comment_count>11</comment_count>
      <attachid>154321</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-07-25 04:14:10 -0700</bug_when>
    <thetext>Created attachment 154321
wip. Extends event ancestors across seamless iframes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678316</commentid>
    <comment_count>12</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-07-25 11:57:04 -0700</bug_when>
    <thetext>(In reply to comment #9) 
&gt; C). Same-origin seamless iframe: There should not be boundary at iframe. Events should pass-through the iframe and propagate to parent document.

If we do that you get issues where event.target.ownerDocument changes as you walk up the tree. You also get issues where the prototypes changes as you walk up. This all seems bad to me. We should reduce the multiple global, cross frame access and not add new APIs that depends on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678804</commentid>
    <comment_count>13</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-07-25 19:52:19 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #9) 
&gt; &gt; C). Same-origin seamless iframe: There should not be boundary at iframe. Events should pass-through the iframe and propagate to parent document.
&gt; 
&gt; If we do that you get issues where event.target.ownerDocument changes as you walk up the tree. You also get issues where the prototypes changes as you walk up. This all seems bad to me. We should reduce the multiple global, cross frame access and not add new APIs that depends on this.

Thank you for the comment. Although I have not fully understood issues, I am now thinking that we should re-target events on iframes boundary for seamless iframes whether its same origin or not.

I won&apos;t work on C until we understand every issues we get in C.
I&apos;d like to know what are the issues and its worth or not to try to solve using this bug entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681711</commentid>
    <comment_count>14</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-07-29 23:30:12 -0700</bug_when>
    <thetext>Let me explain my strategy  to implement event-propagation of seamless iframes:

1. Refactor current EventDispatcher so that we can call each event phase (CAPTURE, TARGET, BUBBLING) separately in event dispatching.
2. After that, I&apos;ll update the current EventDispatcher::ensureEventAncestor() so that we can pre-calculate every event ancestor nodes across seamless iframes.
3. After that, I&apos;ll update EventDispatcher::dispatchEvent (Maybe I&apos;ll introduce more *meta* EventDispatcher) so that we can propagate events across iframes.

Suppose we have the following HTML and seamless iframes.
--  doc.html
   &lt;A&gt;
      &lt;B&gt;
        &lt;iframe id=iframe1 seamless src=&quot;iframe1.html&quot;&gt;

-- iframe1.html
   &lt;C&gt;
      &lt;D&gt;
        &lt;iframe id=iframe2 seamless src=&quot;iframe2.html&quot;&gt;

-- iframe2.html
   &lt;E&gt;
      &lt;F&gt;

And &apos;click&apos; event is fired on node F.

We will dispatch events in the following order:
  1. A (capture)
  2. B (capture)
  3. C (capture)
  4. D (capture)
  5. E (capture)
  6. F (target)
  7. E (bubble)
  8. iframe2 (target) (target is re-targeted to iframe2)
  9. D (bubble) (target: iframe2)
  9. C (bubble) (target: iframe2)
 10. iframe1 (target) (target is re-targeted to iframe1)
 11. B (bubble) (target: iframe1)
 12. A (bubble) (target: iframe1)

Event objects will be created per Document. Which means node A and node B receive the same event object, but node A and node C don&apos;t receive the same event object.


Todo:
  1. Handle related target.
  2. Stop some kinds of events at iframe boundary. I think we can use the same spec from Web Components, but I have to investigate.
  3. Consider Security. I appreciate early feedbacks from security guys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691368</commentid>
    <comment_count>15</comment_count>
      <attachid>157431</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-08-09 04:50:23 -0700</bug_when>
    <thetext>Created attachment 157431
wip. Supports only click and dblclick events</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692201</commentid>
    <comment_count>16</comment_count>
      <attachid>157637</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-08-09 22:14:25 -0700</bug_when>
    <thetext>Created attachment 157637
ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692220</commentid>
    <comment_count>17</comment_count>
      <attachid>157637</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-09 22:32:47 -0700</bug_when>
    <thetext>Comment on attachment 157637
ready for review

Attachment 157637 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13462693</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692229</commentid>
    <comment_count>18</comment_count>
      <attachid>157637</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-09 22:41:44 -0700</bug_when>
    <thetext>Comment on attachment 157637
ready for review

Attachment 157637 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13459831</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692230</commentid>
    <comment_count>19</comment_count>
      <attachid>157637</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-09 22:45:42 -0700</bug_when>
    <thetext>Comment on attachment 157637
ready for review

Attachment 157637 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13463591</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692236</commentid>
    <comment_count>20</comment_count>
      <attachid>157637</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-09 22:57:24 -0700</bug_when>
    <thetext>Comment on attachment 157637
ready for review

Attachment 157637 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13475125</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692241</commentid>
    <comment_count>21</comment_count>
      <attachid>157637</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-09 23:17:21 -0700</bug_when>
    <thetext>Comment on attachment 157637
ready for review

Attachment 157637 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13475130</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692250</commentid>
    <comment_count>22</comment_count>
      <attachid>157637</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-09 23:32:47 -0700</bug_when>
    <thetext>Comment on attachment 157637
ready for review

Attachment 157637 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13458991</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692347</commentid>
    <comment_count>23</comment_count>
      <attachid>157674</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-08-10 01:40:51 -0700</bug_when>
    <thetext>Created attachment 157674
Minor update</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692360</commentid>
    <comment_count>24</comment_count>
      <attachid>157674</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-10 02:04:35 -0700</bug_when>
    <thetext>Comment on attachment 157674
Minor update

Attachment 157674 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13471477</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692365</commentid>
    <comment_count>25</comment_count>
      <attachid>157682</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-08-10 02:10:09 -0700</bug_when>
    <thetext>Created attachment 157682
fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692588</commentid>
    <comment_count>26</comment_count>
      <attachid>157682</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-08-10 09:10:15 -0700</bug_when>
    <thetext>Comment on attachment 157682
fix

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

The diff is very hard to read, because there&apos;s actually just a lot of code being moved around. Any chance of a smaller patch that first simply moves code around to make the actual functional changes easier to review?

&gt; Source/WebCore/dom/EventDispatcher.cpp:82
&gt; +class EventDispatcherForBrowsingContext {

There&apos;s a naming problem here somewhere. The EventDispatcher is actually a manager of a collection of browser-context-specific event dispatcher. Both classes being called EventDispatcher seems odd.

&gt; Source/WebCore/dom/EventDispatcher.cpp:478
&gt; +    // https://bugs.webkit.org/show_bug.cgi?id=93678

Sounds like the cloning should be a virtual function on an Event, so that then each event could override with the proper cloning implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693355</commentid>
    <comment_count>27</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-08-12 20:54:46 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 157682 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=157682&amp;action=review
&gt; 
&gt; The diff is very hard to read, because there&apos;s actually just a lot of code being moved around. Any chance of a smaller patch that first simply moves code around to make the actual functional changes easier to review?

Okay. That&apos;s the weakest point of this patch. Let me try to divide this into smaller patchers.

&gt; 
&gt; &gt; Source/WebCore/dom/EventDispatcher.cpp:82
&gt; &gt; +class EventDispatcherForBrowsingContext {
&gt; 
&gt; There&apos;s a naming problem here somewhere. The EventDispatcher is actually a manager of a collection of browser-context-specific event dispatcher. Both classes being called EventDispatcher seems odd.

Hmm. I think it is just an implementation detail the EventDispatcher is a manager of a collection of other dispatchers. From the outside, it remains &apos;EventDispatcher. No change of public interface.

Maybe EventDispatcherForBrowsingContext is not a good name, but I don&apos;t think it is odd that both are called EventDispatcher. Do you have any suggestions how we call them? I have no better ideas now.

&gt; 
&gt; &gt; Source/WebCore/dom/EventDispatcher.cpp:478
&gt; &gt; +    // https://bugs.webkit.org/show_bug.cgi?id=93678
&gt; 
&gt; Sounds like the cloning should be a virtual function on an Event, so that then each event could override with the proper cloning implementation.

Yes, that&apos;s on my rader. Let me address this later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693840</commentid>
    <comment_count>28</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-08-13 11:10:31 -0700</bug_when>
    <thetext>(In reply to comment #27)

&gt; Maybe EventDispatcherForBrowsingContext is not a good name, but I don&apos;t think it is odd that both are called EventDispatcher. Do you have any suggestions how we call them? I have no better ideas now.

PerFrameDispatcher?

:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694855</commentid>
    <comment_count>29</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-08-14 05:19:27 -0700</bug_when>
    <thetext>Sounds good. Shorter is better in this case.

(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; 
&gt; &gt; Maybe EventDispatcherForBrowsingContext is not a good name, but I don&apos;t think it is odd that both are called EventDispatcher. Do you have any suggestions how we call them? I have no better ideas now.
&gt; 
&gt; PerFrameDispatcher?
&gt; 
&gt; :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695723</commentid>
    <comment_count>30</comment_count>
      <attachid>158496</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-08-14 21:21:09 -0700</bug_when>
    <thetext>Created attachment 158496
wip. sync to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701591</commentid>
    <comment_count>31</comment_count>
      <attachid>159864</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-08-21 23:13:28 -0700</bug_when>
    <thetext>Created attachment 159864
Sync to ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702408</commentid>
    <comment_count>32</comment_count>
      <attachid>159864</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-08-22 15:22:38 -0700</bug_when>
    <thetext>Comment on attachment 159864
Sync to ToT.

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

I think you accidentally put up the wrong patch...

&gt; Source/WTF/wtf/Assertions.h:402
&gt; +// For ASSERT in both release/debug  mode.
&gt; +#define MY_ASSERT(assertion) do \
&gt; +    if (!(assertion)) { \
&gt; +        WTFReportAssertionFailure(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, #assertion); \
&gt; +        CRASH(); \
&gt; +    } \
&gt; +while (0)

What&apos;s that? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702431</commentid>
    <comment_count>33</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-08-22 15:29:22 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 159864 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=159864&amp;action=review
&gt; 
&gt; I think you accidentally put up the wrong patch...

Yes, that included the my local debug branch. Let me upload the correct diff.

&gt; 
&gt; &gt; Source/WTF/wtf/Assertions.h:402
&gt; &gt; +// For ASSERT in both release/debug  mode.
&gt; &gt; +#define MY_ASSERT(assertion) do \
&gt; &gt; +    if (!(assertion)) { \
&gt; &gt; +        WTFReportAssertionFailure(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, #assertion); \
&gt; &gt; +        CRASH(); \
&gt; &gt; +    } \
&gt; &gt; +while (0)
&gt; 
&gt; What&apos;s that? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702448</commentid>
    <comment_count>34</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-08-22 15:38:31 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 159864 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=159864&amp;action=review
&gt; 
&gt; I think you accidentally put up the wrong patch...
&gt; 
&gt; &gt; Source/WTF/wtf/Assertions.h:402
&gt; &gt; +// For ASSERT in both release/debug  mode.
&gt; &gt; +#define MY_ASSERT(assertion) do \
&gt; &gt; +    if (!(assertion)) { \
&gt; &gt; +        WTFReportAssertionFailure(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, #assertion); \
&gt; &gt; +        CRASH(); \
&gt; &gt; +    } \
&gt; &gt; +while (0)
&gt; 
&gt; What&apos;s that? :)

That&apos;s for ASSERTION for release build. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702564</commentid>
    <comment_count>35</comment_count>
      <attachid>160049</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-08-22 17:43:49 -0700</bug_when>
    <thetext>Created attachment 160049
Sync ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702659</commentid>
    <comment_count>36</comment_count>
      <attachid>160049</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-08-22 20:31:21 -0700</bug_when>
    <thetext>Comment on attachment 160049
Sync ToT

The plumbing looks mechanically correct. I am still baffled how we let the event trundle through a frame, even if it was destroyed by a listener somewhere earlier in the chain. Ojan, do you have any thoughts on that? Is this what we want?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702661</commentid>
    <comment_count>37</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-08-22 20:36:53 -0700</bug_when>
    <thetext>I agree. We have to be careful about this patch. We don&apos;t have to be in a hurry to land this patch.
I appreciate opinions from experts, especially from security guys.

(In reply to comment #36)
&gt; (From update of attachment 160049 [details])
&gt; The plumbing looks mechanically correct. I am still baffled how we let the event trundle through a frame, even if it was destroyed by a listener somewhere earlier in the chain. Ojan, do you have any thoughts on that? Is this what we want?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741923</commentid>
    <comment_count>38</comment_count>
      <attachid>168672</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-10-15 04:02:21 -0700</bug_when>
    <thetext>Created attachment 168672
Sync with ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742846</commentid>
    <comment_count>39</comment_count>
      <attachid>168866</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-10-15 23:28:20 -0700</bug_when>
    <thetext>Created attachment 168866
Sync with ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742849</commentid>
    <comment_count>40</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-10-15 23:31:42 -0700</bug_when>
    <thetext>Let me resume this work.

I think the patch is hard to read since the diff is not clean.
If required, it&apos;s okay for me to split this patch into several patches, though I have no idea how to split this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743130</commentid>
    <comment_count>41</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-10-16 07:36:41 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; Let me resume this work.
&gt; 
&gt; I think the patch is hard to read since the diff is not clean.
&gt; If required, it&apos;s okay for me to split this patch into several patches, though I have no idea how to split this.

It&apos;s not clear that this patch is in anyone&apos;s hotlist. Can we prioritize it lower than other, more pressing work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743749</commentid>
    <comment_count>42</comment_count>
      <attachid>168866</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-16 17:55:13 -0700</bug_when>
    <thetext>Comment on attachment 168866
Sync with ToT

Is there a way to do this in smaller pieces so the behavior changing part is separate from the refactoring?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743750</commentid>
    <comment_count>43</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-16 17:56:04 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; If required, it&apos;s okay for me to split this patch into several patches, though I have no idea how to split this.

I strongly encourage you do it. It should be straightforward to split it since it’s largely refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743752</commentid>
    <comment_count>44</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-10-16 17:59:05 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (In reply to comment #40)
&gt; &gt; If required, it&apos;s okay for me to split this patch into several patches, though I have no idea how to split this.
&gt; 
&gt; I strongly encourage you do it. It should be straightforward to split it since it’s largely refactoring.

Also, the approach could be simplified, I think:

1) each ancestor chain holds a refptr to parent iframe (which keeps the whole chain in place).
2) when creating a list of ancestors, we store the ptr there
3) and hand off event dispatch to parent frame.
4) after dispatch completes, we call to clear parent frame&apos;s ptr and clear our own.

No need to create a new layer of indirection in dispatcher.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871403</commentid>
    <comment_count>45</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-04-08 20:29:25 -0700</bug_when>
    <thetext>Clearing a review flag.
I don&apos;t have a plan to continue this. Please feel free to grab this bug if someone is interested in this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1889531</commentid>
    <comment_count>46</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-08-07 10:15:38 -0700</bug_when>
    <thetext>seamless iframe support was removed in this commit:

https://github.com/WebKit/WebKit/commit/3e2010a853456a8ad1e097897ef35ff5b54b2877

I am going to mark this and dependent open bug as &quot;RESOLVED WONTFIX&quot;? Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>152875</attachid>
            <date>2012-07-17 16:54:31 -0700</date>
            <delta_ts>2012-07-17 16:54:31 -0700</delta_ts>
            <desc>click event test</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>879</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxzY3JpcHQ+CmZ1bmN0aW9uIG9uSWZyYW1lTG9hZCgpIHsKICAgIHZh
ciBvdXRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdXRlci1kaXYxJyk7CiAgICBvdXRl
ci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgLy8g
ZXZlbnQuY2xpZW50WCBhbmQgZXZlbnQuY2xpZW50WSBzaG91bGQgYmUgdGhlIHgveSBwb3NpdGlv
bnMgaW4gdGhlICpvdXRlciogZG9jdW1lbnQuCiAgICAgICAgYWxlcnQoJ1BBU1MgaWYgeW91IGp1
c3QgY2xpY2tlZCBpbnNpZGUgdGhlIGlmcmFtZScpOwogICAgfSk7CiAgICB2YXIgaW5uZXJCb2R5
ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaWZyYW1lJykuY29udGVudERvY3VtZW50LmJvZHk7
CiAgICBpbm5lckJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldmVudCkg
ewogICAgICAgIC8vIGV2ZW50LmNsaWVudFggYW5kIGV2ZW50LmNsaWVudFkgc2hvdWxkIGJlIHRo
ZSB4L3kgcG9zaXRpb25zIGluIHRoZSAqaW5uZXIqIGRvY3VtZW50LgogICAgICAgIGFsZXJ0KCdQ
QVNTIGlmIHlvdSBqdXN0IGNsaWNrZWQgaW5zaWRlIHRoZSBpZnJhbWUnKTsKICAgIH0pOwogICAg
Ly8gU2hvdWxkIGdldCB0d28gUEFTUyBhbGVydHMgd2hlbiB5b3UgY2xpY2sgaW4gdGhlIGlmcmFt
ZS4KfQo8L3NjcmlwdD4KPGRpdiBpZD1vdXRlci1kaXYxIHRhYmluZGV4PS0xPgogICAgPGlmcmFt
ZSBzZWFtbGVzcyBvbmxvYWQ9Im9uSWZyYW1lTG9hZCgpIiBzcmNkb2M9IjxkaXYgdGFiaW5kZXg9
LTEgaWQ9ZGl2MT5DTElDS0lORyBIRVJFIFNIT1VMRCBDQVVTRSBUV08gQUxFUlRTIFRPIEZJUkU8
L2Rpdj4iPjwvaWZyYW1lPgo8L2Rpdj4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>152876</attachid>
            <date>2012-07-17 16:55:41 -0700</date>
            <delta_ts>2012-07-17 16:55:41 -0700</delta_ts>
            <desc>focus doesn&apos;t retarget test</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>793</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxzY3JpcHQ+CmZ1bmN0aW9uIG9uSWZyYW1lTG9hZCgpIHsKICAgIHZh
ciBvdXRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdXRlci1kaXYxJyk7CiAgICBvdXRl
ci5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICBh
bGVydCgnRkFJTCcpOwogICAgfSk7CgogICAgdmFyIGlubmVyMSA9IGRvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3IoJ2lmcmFtZScpLmNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2MScpOwog
ICAgdmFyIGlubmVyMiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpLmNvbnRlbnRE
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2MicpOwogICAgaW5uZXIyLmFkZEV2ZW50TGlzdGVu
ZXIoJ2ZvY3VzaW4nLCBmdW5jdGlvbihldmVudCkgewogICAgICAgIGFsZXJ0KCdQQVNTJyk7CiAg
ICB9KTsKCiAgICAvLyBTaG91bGQgZ2V0IG9uZSBwYXNzIGFsZXJ0IGZyb20gdGhlc2UgdHdvIGNh
bGxzIGFuZCBubyBmYWlsIGFsZXJ0LgogICAgaW5uZXIxLmZvY3VzKCk7CiAgICBpbm5lcjIuZm9j
dXMoKTsKfQo8L3NjcmlwdD4KU2hvdWxkIGdldCBvbmUgcGFzcyBhbGVydC4KPGRpdiBpZD1vdXRl
ci1kaXYxIHRhYmluZGV4PS0xPgogICAgPGlmcmFtZSBzZWFtbGVzcyBvbmxvYWQ9Im9uSWZyYW1l
TG9hZCgpIiBzcmNkb2M9IjxkaXYgdGFiaW5kZXg9LTEgaWQ9ZGl2MT5pbm5lcjE8L2Rpdj48ZGl2
IHRhYmluZGV4PS0xIGlkPWRpdjI+aW5uZXIyPC9kaXY+Ij48L2lmcmFtZT4KPC9kaXY+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154321</attachid>
            <date>2012-07-25 04:14:10 -0700</date>
            <delta_ts>2012-08-09 04:50:18 -0700</delta_ts>
            <desc>wip. Extends event ancestors across seamless iframes</desc>
            <filename>bug-91290-20120725201400.patch</filename>
            <type>text/plain</type>
            <size>4896</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2Y5NjI5NWRmMmY5MTIz
OTBiMGRlMWE1Mzk4Njk4ZGNlYTdkYTkxYi4uMGU5ZTExMjAyYWJmYzEzYjRhM2FkMzJkMjIzOTRi
ODMyZTkxMjA2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA3LTI1ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBzZWFtbGVzcyBpZnJhbWVz
IHNob3VsZCByZXRhcmdldCBldmVudHMgdG8gdGhlIHBhcmVudCBkb2N1bWVudAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyOTAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSVAuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3Jz
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCk6CisK
IDIwMTItMDctMjUgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJlcGxhY2UgaW50IHdpdGggbG9uZyBpbiB0ZXN0IElETCBmaWxlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBhNzVhYWIwZTM1ZDYyYzU4YjhmMDEwOWI5MDRi
MmVkMGZhZjE1OWRjLi5kZjkxZmM3ZjMwN2FkMzQ2MmZiMDVmMjM2ZGYxNTMxMDIyZTE3M2U2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkV2ZW50Q29udGV4dC5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hNZWRpYXRv
ci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc2VydGlvblBv
aW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC0xODcsNiAr
MTg4LDcgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9k
ZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXIKIAogdm9pZCBFdmVudERpc3BhdGNoZXI6
OmFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0
PiBwcnBSZWxhdGVkVGFyZ2V0KQogeworICAgIC8vIEZJWE1FOiBIYW5kbGUgU2VhbWxlc3MgaWZy
YW1lLgogICAgIGlmICghcHJwUmVsYXRlZFRhcmdldCkKICAgICAgICAgcmV0dXJuOwogICAgIFJl
ZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0ID0gcHJwUmVsYXRlZFRhcmdldC0+dG9Ob2RlKCk7CkBA
IC0yMTIsMjggKzIxNCw0MSBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJlRXZlbnRBbmNl
c3RvcnMoRXZlbnQqIGV2ZW50KQogICAgIGlmIChtX2FuY2VzdG9yc0luaXRpYWxpemVkKQogICAg
ICAgICByZXR1cm47CiAgICAgbV9hbmNlc3RvcnNJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgYm9v
bCBpbkRvY3VtZW50ID0gbV9ub2RlLT5pbkRvY3VtZW50KCk7Ci0gICAgYm9vbCBpc1NWR0VsZW1l
bnQgPSBtX25vZGUtPmlzU1ZHRWxlbWVudCgpOworCisgICAgTm9kZSogc3RhcnQgPSBtX25vZGUu
Z2V0KCk7CisgICAgQVNTRVJUKHN0YXJ0KTsKICAgICBWZWN0b3I8RXZlbnRUYXJnZXQqPiB0YXJn
ZXRTdGFjazsKLSAgICBOb2RlKiBsYXN0ID0gMDsKLSAgICBmb3IgKENvbXBvc2VkU2hhZG93VHJl
ZVBhcmVudFdhbGtlciB3YWxrZXIobV9ub2RlLmdldCgpKTsgd2Fsa2VyLmdldCgpOyB3YWxrZXIu
cGFyZW50SW5jbHVkaW5nSW5zZXJ0aW9uUG9pbnRBbmRTaGFkb3dSb290KCkpIHsKLSAgICAgICAg
Tm9kZSogbm9kZSA9IHdhbGtlci5nZXQoKTsKLSAgICAgICAgaWYgKHRhcmdldFN0YWNrLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIHRhcmdldFN0YWNrLmFwcGVuZChldmVudFRhcmdldFJlc3BlY3Rp
bmdTVkdUYXJnZXRSdWxlcyhub2RlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5zZXJ0aW9uUG9p
bnQobm9kZSkgJiYgdG9JbnNlcnRpb25Qb2ludChub2RlKS0+Y29udGFpbnMobGFzdCkpCi0gICAg
ICAgICAgICB0YXJnZXRTdGFjay5hcHBlbmQodGFyZ2V0U3RhY2subGFzdCgpKTsKLSAgICAgICAg
bV9hbmNlc3RvcnMuYXBwZW5kKEV2ZW50Q29udGV4dChub2RlLCBldmVudFRhcmdldFJlc3BlY3Rp
bmdTVkdUYXJnZXRSdWxlcyhub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSk7Ci0gICAgICAgIGlm
ICghaW5Eb2N1bWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbGFzdCA9IG5vZGU7
Ci0gICAgICAgIGlmICghbm9kZS0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoZXZlbnQsIHRvU2hhZG93
Um9vdChub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSA9PSBTdGF5SW5zaWRlU2hhZG93RE9NKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIWlzU1ZHRWxlbWVudCkgewotICAgICAg
ICAgICAgQVNTRVJUKCF0YXJnZXRTdGFjay5pc0VtcHR5KCkpOwotICAgICAgICAgICAgdGFyZ2V0
U3RhY2sucmVtb3ZlTGFzdCgpOworCisgICAgLy8gRklYTUU6IEhhbmRsZSBzYW1lLW9yaWdpbiBz
ZWFtbGVzcyBpZnJhbWUuCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgYm9vbCBpbkRvY3Vt
ZW50ID0gc3RhcnQtPmluRG9jdW1lbnQoKTsKKyAgICAgICAgYm9vbCBpc1NWR0VsZW1lbnQgPSBz
dGFydC0+aXNTVkdFbGVtZW50KCk7CisgICAgICAgIE5vZGUqIGxhc3QgPSAwOworICAgICAgICBm
b3IgKENvbXBvc2VkU2hhZG93VHJlZVBhcmVudFdhbGtlciB3YWxrZXIoc3RhcnQpOyB3YWxrZXIu
Z2V0KCk7IHdhbGtlci5wYXJlbnRJbmNsdWRpbmdJbnNlcnRpb25Qb2ludEFuZFNoYWRvd1Jvb3Qo
KSkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IHdhbGtlci5nZXQoKTsKKyAgICAgICAgICAg
IGlmICh0YXJnZXRTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2su
YXBwZW5kKGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG5vZGUpKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGlzSW5zZXJ0aW9uUG9pbnQobm9kZSkgJiYgdG9JbnNlcnRpb25Qb2lu
dChub2RlKS0+Y29udGFpbnMobGFzdCkpCisgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2suYXBw
ZW5kKHRhcmdldFN0YWNrLmxhc3QoKSk7CisgICAgICAgICAgICBtX2FuY2VzdG9ycy5hcHBlbmQo
RXZlbnRDb250ZXh0KG5vZGUsIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG5v
ZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpKTsKKyAgICAgICAgICAgIGlmICghaW5Eb2N1bWVudCkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBsYXN0ID0gbm9kZTsKKyAgICAg
ICAgICAgIGlmICghbm9kZS0+aXNTaGFkb3dSb290KCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBpZiAoZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihldmVudCwgdG9T
aGFkb3dSb290KG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpID09IFN0YXlJbnNpZGVTaGFkb3dE
T00pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKCFpc1NWR0VsZW1l
bnQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXRhcmdldFN0YWNrLmlzRW1wdHkoKSk7Cisg
ICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CisgICAgICAgIEhUTUxJRnJhbWVFbGVtZW50KiBwYXJlbnRJRnJhbWUgPSBzdGFy
dC0+ZG9jdW1lbnQoKS0+c2VhbWxlc3NQYXJlbnRJRnJhbWUoKTsKKyAgICAgICAgaWYgKCFwYXJl
bnRJRnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHN0YXJ0ID0gcGFyZW50SUZy
YW1lOworICAgICAgICBBU1NFUlQodGFyZ2V0U3RhY2suc2l6ZSgpIDw9IDEpOworICAgICAgICB0
YXJnZXRTdGFjay5jbGVhcigpOwogICAgIH0KIH0KIApAQCAtMjQ2LDYgKzI2MSw5IEBAIGJvb2wg
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQog
ICAgIEFTU0VSVCghZXZlbnQtPnR5cGUoKS5pc051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29kZSBj
YW4gY3JlYXRlIGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZSwgYnV0IG5vdCBudWxsLgogCiAg
ICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBvcmlnaW5hbFRhcmdldCA9IGV2ZW50LT50YXJnZXQoKTsK
KworICAgIC8vIGVuc3VyZUV2ZW50QW5jZXN0b3JzKGV2ZW50LmdldCgpKTsKKyAgICAvLyBGaVhN
RTogU2VhbWxlc3MgaWZyYW1lIGV2ZW50LXJldGFyZ2V0aW5nLgogICAgIGVuc3VyZUV2ZW50QW5j
ZXN0b3JzKGV2ZW50LmdldCgpKTsKIAogICAgIFdpbmRvd0V2ZW50Q29udGV4dCB3aW5kb3dDb250
ZXh0KGV2ZW50LmdldCgpLCBtX25vZGUuZ2V0KCksIHRvcEV2ZW50Q29udGV4dCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157431</attachid>
            <date>2012-08-09 04:50:23 -0700</date>
            <delta_ts>2012-08-09 22:14:20 -0700</delta_ts>
            <desc>wip. Supports only click and dblclick events</desc>
            <filename>bug-91290-20120809204956.patch</filename>
            <type>text/plain</type>
            <size>30824</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2IyYTM5M2ZjNDYwMjNk
NDUzZWY5MzdjMjk4MGU0NWM4NTQwNDVlNy4uMTQ3NTlmZmFiZGNkZjczOTY4NjRlZjUxZDY5NzEz
YjBmY2MyZDcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA4LTA5ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBzZWFtbGVzcyBpZnJhbWVz
IHNob3VsZCByZXRhcmdldCBldmVudHMgdG8gdGhlIHBhcmVudCBkb2N1bWVudAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyOTAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSVAuCisKKworICAgICAgICBU
ZXN0OiBmYXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMuaHRtbAorCisgICAgICAg
ICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckluQnJvd3NpbmdDb250ZXh0OjphZGp1c3RSZWxhdGVk
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckluQnJvd3NpbmdDb250
ZXh0OjpFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6Y2FsdWN1bGF0ZUV2ZW50QW5jZXN0
b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckluQnJvd3NpbmdDb250ZXh0
Ojp3aWxsRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXJJ
bkJyb3dzaW5nQ29udGV4dDo6ZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnREaXNwYXRjaGVySW5Ccm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZlbnRBdENh
cHR1cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29u
dGV4dDo6ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlz
cGF0Y2hlckluQnJvd3NpbmdDb250ZXh0OjpkaXNwYXRjaEV2ZW50QXRCdWJibGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6ZGlzcGF0Y2hF
dmVudFBvc3RQcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckluQnJv
d3NpbmdDb250ZXh0OjpkaXNwYXRjaEV2ZW50RGVmYXVsdEhhbmRsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnREaXNwYXRjaGVySW5Ccm93c2luZ0NvbnRleHQ6OnJlc2V0VGFyZ2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckluQnJvd3NpbmdDb250ZXh0Ojp0b3BFdmVu
dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRTaG91bGRCZVN0b3BwZWRBdEJvdW5k
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckluQnJvd3NpbmdDb250ZXh0
OjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlz
cGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFByb3Bh
Z2F0ZUV2ZW50QWNyb3NzU2VhbWxlc3NJRnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNsb25l
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpwcmVwYXJlRXZlbnRE
aXNwYXRjaGVycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmFkanVzdFJl
bGF0ZWRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNo
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNoZXJz
UG9zdFByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpmaXJlRGlz
cGF0Y2hlcnNEZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRj
aGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV2ZW50RGlzcGF0Y2hlckluQnJv
d3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckluQnJvd3Np
bmdDb250ZXh0Ojpub2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckluQnJv
d3NpbmdDb250ZXh0OjpldmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXJJ
bkJyb3dzaW5nQ29udGV4dDo6c2hvdWxkQ29udGludWVUb1BhcmVudERvY3VtZW50KToKKyAgICAg
ICAgKEV2ZW50RGlzcGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6
Om5vZGUpOgorCiAyMDEyLTA4LTA4ICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2sgc2hvdWxk
IG5vdCByZXVzZSB0aGUgc2FtZSBFdmVudERpc3BhdGNoZXIgaW5zdGFuY2UuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGUxYTYwZjNkNDBiM2EyOTVmOTdmYTgxZTY5
MGZjYWRkNzUyODRjYjQuLjY5MTFiZThjNmJiOTU0YzZjN2Y4MDE5YmQyOWFiOTc2ZTM3NDJjNzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0zMiwxMSArMzIsMTMg
QEAKICNpbmNsdWRlICJFdmVudENvbnRleHQuaCIKICNpbmNsdWRlICJFdmVudERpc3BhdGNoTWVk
aWF0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MSUZyYW1lRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNlcnRp
b25Qb2ludC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1
ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJTY29wZWRFdmVudFF1ZXVlLmgiCisjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAi
V2luZG93RXZlbnRDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMTIxLDYg
KzEyMyw4IEBAIEV2ZW50VGFyZ2V0KiBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6ZmluZFJl
bGF0ZWRUYXJnZXQoVHJlZVNjb3BlKiBzY29wZSkKICAgICByZXR1cm4gcmVsYXRlZFRhcmdldDsK
IH0KIAorCisKIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG5vZGUs
IFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKIHsKICAgICBBU1NF
UlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CkBAIC0xODQsNyArMTg4LDcgQEAgdm9pZCBF
dmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSogbm9kZSwgUGFzc1Jl
ZlB0cjxFdmVudD4gdW5kZXIKICAgICBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+
cmVtb3ZlKG5vZGUpOwogfQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRh
cmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJn
ZXQpCit2b2lkIEV2ZW50RGlzcGF0Y2hlckluQnJvd3NpbmdDb250ZXh0OjphZGp1c3RSZWxhdGVk
VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCiB7CiAgICAg
aWYgKCFwcnBSZWxhdGVkVGFyZ2V0KQogICAgICAgICByZXR1cm47CkBAIC0xOTMsMjYgKzE5Nywy
OSBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCogZXZl
bnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1f
bm9kZS5nZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVuc3VyZUV2ZW50QW5jZXN0b3JzKGV2
ZW50KTsKKyAgICBpZiAobV9hbmNlc3RvcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAg
ICAgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIobV9ub2RlLCByZWxhdGVkVGFyZ2V0LnJlbGVh
c2UoKSkuYWRqdXN0KG1fYW5jZXN0b3JzKTsKIH0KIAotRXZlbnREaXNwYXRjaGVyOjpFdmVudERp
c3BhdGNoZXIoTm9kZSogbm9kZSkKK0V2ZW50RGlzcGF0Y2hlckluQnJvd3NpbmdDb250ZXh0OjpF
dmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCkKICAgICA6IG1fbm9kZShub2RlKQotICAgICwgbV9hbmNlc3RvcnNJbml0aWFs
aXplZChmYWxzZSkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2V2ZW50RGlzcGF0Y2hlZChmYWxz
ZSkKLSNlbmRpZgorICAgICwgbV9ldmVudChldmVudCkKKyAgICAsIG1fYW5jZXN0b3JzKCkKKyAg
ICAsIG1fZXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbihjYWx1Y3VsYXRlRXZlbnRBbmNlc3RvcnMo
KSkKKyAgICAsIG1fdmlldyhtX25vZGUtPmRvY3VtZW50KCktPnZpZXcoKSkKKyAgICAsIG1fd2lu
ZG93RXZlbnRDb250ZXh0KG1fZXZlbnQuZ2V0KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZlbnRDb250
ZXh0KCkpCisgICAgLCBtX3ByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KDApCiB7Ci0gICAg
QVNTRVJUKG5vZGUpOwotICAgIG1fdmlldyA9IG5vZGUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAg
ICBBU1NFUlQobV9ub2RlKTsKKyAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7
CisgICAgQVNTRVJUKCFtX2V2ZW50LT50eXBlKCkuaXNOdWxsKCkpOyAvLyBKYXZhU2NyaXB0IGNv
ZGUgY2FuIGNyZWF0ZSBhbiBldmVudCB3aXRoIGFuIGVtcHR5IG5hbWUsIGJ1dCBub3QgbnVsbC4K
KyAgICBtX2V2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVs
ZXMobV9ub2RlLmdldCgpKSk7CiB9CiAKLXZvaWQgRXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVu
dEFuY2VzdG9ycyhFdmVudCogZXZlbnQpCitFdmVudEFuY2VzdG9yQ29udGludWF0aW9uIEV2ZW50
RGlzcGF0Y2hlckluQnJvd3NpbmdDb250ZXh0OjpjYWx1Y3VsYXRlRXZlbnRBbmNlc3RvcnMoKQog
ewotICAgIGlmIChtX2FuY2VzdG9yc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9hbmNlc3RvcnNJbml0aWFsaXplZCA9IHRydWU7CisgICAgQVNTRVJUKG1fYW5jZXN0b3JzLmlz
RW1wdHkoKSk7CiAgICAgYm9vbCBpbkRvY3VtZW50ID0gbV9ub2RlLT5pbkRvY3VtZW50KCk7CiAg
ICAgYm9vbCBpc1NWR0VsZW1lbnQgPSBtX25vZGUtPmlzU1ZHRWxlbWVudCgpOwogICAgIFZlY3Rv
cjxFdmVudFRhcmdldCo+IHRhcmdldFN0YWNrOwpAQCAtMjI1LDE0NSArMjMyLDEyNiBAQCB2b2lk
IEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJlRXZlbnRBbmNlc3RvcnMoRXZlbnQqIGV2ZW50KQogICAg
ICAgICAgICAgdGFyZ2V0U3RhY2suYXBwZW5kKHRhcmdldFN0YWNrLmxhc3QoKSk7CiAgICAgICAg
IG1fYW5jZXN0b3JzLmFwcGVuZChFdmVudENvbnRleHQobm9kZSwgZXZlbnRUYXJnZXRSZXNwZWN0
aW5nU1ZHVGFyZ2V0UnVsZXMobm9kZSksIHRhcmdldFN0YWNrLmxhc3QoKSkpOwogICAgICAgICBp
ZiAoIWluRG9jdW1lbnQpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4g
RXZlbnRBbmNlc3RvclN0b3A7CiAgICAgICAgIGxhc3QgPSBub2RlOwogICAgICAgICBpZiAoIW5v
ZGUtPmlzU2hhZG93Um9vdCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChk
ZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKGV2ZW50LCB0b1NoYWRvd1Jvb3Qobm9kZSksIHRhcmdl
dFN0YWNrLmxhc3QoKSkgPT0gU3RheUluc2lkZVNoYWRvd0RPTSkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgaWYgKGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IodG9TaGFkb3dSb290KG5v
ZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpID09IFN0YXlJbnNpZGVTaGFkb3dET00pCisgICAgICAg
ICAgICByZXR1cm4gRXZlbnRBbmNlc3RvclN0b3A7CiAgICAgICAgIGlmICghaXNTVkdFbGVtZW50
KSB7CiAgICAgICAgICAgICBBU1NFUlQoIXRhcmdldFN0YWNrLmlzRW1wdHkoKSk7CiAgICAgICAg
ICAgICB0YXJnZXRTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgIH0KICAgICB9CisgICAgcmV0
dXJuIEV2ZW50QW5jZXN0b3JDb250aW51ZVRvUGFyZW50OwogfQogCi1ib29sIEV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSBFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6
d2lsbERpc3BhdGNoRXZlbnQoKSBjb25zdAogewotI2lmbmRlZiBOREVCVUcKLSAgICBBU1NFUlQo
IW1fZXZlbnREaXNwYXRjaGVkKTsKLSAgICBtX2V2ZW50RGlzcGF0Y2hlZCA9IHRydWU7Ci0jZW5k
aWYKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7Ci0gICAgQ2hpbGROb2Rlc0xh
enlTbmFwc2hvdDo6dGFrZUNoaWxkTm9kZXNMYXp5U25hcHNob3QoKTsKLQotICAgIGV2ZW50LT5z
ZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9ub2RlLmdldCgp
KSk7Ci0gICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotICAgIEFTU0VSVChl
dmVudC0+dGFyZ2V0KCkpOwotICAgIEFTU0VSVCghZXZlbnQtPnR5cGUoKS5pc051bGwoKSk7IC8v
IEphdmFTY3JpcHQgY29kZSBjYW4gY3JlYXRlIGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZSwg
YnV0IG5vdCBudWxsLgotICAgIGVuc3VyZUV2ZW50QW5jZXN0b3JzKGV2ZW50LmdldCgpKTsKLSAg
ICBXaW5kb3dFdmVudENvbnRleHQgd2luZG93RXZlbnRDb250ZXh0KGV2ZW50LmdldCgpLCBtX25v
ZGUuZ2V0KCksIHRvcEV2ZW50Q29udGV4dCgpKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hF
dmVudChtX25vZGUtPmRvY3VtZW50KCksICpldmVudCwgd2luZG93RXZlbnRDb250ZXh0LndpbmRv
dygpLCBtX25vZGUuZ2V0KCksIG1fYW5jZXN0b3JzKTsKLQotICAgIHZvaWQqIHByZURpc3BhdGNo
RXZlbnRIYW5kbGVyUmVzdWx0OwotICAgIGlmIChkaXNwYXRjaEV2ZW50UHJlUHJvY2VzcyhldmVu
dCwgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpID09IENvbnRpbnVlRGlzcGF0Y2hpbmcp
Ci0gICAgICAgIGlmIChkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoZXZlbnQsIHdpbmRvd0V2ZW50
Q29udGV4dCkgPT0gQ29udGludWVEaXNwYXRjaGluZykKLSAgICAgICAgICAgIGlmIChkaXNwYXRj
aEV2ZW50QXRUYXJnZXQoZXZlbnQpID09IENvbnRpbnVlRGlzcGF0Y2hpbmcpCi0gICAgICAgICAg
ICAgICAgZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcoZXZlbnQsIHdpbmRvd0V2ZW50Q29udGV4dCk7
Ci0gICAgZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKGV2ZW50LCBwcmVEaXNwYXRjaEV2ZW50SGFu
ZGxlclJlc3VsdCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCBhZnRlciBldmVudCBkaXNwYXRjaCwg
dGhlIGV2ZW50J3MgdGFyZ2V0IG9iamVjdCBpcyB0aGUKLSAgICAvLyBvdXRlcm1vc3Qgc2hhZG93
IERPTSBib3VuZGFyeS4KLSAgICBldmVudC0+c2V0VGFyZ2V0KHdpbmRvd0V2ZW50Q29udGV4dC50
YXJnZXQoKSk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7Ci0gICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50KGNvb2tpZSk7Ci0KLSAgICByZXR1cm4g
IWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CisgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnQobV9ub2RlLT5kb2N1bWVudCgpLCAqbV9ldmVudCwg
bV93aW5kb3dFdmVudENvbnRleHQud2luZG93KCksIG1fbm9kZS5nZXQoKSwgbV9hbmNlc3RvcnMp
OwogfQogCi1pbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXI6
OmRpc3BhdGNoRXZlbnRQcmVQcm9jZXNzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCB2b2lkKiYg
cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpCitpbmxpbmUgRXZlbnREaXNwYXRjaENvbnRp
bnVhdGlvbiBFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6ZGlzcGF0Y2hFdmVudFBy
ZVByb2Nlc3MoKQogewogICAgIC8vIEdpdmUgdGhlIHRhcmdldCBub2RlIGEgY2hhbmNlIHRvIGRv
IHNvbWUgd29yayBiZWZvcmUgRE9NIGV2ZW50IGhhbmRsZXJzIGdldCBhIGNyYWNrLgotICAgIHBy
ZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0ID0gbV9ub2RlLT5wcmVEaXNwYXRjaEV2ZW50SGFu
ZGxlcihldmVudC5nZXQoKSk7Ci0gICAgcmV0dXJuIChtX2FuY2VzdG9ycy5pc0VtcHR5KCkgfHwg
ZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKSA/IERvbmVEaXNwYXRjaGluZyA6IENvbnRpbnVl
RGlzcGF0Y2hpbmc7CisgICAgbV9wcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCA9IG1fbm9k
ZS0+cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIobV9ldmVudC5nZXQoKSk7CisgICAgcmV0dXJuICht
X2FuY2VzdG9ycy5pc0VtcHR5KCkgfHwgbV9ldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpID8g
RG9uZURpc3BhdGNoaW5nIDogQ29udGludWVEaXNwYXRjaGluZzsKIH0KIAotaW5saW5lIEV2ZW50
RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRDYXB0
dXJpbmcoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFdpbmRvd0V2ZW50Q29udGV4dCYgd2luZG93
RXZlbnRDb250ZXh0KQoraW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNw
YXRjaGVySW5Ccm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZlbnRBdENhcHR1cmluZygpCiB7CiAg
ICAgLy8gVHJpZ2dlciBjYXB0dXJpbmcgZXZlbnQgaGFuZGxlcnMsIHN0YXJ0aW5nIGF0IHRoZSB0
b3AgYW5kIHdvcmtpbmcgb3VyIHdheSBkb3duLgotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2
ZW50OjpDQVBUVVJJTkdfUEhBU0UpOworICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6
OkNBUFRVUklOR19QSEFTRSk7CiAKLSAgICBpZiAod2luZG93RXZlbnRDb250ZXh0LmhhbmRsZUxv
Y2FsRXZlbnRzKGV2ZW50LmdldCgpKSAmJiBldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisg
ICAgaWYgKG1fd2luZG93RXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0
KCkpICYmIG1fZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAgICByZXR1cm4gRG9u
ZURpc3BhdGNoaW5nOwogCiAgICAgZm9yIChzaXplX3QgaSA9IG1fYW5jZXN0b3JzLnNpemUoKSAt
IDE7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgY29uc3QgRXZlbnRDb250ZXh0JiBldmVudENvbnRl
eHQgPSBtX2FuY2VzdG9yc1tpXTsKICAgICAgICAgaWYgKGV2ZW50Q29udGV4dC5jdXJyZW50VGFy
Z2V0U2FtZUFzVGFyZ2V0KCkpIHsKLSAgICAgICAgICAgIGlmIChldmVudC0+YnViYmxlcygpKQor
ICAgICAgICAgICAgaWYgKG1fZXZlbnQtPmJ1YmJsZXMoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQp
OworICAgICAgICAgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6
Q0FQVFVSSU5HX1BIQVNFKTsKLSAgICAgICAgZXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRz
KGV2ZW50LmdldCgpKTsKLSAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkK
KyAgICAgICAgICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFT
RSk7CisgICAgICAgIGV2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50LmdldCgp
KTsKKyAgICAgICAgaWYgKG1fZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIERvbmVEaXNwYXRjaGluZzsKICAgICB9CiAKICAgICByZXR1cm4gQ29udGludWVE
aXNwYXRjaGluZzsKIH0KIAotaW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
CitpbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXJJbkJyb3dz
aW5nQ29udGV4dDo6ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KCkKIHsKLSAgICBldmVudC0+c2V0RXZl
bnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKLSAgICBtX2FuY2VzdG9yc1swXS5oYW5kbGVMb2Nh
bEV2ZW50cyhldmVudC5nZXQoKSk7Ci0gICAgcmV0dXJuIGV2ZW50LT5wcm9wYWdhdGlvblN0b3Bw
ZWQoKSA/IERvbmVEaXNwYXRjaGluZyA6IENvbnRpbnVlRGlzcGF0Y2hpbmc7CisgICAgbV9ldmVu
dC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICBtX2FuY2VzdG9yc1swXS5o
YW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50LmdldCgpKTsKKyAgICByZXR1cm4gbV9ldmVudC0+cHJv
cGFnYXRpb25TdG9wcGVkKCkgPyBEb25lRGlzcGF0Y2hpbmcgOiBDb250aW51ZURpc3BhdGNoaW5n
OwogfQogCi1pbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXI6
OmRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBXaW5kb3dF
dmVudENvbnRleHQmIHdpbmRvd0NvbnRleHQpCitpbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVh
dGlvbiBFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6ZGlzcGF0Y2hFdmVudEF0QnVi
YmxpbmcoKQogewotICAgIGlmIChldmVudC0+YnViYmxlcygpICYmICFldmVudC0+Y2FuY2VsQnVi
YmxlKCkpIHsKKyAgICBpZiAobV9ldmVudC0+YnViYmxlcygpICYmICFtX2V2ZW50LT5jYW5jZWxC
dWJibGUoKSkgewogICAgICAgICAvLyBUcmlnZ2VyIGJ1YmJsaW5nIGV2ZW50IGhhbmRsZXJzLCBz
dGFydGluZyBhdCB0aGUgYm90dG9tIGFuZCB3b3JraW5nIG91ciB3YXkgdXAuCi0gICAgICAgIGV2
ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CisgICAgICAgIG1fZXZl
bnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKIAogICAgICAgICBzaXpl
X3Qgc2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7
IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRD
b250ZXh0ID0gbV9hbmNlc3RvcnNbaV07CiAgICAgICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1
cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkKLSAgICAgICAgICAgICAgICBldmVudC0+c2V0RXZl
bnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICAgICAgICAgICAgICBtX2V2ZW50LT5zZXRF
dmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7Ci0gICAg
ICAgICAgICBldmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwotICAg
ICAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCBldmVudC0+Y2FuY2Vs
QnViYmxlKCkpCisgICAgICAgICAgICAgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6
QlVCQkxJTkdfUEhBU0UpOworICAgICAgICAgICAgZXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZl
bnRzKG1fZXZlbnQuZ2V0KCkpOworICAgICAgICAgICAgaWYgKG1fZXZlbnQtPnByb3BhZ2F0aW9u
U3RvcHBlZCgpIHx8IG1fZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBEb25lRGlzcGF0Y2hpbmc7CiAgICAgICAgIH0KLSAgICAgICAgd2luZG93Q29udGV4dC5o
YW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7CisgICAgICAgIG1fd2luZG93RXZlbnRDb250
ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpOwogICAgIH0KICAgICByZXR1cm4g
Q29udGludWVEaXNwYXRjaGluZzsKIH0KIAotaW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpk
aXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIHZvaWQqIHBy
ZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KQoraW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVy
SW5Ccm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcygpCiB7Ci0gICAgZXZl
bnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhtX25vZGUu
Z2V0KCkpKTsKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCgwKTsKLSAgICBldmVudC0+c2V0
RXZlbnRQaGFzZSgwKTsKLQorICAgIG1fZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3Bl
Y3RpbmdTVkdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKKyAgICBtX2V2ZW50LT5zZXRDdXJy
ZW50VGFyZ2V0KDApOworICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoMCk7CiAgICAgLy8gUGFz
cyB0aGUgZGF0YSBmcm9tIHRoZSBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlciB0byB0aGUgcG9zdERp
c3BhdGNoRXZlbnRIYW5kbGVyLgotICAgIG1fbm9kZS0+cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVy
KGV2ZW50LmdldCgpLCBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7CisgICAgbV9ub2Rl
LT5wb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIobV9ldmVudC5nZXQoKSwgbV9wcmVEaXNwYXRjaEV2
ZW50SGFuZGxlclJlc3VsdCk7Cit9CiAKK2lubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlckluQnJv
d3NpbmdDb250ZXh0OjpkaXNwYXRjaEV2ZW50RGVmYXVsdEhhbmRsZXIoKQorewogICAgIC8vIENh
bGwgZGVmYXVsdCBldmVudCBoYW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUgYSBjb25j
ZXB0IG9mIHByZXZlbnRpbmcKICAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0YWlsIG9m
IHdoaWNoIGhhbmRsZXJzIGFyZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKICAgICAvLyBpbXBsZW1l
bnRhdGlvbiBkZXRhaWwgYW5kIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgaWYgKCFldmVudC0+
ZGVmYXVsdFByZXZlbnRlZCgpICYmICFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgeworICAgIGlm
ICghbV9ldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFtX2V2ZW50LT5kZWZhdWx0SGFuZGxl
ZCgpKSB7CiAgICAgICAgIC8vIE5vbi1idWJibGluZyBldmVudHMgY2FsbCBvbmx5IG9uZSBkZWZh
dWx0IGV2ZW50IGhhbmRsZXIsIHRoZSBvbmUgZm9yIHRoZSB0YXJnZXQuCi0gICAgICAgIG1fbm9k
ZS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudC5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXZl
bnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSk7Ci0gICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRs
ZWQoKSkKKyAgICAgICAgbV9ub2RlLT5kZWZhdWx0RXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCkp
OworICAgICAgICBBU1NFUlQoIW1fZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSk7CisgICAgICAg
IGlmIChtX2V2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAvLyBGb3IgYnViYmxpbmcgZXZlbnRzLCBjYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMg
b24gdGhlIHNhbWUgdGFyZ2V0cyBpbiB0aGUKICAgICAgICAgLy8gc2FtZSBvcmRlciBhcyB0aGUg
YnViYmxpbmcgcGhhc2UuCi0gICAgICAgIGlmIChldmVudC0+YnViYmxlcygpKSB7CisgICAgICAg
IGlmIChtX2V2ZW50LT5idWJibGVzKCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbV9h
bmNlc3RvcnMuc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX2FuY2VzdG9yc1tpXS5ub2RlKCktPmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghZXZlbnQt
PmRlZmF1bHRQcmV2ZW50ZWQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0
SGFuZGxlZCgpKQorICAgICAgICAgICAgICAgIG1fYW5jZXN0b3JzW2ldLm5vZGUoKS0+ZGVmYXVs
dEV2ZW50SGFuZGxlcihtX2V2ZW50LmdldCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1f
ZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZXZlbnQt
PmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAotY29uc3QgRXZlbnRDb250ZXh0KiBFdmVudERp
c3BhdGNoZXI6OnRvcEV2ZW50Q29udGV4dCgpCitpbmxpbmUgdm9pZCBFdmVudERpc3BhdGNoZXJJ
bkJyb3dzaW5nQ29udGV4dDo6cmVzZXRUYXJnZXQoKQoreworICAgIG1fZXZlbnQtPnNldFRhcmdl
dChtX3dpbmRvd0V2ZW50Q29udGV4dC50YXJnZXQoKSk7CisgICAgbV9ldmVudC0+c2V0Q3VycmVu
dFRhcmdldCgwKTsKK30KKworY29uc3QgRXZlbnRDb250ZXh0KiBFdmVudERpc3BhdGNoZXJJbkJy
b3dzaW5nQ29udGV4dDo6dG9wRXZlbnRDb250ZXh0KCkKIHsKICAgICByZXR1cm4gbV9hbmNlc3Rv
cnMuaXNFbXB0eSgpID8gMCA6ICZtX2FuY2VzdG9ycy5sYXN0KCk7CiB9CkBAIC0zNzMsNyArMzYx
LDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpblRoZVNhbWVTY29wZShTaGFkb3dSb290KiBzaGFk
b3dSb290LCBFdmVudFRhcmdldCogdGFyZ2V0KQogICAgIHJldHVybiB0YXJnZXQtPnRvTm9kZSgp
ICYmIHRhcmdldC0+dG9Ob2RlKCktPnRyZWVTY29wZSgpLT5yb290Tm9kZSgpID09IHNoYWRvd1Jv
b3Q7CiB9CiAKLUV2ZW50RGlzcGF0Y2hCZWhhdmlvciBFdmVudERpc3BhdGNoZXI6OmRldGVybWlu
ZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqIGV2ZW50LCBTaGFkb3dSb290KiBzaGFkb3dSb290LCBF
dmVudFRhcmdldCogdGFyZ2V0KQorc3RhdGljIGJvb2wgZXZlbnRTaG91bGRCZVN0b3BwZWRBdEJv
dW5kYXJ5KEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBzZWxl
Y3RzdGFydCBldmVudCB0byBjcm9zcyB0aGUgdGhlIHNoYWRvdyBET00gYm91bmRhcnkuCisgICAg
Ly8gQ2hhbmdpbmcgdGhpcyBicmVha3MgZXhpc3Rpbmcgc2l0ZXMuCisgICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjE5NSBmb3IgZGV0YWlscy4KKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsKKyAgICByZXR1
cm4gZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50CisgICAgICAgICAgICB8fCBl
dmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50CisgICAgICAgICAgICB8fCBldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLnJlc2V0RXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkucmVzaXplRXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9
PSBldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBl
dmVudE5hbWVzKCkuc2VsZWN0RXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudDsKK30KKworRXZlbnREaXNwYXRjaEJlaGF2aW9yIEV2
ZW50RGlzcGF0Y2hlckluQnJvd3NpbmdDb250ZXh0OjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9y
KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBFTkFCTEUoVklERU8pCiAgICAgLy8gVmlkZW8tb25seSBm
dWxsIHNjcmVlbiBpcyBhIG1vZGUgd2hlcmUgd2UgdXNlIHRoZSBzaGFkb3cgRE9NIGFzIGFuIGlt
cGxlbWVudGF0aW9uCkBAIC0zODgsMjEgKzM5MSwxMzIgQEAgRXZlbnREaXNwYXRjaEJlaGF2aW9y
IEV2ZW50RGlzcGF0Y2hlcjo6ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCogZXZlbnQs
IFMKICAgICBVTlVTRURfUEFSQU0oc2hhZG93Um9vdCk7CiAjZW5kaWYKIAotICAgIC8vIFdlYktp
dCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0YXJ0IGV2ZW50IHRvIGNyb3NzIHRoZSB0aGUgc2hhZG93
IERPTSBib3VuZGFyeS4KLSAgICAvLyBDaGFuZ2luZyB0aGlzIGJyZWFrcyBleGlzdGluZyBzaXRl
cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUy
MTk1IGZvciBkZXRhaWxzLgotICAgIGNvbnN0IEF0b21pY1N0cmluZyBldmVudFR5cGUgPSBldmVu
dC0+dHlwZSgpOwotICAgIGlmIChpblRoZVNhbWVTY29wZShzaGFkb3dSb290LCB0YXJnZXQpCi0g
ICAgICAgICYmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQKLSAgICAgICAg
ICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQKLSAgICAgICAgICAg
IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAotICAgICAgICAgICAgfHwg
ZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudAotICAgICAgICAgICAgfHwgZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBl
ID09IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50KSkKKyAgICBpZiAoaW5UaGVTYW1lU2Nv
cGUoc2hhZG93Um9vdCwgdGFyZ2V0KSAmJiBldmVudFNob3VsZEJlU3RvcHBlZEF0Qm91bmRhcnko
bV9ldmVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBTdGF5SW5zaWRlU2hhZG93RE9NOwotCiAg
ICAgcmV0dXJuIFJldGFyZ2V0RXZlbnQ7CiB9CiAKK0V2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNw
YXRjaGVyKE5vZGUqIG5vZGUpCisgICAgOiBtX25vZGUobm9kZSkKKyNpZm5kZWYgTkRFQlVHCisg
ICAgLCBtX2V2ZW50RGlzcGF0Y2hlZChmYWxzZSkKKyNlbmRpZgoreworICAgIE1ZX0FTU0VSVChu
b2RlKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkUHJvcGFnYXRlRXZlbnRBY3Jvc3NTZWFtbGVz
c0lGcmFtZXMoRXZlbnQqIGV2ZW50KQoreworICAgIC8vIEZJWE1FOiBTdXBwb3J0IG1vcmUgZXZl
bnRzLgorICAgIGNvbnN0IEF0b21pY1N0cmluZyBldmVudFR5cGUgPSBldmVudC0+dHlwZSgpOwor
ICAgIHJldHVybiBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQKKyAgICAgICAg
ICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudDsKK30KKworc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPEV2ZW50PiBjbG9uZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
IGV2ZW50KQoreworICAgIC8vIEZJWE1FOiBTdXBwb3J0IG1vcmUgZXZlbnRzLgorICAgIC8vIEZJ
WE1FOiBjb3B5IGRldGFpbHMgYXR0cmlidXRlLgorICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2
ZW50LT50eXBlKCksIGV2ZW50LT5idWJibGVzKCksIGV2ZW50LT5jYW5jZWxhYmxlKCkpOworfQor
Cit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6cHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoUGFzc1JlZlB0
cjxFdmVudD4gcHJwRXZlbnQpCit7CisgICAgTVlfQVNTRVJUKG1fZGlzcGF0Y2hlcnMuaXNFbXB0
eSgpKTsKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CisgICAgTm9kZSogbm9k
ZSA9IG1fbm9kZS5nZXQoKTsKKyAgICBib29sIHByb3BhZ2F0ZUV2ZW50QWNyb3NzU2VhbWxlc3NJ
RnJhbWVzID0gc2hvdWxkUHJvcGFnYXRlRXZlbnRBY3Jvc3NTZWFtbGVzc0lGcmFtZXMoZXZlbnQu
Z2V0KCkpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIG1fZGlzcGF0Y2hlcnMuYXBwZW5k
KEV2ZW50RGlzcGF0Y2hlckluQnJvd3NpbmdDb250ZXh0KG5vZGUsIGV2ZW50KSk7CisgICAgICAg
IEV2ZW50RGlzcGF0Y2hlckluQnJvd3NpbmdDb250ZXh0JiBkaXNwYXRjaGVyID0gbV9kaXNwYXRj
aGVycy5sYXN0KCk7CisgICAgICAgIGlmICghZGlzcGF0Y2hlci5zaG91bGRDb250aW51ZVRvUGFy
ZW50RG9jdW1lbnQoKSB8fCAhcHJvcGFnYXRlRXZlbnRBY3Jvc3NTZWFtbGVzc0lGcmFtZXMpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIEhUTUxJRnJhbWVFbGVtZW50KiBwYXJlbnRJRnJh
bWUgPSBub2RlLT5kb2N1bWVudCgpLT5zZWFtbGVzc1BhcmVudElGcmFtZSgpOworICAgICAgICBp
ZiAoIXBhcmVudElGcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbm9kZSA9IHBh
cmVudElGcmFtZTsKKyAgICAgICAgZXZlbnQgPSBjbG9uZUV2ZW50KGV2ZW50KTsKKyAgICB9Cit9
CisKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjphZGp1c3RSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8
RXZlbnQ+IHBycEV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0
KQoreworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKKyAgICBpZiAobV9kaXNw
YXRjaGVycy5pc0VtcHR5KCkpCisgICAgICAgIHByZXBhcmVFdmVudERpc3BhdGNoZXJzKGV2ZW50
KTsKKyAgICBBU1NFUlQoIW1fZGlzcGF0Y2hlcnMuaXNFbXB0eSgpKTsKKyAgICAvLyBGSVhNRTog
RGVlcGVzdCBicm93c2luZyBjb250ZXh0IGlzIHN1cHBvcnRlZC4KKyAgICBtX2Rpc3BhdGNoZXJz
Lmxhc3QoKS5hZGp1c3RSZWxhdGVkVGFyZ2V0KHBycFJlbGF0ZWRUYXJnZXQpOworfQorCitib29s
IEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVu
dCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKCFtX2V2ZW50RGlzcGF0Y2hlZCk7Cisg
ICAgbV9ldmVudERpc3BhdGNoZWQgPSB0cnVlOworI2VuZGlmCisgICAgUmVmUHRyPEV2ZW50PiBl
dmVudCA9IHBycEV2ZW50OworICAgIGlmIChtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSkKKyAgICAg
ICAgcHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoZXZlbnQpOworICAgIEFTU0VSVCghbV9kaXNwYXRj
aGVycy5pc0VtcHR5KCkpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29r
aWUgPSBtX2Rpc3BhdGNoZXJzWzBdLndpbGxEaXNwYXRjaEV2ZW50KCk7CisKKyAgICBmaXJlRGlz
cGF0Y2hlcnMoKTsKKyAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBmaXJlRGlzcGF0Y2hlcnNE
ZWZhdWx0RXZlbnRIYW5kbGVyKCk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCBhZnRlciBldmVudCBk
aXNwYXRjaCwgdGhlIGV2ZW50J3MgdGFyZ2V0IG9iamVjdCBpcyB0aGUKKyAgICAvLyBvdXRlcm1v
c3Qgc2hhZG93IERPTSBib3VuZGFyeS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGlz
cGF0Y2hlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZGlzcGF0Y2hlcnNbaV0ucmVzZXRUYXJn
ZXQoKTsKKworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudChj
b29raWUpOworICAgIHJldHVybiAhZGVmYXVsdFByZXZlbnRlZDsKK30KKworaW5saW5lIHZvaWQg
RXZlbnREaXNwYXRjaGVyOjpmaXJlRGlzcGF0Y2hlcnMoKQoreworICAgIEFTU0VSVCghbV9kaXNw
YXRjaGVycy5pc0VtcHR5KCkpOworICAgIHNpemVfdCBzaXplID0gbV9kaXNwYXRjaGVycy5zaXpl
KCk7CisgICAgZm9yIChpbnQgaSA9IHNpemUgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBp
ZiAobV9kaXNwYXRjaGVyc1tpXS5kaXNwYXRjaEV2ZW50UHJlUHJvY2VzcygpID09IERvbmVEaXNw
YXRjaGluZworICAgICAgICAgICAgICAgIHx8IG1fZGlzcGF0Y2hlcnNbaV0uZGlzcGF0Y2hFdmVu
dEF0Q2FwdHVyaW5nKCkgPT0gRG9uZURpc3BhdGNoaW5nKSB7CisgICAgICAgICAgICBmaXJlRGlz
cGF0Y2hlcnNQb3N0UHJvY2VzcyhpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBp
ZiAobV9kaXNwYXRjaGVyc1tpXS5kaXNwYXRjaEV2ZW50QXRUYXJnZXQoKSA9PSBEb25lRGlzcGF0
Y2hpbmcKKyAgICAgICAgICAgICAgICB8fCBtX2Rpc3BhdGNoZXJzW2ldLmRpc3BhdGNoRXZlbnRB
dEJ1YmJsaW5nKCkgPT0gRG9uZURpc3BhdGNoaW5nKSB7CisgICAgICAgICAgICBmaXJlRGlzcGF0
Y2hlcnNQb3N0UHJvY2VzcyhpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBtX2Rpc3BhdGNoZXJzW2ldLmRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcygpOworICAgIH0K
K30KKworaW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpmaXJlRGlzcGF0Y2hlcnNQb3N0UHJv
Y2VzcyhpbnQgYnJvd3NpbmdDb250ZXh0TnVtYmVyKQoreworICAgIHNpemVfdCBzaXplID0gbV9k
aXNwYXRjaGVycy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IGJyb3dzaW5nQ29udGV4dE51
bWJlcjsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbV9kaXNwYXRjaGVyc1tpXS5kaXNwYXRjaEV2
ZW50UG9zdFByb2Nlc3MoKTsKK30KKworaW5saW5lIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpmaXJl
RGlzcGF0Y2hlcnNEZWZhdWx0RXZlbnRIYW5kbGVyKCkKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1f
ZGlzcGF0Y2hlcnMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgIGNvbnN0IEV2ZW50KiBldmVudCA9IG1fZGlzcGF0Y2hlcnNbaV0uZXZlbnQo
KTsKKyAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgbV9kaXNwYXRjaGVyc1tpXS5kaXNwYXRjaEV2ZW50RGVmYXVs
dEhhbmRsZXIoKTsKKyAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKSB7CisgICAg
ICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghZXZlbnQtPmJ1YmJsZXMoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggNWJmZWFkMGQwZTZjYmUw
YjgwMDM0ZDQyMjVhNjBlMzI0ZGZhYzgzOS4uMDAyY2I2NzRhZjE5Yzg5NzZmY2NlODg4MDJmNzVh
ZDAxN2JlZDcyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApAQCAtMjYsNiAr
MjYsOSBAQAogI2lmbmRlZiBFdmVudERpc3BhdGNoZXJfaAogI2RlZmluZSBFdmVudERpc3BhdGNo
ZXJfaAogCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAi
V2luZG93RXZlbnRDb250ZXh0LmgiCisKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDIsNyArNDUs
NiBAQCBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZl
bnQ7CiBjbGFzcyBTaGFkb3dSb290OwogY2xhc3MgVHJlZVNjb3BlOwotY2xhc3MgV2luZG93RXZl
bnRDb250ZXh0OwogCiBlbnVtIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciB7CiAgICAgUmV0YXJnZXRF
dmVudCwKQEAgLTU0LDYgKzU2LDExIEBAIGVudW0gRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiB7
CiAgICAgRG9uZURpc3BhdGNoaW5nCiB9OwogCitlbnVtIEV2ZW50QW5jZXN0b3JDb250aW51YXRp
b24geworICAgIEV2ZW50QW5jZXN0b3JTdG9wLAorICAgIEV2ZW50QW5jZXN0b3JDb250aW51ZVRv
UGFyZW50Cit9OworCiBjbGFzcyBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlciB7CiBwdWJsaWM6
CiAgICAgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIoUGFzc1JlZlB0cjxOb2RlPiwgUGFzc1Jl
ZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KTsKQEAgLTY3LDQ1ICs3NCw2NCBAQCBwcml2YXRlOgog
ICAgIFJlbGF0ZWRUYXJnZXRNYXAgbV9yZWxhdGVkVGFyZ2V0TWFwOwogfTsKIAorY2xhc3MgRXZl
bnREaXNwYXRjaGVySW5Ccm93c2luZ0NvbnRleHQgeworcHVibGljOgorICAgIEV2ZW50RGlzcGF0
Y2hlckluQnJvd3NpbmdDb250ZXh0KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9p
ZCBhZGp1c3RSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRU
YXJnZXQpOworCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsg
fQorICAgIGNvbnN0IEV2ZW50KiBldmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnQuZ2V0KCk7
IH0KKworICAgIGJvb2wgc2hvdWxkQ29udGludWVUb1BhcmVudERvY3VtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9ldmVudEFuY2VzdG9yQ29udGludWF0aW9uID09IEV2ZW50QW5jZXN0b3JDb250aW51
ZVRvUGFyZW50OyB9CisKKyAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZl
bnRQcmVQcm9jZXNzKCk7CisgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2
ZW50QXRDYXB0dXJpbmcoKTsKKyAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNo
RXZlbnRBdFRhcmdldCgpOworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hF
dmVudEF0QnViYmxpbmcoKTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcygpOwor
ICAgIHZvaWQgZGlzcGF0Y2hFdmVudERlZmF1bHRIYW5kbGVyKCk7CisKKyAgICB2b2lkIHJlc2V0
VGFyZ2V0KCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxEaXNwYXRj
aEV2ZW50KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIGRl
dGVybWluZURpc3BhdGNoQmVoYXZpb3IoU2hhZG93Um9vdCosIEV2ZW50VGFyZ2V0Kik7CisgICAg
Y29uc3QgRXZlbnRDb250ZXh0KiB0b3BFdmVudENvbnRleHQoKTsKKyAgICBFdmVudEFuY2VzdG9y
Q29udGludWF0aW9uIGNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycygpOworCisgICAgUmVmUHRyPE5v
ZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8RXZlbnQ+IG1fZXZlbnQ7CisgICAgVmVjdG9yPEV2ZW50
Q29udGV4dD4gbV9hbmNlc3RvcnM7CisgICAgRXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbiBtX2V2
ZW50QW5jZXN0b3JDb250aW51YXRpb247CisgICAgUmVmUHRyPEZyYW1lVmlldz4gbV92aWV3Owor
ICAgIFdpbmRvd0V2ZW50Q29udGV4dCBtX3dpbmRvd0V2ZW50Q29udGV4dDsKKyAgICB2b2lkKiBt
X3ByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0OworfTsKKwogY2xhc3MgRXZlbnREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaEV2ZW50KE5vZGUqLCBQYXNz
UmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4pOwogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNo
U2NvcGVkRXZlbnQoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPik7Ci0K
ICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqLCBQYXNzUmVmUHRy
PEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29sIHNob3dQ
cmVzc2VkTG9vayk7CiAKKyAgICB2b2lkIGFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxF
dmVudD4sIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQpOwogICAgIGJvb2wg
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgdm9pZCBhZGp1c3RSZWxhdGVk
VGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCk7
Ci0gICAgTm9kZSogbm9kZSgpIGNvbnN0OworICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVy
biBtX25vZGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBFdmVudERpc3BhdGNoZXIoTm9kZSop
OworICAgIHZvaWQgcHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoUGFzc1JlZlB0cjxFdmVudD4pOwor
ICAgIHZvaWQgZmlyZURpc3BhdGNoZXJzKCk7CisgICAgdm9pZCBmaXJlRGlzcGF0Y2hlcnNQb3N0
UHJvY2VzcyhpbnQgYnJvd3NpbmdDb250ZXh0TnVtYmVyKTsKKyAgICBib29sIGZpcmVEaXNwYXRj
aGVyc0RlZmF1bHRFdmVudEhhbmRsZXIoKTsKIAotICAgIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciBk
ZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiwgU2hhZG93Um9vdCosIEV2ZW50VGFyZ2V0
Kik7Ci0KLSAgICB2b2lkIGVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50Kik7Ci0gICAgY29uc3Qg
RXZlbnRDb250ZXh0KiB0b3BFdmVudENvbnRleHQoKTsKLQotICAgIEV2ZW50RGlzcGF0Y2hDb250
aW51YXRpb24gZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MoUGFzc1JlZlB0cjxFdmVudD4sIHZvaWQq
JiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7Ci0gICAgRXZlbnREaXNwYXRjaENvbnRp
bnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoUGFzc1JlZlB0cjxFdmVudD4sIFdpbmRv
d0V2ZW50Q29udGV4dCYpOwotICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hF
dmVudEF0VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBFdmVudERpc3BhdGNoQ29udGlu
dWF0aW9uIGRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKFBhc3NSZWZQdHI8RXZlbnQ+LCBXaW5kb3dF
dmVudENvbnRleHQmKTsKLSAgICB2b2lkIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcyhQYXNzUmVm
UHRyPEV2ZW50Piwgdm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOwotCi0gICAg
VmVjdG9yPEV2ZW50Q29udGV4dD4gbV9hbmNlc3RvcnM7CisgICAgVmVjdG9yPEV2ZW50RGlzcGF0
Y2hlckluQnJvd3NpbmdDb250ZXh0PiBtX2Rpc3BhdGNoZXJzOwogICAgIFJlZlB0cjxOb2RlPiBt
X25vZGU7Ci0gICAgUmVmUHRyPEZyYW1lVmlldz4gbV92aWV3OwotICAgIGJvb2wgbV9hbmNlc3Rv
cnNJbml0aWFsaXplZDsKICNpZm5kZWYgTkRFQlVHCiAgICAgYm9vbCBtX2V2ZW50RGlzcGF0Y2hl
ZDsKICNlbmRpZgogfTsKIAotaW5saW5lIE5vZGUqIEV2ZW50RGlzcGF0Y2hlcjo6bm9kZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fbm9kZS5nZXQoKTsKLX0KLQogfQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCBiNjQwMGJkNjExOTJkMTE5ZjgxMDE0YWY2NTZlNDU2Y2M1ZTMyNmI4Li42ZGJmMDhmMjZmNTZi
NTk1ZTc3YzcxMmMxZTU2NzA2NzE1ZmVkNGQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTIt
MDgtMDkgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIHNlYW1s
ZXNzIGlmcmFtZXMgc2hvdWxkIHJldGFyZ2V0IGV2ZW50cyB0byB0aGUgcGFyZW50IGRvY3VtZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTI5MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9m
cmFtZXMvc2VhbWxlc3MvcmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNzLWV2ZW50cy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNzLWV2ZW50cy5odG1s
OiBBZGRlZC4KKwogMjAxMi0wOC0wOCAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9i
ZS5jb20+CiAKICAgICAgICAgW0NTUyBTaGFkZXJzXSBJbnZhbGlkIHNoYWRlcnMgc2hvdWxkIGFj
dCBhcyBwYXNzLXRocm91Z2ggZmlsdGVycwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9m
cmFtZXMvc2VhbWxlc3MvcmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2ZyYW1lcy9zZWFtbGVzcy9yZXNvdXJjZXMvZmlyZS1ldmVudHMuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mM2U2MjcwM2M3Y2UxMTUxYTViZTg0YjI4MGZlMTNlYzQzZDM4MjA1Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3MvcmVzb3VyY2VzL2ZpcmUtZXZl
bnRzLmh0bWwKQEAgLTAsMCArMSwxOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5
PgorPGRpdiBpZD0ndGFyZ2V0Jz48L2Rpdj4KKzxzY3JpcHQ+Cit3aW5kb3cuYWRkRXZlbnRMaXN0
ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdmFyIHRhcmdldCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQnKTsKKyAgICB2YXIgZXZlbnRzID0gWydhYm9ydCcs
ICdzZWxlY3QnLCAnY2hhbmdlJywgJ2NsaWNrJywgJ2RibGNsaWNrJywgJ3Jlc2V0JywgJ3Jlc2l6
ZScsICdzY3JvbGwnLCAnc2VsZWN0c3RhcnQnXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2
ZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVF
dmVudCgnVUlFdmVudCcpOworICAgICAgICBldmVudC5pbml0RXZlbnQoZXZlbnRzW2ldLCB0cnVl
LCBmYWxzZSk7CisgICAgICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICB9Cisg
ICAgd2luZG93LnRvcC5wb3N0TWVzc2FnZSgnRE9ORScsICcqJyk7Cit9LCBmYWxzZSk7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJh
bWVzL3NlYW1sZXNzL3NlYW1sZXNzLWV2ZW50cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYxYzZlYTU4YjBhNDRmMDc1NWU4ZTYyMjNkNWViYjlhNGM1MzY3NDEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjQgQEAKK1Rlc3QgdGhhdCBldmVudCBwcm9wYWdhdGVz
IGFjcm9zcyBzZWFtbGVzcyBpZnJhbWVzLgorCisgIGFib3J0CisKKyAgc2VsZWN0CisKKyAgY2hh
bmdlCisKKyAgY2xpY2sKKyAgICAgQHNlYW1sZXNzLWlmcmFtZSAodGFyZ2V0OiBzZWFtbGVzcy1p
ZnJhbWUpCisgICAgIEBib2R5ICh0YXJnZXQ6IHNlYW1sZXNzLWlmcmFtZSkKKworICBkYmxjbGlj
aworICAgICBAc2VhbWxlc3MtaWZyYW1lICh0YXJnZXQ6IHNlYW1sZXNzLWlmcmFtZSkKKyAgICAg
QGJvZHkgKHRhcmdldDogc2VhbWxlc3MtaWZyYW1lKQorCisgIHJlc2V0CisKKyAgcmVzaXplCisK
KyAgc2Nyb2xsCisKKyAgc2VsZWN0c3RhcnQKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2Y4MzEy
Y2JjMWY1MWZmZGY5ZTdhMmNmOTIxZjU1Yzk3MzJmNmE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLmh0bWwKQEAgLTAs
MCArMSw3MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5IGlkPSdib2R5Jz4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdD4KK2RlYnVnKCJUZXN0IHRoYXQgZXZlbnQgcHJvcGFnYXRlcyBhY3Jvc3Mgc2VhbWxl
c3MgaWZyYW1lcy4iKQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVy
LmR1bXBBc1RleHQoKTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFy
IGV2ZW50cyA9IFsnYWJvcnQnLCAnc2VsZWN0JywgJ2NoYW5nZScsICdjbGljaycsICdkYmxjbGlj
aycsICdyZXNldCcsICdyZXNpemUnLCAnc2Nyb2xsJywgJ3NlbGVjdHN0YXJ0J107Cit2YXIgZXZl
bnRSZWNvcmRzID0ge307CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgKytp
KQorICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihldmVudHNbaV0sIHJlY29yZEV2
ZW50KTsKKworZnVuY3Rpb24gaWZyYW1lTG9hZGVkKGlmcmFtZSkgeworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgKytpKQorICAgICAgICBpZnJhbWUuYWRkRXZlbnRMaXN0
ZW5lcihldmVudHNbaV0sIHJlY29yZEV2ZW50KTsKKyAgICBpZnJhbWUuY29udGVudFdpbmRvdy5w
b3N0TWVzc2FnZSgnZmlyZScsICcqJyk7Cit9CisKK3ZhciBtZXNzYWdlUmVjZWl2ZWRDb3VudCA9
IDA7CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICBpZiAoKyttZXNzYWdlUmVjZWl2ZWRDb3VudCA9PSAyKSAgeworICAgICAgICBkdW1w
RGlzcGF0Y2hlZEV2ZW50KCk7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30sIGZhbHNlKTsKKworZnVu
Y3Rpb24gcmVjb3JkRXZlbnQoZXZlbnQpCit7CisgICAgdmFyIGV2ZW50VHlwZSA9IGV2ZW50LnR5
cGUKKyAgICBpZiAoIWV2ZW50UmVjb3Jkc1tldmVudFR5cGVdKQorICAgICAgICBldmVudFJlY29y
ZHNbZXZlbnRUeXBlXSA9IFtdOworICAgIHZhciBldmVudFN0cmluZyA9ICcnOworICAgIGlmIChl
dmVudC5jdXJyZW50VGFyZ2V0KQorICAgICAgICBldmVudFN0cmluZyArPSAnIEAnICsgZXZlbnQu
Y3VycmVudFRhcmdldC5pZDsKKyAgICBpZiAoZXZlbnQudGFyZ2V0KQorICAgICAgICBldmVudFN0
cmluZyArPSAnICh0YXJnZXQ6ICcgKyBldmVudC50YXJnZXQuaWQgKyAnKSc7CisgICAgaWYgKGV2
ZW50LnJlbGF0ZWRUYXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHJlbGF0ZWQ6ICcg
KyBldmVudC5yZWxhdGVkVGFyZ2V0LmlkICsgJyknOworICAgIGlmIChldmVudC5ldmVudFBoYXNl
ID09IDEpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcoY2FwdHVyaW5nIHBoYXNlKSc7CisgICAg
aWYgKGV2ZW50LnRhcmdldCAmJiBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5p
ZCA9PSBldmVudC5jdXJyZW50VGFyZ2V0LmlkKQorICAgICAgICBzaG91bGRCZSgiZXZlbnQuZXZl
bnRQaGFzZSIsICIyIiwgdHJ1ZSk7CisgICAgZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0ucHVzaChl
dmVudFN0cmluZyk7Cit9CisKK2Z1bmN0aW9uIGR1bXBEaXNwYXRjaGVkRXZlbnQoKQoreworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBl
dmVudFR5cGUgPSBldmVudHNbaV07CisgICAgICAgIGRlYnVnKCdcbiAgJyArIGV2ZW50VHlwZSk7
CisgICAgICAgIHZhciByZWNvcmQgPSBldmVudFJlY29yZHNbZXZlbnRUeXBlXSB8fCBbXTsKKyAg
ICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByZWNvcmQubGVuZ3RoOyArK2opCisgICAgICAgICAg
ICBkZWJ1ZygnICAgICcgKyByZWNvcmRbal0pCisgICAgfQorfQorCis8L3NjcmlwdD4KKzxkaXYg
aWQ9ImNvbnRhaW5lciI+CisgICAgPGlmcmFtZSBpZD0nc2VhbWxlc3MtaWZyYW1lJyBvbmxvYWQ9
J2lmcmFtZUxvYWRlZCh0aGlzKScgc3JjPSdyZXNvdXJjZXMvZmlyZS1ldmVudHMuaHRtbCcgc2Vh
bWxlc3M9J3RydWUnPjwvaWZyYW1lPgorICAgIDxpZnJhbWUgaWQ9J25vbi1zZWFtbGVzcy1pZnJh
bWUnIG9ubG9hZD0naWZyYW1lTG9hZGVkKHRoaXMpJyBzcmM9J3Jlc291cmNlcy9maXJlLWV2ZW50
cy5odG1sJz48L2lmcmFtZT4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157637</attachid>
            <date>2012-08-09 22:14:25 -0700</date>
            <delta_ts>2012-08-10 01:40:46 -0700</delta_ts>
            <desc>ready for review</desc>
            <filename>bug-91290-20120810141357.patch</filename>
            <type>text/plain</type>
            <size>35081</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjFlMWViY2Q0ZWE2NzYz
M2QyYjEwNzk3ODQwOThiOWM2M2I3ZjVmOC4uNzc4MzUxZjdjMDYyMTkzZTY4MzJlZmM0MWM5Nzgy
NjY1OTNmOWU2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0wOC0wOSAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2VhbWxlc3MgaWZyYW1l
cyBzaG91bGQgcmV0YXJnZXQgZXZlbnRzIHRvIHRoZSBwYXJlbnQgZG9jdW1lbnQuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTI5MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgZXZlbnQgcHJv
cGFnYXRpb24gYWNyb3NzIHNlYW1sZXNzIGlmcmFtZXMuCisgICAgICAgIEFzIHRoZSBmaXJzdCBz
dGVwLCAnY2xpY2snIGFuZCAnZGJsY2xpY2snIGV2ZW50cyBoYXZlIGJlZW4gc3VwcG9ydGVkLgor
ICAgICAgICBTdXBwb3J0IGZvciBvdGhlciBraW5kcyBvZiBldmVudHMgd2lsbCBmb2xsb3cuCisK
KyAgICAgICAgVG8gc3VwcG9ydCBldmVudCBkaXNwYXRjaGluZyBhY3Jvc3MgYnJvd3NpbmcgY29u
dGV4dCwgSSd2ZQorICAgICAgICBpbnRyb2R1Y2VkIGEgRXZlbnREaXNwYXRjaGVySW5Ccm93c2lu
Z0NvbnRleHQsIHdob3NlIHJvbGUgaXMgc2ltaWxhciB0bworICAgICAgICBhbiBFdmVudERpc3Bh
dGNoZXIgcHJpb3IgdG8gdGhpcyBwYXRjaC4gQnV0IHRoZSBpbnRlcm5hbAorICAgICAgICBzdHJ1
Y3R1cmUgd2FzIHNpZ25pZmljYW50bHkgY2hhbmdlZCBzbyB0aGF0IGl0IGNhbiBiZSBtYW5hZ2Vk
IGZyb20gb3V0c2lkZS4KKworICAgICAgICBBbiBFdmVudERpc3BhdGNoZXIgbm93IGFjdHMgYXMg
aWYgaXQgd2VyZSBhIG1ldGEgZGlzcGF0Y2hlciB3aGljaAorICAgICAgICBkZWxlZ2F0ZXMgZXZl
bnQgZGlzcGF0Y2hpbmcgdG8gZWFjaCBkaXNwYXRjaGVyIGluIGVhY2ggYnJvd3NpbmcKKyAgICAg
ICAgY29udGV4dC4gSXQgbWFuYWdlcyB0aGUgZmxvdyBvZiBleGVjdXRpb24gb2YgZGlzcGF0Y2hl
cnMuCisKKyAgICAgICAgQWNjb3JkaW5nIHRvIHRoZSBkaXNjdXNzaW9uIG9mIGJ1ZyA5MTI5MCwg
d2hhdHdnIG1pZ2h0IHNwZWMKKyAgICAgICAgd2hhdGV2ZXIgV2ViS2l0IGltcGxlbWVudHMuICBT
byBsZXQgbWUgZXhwbGFpbiBob3cgZXZlbnQKKyAgICAgICAgZGlzcGF0Y2hpbmcgd29ya3MgYWNy
b3NzIHNlYW1sZXNzIGlmcmFtZXMgYnJpZWZseSBoZXJlOgorCisgICAgICAgIDEuIEFuY2VzdG9y
IG5vZGVzIG9mIGV2ZW50IGFyZSBjYWxjdWxhdGVkIGFzIHVzdWFsLCBidXQgaWYgdGhlCisgICAg
ICAgICAgIGN1cnJlbnQgYnJvd3NpbmcgY29udGV4dCBpcyB0aGF0IG9mIGEgc2VhbWxlc3MgaWZy
YW1lLCBjb250aW51ZSB0bworICAgICAgICAgICB0cmF2ZXJzaW5nIGFuY2VzdG9ycyBvZiB0aGUg
cGFyZW50IGJyb3dzaW5nIGNvbnRleHQuCisgICAgICAgIDIuIEZvciBlYWNoIGJyb3dzaW5nIGNv
bnRleHQsIGNsb25lIHRoZSBldmVudCBvYmplY3QuIEluIHRoZSBsYXRlcgorICAgICAgICAgICBl
dmVudCBkaXNwYXRjaGluZywgdXNlIHRoZSBjbG9uZWQgZXZlbnQgb2JqZWN0IGluIGVhY2ggYnJv
d3NpbmcKKyAgICAgICAgICAgY29udGV4dCBzbyB0aGF0IHdlIGNhbiBpc29sYXRlIGV2ZW50IG9i
amVjdHMuCisgICAgICAgIDMuIFRhcmdldCBvZiB0aGUgY2xvbmVkIGV2ZW50IG9iamVjdHMgaXMg
cmV0YXJnZXRlZCB0byBpZnJhbWUncyBvd25lciBlbGVtZW50LgorICAgICAgICA0LiBQcm9jZXNz
IGNhcHR1cmluZywgdGFyZ2V0IGFuZCBidWJibGluZyBwaGFzZXMgYXMgaWYgdGhlcmUgd2FzCisg
ICAgICAgICAgIG9uZSBiaWcgJ2FuY2VzdG9yJyBjaGFpbi4gIFRoYXQgbWVhbnMgaWYgYW4gZXZl
bnQgbGlzdGVuZXIgaW4gYW4KKyAgICAgICAgICAgdXBwZXIgYnJvd3NpbmcgY29udGV4dCBjYWxs
cyBzdG9wUHJvcGFnYXRpb24oKSBhdCBjYXB0dXJpbmcKKyAgICAgICAgICAgcGhhc2UsIG5lc3Rl
ZCBicm93c2luZyBjb250ZXh0cyBuZXZlciByZWNlaXZlIGFuIGV2ZW50LgorICAgICAgICA1LiBV
bmxlc3MgZGVmYXVsdCBpcyBwcmV2ZW50ZWQsIHRyeSB0byBjYWxsIGRlZmF1bHQgZXZlbnQgaGFu
ZGxlcgorICAgICAgICAgICBzdGFydGluZyBmcm9tIHRoZSBib3R0b20gbm9kZSBvZiBhbmNlc3Rv
cnMgdW50aWwgYSBkZWZhdWx0IGlzCisgICAgICAgICAgIGhhbmRsZWQuCisKKyAgICAgICAgRXhh
bXBsZTogIFN1cHBvc2Ugd2UgaGF2ZSB0aGUgZm9sbG93aW5nIEhUTUwgYW5kIG5lc3RlZCBzZWFt
bGVzcyBpZnJhbWVzLiBUaGVyZSBhcmUgdGhyZWUgYnJvd3NpbmcgY29udGV4dHMuCisKKyAgICAg
ICAgMSkgZG9jLmh0bWw6CisgICAgICAgICAgIDxBPgorICAgICAgICAgICAgICA8Qj4KKyAgICAg
ICAgICAgICAgICA8aWZyYW1lIGlkPUMgc2VhbWxlc3Mgc3JjPSJpZnJhbWUxLmh0bWwiPgorCisg
ICAgICAgIDIpIGlmcmFtZTEuaHRtbDoKKyAgICAgICAgICAgPEQ+CisgICAgICAgICAgICAgIDxF
PgorICAgICAgICAgICAgICAgIDxpZnJhbWUgaWQ9RiBzZWFtbGVzcyBzcmM9ImlmcmFtZTIuaHRt
bCI+CisKKyAgICAgICAgMykgaWZyYW1lMi5odG1sOgorICAgICAgICAgICA8Rz4KKyAgICAgICAg
ICAgICAgPEg+CisKKyAgICAgICAgSWYgYSBjbGljaycgZXZlbnQgaXMgZmlyZWQgb24gbm9kZSBG
LCB3ZSB3aWxsIGRpc3BhdGNoIGV2ZW50cyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorICAgICAg
ICAgIDEuIEEgKEBjYXB0dXJlKSAodGFyZ2V0ID09IEMpCisgICAgICAgICAgMi4gQiAoQGNhcHR1
cmUpICh0YXJnZXQgPT0gQykKKyAgICAgICAgICAzLiBEIChAY2FwdHVyZSkgKHRhcmdldCA9PSBG
KQorICAgICAgICAgIDQuIEUgKEBjYXB0dXJlKSAodGFyZ2V0ID09IEYpCisgICAgICAgICAgNS4g
RyAoQGNhcHR1cmUpICh0YXJnZXQgPT0gSCkKKyAgICAgICAgICA2LiBIIChAdGFyZ2V0KSAgKHRh
cmdldCA9PSBIKQorICAgICAgICAgIDcuIEcgKEBidWJibGUpICAodGFyZ2V0ID09IEgpCisgICAg
ICAgICAgOC4gRiAoQHRhcmdldCkgICh0YXJnZXQgPT0gRikKKyAgICAgICAgICA5LiBFIChAYnVi
YmxlKSAgKHRhcmdldCA9PSBGKQorICAgICAgICAgIDkuIEQgKEBidWJibGUpICAodGFyZ2V0ID09
IEYpCisgICAgICAgICAxMC4gQyAoQHRhcmdldCkgICh0YXJnZXQgPT0gQykKKyAgICAgICAgIDEx
LiBCIChidWJibGUpICAgKHRhcmdldCA9PSBDKQorICAgICAgICAgMTIuIEEgKGJ1YmJsZSkgICAo
dGFyZ2V0ID09IEMpCisKKyAgICAgICAgVGVzdDogZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxl
c3MtZXZlbnRzLmh0bWwKKworICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAg
ICAgICAoRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6bm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6ZXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVySW5Ccm93c2luZ0NvbnRleHQ6OnNob3VsZENvbnRp
bnVlVG9QYXJlbnREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXJJ
bkJyb3dzaW5nQ29udGV4dDo6YWRqdXN0UmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6RXZlbnREaXNwYXRjaGVySW5Ccm93
c2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVySW5Ccm93c2lu
Z0NvbnRleHQ6OmNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6d2lsbERpc3BhdGNoRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVySW5Ccm93c2luZ0NvbnRleHQ6OmRpc3BhdGNo
RXZlbnRQcmVQcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckluQnJv
d3NpbmdDb250ZXh0OjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnREaXNwYXRjaGVySW5Ccm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZlbnRBdFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6
ZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRj
aGVySW5Ccm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZlbnRQb3N0UHJvY2Vzcyk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6ZGlzcGF0Y2hFdmVu
dERlZmF1bHRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckluQnJv
d3NpbmdDb250ZXh0OjpyZXNldFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3Bh
dGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6dG9wRXZlbnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OmV2ZW50U2hvdWxkQmVTdG9wcGVkQXRCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlv
cik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcik6
CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRQcm9wYWdhdGVFdmVudEFjcm9zc1NlYW1sZXNzSUZy
YW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpjbG9uZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50RGlzcGF0Y2hlcjo6cHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnREaXNwYXRjaGVyOjphZGp1c3RSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudERpc3BhdGNoZXI6OmZpcmVEaXNwYXRjaGVycyk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudERpc3BhdGNoZXI6OmZpcmVEaXNwYXRjaGVyc1Bvc3RQcm9jZXNzKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNoZXJzRGVmYXVsdEV2ZW50SGFuZGxl
cik6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChFdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNw
YXRjaGVyOjpub2RlKToKKwogMjAxMi0wOC0wOSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFNhbmRib3hpbmcgdmlldyBzb3VyY2UgZG9jdW1lbnRzIGlzIGluZWZm
ZWN0aXZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGUxYTYwZjNk
NDBiM2EyOTVmOTdmYTgxZTY5MGZjYWRkNzUyODRjYjQuLjUzN2IzZmVlZDk0OTQ2MmRlYmMyOTVk
YzlhMWMyZjQ4MWU4MjFiYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3Bw
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmgiCiAjaW5jbHVkZSAi
RXZlbnREaXNwYXRjaE1lZGlhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVk
ZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCIKQEAgLTUwLDYgKzUxLDY4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorZW51
bSBFdmVudERpc3BhdGNoQmVoYXZpb3IgeworICAgIFJldGFyZ2V0RXZlbnQsCisgICAgU3RheUlu
c2lkZVNoYWRvd0RPTQorfTsKKworZW51bSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIHsKKyAg
ICBDb250aW51ZURpc3BhdGNoaW5nLAorICAgIERvbmVEaXNwYXRjaGluZworfTsKKworZW51bSBF
dmVudEFuY2VzdG9yQ29udGludWF0aW9uIHsKKyAgICBFdmVudEFuY2VzdG9yU3RvcCwKKyAgICBF
dmVudEFuY2VzdG9yQ29udGludWVUb1BhcmVudAorfTsKKworY2xhc3MgRXZlbnRSZWxhdGVkVGFy
Z2V0QWRqdXN0ZXIgeworcHVibGljOgorICAgIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKFBh
c3NSZWZQdHI8Tm9kZT4sIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZFRhcmdldCk7CisgICAgdm9p
ZCBhZGp1c3QoVmVjdG9yPEV2ZW50Q29udGV4dD4mKTsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBI
YXNoTWFwPFRyZWVTY29wZSosIEV2ZW50VGFyZ2V0Kj4gUmVsYXRlZFRhcmdldE1hcDsKKyAgICBF
dmVudFRhcmdldCogZmluZFJlbGF0ZWRUYXJnZXQoVHJlZVNjb3BlKik7CisKKyAgICBSZWZQdHI8
Tm9kZT4gbV9ub2RlOworICAgIFJlZlB0cjxOb2RlPiBtX3JlbGF0ZWRUYXJnZXQ7CisgICAgUmVs
YXRlZFRhcmdldE1hcCBtX3JlbGF0ZWRUYXJnZXRNYXA7Cit9OworCitjbGFzcyBFdmVudERpc3Bh
dGNoZXJJbkJyb3dzaW5nQ29udGV4dCB7CitwdWJsaWM6CisgICAgRXZlbnREaXNwYXRjaGVySW5C
cm93c2luZ0NvbnRleHQoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGFkanVz
dFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCk7
CisKKyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CisgICAg
Y29uc3QgRXZlbnQqIGV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmVudC5nZXQoKTsgfQorCisg
ICAgYm9vbCBzaG91bGRDb250aW51ZVRvUGFyZW50RG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2V2ZW50QW5jZXN0b3JDb250aW51YXRpb24gPT0gRXZlbnRBbmNlc3RvckNvbnRpbnVlVG9QYXJl
bnQ7IH0KKworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVudFByZVBy
b2Nlc3MoKTsKKyAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZlbnRBdENh
cHR1cmluZygpOworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVudEF0
VGFyZ2V0KCk7CisgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRC
dWJibGluZygpOworICAgIHZvaWQgZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKCk7CisgICAgdm9p
ZCBkaXNwYXRjaEV2ZW50RGVmYXVsdEhhbmRsZXIoKTsKKworICAgIHZvaWQgcmVzZXRUYXJnZXQo
KTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnQo
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBFdmVudERpc3BhdGNoQmVoYXZpb3IgZGV0ZXJtaW5l
RGlzcGF0Y2hCZWhhdmlvcihTaGFkb3dSb290KiwgRXZlbnRUYXJnZXQqKTsKKyAgICBjb25zdCBF
dmVudENvbnRleHQqIHRvcEV2ZW50Q29udGV4dCgpOworICAgIEV2ZW50QW5jZXN0b3JDb250aW51
YXRpb24gY2FsdWN1bGF0ZUV2ZW50QW5jZXN0b3JzKCk7CisKKyAgICBSZWZQdHI8Tm9kZT4gbV9u
b2RlOworICAgIFJlZlB0cjxFdmVudD4gbV9ldmVudDsKKyAgICBWZWN0b3I8RXZlbnRDb250ZXh0
PiBtX2FuY2VzdG9yczsKKyAgICBFdmVudEFuY2VzdG9yQ29udGludWF0aW9uIG1fZXZlbnRBbmNl
c3RvckNvbnRpbnVhdGlvbjsKKyAgICBSZWZQdHI8RnJhbWVWaWV3PiBtX3ZpZXc7CisgICAgV2lu
ZG93RXZlbnRDb250ZXh0IG1fd2luZG93RXZlbnRDb250ZXh0OworICAgIHZvaWQqIG1fcHJlRGlz
cGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQ7Cit9OworCiBzdGF0aWMgSGFzaFNldDxOb2RlKj4qIGdO
b2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gMDsKIAogRXZlbnRSZWxhdGVkVGFyZ2V0
QWRqdXN0ZXI6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKFBhc3NSZWZQdHI8Tm9kZT4gbm9k
ZSwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KQpAQCAtMTg0LDcgKzI0Nyw3IEBAIHZv
aWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqIG5vZGUsIFBh
c3NSZWZQdHI8RXZlbnQ+IHVuZGVyCiAgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlj
a3MtPnJlbW92ZShub2RlKTsKIH0KIAotdm9pZCBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0
ZWRUYXJnZXQoRXZlbnQqIGV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVk
VGFyZ2V0KQordm9pZCBFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6YWRqdXN0UmVs
YXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KQogewog
ICAgIGlmICghcHJwUmVsYXRlZFRhcmdldCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTkzLDI2ICsy
NTYsMjkgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQq
IGV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PgogICAgICAgICByZXR1cm47CiAgICAgaWYg
KCFtX25vZGUuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbnN1cmVFdmVudEFuY2VzdG9y
cyhldmVudCk7CisgICAgaWYgKG1fYW5jZXN0b3JzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OwogICAgIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKG1fbm9kZSwgcmVsYXRlZFRhcmdldC5y
ZWxlYXNlKCkpLmFkanVzdChtX2FuY2VzdG9ycyk7CiB9CiAKLUV2ZW50RGlzcGF0Y2hlcjo6RXZl
bnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCitFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4
dDo6RXZlbnREaXNwYXRjaGVySW5Ccm93c2luZ0NvbnRleHQoTm9kZSogbm9kZSwgUGFzc1JlZlB0
cjxFdmVudD4gZXZlbnQpCiAgICAgOiBtX25vZGUobm9kZSkKLSAgICAsIG1fYW5jZXN0b3JzSW5p
dGlhbGl6ZWQoZmFsc2UpCi0jaWZuZGVmIE5ERUJVRwotICAgICwgbV9ldmVudERpc3BhdGNoZWQo
ZmFsc2UpCi0jZW5kaWYKKyAgICAsIG1fZXZlbnQoZXZlbnQpCisgICAgLCBtX2FuY2VzdG9ycygp
CisgICAgLCBtX2V2ZW50QW5jZXN0b3JDb250aW51YXRpb24oY2FsdWN1bGF0ZUV2ZW50QW5jZXN0
b3JzKCkpCisgICAgLCBtX3ZpZXcobV9ub2RlLT5kb2N1bWVudCgpLT52aWV3KCkpCisgICAgLCBt
X3dpbmRvd0V2ZW50Q29udGV4dChtX2V2ZW50LmdldCgpLCBtX25vZGUuZ2V0KCksIHRvcEV2ZW50
Q29udGV4dCgpKQorICAgICwgbV9wcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCgwKQogewot
ICAgIEFTU0VSVChub2RlKTsKLSAgICBtX3ZpZXcgPSBub2RlLT5kb2N1bWVudCgpLT52aWV3KCk7
CisgICAgQVNTRVJUKG1fbm9kZSk7CisgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVu
KCkpOworICAgIEFTU0VSVCghbV9ldmVudC0+dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlw
dCBjb2RlIGNhbiBjcmVhdGUgYW4gZXZlbnQgd2l0aCBhbiBlbXB0eSBuYW1lLCBidXQgbm90IG51
bGwuCisgICAgbV9ldmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1Rhcmdl
dFJ1bGVzKG1fbm9kZS5nZXQoKSkpOwogfQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJl
RXZlbnRBbmNlc3RvcnMoRXZlbnQqIGV2ZW50KQorRXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbiBF
dmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6Y2FsdWN1bGF0ZUV2ZW50QW5jZXN0b3Jz
KCkKIHsKLSAgICBpZiAobV9hbmNlc3RvcnNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIEFTU0VSVChtX2FuY2VzdG9y
cy5pc0VtcHR5KCkpOwogICAgIGJvb2wgaW5Eb2N1bWVudCA9IG1fbm9kZS0+aW5Eb2N1bWVudCgp
OwogICAgIGJvb2wgaXNTVkdFbGVtZW50ID0gbV9ub2RlLT5pc1NWR0VsZW1lbnQoKTsKICAgICBW
ZWN0b3I8RXZlbnRUYXJnZXQqPiB0YXJnZXRTdGFjazsKQEAgLTIyNSwxNDUgKzI5MSwxMjYgQEAg
dm9pZCBFdmVudERpc3BhdGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50KiBldmVudCkK
ICAgICAgICAgICAgIHRhcmdldFN0YWNrLmFwcGVuZCh0YXJnZXRTdGFjay5sYXN0KCkpOwogICAg
ICAgICBtX2FuY2VzdG9ycy5hcHBlbmQoRXZlbnRDb250ZXh0KG5vZGUsIGV2ZW50VGFyZ2V0UmVz
cGVjdGluZ1NWR1RhcmdldFJ1bGVzKG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpKTsKICAgICAg
ICAgaWYgKCFpbkRvY3VtZW50KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0
dXJuIEV2ZW50QW5jZXN0b3JTdG9wOwogICAgICAgICBsYXN0ID0gbm9kZTsKICAgICAgICAgaWYg
KCFub2RlLT5pc1NoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihldmVudCwgdG9TaGFkb3dSb290KG5vZGUpLCB0
YXJnZXRTdGFjay5sYXN0KCkpID09IFN0YXlJbnNpZGVTaGFkb3dET00pCi0gICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmIChkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKHRvU2hhZG93Um9v
dChub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSA9PSBTdGF5SW5zaWRlU2hhZG93RE9NKQorICAg
ICAgICAgICAgcmV0dXJuIEV2ZW50QW5jZXN0b3JTdG9wOwogICAgICAgICBpZiAoIWlzU1ZHRWxl
bWVudCkgewogICAgICAgICAgICAgQVNTRVJUKCF0YXJnZXRTdGFjay5pc0VtcHR5KCkpOwogICAg
ICAgICAgICAgdGFyZ2V0U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICB9CiAgICAgfQorICAg
IHJldHVybiBFdmVudEFuY2VzdG9yQ29udGludWVUb1BhcmVudDsKIH0KIAotYm9vbCBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCitJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgRXZlbnREaXNwYXRjaGVySW5Ccm93c2luZ0NvbnRl
eHQ6OndpbGxEaXNwYXRjaEV2ZW50KCkgY29uc3QKIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgQVNT
RVJUKCFtX2V2ZW50RGlzcGF0Y2hlZCk7Ci0gICAgbV9ldmVudERpc3BhdGNoZWQgPSB0cnVlOwot
I2VuZGlmCi0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwotICAgIENoaWxkTm9k
ZXNMYXp5U25hcHNob3Q6OnRha2VDaGlsZE5vZGVzTGF6eVNuYXBzaG90KCk7Ci0KLSAgICBldmVu
dC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9kZS5n
ZXQoKSkpOwotICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSAgICBBU1NF
UlQoZXZlbnQtPnRhcmdldCgpKTsKLSAgICBBU1NFUlQoIWV2ZW50LT50eXBlKCkuaXNOdWxsKCkp
OyAvLyBKYXZhU2NyaXB0IGNvZGUgY2FuIGNyZWF0ZSBhbiBldmVudCB3aXRoIGFuIGVtcHR5IG5h
bWUsIGJ1dCBub3QgbnVsbC4KLSAgICBlbnN1cmVFdmVudEFuY2VzdG9ycyhldmVudC5nZXQoKSk7
Ci0gICAgV2luZG93RXZlbnRDb250ZXh0IHdpbmRvd0V2ZW50Q29udGV4dChldmVudC5nZXQoKSwg
bV9ub2RlLmdldCgpLCB0b3BFdmVudENvbnRleHQoKSk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3Bh
dGNoRXZlbnQobV9ub2RlLT5kb2N1bWVudCgpLCAqZXZlbnQsIHdpbmRvd0V2ZW50Q29udGV4dC53
aW5kb3coKSwgbV9ub2RlLmdldCgpLCBtX2FuY2VzdG9ycyk7Ci0KLSAgICB2b2lkKiBwcmVEaXNw
YXRjaEV2ZW50SGFuZGxlclJlc3VsdDsKLSAgICBpZiAoZGlzcGF0Y2hFdmVudFByZVByb2Nlc3Mo
ZXZlbnQsIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KSA9PSBDb250aW51ZURpc3BhdGNo
aW5nKQotICAgICAgICBpZiAoZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKGV2ZW50LCB3aW5kb3dF
dmVudENvbnRleHQpID09IENvbnRpbnVlRGlzcGF0Y2hpbmcpCi0gICAgICAgICAgICBpZiAoZGlz
cGF0Y2hFdmVudEF0VGFyZ2V0KGV2ZW50KSA9PSBDb250aW51ZURpc3BhdGNoaW5nKQotICAgICAg
ICAgICAgICAgIGRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKGV2ZW50LCB3aW5kb3dFdmVudENvbnRl
eHQpOwotICAgIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcyhldmVudCwgcHJlRGlzcGF0Y2hFdmVu
dEhhbmRsZXJSZXN1bHQpOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQgZGlzcGF0
Y2gsIHRoZSBldmVudCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCi0gICAgLy8gb3V0ZXJtb3N0IHNo
YWRvdyBET00gYm91bmRhcnkuCi0gICAgZXZlbnQtPnNldFRhcmdldCh3aW5kb3dFdmVudENvbnRl
eHQudGFyZ2V0KCkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOwotICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudChjb29raWUpOwotCi0gICAgcmV0
dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgIHJldHVybiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KG1fbm9kZS0+ZG9jdW1lbnQoKSwgKm1fZXZl
bnQsIG1fd2luZG93RXZlbnRDb250ZXh0LndpbmRvdygpLCBtX25vZGUuZ2V0KCksIG1fYW5jZXN0
b3JzKTsKIH0KIAotaW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRj
aGVyOjpkaXNwYXRjaEV2ZW50UHJlUHJvY2VzcyhQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgdm9p
ZComIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KQoraW5saW5lIEV2ZW50RGlzcGF0Y2hD
b250aW51YXRpb24gRXZlbnREaXNwYXRjaGVySW5Ccm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZl
bnRQcmVQcm9jZXNzKCkKIHsKICAgICAvLyBHaXZlIHRoZSB0YXJnZXQgbm9kZSBhIGNoYW5jZSB0
byBkbyBzb21lIHdvcmsgYmVmb3JlIERPTSBldmVudCBoYW5kbGVycyBnZXQgYSBjcmFjay4KLSAg
ICBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCA9IG1fbm9kZS0+cHJlRGlzcGF0Y2hFdmVu
dEhhbmRsZXIoZXZlbnQuZ2V0KCkpOwotICAgIHJldHVybiAobV9hbmNlc3RvcnMuaXNFbXB0eSgp
IHx8IGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkgPyBEb25lRGlzcGF0Y2hpbmcgOiBDb250
aW51ZURpc3BhdGNoaW5nOworICAgIG1fcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQgPSBt
X25vZGUtPnByZURpc3BhdGNoRXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCkpOworICAgIHJldHVy
biAobV9hbmNlc3RvcnMuaXNFbXB0eSgpIHx8IG1fZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgp
KSA/IERvbmVEaXNwYXRjaGluZyA6IENvbnRpbnVlRGlzcGF0Y2hpbmc7CiB9CiAKLWlubGluZSBF
dmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0
Q2FwdHVyaW5nKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBXaW5kb3dFdmVudENvbnRleHQmIHdp
bmRvd0V2ZW50Q29udGV4dCkKK2lubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50
RGlzcGF0Y2hlckluQnJvd3NpbmdDb250ZXh0OjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoKQog
ewogICAgIC8vIFRyaWdnZXIgY2FwdHVyaW5nIGV2ZW50IGhhbmRsZXJzLCBzdGFydGluZyBhdCB0
aGUgdG9wIGFuZCB3b3JraW5nIG91ciB3YXkgZG93bi4KLSAgICBldmVudC0+c2V0RXZlbnRQaGFz
ZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKKyAgICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKEV2
ZW50OjpDQVBUVVJJTkdfUEhBU0UpOwogCi0gICAgaWYgKHdpbmRvd0V2ZW50Q29udGV4dC5oYW5k
bGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSkgJiYgZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgp
KQorICAgIGlmIChtX3dpbmRvd0V2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50
LmdldCgpKSAmJiBtX2V2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgcmV0dXJu
IERvbmVEaXNwYXRjaGluZzsKIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2FuY2VzdG9ycy5zaXpl
KCkgLSAxOyBpID4gMDsgLS1pKSB7CiAgICAgICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRD
b250ZXh0ID0gbV9hbmNlc3RvcnNbaV07CiAgICAgICAgIGlmIChldmVudENvbnRleHQuY3VycmVu
dFRhcmdldFNhbWVBc1RhcmdldCgpKSB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMo
KSkKKyAgICAgICAgICAgIGlmIChtX2V2ZW50LT5idWJibGVzKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFS
R0VUKTsKKyAgICAgICAgICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdF
VCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZl
bnQ6OkNBUFRVUklOR19QSEFTRSk7Ci0gICAgICAgIGV2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2
ZW50cyhldmVudC5nZXQoKSk7Ci0gICAgICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVk
KCkpCisgICAgICAgICAgICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdf
UEhBU0UpOworICAgICAgICBldmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMobV9ldmVudC5n
ZXQoKSk7CisgICAgICAgIGlmIChtX2V2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAg
ICAgICAgIHJldHVybiBEb25lRGlzcGF0Y2hpbmc7CiAgICAgfQogCiAgICAgcmV0dXJuIENvbnRp
bnVlRGlzcGF0Y2hpbmc7CiB9CiAKLWlubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQoraW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVySW5C
cm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZlbnRBdFRhcmdldCgpCiB7Ci0gICAgZXZlbnQtPnNl
dEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7Ci0gICAgbV9hbmNlc3RvcnNbMF0uaGFuZGxl
TG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwotICAgIHJldHVybiBldmVudC0+cHJvcGFnYXRpb25T
dG9wcGVkKCkgPyBEb25lRGlzcGF0Y2hpbmcgOiBDb250aW51ZURpc3BhdGNoaW5nOworICAgIG1f
ZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgbV9hbmNlc3RvcnNb
MF0uaGFuZGxlTG9jYWxFdmVudHMobV9ldmVudC5nZXQoKSk7CisgICAgcmV0dXJuIG1fZXZlbnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpID8gRG9uZURpc3BhdGNoaW5nIDogQ29udGludWVEaXNwYXRj
aGluZzsKIH0KIAotaW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRj
aGVyOjpkaXNwYXRjaEV2ZW50QXRCdWJibGluZyhQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgV2lu
ZG93RXZlbnRDb250ZXh0JiB3aW5kb3dDb250ZXh0KQoraW5saW5lIEV2ZW50RGlzcGF0Y2hDb250
aW51YXRpb24gRXZlbnREaXNwYXRjaGVySW5Ccm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZlbnRB
dEJ1YmJsaW5nKCkKIHsKLSAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSAmJiAhZXZlbnQtPmNhbmNl
bEJ1YmJsZSgpKSB7CisgICAgaWYgKG1fZXZlbnQtPmJ1YmJsZXMoKSAmJiAhbV9ldmVudC0+Y2Fu
Y2VsQnViYmxlKCkpIHsKICAgICAgICAgLy8gVHJpZ2dlciBidWJibGluZyBldmVudCBoYW5kbGVy
cywgc3RhcnRpbmcgYXQgdGhlIGJvdHRvbSBhbmQgd29ya2luZyBvdXIgd2F5IHVwLgotICAgICAg
ICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOworICAgICAgICBt
X2V2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CiAKICAgICAgICAg
c2l6ZV90IHNpemUgPSBtX2FuY2VzdG9ycy5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAxOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2
ZW50Q29udGV4dCA9IG1fYW5jZXN0b3JzW2ldOwogICAgICAgICAgICAgaWYgKGV2ZW50Q29udGV4
dC5jdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkpCi0gICAgICAgICAgICAgICAgZXZlbnQtPnNl
dEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgICAgICAgICAgICAgbV9ldmVudC0+
c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOwot
ICAgICAgICAgICAgZXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsK
LSAgICAgICAgICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgZXZlbnQtPmNh
bmNlbEJ1YmJsZSgpKQorICAgICAgICAgICAgICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZl
bnQ6OkJVQkJMSU5HX1BIQVNFKTsKKyAgICAgICAgICAgIGV2ZW50Q29udGV4dC5oYW5kbGVMb2Nh
bEV2ZW50cyhtX2V2ZW50LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChtX2V2ZW50LT5wcm9wYWdh
dGlvblN0b3BwZWQoKSB8fCBtX2V2ZW50LT5jYW5jZWxCdWJibGUoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gRG9uZURpc3BhdGNoaW5nOwogICAgICAgICB9Ci0gICAgICAgIHdpbmRvd0NvbnRl
eHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOworICAgICAgICBtX3dpbmRvd0V2ZW50
Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50LmdldCgpKTsKICAgICB9CiAgICAgcmV0
dXJuIENvbnRpbnVlRGlzcGF0Y2hpbmc7CiB9CiAKLWlubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCB2b2lk
KiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCkKK2lubGluZSB2b2lkIEV2ZW50RGlzcGF0
Y2hlckluQnJvd3NpbmdDb250ZXh0OjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoKQogewotICAg
IGV2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9u
b2RlLmdldCgpKSk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7Ci0gICAgZXZlbnQt
PnNldEV2ZW50UGhhc2UoMCk7Ci0KKyAgICBtX2V2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRS
ZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9ub2RlLmdldCgpKSk7CisgICAgbV9ldmVudC0+c2V0
Q3VycmVudFRhcmdldCgwKTsKKyAgICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKDApOwogICAgIC8v
IFBhc3MgdGhlIGRhdGEgZnJvbSB0aGUgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIgdG8gdGhlIHBv
c3REaXNwYXRjaEV2ZW50SGFuZGxlci4KLSAgICBtX25vZGUtPnBvc3REaXNwYXRjaEV2ZW50SGFu
ZGxlcihldmVudC5nZXQoKSwgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOworICAgIG1f
bm9kZS0+cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCksIG1fcHJlRGlzcGF0
Y2hFdmVudEhhbmRsZXJSZXN1bHQpOworfQogCitpbmxpbmUgdm9pZCBFdmVudERpc3BhdGNoZXJJ
bkJyb3dzaW5nQ29udGV4dDo6ZGlzcGF0Y2hFdmVudERlZmF1bHRIYW5kbGVyKCkKK3sKICAgICAv
LyBDYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMuIFdoaWxlIHRoZSBET00gZG9lcyBoYXZlIGEg
Y29uY2VwdCBvZiBwcmV2ZW50aW5nCiAgICAgLy8gZGVmYXVsdCBoYW5kbGluZywgdGhlIGRldGFp
bCBvZiB3aGljaCBoYW5kbGVycyBhcmUgY2FsbGVkIGlzIGFuIGludGVybmFsCiAgICAgLy8gaW1w
bGVtZW50YXRpb24gZGV0YWlsIGFuZCBub3QgcGFydCBvZiB0aGUgRE9NLgotICAgIGlmICghZXZl
bnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpIHsKKyAg
ICBpZiAoIW1fZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhbV9ldmVudC0+ZGVmYXVsdEhh
bmRsZWQoKSkgewogICAgICAgICAvLyBOb24tYnViYmxpbmcgZXZlbnRzIGNhbGwgb25seSBvbmUg
ZGVmYXVsdCBldmVudCBoYW5kbGVyLCB0aGUgb25lIGZvciB0aGUgdGFyZ2V0LgotICAgICAgICBt
X25vZGUtPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQuZ2V0KCkpOwotICAgICAgICBBU1NFUlQo
IWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpOwotICAgICAgICBpZiAoZXZlbnQtPmRlZmF1bHRI
YW5kbGVkKCkpCisgICAgICAgIG1fbm9kZS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihtX2V2ZW50Lmdl
dCgpKTsKKyAgICAgICAgQVNTRVJUKCFtX2V2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpOworICAg
ICAgICBpZiAobV9ldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgLy8gRm9yIGJ1YmJsaW5nIGV2ZW50cywgY2FsbCBkZWZhdWx0IGV2ZW50IGhhbmRs
ZXJzIG9uIHRoZSBzYW1lIHRhcmdldHMgaW4gdGhlCiAgICAgICAgIC8vIHNhbWUgb3JkZXIgYXMg
dGhlIGJ1YmJsaW5nIHBoYXNlLgotICAgICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSkgeworICAg
ICAgICBpZiAobV9ldmVudC0+YnViYmxlcygpKSB7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9
IG1fYW5jZXN0b3JzLnNpemUoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgbV9hbmNlc3RvcnNbaV0ubm9kZSgpLT5kZWZh
dWx0RXZlbnRIYW5kbGVyKGV2ZW50LmdldCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWV2
ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpOwotICAgICAgICAgICAgICAgIGlmIChldmVudC0+ZGVm
YXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgICAgICBtX2FuY2VzdG9yc1tpXS5ub2RlKCktPmRl
ZmF1bHRFdmVudEhhbmRsZXIobV9ldmVudC5nZXQoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCFtX2V2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpOworICAgICAgICAgICAgICAgIGlmIChtX2V2
ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CiAKLWNvbnN0IEV2ZW50Q29udGV4dCogRXZl
bnREaXNwYXRjaGVyOjp0b3BFdmVudENvbnRleHQoKQoraW5saW5lIHZvaWQgRXZlbnREaXNwYXRj
aGVySW5Ccm93c2luZ0NvbnRleHQ6OnJlc2V0VGFyZ2V0KCkKK3sKKyAgICBtX2V2ZW50LT5zZXRU
YXJnZXQobV93aW5kb3dFdmVudENvbnRleHQudGFyZ2V0KCkpOworICAgIG1fZXZlbnQtPnNldEN1
cnJlbnRUYXJnZXQoMCk7Cit9CisKK2lubGluZSBjb25zdCBFdmVudENvbnRleHQqIEV2ZW50RGlz
cGF0Y2hlckluQnJvd3NpbmdDb250ZXh0Ojp0b3BFdmVudENvbnRleHQoKQogewogICAgIHJldHVy
biBtX2FuY2VzdG9ycy5pc0VtcHR5KCkgPyAwIDogJm1fYW5jZXN0b3JzLmxhc3QoKTsKIH0KQEAg
LTM3Myw3ICs0MjAsMjIgQEAgc3RhdGljIGlubGluZSBib29sIGluVGhlU2FtZVNjb3BlKFNoYWRv
d1Jvb3QqIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiAgICAgcmV0dXJuIHRhcmdl
dC0+dG9Ob2RlKCkgJiYgdGFyZ2V0LT50b05vZGUoKS0+dHJlZVNjb3BlKCktPnJvb3ROb2RlKCkg
PT0gc2hhZG93Um9vdDsKIH0KIAotRXZlbnREaXNwYXRjaEJlaGF2aW9yIEV2ZW50RGlzcGF0Y2hl
cjo6ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCogZXZlbnQsIFNoYWRvd1Jvb3QqIHNo
YWRvd1Jvb3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCitpbmxpbmUgc3RhdGljIGJvb2wgZXZlbnRT
aG91bGRCZVN0b3BwZWRBdEJvdW5kYXJ5KEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyBXZWJLaXQg
bmV2ZXIgYWxsb3dlZCBzZWxlY3RzdGFydCBldmVudCB0byBjcm9zcyB0aGUgdGhlIHNoYWRvdyBE
T00gYm91bmRhcnkuCisgICAgLy8gQ2hhbmdpbmcgdGhpcyBicmVha3MgZXhpc3Rpbmcgc2l0ZXMu
CisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjE5
NSBmb3IgZGV0YWlscy4KKyAgICBjb25zdCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0gZXZlbnQt
PnR5cGUoKTsKKyAgICByZXR1cm4gZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50
CisgICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50Cisg
ICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnJlc2V0RXZlbnQKKyAgICAg
ICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzaXplRXZlbnQKKyAgICAgICAg
ICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQKKyAgICAgICAgICAg
IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQKKyAgICAgICAgICAgIHx8
IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudDsKK30KKworaW5saW5l
IEV2ZW50RGlzcGF0Y2hCZWhhdmlvciBFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDo6
ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihTaGFkb3dSb290KiBzaGFkb3dSb290LCBFdmVudFRh
cmdldCogdGFyZ2V0KQogewogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFKFZJ
REVPKQogICAgIC8vIFZpZGVvLW9ubHkgZnVsbCBzY3JlZW4gaXMgYSBtb2RlIHdoZXJlIHdlIHVz
ZSB0aGUgc2hhZG93IERPTSBhcyBhbiBpbXBsZW1lbnRhdGlvbgpAQCAtMzg4LDIxICs0NTAsMTM5
IEBAIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciBFdmVudERpc3BhdGNoZXI6OmRldGVybWluZURpc3Bh
dGNoQmVoYXZpb3IoRXZlbnQqIGV2ZW50LCBTCiAgICAgVU5VU0VEX1BBUkFNKHNoYWRvd1Jvb3Qp
OwogI2VuZGlmCiAKLSAgICAvLyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBzZWxlY3RzdGFydCBldmVu
dCB0byBjcm9zcyB0aGUgdGhlIHNoYWRvdyBET00gYm91bmRhcnkuCi0gICAgLy8gQ2hhbmdpbmcg
dGhpcyBicmVha3MgZXhpc3Rpbmcgc2l0ZXMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjE5NSBmb3IgZGV0YWlscy4KLSAgICBjb25zdCBBdG9t
aWNTdHJpbmcgZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsKLSAgICBpZiAoaW5UaGVTYW1lU2Nv
cGUoc2hhZG93Um9vdCwgdGFyZ2V0KQotICAgICAgICAmJiAoZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS5hYm9ydEV2ZW50Ci0gICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LmNoYW5nZUV2ZW50Ci0gICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnJl
c2V0RXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzaXpl
RXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc2Nyb2xsRXZl
bnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQK
LSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVu
dCkpCisgICAgaWYgKGluVGhlU2FtZVNjb3BlKHNoYWRvd1Jvb3QsIHRhcmdldCkgJiYgZXZlbnRT
aG91bGRCZVN0b3BwZWRBdEJvdW5kYXJ5KG1fZXZlbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4g
U3RheUluc2lkZVNoYWRvd0RPTTsKLQogICAgIHJldHVybiBSZXRhcmdldEV2ZW50OwogfQogCitF
dmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcihOb2RlKiBub2RlKQorICAgIDogbV9ub2Rl
KG5vZGUpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9ldmVudERpc3BhdGNoZWQoZmFsc2UpCisj
ZW5kaWYKK3sKKyAgICBNWV9BU1NFUlQobm9kZSk7Cit9CisKK2lubGluZSBzdGF0aWMgYm9vbCBz
aG91bGRQcm9wYWdhdGVFdmVudEFjcm9zc1NlYW1sZXNzSUZyYW1lcyhFdmVudCogZXZlbnQpCit7
CisgICAgY29uc3QgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7CisgICAg
Ly8gRklYTUU6IFN1cHBvcnQgbW9yZSBldmVudHMuCisgICAgcmV0dXJuIGV2ZW50VHlwZSA9PSBl
dmVudE5hbWVzKCkuY2xpY2tFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmRibGNs
aWNrRXZlbnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxFdmVudD4gY2xvbmVFdmVu
dChFdmVudCogZXZlbnQpCit7CisgICAgLy8gRklYTUU6IFN1cHBvcnQgY2xvbmluZyBhIGV2ZW50
IGZvciBlYWNoIHN1YmNsYXNzIG9mIEV2ZW50LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MzY3OAorICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkp
IHsKKyAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRvTW91c2VFdmVudChldmVudCk7
CisgICAgICAgIFJlZlB0cjxNb3VzZUV2ZW50PiBjbG9uZWRNb3VzZUV2ZW50ID0gTW91c2VFdmVu
dDo6Y3JlYXRlKCk7CisgICAgICAgIC8vIERvbid0IGNvcHkgQWJzdHJhdFZpZXcgbm9yIHJlbGF0
ZWRUYXJnZXQuCisgICAgICAgIGNsb25lZE1vdXNlRXZlbnQtPmluaXRNb3VzZUV2ZW50KG1vdXNl
RXZlbnQtPnR5cGUoKSwgbW91c2VFdmVudC0+YnViYmxlcygpLCBtb3VzZUV2ZW50LT5jYW5jZWxh
YmxlKCksIDAsCisgICAgICAgICAgICBtb3VzZUV2ZW50LT5kZXRhaWwoKSwgbW91c2VFdmVudC0+
c2NyZWVuWCgpLCBtb3VzZUV2ZW50LT5zY3JlZW5ZKCksIG1vdXNlRXZlbnQtPmNsaWVudFgoKSwg
bW91c2VFdmVudC0+Y2xpZW50WSgpLAorICAgICAgICAgICAgbW91c2VFdmVudC0+Y3RybEtleSgp
LCBtb3VzZUV2ZW50LT5hbHRLZXkoKSwgbW91c2VFdmVudC0+c2hpZnRLZXkoKSwgbW91c2VFdmVu
dC0+bWV0YUtleSgpLAorICAgICAgICAgICAgbW91c2VFdmVudC0+YnV0dG9uKCksIDApOworICAg
ICAgICByZXR1cm4gY2xvbmVkTW91c2VFdmVudC5yZWxlYXNlKCk7CisgICAgfQorICAgIHJldHVy
biBFdmVudDo6Y3JlYXRlKGV2ZW50LT50eXBlKCksIGV2ZW50LT5idWJibGVzKCksIGV2ZW50LT5j
YW5jZWxhYmxlKCkpOworfQorCitpbmxpbmUgdm9pZCBFdmVudERpc3BhdGNoZXI6OnByZXBhcmVF
dmVudERpc3BhdGNoZXJzKFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQoreworICAgIE1ZX0FT
U0VSVChtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSk7CisgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9
IHBycEV2ZW50OworICAgIE5vZGUqIG5vZGUgPSBtX25vZGUuZ2V0KCk7CisgICAgYm9vbCBwcm9w
YWdhdGVFdmVudEFjcm9zc1NlYW1sZXNzSUZyYW1lcyA9IHNob3VsZFByb3BhZ2F0ZUV2ZW50QWNy
b3NzU2VhbWxlc3NJRnJhbWVzKGV2ZW50LmdldCgpKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICBtX2Rpc3BhdGNoZXJzLmFwcGVuZChhZG9wdFB0cihuZXcgRXZlbnREaXNwYXRjaGVySW5C
cm93c2luZ0NvbnRleHQobm9kZSwgZXZlbnQpKSk7CisgICAgICAgIGlmICghbV9kaXNwYXRjaGVy
cy5sYXN0KCktPnNob3VsZENvbnRpbnVlVG9QYXJlbnREb2N1bWVudCgpIHx8ICFwcm9wYWdhdGVF
dmVudEFjcm9zc1NlYW1sZXNzSUZyYW1lcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
SFRNTElGcmFtZUVsZW1lbnQqIHBhcmVudElGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPnNlYW1s
ZXNzUGFyZW50SUZyYW1lKCk7CisgICAgICAgIGlmICghcGFyZW50SUZyYW1lKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBub2RlID0gcGFyZW50SUZyYW1lOworICAgICAgICBldmVudCA9
IGNsb25lRXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBFdmVudERpc3BhdGNo
ZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQsIFBhc3NS
ZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCit7CisgICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IHBycEV2ZW50OworICAgIGlmIChtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoZXZlbnQpOworICAgIEFTU0VSVCghbV9kaXNw
YXRjaGVycy5pc0VtcHR5KCkpOworICAgIG1fZGlzcGF0Y2hlcnMubGFzdCgpLT5hZGp1c3RSZWxh
dGVkVGFyZ2V0KHBycFJlbGF0ZWRUYXJnZXQpOworfQorCitib29sIEV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK3sKKyNpZm5kZWYgTkRF
QlVHCisgICAgQVNTRVJUKCFtX2V2ZW50RGlzcGF0Y2hlZCk7CisgICAgbV9ldmVudERpc3BhdGNo
ZWQgPSB0cnVlOworI2VuZGlmCisgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50Owor
ICAgIGlmIChtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcHJlcGFyZUV2ZW50RGlz
cGF0Y2hlcnMoZXZlbnQpOworICAgIEFTU0VSVCghbV9kaXNwYXRjaGVycy5pc0VtcHR5KCkpOwor
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBtX2Rpc3BhdGNoZXJz
WzBdLT53aWxsRGlzcGF0Y2hFdmVudCgpOworCisgICAgZmlyZURpc3BhdGNoZXJzKCk7CisgICAg
Ym9vbCBkZWZhdWx0UHJldmVudGVkID0gZmlyZURpc3BhdGNoZXJzRGVmYXVsdEV2ZW50SGFuZGxl
cigpOworCisgICAgLy8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQgZGlzcGF0Y2gsIHRoZSBldmVu
dCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCisgICAgLy8gb3V0ZXJtb3N0IHNoYWRvdyBET00gYm91
bmRhcnkuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Rpc3BhdGNoZXJzLnNpemUoKTsg
KytpKQorICAgICAgICBtX2Rpc3BhdGNoZXJzW2ldLT5yZXNldFRhcmdldCgpOworCisgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50KGNvb2tpZSk7CisgICAgcmV0
dXJuICFkZWZhdWx0UHJldmVudGVkOworfQorCitpbmxpbmUgdm9pZCBFdmVudERpc3BhdGNoZXI6
OmZpcmVEaXNwYXRjaGVycygpCit7CisgICAgQVNTRVJUKCFtX2Rpc3BhdGNoZXJzLmlzRW1wdHko
KSk7CisgICAgc2l6ZV90IHNpemUgPSBtX2Rpc3BhdGNoZXJzLnNpemUoKTsKKyAgICBmb3IgKGlu
dCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChtX2Rpc3BhdGNoZXJz
W2ldLT5kaXNwYXRjaEV2ZW50UHJlUHJvY2VzcygpID09IERvbmVEaXNwYXRjaGluZworICAgICAg
ICAgICAgICAgIHx8IG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRBdENhcHR1cmluZygp
ID09IERvbmVEaXNwYXRjaGluZykgeworICAgICAgICAgICAgZmlyZURpc3BhdGNoZXJzUG9zdFBy
b2Nlc3MoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZGlzcGF0Y2hl
cnNbaV0tPmRpc3BhdGNoRXZlbnRBdFRhcmdldCgpID09IERvbmVEaXNwYXRjaGluZworICAgICAg
ICAgICAgICAgIHx8IG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKCkg
PT0gRG9uZURpc3BhdGNoaW5nKSB7CisgICAgICAgICAgICBmaXJlRGlzcGF0Y2hlcnNQb3N0UHJv
Y2VzcyhpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2Rpc3Bh
dGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoKTsKKyAgICB9Cit9CisKK2lubGlu
ZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNoZXJzUG9zdFByb2Nlc3MoaW50IGJy
b3dzaW5nQ29udGV4dE51bWJlcikKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1fZGlzcGF0Y2hlcnMu
c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSBicm93c2luZ0NvbnRleHROdW1iZXI7IGkgPCBz
aXplOyArK2kpCisgICAgICAgIG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRQb3N0UHJv
Y2VzcygpOworfQorCitpbmxpbmUgYm9vbCBFdmVudERpc3BhdGNoZXI6OmZpcmVEaXNwYXRjaGVy
c0RlZmF1bHRFdmVudEhhbmRsZXIoKQoreworICAgIHNpemVfdCBzaXplID0gbV9kaXNwYXRjaGVy
cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAg
ICAgY29uc3QgRXZlbnQqIGV2ZW50ID0gbV9kaXNwYXRjaGVyc1tpXS0+ZXZlbnQoKTsKKyAgICAg
ICAgaWYgKGV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgbV9kaXNwYXRjaGVyc1tpXS0+ZGlzcGF0Y2hFdmVudERlZmF1bHRIYW5kbGVy
KCk7CisgICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgeworICAgICAgICAgICAg
QVNTRVJUKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWV2ZW50LT5idWJibGVzKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDViZmVhZDBkMGU2Y2JlMGI4MDAzNGQ0
MjI1YTYwZTMyNGRmYWM4MzkuLjZlM2MyZWY1NWU2NDRhMjM0MjhjYzhhY2NmOWIyZDVjMjBjMTQw
OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTI3LDg1ICsyNyw0MSBA
QAogI2RlZmluZSBFdmVudERpc3BhdGNoZXJfaAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRXZlbnQ7
Ci1jbGFzcyBFdmVudENvbnRleHQ7CiBjbGFzcyBFdmVudERpc3BhdGNoTWVkaWF0b3I7CitjbGFz
cyBFdmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dDsKIGNsYXNzIEV2ZW50VGFyZ2V0Owot
Y2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgTm9kZTsKLWNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDsKLWNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKLWNsYXNzIFNoYWRvd1Jvb3Q7Ci1jbGFzcyBU
cmVlU2NvcGU7Ci1jbGFzcyBXaW5kb3dFdmVudENvbnRleHQ7Ci0KLWVudW0gRXZlbnREaXNwYXRj
aEJlaGF2aW9yIHsKLSAgICBSZXRhcmdldEV2ZW50LAotICAgIFN0YXlJbnNpZGVTaGFkb3dET00K
LX07Ci0KLWVudW0gRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiB7Ci0gICAgQ29udGludWVEaXNw
YXRjaGluZywKLSAgICBEb25lRGlzcGF0Y2hpbmcKLX07Ci0KLWNsYXNzIEV2ZW50UmVsYXRlZFRh
cmdldEFkanVzdGVyIHsKLXB1YmxpYzoKLSAgICBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlcihQ
YXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpOwotICAgIHZv
aWQgYWRqdXN0KFZlY3RvcjxFdmVudENvbnRleHQ+Jik7Ci1wcml2YXRlOgotICAgIHR5cGVkZWYg
SGFzaE1hcDxUcmVlU2NvcGUqLCBFdmVudFRhcmdldCo+IFJlbGF0ZWRUYXJnZXRNYXA7Ci0gICAg
RXZlbnRUYXJnZXQqIGZpbmRSZWxhdGVkVGFyZ2V0KFRyZWVTY29wZSopOwotCi0gICAgUmVmUHRy
PE5vZGU+IG1fbm9kZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV9yZWxhdGVkVGFyZ2V0OwotICAgIFJl
bGF0ZWRUYXJnZXRNYXAgbV9yZWxhdGVkVGFyZ2V0TWFwOwotfTsKIAogY2xhc3MgRXZlbnREaXNw
YXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaEV2ZW50KE5vZGUqLCBQ
YXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4pOwogICAgIHN0YXRpYyB2b2lkIGRpc3Bh
dGNoU2NvcGVkRXZlbnQoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPik7
Ci0KICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqLCBQYXNzUmVm
UHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29sIHNo
b3dQcmVzc2VkTG9vayk7CiAKKyAgICB2b2lkIGFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0
cjxFdmVudD4sIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQpOwogICAgIGJv
b2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgdm9pZCBhZGp1c3RSZWxh
dGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdl
dCk7Ci0gICAgTm9kZSogbm9kZSgpIGNvbnN0OworICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJl
dHVybiBtX25vZGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBFdmVudERpc3BhdGNoZXIoTm9k
ZSopOworICAgIHZvaWQgcHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoUGFzc1JlZlB0cjxFdmVudD4p
OworICAgIHZvaWQgZmlyZURpc3BhdGNoZXJzKCk7CisgICAgdm9pZCBmaXJlRGlzcGF0Y2hlcnNQ
b3N0UHJvY2VzcyhpbnQgYnJvd3NpbmdDb250ZXh0TnVtYmVyKTsKKyAgICBib29sIGZpcmVEaXNw
YXRjaGVyc0RlZmF1bHRFdmVudEhhbmRsZXIoKTsKIAotICAgIEV2ZW50RGlzcGF0Y2hCZWhhdmlv
ciBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiwgU2hhZG93Um9vdCosIEV2ZW50VGFy
Z2V0Kik7Ci0KLSAgICB2b2lkIGVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50Kik7Ci0gICAgY29u
c3QgRXZlbnRDb250ZXh0KiB0b3BFdmVudENvbnRleHQoKTsKLQotICAgIEV2ZW50RGlzcGF0Y2hD
b250aW51YXRpb24gZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MoUGFzc1JlZlB0cjxFdmVudD4sIHZv
aWQqJiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7Ci0gICAgRXZlbnREaXNwYXRjaENv
bnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoUGFzc1JlZlB0cjxFdmVudD4sIFdp
bmRvd0V2ZW50Q29udGV4dCYpOwotICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0
Y2hFdmVudEF0VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBFdmVudERpc3BhdGNoQ29u
dGludWF0aW9uIGRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKFBhc3NSZWZQdHI8RXZlbnQ+LCBXaW5k
b3dFdmVudENvbnRleHQmKTsKLSAgICB2b2lkIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcyhQYXNz
UmVmUHRyPEV2ZW50Piwgdm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOwotCi0g
ICAgVmVjdG9yPEV2ZW50Q29udGV4dD4gbV9hbmNlc3RvcnM7CisgICAgVmVjdG9yPE93blB0cjxF
dmVudERpc3BhdGNoZXJJbkJyb3dzaW5nQ29udGV4dD4gPiBtX2Rpc3BhdGNoZXJzOwogICAgIFJl
ZlB0cjxOb2RlPiBtX25vZGU7Ci0gICAgUmVmUHRyPEZyYW1lVmlldz4gbV92aWV3OwotICAgIGJv
b2wgbV9hbmNlc3RvcnNJbml0aWFsaXplZDsKICNpZm5kZWYgTkRFQlVHCiAgICAgYm9vbCBtX2V2
ZW50RGlzcGF0Y2hlZDsKICNlbmRpZgogfTsKIAotaW5saW5lIE5vZGUqIEV2ZW50RGlzcGF0Y2hl
cjo6bm9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbm9kZS5nZXQoKTsKLX0KLQogfQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCA0ODY4MGIxNzFkMzc0NTY0NTc2YzAwNTc5NzgyNjhjYWUxNWUxMDRjLi41
MzkxZDgzZWYzMmM5Yzc0MmY5MjRhNTI3MGJmMzE4NzQ5YWI4MmNkIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTItMDgtMDkgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFNlYW1sZXNzIGlmcmFtZXMgc2hvdWxkIHJldGFyZ2V0IGV2ZW50cyB0byB0aGUgcGFy
ZW50IGRvY3VtZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTEyOTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGZhc3QvZnJhbWVzL3NlYW1sZXNzL3Jlc291cmNlcy9maXJlLWV2ZW50cy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVz
cy1ldmVudHMuaHRtbDogQWRkZWQuCisKIDIwMTItMDgtMDkgIE1pa2hhaWwgUG96ZG55YWtvdiAg
PG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CiAKICAgICAgICAgW1dLMl0gVW5za2lwIHRl
c3RzIHJlcXVpcmluZyBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wUmVzb3VyY2VSZXNwb25zZU1J
TUVUeXBlcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3MvcmVz
b3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9zZWFtbGVz
cy9yZXNvdXJjZXMvZmlyZS1ldmVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2U2MjcwM2M3Y2UxMTUx
YTViZTg0YjI4MGZlMTNlYzQzZDM4MjA1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9mcmFtZXMvc2VhbWxlc3MvcmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwKQEAgLTAsMCAr
MSwxOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPGRpdiBpZD0ndGFyZ2V0
Jz48L2Rpdj4KKzxzY3JpcHQ+Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCd0YXJnZXQnKTsKKyAgICB2YXIgZXZlbnRzID0gWydhYm9ydCcsICdzZWxlY3QnLCAnY2hhbmdl
JywgJ2NsaWNrJywgJ2RibGNsaWNrJywgJ3Jlc2V0JywgJ3Jlc2l6ZScsICdzY3JvbGwnLCAnc2Vs
ZWN0c3RhcnQnXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkg
eworICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnVUlFdmVudCcpOwor
ICAgICAgICBldmVudC5pbml0RXZlbnQoZXZlbnRzW2ldLCB0cnVlLCBmYWxzZSk7CisgICAgICAg
IHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICB9CisgICAgd2luZG93LnRvcC5wb3N0
TWVzc2FnZSgnRE9ORScsICcqJyk7Cit9LCBmYWxzZSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1s
ZXNzLWV2ZW50cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9zZWFtbGVz
cy9zZWFtbGVzcy1ldmVudHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxYzZlYTU4YjBhNDRm
MDc1NWU4ZTYyMjNkNWViYjlhNGM1MzY3NDEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMjQgQEAKK1Rlc3QgdGhhdCBldmVudCBwcm9wYWdhdGVzIGFjcm9zcyBzZWFtbGVzcyBp
ZnJhbWVzLgorCisgIGFib3J0CisKKyAgc2VsZWN0CisKKyAgY2hhbmdlCisKKyAgY2xpY2sKKyAg
ICAgQHNlYW1sZXNzLWlmcmFtZSAodGFyZ2V0OiBzZWFtbGVzcy1pZnJhbWUpCisgICAgIEBib2R5
ICh0YXJnZXQ6IHNlYW1sZXNzLWlmcmFtZSkKKworICBkYmxjbGljaworICAgICBAc2VhbWxlc3Mt
aWZyYW1lICh0YXJnZXQ6IHNlYW1sZXNzLWlmcmFtZSkKKyAgICAgQGJvZHkgKHRhcmdldDogc2Vh
bWxlc3MtaWZyYW1lKQorCisgIHJlc2V0CisKKyAgcmVzaXplCisKKyAgc2Nyb2xsCisKKyAgc2Vs
ZWN0c3RhcnQKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mv
c2VhbWxlc3MtZXZlbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9zZWFtbGVzcy9z
ZWFtbGVzcy1ldmVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2Y4MzEyY2JjMWY1MWZmZGY5ZTdhMmNm
OTIxZjU1Yzk3MzJmNmE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFt
ZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLmh0bWwKQEAgLTAsMCArMSw3MSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5IGlkPSdib2R5Jz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2RlYnVnKCJU
ZXN0IHRoYXQgZXZlbnQgcHJvcGFnYXRlcyBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4iKQorCitp
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAg
ICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIGV2ZW50cyA9IFsnYWJvcnQn
LCAnc2VsZWN0JywgJ2NoYW5nZScsICdjbGljaycsICdkYmxjbGljaycsICdyZXNldCcsICdyZXNp
emUnLCAnc2Nyb2xsJywgJ3NlbGVjdHN0YXJ0J107Cit2YXIgZXZlbnRSZWNvcmRzID0ge307CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgKytpKQorICAgIGRvY3VtZW50LmJv
ZHkuYWRkRXZlbnRMaXN0ZW5lcihldmVudHNbaV0sIHJlY29yZEV2ZW50KTsKKworZnVuY3Rpb24g
aWZyYW1lTG9hZGVkKGlmcmFtZSkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxl
bmd0aDsgKytpKQorICAgICAgICBpZnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihldmVudHNbaV0sIHJl
Y29yZEV2ZW50KTsKKyAgICBpZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSgnZmlyZScs
ICcqJyk7Cit9CisKK3ZhciBtZXNzYWdlUmVjZWl2ZWRDb3VudCA9IDA7CisKK3dpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpZiAoKyttZXNz
YWdlUmVjZWl2ZWRDb3VudCA9PSAyKSAgeworICAgICAgICBkdW1wRGlzcGF0Y2hlZEV2ZW50KCk7
CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworICAgIH0KK30sIGZhbHNlKTsKKworZnVuY3Rpb24gcmVjb3JkRXZlbnQo
ZXZlbnQpCit7CisgICAgdmFyIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUKKyAgICBpZiAoIWV2ZW50
UmVjb3Jkc1tldmVudFR5cGVdKQorICAgICAgICBldmVudFJlY29yZHNbZXZlbnRUeXBlXSA9IFtd
OworICAgIHZhciBldmVudFN0cmluZyA9ICcnOworICAgIGlmIChldmVudC5jdXJyZW50VGFyZ2V0
KQorICAgICAgICBldmVudFN0cmluZyArPSAnIEAnICsgZXZlbnQuY3VycmVudFRhcmdldC5pZDsK
KyAgICBpZiAoZXZlbnQudGFyZ2V0KQorICAgICAgICBldmVudFN0cmluZyArPSAnICh0YXJnZXQ6
ICcgKyBldmVudC50YXJnZXQuaWQgKyAnKSc7CisgICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQp
CisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHJlbGF0ZWQ6ICcgKyBldmVudC5yZWxhdGVkVGFy
Z2V0LmlkICsgJyknOworICAgIGlmIChldmVudC5ldmVudFBoYXNlID09IDEpCisgICAgICAgIGV2
ZW50U3RyaW5nICs9ICcoY2FwdHVyaW5nIHBoYXNlKSc7CisgICAgaWYgKGV2ZW50LnRhcmdldCAm
JiBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5pZCA9PSBldmVudC5jdXJyZW50
VGFyZ2V0LmlkKQorICAgICAgICBzaG91bGRCZSgiZXZlbnQuZXZlbnRQaGFzZSIsICIyIiwgdHJ1
ZSk7CisgICAgZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0ucHVzaChldmVudFN0cmluZyk7Cit9CisK
K2Z1bmN0aW9uIGR1bXBEaXNwYXRjaGVkRXZlbnQoKQoreworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgZXZlbnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBldmVudFR5cGUgPSBldmVudHNb
aV07CisgICAgICAgIGRlYnVnKCdcbiAgJyArIGV2ZW50VHlwZSk7CisgICAgICAgIHZhciByZWNv
cmQgPSBldmVudFJlY29yZHNbZXZlbnRUeXBlXSB8fCBbXTsKKyAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCByZWNvcmQubGVuZ3RoOyArK2opCisgICAgICAgICAgICBkZWJ1ZygnICAgICcgKyBy
ZWNvcmRbal0pCisgICAgfQorfQorCis8L3NjcmlwdD4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+Cisg
ICAgPGlmcmFtZSBpZD0nc2VhbWxlc3MtaWZyYW1lJyBvbmxvYWQ9J2lmcmFtZUxvYWRlZCh0aGlz
KScgc3JjPSdyZXNvdXJjZXMvZmlyZS1ldmVudHMuaHRtbCcgc2VhbWxlc3M9J3RydWUnPjwvaWZy
YW1lPgorICAgIDxpZnJhbWUgaWQ9J25vbi1zZWFtbGVzcy1pZnJhbWUnIG9ubG9hZD0naWZyYW1l
TG9hZGVkKHRoaXMpJyBzcmM9J3Jlc291cmNlcy9maXJlLWV2ZW50cy5odG1sJz48L2lmcmFtZT4K
KzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157674</attachid>
            <date>2012-08-10 01:40:51 -0700</date>
            <delta_ts>2012-08-10 02:10:04 -0700</delta_ts>
            <desc>Minor update</desc>
            <filename>bug-91290-20120810174023.patch</filename>
            <type>text/plain</type>
            <size>39069</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjFlMWViY2Q0ZWE2NzYz
M2QyYjEwNzk3ODQwOThiOWM2M2I3ZjVmOC4uZThhMjgwZmI1NDlhZmE0MTViMGY2OTE2NTJiZGQz
N2EyNzc1YmM1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAxMi0wOC0wOSAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVu
dCBwcm9wYWdhdGlvbiBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjkwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVudCBwcm9wYWdhdGlv
biBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgQXMgdGhlIGZpcnN0IHN0ZXAsICdj
bGljaycgYW5kICdkYmxjbGljaycgZXZlbnRzIGhhdmUgYmVlbiBzdXBwb3J0ZWQuCisKKyAgICAg
ICAgVG8gc3VwcG9ydCBhbiBldmVudCBkaXNwYXRjaGluZyBhY3Jvc3MgYnJvd3NpbmcgY29udGV4
dCwgSSd2ZQorICAgICAgICBpbnRyb2R1Y2VkIGEgRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdD
b250ZXh0LCB3aG9zZSByb2xlIGlzIHNpbWlsYXIgdG8KKyAgICAgICAgYW4gRXZlbnREaXNwYXRj
aGVyIHByaW9yIHRvIHRoaXMgcGF0Y2guIEJ1dCB0aGUgaW50ZXJuYWwKKyAgICAgICAgc3RydWN0
dXJlIHdhcyBzaWduaWZpY2FudGx5IGNoYW5nZWQgc28gdGhhdCBpdCBjYW4gYmUgbWFuYWdlZCBm
cm9tIG91dHNpZGUuCisKKyAgICAgICAgQW4gRXZlbnREaXNwYXRjaGVyIG5vdyBhY3RzIGFzIGlm
IGl0IHdlcmUgYSBtZXRhIGRpc3BhdGNoZXIgd2hpY2gKKyAgICAgICAgZGVsZWdhdGVzIGV2ZW50
IGRpc3BhdGNoaW5nIHRvIGVhY2ggZGlzcGF0Y2hlciBpbiBlYWNoIGJyb3dzaW5nCisgICAgICAg
IGNvbnRleHQuIEl0IG1hbmFnZXMgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIG9mIGRpc3BhdGNoZXJz
LgorCisgICAgICAgIEFjY29yZGluZyB0byB0aGUgZGlzY3Vzc2lvbiBvZiBidWcgOTEyOTAsIHdo
YXR3ZyBtaWdodCBzcGVjCisgICAgICAgIHdoYXRldmVyIFdlYktpdCBpbXBsZW1lbnRzLiAgU28g
bGV0IG1lIGV4cGxhaW4gaG93IGV2ZW50CisgICAgICAgIGRpc3BhdGNoaW5nIHdvcmtzIGFjcm9z
cyBzZWFtbGVzcyBpZnJhbWVzIGJyaWVmbHkgaGVyZToKKworICAgICAgICAxLiBBbmNlc3RvciBu
b2RlcyBvZiBldmVudCBhcmUgY2FsY3VsYXRlZCBhcyB1c3VhbCwgYnV0IGlmIHRoZQorICAgICAg
ICAgICBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHQgaXMgdGhhdCBvZiBhIHNlYW1sZXNzIGlmcmFt
ZSwgY29udGludWUgdG8KKyAgICAgICAgICAgdHJhdmVyc2luZyBhbmNlc3RvcnMgb2YgdGhlIHBh
cmVudCBicm93c2luZyBjb250ZXh0LgorICAgICAgICAyLiBGb3IgZWFjaCBicm93c2luZyBjb250
ZXh0LCBjbG9uZSB0aGUgZXZlbnQgb2JqZWN0LiBJbiB0aGUgbGF0ZXIKKyAgICAgICAgICAgZXZl
bnQgZGlzcGF0Y2hpbmcsIHVzZSB0aGUgY2xvbmVkIGV2ZW50IG9iamVjdCBpbiBlYWNoIGJyb3dz
aW5nCisgICAgICAgICAgIGNvbnRleHQgc28gdGhhdCB3ZSBjYW4gaXNvbGF0ZSBldmVudCBvYmpl
Y3RzLgorICAgICAgICAzLiBUYXJnZXQgb2YgdGhlIGNsb25lZCBldmVudCBvYmplY3RzIGlzIHJl
dGFyZ2V0ZWQgdG8gaWZyYW1lJ3Mgb3duZXIgZWxlbWVudC4KKyAgICAgICAgNC4gUHJvY2VzcyBj
YXB0dXJpbmcsIHRhcmdldCBhbmQgYnViYmxpbmcgcGhhc2VzIGFzIGlmIHRoZXJlIHdhcworICAg
ICAgICAgICBvbmUgYmlnICdhbmNlc3RvcicgY2hhaW4uICBUaGF0IG1lYW5zIGlmIGFuIGV2ZW50
IGxpc3RlbmVyIGluIGFuCisgICAgICAgICAgIHVwcGVyIGJyb3dzaW5nIGNvbnRleHQgY2FsbHMg
c3RvcFByb3BhZ2F0aW9uKCkgYXQgY2FwdHVyaW5nCisgICAgICAgICAgIHBoYXNlLCBuZXN0ZWQg
YnJvd3NpbmcgY29udGV4dHMgbmV2ZXIgcmVjZWl2ZSBhbiBldmVudC4KKyAgICAgICAgNS4gVW5s
ZXNzIGRlZmF1bHQgaXMgcHJldmVudGVkLCB0cnkgdG8gY2FsbCBkZWZhdWx0IGV2ZW50IGhhbmRs
ZXIKKyAgICAgICAgICAgc3RhcnRpbmcgZnJvbSB0aGUgYm90dG9tIG5vZGUgb2YgYW5jZXN0b3Jz
IHVudGlsIGEgZGVmYXVsdCBpcworICAgICAgICAgICBoYW5kbGVkLgorCisgICAgICAgIEV4YW1w
bGU6ICBTdXBwb3NlIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBIVE1MIGFuZCBuZXN0ZWQgc2VhbWxl
c3MgaWZyYW1lcy4gVGhlcmUgYXJlIHRocmVlIGJyb3dzaW5nIGNvbnRleHRzLgorCisgICAgICAg
IDEpIGRvYy5odG1sOgorICAgICAgICAgICA8QT4KKyAgICAgICAgICAgICAgPEI+CisgICAgICAg
ICAgICAgICAgPGlmcmFtZSBpZD1DIHNlYW1sZXNzIHNyYz0iaWZyYW1lMS5odG1sIj4KKworICAg
ICAgICAyKSBpZnJhbWUxLmh0bWw6CisgICAgICAgICAgIDxEPgorICAgICAgICAgICAgICA8RT4K
KyAgICAgICAgICAgICAgICA8aWZyYW1lIGlkPUYgc2VhbWxlc3Mgc3JjPSJpZnJhbWUyLmh0bWwi
PgorCisgICAgICAgIDMpIGlmcmFtZTIuaHRtbDoKKyAgICAgICAgICAgPEc+CisgICAgICAgICAg
ICAgIDxIPgorCisgICAgICAgIElmIGEgY2xpY2snIGV2ZW50IGlzIGZpcmVkIG9uIG5vZGUgRiwg
d2Ugd2lsbCBkaXNwYXRjaCBldmVudHMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKyAgICAgICAg
ICAxLiBBIChAY2FwdHVyZSkgKHRhcmdldCA9PSBDKQorICAgICAgICAgIDIuIEIgKEBjYXB0dXJl
KSAodGFyZ2V0ID09IEMpCisgICAgICAgICAgMy4gRCAoQGNhcHR1cmUpICh0YXJnZXQgPT0gRikK
KyAgICAgICAgICA0LiBFIChAY2FwdHVyZSkgKHRhcmdldCA9PSBGKQorICAgICAgICAgIDUuIEcg
KEBjYXB0dXJlKSAodGFyZ2V0ID09IEgpCisgICAgICAgICAgNi4gSCAoQHRhcmdldCkgICh0YXJn
ZXQgPT0gSCkKKyAgICAgICAgICA3LiBHIChAYnViYmxlKSAgKHRhcmdldCA9PSBIKQorICAgICAg
ICAgIDguIEYgKEB0YXJnZXQpICAodGFyZ2V0ID09IEYpCisgICAgICAgICAgOS4gRSAoQGJ1YmJs
ZSkgICh0YXJnZXQgPT0gRikKKyAgICAgICAgICA5LiBEIChAYnViYmxlKSAgKHRhcmdldCA9PSBG
KQorICAgICAgICAgMTAuIEMgKEB0YXJnZXQpICAodGFyZ2V0ID09IEMpCisgICAgICAgICAxMS4g
QiAoYnViYmxlKSAgICh0YXJnZXQgPT0gQykKKyAgICAgICAgIDEyLiBBIChidWJibGUpICAgKHRh
cmdldCA9PSBDKQorCisgICAgICAgIFRlc3Q6IGZhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNz
LWV2ZW50cy5odG1sCisKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAg
ICAgKEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dDo6bm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OmV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dDo6c2hvdWxkQ29u
dGludWVUb1BhcmVudERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hl
ckZvckJyb3dzaW5nQ29udGV4dDo6YWRqdXN0UmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OkV2ZW50RGlzcGF0Y2hlckZv
ckJyb3dzaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXJGb3JC
cm93c2luZ0NvbnRleHQ6OmNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycyk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OndpbGxEaXNwYXRjaEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dDo6
ZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRj
aGVyRm9yQnJvd3NpbmdDb250ZXh0OjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdDb250ZXh0OjpkaXNwYXRjaEV2
ZW50QXRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyRm9yQnJvd3Np
bmdDb250ZXh0OjpkaXNwYXRjaEV2ZW50QXRCdWJibGluZyk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZlbnRQb3N0UHJvY2Vz
cyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6
OmRpc3BhdGNoRXZlbnREZWZhdWx0SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERp
c3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OnJlc2V0VGFyZ2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dDo6dG9wRXZlbnRDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OmV2ZW50U2hvdWxkQmVTdG9wcGVkQXRCb3VuZGFyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OmRldGVybWlu
ZURpc3BhdGNoQmVoYXZpb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpF
dmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hT
Y29wZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
U2ltdWxhdGVkQ2xpY2spOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkUHJvcGFnYXRlRXZlbnRB
Y3Jvc3NTZWFtbGVzc0lGcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y2xvbmVFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OnByZXBhcmVFdmVudERpc3BhdGNoZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmZpcmVEaXNwYXRjaGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmZpcmVEaXNwYXRjaGVyc1Bvc3RQ
cm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNo
ZXJzRGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFdmVudERpc3BhdGNoZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpub2RlKToKKwogMjAxMi0wOC0wOSAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFNhbmRib3hpbmcgdmlldyBzb3Vy
Y2UgZG9jdW1lbnRzIGlzIGluZWZmZWN0aXZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNo
ZXIuY3BwCmluZGV4IGUxYTYwZjNkNDBiM2EyOTVmOTdmYTgxZTY5MGZjYWRkNzUyODRjYjQuLmFj
MDk1NmY5MjdlZDU1N2ZkYTA0N2U2NGNkZjFlN2Y4YTY0MDNmOTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiRXZlbnRD
b250ZXh0LmgiCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaE1lZGlhdG9yLmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKQEAgLTUwLDYgKzUxLDY4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorZW51bSBFdmVudERpc3BhdGNoQmVoYXZpb3IgeworICAgIFJldGFy
Z2V0RXZlbnQsCisgICAgU3RheUluc2lkZVNoYWRvd0RPTQorfTsKKworZW51bSBFdmVudERpc3Bh
dGNoQ29udGludWF0aW9uIHsKKyAgICBDb250aW51ZURpc3BhdGNoaW5nLAorICAgIERvbmVEaXNw
YXRjaGluZworfTsKKworZW51bSBFdmVudEFuY2VzdG9yQ29udGludWF0aW9uIHsKKyAgICBFdmVu
dEFuY2VzdG9yU3RvcCwKKyAgICBFdmVudEFuY2VzdG9yQ29udGludWVUb1BhcmVudAorfTsKKwor
Y2xhc3MgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIgeworcHVibGljOgorICAgIEV2ZW50UmVs
YXRlZFRhcmdldEFkanVzdGVyKFBhc3NSZWZQdHI8Tm9kZT4sIFBhc3NSZWZQdHI8Tm9kZT4gcmVs
YXRlZFRhcmdldCk7CisgICAgdm9pZCBhZGp1c3QoVmVjdG9yPEV2ZW50Q29udGV4dD4mKTsKK3By
aXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPFRyZWVTY29wZSosIEV2ZW50VGFyZ2V0Kj4gUmVs
YXRlZFRhcmdldE1hcDsKKyAgICBFdmVudFRhcmdldCogZmluZFJlbGF0ZWRUYXJnZXQoVHJlZVNj
b3BlKik7CisKKyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworICAgIFJlZlB0cjxOb2RlPiBtX3Jl
bGF0ZWRUYXJnZXQ7CisgICAgUmVsYXRlZFRhcmdldE1hcCBtX3JlbGF0ZWRUYXJnZXRNYXA7Cit9
OworCitjbGFzcyBFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQgeworcHVibGljOgor
ICAgIEV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dChOb2RlKiwgUGFzc1JlZlB0cjxF
dmVudD4pOworICAgIHZvaWQgYWRqdXN0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFy
Z2V0PiBwcnBSZWxhdGVkVGFyZ2V0KTsKKworICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVy
biBtX25vZGUuZ2V0KCk7IH0KKyAgICBjb25zdCBFdmVudCogZXZlbnQoKSBjb25zdCB7IHJldHVy
biBtX2V2ZW50LmdldCgpOyB9CisKKyAgICBib29sIHNob3VsZENvbnRpbnVlVG9QYXJlbnREb2N1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbiA9PSBFdmVu
dEFuY2VzdG9yQ29udGludWVUb1BhcmVudDsgfQorCisgICAgRXZlbnREaXNwYXRjaENvbnRpbnVh
dGlvbiBkaXNwYXRjaEV2ZW50UHJlUHJvY2VzcygpOworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51
YXRpb24gZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKCk7CisgICAgRXZlbnREaXNwYXRjaENvbnRp
bnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRUYXJnZXQoKTsKKyAgICBFdmVudERpc3BhdGNoQ29udGlu
dWF0aW9uIGRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKCk7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50
UG9zdFByb2Nlc3MoKTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnREZWZhdWx0SGFuZGxlcigpOwor
CisgICAgdm9pZCByZXNldFRhcmdldCgpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSB3aWxsRGlzcGF0Y2hFdmVudCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIEV2ZW50RGlz
cGF0Y2hCZWhhdmlvciBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKFNoYWRvd1Jvb3QqLCBFdmVu
dFRhcmdldCopOworICAgIGNvbnN0IEV2ZW50Q29udGV4dCogdG9wRXZlbnRDb250ZXh0KCk7Cisg
ICAgRXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbiBjYWx1Y3VsYXRlRXZlbnRBbmNlc3RvcnMoKTsK
KworICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgUmVmUHRyPEV2ZW50PiBtX2V2ZW50Owor
ICAgIFZlY3RvcjxFdmVudENvbnRleHQ+IG1fYW5jZXN0b3JzOworICAgIEV2ZW50QW5jZXN0b3JD
b250aW51YXRpb24gbV9ldmVudEFuY2VzdG9yQ29udGludWF0aW9uOworICAgIFJlZlB0cjxGcmFt
ZVZpZXc+IG1fdmlldzsKKyAgICBXaW5kb3dFdmVudENvbnRleHQgbV93aW5kb3dFdmVudENvbnRl
eHQ7CisgICAgdm9pZCogbV9wcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdDsKK307CisKIHN0
YXRpYyBIYXNoU2V0PE5vZGUqPiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MgPSAw
OwogCiBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6RXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0
ZXIoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQp
CkBAIC0xMjEsMTMgKzE4NCw2IEBAIEV2ZW50VGFyZ2V0KiBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1
c3Rlcjo6ZmluZFJlbGF0ZWRUYXJnZXQoVHJlZVNjb3BlKiBzY29wZSkKICAgICByZXR1cm4gcmVs
YXRlZFRhcmdldDsKIH0KIAotYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9k
ZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+IG1lZGlhdG9yKQotewot
ICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLQotICAgIEV2ZW50RGlzcGF0
Y2hlciBkaXNwYXRjaGVyKG5vZGUpOwotICAgIHJldHVybiBtZWRpYXRvci0+ZGlzcGF0Y2hFdmVu
dCgmZGlzcGF0Y2hlcik7Ci19CiAKIGlubGluZSBzdGF0aWMgRXZlbnRUYXJnZXQqIGV2ZW50VGFy
Z2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKE5vZGUqIHJlZmVyZW5jZU5vZGUpCiB7CkBAIC0x
NTEsNDAgKzIwNyw3IEBAIGlubGluZSBzdGF0aWMgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0UmVz
cGVjdGluZ1NWR1RhcmdldFJ1bGVzKE5vZGUqIHJlZmVyZW5jZU5vCiAgICAgcmV0dXJuIHJlZmVy
ZW5jZU5vZGU7CiB9CiAKLXZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNjb3BlZEV2ZW50
KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikK
LXsKLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgdGFyZ2V0IGhlcmUgYmVjYXVzZSBpdCBjYW4g
Z28gYXdheSBieSB0aGUgdGltZSB3ZSBhY3R1YWxseSBmaXJlIHRoZSBldmVudC4KLSAgICBtZWRp
YXRvci0+ZXZlbnQoKS0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1
bGVzKG5vZGUpKTsKLSAgICBTY29wZWRFdmVudFF1ZXVlOjppbnN0YW5jZSgpLT5lbnF1ZXVlRXZl
bnREaXNwYXRjaE1lZGlhdG9yKG1lZGlhdG9yKTsKLX0KLQotdm9pZCBFdmVudERpc3BhdGNoZXI6
OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gdW5k
ZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2sp
Ci17Ci0gICAgaWYgKG5vZGUtPmRpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MpCi0gICAgICAgIGdOb2Rlc0Rpc3Bh
dGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gbmV3IEhhc2hTZXQ8Tm9kZSo+OwotICAgIGVsc2UgaWYg
KGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5jb250YWlucyhub2RlKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPmFkZChu
b2RlKTsKLQotICAgIC8vIHNlbmQgbW91c2Vkb3duIGFuZCBtb3VzZXVwIGJlZm9yZSB0aGUgY2xp
Y2ssIGlmIHJlcXVlc3RlZAotICAgIGlmIChzZW5kTW91c2VFdmVudHMpCi0gICAgICAgIEV2ZW50
RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRW
aWV3KCksIHVuZGVybHlpbmdFdmVudCkpOwotICAgIG5vZGUtPnNldEFjdGl2ZSh0cnVlLCBzaG93
UHJlc3NlZExvb2spOwotICAgIGlmIChzZW5kTW91c2VFdmVudHMpCi0gICAgICAgIEV2ZW50RGlz
cGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0Vmlldygp
LCB1bmRlcmx5aW5nRXZlbnQpKTsKLSAgICBub2RlLT5zZXRBY3RpdmUoZmFsc2UpOwotCi0gICAg
Ly8gYWx3YXlzIHNlbmQgY2xpY2sKLSAgICBFdmVudERpc3BhdGNoZXIobm9kZSkuZGlzcGF0Y2hF
dmVudChTaW11bGF0ZWRNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQs
IG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkpOwotCi0g
ICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPnJlbW92ZShub2RlKTsKLX0KLQot
dm9pZCBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50LCBQ
YXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KQordm9pZCBFdmVudERpc3Bh
dGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OmFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxF
dmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCkKIHsKICAgICBpZiAoIXBycFJlbGF0ZWRUYXJn
ZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTE5MywyNiArMjE2LDI5IEBAIHZvaWQgRXZlbnREaXNw
YXRjaGVyOjphZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiBldmVudCwgUGFzc1JlZlB0cjxFdmVu
dFRhcmdldD4KICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbV9ub2RlLmdldCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQpOworICAgIGlmIChtX2Fu
Y2VzdG9ycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKICAgICBFdmVudFJlbGF0ZWRUYXJn
ZXRBZGp1c3RlcihtX25vZGUsIHJlbGF0ZWRUYXJnZXQucmVsZWFzZSgpKS5hZGp1c3QobV9hbmNl
c3RvcnMpOwogfQogCi1FdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcihOb2RlKiBub2Rl
KQorRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdDb250ZXh0OjpFdmVudERpc3BhdGNoZXJGb3JC
cm93c2luZ0NvbnRleHQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAg
OiBtX25vZGUobm9kZSkKLSAgICAsIG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQoZmFsc2UpCi0jaWZu
ZGVmIE5ERUJVRwotICAgICwgbV9ldmVudERpc3BhdGNoZWQoZmFsc2UpCi0jZW5kaWYKKyAgICAs
IG1fZXZlbnQoZXZlbnQpCisgICAgLCBtX2FuY2VzdG9ycygpCisgICAgLCBtX2V2ZW50QW5jZXN0
b3JDb250aW51YXRpb24oY2FsdWN1bGF0ZUV2ZW50QW5jZXN0b3JzKCkpCisgICAgLCBtX3ZpZXco
bV9ub2RlLT5kb2N1bWVudCgpLT52aWV3KCkpCisgICAgLCBtX3dpbmRvd0V2ZW50Q29udGV4dCht
X2V2ZW50LmdldCgpLCBtX25vZGUuZ2V0KCksIHRvcEV2ZW50Q29udGV4dCgpKQorICAgICwgbV9w
cmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCgwKQogewotICAgIEFTU0VSVChub2RlKTsKLSAg
ICBtX3ZpZXcgPSBub2RlLT5kb2N1bWVudCgpLT52aWV3KCk7CisgICAgQVNTRVJUKG1fbm9kZSk7
CisgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOworICAgIEFTU0VSVCghbV9l
dmVudC0+dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBjb2RlIGNhbiBjcmVhdGUgYW4g
ZXZlbnQgd2l0aCBhbiBlbXB0eSBuYW1lLCBidXQgbm90IG51bGwuCisgICAgbV9ldmVudC0+c2V0
VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkp
OwogfQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJlRXZlbnRBbmNlc3RvcnMoRXZlbnQq
IGV2ZW50KQorRXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXJGb3JCcm93
c2luZ0NvbnRleHQ6OmNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycygpCiB7Ci0gICAgaWYgKG1fYW5j
ZXN0b3JzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2FuY2VzdG9yc0luaXRp
YWxpemVkID0gdHJ1ZTsKKyAgICBBU1NFUlQobV9hbmNlc3RvcnMuaXNFbXB0eSgpKTsKICAgICBi
b29sIGluRG9jdW1lbnQgPSBtX25vZGUtPmluRG9jdW1lbnQoKTsKICAgICBib29sIGlzU1ZHRWxl
bWVudCA9IG1fbm9kZS0+aXNTVkdFbGVtZW50KCk7CiAgICAgVmVjdG9yPEV2ZW50VGFyZ2V0Kj4g
dGFyZ2V0U3RhY2s7CkBAIC0yMjUsMTQ1ICsyNTEsMTI2IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVy
OjplbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCogZXZlbnQpCiAgICAgICAgICAgICB0YXJnZXRT
dGFjay5hcHBlbmQodGFyZ2V0U3RhY2subGFzdCgpKTsKICAgICAgICAgbV9hbmNlc3RvcnMuYXBw
ZW5kKEV2ZW50Q29udGV4dChub2RlLCBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxl
cyhub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSk7CiAgICAgICAgIGlmICghaW5Eb2N1bWVudCkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBFdmVudEFuY2VzdG9yU3Rv
cDsKICAgICAgICAgbGFzdCA9IG5vZGU7CiAgICAgICAgIGlmICghbm9kZS0+aXNTaGFkb3dSb290
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGRldGVybWluZURpc3BhdGNo
QmVoYXZpb3IoZXZlbnQsIHRvU2hhZG93Um9vdChub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSA9
PSBTdGF5SW5zaWRlU2hhZG93RE9NKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcih0b1NoYWRvd1Jvb3Qobm9kZSksIHRhcmdldFN0YWNr
Lmxhc3QoKSkgPT0gU3RheUluc2lkZVNoYWRvd0RPTSkKKyAgICAgICAgICAgIHJldHVybiBFdmVu
dEFuY2VzdG9yU3RvcDsKICAgICAgICAgaWYgKCFpc1NWR0VsZW1lbnQpIHsKICAgICAgICAgICAg
IEFTU0VSVCghdGFyZ2V0U3RhY2suaXNFbXB0eSgpKTsKICAgICAgICAgICAgIHRhcmdldFN0YWNr
LnJlbW92ZUxhc3QoKTsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gRXZlbnRBbmNlc3Rv
ckNvbnRpbnVlVG9QYXJlbnQ7CiB9CiAKLWJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQorSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIEV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dDo6d2lsbERpc3BhdGNoRXZl
bnQoKSBjb25zdAogewotI2lmbmRlZiBOREVCVUcKLSAgICBBU1NFUlQoIW1fZXZlbnREaXNwYXRj
aGVkKTsKLSAgICBtX2V2ZW50RGlzcGF0Y2hlZCA9IHRydWU7Ci0jZW5kaWYKLSAgICBSZWZQdHI8
RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7Ci0gICAgQ2hpbGROb2Rlc0xhenlTbmFwc2hvdDo6dGFr
ZUNoaWxkTm9kZXNMYXp5U25hcHNob3QoKTsKLQotICAgIGV2ZW50LT5zZXRUYXJnZXQoZXZlbnRU
YXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9ub2RlLmdldCgpKSk7Ci0gICAgQVNTRVJU
KCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkp
OwotICAgIEFTU0VSVCghZXZlbnQtPnR5cGUoKS5pc051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29k
ZSBjYW4gY3JlYXRlIGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZSwgYnV0IG5vdCBudWxsLgot
ICAgIGVuc3VyZUV2ZW50QW5jZXN0b3JzKGV2ZW50LmdldCgpKTsKLSAgICBXaW5kb3dFdmVudENv
bnRleHQgd2luZG93RXZlbnRDb250ZXh0KGV2ZW50LmdldCgpLCBtX25vZGUuZ2V0KCksIHRvcEV2
ZW50Q29udGV4dCgpKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2ll
ID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudChtX25vZGUtPmRv
Y3VtZW50KCksICpldmVudCwgd2luZG93RXZlbnRDb250ZXh0LndpbmRvdygpLCBtX25vZGUuZ2V0
KCksIG1fYW5jZXN0b3JzKTsKLQotICAgIHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVz
dWx0OwotICAgIGlmIChkaXNwYXRjaEV2ZW50UHJlUHJvY2VzcyhldmVudCwgcHJlRGlzcGF0Y2hF
dmVudEhhbmRsZXJSZXN1bHQpID09IENvbnRpbnVlRGlzcGF0Y2hpbmcpCi0gICAgICAgIGlmIChk
aXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoZXZlbnQsIHdpbmRvd0V2ZW50Q29udGV4dCkgPT0gQ29u
dGludWVEaXNwYXRjaGluZykKLSAgICAgICAgICAgIGlmIChkaXNwYXRjaEV2ZW50QXRUYXJnZXQo
ZXZlbnQpID09IENvbnRpbnVlRGlzcGF0Y2hpbmcpCi0gICAgICAgICAgICAgICAgZGlzcGF0Y2hF
dmVudEF0QnViYmxpbmcoZXZlbnQsIHdpbmRvd0V2ZW50Q29udGV4dCk7Ci0gICAgZGlzcGF0Y2hF
dmVudFBvc3RQcm9jZXNzKGV2ZW50LCBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7Ci0K
LSAgICAvLyBFbnN1cmUgdGhhdCBhZnRlciBldmVudCBkaXNwYXRjaCwgdGhlIGV2ZW50J3MgdGFy
Z2V0IG9iamVjdCBpcyB0aGUKLSAgICAvLyBvdXRlcm1vc3Qgc2hhZG93IERPTSBib3VuZGFyeS4K
LSAgICBldmVudC0+c2V0VGFyZ2V0KHdpbmRvd0V2ZW50Q29udGV4dC50YXJnZXQoKSk7Ci0gICAg
ZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWREaXNwYXRjaEV2ZW50KGNvb2tpZSk7Ci0KLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0
UHJldmVudGVkKCk7CisgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERp
c3BhdGNoRXZlbnQobV9ub2RlLT5kb2N1bWVudCgpLCAqbV9ldmVudCwgbV93aW5kb3dFdmVudENv
bnRleHQud2luZG93KCksIG1fbm9kZS5nZXQoKSwgbV9hbmNlc3RvcnMpOwogfQogCi1pbmxpbmUg
RXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRQ
cmVQcm9jZXNzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCB2b2lkKiYgcHJlRGlzcGF0Y2hFdmVu
dEhhbmRsZXJSZXN1bHQpCitpbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERp
c3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZlbnRQcmVQcm9jZXNzKCkKIHsK
ICAgICAvLyBHaXZlIHRoZSB0YXJnZXQgbm9kZSBhIGNoYW5jZSB0byBkbyBzb21lIHdvcmsgYmVm
b3JlIERPTSBldmVudCBoYW5kbGVycyBnZXQgYSBjcmFjay4KLSAgICBwcmVEaXNwYXRjaEV2ZW50
SGFuZGxlclJlc3VsdCA9IG1fbm9kZS0+cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZlbnQuZ2V0
KCkpOwotICAgIHJldHVybiAobV9hbmNlc3RvcnMuaXNFbXB0eSgpIHx8IGV2ZW50LT5wcm9wYWdh
dGlvblN0b3BwZWQoKSkgPyBEb25lRGlzcGF0Y2hpbmcgOiBDb250aW51ZURpc3BhdGNoaW5nOwor
ICAgIG1fcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQgPSBtX25vZGUtPnByZURpc3BhdGNo
RXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCkpOworICAgIHJldHVybiAobV9hbmNlc3RvcnMuaXNF
bXB0eSgpIHx8IG1fZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKSA/IERvbmVEaXNwYXRjaGlu
ZyA6IENvbnRpbnVlRGlzcGF0Y2hpbmc7CiB9CiAKLWlubGluZSBFdmVudERpc3BhdGNoQ29udGlu
dWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50LCBXaW5kb3dFdmVudENvbnRleHQmIHdpbmRvd0V2ZW50Q29udGV4dCkK
K2lubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlckZvckJyb3dz
aW5nQ29udGV4dDo6ZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKCkKIHsKICAgICAvLyBUcmlnZ2Vy
IGNhcHR1cmluZyBldmVudCBoYW5kbGVycywgc3RhcnRpbmcgYXQgdGhlIHRvcCBhbmQgd29ya2lu
ZyBvdXIgd2F5IGRvd24uCi0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklO
R19QSEFTRSk7CisgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BI
QVNFKTsKIAotICAgIGlmICh3aW5kb3dFdmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZl
bnQuZ2V0KCkpICYmIGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICBpZiAobV93aW5k
b3dFdmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMobV9ldmVudC5nZXQoKSkgJiYgbV9ldmVu
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgIHJldHVybiBEb25lRGlzcGF0Y2hpbmc7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gbV9hbmNlc3RvcnMuc2l6ZSgpIC0gMTsgaSA+IDA7IC0t
aSkgewogICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4dCA9IG1fYW5jZXN0
b3JzW2ldOwogICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJn
ZXQoKSkgewotICAgICAgICAgICAgaWYgKGV2ZW50LT5idWJibGVzKCkpCisgICAgICAgICAgICBp
ZiAobV9ldmVudC0+YnViYmxlcygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgICAgICAg
ICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwogICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhB
U0UpOwotICAgICAgICBldmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkp
OwotICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICAgICAg
bV9ldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKKyAgICAgICAg
ZXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpOworICAgICAgICBp
ZiAobV9ldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gRG9u
ZURpc3BhdGNoaW5nOwogICAgIH0KIAogICAgIHJldHVybiBDb250aW51ZURpc3BhdGNoaW5nOwog
fQogCi1pbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoRXZlbnRBdFRhcmdldChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2lubGluZSBFdmVu
dERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dDo6
ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KCkKIHsKLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVu
dDo6QVRfVEFSR0VUKTsKLSAgICBtX2FuY2VzdG9yc1swXS5oYW5kbGVMb2NhbEV2ZW50cyhldmVu
dC5nZXQoKSk7Ci0gICAgcmV0dXJuIGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSA/IERvbmVE
aXNwYXRjaGluZyA6IENvbnRpbnVlRGlzcGF0Y2hpbmc7CisgICAgbV9ldmVudC0+c2V0RXZlbnRQ
aGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICBtX2FuY2VzdG9yc1swXS5oYW5kbGVMb2NhbEV2
ZW50cyhtX2V2ZW50LmdldCgpKTsKKyAgICByZXR1cm4gbV9ldmVudC0+cHJvcGFnYXRpb25TdG9w
cGVkKCkgPyBEb25lRGlzcGF0Y2hpbmcgOiBDb250aW51ZURpc3BhdGNoaW5nOwogfQogCi1pbmxp
bmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZl
bnRBdEJ1YmJsaW5nKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBXaW5kb3dFdmVudENvbnRleHQm
IHdpbmRvd0NvbnRleHQpCitpbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERp
c3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKCkKIHsK
LSAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSAmJiAhZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKSB7Cisg
ICAgaWYgKG1fZXZlbnQtPmJ1YmJsZXMoKSAmJiAhbV9ldmVudC0+Y2FuY2VsQnViYmxlKCkpIHsK
ICAgICAgICAgLy8gVHJpZ2dlciBidWJibGluZyBldmVudCBoYW5kbGVycywgc3RhcnRpbmcgYXQg
dGhlIGJvdHRvbSBhbmQgd29ya2luZyBvdXIgd2F5IHVwLgotICAgICAgICBldmVudC0+c2V0RXZl
bnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOworICAgICAgICBtX2V2ZW50LT5zZXRFdmVu
dFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CiAKICAgICAgICAgc2l6ZV90IHNpemUgPSBt
X2FuY2VzdG9ycy5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsg
KytpKSB7CiAgICAgICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4dCA9IG1f
YW5jZXN0b3JzW2ldOwogICAgICAgICAgICAgaWYgKGV2ZW50Q29udGV4dC5jdXJyZW50VGFyZ2V0
U2FtZUFzVGFyZ2V0KCkpCi0gICAgICAgICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZl
bnQ6OkFUX1RBUkdFVCk7CisgICAgICAgICAgICAgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZShF
dmVudDo6QVRfVEFSR0VUKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBldmVu
dC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOwotICAgICAgICAgICAgZXZl
bnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKLSAgICAgICAgICAgIGlm
IChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQor
ICAgICAgICAgICAgICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BI
QVNFKTsKKyAgICAgICAgICAgIGV2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50
LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChtX2V2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8
fCBtX2V2ZW50LT5jYW5jZWxCdWJibGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gRG9uZURp
c3BhdGNoaW5nOwogICAgICAgICB9Ci0gICAgICAgIHdpbmRvd0NvbnRleHQuaGFuZGxlTG9jYWxF
dmVudHMoZXZlbnQuZ2V0KCkpOworICAgICAgICBtX3dpbmRvd0V2ZW50Q29udGV4dC5oYW5kbGVM
b2NhbEV2ZW50cyhtX2V2ZW50LmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJuIENvbnRpbnVlRGlz
cGF0Y2hpbmc7CiB9CiAKLWlubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVu
dFBvc3RQcm9jZXNzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCB2b2lkKiBwcmVEaXNwYXRjaEV2
ZW50SGFuZGxlclJlc3VsdCkKK2lubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5n
Q29udGV4dDo6ZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKCkKIHsKLSAgICBldmVudC0+c2V0VGFy
Z2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOwot
ICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOwotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNl
KDApOwotCisgICAgbV9ldmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1Rh
cmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOworICAgIG1fZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQo
MCk7CisgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZSgwKTsKICAgICAvLyBQYXNzIHRoZSBkYXRh
IGZyb20gdGhlIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyIHRvIHRoZSBwb3N0RGlzcGF0Y2hFdmVu
dEhhbmRsZXIuCi0gICAgbV9ub2RlLT5wb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZlbnQuZ2V0
KCksIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KTsKKyAgICBtX25vZGUtPnBvc3REaXNw
YXRjaEV2ZW50SGFuZGxlcihtX2V2ZW50LmdldCgpLCBtX3ByZURpc3BhdGNoRXZlbnRIYW5kbGVy
UmVzdWx0KTsKK30KIAoraW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdDb250
ZXh0OjpkaXNwYXRjaEV2ZW50RGVmYXVsdEhhbmRsZXIoKQorewogICAgIC8vIENhbGwgZGVmYXVs
dCBldmVudCBoYW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUgYSBjb25jZXB0IG9mIHBy
ZXZlbnRpbmcKICAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0YWlsIG9mIHdoaWNoIGhh
bmRsZXJzIGFyZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKICAgICAvLyBpbXBsZW1lbnRhdGlvbiBk
ZXRhaWwgYW5kIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgaWYgKCFldmVudC0+ZGVmYXVsdFBy
ZXZlbnRlZCgpICYmICFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgeworICAgIGlmICghbV9ldmVu
dC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFtX2V2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKSB7CiAg
ICAgICAgIC8vIE5vbi1idWJibGluZyBldmVudHMgY2FsbCBvbmx5IG9uZSBkZWZhdWx0IGV2ZW50
IGhhbmRsZXIsIHRoZSBvbmUgZm9yIHRoZSB0YXJnZXQuCi0gICAgICAgIG1fbm9kZS0+ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudC5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXZlbnQtPmRlZmF1
bHRQcmV2ZW50ZWQoKSk7Ci0gICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAg
ICAgICAgbV9ub2RlLT5kZWZhdWx0RXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCkpOworICAgICAg
ICBBU1NFUlQoIW1fZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSk7CisgICAgICAgIGlmIChtX2V2
ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBG
b3IgYnViYmxpbmcgZXZlbnRzLCBjYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMgb24gdGhlIHNh
bWUgdGFyZ2V0cyBpbiB0aGUKICAgICAgICAgLy8gc2FtZSBvcmRlciBhcyB0aGUgYnViYmxpbmcg
cGhhc2UuCi0gICAgICAgIGlmIChldmVudC0+YnViYmxlcygpKSB7CisgICAgICAgIGlmIChtX2V2
ZW50LT5idWJibGVzKCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbV9hbmNlc3RvcnMu
c2l6ZSgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBtX2FuY2VzdG9yc1tpXS5ub2RlKCktPmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghZXZlbnQtPmRlZmF1bHRQ
cmV2ZW50ZWQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
KQorICAgICAgICAgICAgICAgIG1fYW5jZXN0b3JzW2ldLm5vZGUoKS0+ZGVmYXVsdEV2ZW50SGFu
ZGxlcihtX2V2ZW50LmdldCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fZXZlbnQtPmRl
ZmF1bHRQcmV2ZW50ZWQoKSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZXZlbnQtPmRlZmF1bHRI
YW5kbGVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KIH0KIAotY29uc3QgRXZlbnRDb250ZXh0KiBFdmVudERpc3BhdGNoZXI6
OnRvcEV2ZW50Q29udGV4dCgpCitpbmxpbmUgdm9pZCBFdmVudERpc3BhdGNoZXJGb3JCcm93c2lu
Z0NvbnRleHQ6OnJlc2V0VGFyZ2V0KCkKK3sKKyAgICBtX2V2ZW50LT5zZXRUYXJnZXQobV93aW5k
b3dFdmVudENvbnRleHQudGFyZ2V0KCkpOworICAgIG1fZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQo
MCk7Cit9CisKK2lubGluZSBjb25zdCBFdmVudENvbnRleHQqIEV2ZW50RGlzcGF0Y2hlckZvckJy
b3dzaW5nQ29udGV4dDo6dG9wRXZlbnRDb250ZXh0KCkKIHsKICAgICByZXR1cm4gbV9hbmNlc3Rv
cnMuaXNFbXB0eSgpID8gMCA6ICZtX2FuY2VzdG9ycy5sYXN0KCk7CiB9CkBAIC0zNzMsNyArMzgw
LDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpblRoZVNhbWVTY29wZShTaGFkb3dSb290KiBzaGFk
b3dSb290LCBFdmVudFRhcmdldCogdGFyZ2V0KQogICAgIHJldHVybiB0YXJnZXQtPnRvTm9kZSgp
ICYmIHRhcmdldC0+dG9Ob2RlKCktPnRyZWVTY29wZSgpLT5yb290Tm9kZSgpID09IHNoYWRvd1Jv
b3Q7CiB9CiAKLUV2ZW50RGlzcGF0Y2hCZWhhdmlvciBFdmVudERpc3BhdGNoZXI6OmRldGVybWlu
ZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqIGV2ZW50LCBTaGFkb3dSb290KiBzaGFkb3dSb290LCBF
dmVudFRhcmdldCogdGFyZ2V0KQoraW5saW5lIHN0YXRpYyBib29sIGV2ZW50U2hvdWxkQmVTdG9w
cGVkQXRCb3VuZGFyeShFdmVudCogZXZlbnQpCit7CisgICAgLy8gV2ViS2l0IG5ldmVyIGFsbG93
ZWQgc2VsZWN0c3RhcnQgZXZlbnQgdG8gY3Jvc3MgdGhlIHRoZSBzaGFkb3cgRE9NIGJvdW5kYXJ5
LgorICAgIC8vIENoYW5naW5nIHRoaXMgYnJlYWtzIGV4aXN0aW5nIHNpdGVzLgorICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIxOTUgZm9yIGRldGFp
bHMuCisgICAgY29uc3QgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7Cisg
ICAgcmV0dXJuIGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudAorICAgICAgICAg
ICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudAorICAgICAgICAgICAg
fHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50CisgICAgICAgICAgICB8fCBl
dmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50CisgICAgICAgICAgICB8fCBldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50CisgICAgICAgICAgICB8fCBldmVudFR5
cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50CisgICAgICAgICAgICB8fCBldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQ7Cit9CisKK2lubGluZSBFdmVudERpc3Bh
dGNoQmVoYXZpb3IgRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdDb250ZXh0OjpkZXRlcm1pbmVE
aXNwYXRjaEJlaGF2aW9yKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0KiB0YXJn
ZXQpCiB7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBFTkFCTEUoVklERU8pCiAgICAg
Ly8gVmlkZW8tb25seSBmdWxsIHNjcmVlbiBpcyBhIG1vZGUgd2hlcmUgd2UgdXNlIHRoZSBzaGFk
b3cgRE9NIGFzIGFuIGltcGxlbWVudGF0aW9uCkBAIC0zODgsMjEgKzQxMCwxODUgQEAgRXZlbnRE
aXNwYXRjaEJlaGF2aW9yIEV2ZW50RGlzcGF0Y2hlcjo6ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlv
cihFdmVudCogZXZlbnQsIFMKICAgICBVTlVTRURfUEFSQU0oc2hhZG93Um9vdCk7CiAjZW5kaWYK
IAotICAgIC8vIFdlYktpdCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0YXJ0IGV2ZW50IHRvIGNyb3Nz
IHRoZSB0aGUgc2hhZG93IERPTSBib3VuZGFyeS4KLSAgICAvLyBDaGFuZ2luZyB0aGlzIGJyZWFr
cyBleGlzdGluZyBzaXRlcy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUyMTk1IGZvciBkZXRhaWxzLgotICAgIGNvbnN0IEF0b21pY1N0cmluZyBl
dmVudFR5cGUgPSBldmVudC0+dHlwZSgpOwotICAgIGlmIChpblRoZVNhbWVTY29wZShzaGFkb3dS
b290LCB0YXJnZXQpCi0gICAgICAgICYmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFib3J0
RXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZl
bnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAot
ICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudAotICAg
ICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudAotICAgICAg
ICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudAotICAgICAgICAg
ICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50KSkKKyAgICBp
ZiAoaW5UaGVTYW1lU2NvcGUoc2hhZG93Um9vdCwgdGFyZ2V0KSAmJiBldmVudFNob3VsZEJlU3Rv
cHBlZEF0Qm91bmRhcnkobV9ldmVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBTdGF5SW5zaWRl
U2hhZG93RE9NOwotCiAgICAgcmV0dXJuIFJldGFyZ2V0RXZlbnQ7CiB9CiAKK0V2ZW50RGlzcGF0
Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCisgICAgOiBtX25vZGUobm9kZSkKKyNp
Zm5kZWYgTkRFQlVHCisgICAgLCBtX2V2ZW50RGlzcGF0Y2hlZChmYWxzZSkKKyNlbmRpZgorewor
ICAgIE1ZX0FTU0VSVChub2RlKTsKK30KKworYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
RXZlbnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+IG1lZGlh
dG9yKQoreworICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKKworICAgIEV2
ZW50RGlzcGF0Y2hlciBkaXNwYXRjaGVyKG5vZGUpOworICAgIHJldHVybiBtZWRpYXRvci0+ZGlz
cGF0Y2hFdmVudCgmZGlzcGF0Y2hlcik7Cit9CisKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaFNjb3BlZEV2ZW50KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlh
dG9yPiBtZWRpYXRvcikKK3sKKyAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgdGFyZ2V0IGhlcmUg
YmVjYXVzZSBpdCBjYW4gZ28gYXdheSBieSB0aGUgdGltZSB3ZSBhY3R1YWxseSBmaXJlIHRoZSBl
dmVudC4KKyAgICBtZWRpYXRvci0+ZXZlbnQoKS0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVj
dGluZ1NWR1RhcmdldFJ1bGVzKG5vZGUpKTsKKyAgICBTY29wZWRFdmVudFF1ZXVlOjppbnN0YW5j
ZSgpLT5lbnF1ZXVlRXZlbnREaXNwYXRjaE1lZGlhdG9yKG1lZGlhdG9yKTsKK30KKwordm9pZCBF
dmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSogbm9kZSwgUGFzc1Jl
ZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBz
aG93UHJlc3NlZExvb2spCit7CisgICAgaWYgKG5vZGUtPmRpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MpCisgICAg
ICAgIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gbmV3IEhhc2hTZXQ8Tm9kZSo+
OworICAgIGVsc2UgaWYgKGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5jb250YWlu
cyhub2RlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0
ZWRDbGlja3MtPmFkZChub2RlKTsKKworICAgIC8vIHNlbmQgbW91c2Vkb3duIGFuZCBtb3VzZXVw
IGJlZm9yZSB0aGUgY2xpY2ssIGlmIHJlcXVlc3RlZAorICAgIGlmIChzZW5kTW91c2VFdmVudHMp
CisgICAgICAgIEV2ZW50RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1v
dXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIG5vZGUtPmRvY3Vt
ZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkpOworICAgIG5vZGUtPnNldEFj
dGl2ZSh0cnVlLCBzaG93UHJlc3NlZExvb2spOworICAgIGlmIChzZW5kTW91c2VFdmVudHMpCisg
ICAgICAgIEV2ZW50RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNl
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBub2RlLT5kb2N1bWVudCgp
LT5kZWZhdWx0VmlldygpLCB1bmRlcmx5aW5nRXZlbnQpKTsKKyAgICBub2RlLT5zZXRBY3RpdmUo
ZmFsc2UpOworCisgICAgLy8gYWx3YXlzIHNlbmQgY2xpY2sKKyAgICBFdmVudERpc3BhdGNoZXIo
bm9kZSkuZGlzcGF0Y2hFdmVudChTaW11bGF0ZWRNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLmNsaWNrRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlp
bmdFdmVudCkpOworCisgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPnJlbW92
ZShub2RlKTsKK30KKworaW5saW5lIHN0YXRpYyBib29sIHNob3VsZFByb3BhZ2F0ZUV2ZW50QWNy
b3NzU2VhbWxlc3NJRnJhbWVzKEV2ZW50KiBldmVudCkKK3sKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcgZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBtb3Jl
IGV2ZW50cy4KKyAgICByZXR1cm4gZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50
IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudDsKK30KKworaW5saW5l
IHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50PiBjbG9uZUV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAg
ICAvLyBGSVhNRTogU3VwcG9ydCBjbG9uaW5nIGEgZXZlbnQgZm9yIGVhY2ggc3ViY2xhc3Mgb2Yg
RXZlbnQuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkz
Njc4CisgICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkgeworICAgICAgICBNb3VzZUV2ZW50
KiBtb3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50KGV2ZW50KTsKKyAgICAgICAgUmVmUHRyPE1vdXNl
RXZlbnQ+IGNsb25lZE1vdXNlRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUoKTsKKyAgICAgICAg
Ly8gRG9uJ3QgY29weSBBYnN0cmF0VmlldyBub3IgcmVsYXRlZFRhcmdldC4KKyAgICAgICAgY2xv
bmVkTW91c2VFdmVudC0+aW5pdE1vdXNlRXZlbnQobW91c2VFdmVudC0+dHlwZSgpLCBtb3VzZUV2
ZW50LT5idWJibGVzKCksIG1vdXNlRXZlbnQtPmNhbmNlbGFibGUoKSwgMCwKKyAgICAgICAgICAg
IG1vdXNlRXZlbnQtPmRldGFpbCgpLCBtb3VzZUV2ZW50LT5zY3JlZW5YKCksIG1vdXNlRXZlbnQt
PnNjcmVlblkoKSwKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGp1c3QgY2xpZW50WCBhbmQgY2xp
ZW50WS4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MzY5NgorICAgICAgICAgICAgMCwgMCwKKyAgICAgICAgICAgIG1vdXNlRXZlbnQtPmN0
cmxLZXkoKSwgbW91c2VFdmVudC0+YWx0S2V5KCksIG1vdXNlRXZlbnQtPnNoaWZ0S2V5KCksIG1v
dXNlRXZlbnQtPm1ldGFLZXkoKSwKKyAgICAgICAgICAgIG1vdXNlRXZlbnQtPmJ1dHRvbigpLAor
ICAgICAgICAgICAgLy8gTnVsbGlmaWVzIHJlbGF0ZWRUYXJnZXQgc2luY2Ugd2Ugc3VwcG9ydCBv
bmx5ICdjbGljaycgYW5kICdkYmxjbGljaycgZXZlbnQgc28gZmFyLgorICAgICAgICAgICAgMCk7
CisgICAgICAgIHJldHVybiBjbG9uZWRNb3VzZUV2ZW50LnJlbGVhc2UoKTsKKyAgICB9CisgICAg
cmV0dXJuIEV2ZW50OjpjcmVhdGUoZXZlbnQtPnR5cGUoKSwgZXZlbnQtPmJ1YmJsZXMoKSwgZXZl
bnQtPmNhbmNlbGFibGUoKSk7Cit9CisKK2lubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6cHJl
cGFyZUV2ZW50RGlzcGF0Y2hlcnMoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCit7CisgICAg
TVlfQVNTRVJUKG1fZGlzcGF0Y2hlcnMuaXNFbXB0eSgpKTsKKyAgICBSZWZQdHI8RXZlbnQ+IGV2
ZW50ID0gcHJwRXZlbnQ7CisgICAgTm9kZSogbm9kZSA9IG1fbm9kZS5nZXQoKTsKKyAgICBib29s
IHByb3BhZ2F0ZUV2ZW50QWNyb3NzU2VhbWxlc3NJRnJhbWVzID0gc2hvdWxkUHJvcGFnYXRlRXZl
bnRBY3Jvc3NTZWFtbGVzc0lGcmFtZXMoZXZlbnQuZ2V0KCkpOworICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgIG1fZGlzcGF0Y2hlcnMuYXBwZW5kKGFkb3B0UHRyKG5ldyBFdmVudERpc3BhdGNo
ZXJGb3JCcm93c2luZ0NvbnRleHQobm9kZSwgZXZlbnQpKSk7CisgICAgICAgIGlmICghbV9kaXNw
YXRjaGVycy5sYXN0KCktPnNob3VsZENvbnRpbnVlVG9QYXJlbnREb2N1bWVudCgpIHx8ICFwcm9w
YWdhdGVFdmVudEFjcm9zc1NlYW1sZXNzSUZyYW1lcykKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgSFRNTElGcmFtZUVsZW1lbnQqIHBhcmVudElGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkt
PnNlYW1sZXNzUGFyZW50SUZyYW1lKCk7CisgICAgICAgIGlmICghcGFyZW50SUZyYW1lKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBub2RlID0gcGFyZW50SUZyYW1lOworICAgICAgICBl
dmVudCA9IGNsb25lRXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBFdmVudERp
c3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQs
IFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCit7CisgICAgUmVmUHRy
PEV2ZW50PiBldmVudCA9IHBycEV2ZW50OworICAgIGlmIChtX2Rpc3BhdGNoZXJzLmlzRW1wdHko
KSkKKyAgICAgICAgcHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoZXZlbnQpOworICAgIEFTU0VSVCgh
bV9kaXNwYXRjaGVycy5pc0VtcHR5KCkpOworICAgIG1fZGlzcGF0Y2hlcnMubGFzdCgpLT5hZGp1
c3RSZWxhdGVkVGFyZ2V0KHBycFJlbGF0ZWRUYXJnZXQpOworfQorCitib29sIEV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK3sKKyNpZm5k
ZWYgTkRFQlVHCisgICAgQVNTRVJUKCFtX2V2ZW50RGlzcGF0Y2hlZCk7CisgICAgbV9ldmVudERp
c3BhdGNoZWQgPSB0cnVlOworI2VuZGlmCisgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2
ZW50OworICAgIGlmIChtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcHJlcGFyZUV2
ZW50RGlzcGF0Y2hlcnMoZXZlbnQpOworICAgIEFTU0VSVCghbV9kaXNwYXRjaGVycy5pc0VtcHR5
KCkpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBtX2Rpc3Bh
dGNoZXJzWzBdLT53aWxsRGlzcGF0Y2hFdmVudCgpOworCisgICAgZmlyZURpc3BhdGNoZXJzKCk7
CisgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gZmlyZURpc3BhdGNoZXJzRGVmYXVsdEV2ZW50
SGFuZGxlcigpOworCisgICAgLy8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQgZGlzcGF0Y2gsIHRo
ZSBldmVudCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCisgICAgLy8gb3V0ZXJtb3N0IHNoYWRvdyBE
T00gYm91bmRhcnkuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Rpc3BhdGNoZXJzLnNp
emUoKTsgKytpKQorICAgICAgICBtX2Rpc3BhdGNoZXJzW2ldLT5yZXNldFRhcmdldCgpOworCisg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50KGNvb2tpZSk7Cisg
ICAgcmV0dXJuICFkZWZhdWx0UHJldmVudGVkOworfQorCitpbmxpbmUgdm9pZCBFdmVudERpc3Bh
dGNoZXI6OmZpcmVEaXNwYXRjaGVycygpCit7CisgICAgQVNTRVJUKCFtX2Rpc3BhdGNoZXJzLmlz
RW1wdHkoKSk7CisgICAgc2l6ZV90IHNpemUgPSBtX2Rpc3BhdGNoZXJzLnNpemUoKTsKKyAgICBm
b3IgKGludCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChtX2Rpc3Bh
dGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50UHJlUHJvY2VzcygpID09IERvbmVEaXNwYXRjaGluZwor
ICAgICAgICAgICAgICAgIHx8IG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRBdENhcHR1
cmluZygpID09IERvbmVEaXNwYXRjaGluZykgeworICAgICAgICAgICAgZmlyZURpc3BhdGNoZXJz
UG9zdFByb2Nlc3MoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZGlz
cGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRBdFRhcmdldCgpID09IERvbmVEaXNwYXRjaGluZwor
ICAgICAgICAgICAgICAgIHx8IG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRBdEJ1YmJs
aW5nKCkgPT0gRG9uZURpc3BhdGNoaW5nKSB7CisgICAgICAgICAgICBmaXJlRGlzcGF0Y2hlcnNQ
b3N0UHJvY2VzcyhpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBt
X2Rpc3BhdGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoKTsKKyAgICB9Cit9CisK
K2lubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNoZXJzUG9zdFByb2Nlc3Mo
aW50IGJyb3dzaW5nQ29udGV4dE51bWJlcikKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1fZGlzcGF0
Y2hlcnMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSBicm93c2luZ0NvbnRleHROdW1iZXI7
IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRQ
b3N0UHJvY2VzcygpOworfQorCitpbmxpbmUgYm9vbCBFdmVudERpc3BhdGNoZXI6OmZpcmVEaXNw
YXRjaGVyc0RlZmF1bHRFdmVudEhhbmRsZXIoKQoreworICAgIHNpemVfdCBzaXplID0gbV9kaXNw
YXRjaGVycy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
KyAgICAgICAgY29uc3QgRXZlbnQqIGV2ZW50ID0gbV9kaXNwYXRjaGVyc1tpXS0+ZXZlbnQoKTsK
KyAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgbV9kaXNwYXRjaGVyc1tpXS0+ZGlzcGF0Y2hFdmVudERlZmF1bHRI
YW5kbGVyKCk7CisgICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgeworICAgICAg
ICAgICAgQVNTRVJUKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWV2ZW50LT5idWJibGVzKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDViZmVhZDBkMGU2Y2JlMGI4
MDAzNGQ0MjI1YTYwZTMyNGRmYWM4MzkuLjZjZGYyZjdiNjU2NzM1MTg4NWU3ODRmZWM2MjcyZmU5
ZWRlYjkyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTI3LDg1ICsy
Nyw0MSBAQAogI2RlZmluZSBFdmVudERpc3BhdGNoZXJfaAogCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RXZlbnQ7Ci1jbGFzcyBFdmVudENvbnRleHQ7CiBjbGFzcyBFdmVudERpc3BhdGNoTWVkaWF0b3I7
CitjbGFzcyBFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ7CiBjbGFzcyBFdmVudFRh
cmdldDsKLWNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ7Ci1jbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7Ci1jbGFzcyBTaGFkb3dSb290Owot
Y2xhc3MgVHJlZVNjb3BlOwotY2xhc3MgV2luZG93RXZlbnRDb250ZXh0OwotCi1lbnVtIEV2ZW50
RGlzcGF0Y2hCZWhhdmlvciB7Ci0gICAgUmV0YXJnZXRFdmVudCwKLSAgICBTdGF5SW5zaWRlU2hh
ZG93RE9NCi19OwotCi1lbnVtIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gewotICAgIENvbnRp
bnVlRGlzcGF0Y2hpbmcsCi0gICAgRG9uZURpc3BhdGNoaW5nCi19OwotCi1jbGFzcyBFdmVudFJl
bGF0ZWRUYXJnZXRBZGp1c3RlciB7Ci1wdWJsaWM6Ci0gICAgRXZlbnRSZWxhdGVkVGFyZ2V0QWRq
dXN0ZXIoUGFzc1JlZlB0cjxOb2RlPiwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KTsK
LSAgICB2b2lkIGFkanVzdChWZWN0b3I8RXZlbnRDb250ZXh0PiYpOwotcHJpdmF0ZToKLSAgICB0
eXBlZGVmIEhhc2hNYXA8VHJlZVNjb3BlKiwgRXZlbnRUYXJnZXQqPiBSZWxhdGVkVGFyZ2V0TWFw
OwotICAgIEV2ZW50VGFyZ2V0KiBmaW5kUmVsYXRlZFRhcmdldChUcmVlU2NvcGUqKTsKLQotICAg
IFJlZlB0cjxOb2RlPiBtX25vZGU7Ci0gICAgUmVmUHRyPE5vZGU+IG1fcmVsYXRlZFRhcmdldDsK
LSAgICBSZWxhdGVkVGFyZ2V0TWFwIG1fcmVsYXRlZFRhcmdldE1hcDsKLX07CiAKIGNsYXNzIEV2
ZW50RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZGlzcGF0Y2hFdmVudChO
b2RlKiwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+KTsKICAgICBzdGF0aWMgdm9p
ZCBkaXNwYXRjaFNjb3BlZEV2ZW50KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRp
YXRvcj4pOwotCiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhOb2RlKiwg
UGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywg
Ym9vbCBzaG93UHJlc3NlZExvb2spOwogCisgICAgdm9pZCBhZGp1c3RSZWxhdGVkVGFyZ2V0KFBh
c3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0KTsK
ICAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIHZvaWQgYWRq
dXN0UmVsYXRlZFRhcmdldChFdmVudCosIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0
ZWRUYXJnZXQpOwotICAgIE5vZGUqIG5vZGUoKSBjb25zdDsKKyAgICBOb2RlKiBub2RlKCkgY29u
c3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgRXZlbnREaXNwYXRj
aGVyKE5vZGUqKTsKKyAgICB2b2lkIHByZXBhcmVFdmVudERpc3BhdGNoZXJzKFBhc3NSZWZQdHI8
RXZlbnQ+KTsKKyAgICB2b2lkIGZpcmVEaXNwYXRjaGVycygpOworICAgIHZvaWQgZmlyZURpc3Bh
dGNoZXJzUG9zdFByb2Nlc3MoaW50IGJyb3dzaW5nQ29udGV4dE51bWJlcik7CisgICAgYm9vbCBm
aXJlRGlzcGF0Y2hlcnNEZWZhdWx0RXZlbnRIYW5kbGVyKCk7CiAKLSAgICBFdmVudERpc3BhdGNo
QmVoYXZpb3IgZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCosIFNoYWRvd1Jvb3QqLCBF
dmVudFRhcmdldCopOwotCi0gICAgdm9pZCBlbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCopOwot
ICAgIGNvbnN0IEV2ZW50Q29udGV4dCogdG9wRXZlbnRDb250ZXh0KCk7Ci0KLSAgICBFdmVudERp
c3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZlbnRQcmVQcm9jZXNzKFBhc3NSZWZQdHI8RXZl
bnQ+LCB2b2lkKiYgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOwotICAgIEV2ZW50RGlz
cGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKFBhc3NSZWZQdHI8RXZl
bnQ+LCBXaW5kb3dFdmVudENvbnRleHQmKTsKLSAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9u
IGRpc3BhdGNoRXZlbnRBdFRhcmdldChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgRXZlbnREaXNw
YXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRCdWJibGluZyhQYXNzUmVmUHRyPEV2ZW50
PiwgV2luZG93RXZlbnRDb250ZXh0Jik7Ci0gICAgdm9pZCBkaXNwYXRjaEV2ZW50UG9zdFByb2Nl
c3MoUGFzc1JlZlB0cjxFdmVudD4sIHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0
KTsKLQotICAgIFZlY3RvcjxFdmVudENvbnRleHQ+IG1fYW5jZXN0b3JzOworICAgIFZlY3RvcjxP
d25QdHI8RXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdDb250ZXh0PiA+IG1fZGlzcGF0Y2hlcnM7
CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKLSAgICBSZWZQdHI8RnJhbWVWaWV3PiBtX3ZpZXc7
Ci0gICAgYm9vbCBtX2FuY2VzdG9yc0luaXRpYWxpemVkOwogI2lmbmRlZiBOREVCVUcKICAgICBi
b29sIG1fZXZlbnREaXNwYXRjaGVkOwogI2VuZGlmCiB9OwogCi1pbmxpbmUgTm9kZSogRXZlbnRE
aXNwYXRjaGVyOjpub2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ub2RlLmdldCgpOwotfQot
CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQ4NjgwYjE3MWQzNzQ1NjQ1NzZjMDA1Nzk3ODI2OGNhZTE1
ZTEwNGMuLjk1NGMxMjA3NWMzN2IyNWQyYzA1M2VlNjc1Mjg3MmNlMjdlMzZmMDAgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAxMi0wOC0wOSAgSGF5YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVudCBwcm9wYWdhdGlvbiBhY3Jvc3Mgc2VhbWxl
c3MgaWZyYW1lcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkxMjkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBmYXN0L2ZyYW1lcy9zZWFtbGVzcy9yZXNvdXJjZXMvZmlyZS1ldmVudHMuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3Mt
ZXZlbnRzLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA4LTA5ICBNaWtoYWlsIFBvemRueWFrb3YgIDxt
aWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgogCiAgICAgICAgIFtXSzJdIFVuc2tpcCB0ZXN0
cyByZXF1aXJpbmcgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcFJlc291cmNlUmVzcG9uc2VNSU1F
VHlwZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3Jlc291
cmNlcy9maXJlLWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mv
cmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNlNjI3MDNjN2NlMTE1MWE1
YmU4NGIyODBmZTEzZWM0M2QzODIwNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZnJhbWVzL3NlYW1sZXNzL3Jlc291cmNlcy9maXJlLWV2ZW50cy5odG1sCkBAIC0wLDAgKzEs
MTggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxkaXYgaWQ9J3RhcmdldCc+
PC9kaXY+Cis8c2NyaXB0Pgord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5j
dGlvbihldmVudCkgeworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
dGFyZ2V0Jyk7CisgICAgdmFyIGV2ZW50cyA9IFsnYWJvcnQnLCAnc2VsZWN0JywgJ2NoYW5nZScs
ICdjbGljaycsICdkYmxjbGljaycsICdyZXNldCcsICdyZXNpemUnLCAnc2Nyb2xsJywgJ3NlbGVj
dHN0YXJ0J107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ1VJRXZlbnQnKTsKKyAg
ICAgICAgZXZlbnQuaW5pdEV2ZW50KGV2ZW50c1tpXSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICB0
YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgfQorICAgIHdpbmRvdy50b3AucG9zdE1l
c3NhZ2UoJ0RPTkUnLCAnKicpOworfSwgZmFsc2UpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVz
cy1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mv
c2VhbWxlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWM2ZWE1OGIwYTQ0ZjA3
NTVlOGU2MjIzZDVlYmI5YTRjNTM2NzQxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDI0IEBACitUZXN0IHRoYXQgZXZlbnQgcHJvcGFnYXRlcyBhY3Jvc3Mgc2VhbWxlc3MgaWZy
YW1lcy4KKworICBhYm9ydAorCisgIHNlbGVjdAorCisgIGNoYW5nZQorCisgIGNsaWNrCisgICAg
IEBzZWFtbGVzcy1pZnJhbWUgKHRhcmdldDogc2VhbWxlc3MtaWZyYW1lKQorICAgICBAYm9keSAo
dGFyZ2V0OiBzZWFtbGVzcy1pZnJhbWUpCisKKyAgZGJsY2xpY2sKKyAgICAgQHNlYW1sZXNzLWlm
cmFtZSAodGFyZ2V0OiBzZWFtbGVzcy1pZnJhbWUpCisgICAgIEBib2R5ICh0YXJnZXQ6IHNlYW1s
ZXNzLWlmcmFtZSkKKworICByZXNldAorCisgIHJlc2l6ZQorCisgIHNjcm9sbAorCisgIHNlbGVj
dHN0YXJ0CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3Nl
YW1sZXNzLWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2Vh
bWxlc3MtZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNmODMxMmNiYzFmNTFmZmRmOWU3YTJjZjky
MWY1NWM5NzMyZjZhNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVz
L3NlYW1sZXNzL3NlYW1sZXNzLWV2ZW50cy5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8Ym9keSBpZD0nYm9keSc+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitkZWJ1ZygiVGVz
dCB0aGF0IGV2ZW50IHByb3BhZ2F0ZXMgYWNyb3NzIHNlYW1sZXNzIGlmcmFtZXMuIikKKworaWYg
KHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBldmVudHMgPSBbJ2Fib3J0Jywg
J3NlbGVjdCcsICdjaGFuZ2UnLCAnY2xpY2snLCAnZGJsY2xpY2snLCAncmVzZXQnLCAncmVzaXpl
JywgJ3Njcm9sbCcsICdzZWxlY3RzdGFydCddOwordmFyIGV2ZW50UmVjb3JkcyA9IHt9OworCitm
b3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkKKyAgICBkb2N1bWVudC5ib2R5
LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRzW2ldLCByZWNvcmRFdmVudCk7CisKK2Z1bmN0aW9uIGlm
cmFtZUxvYWRlZChpZnJhbWUpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5n
dGg7ICsraSkKKyAgICAgICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRzW2ldLCByZWNv
cmRFdmVudCk7CisgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoJ2ZpcmUnLCAn
KicpOworfQorCit2YXIgbWVzc2FnZVJlY2VpdmVkQ291bnQgPSAwOworCit3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKCsrbWVzc2Fn
ZVJlY2VpdmVkQ291bnQgPT0gMikgIHsKKyAgICAgICAgZHVtcERpc3BhdGNoZWRFdmVudCgpOwor
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKKyAgICB9Cit9LCBmYWxzZSk7CisKK2Z1bmN0aW9uIHJlY29yZEV2ZW50KGV2
ZW50KQoreworICAgIHZhciBldmVudFR5cGUgPSBldmVudC50eXBlCisgICAgaWYgKCFldmVudFJl
Y29yZHNbZXZlbnRUeXBlXSkKKyAgICAgICAgZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0gPSBbXTsK
KyAgICB2YXIgZXZlbnRTdHJpbmcgPSAnJzsKKyAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldCkK
KyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyBAJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuaWQ7Cisg
ICAgaWYgKGV2ZW50LnRhcmdldCkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAodGFyZ2V0OiAn
ICsgZXZlbnQudGFyZ2V0LmlkICsgJyknOworICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0KQor
ICAgICAgICBldmVudFN0cmluZyArPSAnIChyZWxhdGVkOiAnICsgZXZlbnQucmVsYXRlZFRhcmdl
dC5pZCArICcpJzsKKyAgICBpZiAoZXZlbnQuZXZlbnRQaGFzZSA9PSAxKQorICAgICAgICBldmVu
dFN0cmluZyArPSAnKGNhcHR1cmluZyBwaGFzZSknOworICAgIGlmIChldmVudC50YXJnZXQgJiYg
ZXZlbnQuY3VycmVudFRhcmdldCAmJiBldmVudC50YXJnZXQuaWQgPT0gZXZlbnQuY3VycmVudFRh
cmdldC5pZCkKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50LmV2ZW50UGhhc2UiLCAiMiIsIHRydWUp
OworICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdLnB1c2goZXZlbnRTdHJpbmcpOworfQorCitm
dW5jdGlvbiBkdW1wRGlzcGF0Y2hlZEV2ZW50KCkKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGV2ZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgZXZlbnRUeXBlID0gZXZlbnRzW2ld
OworICAgICAgICBkZWJ1ZygnXG4gICcgKyBldmVudFR5cGUpOworICAgICAgICB2YXIgcmVjb3Jk
ID0gZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0gfHwgW107CisgICAgICAgIGZvciAodmFyIGogPSAw
OyBqIDwgcmVjb3JkLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgZGVidWcoJyAgICAnICsgcmVj
b3JkW2pdKQorICAgIH0KK30KKworPC9zY3JpcHQ+Cis8ZGl2IGlkPSJjb250YWluZXIiPgorICAg
IDxpZnJhbWUgaWQ9J3NlYW1sZXNzLWlmcmFtZScgb25sb2FkPSdpZnJhbWVMb2FkZWQodGhpcykn
IHNyYz0ncmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwnIHNlYW1sZXNzPSd0cnVlJz48L2lmcmFt
ZT4KKyAgICA8aWZyYW1lIGlkPSdub24tc2VhbWxlc3MtaWZyYW1lJyBvbmxvYWQ9J2lmcmFtZUxv
YWRlZCh0aGlzKScgc3JjPSdyZXNvdXJjZXMvZmlyZS1ldmVudHMuaHRtbCc+PC9pZnJhbWU+Cis8
L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157682</attachid>
            <date>2012-08-10 02:10:09 -0700</date>
            <delta_ts>2012-08-14 21:21:02 -0700</delta_ts>
            <desc>fix</desc>
            <filename>bug-91290-20120810180941.patch</filename>
            <type>text/plain</type>
            <size>39063</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjFlMWViY2Q0ZWE2NzYz
M2QyYjEwNzk3ODQwOThiOWM2M2I3ZjVmOC4uZThhMjgwZmI1NDlhZmE0MTViMGY2OTE2NTJiZGQz
N2EyNzc1YmM1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAxMi0wOC0wOSAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVu
dCBwcm9wYWdhdGlvbiBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjkwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVudCBwcm9wYWdhdGlv
biBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgQXMgdGhlIGZpcnN0IHN0ZXAsICdj
bGljaycgYW5kICdkYmxjbGljaycgZXZlbnRzIGhhdmUgYmVlbiBzdXBwb3J0ZWQuCisKKyAgICAg
ICAgVG8gc3VwcG9ydCBhbiBldmVudCBkaXNwYXRjaGluZyBhY3Jvc3MgYnJvd3NpbmcgY29udGV4
dCwgSSd2ZQorICAgICAgICBpbnRyb2R1Y2VkIGEgRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdD
b250ZXh0LCB3aG9zZSByb2xlIGlzIHNpbWlsYXIgdG8KKyAgICAgICAgYW4gRXZlbnREaXNwYXRj
aGVyIHByaW9yIHRvIHRoaXMgcGF0Y2guIEJ1dCB0aGUgaW50ZXJuYWwKKyAgICAgICAgc3RydWN0
dXJlIHdhcyBzaWduaWZpY2FudGx5IGNoYW5nZWQgc28gdGhhdCBpdCBjYW4gYmUgbWFuYWdlZCBm
cm9tIG91dHNpZGUuCisKKyAgICAgICAgQW4gRXZlbnREaXNwYXRjaGVyIG5vdyBhY3RzIGFzIGlm
IGl0IHdlcmUgYSBtZXRhIGRpc3BhdGNoZXIgd2hpY2gKKyAgICAgICAgZGVsZWdhdGVzIGV2ZW50
IGRpc3BhdGNoaW5nIHRvIGVhY2ggZGlzcGF0Y2hlciBpbiBlYWNoIGJyb3dzaW5nCisgICAgICAg
IGNvbnRleHQuIEl0IG1hbmFnZXMgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIG9mIGRpc3BhdGNoZXJz
LgorCisgICAgICAgIEFjY29yZGluZyB0byB0aGUgZGlzY3Vzc2lvbiBvZiBidWcgOTEyOTAsIHdo
YXR3ZyBtaWdodCBzcGVjCisgICAgICAgIHdoYXRldmVyIFdlYktpdCBpbXBsZW1lbnRzLiAgU28g
bGV0IG1lIGV4cGxhaW4gaG93IGV2ZW50CisgICAgICAgIGRpc3BhdGNoaW5nIHdvcmtzIGFjcm9z
cyBzZWFtbGVzcyBpZnJhbWVzIGJyaWVmbHkgaGVyZToKKworICAgICAgICAxLiBBbmNlc3RvciBu
b2RlcyBvZiBldmVudCBhcmUgY2FsY3VsYXRlZCBhcyB1c3VhbCwgYnV0IGlmIHRoZQorICAgICAg
ICAgICBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHQgaXMgdGhhdCBvZiBhIHNlYW1sZXNzIGlmcmFt
ZSwgY29udGludWUgdG8KKyAgICAgICAgICAgdHJhdmVyc2luZyBhbmNlc3RvcnMgb2YgdGhlIHBh
cmVudCBicm93c2luZyBjb250ZXh0LgorICAgICAgICAyLiBGb3IgZWFjaCBicm93c2luZyBjb250
ZXh0LCBjbG9uZSB0aGUgZXZlbnQgb2JqZWN0LiBJbiB0aGUgbGF0ZXIKKyAgICAgICAgICAgZXZl
bnQgZGlzcGF0Y2hpbmcsIHVzZSB0aGUgY2xvbmVkIGV2ZW50IG9iamVjdCBpbiBlYWNoIGJyb3dz
aW5nCisgICAgICAgICAgIGNvbnRleHQgc28gdGhhdCB3ZSBjYW4gaXNvbGF0ZSBldmVudCBvYmpl
Y3RzLgorICAgICAgICAzLiBUYXJnZXQgb2YgdGhlIGNsb25lZCBldmVudCBvYmplY3RzIGlzIHJl
dGFyZ2V0ZWQgdG8gaWZyYW1lJ3Mgb3duZXIgZWxlbWVudC4KKyAgICAgICAgNC4gUHJvY2VzcyBj
YXB0dXJpbmcsIHRhcmdldCBhbmQgYnViYmxpbmcgcGhhc2VzIGFzIGlmIHRoZXJlIHdhcworICAg
ICAgICAgICBvbmUgYmlnICdhbmNlc3RvcicgY2hhaW4uICBUaGF0IG1lYW5zIGlmIGFuIGV2ZW50
IGxpc3RlbmVyIGluIGFuCisgICAgICAgICAgIHVwcGVyIGJyb3dzaW5nIGNvbnRleHQgY2FsbHMg
c3RvcFByb3BhZ2F0aW9uKCkgYXQgY2FwdHVyaW5nCisgICAgICAgICAgIHBoYXNlLCBuZXN0ZWQg
YnJvd3NpbmcgY29udGV4dHMgbmV2ZXIgcmVjZWl2ZSBhbiBldmVudC4KKyAgICAgICAgNS4gVW5s
ZXNzIGRlZmF1bHQgaXMgcHJldmVudGVkLCB0cnkgdG8gY2FsbCBkZWZhdWx0IGV2ZW50IGhhbmRs
ZXIKKyAgICAgICAgICAgc3RhcnRpbmcgZnJvbSB0aGUgYm90dG9tIG5vZGUgb2YgYW5jZXN0b3Jz
IHVudGlsIGEgZGVmYXVsdCBpcworICAgICAgICAgICBoYW5kbGVkLgorCisgICAgICAgIEV4YW1w
bGU6ICBTdXBwb3NlIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBIVE1MIGFuZCBuZXN0ZWQgc2VhbWxl
c3MgaWZyYW1lcy4gVGhlcmUgYXJlIHRocmVlIGJyb3dzaW5nIGNvbnRleHRzLgorCisgICAgICAg
IDEpIGRvYy5odG1sOgorICAgICAgICAgICA8QT4KKyAgICAgICAgICAgICAgPEI+CisgICAgICAg
ICAgICAgICAgPGlmcmFtZSBpZD1DIHNlYW1sZXNzIHNyYz0iaWZyYW1lMS5odG1sIj4KKworICAg
ICAgICAyKSBpZnJhbWUxLmh0bWw6CisgICAgICAgICAgIDxEPgorICAgICAgICAgICAgICA8RT4K
KyAgICAgICAgICAgICAgICA8aWZyYW1lIGlkPUYgc2VhbWxlc3Mgc3JjPSJpZnJhbWUyLmh0bWwi
PgorCisgICAgICAgIDMpIGlmcmFtZTIuaHRtbDoKKyAgICAgICAgICAgPEc+CisgICAgICAgICAg
ICAgIDxIPgorCisgICAgICAgIElmIGEgY2xpY2snIGV2ZW50IGlzIGZpcmVkIG9uIG5vZGUgRiwg
d2Ugd2lsbCBkaXNwYXRjaCBldmVudHMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKyAgICAgICAg
ICAxLiBBIChAY2FwdHVyZSkgKHRhcmdldCA9PSBDKQorICAgICAgICAgIDIuIEIgKEBjYXB0dXJl
KSAodGFyZ2V0ID09IEMpCisgICAgICAgICAgMy4gRCAoQGNhcHR1cmUpICh0YXJnZXQgPT0gRikK
KyAgICAgICAgICA0LiBFIChAY2FwdHVyZSkgKHRhcmdldCA9PSBGKQorICAgICAgICAgIDUuIEcg
KEBjYXB0dXJlKSAodGFyZ2V0ID09IEgpCisgICAgICAgICAgNi4gSCAoQHRhcmdldCkgICh0YXJn
ZXQgPT0gSCkKKyAgICAgICAgICA3LiBHIChAYnViYmxlKSAgKHRhcmdldCA9PSBIKQorICAgICAg
ICAgIDguIEYgKEB0YXJnZXQpICAodGFyZ2V0ID09IEYpCisgICAgICAgICAgOS4gRSAoQGJ1YmJs
ZSkgICh0YXJnZXQgPT0gRikKKyAgICAgICAgICA5LiBEIChAYnViYmxlKSAgKHRhcmdldCA9PSBG
KQorICAgICAgICAgMTAuIEMgKEB0YXJnZXQpICAodGFyZ2V0ID09IEMpCisgICAgICAgICAxMS4g
QiAoYnViYmxlKSAgICh0YXJnZXQgPT0gQykKKyAgICAgICAgIDEyLiBBIChidWJibGUpICAgKHRh
cmdldCA9PSBDKQorCisgICAgICAgIFRlc3Q6IGZhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNz
LWV2ZW50cy5odG1sCisKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAg
ICAgKEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dDo6bm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OmV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dDo6c2hvdWxkQ29u
dGludWVUb1BhcmVudERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hl
ckZvckJyb3dzaW5nQ29udGV4dDo6YWRqdXN0UmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OkV2ZW50RGlzcGF0Y2hlckZv
ckJyb3dzaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXJGb3JC
cm93c2luZ0NvbnRleHQ6OmNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycyk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OndpbGxEaXNwYXRjaEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dDo6
ZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRj
aGVyRm9yQnJvd3NpbmdDb250ZXh0OjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdDb250ZXh0OjpkaXNwYXRjaEV2
ZW50QXRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyRm9yQnJvd3Np
bmdDb250ZXh0OjpkaXNwYXRjaEV2ZW50QXRCdWJibGluZyk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZlbnRQb3N0UHJvY2Vz
cyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6
OmRpc3BhdGNoRXZlbnREZWZhdWx0SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERp
c3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OnJlc2V0VGFyZ2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dDo6dG9wRXZlbnRDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OmV2ZW50U2hvdWxkQmVTdG9wcGVkQXRCb3VuZGFyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OmRldGVybWlu
ZURpc3BhdGNoQmVoYXZpb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpF
dmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hT
Y29wZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
U2ltdWxhdGVkQ2xpY2spOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkUHJvcGFnYXRlRXZlbnRB
Y3Jvc3NTZWFtbGVzc0lGcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y2xvbmVFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OnByZXBhcmVFdmVudERpc3BhdGNoZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmZpcmVEaXNwYXRjaGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmZpcmVEaXNwYXRjaGVyc1Bvc3RQ
cm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNo
ZXJzRGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFdmVudERpc3BhdGNoZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpub2RlKToKKwogMjAxMi0wOC0wOSAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFNhbmRib3hpbmcgdmlldyBzb3Vy
Y2UgZG9jdW1lbnRzIGlzIGluZWZmZWN0aXZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNo
ZXIuY3BwCmluZGV4IGUxYTYwZjNkNDBiM2EyOTVmOTdmYTgxZTY5MGZjYWRkNzUyODRjYjQuLjlk
NmY3ZWU2MjFiMDI4MzczNDNiYTk0NDdhZjAxMmNkMzJkMjM1YWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiRXZlbnRD
b250ZXh0LmgiCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaE1lZGlhdG9yLmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKQEAgLTUwLDYgKzUxLDY4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorZW51bSBFdmVudERpc3BhdGNoQmVoYXZpb3IgeworICAgIFJldGFy
Z2V0RXZlbnQsCisgICAgU3RheUluc2lkZVNoYWRvd0RPTQorfTsKKworZW51bSBFdmVudERpc3Bh
dGNoQ29udGludWF0aW9uIHsKKyAgICBDb250aW51ZURpc3BhdGNoaW5nLAorICAgIERvbmVEaXNw
YXRjaGluZworfTsKKworZW51bSBFdmVudEFuY2VzdG9yQ29udGludWF0aW9uIHsKKyAgICBFdmVu
dEFuY2VzdG9yU3RvcCwKKyAgICBFdmVudEFuY2VzdG9yQ29udGludWVUb1BhcmVudAorfTsKKwor
Y2xhc3MgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIgeworcHVibGljOgorICAgIEV2ZW50UmVs
YXRlZFRhcmdldEFkanVzdGVyKFBhc3NSZWZQdHI8Tm9kZT4sIFBhc3NSZWZQdHI8Tm9kZT4gcmVs
YXRlZFRhcmdldCk7CisgICAgdm9pZCBhZGp1c3QoVmVjdG9yPEV2ZW50Q29udGV4dD4mKTsKK3By
aXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPFRyZWVTY29wZSosIEV2ZW50VGFyZ2V0Kj4gUmVs
YXRlZFRhcmdldE1hcDsKKyAgICBFdmVudFRhcmdldCogZmluZFJlbGF0ZWRUYXJnZXQoVHJlZVNj
b3BlKik7CisKKyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworICAgIFJlZlB0cjxOb2RlPiBtX3Jl
bGF0ZWRUYXJnZXQ7CisgICAgUmVsYXRlZFRhcmdldE1hcCBtX3JlbGF0ZWRUYXJnZXRNYXA7Cit9
OworCitjbGFzcyBFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQgeworcHVibGljOgor
ICAgIEV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dChOb2RlKiwgUGFzc1JlZlB0cjxF
dmVudD4pOworICAgIHZvaWQgYWRqdXN0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFy
Z2V0PiBwcnBSZWxhdGVkVGFyZ2V0KTsKKworICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVy
biBtX25vZGUuZ2V0KCk7IH0KKyAgICBjb25zdCBFdmVudCogZXZlbnQoKSBjb25zdCB7IHJldHVy
biBtX2V2ZW50LmdldCgpOyB9CisKKyAgICBib29sIHNob3VsZENvbnRpbnVlVG9QYXJlbnREb2N1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbiA9PSBFdmVu
dEFuY2VzdG9yQ29udGludWVUb1BhcmVudDsgfQorCisgICAgRXZlbnREaXNwYXRjaENvbnRpbnVh
dGlvbiBkaXNwYXRjaEV2ZW50UHJlUHJvY2VzcygpOworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51
YXRpb24gZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKCk7CisgICAgRXZlbnREaXNwYXRjaENvbnRp
bnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRUYXJnZXQoKTsKKyAgICBFdmVudERpc3BhdGNoQ29udGlu
dWF0aW9uIGRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKCk7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50
UG9zdFByb2Nlc3MoKTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnREZWZhdWx0SGFuZGxlcigpOwor
CisgICAgdm9pZCByZXNldFRhcmdldCgpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSB3aWxsRGlzcGF0Y2hFdmVudCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIEV2ZW50RGlz
cGF0Y2hCZWhhdmlvciBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKFNoYWRvd1Jvb3QqLCBFdmVu
dFRhcmdldCopOworICAgIGNvbnN0IEV2ZW50Q29udGV4dCogdG9wRXZlbnRDb250ZXh0KCk7Cisg
ICAgRXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbiBjYWx1Y3VsYXRlRXZlbnRBbmNlc3RvcnMoKTsK
KworICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgUmVmUHRyPEV2ZW50PiBtX2V2ZW50Owor
ICAgIFZlY3RvcjxFdmVudENvbnRleHQ+IG1fYW5jZXN0b3JzOworICAgIEV2ZW50QW5jZXN0b3JD
b250aW51YXRpb24gbV9ldmVudEFuY2VzdG9yQ29udGludWF0aW9uOworICAgIFJlZlB0cjxGcmFt
ZVZpZXc+IG1fdmlldzsKKyAgICBXaW5kb3dFdmVudENvbnRleHQgbV93aW5kb3dFdmVudENvbnRl
eHQ7CisgICAgdm9pZCogbV9wcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdDsKK307CisKIHN0
YXRpYyBIYXNoU2V0PE5vZGUqPiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MgPSAw
OwogCiBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6RXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0
ZXIoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQp
CkBAIC0xMjEsMTMgKzE4NCw2IEBAIEV2ZW50VGFyZ2V0KiBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1
c3Rlcjo6ZmluZFJlbGF0ZWRUYXJnZXQoVHJlZVNjb3BlKiBzY29wZSkKICAgICByZXR1cm4gcmVs
YXRlZFRhcmdldDsKIH0KIAotYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9k
ZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+IG1lZGlhdG9yKQotewot
ICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLQotICAgIEV2ZW50RGlzcGF0
Y2hlciBkaXNwYXRjaGVyKG5vZGUpOwotICAgIHJldHVybiBtZWRpYXRvci0+ZGlzcGF0Y2hFdmVu
dCgmZGlzcGF0Y2hlcik7Ci19CiAKIGlubGluZSBzdGF0aWMgRXZlbnRUYXJnZXQqIGV2ZW50VGFy
Z2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKE5vZGUqIHJlZmVyZW5jZU5vZGUpCiB7CkBAIC0x
NTEsNDAgKzIwNyw3IEBAIGlubGluZSBzdGF0aWMgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0UmVz
cGVjdGluZ1NWR1RhcmdldFJ1bGVzKE5vZGUqIHJlZmVyZW5jZU5vCiAgICAgcmV0dXJuIHJlZmVy
ZW5jZU5vZGU7CiB9CiAKLXZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNjb3BlZEV2ZW50
KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikK
LXsKLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgdGFyZ2V0IGhlcmUgYmVjYXVzZSBpdCBjYW4g
Z28gYXdheSBieSB0aGUgdGltZSB3ZSBhY3R1YWxseSBmaXJlIHRoZSBldmVudC4KLSAgICBtZWRp
YXRvci0+ZXZlbnQoKS0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1
bGVzKG5vZGUpKTsKLSAgICBTY29wZWRFdmVudFF1ZXVlOjppbnN0YW5jZSgpLT5lbnF1ZXVlRXZl
bnREaXNwYXRjaE1lZGlhdG9yKG1lZGlhdG9yKTsKLX0KLQotdm9pZCBFdmVudERpc3BhdGNoZXI6
OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gdW5k
ZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2sp
Ci17Ci0gICAgaWYgKG5vZGUtPmRpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MpCi0gICAgICAgIGdOb2Rlc0Rpc3Bh
dGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gbmV3IEhhc2hTZXQ8Tm9kZSo+OwotICAgIGVsc2UgaWYg
KGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5jb250YWlucyhub2RlKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPmFkZChu
b2RlKTsKLQotICAgIC8vIHNlbmQgbW91c2Vkb3duIGFuZCBtb3VzZXVwIGJlZm9yZSB0aGUgY2xp
Y2ssIGlmIHJlcXVlc3RlZAotICAgIGlmIChzZW5kTW91c2VFdmVudHMpCi0gICAgICAgIEV2ZW50
RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRW
aWV3KCksIHVuZGVybHlpbmdFdmVudCkpOwotICAgIG5vZGUtPnNldEFjdGl2ZSh0cnVlLCBzaG93
UHJlc3NlZExvb2spOwotICAgIGlmIChzZW5kTW91c2VFdmVudHMpCi0gICAgICAgIEV2ZW50RGlz
cGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0Vmlldygp
LCB1bmRlcmx5aW5nRXZlbnQpKTsKLSAgICBub2RlLT5zZXRBY3RpdmUoZmFsc2UpOwotCi0gICAg
Ly8gYWx3YXlzIHNlbmQgY2xpY2sKLSAgICBFdmVudERpc3BhdGNoZXIobm9kZSkuZGlzcGF0Y2hF
dmVudChTaW11bGF0ZWRNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQs
IG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkpOwotCi0g
ICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPnJlbW92ZShub2RlKTsKLX0KLQot
dm9pZCBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50LCBQ
YXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KQordm9pZCBFdmVudERpc3Bh
dGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OmFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxF
dmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCkKIHsKICAgICBpZiAoIXBycFJlbGF0ZWRUYXJn
ZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTE5MywyNiArMjE2LDI5IEBAIHZvaWQgRXZlbnREaXNw
YXRjaGVyOjphZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiBldmVudCwgUGFzc1JlZlB0cjxFdmVu
dFRhcmdldD4KICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbV9ub2RlLmdldCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQpOworICAgIGlmIChtX2Fu
Y2VzdG9ycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKICAgICBFdmVudFJlbGF0ZWRUYXJn
ZXRBZGp1c3RlcihtX25vZGUsIHJlbGF0ZWRUYXJnZXQucmVsZWFzZSgpKS5hZGp1c3QobV9hbmNl
c3RvcnMpOwogfQogCi1FdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcihOb2RlKiBub2Rl
KQorRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdDb250ZXh0OjpFdmVudERpc3BhdGNoZXJGb3JC
cm93c2luZ0NvbnRleHQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAg
OiBtX25vZGUobm9kZSkKLSAgICAsIG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQoZmFsc2UpCi0jaWZu
ZGVmIE5ERUJVRwotICAgICwgbV9ldmVudERpc3BhdGNoZWQoZmFsc2UpCi0jZW5kaWYKKyAgICAs
IG1fZXZlbnQoZXZlbnQpCisgICAgLCBtX2FuY2VzdG9ycygpCisgICAgLCBtX2V2ZW50QW5jZXN0
b3JDb250aW51YXRpb24oY2FsdWN1bGF0ZUV2ZW50QW5jZXN0b3JzKCkpCisgICAgLCBtX3ZpZXco
bV9ub2RlLT5kb2N1bWVudCgpLT52aWV3KCkpCisgICAgLCBtX3dpbmRvd0V2ZW50Q29udGV4dCht
X2V2ZW50LmdldCgpLCBtX25vZGUuZ2V0KCksIHRvcEV2ZW50Q29udGV4dCgpKQorICAgICwgbV9w
cmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCgwKQogewotICAgIEFTU0VSVChub2RlKTsKLSAg
ICBtX3ZpZXcgPSBub2RlLT5kb2N1bWVudCgpLT52aWV3KCk7CisgICAgQVNTRVJUKG1fbm9kZSk7
CisgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOworICAgIEFTU0VSVCghbV9l
dmVudC0+dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBjb2RlIGNhbiBjcmVhdGUgYW4g
ZXZlbnQgd2l0aCBhbiBlbXB0eSBuYW1lLCBidXQgbm90IG51bGwuCisgICAgbV9ldmVudC0+c2V0
VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkp
OwogfQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJlRXZlbnRBbmNlc3RvcnMoRXZlbnQq
IGV2ZW50KQorRXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXJGb3JCcm93
c2luZ0NvbnRleHQ6OmNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycygpCiB7Ci0gICAgaWYgKG1fYW5j
ZXN0b3JzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2FuY2VzdG9yc0luaXRp
YWxpemVkID0gdHJ1ZTsKKyAgICBBU1NFUlQobV9hbmNlc3RvcnMuaXNFbXB0eSgpKTsKICAgICBi
b29sIGluRG9jdW1lbnQgPSBtX25vZGUtPmluRG9jdW1lbnQoKTsKICAgICBib29sIGlzU1ZHRWxl
bWVudCA9IG1fbm9kZS0+aXNTVkdFbGVtZW50KCk7CiAgICAgVmVjdG9yPEV2ZW50VGFyZ2V0Kj4g
dGFyZ2V0U3RhY2s7CkBAIC0yMjUsMTQ1ICsyNTEsMTI2IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVy
OjplbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCogZXZlbnQpCiAgICAgICAgICAgICB0YXJnZXRT
dGFjay5hcHBlbmQodGFyZ2V0U3RhY2subGFzdCgpKTsKICAgICAgICAgbV9hbmNlc3RvcnMuYXBw
ZW5kKEV2ZW50Q29udGV4dChub2RlLCBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxl
cyhub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSk7CiAgICAgICAgIGlmICghaW5Eb2N1bWVudCkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBFdmVudEFuY2VzdG9yU3Rv
cDsKICAgICAgICAgbGFzdCA9IG5vZGU7CiAgICAgICAgIGlmICghbm9kZS0+aXNTaGFkb3dSb290
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGRldGVybWluZURpc3BhdGNo
QmVoYXZpb3IoZXZlbnQsIHRvU2hhZG93Um9vdChub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSA9
PSBTdGF5SW5zaWRlU2hhZG93RE9NKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcih0b1NoYWRvd1Jvb3Qobm9kZSksIHRhcmdldFN0YWNr
Lmxhc3QoKSkgPT0gU3RheUluc2lkZVNoYWRvd0RPTSkKKyAgICAgICAgICAgIHJldHVybiBFdmVu
dEFuY2VzdG9yU3RvcDsKICAgICAgICAgaWYgKCFpc1NWR0VsZW1lbnQpIHsKICAgICAgICAgICAg
IEFTU0VSVCghdGFyZ2V0U3RhY2suaXNFbXB0eSgpKTsKICAgICAgICAgICAgIHRhcmdldFN0YWNr
LnJlbW92ZUxhc3QoKTsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gRXZlbnRBbmNlc3Rv
ckNvbnRpbnVlVG9QYXJlbnQ7CiB9CiAKLWJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQorSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIEV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dDo6d2lsbERpc3BhdGNoRXZl
bnQoKSBjb25zdAogewotI2lmbmRlZiBOREVCVUcKLSAgICBBU1NFUlQoIW1fZXZlbnREaXNwYXRj
aGVkKTsKLSAgICBtX2V2ZW50RGlzcGF0Y2hlZCA9IHRydWU7Ci0jZW5kaWYKLSAgICBSZWZQdHI8
RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7Ci0gICAgQ2hpbGROb2Rlc0xhenlTbmFwc2hvdDo6dGFr
ZUNoaWxkTm9kZXNMYXp5U25hcHNob3QoKTsKLQotICAgIGV2ZW50LT5zZXRUYXJnZXQoZXZlbnRU
YXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9ub2RlLmdldCgpKSk7Ci0gICAgQVNTRVJU
KCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkp
OwotICAgIEFTU0VSVCghZXZlbnQtPnR5cGUoKS5pc051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29k
ZSBjYW4gY3JlYXRlIGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZSwgYnV0IG5vdCBudWxsLgot
ICAgIGVuc3VyZUV2ZW50QW5jZXN0b3JzKGV2ZW50LmdldCgpKTsKLSAgICBXaW5kb3dFdmVudENv
bnRleHQgd2luZG93RXZlbnRDb250ZXh0KGV2ZW50LmdldCgpLCBtX25vZGUuZ2V0KCksIHRvcEV2
ZW50Q29udGV4dCgpKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2ll
ID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudChtX25vZGUtPmRv
Y3VtZW50KCksICpldmVudCwgd2luZG93RXZlbnRDb250ZXh0LndpbmRvdygpLCBtX25vZGUuZ2V0
KCksIG1fYW5jZXN0b3JzKTsKLQotICAgIHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVz
dWx0OwotICAgIGlmIChkaXNwYXRjaEV2ZW50UHJlUHJvY2VzcyhldmVudCwgcHJlRGlzcGF0Y2hF
dmVudEhhbmRsZXJSZXN1bHQpID09IENvbnRpbnVlRGlzcGF0Y2hpbmcpCi0gICAgICAgIGlmIChk
aXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoZXZlbnQsIHdpbmRvd0V2ZW50Q29udGV4dCkgPT0gQ29u
dGludWVEaXNwYXRjaGluZykKLSAgICAgICAgICAgIGlmIChkaXNwYXRjaEV2ZW50QXRUYXJnZXQo
ZXZlbnQpID09IENvbnRpbnVlRGlzcGF0Y2hpbmcpCi0gICAgICAgICAgICAgICAgZGlzcGF0Y2hF
dmVudEF0QnViYmxpbmcoZXZlbnQsIHdpbmRvd0V2ZW50Q29udGV4dCk7Ci0gICAgZGlzcGF0Y2hF
dmVudFBvc3RQcm9jZXNzKGV2ZW50LCBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7Ci0K
LSAgICAvLyBFbnN1cmUgdGhhdCBhZnRlciBldmVudCBkaXNwYXRjaCwgdGhlIGV2ZW50J3MgdGFy
Z2V0IG9iamVjdCBpcyB0aGUKLSAgICAvLyBvdXRlcm1vc3Qgc2hhZG93IERPTSBib3VuZGFyeS4K
LSAgICBldmVudC0+c2V0VGFyZ2V0KHdpbmRvd0V2ZW50Q29udGV4dC50YXJnZXQoKSk7Ci0gICAg
ZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWREaXNwYXRjaEV2ZW50KGNvb2tpZSk7Ci0KLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0
UHJldmVudGVkKCk7CisgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERp
c3BhdGNoRXZlbnQobV9ub2RlLT5kb2N1bWVudCgpLCAqbV9ldmVudCwgbV93aW5kb3dFdmVudENv
bnRleHQud2luZG93KCksIG1fbm9kZS5nZXQoKSwgbV9hbmNlc3RvcnMpOwogfQogCi1pbmxpbmUg
RXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRQ
cmVQcm9jZXNzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCB2b2lkKiYgcHJlRGlzcGF0Y2hFdmVu
dEhhbmRsZXJSZXN1bHQpCitpbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERp
c3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZlbnRQcmVQcm9jZXNzKCkKIHsK
ICAgICAvLyBHaXZlIHRoZSB0YXJnZXQgbm9kZSBhIGNoYW5jZSB0byBkbyBzb21lIHdvcmsgYmVm
b3JlIERPTSBldmVudCBoYW5kbGVycyBnZXQgYSBjcmFjay4KLSAgICBwcmVEaXNwYXRjaEV2ZW50
SGFuZGxlclJlc3VsdCA9IG1fbm9kZS0+cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZlbnQuZ2V0
KCkpOwotICAgIHJldHVybiAobV9hbmNlc3RvcnMuaXNFbXB0eSgpIHx8IGV2ZW50LT5wcm9wYWdh
dGlvblN0b3BwZWQoKSkgPyBEb25lRGlzcGF0Y2hpbmcgOiBDb250aW51ZURpc3BhdGNoaW5nOwor
ICAgIG1fcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQgPSBtX25vZGUtPnByZURpc3BhdGNo
RXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCkpOworICAgIHJldHVybiAobV9hbmNlc3RvcnMuaXNF
bXB0eSgpIHx8IG1fZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKSA/IERvbmVEaXNwYXRjaGlu
ZyA6IENvbnRpbnVlRGlzcGF0Y2hpbmc7CiB9CiAKLWlubGluZSBFdmVudERpc3BhdGNoQ29udGlu
dWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50LCBXaW5kb3dFdmVudENvbnRleHQmIHdpbmRvd0V2ZW50Q29udGV4dCkK
K2lubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlckZvckJyb3dz
aW5nQ29udGV4dDo6ZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKCkKIHsKICAgICAvLyBUcmlnZ2Vy
IGNhcHR1cmluZyBldmVudCBoYW5kbGVycywgc3RhcnRpbmcgYXQgdGhlIHRvcCBhbmQgd29ya2lu
ZyBvdXIgd2F5IGRvd24uCi0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklO
R19QSEFTRSk7CisgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BI
QVNFKTsKIAotICAgIGlmICh3aW5kb3dFdmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZl
bnQuZ2V0KCkpICYmIGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICBpZiAobV93aW5k
b3dFdmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMobV9ldmVudC5nZXQoKSkgJiYgbV9ldmVu
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgIHJldHVybiBEb25lRGlzcGF0Y2hpbmc7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gbV9hbmNlc3RvcnMuc2l6ZSgpIC0gMTsgaSA+IDA7IC0t
aSkgewogICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4dCA9IG1fYW5jZXN0
b3JzW2ldOwogICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJn
ZXQoKSkgewotICAgICAgICAgICAgaWYgKGV2ZW50LT5idWJibGVzKCkpCisgICAgICAgICAgICBp
ZiAobV9ldmVudC0+YnViYmxlcygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgICAgICAg
ICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwogICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhB
U0UpOwotICAgICAgICBldmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkp
OwotICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICAgICAg
bV9ldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKKyAgICAgICAg
ZXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpOworICAgICAgICBp
ZiAobV9ldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gRG9u
ZURpc3BhdGNoaW5nOwogICAgIH0KIAogICAgIHJldHVybiBDb250aW51ZURpc3BhdGNoaW5nOwog
fQogCi1pbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoRXZlbnRBdFRhcmdldChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2lubGluZSBFdmVu
dERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5nQ29udGV4dDo6
ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KCkKIHsKLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVu
dDo6QVRfVEFSR0VUKTsKLSAgICBtX2FuY2VzdG9yc1swXS5oYW5kbGVMb2NhbEV2ZW50cyhldmVu
dC5nZXQoKSk7Ci0gICAgcmV0dXJuIGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSA/IERvbmVE
aXNwYXRjaGluZyA6IENvbnRpbnVlRGlzcGF0Y2hpbmc7CisgICAgbV9ldmVudC0+c2V0RXZlbnRQ
aGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICBtX2FuY2VzdG9yc1swXS5oYW5kbGVMb2NhbEV2
ZW50cyhtX2V2ZW50LmdldCgpKTsKKyAgICByZXR1cm4gbV9ldmVudC0+cHJvcGFnYXRpb25TdG9w
cGVkKCkgPyBEb25lRGlzcGF0Y2hpbmcgOiBDb250aW51ZURpc3BhdGNoaW5nOwogfQogCi1pbmxp
bmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZl
bnRBdEJ1YmJsaW5nKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBXaW5kb3dFdmVudENvbnRleHQm
IHdpbmRvd0NvbnRleHQpCitpbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERp
c3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ6OmRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKCkKIHsK
LSAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSAmJiAhZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKSB7Cisg
ICAgaWYgKG1fZXZlbnQtPmJ1YmJsZXMoKSAmJiAhbV9ldmVudC0+Y2FuY2VsQnViYmxlKCkpIHsK
ICAgICAgICAgLy8gVHJpZ2dlciBidWJibGluZyBldmVudCBoYW5kbGVycywgc3RhcnRpbmcgYXQg
dGhlIGJvdHRvbSBhbmQgd29ya2luZyBvdXIgd2F5IHVwLgotICAgICAgICBldmVudC0+c2V0RXZl
bnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOworICAgICAgICBtX2V2ZW50LT5zZXRFdmVu
dFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CiAKICAgICAgICAgc2l6ZV90IHNpemUgPSBt
X2FuY2VzdG9ycy5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsg
KytpKSB7CiAgICAgICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4dCA9IG1f
YW5jZXN0b3JzW2ldOwogICAgICAgICAgICAgaWYgKGV2ZW50Q29udGV4dC5jdXJyZW50VGFyZ2V0
U2FtZUFzVGFyZ2V0KCkpCi0gICAgICAgICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZl
bnQ6OkFUX1RBUkdFVCk7CisgICAgICAgICAgICAgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZShF
dmVudDo6QVRfVEFSR0VUKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBldmVu
dC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOwotICAgICAgICAgICAgZXZl
bnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKLSAgICAgICAgICAgIGlm
IChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQor
ICAgICAgICAgICAgICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BI
QVNFKTsKKyAgICAgICAgICAgIGV2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50
LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChtX2V2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8
fCBtX2V2ZW50LT5jYW5jZWxCdWJibGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gRG9uZURp
c3BhdGNoaW5nOwogICAgICAgICB9Ci0gICAgICAgIHdpbmRvd0NvbnRleHQuaGFuZGxlTG9jYWxF
dmVudHMoZXZlbnQuZ2V0KCkpOworICAgICAgICBtX3dpbmRvd0V2ZW50Q29udGV4dC5oYW5kbGVM
b2NhbEV2ZW50cyhtX2V2ZW50LmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJuIENvbnRpbnVlRGlz
cGF0Y2hpbmc7CiB9CiAKLWlubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVu
dFBvc3RQcm9jZXNzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCB2b2lkKiBwcmVEaXNwYXRjaEV2
ZW50SGFuZGxlclJlc3VsdCkKK2lubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlckZvckJyb3dzaW5n
Q29udGV4dDo6ZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKCkKIHsKLSAgICBldmVudC0+c2V0VGFy
Z2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOwot
ICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOwotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNl
KDApOwotCisgICAgbV9ldmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1Rh
cmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOworICAgIG1fZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQo
MCk7CisgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZSgwKTsKICAgICAvLyBQYXNzIHRoZSBkYXRh
IGZyb20gdGhlIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyIHRvIHRoZSBwb3N0RGlzcGF0Y2hFdmVu
dEhhbmRsZXIuCi0gICAgbV9ub2RlLT5wb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZlbnQuZ2V0
KCksIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KTsKKyAgICBtX25vZGUtPnBvc3REaXNw
YXRjaEV2ZW50SGFuZGxlcihtX2V2ZW50LmdldCgpLCBtX3ByZURpc3BhdGNoRXZlbnRIYW5kbGVy
UmVzdWx0KTsKK30KIAoraW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdDb250
ZXh0OjpkaXNwYXRjaEV2ZW50RGVmYXVsdEhhbmRsZXIoKQorewogICAgIC8vIENhbGwgZGVmYXVs
dCBldmVudCBoYW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUgYSBjb25jZXB0IG9mIHBy
ZXZlbnRpbmcKICAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0YWlsIG9mIHdoaWNoIGhh
bmRsZXJzIGFyZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKICAgICAvLyBpbXBsZW1lbnRhdGlvbiBk
ZXRhaWwgYW5kIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgaWYgKCFldmVudC0+ZGVmYXVsdFBy
ZXZlbnRlZCgpICYmICFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgeworICAgIGlmICghbV9ldmVu
dC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFtX2V2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKSB7CiAg
ICAgICAgIC8vIE5vbi1idWJibGluZyBldmVudHMgY2FsbCBvbmx5IG9uZSBkZWZhdWx0IGV2ZW50
IGhhbmRsZXIsIHRoZSBvbmUgZm9yIHRoZSB0YXJnZXQuCi0gICAgICAgIG1fbm9kZS0+ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudC5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXZlbnQtPmRlZmF1
bHRQcmV2ZW50ZWQoKSk7Ci0gICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAg
ICAgICAgbV9ub2RlLT5kZWZhdWx0RXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCkpOworICAgICAg
ICBBU1NFUlQoIW1fZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSk7CisgICAgICAgIGlmIChtX2V2
ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBG
b3IgYnViYmxpbmcgZXZlbnRzLCBjYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMgb24gdGhlIHNh
bWUgdGFyZ2V0cyBpbiB0aGUKICAgICAgICAgLy8gc2FtZSBvcmRlciBhcyB0aGUgYnViYmxpbmcg
cGhhc2UuCi0gICAgICAgIGlmIChldmVudC0+YnViYmxlcygpKSB7CisgICAgICAgIGlmIChtX2V2
ZW50LT5idWJibGVzKCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbV9hbmNlc3RvcnMu
c2l6ZSgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBtX2FuY2VzdG9yc1tpXS5ub2RlKCktPmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghZXZlbnQtPmRlZmF1bHRQ
cmV2ZW50ZWQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
KQorICAgICAgICAgICAgICAgIG1fYW5jZXN0b3JzW2ldLm5vZGUoKS0+ZGVmYXVsdEV2ZW50SGFu
ZGxlcihtX2V2ZW50LmdldCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fZXZlbnQtPmRl
ZmF1bHRQcmV2ZW50ZWQoKSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZXZlbnQtPmRlZmF1bHRI
YW5kbGVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KIH0KIAotY29uc3QgRXZlbnRDb250ZXh0KiBFdmVudERpc3BhdGNoZXI6
OnRvcEV2ZW50Q29udGV4dCgpCitpbmxpbmUgdm9pZCBFdmVudERpc3BhdGNoZXJGb3JCcm93c2lu
Z0NvbnRleHQ6OnJlc2V0VGFyZ2V0KCkKK3sKKyAgICBtX2V2ZW50LT5zZXRUYXJnZXQobV93aW5k
b3dFdmVudENvbnRleHQudGFyZ2V0KCkpOworICAgIG1fZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQo
MCk7Cit9CisKK2lubGluZSBjb25zdCBFdmVudENvbnRleHQqIEV2ZW50RGlzcGF0Y2hlckZvckJy
b3dzaW5nQ29udGV4dDo6dG9wRXZlbnRDb250ZXh0KCkKIHsKICAgICByZXR1cm4gbV9hbmNlc3Rv
cnMuaXNFbXB0eSgpID8gMCA6ICZtX2FuY2VzdG9ycy5sYXN0KCk7CiB9CkBAIC0zNzMsNyArMzgw
LDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpblRoZVNhbWVTY29wZShTaGFkb3dSb290KiBzaGFk
b3dSb290LCBFdmVudFRhcmdldCogdGFyZ2V0KQogICAgIHJldHVybiB0YXJnZXQtPnRvTm9kZSgp
ICYmIHRhcmdldC0+dG9Ob2RlKCktPnRyZWVTY29wZSgpLT5yb290Tm9kZSgpID09IHNoYWRvd1Jv
b3Q7CiB9CiAKLUV2ZW50RGlzcGF0Y2hCZWhhdmlvciBFdmVudERpc3BhdGNoZXI6OmRldGVybWlu
ZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqIGV2ZW50LCBTaGFkb3dSb290KiBzaGFkb3dSb290LCBF
dmVudFRhcmdldCogdGFyZ2V0KQoraW5saW5lIHN0YXRpYyBib29sIGV2ZW50U2hvdWxkQmVTdG9w
cGVkQXRCb3VuZGFyeShFdmVudCogZXZlbnQpCit7CisgICAgLy8gV2ViS2l0IG5ldmVyIGFsbG93
ZWQgc2VsZWN0c3RhcnQgZXZlbnQgdG8gY3Jvc3MgdGhlIHRoZSBzaGFkb3cgRE9NIGJvdW5kYXJ5
LgorICAgIC8vIENoYW5naW5nIHRoaXMgYnJlYWtzIGV4aXN0aW5nIHNpdGVzLgorICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIxOTUgZm9yIGRldGFp
bHMuCisgICAgY29uc3QgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7Cisg
ICAgcmV0dXJuIGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudAorICAgICAgICAg
ICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudAorICAgICAgICAgICAg
fHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50CisgICAgICAgICAgICB8fCBl
dmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50CisgICAgICAgICAgICB8fCBldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50CisgICAgICAgICAgICB8fCBldmVudFR5
cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50CisgICAgICAgICAgICB8fCBldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQ7Cit9CisKK2lubGluZSBFdmVudERpc3Bh
dGNoQmVoYXZpb3IgRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdDb250ZXh0OjpkZXRlcm1pbmVE
aXNwYXRjaEJlaGF2aW9yKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0KiB0YXJn
ZXQpCiB7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBFTkFCTEUoVklERU8pCiAgICAg
Ly8gVmlkZW8tb25seSBmdWxsIHNjcmVlbiBpcyBhIG1vZGUgd2hlcmUgd2UgdXNlIHRoZSBzaGFk
b3cgRE9NIGFzIGFuIGltcGxlbWVudGF0aW9uCkBAIC0zODgsMjEgKzQxMCwxODUgQEAgRXZlbnRE
aXNwYXRjaEJlaGF2aW9yIEV2ZW50RGlzcGF0Y2hlcjo6ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlv
cihFdmVudCogZXZlbnQsIFMKICAgICBVTlVTRURfUEFSQU0oc2hhZG93Um9vdCk7CiAjZW5kaWYK
IAotICAgIC8vIFdlYktpdCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0YXJ0IGV2ZW50IHRvIGNyb3Nz
IHRoZSB0aGUgc2hhZG93IERPTSBib3VuZGFyeS4KLSAgICAvLyBDaGFuZ2luZyB0aGlzIGJyZWFr
cyBleGlzdGluZyBzaXRlcy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUyMTk1IGZvciBkZXRhaWxzLgotICAgIGNvbnN0IEF0b21pY1N0cmluZyBl
dmVudFR5cGUgPSBldmVudC0+dHlwZSgpOwotICAgIGlmIChpblRoZVNhbWVTY29wZShzaGFkb3dS
b290LCB0YXJnZXQpCi0gICAgICAgICYmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFib3J0
RXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZl
bnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAot
ICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudAotICAg
ICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudAotICAgICAg
ICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudAotICAgICAgICAg
ICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50KSkKKyAgICBp
ZiAoaW5UaGVTYW1lU2NvcGUoc2hhZG93Um9vdCwgdGFyZ2V0KSAmJiBldmVudFNob3VsZEJlU3Rv
cHBlZEF0Qm91bmRhcnkobV9ldmVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBTdGF5SW5zaWRl
U2hhZG93RE9NOwotCiAgICAgcmV0dXJuIFJldGFyZ2V0RXZlbnQ7CiB9CiAKK0V2ZW50RGlzcGF0
Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCisgICAgOiBtX25vZGUobm9kZSkKKyNp
Zm5kZWYgTkRFQlVHCisgICAgLCBtX2V2ZW50RGlzcGF0Y2hlZChmYWxzZSkKKyNlbmRpZgorewor
ICAgIEFTU0VSVChub2RlKTsKK30KKworYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZl
bnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+IG1lZGlhdG9y
KQoreworICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKKworICAgIEV2ZW50
RGlzcGF0Y2hlciBkaXNwYXRjaGVyKG5vZGUpOworICAgIHJldHVybiBtZWRpYXRvci0+ZGlzcGF0
Y2hFdmVudCgmZGlzcGF0Y2hlcik7Cit9CisKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aFNjb3BlZEV2ZW50KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9y
PiBtZWRpYXRvcikKK3sKKyAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgdGFyZ2V0IGhlcmUgYmVj
YXVzZSBpdCBjYW4gZ28gYXdheSBieSB0aGUgdGltZSB3ZSBhY3R1YWxseSBmaXJlIHRoZSBldmVu
dC4KKyAgICBtZWRpYXRvci0+ZXZlbnQoKS0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGlu
Z1NWR1RhcmdldFJ1bGVzKG5vZGUpKTsKKyAgICBTY29wZWRFdmVudFF1ZXVlOjppbnN0YW5jZSgp
LT5lbnF1ZXVlRXZlbnREaXNwYXRjaE1lZGlhdG9yKG1lZGlhdG9yKTsKK30KKwordm9pZCBFdmVu
dERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSogbm9kZSwgUGFzc1JlZlB0
cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93
UHJlc3NlZExvb2spCit7CisgICAgaWYgKG5vZGUtPmRpc2FibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MpCisgICAgICAg
IGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gbmV3IEhhc2hTZXQ8Tm9kZSo+Owor
ICAgIGVsc2UgaWYgKGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5jb250YWlucyhu
b2RlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRD
bGlja3MtPmFkZChub2RlKTsKKworICAgIC8vIHNlbmQgbW91c2Vkb3duIGFuZCBtb3VzZXVwIGJl
Zm9yZSB0aGUgY2xpY2ssIGlmIHJlcXVlc3RlZAorICAgIGlmIChzZW5kTW91c2VFdmVudHMpCisg
ICAgICAgIEV2ZW50RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNl
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIG5vZGUtPmRvY3VtZW50
KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkpOworICAgIG5vZGUtPnNldEFjdGl2
ZSh0cnVlLCBzaG93UHJlc3NlZExvb2spOworICAgIGlmIChzZW5kTW91c2VFdmVudHMpCisgICAg
ICAgIEV2ZW50RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5k
ZWZhdWx0VmlldygpLCB1bmRlcmx5aW5nRXZlbnQpKTsKKyAgICBub2RlLT5zZXRBY3RpdmUoZmFs
c2UpOworCisgICAgLy8gYWx3YXlzIHNlbmQgY2xpY2sKKyAgICBFdmVudERpc3BhdGNoZXIobm9k
ZSkuZGlzcGF0Y2hFdmVudChTaW11bGF0ZWRNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmNsaWNrRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdF
dmVudCkpOworCisgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPnJlbW92ZShu
b2RlKTsKK30KKworaW5saW5lIHN0YXRpYyBib29sIHNob3VsZFByb3BhZ2F0ZUV2ZW50QWNyb3Nz
U2VhbWxlc3NJRnJhbWVzKEV2ZW50KiBldmVudCkKK3sKKyAgICBjb25zdCBBdG9taWNTdHJpbmcg
ZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBtb3JlIGV2
ZW50cy4KKyAgICByZXR1cm4gZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50IHx8
IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudDsKK30KKworaW5saW5lIHN0
YXRpYyBQYXNzUmVmUHRyPEV2ZW50PiBjbG9uZUV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAgICAv
LyBGSVhNRTogU3VwcG9ydCBjbG9uaW5nIGEgZXZlbnQgZm9yIGVhY2ggc3ViY2xhc3Mgb2YgRXZl
bnQuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNjc4
CisgICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkgeworICAgICAgICBNb3VzZUV2ZW50KiBt
b3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50KGV2ZW50KTsKKyAgICAgICAgUmVmUHRyPE1vdXNlRXZl
bnQ+IGNsb25lZE1vdXNlRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUoKTsKKyAgICAgICAgLy8g
RG9uJ3QgY29weSBBYnN0cmF0VmlldyBub3IgcmVsYXRlZFRhcmdldC4KKyAgICAgICAgY2xvbmVk
TW91c2VFdmVudC0+aW5pdE1vdXNlRXZlbnQobW91c2VFdmVudC0+dHlwZSgpLCBtb3VzZUV2ZW50
LT5idWJibGVzKCksIG1vdXNlRXZlbnQtPmNhbmNlbGFibGUoKSwgMCwKKyAgICAgICAgICAgIG1v
dXNlRXZlbnQtPmRldGFpbCgpLCBtb3VzZUV2ZW50LT5zY3JlZW5YKCksIG1vdXNlRXZlbnQtPnNj
cmVlblkoKSwKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGp1c3QgY2xpZW50WCBhbmQgY2xpZW50
WS4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MzY5NgorICAgICAgICAgICAgMCwgMCwKKyAgICAgICAgICAgIG1vdXNlRXZlbnQtPmN0cmxL
ZXkoKSwgbW91c2VFdmVudC0+YWx0S2V5KCksIG1vdXNlRXZlbnQtPnNoaWZ0S2V5KCksIG1vdXNl
RXZlbnQtPm1ldGFLZXkoKSwKKyAgICAgICAgICAgIG1vdXNlRXZlbnQtPmJ1dHRvbigpLAorICAg
ICAgICAgICAgLy8gTnVsbGlmaWVzIHJlbGF0ZWRUYXJnZXQgc2luY2Ugd2Ugc3VwcG9ydCBvbmx5
ICdjbGljaycgYW5kICdkYmxjbGljaycgZXZlbnQgc28gZmFyLgorICAgICAgICAgICAgMCk7Cisg
ICAgICAgIHJldHVybiBjbG9uZWRNb3VzZUV2ZW50LnJlbGVhc2UoKTsKKyAgICB9CisgICAgcmV0
dXJuIEV2ZW50OjpjcmVhdGUoZXZlbnQtPnR5cGUoKSwgZXZlbnQtPmJ1YmJsZXMoKSwgZXZlbnQt
PmNhbmNlbGFibGUoKSk7Cit9CisKK2lubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6cHJlcGFy
ZUV2ZW50RGlzcGF0Y2hlcnMoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCit7CisgICAgQVNT
RVJUKG1fZGlzcGF0Y2hlcnMuaXNFbXB0eSgpKTsKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0g
cHJwRXZlbnQ7CisgICAgTm9kZSogbm9kZSA9IG1fbm9kZS5nZXQoKTsKKyAgICBib29sIHByb3Bh
Z2F0ZUV2ZW50QWNyb3NzU2VhbWxlc3NJRnJhbWVzID0gc2hvdWxkUHJvcGFnYXRlRXZlbnRBY3Jv
c3NTZWFtbGVzc0lGcmFtZXMoZXZlbnQuZ2V0KCkpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgIG1fZGlzcGF0Y2hlcnMuYXBwZW5kKGFkb3B0UHRyKG5ldyBFdmVudERpc3BhdGNoZXJGb3JC
cm93c2luZ0NvbnRleHQobm9kZSwgZXZlbnQpKSk7CisgICAgICAgIGlmICghbV9kaXNwYXRjaGVy
cy5sYXN0KCktPnNob3VsZENvbnRpbnVlVG9QYXJlbnREb2N1bWVudCgpIHx8ICFwcm9wYWdhdGVF
dmVudEFjcm9zc1NlYW1sZXNzSUZyYW1lcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
SFRNTElGcmFtZUVsZW1lbnQqIHBhcmVudElGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPnNlYW1s
ZXNzUGFyZW50SUZyYW1lKCk7CisgICAgICAgIGlmICghcGFyZW50SUZyYW1lKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBub2RlID0gcGFyZW50SUZyYW1lOworICAgICAgICBldmVudCA9
IGNsb25lRXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBFdmVudERpc3BhdGNo
ZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQsIFBhc3NS
ZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCit7CisgICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IHBycEV2ZW50OworICAgIGlmIChtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoZXZlbnQpOworICAgIEFTU0VSVCghbV9kaXNw
YXRjaGVycy5pc0VtcHR5KCkpOworICAgIG1fZGlzcGF0Y2hlcnMubGFzdCgpLT5hZGp1c3RSZWxh
dGVkVGFyZ2V0KHBycFJlbGF0ZWRUYXJnZXQpOworfQorCitib29sIEV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK3sKKyNpZm5kZWYgTkRF
QlVHCisgICAgQVNTRVJUKCFtX2V2ZW50RGlzcGF0Y2hlZCk7CisgICAgbV9ldmVudERpc3BhdGNo
ZWQgPSB0cnVlOworI2VuZGlmCisgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50Owor
ICAgIGlmIChtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcHJlcGFyZUV2ZW50RGlz
cGF0Y2hlcnMoZXZlbnQpOworICAgIEFTU0VSVCghbV9kaXNwYXRjaGVycy5pc0VtcHR5KCkpOwor
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBtX2Rpc3BhdGNoZXJz
WzBdLT53aWxsRGlzcGF0Y2hFdmVudCgpOworCisgICAgZmlyZURpc3BhdGNoZXJzKCk7CisgICAg
Ym9vbCBkZWZhdWx0UHJldmVudGVkID0gZmlyZURpc3BhdGNoZXJzRGVmYXVsdEV2ZW50SGFuZGxl
cigpOworCisgICAgLy8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQgZGlzcGF0Y2gsIHRoZSBldmVu
dCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCisgICAgLy8gb3V0ZXJtb3N0IHNoYWRvdyBET00gYm91
bmRhcnkuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Rpc3BhdGNoZXJzLnNpemUoKTsg
KytpKQorICAgICAgICBtX2Rpc3BhdGNoZXJzW2ldLT5yZXNldFRhcmdldCgpOworCisgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50KGNvb2tpZSk7CisgICAgcmV0
dXJuICFkZWZhdWx0UHJldmVudGVkOworfQorCitpbmxpbmUgdm9pZCBFdmVudERpc3BhdGNoZXI6
OmZpcmVEaXNwYXRjaGVycygpCit7CisgICAgQVNTRVJUKCFtX2Rpc3BhdGNoZXJzLmlzRW1wdHko
KSk7CisgICAgc2l6ZV90IHNpemUgPSBtX2Rpc3BhdGNoZXJzLnNpemUoKTsKKyAgICBmb3IgKGlu
dCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChtX2Rpc3BhdGNoZXJz
W2ldLT5kaXNwYXRjaEV2ZW50UHJlUHJvY2VzcygpID09IERvbmVEaXNwYXRjaGluZworICAgICAg
ICAgICAgICAgIHx8IG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRBdENhcHR1cmluZygp
ID09IERvbmVEaXNwYXRjaGluZykgeworICAgICAgICAgICAgZmlyZURpc3BhdGNoZXJzUG9zdFBy
b2Nlc3MoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZGlzcGF0Y2hl
cnNbaV0tPmRpc3BhdGNoRXZlbnRBdFRhcmdldCgpID09IERvbmVEaXNwYXRjaGluZworICAgICAg
ICAgICAgICAgIHx8IG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKCkg
PT0gRG9uZURpc3BhdGNoaW5nKSB7CisgICAgICAgICAgICBmaXJlRGlzcGF0Y2hlcnNQb3N0UHJv
Y2VzcyhpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2Rpc3Bh
dGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoKTsKKyAgICB9Cit9CisKK2lubGlu
ZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNoZXJzUG9zdFByb2Nlc3MoaW50IGJy
b3dzaW5nQ29udGV4dE51bWJlcikKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1fZGlzcGF0Y2hlcnMu
c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSBicm93c2luZ0NvbnRleHROdW1iZXI7IGkgPCBz
aXplOyArK2kpCisgICAgICAgIG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRQb3N0UHJv
Y2VzcygpOworfQorCitpbmxpbmUgYm9vbCBFdmVudERpc3BhdGNoZXI6OmZpcmVEaXNwYXRjaGVy
c0RlZmF1bHRFdmVudEhhbmRsZXIoKQoreworICAgIHNpemVfdCBzaXplID0gbV9kaXNwYXRjaGVy
cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAg
ICAgY29uc3QgRXZlbnQqIGV2ZW50ID0gbV9kaXNwYXRjaGVyc1tpXS0+ZXZlbnQoKTsKKyAgICAg
ICAgaWYgKGV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgbV9kaXNwYXRjaGVyc1tpXS0+ZGlzcGF0Y2hFdmVudERlZmF1bHRIYW5kbGVy
KCk7CisgICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgeworICAgICAgICAgICAg
QVNTRVJUKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWV2ZW50LT5idWJibGVzKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDViZmVhZDBkMGU2Y2JlMGI4MDAzNGQ0
MjI1YTYwZTMyNGRmYWM4MzkuLjZjZGYyZjdiNjU2NzM1MTg4NWU3ODRmZWM2MjcyZmU5ZWRlYjky
NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTI3LDg1ICsyNyw0MSBA
QAogI2RlZmluZSBFdmVudERpc3BhdGNoZXJfaAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRXZlbnQ7
Ci1jbGFzcyBFdmVudENvbnRleHQ7CiBjbGFzcyBFdmVudERpc3BhdGNoTWVkaWF0b3I7CitjbGFz
cyBFdmVudERpc3BhdGNoZXJGb3JCcm93c2luZ0NvbnRleHQ7CiBjbGFzcyBFdmVudFRhcmdldDsK
LWNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQ7Ci1jbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7Ci1jbGFzcyBTaGFkb3dSb290OwotY2xhc3Mg
VHJlZVNjb3BlOwotY2xhc3MgV2luZG93RXZlbnRDb250ZXh0OwotCi1lbnVtIEV2ZW50RGlzcGF0
Y2hCZWhhdmlvciB7Ci0gICAgUmV0YXJnZXRFdmVudCwKLSAgICBTdGF5SW5zaWRlU2hhZG93RE9N
Ci19OwotCi1lbnVtIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gewotICAgIENvbnRpbnVlRGlz
cGF0Y2hpbmcsCi0gICAgRG9uZURpc3BhdGNoaW5nCi19OwotCi1jbGFzcyBFdmVudFJlbGF0ZWRU
YXJnZXRBZGp1c3RlciB7Ci1wdWJsaWM6Ci0gICAgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIo
UGFzc1JlZlB0cjxOb2RlPiwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KTsKLSAgICB2
b2lkIGFkanVzdChWZWN0b3I8RXZlbnRDb250ZXh0PiYpOwotcHJpdmF0ZToKLSAgICB0eXBlZGVm
IEhhc2hNYXA8VHJlZVNjb3BlKiwgRXZlbnRUYXJnZXQqPiBSZWxhdGVkVGFyZ2V0TWFwOwotICAg
IEV2ZW50VGFyZ2V0KiBmaW5kUmVsYXRlZFRhcmdldChUcmVlU2NvcGUqKTsKLQotICAgIFJlZlB0
cjxOb2RlPiBtX25vZGU7Ci0gICAgUmVmUHRyPE5vZGU+IG1fcmVsYXRlZFRhcmdldDsKLSAgICBS
ZWxhdGVkVGFyZ2V0TWFwIG1fcmVsYXRlZFRhcmdldE1hcDsKLX07CiAKIGNsYXNzIEV2ZW50RGlz
cGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZGlzcGF0Y2hFdmVudChOb2RlKiwg
UGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+KTsKICAgICBzdGF0aWMgdm9pZCBkaXNw
YXRjaFNjb3BlZEV2ZW50KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4p
OwotCiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhOb2RlKiwgUGFzc1Jl
ZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBz
aG93UHJlc3NlZExvb2spOwogCisgICAgdm9pZCBhZGp1c3RSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQ
dHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0KTsKICAgICBi
b29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIHZvaWQgYWRqdXN0UmVs
YXRlZFRhcmdldChFdmVudCosIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJn
ZXQpOwotICAgIE5vZGUqIG5vZGUoKSBjb25zdDsKKyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9ub2RlLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgRXZlbnREaXNwYXRjaGVyKE5v
ZGUqKTsKKyAgICB2b2lkIHByZXBhcmVFdmVudERpc3BhdGNoZXJzKFBhc3NSZWZQdHI8RXZlbnQ+
KTsKKyAgICB2b2lkIGZpcmVEaXNwYXRjaGVycygpOworICAgIHZvaWQgZmlyZURpc3BhdGNoZXJz
UG9zdFByb2Nlc3MoaW50IGJyb3dzaW5nQ29udGV4dE51bWJlcik7CisgICAgYm9vbCBmaXJlRGlz
cGF0Y2hlcnNEZWZhdWx0RXZlbnRIYW5kbGVyKCk7CiAKLSAgICBFdmVudERpc3BhdGNoQmVoYXZp
b3IgZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCosIFNoYWRvd1Jvb3QqLCBFdmVudFRh
cmdldCopOwotCi0gICAgdm9pZCBlbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCopOwotICAgIGNv
bnN0IEV2ZW50Q29udGV4dCogdG9wRXZlbnRDb250ZXh0KCk7Ci0KLSAgICBFdmVudERpc3BhdGNo
Q29udGludWF0aW9uIGRpc3BhdGNoRXZlbnRQcmVQcm9jZXNzKFBhc3NSZWZQdHI8RXZlbnQ+LCB2
b2lkKiYgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOwotICAgIEV2ZW50RGlzcGF0Y2hD
b250aW51YXRpb24gZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKFBhc3NSZWZQdHI8RXZlbnQ+LCBX
aW5kb3dFdmVudENvbnRleHQmKTsKLSAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3Bh
dGNoRXZlbnRBdFRhcmdldChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgRXZlbnREaXNwYXRjaENv
bnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRCdWJibGluZyhQYXNzUmVmUHRyPEV2ZW50PiwgV2lu
ZG93RXZlbnRDb250ZXh0Jik7Ci0gICAgdm9pZCBkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoUGFz
c1JlZlB0cjxFdmVudD4sIHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KTsKLQot
ICAgIFZlY3RvcjxFdmVudENvbnRleHQ+IG1fYW5jZXN0b3JzOworICAgIFZlY3RvcjxPd25QdHI8
RXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdDb250ZXh0PiA+IG1fZGlzcGF0Y2hlcnM7CiAgICAg
UmVmUHRyPE5vZGU+IG1fbm9kZTsKLSAgICBSZWZQdHI8RnJhbWVWaWV3PiBtX3ZpZXc7Ci0gICAg
Ym9vbCBtX2FuY2VzdG9yc0luaXRpYWxpemVkOwogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1f
ZXZlbnREaXNwYXRjaGVkOwogI2VuZGlmCiB9OwogCi1pbmxpbmUgTm9kZSogRXZlbnREaXNwYXRj
aGVyOjpub2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ub2RlLmdldCgpOwotfQotCiB9CiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDQ4NjgwYjE3MWQzNzQ1NjQ1NzZjMDA1Nzk3ODI2OGNhZTE1ZTEwNGMu
Ljk1NGMxMjA3NWMzN2IyNWQyYzA1M2VlNjc1Mjg3MmNlMjdlMzZmMDAgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAxMi0wOC0wOSAgSGF5YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgU3VwcG9ydCBhbiBldmVudCBwcm9wYWdhdGlvbiBhY3Jvc3Mgc2VhbWxlc3MgaWZy
YW1lcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkx
MjkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBm
YXN0L2ZyYW1lcy9zZWFtbGVzcy9yZXNvdXJjZXMvZmlyZS1ldmVudHMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRz
Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTA4LTA5ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWls
LnBvemRueWFrb3ZAaW50ZWwuY29tPgogCiAgICAgICAgIFtXSzJdIFVuc2tpcCB0ZXN0cyByZXF1
aXJpbmcgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3Jlc291cmNlcy9m
aXJlLWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3MvcmVzb3Vy
Y2VzL2ZpcmUtZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNlNjI3MDNjN2NlMTE1MWE1YmU4NGIy
ODBmZTEzZWM0M2QzODIwNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJh
bWVzL3NlYW1sZXNzL3Jlc291cmNlcy9maXJlLWV2ZW50cy5odG1sCkBAIC0wLDAgKzEsMTggQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxkaXYgaWQ9J3RhcmdldCc+PC9kaXY+
Cis8c2NyaXB0Pgord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbihl
dmVudCkgeworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0
Jyk7CisgICAgdmFyIGV2ZW50cyA9IFsnYWJvcnQnLCAnc2VsZWN0JywgJ2NoYW5nZScsICdjbGlj
aycsICdkYmxjbGljaycsICdyZXNldCcsICdyZXNpemUnLCAnc2Nyb2xsJywgJ3NlbGVjdHN0YXJ0
J107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ1VJRXZlbnQnKTsKKyAgICAgICAg
ZXZlbnQuaW5pdEV2ZW50KGV2ZW50c1tpXSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICB0YXJnZXQu
ZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgfQorICAgIHdpbmRvdy50b3AucG9zdE1lc3NhZ2Uo
J0RPTkUnLCAnKicpOworfSwgZmFsc2UpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVu
dHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxl
c3MtZXZlbnRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWM2ZWE1OGIwYTQ0ZjA3NTVlOGU2
MjIzZDVlYmI5YTRjNTM2NzQxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9m
cmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI0
IEBACitUZXN0IHRoYXQgZXZlbnQgcHJvcGFnYXRlcyBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4K
KworICBhYm9ydAorCisgIHNlbGVjdAorCisgIGNoYW5nZQorCisgIGNsaWNrCisgICAgIEBzZWFt
bGVzcy1pZnJhbWUgKHRhcmdldDogc2VhbWxlc3MtaWZyYW1lKQorICAgICBAYm9keSAodGFyZ2V0
OiBzZWFtbGVzcy1pZnJhbWUpCisKKyAgZGJsY2xpY2sKKyAgICAgQHNlYW1sZXNzLWlmcmFtZSAo
dGFyZ2V0OiBzZWFtbGVzcy1pZnJhbWUpCisgICAgIEBib2R5ICh0YXJnZXQ6IHNlYW1sZXNzLWlm
cmFtZSkKKworICByZXNldAorCisgIHJlc2l6ZQorCisgIHNjcm9sbAorCisgIHNlbGVjdHN0YXJ0
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNz
LWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3Mt
ZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNmODMxMmNiYzFmNTFmZmRmOWU3YTJjZjkyMWY1NWM5
NzMyZjZhNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1s
ZXNzL3NlYW1sZXNzLWV2ZW50cy5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8Ym9keSBpZD0nYm9keSc+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitkZWJ1ZygiVGVzdCB0aGF0
IGV2ZW50IHByb3BhZ2F0ZXMgYWNyb3NzIHNlYW1sZXNzIGlmcmFtZXMuIikKKworaWYgKHdpbmRv
dy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBldmVudHMgPSBbJ2Fib3J0JywgJ3NlbGVj
dCcsICdjaGFuZ2UnLCAnY2xpY2snLCAnZGJsY2xpY2snLCAncmVzZXQnLCAncmVzaXplJywgJ3Nj
cm9sbCcsICdzZWxlY3RzdGFydCddOwordmFyIGV2ZW50UmVjb3JkcyA9IHt9OworCitmb3IgKHZh
ciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkKKyAgICBkb2N1bWVudC5ib2R5LmFkZEV2
ZW50TGlzdGVuZXIoZXZlbnRzW2ldLCByZWNvcmRFdmVudCk7CisKK2Z1bmN0aW9uIGlmcmFtZUxv
YWRlZChpZnJhbWUpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsr
aSkKKyAgICAgICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRzW2ldLCByZWNvcmRFdmVu
dCk7CisgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoJ2ZpcmUnLCAnKicpOwor
fQorCit2YXIgbWVzc2FnZVJlY2VpdmVkQ291bnQgPSAwOworCit3aW5kb3cuYWRkRXZlbnRMaXN0
ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKCsrbWVzc2FnZVJlY2Vp
dmVkQ291bnQgPT0gMikgIHsKKyAgICAgICAgZHVtcERpc3BhdGNoZWRFdmVudCgpOworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICB9Cit9LCBmYWxzZSk7CisKK2Z1bmN0aW9uIHJlY29yZEV2ZW50KGV2ZW50KQor
eworICAgIHZhciBldmVudFR5cGUgPSBldmVudC50eXBlCisgICAgaWYgKCFldmVudFJlY29yZHNb
ZXZlbnRUeXBlXSkKKyAgICAgICAgZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0gPSBbXTsKKyAgICB2
YXIgZXZlbnRTdHJpbmcgPSAnJzsKKyAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldCkKKyAgICAg
ICAgZXZlbnRTdHJpbmcgKz0gJyBAJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuaWQ7CisgICAgaWYg
KGV2ZW50LnRhcmdldCkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAodGFyZ2V0OiAnICsgZXZl
bnQudGFyZ2V0LmlkICsgJyknOworICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0KQorICAgICAg
ICBldmVudFN0cmluZyArPSAnIChyZWxhdGVkOiAnICsgZXZlbnQucmVsYXRlZFRhcmdldC5pZCAr
ICcpJzsKKyAgICBpZiAoZXZlbnQuZXZlbnRQaGFzZSA9PSAxKQorICAgICAgICBldmVudFN0cmlu
ZyArPSAnKGNhcHR1cmluZyBwaGFzZSknOworICAgIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQu
Y3VycmVudFRhcmdldCAmJiBldmVudC50YXJnZXQuaWQgPT0gZXZlbnQuY3VycmVudFRhcmdldC5p
ZCkKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50LmV2ZW50UGhhc2UiLCAiMiIsIHRydWUpOworICAg
IGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdLnB1c2goZXZlbnRTdHJpbmcpOworfQorCitmdW5jdGlv
biBkdW1wRGlzcGF0Y2hlZEV2ZW50KCkKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50
cy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgZXZlbnRUeXBlID0gZXZlbnRzW2ldOworICAg
ICAgICBkZWJ1ZygnXG4gICcgKyBldmVudFR5cGUpOworICAgICAgICB2YXIgcmVjb3JkID0gZXZl
bnRSZWNvcmRzW2V2ZW50VHlwZV0gfHwgW107CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
cmVjb3JkLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgZGVidWcoJyAgICAnICsgcmVjb3JkW2pd
KQorICAgIH0KK30KKworPC9zY3JpcHQ+Cis8ZGl2IGlkPSJjb250YWluZXIiPgorICAgIDxpZnJh
bWUgaWQ9J3NlYW1sZXNzLWlmcmFtZScgb25sb2FkPSdpZnJhbWVMb2FkZWQodGhpcyknIHNyYz0n
cmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwnIHNlYW1sZXNzPSd0cnVlJz48L2lmcmFtZT4KKyAg
ICA8aWZyYW1lIGlkPSdub24tc2VhbWxlc3MtaWZyYW1lJyBvbmxvYWQ9J2lmcmFtZUxvYWRlZCh0
aGlzKScgc3JjPSdyZXNvdXJjZXMvZmlyZS1ldmVudHMuaHRtbCc+PC9pZnJhbWU+Cis8L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158496</attachid>
            <date>2012-08-14 21:21:09 -0700</date>
            <delta_ts>2012-08-21 23:13:23 -0700</delta_ts>
            <desc>wip. sync to ToT</desc>
            <filename>bug-91290-20120815132035.patch</filename>
            <type>text/plain</type>
            <size>41652</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NjMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTdhN2I1NzYxZDI1ZTFi
MmQzYjk4N2NmYmU4NjA4NTE5YjJhMDJiYS4uYWY0NTIyMTFiODdlZTVkN2E1NjczYjE0N2QzNDJh
YTg1MDQ5OTA0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAxMi0wOC0wOSAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVu
dCBwcm9wYWdhdGlvbiBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjkwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVudCBwcm9wYWdhdGlv
biBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgQXMgdGhlIGZpcnN0IHN0ZXAsICdj
bGljaycgYW5kICdkYmxjbGljaycgZXZlbnRzIGhhdmUgYmVlbiBzdXBwb3J0ZWQuCisKKyAgICAg
ICAgVG8gc3VwcG9ydCBhbiBldmVudCBkaXNwYXRjaGluZyBhY3Jvc3MgYnJvd3NpbmcgY29udGV4
dCwgSSd2ZQorICAgICAgICBpbnRyb2R1Y2VkIGEgRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdD
b250ZXh0LCB3aG9zZSByb2xlIGlzIHNpbWlsYXIgdG8KKyAgICAgICAgYW4gRXZlbnREaXNwYXRj
aGVyIHByaW9yIHRvIHRoaXMgcGF0Y2guIEJ1dCB0aGUgaW50ZXJuYWwKKyAgICAgICAgc3RydWN0
dXJlIHdhcyBzaWduaWZpY2FudGx5IGNoYW5nZWQgc28gdGhhdCBpdCBjYW4gYmUgbWFuYWdlZCBm
cm9tIG91dHNpZGUuCisKKyAgICAgICAgQW4gRXZlbnREaXNwYXRjaGVyIG5vdyBhY3RzIGFzIGlm
IGl0IHdlcmUgYSBtZXRhIGRpc3BhdGNoZXIgd2hpY2gKKyAgICAgICAgZGVsZWdhdGVzIGV2ZW50
IGRpc3BhdGNoaW5nIHRvIGVhY2ggZGlzcGF0Y2hlciBpbiBlYWNoIGJyb3dzaW5nCisgICAgICAg
IGNvbnRleHQuIEl0IG1hbmFnZXMgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIG9mIGRpc3BhdGNoZXJz
LgorCisgICAgICAgIEFjY29yZGluZyB0byB0aGUgZGlzY3Vzc2lvbiBvZiBidWcgOTEyOTAsIHdo
YXR3ZyBtaWdodCBzcGVjCisgICAgICAgIHdoYXRldmVyIFdlYktpdCBpbXBsZW1lbnRzLiAgU28g
bGV0IG1lIGV4cGxhaW4gaG93IGV2ZW50CisgICAgICAgIGRpc3BhdGNoaW5nIHdvcmtzIGFjcm9z
cyBzZWFtbGVzcyBpZnJhbWVzIGJyaWVmbHkgaGVyZToKKworICAgICAgICAxLiBBbmNlc3RvciBu
b2RlcyBvZiBldmVudCBhcmUgY2FsY3VsYXRlZCBhcyB1c3VhbCwgYnV0IGlmIHRoZQorICAgICAg
ICAgICBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHQgaXMgdGhhdCBvZiBhIHNlYW1sZXNzIGlmcmFt
ZSwgY29udGludWUgdG8KKyAgICAgICAgICAgdHJhdmVyc2luZyBhbmNlc3RvcnMgb2YgdGhlIHBh
cmVudCBicm93c2luZyBjb250ZXh0LgorICAgICAgICAyLiBGb3IgZWFjaCBicm93c2luZyBjb250
ZXh0LCBjbG9uZSB0aGUgZXZlbnQgb2JqZWN0LiBJbiB0aGUgbGF0ZXIKKyAgICAgICAgICAgZXZl
bnQgZGlzcGF0Y2hpbmcsIHVzZSB0aGUgY2xvbmVkIGV2ZW50IG9iamVjdCBpbiBlYWNoIGJyb3dz
aW5nCisgICAgICAgICAgIGNvbnRleHQgc28gdGhhdCB3ZSBjYW4gaXNvbGF0ZSBldmVudCBvYmpl
Y3RzLgorICAgICAgICAzLiBUYXJnZXQgb2YgdGhlIGNsb25lZCBldmVudCBvYmplY3RzIGlzIHJl
dGFyZ2V0ZWQgdG8gaWZyYW1lJ3Mgb3duZXIgZWxlbWVudC4KKyAgICAgICAgNC4gUHJvY2VzcyBj
YXB0dXJpbmcsIHRhcmdldCBhbmQgYnViYmxpbmcgcGhhc2VzIGFzIGlmIHRoZXJlIHdhcworICAg
ICAgICAgICBvbmUgYmlnICdhbmNlc3RvcicgY2hhaW4uICBUaGF0IG1lYW5zIGlmIGFuIGV2ZW50
IGxpc3RlbmVyIGluIGFuCisgICAgICAgICAgIHVwcGVyIGJyb3dzaW5nIGNvbnRleHQgY2FsbHMg
c3RvcFByb3BhZ2F0aW9uKCkgYXQgY2FwdHVyaW5nCisgICAgICAgICAgIHBoYXNlLCBuZXN0ZWQg
YnJvd3NpbmcgY29udGV4dHMgbmV2ZXIgcmVjZWl2ZSBhbiBldmVudC4KKyAgICAgICAgNS4gVW5s
ZXNzIGRlZmF1bHQgaXMgcHJldmVudGVkLCB0cnkgdG8gY2FsbCBkZWZhdWx0IGV2ZW50IGhhbmRs
ZXIKKyAgICAgICAgICAgc3RhcnRpbmcgZnJvbSB0aGUgYm90dG9tIG5vZGUgb2YgYW5jZXN0b3Jz
IHVudGlsIGEgZGVmYXVsdCBpcworICAgICAgICAgICBoYW5kbGVkLgorCisgICAgICAgIEV4YW1w
bGU6ICBTdXBwb3NlIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBIVE1MIGFuZCBuZXN0ZWQgc2VhbWxl
c3MgaWZyYW1lcy4gVGhlcmUgYXJlIHRocmVlIGJyb3dzaW5nIGNvbnRleHRzLgorCisgICAgICAg
IDEpIGRvYy5odG1sOgorICAgICAgICAgICA8QT4KKyAgICAgICAgICAgICAgPEI+CisgICAgICAg
ICAgICAgICAgPGlmcmFtZSBpZD1DIHNlYW1sZXNzIHNyYz0iaWZyYW1lMS5odG1sIj4KKworICAg
ICAgICAyKSBpZnJhbWUxLmh0bWw6CisgICAgICAgICAgIDxEPgorICAgICAgICAgICAgICA8RT4K
KyAgICAgICAgICAgICAgICA8aWZyYW1lIGlkPUYgc2VhbWxlc3Mgc3JjPSJpZnJhbWUyLmh0bWwi
PgorCisgICAgICAgIDMpIGlmcmFtZTIuaHRtbDoKKyAgICAgICAgICAgPEc+CisgICAgICAgICAg
ICAgIDxIPgorCisgICAgICAgIElmIGEgY2xpY2snIGV2ZW50IGlzIGZpcmVkIG9uIG5vZGUgRiwg
d2Ugd2lsbCBkaXNwYXRjaCBldmVudHMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKyAgICAgICAg
ICAxLiBBIChAY2FwdHVyZSkgKHRhcmdldCA9PSBDKQorICAgICAgICAgIDIuIEIgKEBjYXB0dXJl
KSAodGFyZ2V0ID09IEMpCisgICAgICAgICAgMy4gRCAoQGNhcHR1cmUpICh0YXJnZXQgPT0gRikK
KyAgICAgICAgICA0LiBFIChAY2FwdHVyZSkgKHRhcmdldCA9PSBGKQorICAgICAgICAgIDUuIEcg
KEBjYXB0dXJlKSAodGFyZ2V0ID09IEgpCisgICAgICAgICAgNi4gSCAoQHRhcmdldCkgICh0YXJn
ZXQgPT0gSCkKKyAgICAgICAgICA3LiBHIChAYnViYmxlKSAgKHRhcmdldCA9PSBIKQorICAgICAg
ICAgIDguIEYgKEB0YXJnZXQpICAodGFyZ2V0ID09IEYpCisgICAgICAgICAgOS4gRSAoQGJ1YmJs
ZSkgICh0YXJnZXQgPT0gRikKKyAgICAgICAgICA5LiBEIChAYnViYmxlKSAgKHRhcmdldCA9PSBG
KQorICAgICAgICAgMTAuIEMgKEB0YXJnZXQpICAodGFyZ2V0ID09IEMpCisgICAgICAgICAxMS4g
QiAoYnViYmxlKSAgICh0YXJnZXQgPT0gQykKKyAgICAgICAgIDEyLiBBIChidWJibGUpICAgKHRh
cmdldCA9PSBDKQorCisgICAgICAgIFRlc3Q6IGZhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNz
LWV2ZW50cy5odG1sCisKKyAgICAgICAgKiBkb20vRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnQ6OmNsb25lRm9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9F
dmVudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFdmVudCk6CisgICAgICAgICog
ZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChFdmVudFJlbGF0ZWRUYXJnZXRBZGp1
c3Rlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBlckZyYW1lRGlzcGF0Y2hlcik6
CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6Om5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpldmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZXJGcmFtZURpc3BhdGNoZXI6OnNob3VsZENvbnRpbnVlVG9QYXJlbnREb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpQZXJGcmFtZURpc3BhdGNoZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpjYWx1Y3VsYXRlRXZlbnRB
bmNlc3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjp3aWxsRGlz
cGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6OmRpc3Bh
dGNoRXZlbnRQcmVQcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1lRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1l
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBl
ckZyYW1lRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50RGVmYXVsdEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpyZXNldFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6OnRvcEV2ZW50Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpldmVudFNob3VsZEJlU3RvcHBlZEF0Qm91bmRhcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRjaEJl
aGF2aW9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRj
aGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNpbXVsYXRlZENs
aWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFByb3BhZ2F0ZUV2ZW50QWNyb3NzU2VhbWxl
c3NJRnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6cHJlcGFyZUV2
ZW50RGlzcGF0Y2hlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjphZGp1
c3RSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6Zmly
ZURpc3BhdGNoZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURp
c3BhdGNoZXJzUG9zdFByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVy
OjpmaXJlRGlzcGF0Y2hlcnNEZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBkb20vRXZl
bnREaXNwYXRjaGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV2ZW50RGlzcGF0
Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6Om5vZGUpOgorICAgICAg
ICAqIGRvbS9Nb3VzZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkQ2xpbmV0
WCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkQ2xpbmV0
WSk6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50OjpjbG9uZUZvcik6CisgICAgICAgICog
ZG9tL01vdXNlRXZlbnQuaDoKKyAgICAgICAgKE1vdXNlRXZlbnQpOgorCiAyMDEyLTA4LTE0ICBM
ZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KIAogICAgICAgICByMTI1NTkxIGJy
b2tlIHRlc3RzIHdpdGggU1VCUElYRUxfTEFZT1VUIGRpc2FibGVkCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcApp
bmRleCAwOGU2NDRmZjZlNmJhZTFmOGVkMjRmNzk4M2UxNWM5NGZmOWY4OWY0Li5mZDQ1ZTIzNjMy
ODc0YTM4MDU2YzIzYWFlMDZkMWYyZjMxODJiMGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAKQEAgLTE2
NCw2ICsxNjQsMTEgQEAgdm9pZCBFdmVudDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1l
bWJlcihtX3VuZGVybHlpbmdFdmVudCk7CiB9CiAKK1Bhc3NSZWZQdHI8RXZlbnQ+IEV2ZW50Ojpj
bG9uZUZvcihIVE1MSUZyYW1lRWxlbWVudCopIGNvbnN0Cit7CisgICAgcmV0dXJuIEV2ZW50Ojpj
cmVhdGUodHlwZSgpLCBidWJibGVzKCksIGNhbmNlbGFibGUoKSk7Cit9CisKIHZvaWQgRXZlbnQ6
OnNldFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiB0YXJnZXQpCiB7CiAgICAgaWYgKG1f
dGFyZ2V0ID09IHRhcmdldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmgKaW5kZXggZTcyMzQyMzE1Mzk4ZWYxNzIwODQy
MDE4NDI3OGY3Y2VlZjZjOTM2MS4uNWM3ZDdjNzUzZDVhYjA0OWQ5NGFkNDUxMTljNGUwM2U5MjZl
Y2VjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50LmgKQEAgLTMxLDkgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotICAgIGNsYXNzIE1lbW9yeUluc3RydW1lbnRhdGlvbjsKICAgICBjbGFzcyBFdmVu
dFRhcmdldDsKICAgICBjbGFzcyBFdmVudERpc3BhdGNoZXI7CisgICAgY2xhc3MgSFRNTElGcmFt
ZUVsZW1lbnQ7CisgICAgY2xhc3MgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOwogCiAgICAgc3RydWN0
IEV2ZW50SW5pdCB7CiAgICAgICAgIEV2ZW50SW5pdCgpOwpAQCAtMTU1LDYgKzE1Niw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxFdmVudD4gY2xvbmVGb3IoSFRNTElGcmFtZUVsZW1lbnQqKSBjb25zdDsKKwogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgRXZlbnQoKTsKICAgICAgICAgRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggMzBhZjBmMzNjNmJjOWM1ZTM4MGJjN2JiY2EyNTQ5
ZDhlNWJhYTZmNS4uMTI1MzA2ZjMzM2RlYjk1ZGI0MmNjN2I2ZjA4YTFlMDZmNDgzMWQ1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJFdmVudENvbnRleHQuaCIKICNpbmNsdWRlICJFdmVudERpc3BhdGNoTWVkaWF0b3Iu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNlcnRpb25Qb2lu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgpAQCAtNTAsNiArNTEs
NjggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitlbnVtIEV2ZW50RGlzcGF0Y2hCZWhhdmlv
ciB7CisgICAgUmV0YXJnZXRFdmVudCwKKyAgICBTdGF5SW5zaWRlU2hhZG93RE9NCit9OworCitl
bnVtIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24geworICAgIENvbnRpbnVlRGlzcGF0Y2hpbmcs
CisgICAgRG9uZURpc3BhdGNoaW5nCit9OworCitlbnVtIEV2ZW50QW5jZXN0b3JDb250aW51YXRp
b24geworICAgIEV2ZW50QW5jZXN0b3JTdG9wLAorICAgIEV2ZW50QW5jZXN0b3JDb250aW51ZVRv
UGFyZW50Cit9OworCitjbGFzcyBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlciB7CitwdWJsaWM6
CisgICAgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIoUGFzc1JlZlB0cjxOb2RlPiwgUGFzc1Jl
ZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KTsKKyAgICB2b2lkIGFkanVzdChWZWN0b3I8RXZlbnRD
b250ZXh0PiYpOworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8VHJlZVNjb3BlKiwgRXZl
bnRUYXJnZXQqPiBSZWxhdGVkVGFyZ2V0TWFwOworICAgIEV2ZW50VGFyZ2V0KiBmaW5kUmVsYXRl
ZFRhcmdldChUcmVlU2NvcGUqKTsKKworICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgUmVm
UHRyPE5vZGU+IG1fcmVsYXRlZFRhcmdldDsKKyAgICBSZWxhdGVkVGFyZ2V0TWFwIG1fcmVsYXRl
ZFRhcmdldE1hcDsKK307CisKK2NsYXNzIFBlckZyYW1lRGlzcGF0Y2hlciB7CitwdWJsaWM6Cisg
ICAgUGVyRnJhbWVEaXNwYXRjaGVyKE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9p
ZCBhZGp1c3RSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRU
YXJnZXQpOworCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsg
fQorICAgIGNvbnN0IEV2ZW50KiBldmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnQuZ2V0KCk7
IH0KKworICAgIGJvb2wgc2hvdWxkQ29udGludWVUb1BhcmVudERvY3VtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9ldmVudEFuY2VzdG9yQ29udGludWF0aW9uID09IEV2ZW50QW5jZXN0b3JDb250aW51
ZVRvUGFyZW50OyB9CisKKyAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZl
bnRQcmVQcm9jZXNzKCk7CisgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2
ZW50QXRDYXB0dXJpbmcoKTsKKyAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNo
RXZlbnRBdFRhcmdldCgpOworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hF
dmVudEF0QnViYmxpbmcoKTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcygpOwor
ICAgIHZvaWQgZGlzcGF0Y2hFdmVudERlZmF1bHRIYW5kbGVyKCk7CisKKyAgICB2b2lkIHJlc2V0
VGFyZ2V0KCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxEaXNwYXRj
aEV2ZW50KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIGRl
dGVybWluZURpc3BhdGNoQmVoYXZpb3IoU2hhZG93Um9vdCosIEV2ZW50VGFyZ2V0Kik7CisgICAg
Y29uc3QgRXZlbnRDb250ZXh0KiB0b3BFdmVudENvbnRleHQoKTsKKyAgICBFdmVudEFuY2VzdG9y
Q29udGludWF0aW9uIGNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycygpOworCisgICAgUmVmUHRyPE5v
ZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8RXZlbnQ+IG1fZXZlbnQ7CisgICAgVmVjdG9yPEV2ZW50
Q29udGV4dD4gbV9hbmNlc3RvcnM7CisgICAgRXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbiBtX2V2
ZW50QW5jZXN0b3JDb250aW51YXRpb247CisgICAgUmVmUHRyPEZyYW1lVmlldz4gbV92aWV3Owor
ICAgIFdpbmRvd0V2ZW50Q29udGV4dCBtX3dpbmRvd0V2ZW50Q29udGV4dDsKKyAgICB2b2lkKiBt
X3ByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0OworfTsKKwogc3RhdGljIEhhc2hTZXQ8Tm9k
ZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcyA9IDA7CiAKIEV2ZW50UmVsYXRl
ZFRhcmdldEFkanVzdGVyOjpFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlcihQYXNzUmVmUHRyPE5v
ZGU+IG5vZGUsIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZFRhcmdldCkKQEAgLTEyMSwxMyArMTg0
LDYgQEAgRXZlbnRUYXJnZXQqIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRl
ZFRhcmdldChUcmVlU2NvcGUqIHNjb3BlKQogICAgIHJldHVybiByZWxhdGVkVGFyZ2V0OwogfQog
Ci1ib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBub2RlLCBQYXNzUmVm
UHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4gbWVkaWF0b3IpCi17Ci0gICAgQVNTRVJUKCFldmVu
dERpc3BhdGNoRm9yYmlkZGVuKCkpOwotCi0gICAgRXZlbnREaXNwYXRjaGVyIGRpc3BhdGNoZXIo
bm9kZSk7Ci0gICAgcmV0dXJuIG1lZGlhdG9yLT5kaXNwYXRjaEV2ZW50KCZkaXNwYXRjaGVyKTsK
LX0KIAogaW5saW5lIHN0YXRpYyBFdmVudFRhcmdldCogZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZH
VGFyZ2V0UnVsZXMoTm9kZSogcmVmZXJlbmNlTm9kZSkKIHsKQEAgLTE1MSw3ICsyMDcsNyBAQCBp
bmxpbmUgc3RhdGljIEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRS
dWxlcyhOb2RlKiByZWZlcmVuY2VObwogICAgIHJldHVybiByZWZlcmVuY2VOb2RlOwogfQogCi12
b2lkIEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBh
c3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCit2b2lkIFBlckZyYW1lRGlz
cGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBS
ZWxhdGVkVGFyZ2V0KQogewogICAgIGlmICghcHJwUmVsYXRlZFRhcmdldCkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTYwLDI2ICsyMTYsMjkgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJl
bGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PgogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFtX25vZGUuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBl
bnN1cmVFdmVudEFuY2VzdG9ycyhldmVudCk7CisgICAgaWYgKG1fYW5jZXN0b3JzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOwogICAgIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKG1fbm9k
ZSwgcmVsYXRlZFRhcmdldC5yZWxlYXNlKCkpLmFkanVzdChtX2FuY2VzdG9ycyk7CiB9CiAKLUV2
ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCitQZXJGcmFtZURpc3Bh
dGNoZXI6OlBlckZyYW1lRGlzcGF0Y2hlcihOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKICAgICA6IG1fbm9kZShub2RlKQotICAgICwgbV9hbmNlc3RvcnNJbml0aWFsaXplZChm
YWxzZSkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2V2ZW50RGlzcGF0Y2hlZChmYWxzZSkKLSNl
bmRpZgorICAgICwgbV9ldmVudChldmVudCkKKyAgICAsIG1fYW5jZXN0b3JzKCkKKyAgICAsIG1f
ZXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbihjYWx1Y3VsYXRlRXZlbnRBbmNlc3RvcnMoKSkKKyAg
ICAsIG1fdmlldyhtX25vZGUtPmRvY3VtZW50KCktPnZpZXcoKSkKKyAgICAsIG1fd2luZG93RXZl
bnRDb250ZXh0KG1fZXZlbnQuZ2V0KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZlbnRDb250ZXh0KCkp
CisgICAgLCBtX3ByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KDApCiB7Ci0gICAgQVNTRVJU
KG5vZGUpOwotICAgIG1fdmlldyA9IG5vZGUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBBU1NF
UlQobV9ub2RlKTsKKyAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CisgICAg
QVNTRVJUKCFtX2V2ZW50LT50eXBlKCkuaXNOdWxsKCkpOyAvLyBKYXZhU2NyaXB0IGNvZGUgY2Fu
IGNyZWF0ZSBhbiBldmVudCB3aXRoIGFuIGVtcHR5IG5hbWUsIGJ1dCBub3QgbnVsbC4KKyAgICBt
X2V2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9u
b2RlLmdldCgpKSk7CiB9CiAKLXZvaWQgRXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVudEFuY2Vz
dG9ycyhFdmVudCogZXZlbnQpCitFdmVudEFuY2VzdG9yQ29udGludWF0aW9uIFBlckZyYW1lRGlz
cGF0Y2hlcjo6Y2FsdWN1bGF0ZUV2ZW50QW5jZXN0b3JzKCkKIHsKLSAgICBpZiAobV9hbmNlc3Rv
cnNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fYW5jZXN0b3JzSW5pdGlhbGl6
ZWQgPSB0cnVlOworICAgIEFTU0VSVChtX2FuY2VzdG9ycy5pc0VtcHR5KCkpOwogICAgIGJvb2wg
aW5Eb2N1bWVudCA9IG1fbm9kZS0+aW5Eb2N1bWVudCgpOwogICAgIGJvb2wgaXNTVkdFbGVtZW50
ID0gbV9ub2RlLT5pc1NWR0VsZW1lbnQoKTsKICAgICBWZWN0b3I8RXZlbnRUYXJnZXQqPiB0YXJn
ZXRTdGFjazsKQEAgLTE5MiwxNzggKzI1MSwxMjYgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmVu
c3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIHRhcmdldFN0YWNr
LmFwcGVuZCh0YXJnZXRTdGFjay5sYXN0KCkpOwogICAgICAgICBtX2FuY2VzdG9ycy5hcHBlbmQo
RXZlbnRDb250ZXh0KG5vZGUsIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG5v
ZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpKTsKICAgICAgICAgaWYgKCFpbkRvY3VtZW50KQotICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIEV2ZW50QW5jZXN0b3JTdG9wOwog
ICAgICAgICBsYXN0ID0gbm9kZTsKICAgICAgICAgaWYgKCFub2RlLT5pc1NoYWRvd1Jvb3QoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZGV0ZXJtaW5lRGlzcGF0Y2hCZWhh
dmlvcihldmVudCwgdG9TaGFkb3dSb290KG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpID09IFN0
YXlJbnNpZGVTaGFkb3dET00pCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChkZXRl
cm1pbmVEaXNwYXRjaEJlaGF2aW9yKHRvU2hhZG93Um9vdChub2RlKSwgdGFyZ2V0U3RhY2subGFz
dCgpKSA9PSBTdGF5SW5zaWRlU2hhZG93RE9NKQorICAgICAgICAgICAgcmV0dXJuIEV2ZW50QW5j
ZXN0b3JTdG9wOwogICAgICAgICBpZiAoIWlzU1ZHRWxlbWVudCkgewogICAgICAgICAgICAgQVNT
RVJUKCF0YXJnZXRTdGFjay5pc0VtcHR5KCkpOwogICAgICAgICAgICAgdGFyZ2V0U3RhY2sucmVt
b3ZlTGFzdCgpOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiBFdmVudEFuY2VzdG9yQ29u
dGludWVUb1BhcmVudDsKIH0KIAotdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2NvcGVk
RXZlbnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+IG1lZGlh
dG9yKQorSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIFBlckZyYW1lRGlzcGF0Y2hlcjo6
d2lsbERpc3BhdGNoRXZlbnQoKSBjb25zdAogewotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSB0
YXJnZXQgaGVyZSBiZWNhdXNlIGl0IGNhbiBnbyBhd2F5IGJ5IHRoZSB0aW1lIHdlIGFjdHVhbGx5
IGZpcmUgdGhlIGV2ZW50LgotICAgIG1lZGlhdG9yLT5ldmVudCgpLT5zZXRUYXJnZXQoZXZlbnRU
YXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobm9kZSkpOwotICAgIFNjb3BlZEV2ZW50UXVl
dWU6Omluc3RhbmNlKCktPmVucXVldWVFdmVudERpc3BhdGNoTWVkaWF0b3IobWVkaWF0b3IpOwor
ICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KG1f
bm9kZS0+ZG9jdW1lbnQoKSwgKm1fZXZlbnQsIG1fd2luZG93RXZlbnRDb250ZXh0LndpbmRvdygp
LCBtX25vZGUuZ2V0KCksIG1fYW5jZXN0b3JzKTsKIH0KIAotdm9pZCBFdmVudERpc3BhdGNoZXI6
OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gdW5k
ZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2sp
Ci17Ci0gICAgaWYgKG5vZGUtPmRpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MpCi0gICAgICAgIGdOb2Rlc0Rpc3Bh
dGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gbmV3IEhhc2hTZXQ8Tm9kZSo+OwotICAgIGVsc2UgaWYg
KGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5jb250YWlucyhub2RlKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPmFkZChu
b2RlKTsKLQotICAgIC8vIHNlbmQgbW91c2Vkb3duIGFuZCBtb3VzZXVwIGJlZm9yZSB0aGUgY2xp
Y2ssIGlmIHJlcXVlc3RlZAotICAgIGlmIChzZW5kTW91c2VFdmVudHMpCi0gICAgICAgIEV2ZW50
RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRW
aWV3KCksIHVuZGVybHlpbmdFdmVudCkpOwotICAgIG5vZGUtPnNldEFjdGl2ZSh0cnVlLCBzaG93
UHJlc3NlZExvb2spOwotICAgIGlmIChzZW5kTW91c2VFdmVudHMpCi0gICAgICAgIEV2ZW50RGlz
cGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0Vmlldygp
LCB1bmRlcmx5aW5nRXZlbnQpKTsKLSAgICBub2RlLT5zZXRBY3RpdmUoZmFsc2UpOwotCi0gICAg
Ly8gYWx3YXlzIHNlbmQgY2xpY2sKLSAgICBFdmVudERpc3BhdGNoZXIobm9kZSkuZGlzcGF0Y2hF
dmVudChTaW11bGF0ZWRNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQs
IG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkpOwotCi0g
ICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPnJlbW92ZShub2RlKTsKLX0KLQot
Ym9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJw
RXZlbnQpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIEFTU0VSVCghbV9ldmVudERpc3BhdGNoZWQp
OwotICAgIG1fZXZlbnREaXNwYXRjaGVkID0gdHJ1ZTsKLSNlbmRpZgotICAgIFJlZlB0cjxFdmVu
dD4gZXZlbnQgPSBwcnBFdmVudDsKLSAgICBDaGlsZE5vZGVzTGF6eVNuYXBzaG90Ojp0YWtlQ2hp
bGROb2Rlc0xhenlTbmFwc2hvdCgpOwotCi0gICAgZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdl
dFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKLSAgICBBU1NFUlQoIWV2
ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7Ci0g
ICAgQVNTRVJUKCFldmVudC0+dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBjb2RlIGNh
biBjcmVhdGUgYW4gZXZlbnQgd2l0aCBhbiBlbXB0eSBuYW1lLCBidXQgbm90IG51bGwuCi0gICAg
ZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQuZ2V0KCkpOwotICAgIFdpbmRvd0V2ZW50Q29udGV4
dCB3aW5kb3dFdmVudENvbnRleHQoZXZlbnQuZ2V0KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZlbnRD
b250ZXh0KCkpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KG1fbm9kZS0+ZG9jdW1l
bnQoKSwgKmV2ZW50LCB3aW5kb3dFdmVudENvbnRleHQud2luZG93KCksIG1fbm9kZS5nZXQoKSwg
bV9hbmNlc3RvcnMpOwotCi0gICAgdm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQ7
Ci0gICAgaWYgKGRpc3BhdGNoRXZlbnRQcmVQcm9jZXNzKGV2ZW50LCBwcmVEaXNwYXRjaEV2ZW50
SGFuZGxlclJlc3VsdCkgPT0gQ29udGludWVEaXNwYXRjaGluZykKLSAgICAgICAgaWYgKGRpc3Bh
dGNoRXZlbnRBdENhcHR1cmluZyhldmVudCwgd2luZG93RXZlbnRDb250ZXh0KSA9PSBDb250aW51
ZURpc3BhdGNoaW5nKQotICAgICAgICAgICAgaWYgKGRpc3BhdGNoRXZlbnRBdFRhcmdldChldmVu
dCkgPT0gQ29udGludWVEaXNwYXRjaGluZykKLSAgICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50
QXRCdWJibGluZyhldmVudCwgd2luZG93RXZlbnRDb250ZXh0KTsKLSAgICBkaXNwYXRjaEV2ZW50
UG9zdFByb2Nlc3MoZXZlbnQsIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KTsKLQotICAg
IC8vIEVuc3VyZSB0aGF0IGFmdGVyIGV2ZW50IGRpc3BhdGNoLCB0aGUgZXZlbnQncyB0YXJnZXQg
b2JqZWN0IGlzIHRoZQotICAgIC8vIG91dGVybW9zdCBzaGFkb3cgRE9NIGJvdW5kYXJ5LgotICAg
IGV2ZW50LT5zZXRUYXJnZXQod2luZG93RXZlbnRDb250ZXh0LnRhcmdldCgpKTsKLSAgICBldmVu
dC0+c2V0Q3VycmVudFRhcmdldCgwKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZERpc3BhdGNoRXZlbnQoY29va2llKTsKLQotICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2
ZW50ZWQoKTsKLX0KLQotaW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50UHJlUHJvY2VzcyhQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwg
dm9pZComIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KQoraW5saW5lIEV2ZW50RGlzcGF0
Y2hDb250aW51YXRpb24gUGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UHJlUHJvY2Vz
cygpCiB7CiAgICAgLy8gR2l2ZSB0aGUgdGFyZ2V0IG5vZGUgYSBjaGFuY2UgdG8gZG8gc29tZSB3
b3JrIGJlZm9yZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0IGEgY3JhY2suCi0gICAgcHJlRGlzcGF0
Y2hFdmVudEhhbmRsZXJSZXN1bHQgPSBtX25vZGUtPnByZURpc3BhdGNoRXZlbnRIYW5kbGVyKGV2
ZW50LmdldCgpKTsKLSAgICByZXR1cm4gKG1fYW5jZXN0b3JzLmlzRW1wdHkoKSB8fCBldmVudC0+
cHJvcGFnYXRpb25TdG9wcGVkKCkpID8gRG9uZURpc3BhdGNoaW5nIDogQ29udGludWVEaXNwYXRj
aGluZzsKKyAgICBtX3ByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0ID0gbV9ub2RlLT5wcmVE
aXNwYXRjaEV2ZW50SGFuZGxlcihtX2V2ZW50LmdldCgpKTsKKyAgICByZXR1cm4gKG1fYW5jZXN0
b3JzLmlzRW1wdHkoKSB8fCBtX2V2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkgPyBEb25lRGlz
cGF0Y2hpbmcgOiBDb250aW51ZURpc3BhdGNoaW5nOwogfQogCi1pbmxpbmUgRXZlbnREaXNwYXRj
aENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRBdENhcHR1cmluZyhQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCwgV2luZG93RXZlbnRDb250ZXh0JiB3aW5kb3dFdmVudENv
bnRleHQpCitpbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBQZXJGcmFtZURpc3BhdGNo
ZXI6OmRpc3BhdGNoRXZlbnRBdENhcHR1cmluZygpCiB7CiAgICAgLy8gVHJpZ2dlciBjYXB0dXJp
bmcgZXZlbnQgaGFuZGxlcnMsIHN0YXJ0aW5nIGF0IHRoZSB0b3AgYW5kIHdvcmtpbmcgb3VyIHdh
eSBkb3duLgotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0Up
OworICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7CiAK
LSAgICBpZiAod2luZG93RXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgp
KSAmJiBldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgaWYgKG1fd2luZG93RXZlbnRD
b250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpICYmIG1fZXZlbnQtPnByb3Bh
Z2F0aW9uU3RvcHBlZCgpKQogICAgICAgICByZXR1cm4gRG9uZURpc3BhdGNoaW5nOwogCiAgICAg
Zm9yIChzaXplX3QgaSA9IG1fYW5jZXN0b3JzLnNpemUoKSAtIDE7IGkgPiAwOyAtLWkpIHsKICAg
ICAgICAgY29uc3QgRXZlbnRDb250ZXh0JiBldmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpXTsK
ICAgICAgICAgaWYgKGV2ZW50Q29udGV4dC5jdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkpIHsK
LSAgICAgICAgICAgIGlmIChldmVudC0+YnViYmxlcygpKQorICAgICAgICAgICAgaWYgKG1fZXZl
bnQtPmJ1YmJsZXMoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGV2
ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOworICAgICAgICAgICAgbV9ldmVu
dC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKLSAg
ICAgICAgZXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKLSAgICAg
ICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICAgICAgICAgIG1fZXZlbnQt
PnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7CisgICAgICAgIGV2ZW50Q29u
dGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50LmdldCgpKTsKKyAgICAgICAgaWYgKG1fZXZl
bnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAgICAgICAgcmV0dXJuIERvbmVEaXNwYXRj
aGluZzsKICAgICB9CiAKICAgICByZXR1cm4gQ29udGludWVEaXNwYXRjaGluZzsKIH0KIAotaW5s
aW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50QXRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitpbmxpbmUgRXZlbnREaXNwYXRj
aENvbnRpbnVhdGlvbiBQZXJGcmFtZURpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRBdFRhcmdldCgp
CiB7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7Ci0gICAgbV9h
bmNlc3RvcnNbMF0uaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwotICAgIHJldHVybiBl
dmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgPyBEb25lRGlzcGF0Y2hpbmcgOiBDb250aW51ZURp
c3BhdGNoaW5nOworICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7
CisgICAgbV9hbmNlc3RvcnNbMF0uaGFuZGxlTG9jYWxFdmVudHMobV9ldmVudC5nZXQoKSk7Cisg
ICAgcmV0dXJuIG1fZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpID8gRG9uZURpc3BhdGNoaW5n
IDogQ29udGludWVEaXNwYXRjaGluZzsKIH0KIAotaW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51
YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRCdWJibGluZyhQYXNzUmVmUHRy
PEV2ZW50PiBldmVudCwgV2luZG93RXZlbnRDb250ZXh0JiB3aW5kb3dDb250ZXh0KQoraW5saW5l
IEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gUGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50QXRCdWJibGluZygpCiB7Ci0gICAgaWYgKGV2ZW50LT5idWJibGVzKCkgJiYgIWV2ZW50LT5j
YW5jZWxCdWJibGUoKSkgeworICAgIGlmIChtX2V2ZW50LT5idWJibGVzKCkgJiYgIW1fZXZlbnQt
PmNhbmNlbEJ1YmJsZSgpKSB7CiAgICAgICAgIC8vIFRyaWdnZXIgYnViYmxpbmcgZXZlbnQgaGFu
ZGxlcnMsIHN0YXJ0aW5nIGF0IHRoZSBib3R0b20gYW5kIHdvcmtpbmcgb3VyIHdheSB1cC4KLSAg
ICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKKyAgICAg
ICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOwogCiAgICAg
ICAgIHNpemVfdCBzaXplID0gbV9hbmNlc3RvcnMuc2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICAgICAgY29uc3QgRXZlbnRDb250ZXh0
JiBldmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpXTsKICAgICAgICAgICAgIGlmIChldmVudENv
bnRleHQuY3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpKQotICAgICAgICAgICAgICAgIGV2ZW50
LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOworICAgICAgICAgICAgICAgIG1fZXZl
bnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNF
KTsKLSAgICAgICAgICAgIGV2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQo
KSk7Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8IGV2ZW50
LT5jYW5jZWxCdWJibGUoKSkKKyAgICAgICAgICAgICAgICBtX2V2ZW50LT5zZXRFdmVudFBoYXNl
KEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CisgICAgICAgICAgICBldmVudENvbnRleHQuaGFuZGxl
TG9jYWxFdmVudHMobV9ldmVudC5nZXQoKSk7CisgICAgICAgICAgICBpZiAobV9ldmVudC0+cHJv
cGFnYXRpb25TdG9wcGVkKCkgfHwgbV9ldmVudC0+Y2FuY2VsQnViYmxlKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIERvbmVEaXNwYXRjaGluZzsKICAgICAgICAgfQotICAgICAgICB3aW5kb3dD
b250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKKyAgICAgICAgbV93aW5kb3dF
dmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMobV9ldmVudC5nZXQoKSk7CiAgICAgfQogICAg
IHJldHVybiBDb250aW51ZURpc3BhdGNoaW5nOwogfQogCi1pbmxpbmUgdm9pZCBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcyhQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwg
dm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpCitpbmxpbmUgdm9pZCBQZXJGcmFt
ZURpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcygpCiB7Ci0gICAgZXZlbnQtPnNl
dFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkp
KTsKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCgwKTsKLSAgICBldmVudC0+c2V0RXZlbnRQ
aGFzZSgwKTsKLQorICAgIG1fZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdT
VkdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKKyAgICBtX2V2ZW50LT5zZXRDdXJyZW50VGFy
Z2V0KDApOworICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoMCk7CiAgICAgLy8gUGFzcyB0aGUg
ZGF0YSBmcm9tIHRoZSBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlciB0byB0aGUgcG9zdERpc3BhdGNo
RXZlbnRIYW5kbGVyLgotICAgIG1fbm9kZS0+cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKGV2ZW50
LmdldCgpLCBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7CisgICAgbV9ub2RlLT5wb3N0
RGlzcGF0Y2hFdmVudEhhbmRsZXIobV9ldmVudC5nZXQoKSwgbV9wcmVEaXNwYXRjaEV2ZW50SGFu
ZGxlclJlc3VsdCk7Cit9CiAKK2lubGluZSB2b2lkIFBlckZyYW1lRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2hFdmVudERlZmF1bHRIYW5kbGVyKCkKK3sKICAgICAvLyBDYWxsIGRlZmF1bHQgZXZlbnQgaGFu
ZGxlcnMuIFdoaWxlIHRoZSBET00gZG9lcyBoYXZlIGEgY29uY2VwdCBvZiBwcmV2ZW50aW5nCiAg
ICAgLy8gZGVmYXVsdCBoYW5kbGluZywgdGhlIGRldGFpbCBvZiB3aGljaCBoYW5kbGVycyBhcmUg
Y2FsbGVkIGlzIGFuIGludGVybmFsCiAgICAgLy8gaW1wbGVtZW50YXRpb24gZGV0YWlsIGFuZCBu
b3QgcGFydCBvZiB0aGUgRE9NLgotICAgIGlmICghZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSAm
JiAhZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpIHsKKyAgICBpZiAoIW1fZXZlbnQtPmRlZmF1bHRQ
cmV2ZW50ZWQoKSAmJiAhbV9ldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgewogICAgICAgICAvLyBO
b24tYnViYmxpbmcgZXZlbnRzIGNhbGwgb25seSBvbmUgZGVmYXVsdCBldmVudCBoYW5kbGVyLCB0
aGUgb25lIGZvciB0aGUgdGFyZ2V0LgotICAgICAgICBtX25vZGUtPmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQuZ2V0KCkpOwotICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVk
KCkpOwotICAgICAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgIG1fbm9k
ZS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihtX2V2ZW50LmdldCgpKTsKKyAgICAgICAgQVNTRVJUKCFt
X2V2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpOworICAgICAgICBpZiAobV9ldmVudC0+ZGVmYXVs
dEhhbmRsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8gRm9yIGJ1YmJsaW5n
IGV2ZW50cywgY2FsbCBkZWZhdWx0IGV2ZW50IGhhbmRsZXJzIG9uIHRoZSBzYW1lIHRhcmdldHMg
aW4gdGhlCiAgICAgICAgIC8vIHNhbWUgb3JkZXIgYXMgdGhlIGJ1YmJsaW5nIHBoYXNlLgotICAg
ICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSkgeworICAgICAgICBpZiAobV9ldmVudC0+YnViYmxl
cygpKSB7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUoKTsKICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgbV9hbmNlc3RvcnNbaV0ubm9kZSgpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50Lmdl
dCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkp
OwotICAgICAgICAgICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAg
ICAgICAgICBtX2FuY2VzdG9yc1tpXS5ub2RlKCktPmRlZmF1bHRFdmVudEhhbmRsZXIobV9ldmVu
dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2V2ZW50LT5kZWZhdWx0UHJldmVu
dGVkKCkpOworICAgICAgICAgICAgICAgIGlmIChtX2V2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiB9CiAKLWNvbnN0IEV2ZW50Q29udGV4dCogRXZlbnREaXNwYXRjaGVyOjp0b3BFdmVudENv
bnRleHQoKQoraW5saW5lIHZvaWQgUGVyRnJhbWVEaXNwYXRjaGVyOjpyZXNldFRhcmdldCgpCit7
CisgICAgbV9ldmVudC0+c2V0VGFyZ2V0KG1fd2luZG93RXZlbnRDb250ZXh0LnRhcmdldCgpKTsK
KyAgICBtX2V2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOworfQorCitpbmxpbmUgY29uc3QgRXZl
bnRDb250ZXh0KiBQZXJGcmFtZURpc3BhdGNoZXI6OnRvcEV2ZW50Q29udGV4dCgpCiB7CiAgICAg
cmV0dXJuIG1fYW5jZXN0b3JzLmlzRW1wdHkoKSA/IDAgOiAmbV9hbmNlc3RvcnMubGFzdCgpOwog
fQpAQCAtMzczLDcgKzM4MCwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW5UaGVTYW1lU2NvcGUo
U2hhZG93Um9vdCogc2hhZG93Um9vdCwgRXZlbnRUYXJnZXQqIHRhcmdldCkKICAgICByZXR1cm4g
dGFyZ2V0LT50b05vZGUoKSAmJiB0YXJnZXQtPnRvTm9kZSgpLT50cmVlU2NvcGUoKS0+cm9vdE5v
ZGUoKSA9PSBzaGFkb3dSb290OwogfQogCi1FdmVudERpc3BhdGNoQmVoYXZpb3IgRXZlbnREaXNw
YXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiBldmVudCwgU2hhZG93Um9v
dCogc2hhZG93Um9vdCwgRXZlbnRUYXJnZXQqIHRhcmdldCkKK2lubGluZSBzdGF0aWMgYm9vbCBl
dmVudFNob3VsZEJlU3RvcHBlZEF0Qm91bmRhcnkoRXZlbnQqIGV2ZW50KQoreworICAgIC8vIFdl
YktpdCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0YXJ0IGV2ZW50IHRvIGNyb3NzIHRoZSB0aGUgc2hh
ZG93IERPTSBib3VuZGFyeS4KKyAgICAvLyBDaGFuZ2luZyB0aGlzIGJyZWFrcyBleGlzdGluZyBz
aXRlcy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUyMTk1IGZvciBkZXRhaWxzLgorICAgIGNvbnN0IEF0b21pY1N0cmluZyBldmVudFR5cGUgPSBl
dmVudC0+dHlwZSgpOworICAgIHJldHVybiBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFib3J0
RXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZl
bnQKKyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAor
ICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudAorICAg
ICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudAorICAgICAg
ICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudAorICAgICAgICAg
ICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50OworfQorCitp
bmxpbmUgRXZlbnREaXNwYXRjaEJlaGF2aW9yIFBlckZyYW1lRGlzcGF0Y2hlcjo6ZGV0ZXJtaW5l
RGlzcGF0Y2hCZWhhdmlvcihTaGFkb3dSb290KiBzaGFkb3dSb290LCBFdmVudFRhcmdldCogdGFy
Z2V0KQogewogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFKFZJREVPKQogICAg
IC8vIFZpZGVvLW9ubHkgZnVsbCBzY3JlZW4gaXMgYSBtb2RlIHdoZXJlIHdlIHVzZSB0aGUgc2hh
ZG93IERPTSBhcyBhbiBpbXBsZW1lbnRhdGlvbgpAQCAtMzg4LDIxICs0MTAsMTYzIEBAIEV2ZW50
RGlzcGF0Y2hCZWhhdmlvciBFdmVudERpc3BhdGNoZXI6OmRldGVybWluZURpc3BhdGNoQmVoYXZp
b3IoRXZlbnQqIGV2ZW50LCBTCiAgICAgVU5VU0VEX1BBUkFNKHNoYWRvd1Jvb3QpOwogI2VuZGlm
CiAKLSAgICAvLyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBzZWxlY3RzdGFydCBldmVudCB0byBjcm9z
cyB0aGUgdGhlIHNoYWRvdyBET00gYm91bmRhcnkuCi0gICAgLy8gQ2hhbmdpbmcgdGhpcyBicmVh
a3MgZXhpc3Rpbmcgc2l0ZXMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MjE5NSBmb3IgZGV0YWlscy4KLSAgICBjb25zdCBBdG9taWNTdHJpbmcg
ZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsKLSAgICBpZiAoaW5UaGVTYW1lU2NvcGUoc2hhZG93
Um9vdCwgdGFyZ2V0KQotICAgICAgICAmJiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hYm9y
dEV2ZW50Ci0gICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmNoYW5nZUV2
ZW50Ci0gICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnJlc2V0RXZlbnQK
LSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzaXplRXZlbnQKLSAg
ICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQKLSAgICAg
ICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQKLSAgICAgICAg
ICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCkpCisgICAg
aWYgKGluVGhlU2FtZVNjb3BlKHNoYWRvd1Jvb3QsIHRhcmdldCkgJiYgZXZlbnRTaG91bGRCZVN0
b3BwZWRBdEJvdW5kYXJ5KG1fZXZlbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gU3RheUluc2lk
ZVNoYWRvd0RPTTsKLQogICAgIHJldHVybiBSZXRhcmdldEV2ZW50OwogfQogCitFdmVudERpc3Bh
dGNoZXI6OkV2ZW50RGlzcGF0Y2hlcihOb2RlKiBub2RlKQorICAgIDogbV9ub2RlKG5vZGUpCisj
aWZuZGVmIE5ERUJVRworICAgICwgbV9ldmVudERpc3BhdGNoZWQoZmFsc2UpCisjZW5kaWYKK3sK
KyAgICBBU1NFUlQobm9kZSk7Cit9CisKK2Jvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRv
cikKK3sKKyAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CisKKyAgICBFdmVu
dERpc3BhdGNoZXIgZGlzcGF0Y2hlcihub2RlKTsKKyAgICByZXR1cm4gbWVkaWF0b3ItPmRpc3Bh
dGNoRXZlbnQoJmRpc3BhdGNoZXIpOworfQorCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0
Y2hTY29wZWRFdmVudChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRv
cj4gbWVkaWF0b3IpCit7CisgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHRhcmdldCBoZXJlIGJl
Y2F1c2UgaXQgY2FuIGdvIGF3YXkgYnkgdGhlIHRpbWUgd2UgYWN0dWFsbHkgZmlyZSB0aGUgZXZl
bnQuCisgICAgbWVkaWF0b3ItPmV2ZW50KCktPnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3Rp
bmdTVkdUYXJnZXRSdWxlcyhub2RlKSk7CisgICAgU2NvcGVkRXZlbnRRdWV1ZTo6aW5zdGFuY2Uo
KS0+ZW5xdWV1ZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcihtZWRpYXRvcik7Cit9CisKK3ZvaWQgRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqIG5vZGUsIFBhc3NSZWZQ
dHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCwgYm9vbCBzZW5kTW91c2VFdmVudHMsIGJvb2wgc2hv
d1ByZXNzZWRMb29rKQoreworICAgIGlmIChub2RlLT5kaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIWdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzKQorICAgICAg
ICBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcyA9IG5ldyBIYXNoU2V0PE5vZGUqPjsK
KyAgICBlbHNlIGlmIChnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+Y29udGFpbnMo
bm9kZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVk
Q2xpY2tzLT5hZGQobm9kZSk7CisKKyAgICAvLyBzZW5kIG1vdXNlZG93biBhbmQgbW91c2V1cCBi
ZWZvcmUgdGhlIGNsaWNrLCBpZiByZXF1ZXN0ZWQKKyAgICBpZiAoc2VuZE1vdXNlRXZlbnRzKQor
ICAgICAgICBFdmVudERpc3BhdGNoZXIobm9kZSkuZGlzcGF0Y2hFdmVudChTaW11bGF0ZWRNb3Vz
ZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50LCBub2RlLT5kb2N1bWVu
dCgpLT5kZWZhdWx0VmlldygpLCB1bmRlcmx5aW5nRXZlbnQpKTsKKyAgICBub2RlLT5zZXRBY3Rp
dmUodHJ1ZSwgc2hvd1ByZXNzZWRMb29rKTsKKyAgICBpZiAoc2VuZE1vdXNlRXZlbnRzKQorICAg
ICAgICBFdmVudERpc3BhdGNoZXIobm9kZSkuZGlzcGF0Y2hFdmVudChTaW11bGF0ZWRNb3VzZUV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCwgbm9kZS0+ZG9jdW1lbnQoKS0+
ZGVmYXVsdFZpZXcoKSwgdW5kZXJseWluZ0V2ZW50KSk7CisgICAgbm9kZS0+c2V0QWN0aXZlKGZh
bHNlKTsKKworICAgIC8vIGFsd2F5cyBzZW5kIGNsaWNrCisgICAgRXZlbnREaXNwYXRjaGVyKG5v
ZGUpLmRpc3BhdGNoRXZlbnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCB1bmRlcmx5aW5n
RXZlbnQpKTsKKworICAgIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5yZW1vdmUo
bm9kZSk7Cit9CisKK2lubGluZSBzdGF0aWMgYm9vbCBzaG91bGRQcm9wYWdhdGVFdmVudEFjcm9z
c1NlYW1sZXNzSUZyYW1lcyhFdmVudCogZXZlbnQpCit7CisgICAgY29uc3QgQXRvbWljU3RyaW5n
IGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7CisgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSBl
dmVudHMuCisgICAgcmV0dXJuIGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCB8
fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmRibGNsaWNrRXZlbnQ7Cit9CisKK2lubGluZSB2
b2lkIEV2ZW50RGlzcGF0Y2hlcjo6cHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoUGFzc1JlZlB0cjxF
dmVudD4gcHJwRXZlbnQpCit7CisgICAgQVNTRVJUKG1fZGlzcGF0Y2hlcnMuaXNFbXB0eSgpKTsK
KyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CisgICAgTm9kZSogbm9kZSA9IG1f
bm9kZS5nZXQoKTsKKyAgICBib29sIHByb3BhZ2F0ZUV2ZW50QWNyb3NzU2VhbWxlc3NJRnJhbWVz
ID0gc2hvdWxkUHJvcGFnYXRlRXZlbnRBY3Jvc3NTZWFtbGVzc0lGcmFtZXMoZXZlbnQuZ2V0KCkp
OworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIG1fZGlzcGF0Y2hlcnMuYXBwZW5kKGFkb3B0
UHRyKG5ldyBQZXJGcmFtZURpc3BhdGNoZXIobm9kZSwgZXZlbnQpKSk7CisgICAgICAgIGlmICgh
bV9kaXNwYXRjaGVycy5sYXN0KCktPnNob3VsZENvbnRpbnVlVG9QYXJlbnREb2N1bWVudCgpIHx8
ICFwcm9wYWdhdGVFdmVudEFjcm9zc1NlYW1sZXNzSUZyYW1lcykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgSFRNTElGcmFtZUVsZW1lbnQqIHBhcmVudElGcmFtZSA9IG5vZGUtPmRvY3Vt
ZW50KCktPnNlYW1sZXNzUGFyZW50SUZyYW1lKCk7CisgICAgICAgIGlmICghcGFyZW50SUZyYW1l
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBub2RlID0gcGFyZW50SUZyYW1lOworICAg
ICAgICBldmVudCA9IGV2ZW50LT5jbG9uZUZvcihwYXJlbnRJRnJhbWUpOworICAgIH0KK30KKwor
dm9pZCBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVu
dD4gcHJwRXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCit7
CisgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OworICAgIGlmIChtX2Rpc3BhdGNo
ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoZXZlbnQpOwor
ICAgIEFTU0VSVCghbV9kaXNwYXRjaGVycy5pc0VtcHR5KCkpOworICAgIG1fZGlzcGF0Y2hlcnMu
bGFzdCgpLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KHBycFJlbGF0ZWRUYXJnZXQpOworfQorCitib29s
IEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVu
dCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKCFtX2V2ZW50RGlzcGF0Y2hlZCk7Cisg
ICAgbV9ldmVudERpc3BhdGNoZWQgPSB0cnVlOworI2VuZGlmCisgICAgUmVmUHRyPEV2ZW50PiBl
dmVudCA9IHBycEV2ZW50OworICAgIGlmIChtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSkKKyAgICAg
ICAgcHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoZXZlbnQpOworICAgIEFTU0VSVCghbV9kaXNwYXRj
aGVycy5pc0VtcHR5KCkpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29r
aWUgPSBtX2Rpc3BhdGNoZXJzWzBdLT53aWxsRGlzcGF0Y2hFdmVudCgpOworCisgICAgZmlyZURp
c3BhdGNoZXJzKCk7CisgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gZmlyZURpc3BhdGNoZXJz
RGVmYXVsdEV2ZW50SGFuZGxlcigpOworCisgICAgLy8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQg
ZGlzcGF0Y2gsIHRoZSBldmVudCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCisgICAgLy8gb3V0ZXJt
b3N0IHNoYWRvdyBET00gYm91bmRhcnkuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Rp
c3BhdGNoZXJzLnNpemUoKTsgKytpKQorICAgICAgICBtX2Rpc3BhdGNoZXJzW2ldLT5yZXNldFRh
cmdldCgpOworCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50
KGNvb2tpZSk7CisgICAgcmV0dXJuICFkZWZhdWx0UHJldmVudGVkOworfQorCitpbmxpbmUgdm9p
ZCBFdmVudERpc3BhdGNoZXI6OmZpcmVEaXNwYXRjaGVycygpCit7CisgICAgQVNTRVJUKCFtX2Rp
c3BhdGNoZXJzLmlzRW1wdHkoKSk7CisgICAgc2l6ZV90IHNpemUgPSBtX2Rpc3BhdGNoZXJzLnNp
emUoKTsKKyAgICBmb3IgKGludCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAg
IGlmIChtX2Rpc3BhdGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50UHJlUHJvY2VzcygpID09IERvbmVE
aXNwYXRjaGluZworICAgICAgICAgICAgICAgIHx8IG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNo
RXZlbnRBdENhcHR1cmluZygpID09IERvbmVEaXNwYXRjaGluZykgeworICAgICAgICAgICAgZmly
ZURpc3BhdGNoZXJzUG9zdFByb2Nlc3MoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAg
ICAgaWYgKG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRBdFRhcmdldCgpID09IERvbmVE
aXNwYXRjaGluZworICAgICAgICAgICAgICAgIHx8IG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNo
RXZlbnRBdEJ1YmJsaW5nKCkgPT0gRG9uZURpc3BhdGNoaW5nKSB7CisgICAgICAgICAgICBmaXJl
RGlzcGF0Y2hlcnNQb3N0UHJvY2VzcyhpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBtX2Rpc3BhdGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoKTsK
KyAgICB9Cit9CisKK2lubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNoZXJz
UG9zdFByb2Nlc3MoaW50IHN0YXJ0aW5nRnJhbWUpCit7CisgICAgc2l6ZV90IHNpemUgPSBtX2Rp
c3BhdGNoZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRpbmdGcmFtZTsgaSA8
IHNpemU7ICsraSkKKyAgICAgICAgbV9kaXNwYXRjaGVyc1tpXS0+ZGlzcGF0Y2hFdmVudFBvc3RQ
cm9jZXNzKCk7Cit9CisKK2lubGluZSBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNo
ZXJzRGVmYXVsdEV2ZW50SGFuZGxlcigpCit7CisgICAgc2l6ZV90IHNpemUgPSBtX2Rpc3BhdGNo
ZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAg
ICAgICBjb25zdCBFdmVudCogZXZlbnQgPSBtX2Rpc3BhdGNoZXJzW2ldLT5ldmVudCgpOworICAg
ICAgICBpZiAoZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBtX2Rpc3BhdGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50RGVmYXVsdEhhbmRs
ZXIoKTsKKyAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKSB7CisgICAgICAgICAg
ICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghZXZlbnQtPmJ1YmJsZXMoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggNWJmZWFkMGQwZTZjYmUwYjgwMDM0
ZDQyMjVhNjBlMzI0ZGZhYzgzOS4uODg1MDgwMWVkOTVmYWIyNGExMzg0MDYwNWJhMGNkY2ZkZTQ3
MzNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApAQCAtMjcsODUgKzI3LDQx
IEBACiAjZGVmaW5lIEV2ZW50RGlzcGF0Y2hlcl9oCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVu
dDsKLWNsYXNzIEV2ZW50Q29udGV4dDsKIGNsYXNzIEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjsKIGNs
YXNzIEV2ZW50VGFyZ2V0OwotY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgTm9kZTsKLWNsYXNzIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudDsKLWNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKLWNsYXNzIFNo
YWRvd1Jvb3Q7Ci1jbGFzcyBUcmVlU2NvcGU7Ci1jbGFzcyBXaW5kb3dFdmVudENvbnRleHQ7Ci0K
LWVudW0gRXZlbnREaXNwYXRjaEJlaGF2aW9yIHsKLSAgICBSZXRhcmdldEV2ZW50LAotICAgIFN0
YXlJbnNpZGVTaGFkb3dET00KLX07Ci0KLWVudW0gRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiB7
Ci0gICAgQ29udGludWVEaXNwYXRjaGluZywKLSAgICBEb25lRGlzcGF0Y2hpbmcKLX07Ci0KLWNs
YXNzIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyIHsKLXB1YmxpYzoKLSAgICBFdmVudFJlbGF0
ZWRUYXJnZXRBZGp1c3RlcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0
ZWRUYXJnZXQpOwotICAgIHZvaWQgYWRqdXN0KFZlY3RvcjxFdmVudENvbnRleHQ+Jik7Ci1wcml2
YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxUcmVlU2NvcGUqLCBFdmVudFRhcmdldCo+IFJlbGF0
ZWRUYXJnZXRNYXA7Ci0gICAgRXZlbnRUYXJnZXQqIGZpbmRSZWxhdGVkVGFyZ2V0KFRyZWVTY29w
ZSopOwotCi0gICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV9yZWxh
dGVkVGFyZ2V0OwotICAgIFJlbGF0ZWRUYXJnZXRNYXAgbV9yZWxhdGVkVGFyZ2V0TWFwOwotfTsK
K2NsYXNzIFBlckZyYW1lRGlzcGF0Y2hlcjsKIAogY2xhc3MgRXZlbnREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaEV2ZW50KE5vZGUqLCBQYXNzUmVmUHRyPEV2
ZW50RGlzcGF0Y2hNZWRpYXRvcj4pOwogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2NvcGVkRXZl
bnQoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPik7Ci0KICAgICBzdGF0
aWMgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50PiB1
bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29sIHNob3dQcmVzc2VkTG9v
ayk7CiAKKyAgICB2b2lkIGFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudD4sIFBh
c3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQpOwogICAgIGJvb2wgZGlzcGF0Y2hF
dmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgdm9pZCBhZGp1c3RSZWxhdGVkVGFyZ2V0KEV2
ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCk7Ci0gICAgTm9k
ZSogbm9kZSgpIGNvbnN0OworICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUu
Z2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBFdmVudERpc3BhdGNoZXIoTm9kZSopOworICAgIHZv
aWQgcHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZvaWQg
ZmlyZURpc3BhdGNoZXJzKCk7CisgICAgdm9pZCBmaXJlRGlzcGF0Y2hlcnNQb3N0UHJvY2Vzcyhp
bnQgYnJvd3NpbmdDb250ZXh0TnVtYmVyKTsKKyAgICBib29sIGZpcmVEaXNwYXRjaGVyc0RlZmF1
bHRFdmVudEhhbmRsZXIoKTsKIAotICAgIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciBkZXRlcm1pbmVE
aXNwYXRjaEJlaGF2aW9yKEV2ZW50KiwgU2hhZG93Um9vdCosIEV2ZW50VGFyZ2V0Kik7Ci0KLSAg
ICB2b2lkIGVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50Kik7Ci0gICAgY29uc3QgRXZlbnRDb250
ZXh0KiB0b3BFdmVudENvbnRleHQoKTsKLQotICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24g
ZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MoUGFzc1JlZlB0cjxFdmVudD4sIHZvaWQqJiBwcmVEaXNw
YXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7Ci0gICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBk
aXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoUGFzc1JlZlB0cjxFdmVudD4sIFdpbmRvd0V2ZW50Q29u
dGV4dCYpOwotICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVudEF0VGFy
Z2V0KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRp
c3BhdGNoRXZlbnRBdEJ1YmJsaW5nKFBhc3NSZWZQdHI8RXZlbnQ+LCBXaW5kb3dFdmVudENvbnRl
eHQmKTsKLSAgICB2b2lkIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcyhQYXNzUmVmUHRyPEV2ZW50
Piwgdm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOwotCi0gICAgVmVjdG9yPEV2
ZW50Q29udGV4dD4gbV9hbmNlc3RvcnM7CisgICAgVmVjdG9yPE93blB0cjxQZXJGcmFtZURpc3Bh
dGNoZXI+ID4gbV9kaXNwYXRjaGVyczsKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwotICAgIFJl
ZlB0cjxGcmFtZVZpZXc+IG1fdmlldzsKLSAgICBib29sIG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQ7
CiAjaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgbV9ldmVudERpc3BhdGNoZWQ7CiAjZW5kaWYKIH07
CiAKLWlubGluZSBOb2RlKiBFdmVudERpc3BhdGNoZXI6Om5vZGUoKSBjb25zdAotewotICAgIHJl
dHVybiBtX25vZGUuZ2V0KCk7Ci19Ci0KIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVu
dC5jcHAKaW5kZXggOWVkZGE3MWVhYmUxNDIxOWE3MmMxNWZkYTUyYjZhZDUxYmUwZDkxMC4uMmI4
ZmY5OTk5NWQ5NTk5NjExMTViYTU0ZDM5NWQ2OTc1MzUyYTJkZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3Vz
ZUV2ZW50LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxJ
RnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTE0Nyw2ICsxNDgsMzQgQEAgTm9kZSogTW91c2VFdmVudDo6ZnJv
bUVsZW1lbnQoKSBjb25zdAogICAgIHJldHVybiB0YXJnZXQoKSA/IHRhcmdldCgpLT50b05vZGUo
KSA6IDA7CiB9CiAKK2lubGluZSBzdGF0aWMgaW50IGFkanVzdGVkQ2xpbmV0WChpbnQgaW5uZXJD
bGllbnRYLCBIVE1MSUZyYW1lRWxlbWVudCogaWZyYW1lLCBGcmFtZVZpZXcqIGZyYW1lVmlldykK
K3sKKyAgICByZXR1cm4gaWZyYW1lLT5vZmZzZXRMZWZ0KCkgLSBmcmFtZVZpZXctPnNjcm9sbFgo
KSArIGlubmVyQ2xpZW50WDsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgYWRqdXN0ZWRDbGluZXRZ
KGludCBpbm5lckNsaWVudFksIEhUTUxJRnJhbWVFbGVtZW50KiBpZnJhbWUsIEZyYW1lVmlldyog
ZnJhbWVWaWV3KQoreworICAgIHJldHVybiBpZnJhbWUtPm9mZnNldFRvcCgpIC0gZnJhbWVWaWV3
LT5zY3JvbGxZKCkgKyBpbm5lckNsaWVudFk7Cit9CisKK1Bhc3NSZWZQdHI8RXZlbnQ+IE1vdXNl
RXZlbnQ6OmNsb25lRm9yKEhUTUxJRnJhbWVFbGVtZW50KiBpZnJhbWUpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGlmcmFtZSk7CisgICAgUmVmUHRyPE1vdXNlRXZlbnQ+IGNsb25lZE1vdXNlRXZlbnQg
PSBNb3VzZUV2ZW50OjpjcmVhdGUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBpZnJhbWUtPmRvY3Vt
ZW50KCktPmZyYW1lKCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZSA/IGZyYW1l
LT52aWV3KCkgOiAwOworICAgIGNsb25lZE1vdXNlRXZlbnQtPmluaXRNb3VzZUV2ZW50KHR5cGUo
KSwgYnViYmxlcygpLCBjYW5jZWxhYmxlKCksCisgICAgICAgICAgICBpZnJhbWUtPmRvY3VtZW50
KCktPmRlZmF1bHRWaWV3KCksCisgICAgICAgICAgICBkZXRhaWwoKSwgc2NyZWVuWCgpLCBzY3Jl
ZW5ZKCksCisgICAgICAgICAgICBmcmFtZVZpZXcgPyBhZGp1c3RlZENsaW5ldFgoY2xpZW50WCgp
LCBpZnJhbWUsIGZyYW1lVmlldykgOiAwLAorICAgICAgICAgICAgZnJhbWVWaWV3ID8gYWRqdXN0
ZWRDbGluZXRZKGNsaWVudFkoKSwgaWZyYW1lLCBmcmFtZVZpZXcpIDogMCwKKyAgICAgICAgICAg
IGN0cmxLZXkoKSwgYWx0S2V5KCksIHNoaWZ0S2V5KCksIG1ldGFLZXkoKSwKKyAgICAgICAgICAg
IGJ1dHRvbigpLAorICAgICAgICAgICAgLy8gTnVsbGlmaWVzIHJlbGF0ZWRUYXJnZXQuCisgICAg
ICAgICAgICAwKTsKKyAgICByZXR1cm4gY2xvbmVkTW91c2VFdmVudC5yZWxlYXNlKCk7Cit9CisK
IFBhc3NSZWZQdHI8U2ltdWxhdGVkTW91c2VFdmVudD4gU2ltdWxhdGVkTW91c2VFdmVudDo6Y3Jl
YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmll
dz4gdmlldywgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50KQogewogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU2ltdWxhdGVkTW91c2VFdmVudChldmVudFR5cGUsIHZpZXcsIHVuZGVy
bHlpbmdFdmVudCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgKaW5kZXggMDg2Mzg5M2NlNzJjZDE5
ZWMzNTc5ZDk4MjE3ZGU0YWM1ZjUyMTFkNS4uNTdiODk1ODQ5MjIwNWFlYTRlZjllMWVmMDI4MDJh
YThmZTVkMjdlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCkBAIC04Myw2ICs4Myw4IEBAIGNs
YXNzIFBsYXRmb3JtTW91c2VFdmVudDsKICAgICAgICAgdmlydHVhbCBib29sIGlzRHJhZ0V2ZW50
KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7CiAKKyAgICAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50PiBjbG9uZUZvcihIVE1MSUZyYW1lRWxlbWVudCopIGNv
bnN0OworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxB
YnN0cmFjdFZpZXc+LAogICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWwsIGludCBzY3JlZW5Y
LCBpbnQgc2NyZWVuWSwgaW50IHBhZ2VYLCBpbnQgcGFnZVksCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDgyMDM4NzQ3OWNh
MWExYjRkMmNjOTZhMzkwYmRjNTZkZGUzZDRkNC4uNzBhZTExMzY1ZGQ5YTQ1NGM5MWE0M2MzNzM1
OTg1N2Q4ZDg2OGNkYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA4LTA5ICBIYXlhdG8g
SXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBTdXBwb3J0IGFuIGV2ZW50IHBy
b3BhZ2F0aW9uIGFjcm9zcyBzZWFtbGVzcyBpZnJhbWVzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyOTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZnJhbWVzL3NlYW1sZXNzL3Jlc291cmNl
cy9maXJlLWV2ZW50cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZyYW1lcy9zZWFtbGVz
cy9zZWFtbGVzcy1ldmVudHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zy
YW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMuaHRtbDogQWRkZWQuCisKIDIwMTItMDgtMTQg
IENocmlzIEV2YW5zICA8Y2V2YW5zQGdvb2dsZS5jb20+CiAKICAgICAgICAgSGFuZGxlIHRoZSBY
UGF0aCAvIChyb290KSBvcGVyYXRvciBjb3JyZWN0bHkgZm9yIG5vZGVzIHRoYXQgYXJlbid0IGF0
dGFjaGVkIHRvIHRoZSBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJh
bWVzL3NlYW1sZXNzL3Jlc291cmNlcy9maXJlLWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9mcmFtZXMvc2VhbWxlc3MvcmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjNlNjI3MDNjN2NlMTE1MWE1YmU4NGIyODBmZTEzZWM0M2QzODIwNQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3Jlc291cmNlcy9maXJlLWV2ZW50
cy5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4K
KzxkaXYgaWQ9J3RhcmdldCc+PC9kaXY+Cis8c2NyaXB0Pgord2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbihldmVudCkgeworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgdmFyIGV2ZW50cyA9IFsnYWJvcnQnLCAn
c2VsZWN0JywgJ2NoYW5nZScsICdjbGljaycsICdkYmxjbGljaycsICdyZXNldCcsICdyZXNpemUn
LCAnc2Nyb2xsJywgJ3NlbGVjdHN0YXJ0J107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVu
dHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZl
bnQoJ1VJRXZlbnQnKTsKKyAgICAgICAgZXZlbnQuaW5pdEV2ZW50KGV2ZW50c1tpXSwgdHJ1ZSwg
ZmFsc2UpOworICAgICAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgfQorICAg
IHdpbmRvdy50b3AucG9zdE1lc3NhZ2UoJ0RPTkUnLCAnKicpOworfSwgZmFsc2UpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1l
cy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFz
dC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mMWM2ZWE1OGIwYTQ0ZjA3NTVlOGU2MjIzZDVlYmI5YTRjNTM2NzQxCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDI0IEBACitUZXN0IHRoYXQgZXZlbnQgcHJvcGFnYXRlcyBh
Y3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKworICBhYm9ydAorCisgIHNlbGVjdAorCisgIGNoYW5n
ZQorCisgIGNsaWNrCisgICAgIEBzZWFtbGVzcy1pZnJhbWUgKHRhcmdldDogc2VhbWxlc3MtaWZy
YW1lKQorICAgICBAYm9keSAodGFyZ2V0OiBzZWFtbGVzcy1pZnJhbWUpCisKKyAgZGJsY2xpY2sK
KyAgICAgQHNlYW1sZXNzLWlmcmFtZSAodGFyZ2V0OiBzZWFtbGVzcy1pZnJhbWUpCisgICAgIEBi
b2R5ICh0YXJnZXQ6IHNlYW1sZXNzLWlmcmFtZSkKKworICByZXNldAorCisgIHJlc2l6ZQorCisg
IHNjcm9sbAorCisgIHNlbGVjdHN0YXJ0CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNzLWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9m
cmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNmODMxMmNi
YzFmNTFmZmRmOWU3YTJjZjkyMWY1NWM5NzMyZjZhNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNzLWV2ZW50cy5odG1sCkBAIC0wLDAg
KzEsNzEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keSBpZD0nYm9keSc+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+CitkZWJ1ZygiVGVzdCB0aGF0IGV2ZW50IHByb3BhZ2F0ZXMgYWNyb3NzIHNlYW1sZXNz
IGlmcmFtZXMuIikKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5k
dW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBl
dmVudHMgPSBbJ2Fib3J0JywgJ3NlbGVjdCcsICdjaGFuZ2UnLCAnY2xpY2snLCAnZGJsY2xpY2sn
LCAncmVzZXQnLCAncmVzaXplJywgJ3Njcm9sbCcsICdzZWxlY3RzdGFydCddOwordmFyIGV2ZW50
UmVjb3JkcyA9IHt9OworCitmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkK
KyAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRzW2ldLCByZWNvcmRFdmVu
dCk7CisKK2Z1bmN0aW9uIGlmcmFtZUxvYWRlZChpZnJhbWUpIHsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVu
ZXIoZXZlbnRzW2ldLCByZWNvcmRFdmVudCk7CisgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cucG9z
dE1lc3NhZ2UoJ2ZpcmUnLCAnKicpOworfQorCit2YXIgbWVzc2FnZVJlY2VpdmVkQ291bnQgPSAw
OworCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uKGV2ZW50KSB7
CisgICAgaWYgKCsrbWVzc2FnZVJlY2VpdmVkQ291bnQgPT0gMikgIHsKKyAgICAgICAgZHVtcERp
c3BhdGNoZWRFdmVudCgpOworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAg
ICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9LCBmYWxzZSk7CisKK2Z1bmN0
aW9uIHJlY29yZEV2ZW50KGV2ZW50KQoreworICAgIHZhciBldmVudFR5cGUgPSBldmVudC50eXBl
CisgICAgaWYgKCFldmVudFJlY29yZHNbZXZlbnRUeXBlXSkKKyAgICAgICAgZXZlbnRSZWNvcmRz
W2V2ZW50VHlwZV0gPSBbXTsKKyAgICB2YXIgZXZlbnRTdHJpbmcgPSAnJzsKKyAgICBpZiAoZXZl
bnQuY3VycmVudFRhcmdldCkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyBAJyArIGV2ZW50LmN1
cnJlbnRUYXJnZXQuaWQ7CisgICAgaWYgKGV2ZW50LnRhcmdldCkKKyAgICAgICAgZXZlbnRTdHJp
bmcgKz0gJyAodGFyZ2V0OiAnICsgZXZlbnQudGFyZ2V0LmlkICsgJyknOworICAgIGlmIChldmVu
dC5yZWxhdGVkVGFyZ2V0KQorICAgICAgICBldmVudFN0cmluZyArPSAnIChyZWxhdGVkOiAnICsg
ZXZlbnQucmVsYXRlZFRhcmdldC5pZCArICcpJzsKKyAgICBpZiAoZXZlbnQuZXZlbnRQaGFzZSA9
PSAxKQorICAgICAgICBldmVudFN0cmluZyArPSAnKGNhcHR1cmluZyBwaGFzZSknOworICAgIGlm
IChldmVudC50YXJnZXQgJiYgZXZlbnQuY3VycmVudFRhcmdldCAmJiBldmVudC50YXJnZXQuaWQg
PT0gZXZlbnQuY3VycmVudFRhcmdldC5pZCkKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50LmV2ZW50
UGhhc2UiLCAiMiIsIHRydWUpOworICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdLnB1c2goZXZl
bnRTdHJpbmcpOworfQorCitmdW5jdGlvbiBkdW1wRGlzcGF0Y2hlZEV2ZW50KCkKK3sKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgZXZl
bnRUeXBlID0gZXZlbnRzW2ldOworICAgICAgICBkZWJ1ZygnXG4gICcgKyBldmVudFR5cGUpOwor
ICAgICAgICB2YXIgcmVjb3JkID0gZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0gfHwgW107CisgICAg
ICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVjb3JkLmxlbmd0aDsgKytqKQorICAgICAgICAgICAg
ZGVidWcoJyAgICAnICsgcmVjb3JkW2pdKQorICAgIH0KK30KKworPC9zY3JpcHQ+Cis8ZGl2IGlk
PSJjb250YWluZXIiPgorICAgIDxpZnJhbWUgaWQ9J3NlYW1sZXNzLWlmcmFtZScgb25sb2FkPSdp
ZnJhbWVMb2FkZWQodGhpcyknIHNyYz0ncmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwnIHNlYW1s
ZXNzPSd0cnVlJz48L2lmcmFtZT4KKyAgICA8aWZyYW1lIGlkPSdub24tc2VhbWxlc3MtaWZyYW1l
JyBvbmxvYWQ9J2lmcmFtZUxvYWRlZCh0aGlzKScgc3JjPSdyZXNvdXJjZXMvZmlyZS1ldmVudHMu
aHRtbCc+PC9pZnJhbWU+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159864</attachid>
            <date>2012-08-21 23:13:28 -0700</date>
            <delta_ts>2012-08-22 17:43:44 -0700</delta_ts>
            <desc>Sync to ToT.</desc>
            <filename>bug-91290-20120822151326.patch</filename>
            <type>text/plain</type>
            <size>45928</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MDgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjBlYTNkMzNjYmU3ZjU0
OTc2Nzk3NzY5MzE5NTcyYzA5OGVhODlhYi4uNzAxY2YxMzNmN2YzMjhjNWU1MDFmNzQ3ZTJiODM5
YmZmMDhlZTdkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAxMi0wOC0yMCAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVu
dCBwcm9wYWdhdGlvbiBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjkwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVudCBwcm9wYWdhdGlv
biBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgQXMgdGhlIGZpcnN0IHN0ZXAsICdj
bGljaycgYW5kICdkYmxjbGljaycgZXZlbnRzIGhhdmUgYmVlbiBzdXBwb3J0ZWQuCisKKyAgICAg
ICAgVG8gc3VwcG9ydCBhbiBldmVudCBkaXNwYXRjaGluZyBhY3Jvc3MgYnJvd3NpbmcgY29udGV4
dCwgSSd2ZQorICAgICAgICBpbnRyb2R1Y2VkIGEgRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdD
b250ZXh0LCB3aG9zZSByb2xlIGlzIHNpbWlsYXIgdG8KKyAgICAgICAgYW4gRXZlbnREaXNwYXRj
aGVyIHByaW9yIHRvIHRoaXMgcGF0Y2guIEJ1dCB0aGUgaW50ZXJuYWwKKyAgICAgICAgc3RydWN0
dXJlIHdhcyBzaWduaWZpY2FudGx5IGNoYW5nZWQgc28gdGhhdCBpdCBjYW4gYmUgbWFuYWdlZCBm
cm9tIG91dHNpZGUuCisKKyAgICAgICAgQW4gRXZlbnREaXNwYXRjaGVyIG5vdyBhY3RzIGFzIGlm
IGl0IHdlcmUgYSBtZXRhIGRpc3BhdGNoZXIgd2hpY2gKKyAgICAgICAgZGVsZWdhdGVzIGV2ZW50
IGRpc3BhdGNoaW5nIHRvIGVhY2ggZGlzcGF0Y2hlciBpbiBlYWNoIGJyb3dzaW5nCisgICAgICAg
IGNvbnRleHQuIEl0IG1hbmFnZXMgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIG9mIGRpc3BhdGNoZXJz
LgorCisgICAgICAgIEFjY29yZGluZyB0byB0aGUgZGlzY3Vzc2lvbiBvZiBidWcgOTEyOTAsIHdo
YXR3ZyBtaWdodCBzcGVjCisgICAgICAgIHdoYXRldmVyIFdlYktpdCBpbXBsZW1lbnRzLiAgU28g
bGV0IG1lIGV4cGxhaW4gaG93IGV2ZW50CisgICAgICAgIGRpc3BhdGNoaW5nIHdvcmtzIGFjcm9z
cyBzZWFtbGVzcyBpZnJhbWVzIGJyaWVmbHkgaGVyZToKKworICAgICAgICAxLiBBbmNlc3RvciBu
b2RlcyBvZiBldmVudCBhcmUgY2FsY3VsYXRlZCBhcyB1c3VhbCwgYnV0IGlmIHRoZQorICAgICAg
ICAgICBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHQgaXMgdGhhdCBvZiBhIHNlYW1sZXNzIGlmcmFt
ZSwgY29udGludWUgdG8KKyAgICAgICAgICAgdHJhdmVyc2luZyBhbmNlc3RvcnMgb2YgdGhlIHBh
cmVudCBicm93c2luZyBjb250ZXh0LgorICAgICAgICAyLiBGb3IgZWFjaCBicm93c2luZyBjb250
ZXh0LCBjbG9uZSB0aGUgZXZlbnQgb2JqZWN0LiBJbiB0aGUgbGF0ZXIKKyAgICAgICAgICAgZXZl
bnQgZGlzcGF0Y2hpbmcsIHVzZSB0aGUgY2xvbmVkIGV2ZW50IG9iamVjdCBpbiBlYWNoIGJyb3dz
aW5nCisgICAgICAgICAgIGNvbnRleHQgc28gdGhhdCB3ZSBjYW4gaXNvbGF0ZSBldmVudCBvYmpl
Y3RzLgorICAgICAgICAzLiBUYXJnZXQgb2YgdGhlIGNsb25lZCBldmVudCBvYmplY3RzIGlzIHJl
dGFyZ2V0ZWQgdG8gaWZyYW1lJ3Mgb3duZXIgZWxlbWVudC4KKyAgICAgICAgNC4gUHJvY2VzcyBj
YXB0dXJpbmcsIHRhcmdldCBhbmQgYnViYmxpbmcgcGhhc2VzIGFzIGlmIHRoZXJlIHdhcworICAg
ICAgICAgICBvbmUgYmlnICdhbmNlc3RvcicgY2hhaW4uICBUaGF0IG1lYW5zIGlmIGFuIGV2ZW50
IGxpc3RlbmVyIGluIGFuCisgICAgICAgICAgIHVwcGVyIGJyb3dzaW5nIGNvbnRleHQgY2FsbHMg
c3RvcFByb3BhZ2F0aW9uKCkgYXQgY2FwdHVyaW5nCisgICAgICAgICAgIHBoYXNlLCBuZXN0ZWQg
YnJvd3NpbmcgY29udGV4dHMgbmV2ZXIgcmVjZWl2ZSBhbiBldmVudC4KKyAgICAgICAgNS4gVW5s
ZXNzIGRlZmF1bHQgaXMgcHJldmVudGVkLCB0cnkgdG8gY2FsbCBkZWZhdWx0IGV2ZW50IGhhbmRs
ZXIKKyAgICAgICAgICAgc3RhcnRpbmcgZnJvbSB0aGUgYm90dG9tIG5vZGUgb2YgYW5jZXN0b3Jz
IHVudGlsIGEgZGVmYXVsdCBpcworICAgICAgICAgICBoYW5kbGVkLgorCisgICAgICAgIEV4YW1w
bGU6ICBTdXBwb3NlIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBIVE1MIGFuZCBuZXN0ZWQgc2VhbWxl
c3MgaWZyYW1lcy4gVGhlcmUgYXJlIHRocmVlIGJyb3dzaW5nIGNvbnRleHRzLgorCisgICAgICAg
IDEpIGRvYy5odG1sOgorICAgICAgICAgICA8QT4KKyAgICAgICAgICAgICAgPEI+CisgICAgICAg
ICAgICAgICAgPGlmcmFtZSBpZD1DIHNlYW1sZXNzIHNyYz0iaWZyYW1lMS5odG1sIj4KKworICAg
ICAgICAyKSBpZnJhbWUxLmh0bWw6CisgICAgICAgICAgIDxEPgorICAgICAgICAgICAgICA8RT4K
KyAgICAgICAgICAgICAgICA8aWZyYW1lIGlkPUYgc2VhbWxlc3Mgc3JjPSJpZnJhbWUyLmh0bWwi
PgorCisgICAgICAgIDMpIGlmcmFtZTIuaHRtbDoKKyAgICAgICAgICAgPEc+CisgICAgICAgICAg
ICAgIDxIPgorCisgICAgICAgIElmIGEgY2xpY2snIGV2ZW50IGlzIGZpcmVkIG9uIG5vZGUgRiwg
d2Ugd2lsbCBkaXNwYXRjaCBldmVudHMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKyAgICAgICAg
ICAxLiBBIChAY2FwdHVyZSkgKHRhcmdldCA9PSBDKQorICAgICAgICAgIDIuIEIgKEBjYXB0dXJl
KSAodGFyZ2V0ID09IEMpCisgICAgICAgICAgMy4gRCAoQGNhcHR1cmUpICh0YXJnZXQgPT0gRikK
KyAgICAgICAgICA0LiBFIChAY2FwdHVyZSkgKHRhcmdldCA9PSBGKQorICAgICAgICAgIDUuIEcg
KEBjYXB0dXJlKSAodGFyZ2V0ID09IEgpCisgICAgICAgICAgNi4gSCAoQHRhcmdldCkgICh0YXJn
ZXQgPT0gSCkKKyAgICAgICAgICA3LiBHIChAYnViYmxlKSAgKHRhcmdldCA9PSBIKQorICAgICAg
ICAgIDguIEYgKEB0YXJnZXQpICAodGFyZ2V0ID09IEYpCisgICAgICAgICAgOS4gRSAoQGJ1YmJs
ZSkgICh0YXJnZXQgPT0gRikKKyAgICAgICAgICA5LiBEIChAYnViYmxlKSAgKHRhcmdldCA9PSBG
KQorICAgICAgICAgMTAuIEMgKEB0YXJnZXQpICAodGFyZ2V0ID09IEMpCisgICAgICAgICAxMS4g
QiAoYnViYmxlKSAgICh0YXJnZXQgPT0gQykKKyAgICAgICAgIDEyLiBBIChidWJibGUpICAgKHRh
cmdldCA9PSBDKQorCisgICAgICAgIFRlc3Q6IGZhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNz
LWV2ZW50cy5odG1sCisKKyAgICAgICAgKiBkb20vRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnQ6OmNsb25lRm9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9F
dmVudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFdmVudCk6CisgICAgICAgICog
ZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChFdmVudFJlbGF0ZWRUYXJnZXRBZGp1
c3Rlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBlckZyYW1lRGlzcGF0Y2hlcik6
CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6Om5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpldmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZXJGcmFtZURpc3BhdGNoZXI6OnNob3VsZENvbnRpbnVlVG9QYXJlbnREb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpQZXJGcmFtZURpc3BhdGNoZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpjYWx1Y3VsYXRlRXZlbnRB
bmNlc3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjp3aWxsRGlz
cGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6OmRpc3Bh
dGNoRXZlbnRQcmVQcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1lRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1l
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBl
ckZyYW1lRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50RGVmYXVsdEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpyZXNldFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6OnRvcEV2ZW50Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpldmVudFNob3VsZEJlU3RvcHBlZEF0Qm91bmRhcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRjaEJl
aGF2aW9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRj
aGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNpbXVsYXRlZENs
aWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFByb3BhZ2F0ZUV2ZW50QWNyb3NzU2VhbWxl
c3NJRnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6cHJlcGFyZUV2
ZW50RGlzcGF0Y2hlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjphZGp1
c3RSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6Zmly
ZURpc3BhdGNoZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURp
c3BhdGNoZXJzUG9zdFByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVy
OjpmaXJlRGlzcGF0Y2hlcnNEZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBkb20vRXZl
bnREaXNwYXRjaGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV2ZW50RGlzcGF0
Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6Om5vZGUpOgorICAgICAg
ICAqIGRvbS9Nb3VzZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkQ2xpbmV0
WCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkQ2xpbmV0
WSk6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50OjpjbG9uZUZvcik6CisgICAgICAgICog
ZG9tL01vdXNlRXZlbnQuaDoKKyAgICAgICAgKE1vdXNlRXZlbnQpOgorCiAyMDEyLTA4LTIwICBB
ZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbW92ZSByZWR1bmRh
bnQgVE9VQ0hfTElTVEVORVIgZXZlbnQgdHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
QXNzZXJ0aW9ucy5oIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oCmluZGV4IDgwZDUxZDYw
NTYzYWUzYzFlMjk0NzcwMWI3MDZjYzQ4ODQzOGI5ODQuLjhmZDBiNDZkMzFmM2UyYTliN2U5YjIx
ZGMwZjdkZTAyNjQ5NjMwOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmgKQEAgLTM5Myw0ICszOTMsMTMgQEAg
c3RhdGljIGlubGluZSB2b2lkIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpCiAjZGVmaW5lIFVO
UkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpIEFTU0VSVF9OT1RfUkVBQ0hFRCgpCiAjZW5kaWYKIAor
Ly8gRm9yIEFTU0VSVCBpbiBib3RoIHJlbGVhc2UvZGVidWcgIG1vZGUuCisjZGVmaW5lIE1ZX0FT
U0VSVChhc3NlcnRpb24pIGRvIFwKKyAgICBpZiAoIShhc3NlcnRpb24pKSB7IFwKKyAgICAgICAg
V1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlf
RlVOQ1RJT04sICNhc3NlcnRpb24pOyBcCisgICAgICAgIENSQVNIKCk7IFwKKyAgICB9IFwKK3do
aWxlICgwKQorCisKICNlbmRpZiAvKiBXVEZfQXNzZXJ0aW9uc19oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNw
cAppbmRleCAwOGU2NDRmZjZlNmJhZTFmOGVkMjRmNzk4M2UxNWM5NGZmOWY4OWY0Li5mZDQ1ZTIz
NjMyODc0YTM4MDU2YzIzYWFlMDZkMWYyZjMxODJiMGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAKQEAg
LTE2NCw2ICsxNjQsMTEgQEAgdm9pZCBFdmVudDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZEluc3RydW1lbnRl
ZE1lbWJlcihtX3VuZGVybHlpbmdFdmVudCk7CiB9CiAKK1Bhc3NSZWZQdHI8RXZlbnQ+IEV2ZW50
OjpjbG9uZUZvcihIVE1MSUZyYW1lRWxlbWVudCopIGNvbnN0Cit7CisgICAgcmV0dXJuIEV2ZW50
OjpjcmVhdGUodHlwZSgpLCBidWJibGVzKCksIGNhbmNlbGFibGUoKSk7Cit9CisKIHZvaWQgRXZl
bnQ6OnNldFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiB0YXJnZXQpCiB7CiAgICAgaWYg
KG1fdGFyZ2V0ID09IHRhcmdldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmgKaW5kZXggZTcyMzQyMzE1Mzk4ZWYxNzIw
ODQyMDE4NDI3OGY3Y2VlZjZjOTM2MS4uNWM3ZDdjNzUzZDVhYjA0OWQ5NGFkNDUxMTljNGUwM2U5
MjZlY2VjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmgKQEAgLTMxLDkgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotICAgIGNsYXNzIE1lbW9yeUluc3RydW1lbnRhdGlvbjsKICAgICBjbGFzcyBF
dmVudFRhcmdldDsKICAgICBjbGFzcyBFdmVudERpc3BhdGNoZXI7CisgICAgY2xhc3MgSFRNTElG
cmFtZUVsZW1lbnQ7CisgICAgY2xhc3MgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOwogCiAgICAgc3Ry
dWN0IEV2ZW50SW5pdCB7CiAgICAgICAgIEV2ZW50SW5pdCgpOwpAQCAtMTU1LDYgKzE1Niw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5
VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCisgICAgICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxFdmVudD4gY2xvbmVGb3IoSFRNTElGcmFtZUVsZW1lbnQqKSBjb25zdDsKKwogICAgIHBy
b3RlY3RlZDoKICAgICAgICAgRXZlbnQoKTsKICAgICAgICAgRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggZTU4MzkwYzVlNGFkOWQ4ODBlY2VmZGQ1MWQ4
ZjBkZDgwODc2MTE5ZS4uY2M5NGNkYjA3OGVlY2E3YzdiMGVlOTdhYjJhNmRjMjY2MTY0ZmFiZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJFdmVudENvbnRleHQuaCIKICNpbmNsdWRlICJFdmVudERpc3BhdGNoTWVkaWF0
b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNlcnRpb25Q
b2ludC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgpAQCAtNTAsNiAr
NTEsNjggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitlbnVtIEV2ZW50RGlzcGF0Y2hCZWhh
dmlvciB7CisgICAgUmV0YXJnZXRFdmVudCwKKyAgICBTdGF5SW5zaWRlU2hhZG93RE9NCit9Owor
CitlbnVtIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24geworICAgIENvbnRpbnVlRGlzcGF0Y2hp
bmcsCisgICAgRG9uZURpc3BhdGNoaW5nCit9OworCitlbnVtIEV2ZW50QW5jZXN0b3JDb250aW51
YXRpb24geworICAgIEV2ZW50QW5jZXN0b3JTdG9wLAorICAgIEV2ZW50QW5jZXN0b3JDb250aW51
ZVRvUGFyZW50Cit9OworCitjbGFzcyBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlciB7CitwdWJs
aWM6CisgICAgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIoUGFzc1JlZlB0cjxOb2RlPiwgUGFz
c1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KTsKKyAgICB2b2lkIGFkanVzdChWZWN0b3I8RXZl
bnRDb250ZXh0PiYpOworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8VHJlZVNjb3BlKiwg
RXZlbnRUYXJnZXQqPiBSZWxhdGVkVGFyZ2V0TWFwOworICAgIEV2ZW50VGFyZ2V0KiBmaW5kUmVs
YXRlZFRhcmdldChUcmVlU2NvcGUqKTsKKworICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAg
UmVmUHRyPE5vZGU+IG1fcmVsYXRlZFRhcmdldDsKKyAgICBSZWxhdGVkVGFyZ2V0TWFwIG1fcmVs
YXRlZFRhcmdldE1hcDsKK307CisKK2NsYXNzIFBlckZyYW1lRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgUGVyRnJhbWVEaXNwYXRjaGVyKE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAg
dm9pZCBhZGp1c3RSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0
ZWRUYXJnZXQpOworCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQo
KTsgfQorICAgIGNvbnN0IEV2ZW50KiBldmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnQuZ2V0
KCk7IH0KKworICAgIGJvb2wgc2hvdWxkQ29udGludWVUb1BhcmVudERvY3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9ldmVudEFuY2VzdG9yQ29udGludWF0aW9uID09IEV2ZW50QW5jZXN0b3JDb250
aW51ZVRvUGFyZW50OyB9CisKKyAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNo
RXZlbnRQcmVQcm9jZXNzKCk7CisgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRj
aEV2ZW50QXRDYXB0dXJpbmcoKTsKKyAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3Bh
dGNoRXZlbnRBdFRhcmdldCgpOworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0
Y2hFdmVudEF0QnViYmxpbmcoKTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2Vzcygp
OworICAgIHZvaWQgZGlzcGF0Y2hFdmVudERlZmF1bHRIYW5kbGVyKCk7CisKKyAgICB2b2lkIHJl
c2V0VGFyZ2V0KCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxEaXNw
YXRjaEV2ZW50KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRXZlbnREaXNwYXRjaEJlaGF2aW9y
IGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoU2hhZG93Um9vdCosIEV2ZW50VGFyZ2V0Kik7Cisg
ICAgY29uc3QgRXZlbnRDb250ZXh0KiB0b3BFdmVudENvbnRleHQoKTsKKyAgICBFdmVudEFuY2Vz
dG9yQ29udGludWF0aW9uIGNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycygpOworCisgICAgUmVmUHRy
PE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8RXZlbnQ+IG1fZXZlbnQ7CisgICAgVmVjdG9yPEV2
ZW50Q29udGV4dD4gbV9hbmNlc3RvcnM7CisgICAgRXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbiBt
X2V2ZW50QW5jZXN0b3JDb250aW51YXRpb247CisgICAgUmVmUHRyPEZyYW1lVmlldz4gbV92aWV3
OworICAgIFdpbmRvd0V2ZW50Q29udGV4dCBtX3dpbmRvd0V2ZW50Q29udGV4dDsKKyAgICB2b2lk
KiBtX3ByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0OworfTsKKwogc3RhdGljIEhhc2hTZXQ8
Tm9kZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcyA9IDA7CiAKIEV2ZW50UmVs
YXRlZFRhcmdldEFkanVzdGVyOjpFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlcihQYXNzUmVmUHRy
PE5vZGU+IG5vZGUsIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZFRhcmdldCkKQEAgLTEyMSwxMyAr
MTg0LDYgQEAgRXZlbnRUYXJnZXQqIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVs
YXRlZFRhcmdldChUcmVlU2NvcGUqIHNjb3BlKQogICAgIHJldHVybiByZWxhdGVkVGFyZ2V0Owog
fQogCi1ib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBub2RlLCBQYXNz
UmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4gbWVkaWF0b3IpCi17Ci0gICAgQVNTRVJUKCFl
dmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotCi0gICAgRXZlbnREaXNwYXRjaGVyIGRpc3BhdGNo
ZXIobm9kZSk7Ci0gICAgcmV0dXJuIG1lZGlhdG9yLT5kaXNwYXRjaEV2ZW50KCZkaXNwYXRjaGVy
KTsKLX0KIAogaW5saW5lIHN0YXRpYyBFdmVudFRhcmdldCogZXZlbnRUYXJnZXRSZXNwZWN0aW5n
U1ZHVGFyZ2V0UnVsZXMoTm9kZSogcmVmZXJlbmNlTm9kZSkKIHsKQEAgLTE1MSw3ICsyMDcsNyBA
QCBpbmxpbmUgc3RhdGljIEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJn
ZXRSdWxlcyhOb2RlKiByZWZlcmVuY2VObwogICAgIHJldHVybiByZWZlcmVuY2VOb2RlOwogfQog
Ci12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQs
IFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCit2b2lkIFBlckZyYW1l
RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBw
cnBSZWxhdGVkVGFyZ2V0KQogewogICAgIGlmICghcHJwUmVsYXRlZFRhcmdldCkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTYwLDI2ICsyMTYsMjkgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmFkanVz
dFJlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PgogICAg
ICAgICByZXR1cm47CiAgICAgaWYgKCFtX25vZGUuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBlbnN1cmVFdmVudEFuY2VzdG9ycyhldmVudCk7CisgICAgaWYgKG1fYW5jZXN0b3JzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKG1f
bm9kZSwgcmVsYXRlZFRhcmdldC5yZWxlYXNlKCkpLmFkanVzdChtX2FuY2VzdG9ycyk7CiB9CiAK
LUV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCitQZXJGcmFtZURp
c3BhdGNoZXI6OlBlckZyYW1lRGlzcGF0Y2hlcihOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCkKICAgICA6IG1fbm9kZShub2RlKQotICAgICwgbV9hbmNlc3RvcnNJbml0aWFsaXpl
ZChmYWxzZSkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2V2ZW50RGlzcGF0Y2hlZChmYWxzZSkK
LSNlbmRpZgorICAgICwgbV9ldmVudChldmVudCkKKyAgICAsIG1fYW5jZXN0b3JzKCkKKyAgICAs
IG1fZXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbihjYWx1Y3VsYXRlRXZlbnRBbmNlc3RvcnMoKSkK
KyAgICAsIG1fdmlldyhtX25vZGUtPmRvY3VtZW50KCktPnZpZXcoKSkKKyAgICAsIG1fd2luZG93
RXZlbnRDb250ZXh0KG1fZXZlbnQuZ2V0KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZlbnRDb250ZXh0
KCkpCisgICAgLCBtX3ByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KDApCiB7Ci0gICAgQVNT
RVJUKG5vZGUpOwotICAgIG1fdmlldyA9IG5vZGUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBB
U1NFUlQobV9ub2RlKTsKKyAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Cisg
ICAgQVNTRVJUKCFtX2V2ZW50LT50eXBlKCkuaXNOdWxsKCkpOyAvLyBKYXZhU2NyaXB0IGNvZGUg
Y2FuIGNyZWF0ZSBhbiBldmVudCB3aXRoIGFuIGVtcHR5IG5hbWUsIGJ1dCBub3QgbnVsbC4KKyAg
ICBtX2V2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMo
bV9ub2RlLmdldCgpKSk7CiB9CiAKLXZvaWQgRXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVudEFu
Y2VzdG9ycyhFdmVudCogZXZlbnQpCitFdmVudEFuY2VzdG9yQ29udGludWF0aW9uIFBlckZyYW1l
RGlzcGF0Y2hlcjo6Y2FsdWN1bGF0ZUV2ZW50QW5jZXN0b3JzKCkKIHsKLSAgICBpZiAobV9hbmNl
c3RvcnNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fYW5jZXN0b3JzSW5pdGlh
bGl6ZWQgPSB0cnVlOworICAgIEFTU0VSVChtX2FuY2VzdG9ycy5pc0VtcHR5KCkpOwogICAgIGJv
b2wgaW5Eb2N1bWVudCA9IG1fbm9kZS0+aW5Eb2N1bWVudCgpOwogICAgIGJvb2wgaXNTVkdFbGVt
ZW50ID0gbV9ub2RlLT5pc1NWR0VsZW1lbnQoKTsKICAgICBWZWN0b3I8RXZlbnRUYXJnZXQqPiB0
YXJnZXRTdGFjazsKQEAgLTE5MiwxNzggKzI1MSwxMjYgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6
OmVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIHRhcmdldFN0
YWNrLmFwcGVuZCh0YXJnZXRTdGFjay5sYXN0KCkpOwogICAgICAgICBtX2FuY2VzdG9ycy5hcHBl
bmQoRXZlbnRDb250ZXh0KG5vZGUsIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVz
KG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpKTsKICAgICAgICAgaWYgKCFpbkRvY3VtZW50KQot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIEV2ZW50QW5jZXN0b3JTdG9w
OwogICAgICAgICBsYXN0ID0gbm9kZTsKICAgICAgICAgaWYgKCFub2RlLT5pc1NoYWRvd1Jvb3Qo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZGV0ZXJtaW5lRGlzcGF0Y2hC
ZWhhdmlvcihldmVudCwgdG9TaGFkb3dSb290KG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpID09
IFN0YXlJbnNpZGVTaGFkb3dET00pCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChk
ZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKHRvU2hhZG93Um9vdChub2RlKSwgdGFyZ2V0U3RhY2su
bGFzdCgpKSA9PSBTdGF5SW5zaWRlU2hhZG93RE9NKQorICAgICAgICAgICAgcmV0dXJuIEV2ZW50
QW5jZXN0b3JTdG9wOwogICAgICAgICBpZiAoIWlzU1ZHRWxlbWVudCkgewogICAgICAgICAgICAg
QVNTRVJUKCF0YXJnZXRTdGFjay5pc0VtcHR5KCkpOwogICAgICAgICAgICAgdGFyZ2V0U3RhY2su
cmVtb3ZlTGFzdCgpOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiBFdmVudEFuY2VzdG9y
Q29udGludWVUb1BhcmVudDsKIH0KIAotdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2Nv
cGVkRXZlbnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+IG1l
ZGlhdG9yKQorSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIFBlckZyYW1lRGlzcGF0Y2hl
cjo6d2lsbERpc3BhdGNoRXZlbnQoKSBjb25zdAogewotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRo
ZSB0YXJnZXQgaGVyZSBiZWNhdXNlIGl0IGNhbiBnbyBhd2F5IGJ5IHRoZSB0aW1lIHdlIGFjdHVh
bGx5IGZpcmUgdGhlIGV2ZW50LgotICAgIG1lZGlhdG9yLT5ldmVudCgpLT5zZXRUYXJnZXQoZXZl
bnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobm9kZSkpOwotICAgIFNjb3BlZEV2ZW50
UXVldWU6Omluc3RhbmNlKCktPmVucXVldWVFdmVudERpc3BhdGNoTWVkaWF0b3IobWVkaWF0b3Ip
OworICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50
KG1fbm9kZS0+ZG9jdW1lbnQoKSwgKm1fZXZlbnQsIG1fd2luZG93RXZlbnRDb250ZXh0LndpbmRv
dygpLCBtX25vZGUuZ2V0KCksIG1fYW5jZXN0b3JzKTsKIH0KIAotdm9pZCBFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4g
dW5kZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExv
b2spCi17Ci0gICAgaWYgKG5vZGUtPmRpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MpCi0gICAgICAgIGdOb2Rlc0Rp
c3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gbmV3IEhhc2hTZXQ8Tm9kZSo+OwotICAgIGVsc2Ug
aWYgKGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5jb250YWlucyhub2RlKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPmFk
ZChub2RlKTsKLQotICAgIC8vIHNlbmQgbW91c2Vkb3duIGFuZCBtb3VzZXVwIGJlZm9yZSB0aGUg
Y2xpY2ssIGlmIHJlcXVlc3RlZAotICAgIGlmIChzZW5kTW91c2VFdmVudHMpCi0gICAgICAgIEV2
ZW50RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1
bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkpOwotICAgIG5vZGUtPnNldEFjdGl2ZSh0cnVlLCBz
aG93UHJlc3NlZExvb2spOwotICAgIGlmIChzZW5kTW91c2VFdmVudHMpCi0gICAgICAgIEV2ZW50
RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0Vmll
dygpLCB1bmRlcmx5aW5nRXZlbnQpKTsKLSAgICBub2RlLT5zZXRBY3RpdmUoZmFsc2UpOwotCi0g
ICAgLy8gYWx3YXlzIHNlbmQgY2xpY2sKLSAgICBFdmVudERpc3BhdGNoZXIobm9kZSkuZGlzcGF0
Y2hFdmVudChTaW11bGF0ZWRNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZl
bnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkpOwot
Ci0gICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPnJlbW92ZShub2RlKTsKLX0K
LQotYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
cHJwRXZlbnQpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIEFTU0VSVCghbV9ldmVudERpc3BhdGNo
ZWQpOwotICAgIG1fZXZlbnREaXNwYXRjaGVkID0gdHJ1ZTsKLSNlbmRpZgotICAgIFJlZlB0cjxF
dmVudD4gZXZlbnQgPSBwcnBFdmVudDsKLSAgICBDaGlsZE5vZGVzTGF6eVNuYXBzaG90Ojp0YWtl
Q2hpbGROb2Rlc0xhenlTbmFwc2hvdCgpOwotCi0gICAgZXZlbnQtPnNldFRhcmdldChldmVudFRh
cmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKLSAgICBBU1NFUlQo
IWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7
Ci0gICAgQVNTRVJUKCFldmVudC0+dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBjb2Rl
IGNhbiBjcmVhdGUgYW4gZXZlbnQgd2l0aCBhbiBlbXB0eSBuYW1lLCBidXQgbm90IG51bGwuCi0g
ICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQuZ2V0KCkpOwotICAgIFdpbmRvd0V2ZW50Q29u
dGV4dCB3aW5kb3dFdmVudENvbnRleHQoZXZlbnQuZ2V0KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZl
bnRDb250ZXh0KCkpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUg
PSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KG1fbm9kZS0+ZG9j
dW1lbnQoKSwgKmV2ZW50LCB3aW5kb3dFdmVudENvbnRleHQud2luZG93KCksIG1fbm9kZS5nZXQo
KSwgbV9hbmNlc3RvcnMpOwotCi0gICAgdm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1
bHQ7Ci0gICAgaWYgKGRpc3BhdGNoRXZlbnRQcmVQcm9jZXNzKGV2ZW50LCBwcmVEaXNwYXRjaEV2
ZW50SGFuZGxlclJlc3VsdCkgPT0gQ29udGludWVEaXNwYXRjaGluZykKLSAgICAgICAgaWYgKGRp
c3BhdGNoRXZlbnRBdENhcHR1cmluZyhldmVudCwgd2luZG93RXZlbnRDb250ZXh0KSA9PSBDb250
aW51ZURpc3BhdGNoaW5nKQotICAgICAgICAgICAgaWYgKGRpc3BhdGNoRXZlbnRBdFRhcmdldChl
dmVudCkgPT0gQ29udGludWVEaXNwYXRjaGluZykKLSAgICAgICAgICAgICAgICBkaXNwYXRjaEV2
ZW50QXRCdWJibGluZyhldmVudCwgd2luZG93RXZlbnRDb250ZXh0KTsKLSAgICBkaXNwYXRjaEV2
ZW50UG9zdFByb2Nlc3MoZXZlbnQsIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KTsKLQot
ICAgIC8vIEVuc3VyZSB0aGF0IGFmdGVyIGV2ZW50IGRpc3BhdGNoLCB0aGUgZXZlbnQncyB0YXJn
ZXQgb2JqZWN0IGlzIHRoZQotICAgIC8vIG91dGVybW9zdCBzaGFkb3cgRE9NIGJvdW5kYXJ5Lgot
ICAgIGV2ZW50LT5zZXRUYXJnZXQod2luZG93RXZlbnRDb250ZXh0LnRhcmdldCgpKTsKLSAgICBl
dmVudC0+c2V0Q3VycmVudFRhcmdldCgwKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZERpc3BhdGNoRXZlbnQoY29va2llKTsKLQotICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQ
cmV2ZW50ZWQoKTsKLX0KLQotaW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UHJlUHJvY2VzcyhQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCwgdm9pZComIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KQoraW5saW5lIEV2ZW50RGlz
cGF0Y2hDb250aW51YXRpb24gUGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UHJlUHJv
Y2VzcygpCiB7CiAgICAgLy8gR2l2ZSB0aGUgdGFyZ2V0IG5vZGUgYSBjaGFuY2UgdG8gZG8gc29t
ZSB3b3JrIGJlZm9yZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0IGEgY3JhY2suCi0gICAgcHJlRGlz
cGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQgPSBtX25vZGUtPnByZURpc3BhdGNoRXZlbnRIYW5kbGVy
KGV2ZW50LmdldCgpKTsKLSAgICByZXR1cm4gKG1fYW5jZXN0b3JzLmlzRW1wdHkoKSB8fCBldmVu
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpID8gRG9uZURpc3BhdGNoaW5nIDogQ29udGludWVEaXNw
YXRjaGluZzsKKyAgICBtX3ByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0ID0gbV9ub2RlLT5w
cmVEaXNwYXRjaEV2ZW50SGFuZGxlcihtX2V2ZW50LmdldCgpKTsKKyAgICByZXR1cm4gKG1fYW5j
ZXN0b3JzLmlzRW1wdHkoKSB8fCBtX2V2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkgPyBEb25l
RGlzcGF0Y2hpbmcgOiBDb250aW51ZURpc3BhdGNoaW5nOwogfQogCi1pbmxpbmUgRXZlbnREaXNw
YXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRBdENhcHR1cmlu
ZyhQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgV2luZG93RXZlbnRDb250ZXh0JiB3aW5kb3dFdmVu
dENvbnRleHQpCitpbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBQZXJGcmFtZURpc3Bh
dGNoZXI6OmRpc3BhdGNoRXZlbnRBdENhcHR1cmluZygpCiB7CiAgICAgLy8gVHJpZ2dlciBjYXB0
dXJpbmcgZXZlbnQgaGFuZGxlcnMsIHN0YXJ0aW5nIGF0IHRoZSB0b3AgYW5kIHdvcmtpbmcgb3Vy
IHdheSBkb3duLgotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhB
U0UpOworICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7
CiAKLSAgICBpZiAod2luZG93RXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50Lmdl
dCgpKSAmJiBldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgaWYgKG1fd2luZG93RXZl
bnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpICYmIG1fZXZlbnQtPnBy
b3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAgICByZXR1cm4gRG9uZURpc3BhdGNoaW5nOwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IG1fYW5jZXN0b3JzLnNpemUoKSAtIDE7IGkgPiAwOyAtLWkpIHsK
ICAgICAgICAgY29uc3QgRXZlbnRDb250ZXh0JiBldmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tp
XTsKICAgICAgICAgaWYgKGV2ZW50Q29udGV4dC5jdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkp
IHsKLSAgICAgICAgICAgIGlmIChldmVudC0+YnViYmxlcygpKQorICAgICAgICAgICAgaWYgKG1f
ZXZlbnQtPmJ1YmJsZXMoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOworICAgICAgICAgICAgbV9l
dmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsK
LSAgICAgICAgZXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKLSAg
ICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICAgICAgICAgIG1fZXZl
bnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7CisgICAgICAgIGV2ZW50
Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50LmdldCgpKTsKKyAgICAgICAgaWYgKG1f
ZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAgICAgICAgcmV0dXJuIERvbmVEaXNw
YXRjaGluZzsKICAgICB9CiAKICAgICByZXR1cm4gQ29udGludWVEaXNwYXRjaGluZzsKIH0KIAot
aW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aEV2ZW50QXRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitpbmxpbmUgRXZlbnREaXNw
YXRjaENvbnRpbnVhdGlvbiBQZXJGcmFtZURpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRBdFRhcmdl
dCgpCiB7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7Ci0gICAg
bV9hbmNlc3RvcnNbMF0uaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwotICAgIHJldHVy
biBldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgPyBEb25lRGlzcGF0Y2hpbmcgOiBDb250aW51
ZURpc3BhdGNoaW5nOworICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdF
VCk7CisgICAgbV9hbmNlc3RvcnNbMF0uaGFuZGxlTG9jYWxFdmVudHMobV9ldmVudC5nZXQoKSk7
CisgICAgcmV0dXJuIG1fZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpID8gRG9uZURpc3BhdGNo
aW5nIDogQ29udGludWVEaXNwYXRjaGluZzsKIH0KIAotaW5saW5lIEV2ZW50RGlzcGF0Y2hDb250
aW51YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRCdWJibGluZyhQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCwgV2luZG93RXZlbnRDb250ZXh0JiB3aW5kb3dDb250ZXh0KQoraW5s
aW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gUGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRj
aEV2ZW50QXRCdWJibGluZygpCiB7Ci0gICAgaWYgKGV2ZW50LT5idWJibGVzKCkgJiYgIWV2ZW50
LT5jYW5jZWxCdWJibGUoKSkgeworICAgIGlmIChtX2V2ZW50LT5idWJibGVzKCkgJiYgIW1fZXZl
bnQtPmNhbmNlbEJ1YmJsZSgpKSB7CiAgICAgICAgIC8vIFRyaWdnZXIgYnViYmxpbmcgZXZlbnQg
aGFuZGxlcnMsIHN0YXJ0aW5nIGF0IHRoZSBib3R0b20gYW5kIHdvcmtpbmcgb3VyIHdheSB1cC4K
LSAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKKyAg
ICAgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOwogCiAg
ICAgICAgIHNpemVfdCBzaXplID0gbV9hbmNlc3RvcnMuc2l6ZSgpOwogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICAgICAgY29uc3QgRXZlbnRDb250
ZXh0JiBldmVudENvbnRleHQgPSBtX2FuY2VzdG9yc1tpXTsKICAgICAgICAgICAgIGlmIChldmVu
dENvbnRleHQuY3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpKQotICAgICAgICAgICAgICAgIGV2
ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOworICAgICAgICAgICAgICAgIG1f
ZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BI
QVNFKTsKLSAgICAgICAgICAgIGV2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5n
ZXQoKSk7Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8IGV2
ZW50LT5jYW5jZWxCdWJibGUoKSkKKyAgICAgICAgICAgICAgICBtX2V2ZW50LT5zZXRFdmVudFBo
YXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CisgICAgICAgICAgICBldmVudENvbnRleHQuaGFu
ZGxlTG9jYWxFdmVudHMobV9ldmVudC5nZXQoKSk7CisgICAgICAgICAgICBpZiAobV9ldmVudC0+
cHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgbV9ldmVudC0+Y2FuY2VsQnViYmxlKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIERvbmVEaXNwYXRjaGluZzsKICAgICAgICAgfQotICAgICAgICB3aW5k
b3dDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKKyAgICAgICAgbV93aW5k
b3dFdmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMobV9ldmVudC5nZXQoKSk7CiAgICAgfQog
ICAgIHJldHVybiBDb250aW51ZURpc3BhdGNoaW5nOwogfQogCi1pbmxpbmUgdm9pZCBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcyhQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCwgdm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpCitpbmxpbmUgdm9pZCBQZXJG
cmFtZURpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcygpCiB7Ci0gICAgZXZlbnQt
PnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0
KCkpKTsKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCgwKTsKLSAgICBldmVudC0+c2V0RXZl
bnRQaGFzZSgwKTsKLQorICAgIG1fZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3Rp
bmdTVkdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKKyAgICBtX2V2ZW50LT5zZXRDdXJyZW50
VGFyZ2V0KDApOworICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoMCk7CiAgICAgLy8gUGFzcyB0
aGUgZGF0YSBmcm9tIHRoZSBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlciB0byB0aGUgcG9zdERpc3Bh
dGNoRXZlbnRIYW5kbGVyLgotICAgIG1fbm9kZS0+cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKGV2
ZW50LmdldCgpLCBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7CisgICAgbV9ub2RlLT5w
b3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIobV9ldmVudC5nZXQoKSwgbV9wcmVEaXNwYXRjaEV2ZW50
SGFuZGxlclJlc3VsdCk7Cit9CiAKK2lubGluZSB2b2lkIFBlckZyYW1lRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hFdmVudERlZmF1bHRIYW5kbGVyKCkKK3sKICAgICAvLyBDYWxsIGRlZmF1bHQgZXZlbnQg
aGFuZGxlcnMuIFdoaWxlIHRoZSBET00gZG9lcyBoYXZlIGEgY29uY2VwdCBvZiBwcmV2ZW50aW5n
CiAgICAgLy8gZGVmYXVsdCBoYW5kbGluZywgdGhlIGRldGFpbCBvZiB3aGljaCBoYW5kbGVycyBh
cmUgY2FsbGVkIGlzIGFuIGludGVybmFsCiAgICAgLy8gaW1wbGVtZW50YXRpb24gZGV0YWlsIGFu
ZCBub3QgcGFydCBvZiB0aGUgRE9NLgotICAgIGlmICghZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KSAmJiAhZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpIHsKKyAgICBpZiAoIW1fZXZlbnQtPmRlZmF1
bHRQcmV2ZW50ZWQoKSAmJiAhbV9ldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgewogICAgICAgICAv
LyBOb24tYnViYmxpbmcgZXZlbnRzIGNhbGwgb25seSBvbmUgZGVmYXVsdCBldmVudCBoYW5kbGVy
LCB0aGUgb25lIGZvciB0aGUgdGFyZ2V0LgotICAgICAgICBtX25vZGUtPmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZlbnQuZ2V0KCkpOwotICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVu
dGVkKCkpOwotICAgICAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgIG1f
bm9kZS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihtX2V2ZW50LmdldCgpKTsKKyAgICAgICAgQVNTRVJU
KCFtX2V2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpOworICAgICAgICBpZiAobV9ldmVudC0+ZGVm
YXVsdEhhbmRsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8gRm9yIGJ1YmJs
aW5nIGV2ZW50cywgY2FsbCBkZWZhdWx0IGV2ZW50IGhhbmRsZXJzIG9uIHRoZSBzYW1lIHRhcmdl
dHMgaW4gdGhlCiAgICAgICAgIC8vIHNhbWUgb3JkZXIgYXMgdGhlIGJ1YmJsaW5nIHBoYXNlLgot
ICAgICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSkgeworICAgICAgICBpZiAobV9ldmVudC0+YnVi
YmxlcygpKSB7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUoKTsK
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgbV9hbmNlc3RvcnNbaV0ubm9kZSgpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50
LmdldCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVk
KCkpOwotICAgICAgICAgICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAg
ICAgICAgICAgICBtX2FuY2VzdG9yc1tpXS5ub2RlKCktPmRlZmF1bHRFdmVudEhhbmRsZXIobV9l
dmVudC5nZXQoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2V2ZW50LT5kZWZhdWx0UHJl
dmVudGVkKCkpOworICAgICAgICAgICAgICAgIGlmIChtX2V2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CiB9CiAKLWNvbnN0IEV2ZW50Q29udGV4dCogRXZlbnREaXNwYXRjaGVyOjp0b3BFdmVu
dENvbnRleHQoKQoraW5saW5lIHZvaWQgUGVyRnJhbWVEaXNwYXRjaGVyOjpyZXNldFRhcmdldCgp
Cit7CisgICAgbV9ldmVudC0+c2V0VGFyZ2V0KG1fd2luZG93RXZlbnRDb250ZXh0LnRhcmdldCgp
KTsKKyAgICBtX2V2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOworfQorCitpbmxpbmUgY29uc3Qg
RXZlbnRDb250ZXh0KiBQZXJGcmFtZURpc3BhdGNoZXI6OnRvcEV2ZW50Q29udGV4dCgpCiB7CiAg
ICAgcmV0dXJuIG1fYW5jZXN0b3JzLmlzRW1wdHkoKSA/IDAgOiAmbV9hbmNlc3RvcnMubGFzdCgp
OwogfQpAQCAtMzczLDcgKzM4MCwyNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW5UaGVTYW1lU2Nv
cGUoU2hhZG93Um9vdCogc2hhZG93Um9vdCwgRXZlbnRUYXJnZXQqIHRhcmdldCkKICAgICByZXR1
cm4gdGFyZ2V0LT50b05vZGUoKSAmJiB0YXJnZXQtPnRvTm9kZSgpLT50cmVlU2NvcGUoKS0+cm9v
dE5vZGUoKSA9PSBzaGFkb3dSb290OwogfQogCi1FdmVudERpc3BhdGNoQmVoYXZpb3IgRXZlbnRE
aXNwYXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiBldmVudCwgU2hhZG93
Um9vdCogc2hhZG93Um9vdCwgRXZlbnRUYXJnZXQqIHRhcmdldCkKK2lubGluZSBzdGF0aWMgYm9v
bCBldmVudFNob3VsZEJlU3RvcHBlZEF0Qm91bmRhcnkoRXZlbnQqIGV2ZW50KQoreworICAgIC8v
IFdlYktpdCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0YXJ0IGV2ZW50IHRvIGNyb3NzIHRoZSB0aGUg
c2hhZG93IERPTSBib3VuZGFyeS4KKyAgICAvLyBDaGFuZ2luZyB0aGlzIGJyZWFrcyBleGlzdGlu
ZyBzaXRlcy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUyMTk1IGZvciBkZXRhaWxzLgorICAgIGNvbnN0IEF0b21pY1N0cmluZyBldmVudFR5cGUg
PSBldmVudC0+dHlwZSgpOworICAgIHJldHVybiBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFi
b3J0RXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hhbmdl
RXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVu
dAorICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQKKyAg
ICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAorICAgICAg
ICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudAorICAgICAgICAg
ICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudAorICAgICAgICAgICAg
fHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudAorICAgICAgICAgICAgfHwg
ZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50OworfQorCitpbmxpbmUg
RXZlbnREaXNwYXRjaEJlaGF2aW9yIFBlckZyYW1lRGlzcGF0Y2hlcjo6ZGV0ZXJtaW5lRGlzcGF0
Y2hCZWhhdmlvcihTaGFkb3dSb290KiBzaGFkb3dSb290LCBFdmVudFRhcmdldCogdGFyZ2V0KQog
ewogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFKFZJREVPKQogICAgIC8vIFZp
ZGVvLW9ubHkgZnVsbCBzY3JlZW4gaXMgYSBtb2RlIHdoZXJlIHdlIHVzZSB0aGUgc2hhZG93IERP
TSBhcyBhbiBpbXBsZW1lbnRhdGlvbgpAQCAtMzg4LDIzICs0MTIsMTYzIEBAIEV2ZW50RGlzcGF0
Y2hCZWhhdmlvciBFdmVudERpc3BhdGNoZXI6OmRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoRXZl
bnQqIGV2ZW50LCBTCiAgICAgVU5VU0VEX1BBUkFNKHNoYWRvd1Jvb3QpOwogI2VuZGlmCiAKLSAg
ICAvLyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBzZWxlY3RzdGFydCBldmVudCB0byBjcm9zcyB0aGUg
dGhlIHNoYWRvdyBET00gYm91bmRhcnkuCi0gICAgLy8gQ2hhbmdpbmcgdGhpcyBicmVha3MgZXhp
c3Rpbmcgc2l0ZXMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MjE5NSBmb3IgZGV0YWlscy4KLSAgICBjb25zdCBBdG9taWNTdHJpbmcgZXZlbnRU
eXBlID0gZXZlbnQtPnR5cGUoKTsKLSAgICBpZiAoaW5UaGVTYW1lU2NvcGUoc2hhZG93Um9vdCwg
dGFyZ2V0KQotICAgICAgICAmJiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50
Ci0gICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50Ci0g
ICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQKLSAgICAg
ICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubG9hZEV2ZW50Ci0gICAgICAgICAg
ICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnJlc2V0RXZlbnQKLSAgICAgICAgICAgIHx8
IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzaXplRXZlbnQKLSAgICAgICAgICAgIHx8IGV2
ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50
VHlwZSA9PSBldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCkpCisgICAgaWYgKGluVGhlU2FtZVNj
b3BlKHNoYWRvd1Jvb3QsIHRhcmdldCkgJiYgZXZlbnRTaG91bGRCZVN0b3BwZWRBdEJvdW5kYXJ5
KG1fZXZlbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gU3RheUluc2lkZVNoYWRvd0RPTTsKLQog
ICAgIHJldHVybiBSZXRhcmdldEV2ZW50OwogfQogCitFdmVudERpc3BhdGNoZXI6OkV2ZW50RGlz
cGF0Y2hlcihOb2RlKiBub2RlKQorICAgIDogbV9ub2RlKG5vZGUpCisjaWZuZGVmIE5ERUJVRwor
ICAgICwgbV9ldmVudERpc3BhdGNoZWQoZmFsc2UpCisjZW5kaWYKK3sKKyAgICBBU1NFUlQobm9k
ZSk7Cit9CisKK2Jvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG5vZGUs
IFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKK3sKKyAgICBBU1NF
UlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CisKKyAgICBFdmVudERpc3BhdGNoZXIgZGlz
cGF0Y2hlcihub2RlKTsKKyAgICByZXR1cm4gbWVkaWF0b3ItPmRpc3BhdGNoRXZlbnQoJmRpc3Bh
dGNoZXIpOworfQorCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudChO
b2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4gbWVkaWF0b3IpCit7
CisgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHRhcmdldCBoZXJlIGJlY2F1c2UgaXQgY2FuIGdv
IGF3YXkgYnkgdGhlIHRpbWUgd2UgYWN0dWFsbHkgZmlyZSB0aGUgZXZlbnQuCisgICAgbWVkaWF0
b3ItPmV2ZW50KCktPnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxl
cyhub2RlKSk7CisgICAgU2NvcGVkRXZlbnRRdWV1ZTo6aW5zdGFuY2UoKS0+ZW5xdWV1ZUV2ZW50
RGlzcGF0Y2hNZWRpYXRvcihtZWRpYXRvcik7Cit9CisKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjpk
aXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVy
bHlpbmdFdmVudCwgYm9vbCBzZW5kTW91c2VFdmVudHMsIGJvb2wgc2hvd1ByZXNzZWRMb29rKQor
eworICAgIGlmIChub2RlLT5kaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IWdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzKQorICAgICAgICBnTm9kZXNEaXNwYXRj
aGluZ1NpbXVsYXRlZENsaWNrcyA9IG5ldyBIYXNoU2V0PE5vZGUqPjsKKyAgICBlbHNlIGlmIChn
Tm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+Y29udGFpbnMobm9kZSkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5hZGQobm9k
ZSk7CisKKyAgICAvLyBzZW5kIG1vdXNlZG93biBhbmQgbW91c2V1cCBiZWZvcmUgdGhlIGNsaWNr
LCBpZiByZXF1ZXN0ZWQKKyAgICBpZiAoc2VuZE1vdXNlRXZlbnRzKQorICAgICAgICBFdmVudERp
c3BhdGNoZXIobm9kZSkuZGlzcGF0Y2hFdmVudChTaW11bGF0ZWRNb3VzZUV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0Vmll
dygpLCB1bmRlcmx5aW5nRXZlbnQpKTsKKyAgICBub2RlLT5zZXRBY3RpdmUodHJ1ZSwgc2hvd1By
ZXNzZWRMb29rKTsKKyAgICBpZiAoc2VuZE1vdXNlRXZlbnRzKQorICAgICAgICBFdmVudERpc3Bh
dGNoZXIobm9kZSkuZGlzcGF0Y2hFdmVudChTaW11bGF0ZWRNb3VzZUV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLm1vdXNldXBFdmVudCwgbm9kZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwg
dW5kZXJseWluZ0V2ZW50KSk7CisgICAgbm9kZS0+c2V0QWN0aXZlKGZhbHNlKTsKKworICAgIC8v
IGFsd2F5cyBzZW5kIGNsaWNrCisgICAgRXZlbnREaXNwYXRjaGVyKG5vZGUpLmRpc3BhdGNoRXZl
bnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBu
b2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCB1bmRlcmx5aW5nRXZlbnQpKTsKKworICAg
IGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5yZW1vdmUobm9kZSk7Cit9CisKK2lu
bGluZSBzdGF0aWMgYm9vbCBzaG91bGRQcm9wYWdhdGVFdmVudEFjcm9zc1NlYW1sZXNzSUZyYW1l
cyhFdmVudCogZXZlbnQpCit7CisgICAgY29uc3QgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IGV2
ZW50LT50eXBlKCk7CisgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSBldmVudHMuCisgICAgcmV0
dXJuIGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCB8fCBldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLmRibGNsaWNrRXZlbnQ7Cit9CisKK2lubGluZSB2b2lkIEV2ZW50RGlzcGF0
Y2hlcjo6cHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQp
Cit7CisgICAgQVNTRVJUKG1fZGlzcGF0Y2hlcnMuaXNFbXB0eSgpKTsKKyAgICBSZWZQdHI8RXZl
bnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CisgICAgTm9kZSogbm9kZSA9IG1fbm9kZS5nZXQoKTsKKyAg
ICBib29sIHByb3BhZ2F0ZUV2ZW50QWNyb3NzU2VhbWxlc3NJRnJhbWVzID0gc2hvdWxkUHJvcGFn
YXRlRXZlbnRBY3Jvc3NTZWFtbGVzc0lGcmFtZXMoZXZlbnQuZ2V0KCkpOworICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgIG1fZGlzcGF0Y2hlcnMuYXBwZW5kKGFkb3B0UHRyKG5ldyBQZXJGcmFt
ZURpc3BhdGNoZXIobm9kZSwgZXZlbnQpKSk7CisgICAgICAgIGlmICghbV9kaXNwYXRjaGVycy5s
YXN0KCktPnNob3VsZENvbnRpbnVlVG9QYXJlbnREb2N1bWVudCgpIHx8ICFwcm9wYWdhdGVFdmVu
dEFjcm9zc1NlYW1sZXNzSUZyYW1lcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSFRN
TElGcmFtZUVsZW1lbnQqIHBhcmVudElGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPnNlYW1sZXNz
UGFyZW50SUZyYW1lKCk7CisgICAgICAgIGlmICghcGFyZW50SUZyYW1lKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBub2RlID0gcGFyZW50SUZyYW1lOworICAgICAgICBldmVudCA9IGV2
ZW50LT5jbG9uZUZvcihwYXJlbnRJRnJhbWUpOworICAgIH0KK30KKwordm9pZCBFdmVudERpc3Bh
dGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQsIFBh
c3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCit7CisgICAgUmVmUHRyPEV2
ZW50PiBldmVudCA9IHBycEV2ZW50OworICAgIGlmIChtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSkK
KyAgICAgICAgcHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoZXZlbnQpOworICAgIEFTU0VSVCghbV9k
aXNwYXRjaGVycy5pc0VtcHR5KCkpOworICAgIG1fZGlzcGF0Y2hlcnMubGFzdCgpLT5hZGp1c3RS
ZWxhdGVkVGFyZ2V0KHBycFJlbGF0ZWRUYXJnZXQpOworfQorCitib29sIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK3sKKyNpZm5kZWYg
TkRFQlVHCisgICAgQVNTRVJUKCFtX2V2ZW50RGlzcGF0Y2hlZCk7CisgICAgbV9ldmVudERpc3Bh
dGNoZWQgPSB0cnVlOworI2VuZGlmCisgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50
OworICAgIGlmIChtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcHJlcGFyZUV2ZW50
RGlzcGF0Y2hlcnMoZXZlbnQpOworICAgIEFTU0VSVCghbV9kaXNwYXRjaGVycy5pc0VtcHR5KCkp
OworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBtX2Rpc3BhdGNo
ZXJzWzBdLT53aWxsRGlzcGF0Y2hFdmVudCgpOworCisgICAgZmlyZURpc3BhdGNoZXJzKCk7Cisg
ICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gZmlyZURpc3BhdGNoZXJzRGVmYXVsdEV2ZW50SGFu
ZGxlcigpOworCisgICAgLy8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQgZGlzcGF0Y2gsIHRoZSBl
dmVudCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCisgICAgLy8gb3V0ZXJtb3N0IHNoYWRvdyBET00g
Ym91bmRhcnkuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Rpc3BhdGNoZXJzLnNpemUo
KTsgKytpKQorICAgICAgICBtX2Rpc3BhdGNoZXJzW2ldLT5yZXNldFRhcmdldCgpOworCisgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50KGNvb2tpZSk7CisgICAg
cmV0dXJuICFkZWZhdWx0UHJldmVudGVkOworfQorCitpbmxpbmUgdm9pZCBFdmVudERpc3BhdGNo
ZXI6OmZpcmVEaXNwYXRjaGVycygpCit7CisgICAgQVNTRVJUKCFtX2Rpc3BhdGNoZXJzLmlzRW1w
dHkoKSk7CisgICAgc2l6ZV90IHNpemUgPSBtX2Rpc3BhdGNoZXJzLnNpemUoKTsKKyAgICBmb3Ig
KGludCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChtX2Rpc3BhdGNo
ZXJzW2ldLT5kaXNwYXRjaEV2ZW50UHJlUHJvY2VzcygpID09IERvbmVEaXNwYXRjaGluZworICAg
ICAgICAgICAgICAgIHx8IG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRBdENhcHR1cmlu
ZygpID09IERvbmVEaXNwYXRjaGluZykgeworICAgICAgICAgICAgZmlyZURpc3BhdGNoZXJzUG9z
dFByb2Nlc3MoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZGlzcGF0
Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRBdFRhcmdldCgpID09IERvbmVEaXNwYXRjaGluZworICAg
ICAgICAgICAgICAgIHx8IG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5n
KCkgPT0gRG9uZURpc3BhdGNoaW5nKSB7CisgICAgICAgICAgICBmaXJlRGlzcGF0Y2hlcnNQb3N0
UHJvY2VzcyhpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2Rp
c3BhdGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoKTsKKyAgICB9Cit9CisKK2lu
bGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNoZXJzUG9zdFByb2Nlc3MoaW50
IHN0YXJ0aW5nRnJhbWUpCit7CisgICAgc2l6ZV90IHNpemUgPSBtX2Rpc3BhdGNoZXJzLnNpemUo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRpbmdGcmFtZTsgaSA8IHNpemU7ICsraSkKKyAg
ICAgICAgbV9kaXNwYXRjaGVyc1tpXS0+ZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKCk7Cit9CisK
K2lubGluZSBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNoZXJzRGVmYXVsdEV2ZW50
SGFuZGxlcigpCit7CisgICAgc2l6ZV90IHNpemUgPSBtX2Rpc3BhdGNoZXJzLnNpemUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBjb25zdCBFdmVu
dCogZXZlbnQgPSBtX2Rpc3BhdGNoZXJzW2ldLT5ldmVudCgpOworICAgICAgICBpZiAoZXZlbnQt
PmRlZmF1bHRQcmV2ZW50ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBt
X2Rpc3BhdGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50RGVmYXVsdEhhbmRsZXIoKTsKKyAgICAgICAg
aWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWV2ZW50
LT5kZWZhdWx0UHJldmVudGVkKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmICghZXZlbnQtPmJ1YmJsZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnREaXNwYXRjaGVyLmgKaW5kZXggNWJmZWFkMGQwZTZjYmUwYjgwMDM0ZDQyMjVhNjBlMzI0ZGZh
YzgzOS4uODg1MDgwMWVkOTVmYWIyNGExMzg0MDYwNWJhMGNkY2ZkZTQ3MzNkOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApAQCAtMjcsODUgKzI3LDQxIEBACiAjZGVmaW5lIEV2
ZW50RGlzcGF0Y2hlcl9oCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVudDsKLWNsYXNzIEV2ZW50
Q29udGV4dDsKIGNsYXNzIEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjsKIGNsYXNzIEV2ZW50VGFyZ2V0
OwotY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgTm9kZTsKLWNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudDsKLWNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKLWNsYXNzIFNoYWRvd1Jvb3Q7Ci1jbGFz
cyBUcmVlU2NvcGU7Ci1jbGFzcyBXaW5kb3dFdmVudENvbnRleHQ7Ci0KLWVudW0gRXZlbnREaXNw
YXRjaEJlaGF2aW9yIHsKLSAgICBSZXRhcmdldEV2ZW50LAotICAgIFN0YXlJbnNpZGVTaGFkb3dE
T00KLX07Ci0KLWVudW0gRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiB7Ci0gICAgQ29udGludWVE
aXNwYXRjaGluZywKLSAgICBEb25lRGlzcGF0Y2hpbmcKLX07Ci0KLWNsYXNzIEV2ZW50UmVsYXRl
ZFRhcmdldEFkanVzdGVyIHsKLXB1YmxpYzoKLSAgICBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rl
cihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpOwotICAg
IHZvaWQgYWRqdXN0KFZlY3RvcjxFdmVudENvbnRleHQ+Jik7Ci1wcml2YXRlOgotICAgIHR5cGVk
ZWYgSGFzaE1hcDxUcmVlU2NvcGUqLCBFdmVudFRhcmdldCo+IFJlbGF0ZWRUYXJnZXRNYXA7Ci0g
ICAgRXZlbnRUYXJnZXQqIGZpbmRSZWxhdGVkVGFyZ2V0KFRyZWVTY29wZSopOwotCi0gICAgUmVm
UHRyPE5vZGU+IG1fbm9kZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV9yZWxhdGVkVGFyZ2V0OwotICAg
IFJlbGF0ZWRUYXJnZXRNYXAgbV9yZWxhdGVkVGFyZ2V0TWFwOwotfTsKK2NsYXNzIFBlckZyYW1l
RGlzcGF0Y2hlcjsKIAogY2xhc3MgRXZlbnREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgYm9vbCBkaXNwYXRjaEV2ZW50KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRp
YXRvcj4pOwogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2NvcGVkRXZlbnQoTm9kZSosIFBhc3NS
ZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPik7Ci0KICAgICBzdGF0aWMgdm9pZCBkaXNwYXRj
aFNpbXVsYXRlZENsaWNrKE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQs
IGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29sIHNob3dQcmVzc2VkTG9vayk7CiAKKyAgICB2b2lk
IGFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8RXZlbnRU
YXJnZXQ+IHJlbGF0ZWRUYXJnZXQpOwogICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRy
PEV2ZW50Pik7Ci0gICAgdm9pZCBhZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0
cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCk7Ci0gICAgTm9kZSogbm9kZSgpIGNvbnN0
OworICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KIAogcHJp
dmF0ZToKICAgICBFdmVudERpc3BhdGNoZXIoTm9kZSopOworICAgIHZvaWQgcHJlcGFyZUV2ZW50
RGlzcGF0Y2hlcnMoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZvaWQgZmlyZURpc3BhdGNoZXJz
KCk7CisgICAgdm9pZCBmaXJlRGlzcGF0Y2hlcnNQb3N0UHJvY2VzcyhpbnQgYnJvd3NpbmdDb250
ZXh0TnVtYmVyKTsKKyAgICBib29sIGZpcmVEaXNwYXRjaGVyc0RlZmF1bHRFdmVudEhhbmRsZXIo
KTsKIAotICAgIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9y
KEV2ZW50KiwgU2hhZG93Um9vdCosIEV2ZW50VGFyZ2V0Kik7Ci0KLSAgICB2b2lkIGVuc3VyZUV2
ZW50QW5jZXN0b3JzKEV2ZW50Kik7Ci0gICAgY29uc3QgRXZlbnRDb250ZXh0KiB0b3BFdmVudENv
bnRleHQoKTsKLQotICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVudFBy
ZVByb2Nlc3MoUGFzc1JlZlB0cjxFdmVudD4sIHZvaWQqJiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxl
clJlc3VsdCk7Ci0gICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRD
YXB0dXJpbmcoUGFzc1JlZlB0cjxFdmVudD4sIFdpbmRvd0V2ZW50Q29udGV4dCYpOwotICAgIEV2
ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KFBhc3NSZWZQdHI8
RXZlbnQ+KTsKLSAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZlbnRBdEJ1
YmJsaW5nKFBhc3NSZWZQdHI8RXZlbnQ+LCBXaW5kb3dFdmVudENvbnRleHQmKTsKLSAgICB2b2lk
IGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcyhQYXNzUmVmUHRyPEV2ZW50Piwgdm9pZCogcHJlRGlz
cGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOwotCi0gICAgVmVjdG9yPEV2ZW50Q29udGV4dD4gbV9h
bmNlc3RvcnM7CisgICAgVmVjdG9yPE93blB0cjxQZXJGcmFtZURpc3BhdGNoZXI+ID4gbV9kaXNw
YXRjaGVyczsKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwotICAgIFJlZlB0cjxGcmFtZVZpZXc+
IG1fdmlldzsKLSAgICBib29sIG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQ7CiAjaWZuZGVmIE5ERUJV
RwogICAgIGJvb2wgbV9ldmVudERpc3BhdGNoZWQ7CiAjZW5kaWYKIH07CiAKLWlubGluZSBOb2Rl
KiBFdmVudERpc3BhdGNoZXI6Om5vZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX25vZGUuZ2V0
KCk7Ci19Ci0KIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91
c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKaW5kZXggOWVk
ZGE3MWVhYmUxNDIxOWE3MmMxNWZkYTUyYjZhZDUxYmUwZDkxMC4uMmI4ZmY5OTk5NWQ5NTk5NjEx
MTViYTU0ZDM5NWQ2OTc1MzUyYTJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01v
dXNlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcApAQCAt
MjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTE0Nyw2ICsxNDgsMzQgQEAgTm9kZSogTW91c2VFdmVudDo6ZnJvbUVsZW1lbnQoKSBjb25z
dAogICAgIHJldHVybiB0YXJnZXQoKSA/IHRhcmdldCgpLT50b05vZGUoKSA6IDA7CiB9CiAKK2lu
bGluZSBzdGF0aWMgaW50IGFkanVzdGVkQ2xpbmV0WChpbnQgaW5uZXJDbGllbnRYLCBIVE1MSUZy
YW1lRWxlbWVudCogaWZyYW1lLCBGcmFtZVZpZXcqIGZyYW1lVmlldykKK3sKKyAgICByZXR1cm4g
aWZyYW1lLT5vZmZzZXRMZWZ0KCkgLSBmcmFtZVZpZXctPnNjcm9sbFgoKSArIGlubmVyQ2xpZW50
WDsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgYWRqdXN0ZWRDbGluZXRZKGludCBpbm5lckNsaWVu
dFksIEhUTUxJRnJhbWVFbGVtZW50KiBpZnJhbWUsIEZyYW1lVmlldyogZnJhbWVWaWV3KQorewor
ICAgIHJldHVybiBpZnJhbWUtPm9mZnNldFRvcCgpIC0gZnJhbWVWaWV3LT5zY3JvbGxZKCkgKyBp
bm5lckNsaWVudFk7Cit9CisKK1Bhc3NSZWZQdHI8RXZlbnQ+IE1vdXNlRXZlbnQ6OmNsb25lRm9y
KEhUTUxJRnJhbWVFbGVtZW50KiBpZnJhbWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlmcmFtZSk7
CisgICAgUmVmUHRyPE1vdXNlRXZlbnQ+IGNsb25lZE1vdXNlRXZlbnQgPSBNb3VzZUV2ZW50Ojpj
cmVhdGUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBpZnJhbWUtPmRvY3VtZW50KCktPmZyYW1lKCk7
CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZSA/IGZyYW1lLT52aWV3KCkgOiAwOwor
ICAgIGNsb25lZE1vdXNlRXZlbnQtPmluaXRNb3VzZUV2ZW50KHR5cGUoKSwgYnViYmxlcygpLCBj
YW5jZWxhYmxlKCksCisgICAgICAgICAgICBpZnJhbWUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3
KCksCisgICAgICAgICAgICBkZXRhaWwoKSwgc2NyZWVuWCgpLCBzY3JlZW5ZKCksCisgICAgICAg
ICAgICBmcmFtZVZpZXcgPyBhZGp1c3RlZENsaW5ldFgoY2xpZW50WCgpLCBpZnJhbWUsIGZyYW1l
VmlldykgOiAwLAorICAgICAgICAgICAgZnJhbWVWaWV3ID8gYWRqdXN0ZWRDbGluZXRZKGNsaWVu
dFkoKSwgaWZyYW1lLCBmcmFtZVZpZXcpIDogMCwKKyAgICAgICAgICAgIGN0cmxLZXkoKSwgYWx0
S2V5KCksIHNoaWZ0S2V5KCksIG1ldGFLZXkoKSwKKyAgICAgICAgICAgIGJ1dHRvbigpLAorICAg
ICAgICAgICAgLy8gTnVsbGlmaWVzIHJlbGF0ZWRUYXJnZXQuCisgICAgICAgICAgICAwKTsKKyAg
ICByZXR1cm4gY2xvbmVkTW91c2VFdmVudC5yZWxlYXNlKCk7Cit9CisKIFBhc3NSZWZQdHI8U2lt
dWxhdGVkTW91c2VFdmVudD4gU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgUGFzc1Jl
ZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U2ltdWxhdGVkTW91c2VFdmVudChldmVudFR5cGUsIHZpZXcsIHVuZGVybHlpbmdFdmVudCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Nb3VzZUV2ZW50LmgKaW5kZXggMDg2Mzg5M2NlNzJjZDE5ZWMzNTc5ZDk4MjE3ZGU0
YWM1ZjUyMTFkNS4uNTdiODk1ODQ5MjIwNWFlYTRlZjllMWVmMDI4MDJhYThmZTVkMjdlNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5oCkBAIC04Myw2ICs4Myw4IEBAIGNsYXNzIFBsYXRmb3JtTW91
c2VFdmVudDsKICAgICAgICAgdmlydHVhbCBib29sIGlzRHJhZ0V2ZW50KCkgY29uc3Q7CiAgICAg
ICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7CiAKKyAgICAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEV2ZW50PiBjbG9uZUZvcihIVE1MSUZyYW1lRWxlbWVudCopIGNvbnN0OworCiAgICAgcHJv
dGVjdGVkOgogICAgICAgICBNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9v
bCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LAog
ICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWwsIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwg
aW50IHBhZ2VYLCBpbnQgcGFnZVksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggYTNhMWMyMmYyNTU0OWY3
ZmNhYmY0MDcwMTYxYWI2OThlZDIxYzc5Yi4uZWJiNWFmNTM5ZmY0YmJmODMzM2FiZWIyY2E3ZjE3
OWU0OGEwYjMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjA4OSw3ICsyMDg5LDcgQEAgRmxvYXRQ
b2ludCBOb2RlOjpjb252ZXJ0RnJvbVBhZ2UoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKICAg
ICByZXR1cm4gcDsKIH0KIAotI2lmbmRlZiBOREVCVUcKKy8vICNpZm5kZWYgTkRFQlVHCiAKIHN0
YXRpYyB2b2lkIGFwcGVuZEF0dHJpYnV0ZURlc2MoY29uc3QgTm9kZSogbm9kZSwgU3RyaW5nJiBz
dHJpbmcsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IGNoYXIqIGF0dHJEZXNjKQog
ewpAQCAtMjEwMiw2ICsyMTAyLDMzIEBAIHN0YXRpYyB2b2lkIGFwcGVuZEF0dHJpYnV0ZURlc2Mo
Y29uc3QgTm9kZSogbm9kZSwgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFF1YWxpZmllCiAgICAgfQog
fQogCisvKgorc3RhdGljIHZvaWQgYXBwZW5kRWRpdGluZ0Rlc2MoY29uc3QgTm9kZSogbm9kZSwg
U3RyaW5nJiBzdHJpbmcpCit7CisgIGlmICgobm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8IG5vZGUt
PmlzRG9jdW1lbnROb2RlKCkpICYmIG5vZGUtPnJlbmRlcmVyKCkpIHsKKyAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpOworICAgIGlmICghc3R5bGUpIHsK
KyAgICAgICAgc3RyaW5nICs9ICIgKG5vc3R5bGUpIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBzdHJpbmcgKz0gIiBzdHlsZToiICsgU3RyaW5nOjpudW1iZXIocmVpbnRlcnByZXRfY2Fz
dDxsb25nIGxvbmc+KHN0eWxlKSk7CisKKyAgICBzd2l0Y2ggKHN0eWxlLT51c2VyTW9kaWZ5KCkp
IHsKKyAgICAgIGNhc2UgUkVBRF9PTkxZOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUkVB
RF9XUklURToKKyAgICAgICAgc3RyaW5nICs9ICIgdXNlck1vZGlmeTpSRUFEX1dSSVRURSI7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBSRUFEX1dSSVRFX1BMQUlOVEVYVF9PTkxZOgorICAg
ICAgICBzdHJpbmcgKz0gIiB1c2VyTW9kaWZ5OlJFQURfV1JJVFRFX1BMQUlOVEVYVF9PTkxZIjsK
KyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisgIH0KK30KKyovCisKIHZvaWQgTm9kZTo6c2hvd05vZGUoY29uc3QgY2hh
ciogcHJlZml4KSBjb25zdAogewogICAgIGlmICghcHJlZml4KQpAQCAtMjExMyw4ICsyMTQwLDE1
IEBAIHZvaWQgTm9kZTo6c2hvd05vZGUoY29uc3QgY2hhciogcHJlZml4KSBjb25zdAogICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcdCVwIFwiJXNcIlxuIiwgcHJlZml4LCBub2RlTmFtZSgp
LnV0ZjgoKS5kYXRhKCksIHRoaXMsIHZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIFN0cmluZyBhdHRycyA9ICIiOworICAgICAgICBhcHBlbmRBdHRyaWJ1dGVEZXNj
KHRoaXMsIGF0dHJzLCBpZEF0dHIsICIgSUQ9Iik7CiAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZURl
c2ModGhpcywgYXR0cnMsIGNsYXNzQXR0ciwgIiBDTEFTUz0iKTsKICAgICAgICAgYXBwZW5kQXR0
cmlidXRlRGVzYyh0aGlzLCBhdHRycywgc3R5bGVBdHRyLCAiIFNUWUxFPSIpOworICAgICAgICAv
LyBhcHBlbmRBdHRyaWJ1dGVEZXNjKHRoaXMsIGF0dHJzLCBjb250ZW50ZWRpdGFibGVBdHRyLCAi
IENPTlRFTlRFRElUQUJMRT0iKTsKKyAgICAgICAgYXBwZW5kQXR0cmlidXRlRGVzYyh0aGlzLCBh
dHRycywgdGFiaW5kZXhBdHRyLCAiIFRBQklOREVYPSIpOworCisgICAgICAgIC8vIENyYXNoPwor
ICAgICAgICAvLyBhcHBlbmRFZGl0aW5nRGVzYyh0aGlzLCBhdHRycyk7CisKICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIlcyVzXHQlcCVzXG4iLCBwcmVmaXgsIG5vZGVOYW1lKCkudXRmOCgpLmRh
dGEoKSwgdGhpcywgYXR0cnMudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogfQpAQCAtMjI1Nyw3ICsy
MjkxLDE0IEBAIHZvaWQgTm9kZTo6c2hvd1RyZWVGb3JUaGlzQWNyb3NzRnJhbWUoKSBjb25zdAog
ICAgIHNob3dTdWJUcmVlQWNyb3NzRnJhbWUocm9vdE5vZGUsIHRoaXMsICIiKTsKIH0KIAotI2Vu
ZGlmCitib29sIE5vZGU6OnNob3VsZERlYnVnKCkgY29uc3QKK3sKKyAgICAvLyA8ZGl2IHRpbHRl
PSdkZWJ1Zyc+IGZvciBkZWJ1Zy4KKyAgICByZXR1cm4gKGlzRWxlbWVudE5vZGUoKSAmJiB0b0Vs
ZW1lbnQodGhpcyktPmdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpID09ICJkZWJ1ZyIpCisgICAgICAg
ICAgICB8fCAoaXNUZXh0Tm9kZSgpICYmIHBhcmVudE5vZGUoKSAmJiBwYXJlbnROb2RlKCktPnNo
b3VsZERlYnVnKCkpOworfQorCisvLyAjZW5kaWYKIAogLy8gLS0tLS0tLS0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgK
aW5kZXggMTQxY2U5NmJiNWViMjllZTJjYTg0N2IxYzUxZGI1YjFjOGQ1YmJjZi4uMmQ1YjNhODVh
ODNhMDg2NzA3MmZlNzY0ZWMyYTZjZDk5ODIwZTc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC01NTgsNyAr
NTU4LDcgQEAgcHVibGljOgogICAgIC8vCiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tKENv
bnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KTsKIAotI2lmbmRlZiBOREVCVUcKKy8vIG4jaWZu
ZGVmIE5ERUJVRwogICAgIHZpcnR1YWwgdm9pZCBmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZm
ZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAKICAgICB2b2lkIHNob3dOb2RlKGNvbnN0IGNo
YXIqIHByZWZpeCA9ICIiKSBjb25zdDsKQEAgLTU2Niw3ICs1NjYsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzaG93Tm9kZVBhdGhGb3JUaGlzKCkgY29uc3Q7CiAgICAgdm9pZCBzaG93VHJlZUFuZE1h
cmsoY29uc3QgTm9kZSogbWFya2VkTm9kZTEsIGNvbnN0IGNoYXIqIG1hcmtlZExhYmVsMSwgY29u
c3QgTm9kZSogbWFya2VkTm9kZTIgPSAwLCBjb25zdCBjaGFyKiBtYXJrZWRMYWJlbDIgPSAwKSBj
b25zdDsKICAgICB2b2lkIHNob3dUcmVlRm9yVGhpc0Fjcm9zc0ZyYW1lKCkgY29uc3Q7Ci0jZW5k
aWYKKyAgICBib29sIHNob3VsZERlYnVnKCkgY29uc3Q7CisvLyAjZW5kaWYKIAogICAgIHZvaWQg
aW52YWxpZGF0ZU5vZGVMaXN0Q2FjaGVzSW5BbmNlc3RvcnMoY29uc3QgUXVhbGlmaWVkTmFtZSog
YXR0ck5hbWUgPSAwLCBFbGVtZW50KiBhdHRyaWJ1dGVPd25lckVsZW1lbnQgPSAwKTsKICAgICBO
b2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzFjNjg2ZDk4MTc4ZWI5MTk2
Y2UzMTRmOWVjZWU2NjI5OGJjNmE0Yy4uZjlmYzRkM2VkOTE4ZTc4NTBiMTk3ZTViYjM2MTljZTRk
Mjc0ODdkZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA4LTIwICBIYXlhdG8gSXRvICA8
aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBTdXBwb3J0IGFuIGV2ZW50IHByb3BhZ2F0
aW9uIGFjcm9zcyBzZWFtbGVzcyBpZnJhbWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyOTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZnJhbWVzL3NlYW1sZXNzL3Jlc291cmNlcy9maXJl
LWV2ZW50cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFt
bGVzcy1ldmVudHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZyYW1lcy9z
ZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMuaHRtbDogQWRkZWQuCisKIDIwMTItMDgtMjAgIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHJlZHVuZGFudCBU
T1VDSF9MSVNURU5FUiBldmVudCB0eXBlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zy
YW1lcy9zZWFtbGVzcy9yZXNvdXJjZXMvZmlyZS1ldmVudHMuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvZnJhbWVzL3NlYW1sZXNzL3Jlc291cmNlcy9maXJlLWV2ZW50cy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYzZTYyNzAzYzdjZTExNTFhNWJlODRiMjgwZmUxM2VjNDNkMzgyMDUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9zZWFtbGVzcy9yZXNvdXJjZXMvZmlyZS1ldmVu
dHMuaHRtbApAQCAtMCwwICsxLDE4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+
Cis8ZGl2IGlkPSd0YXJnZXQnPjwvZGl2PgorPHNjcmlwdD4KK3dpbmRvdy5hZGRFdmVudExpc3Rl
bmVyKCdtZXNzYWdlJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB2YXIgdGFyZ2V0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldCcpOworICAgIHZhciBldmVudHMgPSBbJ2Fib3J0Jywg
J3NlbGVjdCcsICdjaGFuZ2UnLCAnY2xpY2snLCAnZGJsY2xpY2snLCAncmVzZXQnLCAncmVzaXpl
JywgJ3Njcm9sbCcsICdzZWxlY3RzdGFydCddOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZl
bnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2
ZW50KCdVSUV2ZW50Jyk7CisgICAgICAgIGV2ZW50LmluaXRFdmVudChldmVudHNbaV0sIHRydWUs
IGZhbHNlKTsKKyAgICAgICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgIH0KKyAg
ICB3aW5kb3cudG9wLnBvc3RNZXNzYWdlKCdET05FJywgJyonKTsKK30sIGZhbHNlKTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mcmFt
ZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNzLWV2ZW50cy1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjFjNmVhNThiMGE0NGYwNzU1ZThlNjIyM2Q1ZWJiOWE0YzUzNjc0MQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNzLWV2ZW50cy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNCBAQAorVGVzdCB0aGF0IGV2ZW50IHByb3BhZ2F0ZXMg
YWNyb3NzIHNlYW1sZXNzIGlmcmFtZXMuCisKKyAgYWJvcnQKKworICBzZWxlY3QKKworICBjaGFu
Z2UKKworICBjbGljaworICAgICBAc2VhbWxlc3MtaWZyYW1lICh0YXJnZXQ6IHNlYW1sZXNzLWlm
cmFtZSkKKyAgICAgQGJvZHkgKHRhcmdldDogc2VhbWxlc3MtaWZyYW1lKQorCisgIGRibGNsaWNr
CisgICAgIEBzZWFtbGVzcy1pZnJhbWUgKHRhcmdldDogc2VhbWxlc3MtaWZyYW1lKQorICAgICBA
Ym9keSAodGFyZ2V0OiBzZWFtbGVzcy1pZnJhbWUpCisKKyAgcmVzZXQKKworICByZXNpemUKKwor
ICBzY3JvbGwKKworICBzZWxlY3RzdGFydAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNzLWV2ZW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgzZjgzMTJj
YmMxZjUxZmZkZjllN2EyY2Y5MjFmNTVjOTczMmY2YTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMuaHRtbApAQCAtMCww
ICsxLDcxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHkgaWQ9J2JvZHknPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorZGVidWcoIlRlc3QgdGhhdCBldmVudCBwcm9wYWdhdGVzIGFjcm9zcyBzZWFtbGVz
cyBpZnJhbWVzLiIpCisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIu
ZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIg
ZXZlbnRzID0gWydhYm9ydCcsICdzZWxlY3QnLCAnY2hhbmdlJywgJ2NsaWNrJywgJ2RibGNsaWNr
JywgJ3Jlc2V0JywgJ3Jlc2l6ZScsICdzY3JvbGwnLCAnc2VsZWN0c3RhcnQnXTsKK3ZhciBldmVu
dFJlY29yZHMgPSB7fTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyArK2kp
CisgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKGV2ZW50c1tpXSwgcmVjb3JkRXZl
bnQpOworCitmdW5jdGlvbiBpZnJhbWVMb2FkZWQoaWZyYW1lKSB7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBldmVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGlmcmFtZS5hZGRFdmVudExpc3Rl
bmVyKGV2ZW50c1tpXSwgcmVjb3JkRXZlbnQpOworICAgIGlmcmFtZS5jb250ZW50V2luZG93LnBv
c3RNZXNzYWdlKCdmaXJlJywgJyonKTsKK30KKwordmFyIG1lc3NhZ2VSZWNlaXZlZENvdW50ID0g
MDsKKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbihldmVudCkg
eworICAgIGlmICgrK21lc3NhZ2VSZWNlaXZlZENvdW50ID09IDIpICB7CisgICAgICAgIGR1bXBE
aXNwYXRjaGVkRXZlbnQoKTsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfQorfSwgZmFsc2UpOworCitmdW5j
dGlvbiByZWNvcmRFdmVudChldmVudCkKK3sKKyAgICB2YXIgZXZlbnRUeXBlID0gZXZlbnQudHlw
ZQorICAgIGlmICghZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0pCisgICAgICAgIGV2ZW50UmVjb3Jk
c1tldmVudFR5cGVdID0gW107CisgICAgdmFyIGV2ZW50U3RyaW5nID0gJyc7CisgICAgaWYgKGV2
ZW50LmN1cnJlbnRUYXJnZXQpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgQCcgKyBldmVudC5j
dXJyZW50VGFyZ2V0LmlkOworICAgIGlmIChldmVudC50YXJnZXQpCisgICAgICAgIGV2ZW50U3Ry
aW5nICs9ICcgKHRhcmdldDogJyArIGV2ZW50LnRhcmdldC5pZCArICcpJzsKKyAgICBpZiAoZXZl
bnQucmVsYXRlZFRhcmdldCkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAocmVsYXRlZDogJyAr
IGV2ZW50LnJlbGF0ZWRUYXJnZXQuaWQgKyAnKSc7CisgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2Ug
PT0gMSkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyhjYXB0dXJpbmcgcGhhc2UpJzsKKyAgICBp
ZiAoZXZlbnQudGFyZ2V0ICYmIGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgZXZlbnQudGFyZ2V0Lmlk
ID09IGV2ZW50LmN1cnJlbnRUYXJnZXQuaWQpCisgICAgICAgIHNob3VsZEJlKCJldmVudC5ldmVu
dFBoYXNlIiwgIjIiLCB0cnVlKTsKKyAgICBldmVudFJlY29yZHNbZXZlbnRUeXBlXS5wdXNoKGV2
ZW50U3RyaW5nKTsKK30KKworZnVuY3Rpb24gZHVtcERpc3BhdGNoZWRFdmVudCgpCit7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIGV2
ZW50VHlwZSA9IGV2ZW50c1tpXTsKKyAgICAgICAgZGVidWcoJ1xuICAnICsgZXZlbnRUeXBlKTsK
KyAgICAgICAgdmFyIHJlY29yZCA9IGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdIHx8IFtdOworICAg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJlY29yZC5sZW5ndGg7ICsraikKKyAgICAgICAgICAg
IGRlYnVnKCcgICAgJyArIHJlY29yZFtqXSkKKyAgICB9Cit9CisKKzwvc2NyaXB0PgorPGRpdiBp
ZD0iY29udGFpbmVyIj4KKyAgICA8aWZyYW1lIGlkPSdzZWFtbGVzcy1pZnJhbWUnIG9ubG9hZD0n
aWZyYW1lTG9hZGVkKHRoaXMpJyBzcmM9J3Jlc291cmNlcy9maXJlLWV2ZW50cy5odG1sJyBzZWFt
bGVzcz0ndHJ1ZSc+PC9pZnJhbWU+CisgICAgPGlmcmFtZSBpZD0nbm9uLXNlYW1sZXNzLWlmcmFt
ZScgb25sb2FkPSdpZnJhbWVMb2FkZWQodGhpcyknIHNyYz0ncmVzb3VyY2VzL2ZpcmUtZXZlbnRz
Lmh0bWwnPjwvaWZyYW1lPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160049</attachid>
            <date>2012-08-22 17:43:49 -0700</date>
            <delta_ts>2012-10-15 04:02:14 -0700</delta_ts>
            <desc>Sync ToT</desc>
            <filename>bug-91290-20120823094347.patch</filename>
            <type>text/plain</type>
            <size>37896</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2Y1NWY1MzRiZjIzM2E4
MzhmZDU1MGY3NmMxZmU1YmY5OWJiNWRiMS4uMzMxMDVhYzFmYjUyNTg2YzRiMmQ5ZTRkOGI1MzM3
YjE4MmJkZWRmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAxMi0wOC0yMCAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVu
dCBwcm9wYWdhdGlvbiBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjkwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVudCBwcm9wYWdhdGlv
biBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgQXMgdGhlIGZpcnN0IHN0ZXAsICdj
bGljaycgYW5kICdkYmxjbGljaycgZXZlbnRzIGhhdmUgYmVlbiBzdXBwb3J0ZWQuCisKKyAgICAg
ICAgVG8gc3VwcG9ydCBhbiBldmVudCBkaXNwYXRjaGluZyBhY3Jvc3MgYnJvd3NpbmcgY29udGV4
dCwgSSd2ZQorICAgICAgICBpbnRyb2R1Y2VkIGEgRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdD
b250ZXh0LCB3aG9zZSByb2xlIGlzIHNpbWlsYXIgdG8KKyAgICAgICAgYW4gRXZlbnREaXNwYXRj
aGVyIHByaW9yIHRvIHRoaXMgcGF0Y2guIEJ1dCB0aGUgaW50ZXJuYWwKKyAgICAgICAgc3RydWN0
dXJlIHdhcyBzaWduaWZpY2FudGx5IGNoYW5nZWQgc28gdGhhdCBpdCBjYW4gYmUgbWFuYWdlZCBm
cm9tIG91dHNpZGUuCisKKyAgICAgICAgQW4gRXZlbnREaXNwYXRjaGVyIG5vdyBhY3RzIGFzIGlm
IGl0IHdlcmUgYSBtZXRhIGRpc3BhdGNoZXIgd2hpY2gKKyAgICAgICAgZGVsZWdhdGVzIGV2ZW50
IGRpc3BhdGNoaW5nIHRvIGVhY2ggZGlzcGF0Y2hlciBpbiBlYWNoIGJyb3dzaW5nCisgICAgICAg
IGNvbnRleHQuIEl0IG1hbmFnZXMgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIG9mIGRpc3BhdGNoZXJz
LgorCisgICAgICAgIEFjY29yZGluZyB0byB0aGUgZGlzY3Vzc2lvbiBvZiBidWcgOTEyOTAsIHdo
YXR3ZyBtaWdodCBzcGVjCisgICAgICAgIHdoYXRldmVyIFdlYktpdCBpbXBsZW1lbnRzLiAgU28g
bGV0IG1lIGV4cGxhaW4gaG93IGV2ZW50CisgICAgICAgIGRpc3BhdGNoaW5nIHdvcmtzIGFjcm9z
cyBzZWFtbGVzcyBpZnJhbWVzIGJyaWVmbHkgaGVyZToKKworICAgICAgICAxLiBBbmNlc3RvciBu
b2RlcyBvZiBldmVudCBhcmUgY2FsY3VsYXRlZCBhcyB1c3VhbCwgYnV0IGlmIHRoZQorICAgICAg
ICAgICBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHQgaXMgdGhhdCBvZiBhIHNlYW1sZXNzIGlmcmFt
ZSwgY29udGludWUgdG8KKyAgICAgICAgICAgdHJhdmVyc2luZyBhbmNlc3RvcnMgb2YgdGhlIHBh
cmVudCBicm93c2luZyBjb250ZXh0LgorICAgICAgICAyLiBGb3IgZWFjaCBicm93c2luZyBjb250
ZXh0LCBjbG9uZSB0aGUgZXZlbnQgb2JqZWN0LiBJbiB0aGUgbGF0ZXIKKyAgICAgICAgICAgZXZl
bnQgZGlzcGF0Y2hpbmcsIHVzZSB0aGUgY2xvbmVkIGV2ZW50IG9iamVjdCBpbiBlYWNoIGJyb3dz
aW5nCisgICAgICAgICAgIGNvbnRleHQgc28gdGhhdCB3ZSBjYW4gaXNvbGF0ZSBldmVudCBvYmpl
Y3RzLgorICAgICAgICAzLiBUYXJnZXQgb2YgdGhlIGNsb25lZCBldmVudCBvYmplY3RzIGlzIHJl
dGFyZ2V0ZWQgdG8gaWZyYW1lJ3Mgb3duZXIgZWxlbWVudC4KKyAgICAgICAgNC4gUHJvY2VzcyBj
YXB0dXJpbmcsIHRhcmdldCBhbmQgYnViYmxpbmcgcGhhc2VzIGFzIGlmIHRoZXJlIHdhcworICAg
ICAgICAgICBvbmUgYmlnICdhbmNlc3RvcicgY2hhaW4uICBUaGF0IG1lYW5zIGlmIGFuIGV2ZW50
IGxpc3RlbmVyIGluIGFuCisgICAgICAgICAgIHVwcGVyIGJyb3dzaW5nIGNvbnRleHQgY2FsbHMg
c3RvcFByb3BhZ2F0aW9uKCkgYXQgY2FwdHVyaW5nCisgICAgICAgICAgIHBoYXNlLCBuZXN0ZWQg
YnJvd3NpbmcgY29udGV4dHMgbmV2ZXIgcmVjZWl2ZSBhbiBldmVudC4KKyAgICAgICAgNS4gVW5s
ZXNzIGRlZmF1bHQgaXMgcHJldmVudGVkLCB0cnkgdG8gY2FsbCBkZWZhdWx0IGV2ZW50IGhhbmRs
ZXIKKyAgICAgICAgICAgc3RhcnRpbmcgZnJvbSB0aGUgYm90dG9tIG5vZGUgb2YgYW5jZXN0b3Jz
IHVudGlsIGEgZGVmYXVsdCBpcworICAgICAgICAgICBoYW5kbGVkLgorCisgICAgICAgIEV4YW1w
bGU6ICBTdXBwb3NlIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBIVE1MIGFuZCBuZXN0ZWQgc2VhbWxl
c3MgaWZyYW1lcy4gVGhlcmUgYXJlIHRocmVlIGJyb3dzaW5nIGNvbnRleHRzLgorCisgICAgICAg
IDEpIGRvYy5odG1sOgorICAgICAgICAgICA8QT4KKyAgICAgICAgICAgICAgPEI+CisgICAgICAg
ICAgICAgICAgPGlmcmFtZSBpZD1DIHNlYW1sZXNzIHNyYz0iaWZyYW1lMS5odG1sIj4KKworICAg
ICAgICAyKSBpZnJhbWUxLmh0bWw6CisgICAgICAgICAgIDxEPgorICAgICAgICAgICAgICA8RT4K
KyAgICAgICAgICAgICAgICA8aWZyYW1lIGlkPUYgc2VhbWxlc3Mgc3JjPSJpZnJhbWUyLmh0bWwi
PgorCisgICAgICAgIDMpIGlmcmFtZTIuaHRtbDoKKyAgICAgICAgICAgPEc+CisgICAgICAgICAg
ICAgIDxIPgorCisgICAgICAgIElmIGEgY2xpY2snIGV2ZW50IGlzIGZpcmVkIG9uIG5vZGUgRiwg
d2Ugd2lsbCBkaXNwYXRjaCBldmVudHMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKyAgICAgICAg
ICAxLiBBIChAY2FwdHVyZSkgKHRhcmdldCA9PSBDKQorICAgICAgICAgIDIuIEIgKEBjYXB0dXJl
KSAodGFyZ2V0ID09IEMpCisgICAgICAgICAgMy4gRCAoQGNhcHR1cmUpICh0YXJnZXQgPT0gRikK
KyAgICAgICAgICA0LiBFIChAY2FwdHVyZSkgKHRhcmdldCA9PSBGKQorICAgICAgICAgIDUuIEcg
KEBjYXB0dXJlKSAodGFyZ2V0ID09IEgpCisgICAgICAgICAgNi4gSCAoQHRhcmdldCkgICh0YXJn
ZXQgPT0gSCkKKyAgICAgICAgICA3LiBHIChAYnViYmxlKSAgKHRhcmdldCA9PSBIKQorICAgICAg
ICAgIDguIEYgKEB0YXJnZXQpICAodGFyZ2V0ID09IEYpCisgICAgICAgICAgOS4gRSAoQGJ1YmJs
ZSkgICh0YXJnZXQgPT0gRikKKyAgICAgICAgICA5LiBEIChAYnViYmxlKSAgKHRhcmdldCA9PSBG
KQorICAgICAgICAgMTAuIEMgKEB0YXJnZXQpICAodGFyZ2V0ID09IEMpCisgICAgICAgICAxMS4g
QiAoYnViYmxlKSAgICh0YXJnZXQgPT0gQykKKyAgICAgICAgIDEyLiBBIChidWJibGUpICAgKHRh
cmdldCA9PSBDKQorCisgICAgICAgIFRlc3Q6IGZhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNz
LWV2ZW50cy5odG1sCisKKyAgICAgICAgKiBkb20vRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnQ6OmNsb25lRm9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9F
dmVudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFdmVudCk6CisgICAgICAgICog
ZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChFdmVudFJlbGF0ZWRUYXJnZXRBZGp1
c3Rlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBlckZyYW1lRGlzcGF0Y2hlcik6
CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6Om5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpldmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZXJGcmFtZURpc3BhdGNoZXI6OnNob3VsZENvbnRpbnVlVG9QYXJlbnREb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpQZXJGcmFtZURpc3BhdGNoZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpjYWx1Y3VsYXRlRXZlbnRB
bmNlc3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjp3aWxsRGlz
cGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6OmRpc3Bh
dGNoRXZlbnRQcmVQcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1lRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1l
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBl
ckZyYW1lRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50RGVmYXVsdEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpyZXNldFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6OnRvcEV2ZW50Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpldmVudFNob3VsZEJlU3RvcHBlZEF0Qm91bmRhcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRjaEJl
aGF2aW9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRj
aGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNpbXVsYXRlZENs
aWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFByb3BhZ2F0ZUV2ZW50QWNyb3NzU2VhbWxl
c3NJRnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6cHJlcGFyZUV2
ZW50RGlzcGF0Y2hlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjphZGp1
c3RSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6Zmly
ZURpc3BhdGNoZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURp
c3BhdGNoZXJzUG9zdFByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVy
OjpmaXJlRGlzcGF0Y2hlcnNEZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBkb20vRXZl
bnREaXNwYXRjaGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV2ZW50RGlzcGF0
Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6Om5vZGUpOgorICAgICAg
ICAqIGRvbS9Nb3VzZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkQ2xpbmV0
WCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkQ2xpbmV0
WSk6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50OjpjbG9uZUZvcik6CisgICAgICAgICog
ZG9tL01vdXNlRXZlbnQuaDoKKyAgICAgICAgKE1vdXNlRXZlbnQpOgorCiAyMDEyLTA4LTIyICBK
b3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBJ
REJSZXF1ZXN0IGNhbiBiZSBkZXN0cnVjdGVkIGR1cmluZyBhYm9ydApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBlNTgzOTBjNWU0YWQ5ZDg4MGVjZWZkZDUxZDhmMGRk
ODA4NzYxMTllLi5jYzk0Y2RiMDc4ZWVjYTdjN2IwZWU5N2FiMmE2ZGMyNjYxNjRmYWJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkV2ZW50Q29udGV4dC5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hNZWRpYXRvci5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc2VydGlvblBvaW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC01MCw2ICs1MSw2
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2VudW0gRXZlbnREaXNwYXRjaEJlaGF2aW9y
IHsKKyAgICBSZXRhcmdldEV2ZW50LAorICAgIFN0YXlJbnNpZGVTaGFkb3dET00KK307CisKK2Vu
dW0gRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiB7CisgICAgQ29udGludWVEaXNwYXRjaGluZywK
KyAgICBEb25lRGlzcGF0Y2hpbmcKK307CisKK2VudW0gRXZlbnRBbmNlc3RvckNvbnRpbnVhdGlv
biB7CisgICAgRXZlbnRBbmNlc3RvclN0b3AsCisgICAgRXZlbnRBbmNlc3RvckNvbnRpbnVlVG9Q
YXJlbnQKK307CisKK2NsYXNzIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyIHsKK3B1YmxpYzoK
KyAgICBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVm
UHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpOworICAgIHZvaWQgYWRqdXN0KFZlY3RvcjxFdmVudENv
bnRleHQ+Jik7Citwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxUcmVlU2NvcGUqLCBFdmVu
dFRhcmdldCo+IFJlbGF0ZWRUYXJnZXRNYXA7CisgICAgRXZlbnRUYXJnZXQqIGZpbmRSZWxhdGVk
VGFyZ2V0KFRyZWVTY29wZSopOworCisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQ
dHI8Tm9kZT4gbV9yZWxhdGVkVGFyZ2V0OworICAgIFJlbGF0ZWRUYXJnZXRNYXAgbV9yZWxhdGVk
VGFyZ2V0TWFwOworfTsKKworY2xhc3MgUGVyRnJhbWVEaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICBQZXJGcmFtZURpc3BhdGNoZXIoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lk
IGFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRh
cmdldCk7CisKKyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9
CisgICAgY29uc3QgRXZlbnQqIGV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmVudC5nZXQoKTsg
fQorCisgICAgYm9vbCBzaG91bGRDb250aW51ZVRvUGFyZW50RG9jdW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2V2ZW50QW5jZXN0b3JDb250aW51YXRpb24gPT0gRXZlbnRBbmNlc3RvckNvbnRpbnVl
VG9QYXJlbnQ7IH0KKworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVu
dFByZVByb2Nlc3MoKTsKKyAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZl
bnRBdENhcHR1cmluZygpOworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hF
dmVudEF0VGFyZ2V0KCk7CisgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2
ZW50QXRCdWJibGluZygpOworICAgIHZvaWQgZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKCk7Cisg
ICAgdm9pZCBkaXNwYXRjaEV2ZW50RGVmYXVsdEhhbmRsZXIoKTsKKworICAgIHZvaWQgcmVzZXRU
YXJnZXQoKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbERpc3BhdGNo
RXZlbnQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBFdmVudERpc3BhdGNoQmVoYXZpb3IgZGV0
ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihTaGFkb3dSb290KiwgRXZlbnRUYXJnZXQqKTsKKyAgICBj
b25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29udGV4dCgpOworICAgIEV2ZW50QW5jZXN0b3JD
b250aW51YXRpb24gY2FsdWN1bGF0ZUV2ZW50QW5jZXN0b3JzKCk7CisKKyAgICBSZWZQdHI8Tm9k
ZT4gbV9ub2RlOworICAgIFJlZlB0cjxFdmVudD4gbV9ldmVudDsKKyAgICBWZWN0b3I8RXZlbnRD
b250ZXh0PiBtX2FuY2VzdG9yczsKKyAgICBFdmVudEFuY2VzdG9yQ29udGludWF0aW9uIG1fZXZl
bnRBbmNlc3RvckNvbnRpbnVhdGlvbjsKKyAgICBSZWZQdHI8RnJhbWVWaWV3PiBtX3ZpZXc7Cisg
ICAgV2luZG93RXZlbnRDb250ZXh0IG1fd2luZG93RXZlbnRDb250ZXh0OworICAgIHZvaWQqIG1f
cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQ7Cit9OworCiBzdGF0aWMgSGFzaFNldDxOb2Rl
Kj4qIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gMDsKIAogRXZlbnRSZWxhdGVk
VGFyZ2V0QWRqdXN0ZXI6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKFBhc3NSZWZQdHI8Tm9k
ZT4gbm9kZSwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KQpAQCAtMTIxLDEzICsxODQs
NiBAQCBFdmVudFRhcmdldCogRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OmZpbmRSZWxhdGVk
VGFyZ2V0KFRyZWVTY29wZSogc2NvcGUpCiAgICAgcmV0dXJuIHJlbGF0ZWRUYXJnZXQ7CiB9CiAK
LWJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG5vZGUsIFBhc3NSZWZQ
dHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKLXsKLSAgICBBU1NFUlQoIWV2ZW50
RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0KLSAgICBFdmVudERpc3BhdGNoZXIgZGlzcGF0Y2hlcihu
b2RlKTsKLSAgICByZXR1cm4gbWVkaWF0b3ItPmRpc3BhdGNoRXZlbnQoJmRpc3BhdGNoZXIpOwot
fQogCiBpbmxpbmUgc3RhdGljIEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdU
YXJnZXRSdWxlcyhOb2RlKiByZWZlcmVuY2VOb2RlKQogewpAQCAtMTUxLDcgKzIwNyw3IEBAIGlu
bGluZSBzdGF0aWMgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1
bGVzKE5vZGUqIHJlZmVyZW5jZU5vCiAgICAgcmV0dXJuIHJlZmVyZW5jZU5vZGU7CiB9CiAKLXZv
aWQgRXZlbnREaXNwYXRjaGVyOjphZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiBldmVudCwgUGFz
c1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCkKK3ZvaWQgUGVyRnJhbWVEaXNw
YXRjaGVyOjphZGp1c3RSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJl
bGF0ZWRUYXJnZXQpCiB7CiAgICAgaWYgKCFwcnBSZWxhdGVkVGFyZ2V0KQogICAgICAgICByZXR1
cm47CkBAIC0xNjAsMjYgKzIxNiwyOSBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVs
YXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+CiAgICAgICAg
IHJldHVybjsKICAgICBpZiAoIW1fbm9kZS5nZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVu
c3VyZUV2ZW50QW5jZXN0b3JzKGV2ZW50KTsKKyAgICBpZiAobV9hbmNlc3RvcnMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CiAgICAgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIobV9ub2Rl
LCByZWxhdGVkVGFyZ2V0LnJlbGVhc2UoKSkuYWRqdXN0KG1fYW5jZXN0b3JzKTsKIH0KIAotRXZl
bnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKK1BlckZyYW1lRGlzcGF0
Y2hlcjo6UGVyRnJhbWVEaXNwYXRjaGVyKE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQogICAgIDogbV9ub2RlKG5vZGUpCi0gICAgLCBtX2FuY2VzdG9yc0luaXRpYWxpemVkKGZh
bHNlKQotI2lmbmRlZiBOREVCVUcKLSAgICAsIG1fZXZlbnREaXNwYXRjaGVkKGZhbHNlKQotI2Vu
ZGlmCisgICAgLCBtX2V2ZW50KGV2ZW50KQorICAgICwgbV9hbmNlc3RvcnMoKQorICAgICwgbV9l
dmVudEFuY2VzdG9yQ29udGludWF0aW9uKGNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycygpKQorICAg
ICwgbV92aWV3KG1fbm9kZS0+ZG9jdW1lbnQoKS0+dmlldygpKQorICAgICwgbV93aW5kb3dFdmVu
dENvbnRleHQobV9ldmVudC5nZXQoKSwgbV9ub2RlLmdldCgpLCB0b3BFdmVudENvbnRleHQoKSkK
KyAgICAsIG1fcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQoMCkKIHsKLSAgICBBU1NFUlQo
bm9kZSk7Ci0gICAgbV92aWV3ID0gbm9kZS0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIEFTU0VS
VChtX25vZGUpOworICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKKyAgICBB
U1NFUlQoIW1fZXZlbnQtPnR5cGUoKS5pc051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29kZSBjYW4g
Y3JlYXRlIGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZSwgYnV0IG5vdCBudWxsLgorICAgIG1f
ZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhtX25v
ZGUuZ2V0KCkpKTsKIH0KIAotdm9pZCBFdmVudERpc3BhdGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0
b3JzKEV2ZW50KiBldmVudCkKK0V2ZW50QW5jZXN0b3JDb250aW51YXRpb24gUGVyRnJhbWVEaXNw
YXRjaGVyOjpjYWx1Y3VsYXRlRXZlbnRBbmNlc3RvcnMoKQogewotICAgIGlmIChtX2FuY2VzdG9y
c0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9hbmNlc3RvcnNJbml0aWFsaXpl
ZCA9IHRydWU7CisgICAgQVNTRVJUKG1fYW5jZXN0b3JzLmlzRW1wdHkoKSk7CiAgICAgYm9vbCBp
bkRvY3VtZW50ID0gbV9ub2RlLT5pbkRvY3VtZW50KCk7CiAgICAgYm9vbCBpc1NWR0VsZW1lbnQg
PSBtX25vZGUtPmlzU1ZHRWxlbWVudCgpOwogICAgIFZlY3RvcjxFdmVudFRhcmdldCo+IHRhcmdl
dFN0YWNrOwpAQCAtMTkyLDE3OCArMjUxLDEyNiBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZW5z
dXJlRXZlbnRBbmNlc3RvcnMoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgdGFyZ2V0U3RhY2su
YXBwZW5kKHRhcmdldFN0YWNrLmxhc3QoKSk7CiAgICAgICAgIG1fYW5jZXN0b3JzLmFwcGVuZChF
dmVudENvbnRleHQobm9kZSwgZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobm9k
ZSksIHRhcmdldFN0YWNrLmxhc3QoKSkpOwogICAgICAgICBpZiAoIWluRG9jdW1lbnQpCi0gICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gRXZlbnRBbmNlc3RvclN0b3A7CiAg
ICAgICAgIGxhc3QgPSBub2RlOwogICAgICAgICBpZiAoIW5vZGUtPmlzU2hhZG93Um9vdCgpKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChkZXRlcm1pbmVEaXNwYXRjaEJlaGF2
aW9yKGV2ZW50LCB0b1NoYWRvd1Jvb3Qobm9kZSksIHRhcmdldFN0YWNrLmxhc3QoKSkgPT0gU3Rh
eUluc2lkZVNoYWRvd0RPTSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGRldGVy
bWluZURpc3BhdGNoQmVoYXZpb3IodG9TaGFkb3dSb290KG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0
KCkpID09IFN0YXlJbnNpZGVTaGFkb3dET00pCisgICAgICAgICAgICByZXR1cm4gRXZlbnRBbmNl
c3RvclN0b3A7CiAgICAgICAgIGlmICghaXNTVkdFbGVtZW50KSB7CiAgICAgICAgICAgICBBU1NF
UlQoIXRhcmdldFN0YWNrLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICB0YXJnZXRTdGFjay5yZW1v
dmVMYXN0KCk7CiAgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIEV2ZW50QW5jZXN0b3JDb250
aW51ZVRvUGFyZW50OwogfQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTY29wZWRF
dmVudChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4gbWVkaWF0
b3IpCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgUGVyRnJhbWVEaXNwYXRjaGVyOjp3
aWxsRGlzcGF0Y2hFdmVudCgpIGNvbnN0CiB7Ci0gICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHRh
cmdldCBoZXJlIGJlY2F1c2UgaXQgY2FuIGdvIGF3YXkgYnkgdGhlIHRpbWUgd2UgYWN0dWFsbHkg
ZmlyZSB0aGUgZXZlbnQuCi0gICAgbWVkaWF0b3ItPmV2ZW50KCktPnNldFRhcmdldChldmVudFRh
cmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhub2RlKSk7Ci0gICAgU2NvcGVkRXZlbnRRdWV1
ZTo6aW5zdGFuY2UoKS0+ZW5xdWV1ZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcihtZWRpYXRvcik7Cisg
ICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnQobV9u
b2RlLT5kb2N1bWVudCgpLCAqbV9ldmVudCwgbV93aW5kb3dFdmVudENvbnRleHQud2luZG93KCks
IG1fbm9kZS5nZXQoKSwgbV9hbmNlc3RvcnMpOwogfQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRl
cmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29sIHNob3dQcmVzc2VkTG9vaykK
LXsKLSAgICBpZiAobm9kZS0+ZGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcykKLSAgICAgICAgZ05vZGVzRGlzcGF0
Y2hpbmdTaW11bGF0ZWRDbGlja3MgPSBuZXcgSGFzaFNldDxOb2RlKj47Ci0gICAgZWxzZSBpZiAo
Z05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPmNvbnRhaW5zKG5vZGUpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+YWRkKG5v
ZGUpOwotCi0gICAgLy8gc2VuZCBtb3VzZWRvd24gYW5kIG1vdXNldXAgYmVmb3JlIHRoZSBjbGlj
aywgaWYgcmVxdWVzdGVkCi0gICAgaWYgKHNlbmRNb3VzZUV2ZW50cykKLSAgICAgICAgRXZlbnRE
aXNwYXRjaGVyKG5vZGUpLmRpc3BhdGNoRXZlbnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCwgbm9kZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZp
ZXcoKSwgdW5kZXJseWluZ0V2ZW50KSk7Ci0gICAgbm9kZS0+c2V0QWN0aXZlKHRydWUsIHNob3dQ
cmVzc2VkTG9vayk7Ci0gICAgaWYgKHNlbmRNb3VzZUV2ZW50cykKLSAgICAgICAgRXZlbnREaXNw
YXRjaGVyKG5vZGUpLmRpc3BhdGNoRXZlbnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCks
IHVuZGVybHlpbmdFdmVudCkpOwotICAgIG5vZGUtPnNldEFjdGl2ZShmYWxzZSk7Ci0KLSAgICAv
LyBhbHdheXMgc2VuZCBjbGljawotICAgIEV2ZW50RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2
ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwg
bm9kZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwgdW5kZXJseWluZ0V2ZW50KSk7Ci0KLSAg
ICBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+cmVtb3ZlKG5vZGUpOwotfQotCi1i
b29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBF
dmVudCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgQVNTRVJUKCFtX2V2ZW50RGlzcGF0Y2hlZCk7
Ci0gICAgbV9ldmVudERpc3BhdGNoZWQgPSB0cnVlOwotI2VuZGlmCi0gICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IHBycEV2ZW50OwotICAgIENoaWxkTm9kZXNMYXp5U25hcHNob3Q6OnRha2VDaGls
ZE5vZGVzTGF6eVNuYXBzaG90KCk7Ci0KLSAgICBldmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0
UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOwotICAgIEFTU0VSVCghZXZl
bnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpKTsKLSAg
ICBBU1NFUlQoIWV2ZW50LT50eXBlKCkuaXNOdWxsKCkpOyAvLyBKYXZhU2NyaXB0IGNvZGUgY2Fu
IGNyZWF0ZSBhbiBldmVudCB3aXRoIGFuIGVtcHR5IG5hbWUsIGJ1dCBub3QgbnVsbC4KLSAgICBl
bnN1cmVFdmVudEFuY2VzdG9ycyhldmVudC5nZXQoKSk7Ci0gICAgV2luZG93RXZlbnRDb250ZXh0
IHdpbmRvd0V2ZW50Q29udGV4dChldmVudC5nZXQoKSwgbV9ub2RlLmdldCgpLCB0b3BFdmVudENv
bnRleHQoKSk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnQobV9ub2RlLT5kb2N1bWVu
dCgpLCAqZXZlbnQsIHdpbmRvd0V2ZW50Q29udGV4dC53aW5kb3coKSwgbV9ub2RlLmdldCgpLCBt
X2FuY2VzdG9ycyk7Ci0KLSAgICB2b2lkKiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdDsK
LSAgICBpZiAoZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MoZXZlbnQsIHByZURpc3BhdGNoRXZlbnRI
YW5kbGVyUmVzdWx0KSA9PSBDb250aW51ZURpc3BhdGNoaW5nKQotICAgICAgICBpZiAoZGlzcGF0
Y2hFdmVudEF0Q2FwdHVyaW5nKGV2ZW50LCB3aW5kb3dFdmVudENvbnRleHQpID09IENvbnRpbnVl
RGlzcGF0Y2hpbmcpCi0gICAgICAgICAgICBpZiAoZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KGV2ZW50
KSA9PSBDb250aW51ZURpc3BhdGNoaW5nKQotICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnRB
dEJ1YmJsaW5nKGV2ZW50LCB3aW5kb3dFdmVudENvbnRleHQpOwotICAgIGRpc3BhdGNoRXZlbnRQ
b3N0UHJvY2VzcyhldmVudCwgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOwotCi0gICAg
Ly8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQgZGlzcGF0Y2gsIHRoZSBldmVudCdzIHRhcmdldCBv
YmplY3QgaXMgdGhlCi0gICAgLy8gb3V0ZXJtb3N0IHNoYWRvdyBET00gYm91bmRhcnkuCi0gICAg
ZXZlbnQtPnNldFRhcmdldCh3aW5kb3dFdmVudENvbnRleHQudGFyZ2V0KCkpOwotICAgIGV2ZW50
LT5zZXRDdXJyZW50VGFyZ2V0KDApOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
RGlzcGF0Y2hFdmVudChjb29raWUpOwotCi0gICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZl
bnRlZCgpOwotfQotCi1pbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoRXZlbnRQcmVQcm9jZXNzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCB2
b2lkKiYgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpCitpbmxpbmUgRXZlbnREaXNwYXRj
aENvbnRpbnVhdGlvbiBQZXJGcmFtZURpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRQcmVQcm9jZXNz
KCkKIHsKICAgICAvLyBHaXZlIHRoZSB0YXJnZXQgbm9kZSBhIGNoYW5jZSB0byBkbyBzb21lIHdv
cmsgYmVmb3JlIERPTSBldmVudCBoYW5kbGVycyBnZXQgYSBjcmFjay4KLSAgICBwcmVEaXNwYXRj
aEV2ZW50SGFuZGxlclJlc3VsdCA9IG1fbm9kZS0+cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZl
bnQuZ2V0KCkpOwotICAgIHJldHVybiAobV9hbmNlc3RvcnMuaXNFbXB0eSgpIHx8IGV2ZW50LT5w
cm9wYWdhdGlvblN0b3BwZWQoKSkgPyBEb25lRGlzcGF0Y2hpbmcgOiBDb250aW51ZURpc3BhdGNo
aW5nOworICAgIG1fcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQgPSBtX25vZGUtPnByZURp
c3BhdGNoRXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCkpOworICAgIHJldHVybiAobV9hbmNlc3Rv
cnMuaXNFbXB0eSgpIHx8IG1fZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKSA/IERvbmVEaXNw
YXRjaGluZyA6IENvbnRpbnVlRGlzcGF0Y2hpbmc7CiB9CiAKLWlubGluZSBFdmVudERpc3BhdGNo
Q29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBXaW5kb3dFdmVudENvbnRleHQmIHdpbmRvd0V2ZW50Q29u
dGV4dCkKK2lubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIFBlckZyYW1lRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKCkKIHsKICAgICAvLyBUcmlnZ2VyIGNhcHR1cmlu
ZyBldmVudCBoYW5kbGVycywgc3RhcnRpbmcgYXQgdGhlIHRvcCBhbmQgd29ya2luZyBvdXIgd2F5
IGRvd24uCi0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7
CisgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKIAot
ICAgIGlmICh3aW5kb3dFdmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkp
ICYmIGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICBpZiAobV93aW5kb3dFdmVudENv
bnRleHQuaGFuZGxlTG9jYWxFdmVudHMobV9ldmVudC5nZXQoKSkgJiYgbV9ldmVudC0+cHJvcGFn
YXRpb25TdG9wcGVkKCkpCiAgICAgICAgIHJldHVybiBEb25lRGlzcGF0Y2hpbmc7CiAKICAgICBm
b3IgKHNpemVfdCBpID0gbV9hbmNlc3RvcnMuc2l6ZSgpIC0gMTsgaSA+IDA7IC0taSkgewogICAg
ICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4dCA9IG1fYW5jZXN0b3JzW2ldOwog
ICAgICAgICBpZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkgewot
ICAgICAgICAgICAgaWYgKGV2ZW50LT5idWJibGVzKCkpCisgICAgICAgICAgICBpZiAobV9ldmVu
dC0+YnViYmxlcygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZXZl
bnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgICAgICAgICBtX2V2ZW50
LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwogICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOwotICAg
ICAgICBldmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwotICAgICAg
ICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICAgICAgbV9ldmVudC0+
c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKKyAgICAgICAgZXZlbnRDb250
ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpOworICAgICAgICBpZiAobV9ldmVu
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gRG9uZURpc3BhdGNo
aW5nOwogICAgIH0KIAogICAgIHJldHVybiBDb250aW51ZURpc3BhdGNoaW5nOwogfQogCi1pbmxp
bmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZl
bnRBdFRhcmdldChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2lubGluZSBFdmVudERpc3BhdGNo
Q29udGludWF0aW9uIFBlckZyYW1lRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KCkK
IHsKLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKLSAgICBtX2Fu
Y2VzdG9yc1swXS5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7Ci0gICAgcmV0dXJuIGV2
ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSA/IERvbmVEaXNwYXRjaGluZyA6IENvbnRpbnVlRGlz
cGF0Y2hpbmc7CisgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsK
KyAgICBtX2FuY2VzdG9yc1swXS5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50LmdldCgpKTsKKyAg
ICByZXR1cm4gbV9ldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgPyBEb25lRGlzcGF0Y2hpbmcg
OiBDb250aW51ZURpc3BhdGNoaW5nOwogfQogCi1pbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVh
dGlvbiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50LCBXaW5kb3dFdmVudENvbnRleHQmIHdpbmRvd0NvbnRleHQpCitpbmxpbmUg
RXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBQZXJGcmFtZURpc3BhdGNoZXI6OmRpc3BhdGNoRXZl
bnRBdEJ1YmJsaW5nKCkKIHsKLSAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSAmJiAhZXZlbnQtPmNh
bmNlbEJ1YmJsZSgpKSB7CisgICAgaWYgKG1fZXZlbnQtPmJ1YmJsZXMoKSAmJiAhbV9ldmVudC0+
Y2FuY2VsQnViYmxlKCkpIHsKICAgICAgICAgLy8gVHJpZ2dlciBidWJibGluZyBldmVudCBoYW5k
bGVycywgc3RhcnRpbmcgYXQgdGhlIGJvdHRvbSBhbmQgd29ya2luZyBvdXIgd2F5IHVwLgotICAg
ICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOworICAgICAg
ICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CiAKICAgICAg
ICAgc2l6ZV90IHNpemUgPSBtX2FuY2VzdG9ycy5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBFdmVudENvbnRleHQm
IGV2ZW50Q29udGV4dCA9IG1fYW5jZXN0b3JzW2ldOwogICAgICAgICAgICAgaWYgKGV2ZW50Q29u
dGV4dC5jdXJyZW50VGFyZ2V0U2FtZUFzVGFyZ2V0KCkpCi0gICAgICAgICAgICAgICAgZXZlbnQt
PnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgICAgICAgICAgICAgbV9ldmVu
dC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0Up
OwotICAgICAgICAgICAgZXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgp
KTsKLSAgICAgICAgICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgZXZlbnQt
PmNhbmNlbEJ1YmJsZSgpKQorICAgICAgICAgICAgICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2Uo
RXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKKyAgICAgICAgICAgIGV2ZW50Q29udGV4dC5oYW5kbGVM
b2NhbEV2ZW50cyhtX2V2ZW50LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChtX2V2ZW50LT5wcm9w
YWdhdGlvblN0b3BwZWQoKSB8fCBtX2V2ZW50LT5jYW5jZWxCdWJibGUoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gRG9uZURpc3BhdGNoaW5nOwogICAgICAgICB9Ci0gICAgICAgIHdpbmRvd0Nv
bnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOworICAgICAgICBtX3dpbmRvd0V2
ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50LmdldCgpKTsKICAgICB9CiAgICAg
cmV0dXJuIENvbnRpbnVlRGlzcGF0Y2hpbmc7CiB9CiAKLWlubGluZSB2b2lkIEV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCB2
b2lkKiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCkKK2lubGluZSB2b2lkIFBlckZyYW1l
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKCkKIHsKLSAgICBldmVudC0+c2V0
VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkp
OwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOwotICAgIGV2ZW50LT5zZXRFdmVudFBo
YXNlKDApOwotCisgICAgbV9ldmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NW
R1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOworICAgIG1fZXZlbnQtPnNldEN1cnJlbnRUYXJn
ZXQoMCk7CisgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFzZSgwKTsKICAgICAvLyBQYXNzIHRoZSBk
YXRhIGZyb20gdGhlIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyIHRvIHRoZSBwb3N0RGlzcGF0Y2hF
dmVudEhhbmRsZXIuCi0gICAgbV9ub2RlLT5wb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZlbnQu
Z2V0KCksIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KTsKKyAgICBtX25vZGUtPnBvc3RE
aXNwYXRjaEV2ZW50SGFuZGxlcihtX2V2ZW50LmdldCgpLCBtX3ByZURpc3BhdGNoRXZlbnRIYW5k
bGVyUmVzdWx0KTsKK30KIAoraW5saW5lIHZvaWQgUGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRj
aEV2ZW50RGVmYXVsdEhhbmRsZXIoKQorewogICAgIC8vIENhbGwgZGVmYXVsdCBldmVudCBoYW5k
bGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUgYSBjb25jZXB0IG9mIHByZXZlbnRpbmcKICAg
ICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0YWlsIG9mIHdoaWNoIGhhbmRsZXJzIGFyZSBj
YWxsZWQgaXMgYW4gaW50ZXJuYWwKICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIG5v
dCBwYXJ0IG9mIHRoZSBET00uCi0gICAgaWYgKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpICYm
ICFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkgeworICAgIGlmICghbV9ldmVudC0+ZGVmYXVsdFBy
ZXZlbnRlZCgpICYmICFtX2V2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKSB7CiAgICAgICAgIC8vIE5v
bi1idWJibGluZyBldmVudHMgY2FsbCBvbmx5IG9uZSBkZWZhdWx0IGV2ZW50IGhhbmRsZXIsIHRo
ZSBvbmUgZm9yIHRoZSB0YXJnZXQuCi0gICAgICAgIG1fbm9kZS0+ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudC5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KSk7Ci0gICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgbV9ub2Rl
LT5kZWZhdWx0RXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCkpOworICAgICAgICBBU1NFUlQoIW1f
ZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSk7CisgICAgICAgIGlmIChtX2V2ZW50LT5kZWZhdWx0
SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBGb3IgYnViYmxpbmcg
ZXZlbnRzLCBjYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMgb24gdGhlIHNhbWUgdGFyZ2V0cyBp
biB0aGUKICAgICAgICAgLy8gc2FtZSBvcmRlciBhcyB0aGUgYnViYmxpbmcgcGhhc2UuCi0gICAg
ICAgIGlmIChldmVudC0+YnViYmxlcygpKSB7CisgICAgICAgIGlmIChtX2V2ZW50LT5idWJibGVz
KCkpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gbV9hbmNlc3RvcnMuc2l6ZSgpOwogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBtX2FuY2VzdG9yc1tpXS5ub2RlKCktPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQuZ2V0
KCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICAg
ICAgICAgIG1fYW5jZXN0b3JzW2ldLm5vZGUoKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihtX2V2ZW50
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fZXZlbnQtPmRlZmF1bHRQcmV2ZW50
ZWQoKSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KIH0KIAotY29uc3QgRXZlbnRDb250ZXh0KiBFdmVudERpc3BhdGNoZXI6OnRvcEV2ZW50Q29u
dGV4dCgpCitpbmxpbmUgdm9pZCBQZXJGcmFtZURpc3BhdGNoZXI6OnJlc2V0VGFyZ2V0KCkKK3sK
KyAgICBtX2V2ZW50LT5zZXRUYXJnZXQobV93aW5kb3dFdmVudENvbnRleHQudGFyZ2V0KCkpOwor
ICAgIG1fZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7Cit9CisKK2lubGluZSBjb25zdCBFdmVu
dENvbnRleHQqIFBlckZyYW1lRGlzcGF0Y2hlcjo6dG9wRXZlbnRDb250ZXh0KCkKIHsKICAgICBy
ZXR1cm4gbV9hbmNlc3RvcnMuaXNFbXB0eSgpID8gMCA6ICZtX2FuY2VzdG9ycy5sYXN0KCk7CiB9
CkBAIC0zNzMsNyArMzgwLDI0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpblRoZVNhbWVTY29wZShT
aGFkb3dSb290KiBzaGFkb3dSb290LCBFdmVudFRhcmdldCogdGFyZ2V0KQogICAgIHJldHVybiB0
YXJnZXQtPnRvTm9kZSgpICYmIHRhcmdldC0+dG9Ob2RlKCktPnRyZWVTY29wZSgpLT5yb290Tm9k
ZSgpID09IHNoYWRvd1Jvb3Q7CiB9CiAKLUV2ZW50RGlzcGF0Y2hCZWhhdmlvciBFdmVudERpc3Bh
dGNoZXI6OmRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqIGV2ZW50LCBTaGFkb3dSb290
KiBzaGFkb3dSb290LCBFdmVudFRhcmdldCogdGFyZ2V0KQoraW5saW5lIHN0YXRpYyBib29sIGV2
ZW50U2hvdWxkQmVTdG9wcGVkQXRCb3VuZGFyeShFdmVudCogZXZlbnQpCit7CisgICAgLy8gV2Vi
S2l0IG5ldmVyIGFsbG93ZWQgc2VsZWN0c3RhcnQgZXZlbnQgdG8gY3Jvc3MgdGhlIHRoZSBzaGFk
b3cgRE9NIGJvdW5kYXJ5LgorICAgIC8vIENoYW5naW5nIHRoaXMgYnJlYWtzIGV4aXN0aW5nIHNp
dGVzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTIxOTUgZm9yIGRldGFpbHMuCisgICAgY29uc3QgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IGV2
ZW50LT50eXBlKCk7CisgICAgcmV0dXJuIGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuYWJvcnRF
dmVudAorICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVu
dAorICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50Cisg
ICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmxvYWRFdmVudAorICAgICAg
ICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50CisgICAgICAgICAg
ICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50CisgICAgICAgICAgICB8
fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50CisgICAgICAgICAgICB8fCBl
dmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50CisgICAgICAgICAgICB8fCBldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQ7Cit9CisKK2lubGluZSBFdmVu
dERpc3BhdGNoQmVoYXZpb3IgUGVyRnJhbWVEaXNwYXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRjaEJl
aGF2aW9yKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBFTkFCTEUoVklERU8pCiAgICAgLy8gVmlkZW8t
b25seSBmdWxsIHNjcmVlbiBpcyBhIG1vZGUgd2hlcmUgd2UgdXNlIHRoZSBzaGFkb3cgRE9NIGFz
IGFuIGltcGxlbWVudGF0aW9uCkBAIC0zODgsMjMgKzQxMiwxNjMgQEAgRXZlbnREaXNwYXRjaEJl
aGF2aW9yIEV2ZW50RGlzcGF0Y2hlcjo6ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCog
ZXZlbnQsIFMKICAgICBVTlVTRURfUEFSQU0oc2hhZG93Um9vdCk7CiAjZW5kaWYKIAotICAgIC8v
IFdlYktpdCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0YXJ0IGV2ZW50IHRvIGNyb3NzIHRoZSB0aGUg
c2hhZG93IERPTSBib3VuZGFyeS4KLSAgICAvLyBDaGFuZ2luZyB0aGlzIGJyZWFrcyBleGlzdGlu
ZyBzaXRlcy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUyMTk1IGZvciBkZXRhaWxzLgotICAgIGNvbnN0IEF0b21pY1N0cmluZyBldmVudFR5cGUg
PSBldmVudC0+dHlwZSgpOwotICAgIGlmIChpblRoZVNhbWVTY29wZShzaGFkb3dSb290LCB0YXJn
ZXQpCi0gICAgICAgICYmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQKLSAg
ICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQKLSAgICAg
ICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudAotICAgICAgICAg
ICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQKLSAgICAgICAgICAgIHx8
IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAotICAgICAgICAgICAgfHwgZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBl
ID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09
IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50KSkKKyAgICBpZiAoaW5UaGVTYW1lU2NvcGUo
c2hhZG93Um9vdCwgdGFyZ2V0KSAmJiBldmVudFNob3VsZEJlU3RvcHBlZEF0Qm91bmRhcnkobV9l
dmVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBTdGF5SW5zaWRlU2hhZG93RE9NOwotCiAgICAg
cmV0dXJuIFJldGFyZ2V0RXZlbnQ7CiB9CiAKK0V2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRj
aGVyKE5vZGUqIG5vZGUpCisgICAgOiBtX25vZGUobm9kZSkKKyNpZm5kZWYgTkRFQlVHCisgICAg
LCBtX2V2ZW50RGlzcGF0Y2hlZChmYWxzZSkKKyNlbmRpZgoreworICAgIEFTU0VSVChub2RlKTsK
K30KKworYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogbm9kZSwgUGFz
c1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+IG1lZGlhdG9yKQoreworICAgIEFTU0VSVCgh
ZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKKworICAgIEV2ZW50RGlzcGF0Y2hlciBkaXNwYXRj
aGVyKG5vZGUpOworICAgIHJldHVybiBtZWRpYXRvci0+ZGlzcGF0Y2hFdmVudCgmZGlzcGF0Y2hl
cik7Cit9CisKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNjb3BlZEV2ZW50KE5vZGUq
IG5vZGUsIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKK3sKKyAg
ICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgdGFyZ2V0IGhlcmUgYmVjYXVzZSBpdCBjYW4gZ28gYXdh
eSBieSB0aGUgdGltZSB3ZSBhY3R1YWxseSBmaXJlIHRoZSBldmVudC4KKyAgICBtZWRpYXRvci0+
ZXZlbnQoKS0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG5v
ZGUpKTsKKyAgICBTY29wZWRFdmVudFF1ZXVlOjppbnN0YW5jZSgpLT5lbnF1ZXVlRXZlbnREaXNw
YXRjaE1lZGlhdG9yKG1lZGlhdG9yKTsKK30KKwordm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoU2ltdWxhdGVkQ2xpY2soTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWlu
Z0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2spCit7Cisg
ICAgaWYgKG5vZGUtPmRpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZ05v
ZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MpCisgICAgICAgIGdOb2Rlc0Rpc3BhdGNoaW5n
U2ltdWxhdGVkQ2xpY2tzID0gbmV3IEhhc2hTZXQ8Tm9kZSo+OworICAgIGVsc2UgaWYgKGdOb2Rl
c0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzLT5jb250YWlucyhub2RlKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPmFkZChub2RlKTsK
KworICAgIC8vIHNlbmQgbW91c2Vkb3duIGFuZCBtb3VzZXVwIGJlZm9yZSB0aGUgY2xpY2ssIGlm
IHJlcXVlc3RlZAorICAgIGlmIChzZW5kTW91c2VFdmVudHMpCisgICAgICAgIEV2ZW50RGlzcGF0
Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCks
IHVuZGVybHlpbmdFdmVudCkpOworICAgIG5vZGUtPnNldEFjdGl2ZSh0cnVlLCBzaG93UHJlc3Nl
ZExvb2spOworICAgIGlmIChzZW5kTW91c2VFdmVudHMpCisgICAgICAgIEV2ZW50RGlzcGF0Y2hl
cihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkubW91c2V1cEV2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCB1bmRl
cmx5aW5nRXZlbnQpKTsKKyAgICBub2RlLT5zZXRBY3RpdmUoZmFsc2UpOworCisgICAgLy8gYWx3
YXlzIHNlbmQgY2xpY2sKKyAgICBFdmVudERpc3BhdGNoZXIobm9kZSkuZGlzcGF0Y2hFdmVudChT
aW11bGF0ZWRNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIG5vZGUt
PmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkpOworCisgICAgZ05v
ZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPnJlbW92ZShub2RlKTsKK30KKworaW5saW5l
IHN0YXRpYyBib29sIHNob3VsZFByb3BhZ2F0ZUV2ZW50QWNyb3NzU2VhbWxlc3NJRnJhbWVzKEV2
ZW50KiBldmVudCkKK3sKKyAgICBjb25zdCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0gZXZlbnQt
PnR5cGUoKTsKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBtb3JlIGV2ZW50cy4KKyAgICByZXR1cm4g
ZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkuZGJsY2xpY2tFdmVudDsKK30KKworaW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVy
OjpwcmVwYXJlRXZlbnREaXNwYXRjaGVycyhQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK3sK
KyAgICBBU1NFUlQobV9kaXNwYXRjaGVycy5pc0VtcHR5KCkpOworICAgIFJlZlB0cjxFdmVudD4g
ZXZlbnQgPSBwcnBFdmVudDsKKyAgICBOb2RlKiBub2RlID0gbV9ub2RlLmdldCgpOworICAgIGJv
b2wgcHJvcGFnYXRlRXZlbnRBY3Jvc3NTZWFtbGVzc0lGcmFtZXMgPSBzaG91bGRQcm9wYWdhdGVF
dmVudEFjcm9zc1NlYW1sZXNzSUZyYW1lcyhldmVudC5nZXQoKSk7CisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgbV9kaXNwYXRjaGVycy5hcHBlbmQoYWRvcHRQdHIobmV3IFBlckZyYW1lRGlz
cGF0Y2hlcihub2RlLCBldmVudCkpKTsKKyAgICAgICAgaWYgKCFtX2Rpc3BhdGNoZXJzLmxhc3Qo
KS0+c2hvdWxkQ29udGludWVUb1BhcmVudERvY3VtZW50KCkgfHwgIXByb3BhZ2F0ZUV2ZW50QWNy
b3NzU2VhbWxlc3NJRnJhbWVzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBIVE1MSUZy
YW1lRWxlbWVudCogcGFyZW50SUZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+c2VhbWxlc3NQYXJl
bnRJRnJhbWUoKTsKKyAgICAgICAgaWYgKCFwYXJlbnRJRnJhbWUpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIG5vZGUgPSBwYXJlbnRJRnJhbWU7CisgICAgICAgIGV2ZW50ID0gZXZlbnQt
PmNsb25lRm9yKHBhcmVudElGcmFtZSk7CisgICAgfQorfQorCit2b2lkIEV2ZW50RGlzcGF0Y2hl
cjo6YWRqdXN0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCwgUGFzc1Jl
ZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCkKK3sKKyAgICBSZWZQdHI8RXZlbnQ+
IGV2ZW50ID0gcHJwRXZlbnQ7CisgICAgaWYgKG1fZGlzcGF0Y2hlcnMuaXNFbXB0eSgpKQorICAg
ICAgICBwcmVwYXJlRXZlbnREaXNwYXRjaGVycyhldmVudCk7CisgICAgQVNTRVJUKCFtX2Rpc3Bh
dGNoZXJzLmlzRW1wdHkoKSk7CisgICAgbV9kaXNwYXRjaGVycy5sYXN0KCktPmFkanVzdFJlbGF0
ZWRUYXJnZXQocHJwUmVsYXRlZFRhcmdldCk7Cit9CisKK2Jvb2wgRXZlbnREaXNwYXRjaGVyOjpk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQoreworI2lmbmRlZiBOREVC
VUcKKyAgICBBU1NFUlQoIW1fZXZlbnREaXNwYXRjaGVkKTsKKyAgICBtX2V2ZW50RGlzcGF0Y2hl
ZCA9IHRydWU7CisjZW5kaWYKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7Cisg
ICAgaWYgKG1fZGlzcGF0Y2hlcnMuaXNFbXB0eSgpKQorICAgICAgICBwcmVwYXJlRXZlbnREaXNw
YXRjaGVycyhldmVudCk7CisgICAgQVNTRVJUKCFtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSk7Cisg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IG1fZGlzcGF0Y2hlcnNb
MF0tPndpbGxEaXNwYXRjaEV2ZW50KCk7CisKKyAgICBmaXJlRGlzcGF0Y2hlcnMoKTsKKyAgICBi
b29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBmaXJlRGlzcGF0Y2hlcnNEZWZhdWx0RXZlbnRIYW5kbGVy
KCk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCBhZnRlciBldmVudCBkaXNwYXRjaCwgdGhlIGV2ZW50
J3MgdGFyZ2V0IG9iamVjdCBpcyB0aGUKKyAgICAvLyBvdXRlcm1vc3Qgc2hhZG93IERPTSBib3Vu
ZGFyeS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGlzcGF0Y2hlcnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgIG1fZGlzcGF0Y2hlcnNbaV0tPnJlc2V0VGFyZ2V0KCk7CisKKyAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnQoY29va2llKTsKKyAgICByZXR1
cm4gIWRlZmF1bHRQcmV2ZW50ZWQ7Cit9CisKK2lubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6
ZmlyZURpc3BhdGNoZXJzKCkKK3sKKyAgICBBU1NFUlQoIW1fZGlzcGF0Y2hlcnMuaXNFbXB0eSgp
KTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fZGlzcGF0Y2hlcnMuc2l6ZSgpOworICAgIGZvciAoaW50
IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKG1fZGlzcGF0Y2hlcnNb
aV0tPmRpc3BhdGNoRXZlbnRQcmVQcm9jZXNzKCkgPT0gRG9uZURpc3BhdGNoaW5nCisgICAgICAg
ICAgICAgICAgfHwgbV9kaXNwYXRjaGVyc1tpXS0+ZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKCkg
PT0gRG9uZURpc3BhdGNoaW5nKSB7CisgICAgICAgICAgICBmaXJlRGlzcGF0Y2hlcnNQb3N0UHJv
Y2VzcyhpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAobV9kaXNwYXRjaGVy
c1tpXS0+ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KCkgPT0gRG9uZURpc3BhdGNoaW5nCisgICAgICAg
ICAgICAgICAgfHwgbV9kaXNwYXRjaGVyc1tpXS0+ZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcoKSA9
PSBEb25lRGlzcGF0Y2hpbmcpIHsKKyAgICAgICAgICAgIGZpcmVEaXNwYXRjaGVyc1Bvc3RQcm9j
ZXNzKGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fZGlzcGF0
Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcygpOworICAgIH0KK30KKworaW5saW5l
IHZvaWQgRXZlbnREaXNwYXRjaGVyOjpmaXJlRGlzcGF0Y2hlcnNQb3N0UHJvY2VzcyhpbnQgc3Rh
cnRpbmdGcmFtZSkKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1fZGlzcGF0Y2hlcnMuc2l6ZSgpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydGluZ0ZyYW1lOyBpIDwgc2l6ZTsgKytpKQorICAgICAg
ICBtX2Rpc3BhdGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoKTsKK30KKworaW5s
aW5lIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpmaXJlRGlzcGF0Y2hlcnNEZWZhdWx0RXZlbnRIYW5k
bGVyKCkKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1fZGlzcGF0Y2hlcnMuc2l6ZSgpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGNvbnN0IEV2ZW50KiBl
dmVudCA9IG1fZGlzcGF0Y2hlcnNbaV0tPmV2ZW50KCk7CisgICAgICAgIGlmIChldmVudC0+ZGVm
YXVsdFByZXZlbnRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIG1fZGlz
cGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnREZWZhdWx0SGFuZGxlcigpOworICAgICAgICBpZiAo
ZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghZXZlbnQtPmRl
ZmF1bHRQcmV2ZW50ZWQoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFldmVudC0+YnViYmxlcygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoZXIuaAppbmRleCA1YmZlYWQwZDBlNmNiZTBiODAwMzRkNDIyNWE2MGUzMjRkZmFjODM5
Li44ODUwODAxZWQ5NWZhYjI0YTEzODQwNjA1YmEwY2RjZmRlNDczM2Q4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50RGlzcGF0Y2hlci5oCkBAIC0yNyw4NSArMjcsNDEgQEAKICNkZWZpbmUgRXZlbnRE
aXNwYXRjaGVyX2gKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50OwotY2xhc3MgRXZlbnRDb250
ZXh0OwogY2xhc3MgRXZlbnREaXNwYXRjaE1lZGlhdG9yOwogY2xhc3MgRXZlbnRUYXJnZXQ7Ci1j
bGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBOb2RlOwotY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50
OwotY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OwotY2xhc3MgU2hhZG93Um9vdDsKLWNsYXNzIFRy
ZWVTY29wZTsKLWNsYXNzIFdpbmRvd0V2ZW50Q29udGV4dDsKLQotZW51bSBFdmVudERpc3BhdGNo
QmVoYXZpb3IgewotICAgIFJldGFyZ2V0RXZlbnQsCi0gICAgU3RheUluc2lkZVNoYWRvd0RPTQot
fTsKLQotZW51bSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIHsKLSAgICBDb250aW51ZURpc3Bh
dGNoaW5nLAotICAgIERvbmVEaXNwYXRjaGluZwotfTsKLQotY2xhc3MgRXZlbnRSZWxhdGVkVGFy
Z2V0QWRqdXN0ZXIgewotcHVibGljOgotICAgIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKFBh
c3NSZWZQdHI8Tm9kZT4sIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZFRhcmdldCk7Ci0gICAgdm9p
ZCBhZGp1c3QoVmVjdG9yPEV2ZW50Q29udGV4dD4mKTsKLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPFRyZWVTY29wZSosIEV2ZW50VGFyZ2V0Kj4gUmVsYXRlZFRhcmdldE1hcDsKLSAgICBF
dmVudFRhcmdldCogZmluZFJlbGF0ZWRUYXJnZXQoVHJlZVNjb3BlKik7Ci0KLSAgICBSZWZQdHI8
Tm9kZT4gbV9ub2RlOwotICAgIFJlZlB0cjxOb2RlPiBtX3JlbGF0ZWRUYXJnZXQ7Ci0gICAgUmVs
YXRlZFRhcmdldE1hcCBtX3JlbGF0ZWRUYXJnZXRNYXA7Ci19OworY2xhc3MgUGVyRnJhbWVEaXNw
YXRjaGVyOwogCiBjbGFzcyBFdmVudERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBi
b29sIGRpc3BhdGNoRXZlbnQoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9y
Pik7CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlKiwgUGFzc1JlZlB0
cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+KTsKLQogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2lt
dWxhdGVkQ2xpY2soTm9kZSosIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCwgYm9v
bCBzZW5kTW91c2VFdmVudHMsIGJvb2wgc2hvd1ByZXNzZWRMb29rKTsKIAorICAgIHZvaWQgYWRq
dXN0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gcmVsYXRlZFRhcmdldCk7CiAgICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KTsKLSAgICB2b2lkIGFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqLCBQYXNzUmVmUHRyPEV2
ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KTsKLSAgICBOb2RlKiBub2RlKCkgY29uc3Q7Cisg
ICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQogCiBwcml2YXRl
OgogICAgIEV2ZW50RGlzcGF0Y2hlcihOb2RlKik7CisgICAgdm9pZCBwcmVwYXJlRXZlbnREaXNw
YXRjaGVycyhQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBmaXJlRGlzcGF0Y2hlcnMoKTsK
KyAgICB2b2lkIGZpcmVEaXNwYXRjaGVyc1Bvc3RQcm9jZXNzKGludCBicm93c2luZ0NvbnRleHRO
dW1iZXIpOworICAgIGJvb2wgZmlyZURpc3BhdGNoZXJzRGVmYXVsdEV2ZW50SGFuZGxlcigpOwog
Ci0gICAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoRXZl
bnQqLCBTaGFkb3dSb290KiwgRXZlbnRUYXJnZXQqKTsKLQotICAgIHZvaWQgZW5zdXJlRXZlbnRB
bmNlc3RvcnMoRXZlbnQqKTsKLSAgICBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29udGV4
dCgpOwotCi0gICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50UHJlUHJv
Y2VzcyhQYXNzUmVmUHRyPEV2ZW50Piwgdm9pZComIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVz
dWx0KTsKLSAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZlbnRBdENhcHR1
cmluZyhQYXNzUmVmUHRyPEV2ZW50PiwgV2luZG93RXZlbnRDb250ZXh0Jik7Ci0gICAgRXZlbnRE
aXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRUYXJnZXQoUGFzc1JlZlB0cjxFdmVu
dD4pOwotICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVudEF0QnViYmxp
bmcoUGFzc1JlZlB0cjxFdmVudD4sIFdpbmRvd0V2ZW50Q29udGV4dCYpOwotICAgIHZvaWQgZGlz
cGF0Y2hFdmVudFBvc3RQcm9jZXNzKFBhc3NSZWZQdHI8RXZlbnQ+LCB2b2lkKiBwcmVEaXNwYXRj
aEV2ZW50SGFuZGxlclJlc3VsdCk7Ci0KLSAgICBWZWN0b3I8RXZlbnRDb250ZXh0PiBtX2FuY2Vz
dG9yczsKKyAgICBWZWN0b3I8T3duUHRyPFBlckZyYW1lRGlzcGF0Y2hlcj4gPiBtX2Rpc3BhdGNo
ZXJzOwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7Ci0gICAgUmVmUHRyPEZyYW1lVmlldz4gbV92
aWV3OwotICAgIGJvb2wgbV9hbmNlc3RvcnNJbml0aWFsaXplZDsKICNpZm5kZWYgTkRFQlVHCiAg
ICAgYm9vbCBtX2V2ZW50RGlzcGF0Y2hlZDsKICNlbmRpZgogfTsKIAotaW5saW5lIE5vZGUqIEV2
ZW50RGlzcGF0Y2hlcjo6bm9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbm9kZS5nZXQoKTsK
LX0KLQogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3OTIxZGVmYmE5ODliOTE5ZjEyNjIyYjgyYTZjMzM4
NWU5ZTQ0YzgyLi45N2Y2ZTdjNWMzMDEyYzIyNTQ1NDZkZDFhMDk5MTUzOGYwNmU4NjIwIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDgtMjAgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFN1cHBvcnQgYW4gZXZlbnQgcHJvcGFnYXRpb24gYWNyb3NzIHNl
YW1sZXNzIGlmcmFtZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MTI5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZmFzdC9mcmFtZXMvc2VhbWxlc3MvcmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNzLWV2ZW50cy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1s
ZXNzLWV2ZW50cy5odG1sOiBBZGRlZC4KKwogMjAxMi0wOC0yMiAgTGVvIFlhbmcgIDxsZW95YW5n
QHJpbS5jb20+CiAKICAgICAgICAgVGVzdCBjYXNlcyB1bmRlciBmYXN0L2ZpbGVzeXN0ZW0vd29y
a2VycyBhcmUgZmxha3kgd2hlbiB1c2luZyBKU0MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZnJhbWVzL3NlYW1sZXNzL3Jlc291cmNlcy9maXJlLWV2ZW50cy5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9mcmFtZXMvc2VhbWxlc3MvcmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjNlNjI3MDNjN2NlMTE1MWE1YmU4NGIyODBmZTEzZWM0M2QzODIwNQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3Jlc291cmNlcy9maXJl
LWV2ZW50cy5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
Ym9keT4KKzxkaXYgaWQ9J3RhcmdldCc+PC9kaXY+Cis8c2NyaXB0Pgord2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbihldmVudCkgeworICAgIHZhciB0YXJnZXQgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgdmFyIGV2ZW50cyA9IFsnYWJv
cnQnLCAnc2VsZWN0JywgJ2NoYW5nZScsICdjbGljaycsICdkYmxjbGljaycsICdyZXNldCcsICdy
ZXNpemUnLCAnc2Nyb2xsJywgJ3NlbGVjdHN0YXJ0J107CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBldmVudHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRXZlbnQoJ1VJRXZlbnQnKTsKKyAgICAgICAgZXZlbnQuaW5pdEV2ZW50KGV2ZW50c1tpXSwg
dHJ1ZSwgZmFsc2UpOworICAgICAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAg
fQorICAgIHdpbmRvdy50b3AucG9zdE1lc3NhZ2UoJ0RPTkUnLCAnKicpOworfSwgZmFsc2UpOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mMWM2ZWE1OGIwYTQ0ZjA3NTVlOGU2MjIzZDVlYmI5YTRjNTM2NzQxCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZl
bnRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI0IEBACitUZXN0IHRoYXQgZXZlbnQgcHJvcGFn
YXRlcyBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKworICBhYm9ydAorCisgIHNlbGVjdAorCisg
IGNoYW5nZQorCisgIGNsaWNrCisgICAgIEBzZWFtbGVzcy1pZnJhbWUgKHRhcmdldDogc2VhbWxl
c3MtaWZyYW1lKQorICAgICBAYm9keSAodGFyZ2V0OiBzZWFtbGVzcy1pZnJhbWUpCisKKyAgZGJs
Y2xpY2sKKyAgICAgQHNlYW1sZXNzLWlmcmFtZSAodGFyZ2V0OiBzZWFtbGVzcy1pZnJhbWUpCisg
ICAgIEBib2R5ICh0YXJnZXQ6IHNlYW1sZXNzLWlmcmFtZSkKKworICByZXNldAorCisgIHJlc2l6
ZQorCisgIHNjcm9sbAorCisgIHNlbGVjdHN0YXJ0CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNzLWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNm
ODMxMmNiYzFmNTFmZmRmOWU3YTJjZjkyMWY1NWM5NzMyZjZhNgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNzLWV2ZW50cy5odG1sCkBA
IC0wLDAgKzEsNzEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keSBpZD0nYm9keSc+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CitkZWJ1ZygiVGVzdCB0aGF0IGV2ZW50IHByb3BhZ2F0ZXMgYWNyb3NzIHNl
YW1sZXNzIGlmcmFtZXMuIikKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisK
K3ZhciBldmVudHMgPSBbJ2Fib3J0JywgJ3NlbGVjdCcsICdjaGFuZ2UnLCAnY2xpY2snLCAnZGJs
Y2xpY2snLCAncmVzZXQnLCAncmVzaXplJywgJ3Njcm9sbCcsICdzZWxlY3RzdGFydCddOwordmFy
IGV2ZW50UmVjb3JkcyA9IHt9OworCitmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7
ICsraSkKKyAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRzW2ldLCByZWNv
cmRFdmVudCk7CisKK2Z1bmN0aW9uIGlmcmFtZUxvYWRlZChpZnJhbWUpIHsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgaWZyYW1lLmFkZEV2ZW50
TGlzdGVuZXIoZXZlbnRzW2ldLCByZWNvcmRFdmVudCk7CisgICAgaWZyYW1lLmNvbnRlbnRXaW5k
b3cucG9zdE1lc3NhZ2UoJ2ZpcmUnLCAnKicpOworfQorCit2YXIgbWVzc2FnZVJlY2VpdmVkQ291
bnQgPSAwOworCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgaWYgKCsrbWVzc2FnZVJlY2VpdmVkQ291bnQgPT0gMikgIHsKKyAgICAgICAg
ZHVtcERpc3BhdGNoZWRFdmVudCgpOworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9LCBmYWxzZSk7CisK
K2Z1bmN0aW9uIHJlY29yZEV2ZW50KGV2ZW50KQoreworICAgIHZhciBldmVudFR5cGUgPSBldmVu
dC50eXBlCisgICAgaWYgKCFldmVudFJlY29yZHNbZXZlbnRUeXBlXSkKKyAgICAgICAgZXZlbnRS
ZWNvcmRzW2V2ZW50VHlwZV0gPSBbXTsKKyAgICB2YXIgZXZlbnRTdHJpbmcgPSAnJzsKKyAgICBp
ZiAoZXZlbnQuY3VycmVudFRhcmdldCkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyBAJyArIGV2
ZW50LmN1cnJlbnRUYXJnZXQuaWQ7CisgICAgaWYgKGV2ZW50LnRhcmdldCkKKyAgICAgICAgZXZl
bnRTdHJpbmcgKz0gJyAodGFyZ2V0OiAnICsgZXZlbnQudGFyZ2V0LmlkICsgJyknOworICAgIGlm
IChldmVudC5yZWxhdGVkVGFyZ2V0KQorICAgICAgICBldmVudFN0cmluZyArPSAnIChyZWxhdGVk
OiAnICsgZXZlbnQucmVsYXRlZFRhcmdldC5pZCArICcpJzsKKyAgICBpZiAoZXZlbnQuZXZlbnRQ
aGFzZSA9PSAxKQorICAgICAgICBldmVudFN0cmluZyArPSAnKGNhcHR1cmluZyBwaGFzZSknOwor
ICAgIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQuY3VycmVudFRhcmdldCAmJiBldmVudC50YXJn
ZXQuaWQgPT0gZXZlbnQuY3VycmVudFRhcmdldC5pZCkKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50
LmV2ZW50UGhhc2UiLCAiMiIsIHRydWUpOworICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdLnB1
c2goZXZlbnRTdHJpbmcpOworfQorCitmdW5jdGlvbiBkdW1wRGlzcGF0Y2hlZEV2ZW50KCkKK3sK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICB2
YXIgZXZlbnRUeXBlID0gZXZlbnRzW2ldOworICAgICAgICBkZWJ1ZygnXG4gICcgKyBldmVudFR5
cGUpOworICAgICAgICB2YXIgcmVjb3JkID0gZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0gfHwgW107
CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVjb3JkLmxlbmd0aDsgKytqKQorICAgICAg
ICAgICAgZGVidWcoJyAgICAnICsgcmVjb3JkW2pdKQorICAgIH0KK30KKworPC9zY3JpcHQ+Cis8
ZGl2IGlkPSJjb250YWluZXIiPgorICAgIDxpZnJhbWUgaWQ9J3NlYW1sZXNzLWlmcmFtZScgb25s
b2FkPSdpZnJhbWVMb2FkZWQodGhpcyknIHNyYz0ncmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwn
IHNlYW1sZXNzPSd0cnVlJz48L2lmcmFtZT4KKyAgICA8aWZyYW1lIGlkPSdub24tc2VhbWxlc3Mt
aWZyYW1lJyBvbmxvYWQ9J2lmcmFtZUxvYWRlZCh0aGlzKScgc3JjPSdyZXNvdXJjZXMvZmlyZS1l
dmVudHMuaHRtbCc+PC9pZnJhbWU+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168672</attachid>
            <date>2012-10-15 04:02:21 -0700</date>
            <delta_ts>2012-10-15 23:28:14 -0700</delta_ts>
            <desc>Sync with ToT</desc>
            <filename>bug-91290-20121015200112.patch</filename>
            <type>text/plain</type>
            <size>37587</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjEyN2MzNWI4NTgxYTlh
MWFkZmFhOGRmOTU1YTE4ZDc1YWRkY2QzYS4uYzYxN2YxZmQ4YzI2YmMzNDRiZDEyZDZmOTIxMmEy
OTU4Zjk4YjE5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0xMC0xNSAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVu
dCBwcm9wYWdhdGlvbiBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjkwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVudCBwcm9wYWdhdGlv
biBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgQXMgdGhlIGZpcnN0IHN0ZXAsICdj
bGljaycgYW5kICdkYmxjbGljaycgZXZlbnRzIGhhdmUgYmVlbiBzdXBwb3J0ZWQuCisKKyAgICAg
ICAgVG8gc3VwcG9ydCBhbiBldmVudCBkaXNwYXRjaGluZyBhY3Jvc3MgYnJvd3NpbmcgY29udGV4
dCwgSSd2ZQorICAgICAgICBpbnRyb2R1Y2VkIGEgRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdD
b250ZXh0LCB3aG9zZSByb2xlIGlzIHNpbWlsYXIgdG8KKyAgICAgICAgYW4gRXZlbnREaXNwYXRj
aGVyIHByaW9yIHRvIHRoaXMgcGF0Y2guIEJ1dCB0aGUgaW50ZXJuYWwKKyAgICAgICAgc3RydWN0
dXJlIHdhcyBzaWduaWZpY2FudGx5IGNoYW5nZWQgc28gdGhhdCBpdCBjYW4gYmUgbWFuYWdlZCBm
cm9tIG91dHNpZGUuCisKKyAgICAgICAgQW4gRXZlbnREaXNwYXRjaGVyIG5vdyBhY3RzIGFzIGlm
IGl0IHdlcmUgYSBtZXRhIGRpc3BhdGNoZXIgd2hpY2gKKyAgICAgICAgZGVsZWdhdGVzIGV2ZW50
IGRpc3BhdGNoaW5nIHRvIGVhY2ggZGlzcGF0Y2hlciBpbiBlYWNoIGJyb3dzaW5nCisgICAgICAg
IGNvbnRleHQuIEl0IG1hbmFnZXMgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIG9mIGRpc3BhdGNoZXJz
LgorCisgICAgICAgIEFjY29yZGluZyB0byB0aGUgZGlzY3Vzc2lvbiBvZiBidWcgOTEyOTAsIHdo
YXR3ZyBtaWdodCBzcGVjCisgICAgICAgIHdoYXRldmVyIFdlYktpdCBpbXBsZW1lbnRzLiAgU28g
bGV0IG1lIGV4cGxhaW4gaG93IGV2ZW50CisgICAgICAgIGRpc3BhdGNoaW5nIHdvcmtzIGFjcm9z
cyBzZWFtbGVzcyBpZnJhbWVzIGJyaWVmbHkgaGVyZToKKworICAgICAgICAxLiBBbmNlc3RvciBu
b2RlcyBvZiBldmVudCBhcmUgY2FsY3VsYXRlZCBhcyB1c3VhbCwgYnV0IGlmIHRoZQorICAgICAg
ICAgICBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHQgaXMgdGhhdCBvZiBhIHNlYW1sZXNzIGlmcmFt
ZSwgY29udGludWUgdG8KKyAgICAgICAgICAgdHJhdmVyc2luZyBhbmNlc3RvcnMgb2YgdGhlIHBh
cmVudCBicm93c2luZyBjb250ZXh0LgorICAgICAgICAyLiBGb3IgZWFjaCBicm93c2luZyBjb250
ZXh0LCBjbG9uZSB0aGUgZXZlbnQgb2JqZWN0LiBJbiB0aGUgbGF0ZXIKKyAgICAgICAgICAgZXZl
bnQgZGlzcGF0Y2hpbmcsIHVzZSB0aGUgY2xvbmVkIGV2ZW50IG9iamVjdCBpbiBlYWNoIGJyb3dz
aW5nCisgICAgICAgICAgIGNvbnRleHQgc28gdGhhdCB3ZSBjYW4gaXNvbGF0ZSBldmVudCBvYmpl
Y3RzLgorICAgICAgICAzLiBUYXJnZXQgb2YgdGhlIGNsb25lZCBldmVudCBvYmplY3RzIGlzIHJl
dGFyZ2V0ZWQgdG8gaWZyYW1lJ3Mgb3duZXIgZWxlbWVudC4KKyAgICAgICAgNC4gUHJvY2VzcyBj
YXB0dXJpbmcsIHRhcmdldCBhbmQgYnViYmxpbmcgcGhhc2VzIGFzIGlmIHRoZXJlIHdhcworICAg
ICAgICAgICBvbmUgYmlnICdhbmNlc3RvcicgY2hhaW4uICBUaGF0IG1lYW5zIGlmIGFuIGV2ZW50
IGxpc3RlbmVyIGluIGFuCisgICAgICAgICAgIHVwcGVyIGJyb3dzaW5nIGNvbnRleHQgY2FsbHMg
c3RvcFByb3BhZ2F0aW9uKCkgYXQgY2FwdHVyaW5nCisgICAgICAgICAgIHBoYXNlLCBuZXN0ZWQg
YnJvd3NpbmcgY29udGV4dHMgbmV2ZXIgcmVjZWl2ZSBhbiBldmVudC4KKyAgICAgICAgNS4gVW5s
ZXNzIGRlZmF1bHQgaXMgcHJldmVudGVkLCB0cnkgdG8gY2FsbCBkZWZhdWx0IGV2ZW50IGhhbmRs
ZXIKKyAgICAgICAgICAgc3RhcnRpbmcgZnJvbSB0aGUgYm90dG9tIG5vZGUgb2YgYW5jZXN0b3Jz
IHVudGlsIGEgZGVmYXVsdCBpcworICAgICAgICAgICBoYW5kbGVkLgorCisgICAgICAgIEV4YW1w
bGU6ICBTdXBwb3NlIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBIVE1MIGFuZCBuZXN0ZWQgc2VhbWxl
c3MgaWZyYW1lcy4gVGhlcmUgYXJlIHRocmVlIGJyb3dzaW5nIGNvbnRleHRzLgorCisgICAgICAg
IDEpIGRvYy5odG1sOgorICAgICAgICAgICA8QT4KKyAgICAgICAgICAgICAgPEI+CisgICAgICAg
ICAgICAgICAgPGlmcmFtZSBpZD1DIHNlYW1sZXNzIHNyYz0iaWZyYW1lMS5odG1sIj4KKworICAg
ICAgICAyKSBpZnJhbWUxLmh0bWw6CisgICAgICAgICAgIDxEPgorICAgICAgICAgICAgICA8RT4K
KyAgICAgICAgICAgICAgICA8aWZyYW1lIGlkPUYgc2VhbWxlc3Mgc3JjPSJpZnJhbWUyLmh0bWwi
PgorCisgICAgICAgIDMpIGlmcmFtZTIuaHRtbDoKKyAgICAgICAgICAgPEc+CisgICAgICAgICAg
ICAgIDxIPgorCisgICAgICAgIElmIGEgY2xpY2snIGV2ZW50IGlzIGZpcmVkIG9uIG5vZGUgRiwg
d2Ugd2lsbCBkaXNwYXRjaCBldmVudHMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKyAgICAgICAg
ICAxLiBBIChAY2FwdHVyZSkgKHRhcmdldCA9PSBDKQorICAgICAgICAgIDIuIEIgKEBjYXB0dXJl
KSAodGFyZ2V0ID09IEMpCisgICAgICAgICAgMy4gRCAoQGNhcHR1cmUpICh0YXJnZXQgPT0gRikK
KyAgICAgICAgICA0LiBFIChAY2FwdHVyZSkgKHRhcmdldCA9PSBGKQorICAgICAgICAgIDUuIEcg
KEBjYXB0dXJlKSAodGFyZ2V0ID09IEgpCisgICAgICAgICAgNi4gSCAoQHRhcmdldCkgICh0YXJn
ZXQgPT0gSCkKKyAgICAgICAgICA3LiBHIChAYnViYmxlKSAgKHRhcmdldCA9PSBIKQorICAgICAg
ICAgIDguIEYgKEB0YXJnZXQpICAodGFyZ2V0ID09IEYpCisgICAgICAgICAgOS4gRSAoQGJ1YmJs
ZSkgICh0YXJnZXQgPT0gRikKKyAgICAgICAgICA5LiBEIChAYnViYmxlKSAgKHRhcmdldCA9PSBG
KQorICAgICAgICAgMTAuIEMgKEB0YXJnZXQpICAodGFyZ2V0ID09IEMpCisgICAgICAgICAxMS4g
QiAoYnViYmxlKSAgICh0YXJnZXQgPT0gQykKKyAgICAgICAgIDEyLiBBIChidWJibGUpICAgKHRh
cmdldCA9PSBDKQorCisgICAgICAgIFRlc3Q6IGZhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNz
LWV2ZW50cy5odG1sCisKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAg
ICAgKEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoUGVyRnJhbWVEaXNwYXRjaGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1lRGlz
cGF0Y2hlcjo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6OmV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1lRGlzcGF0Y2hlcjo6c2hvdWxkQ29udGlu
dWVUb1BhcmVudERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1lRGlzcGF0Y2hl
cjo6YWRqdXN0UmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3Bh
dGNoZXI6OlBlckZyYW1lRGlzcGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURp
c3BhdGNoZXI6OmNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZXJGcmFtZURpc3BhdGNoZXI6OndpbGxEaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBlckZyYW1lRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRUYXJn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50
QXRCdWJibGluZyk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6OmRpc3Bh
dGNoRXZlbnRQb3N0UHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNo
ZXI6OmRpc3BhdGNoRXZlbnREZWZhdWx0SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQZXJG
cmFtZURpc3BhdGNoZXI6OnJlc2V0VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1l
RGlzcGF0Y2hlcjo6dG9wRXZlbnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmV2ZW50U2hv
dWxkQmVTdG9wcGVkQXRCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3Bh
dGNoZXI6OmRldGVybWluZURpc3BhdGNoQmVoYXZpb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2spOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxk
UHJvcGFnYXRlRXZlbnRBY3Jvc3NTZWFtbGVzc0lGcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnREaXNwYXRjaGVyOjpwcmVwYXJlRXZlbnREaXNwYXRjaGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnREaXNwYXRjaGVyOjpmaXJlRGlzcGF0Y2hlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnREaXNwYXRjaGVyOjpmaXJlRGlzcGF0Y2hlcnNQb3N0UHJvY2Vzcyk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmZpcmVEaXNwYXRjaGVyc0RlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoRXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
RGlzcGF0Y2hlcjo6bm9kZSk6CisKIDIwMTItMTAtMTIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lz
bG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSSByZW1vdmUgaGFu
ZCBtYWRlIG9iamVjdCBidWlsZGVycyB3aXRoIGF1dG9tYXRpYyBidWlsZGVyLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBiM2M2MzlhYzgzNDYzNjA1YjQ1YmI3M2Yw
ZGE0YmMzY2Y4YzQ1ZDBiLi44YjlmYzAyNGMzMWIyYmJjNDU1NTQ5NmM0OTVmN2MyNDE1MWQyM2I4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkV2ZW50Q29udGV4dC5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hNZWRp
YXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc2VydGlv
blBvaW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC01MCw2
ICs1MSw2OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2VudW0gRXZlbnREaXNwYXRjaEJl
aGF2aW9yIHsKKyAgICBSZXRhcmdldEV2ZW50LAorICAgIFN0YXlJbnNpZGVTaGFkb3dET00KK307
CisKK2VudW0gRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiB7CisgICAgQ29udGludWVEaXNwYXRj
aGluZywKKyAgICBEb25lRGlzcGF0Y2hpbmcKK307CisKK2VudW0gRXZlbnRBbmNlc3RvckNvbnRp
bnVhdGlvbiB7CisgICAgRXZlbnRBbmNlc3RvclN0b3AsCisgICAgRXZlbnRBbmNlc3RvckNvbnRp
bnVlVG9QYXJlbnQKK307CisKK2NsYXNzIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyIHsKK3B1
YmxpYzoKKyAgICBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlcihQYXNzUmVmUHRyPE5vZGU+LCBQ
YXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpOworICAgIHZvaWQgYWRqdXN0KFZlY3RvcjxF
dmVudENvbnRleHQ+Jik7Citwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxUcmVlU2NvcGUq
LCBFdmVudFRhcmdldCo+IFJlbGF0ZWRUYXJnZXRNYXA7CisgICAgRXZlbnRUYXJnZXQqIGZpbmRS
ZWxhdGVkVGFyZ2V0KFRyZWVTY29wZSopOworCisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAg
ICBSZWZQdHI8Tm9kZT4gbV9yZWxhdGVkVGFyZ2V0OworICAgIFJlbGF0ZWRUYXJnZXRNYXAgbV9y
ZWxhdGVkVGFyZ2V0TWFwOworfTsKKworY2xhc3MgUGVyRnJhbWVEaXNwYXRjaGVyIHsKK3B1Ymxp
YzoKKyAgICBQZXJGcmFtZURpc3BhdGNoZXIoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAg
ICB2b2lkIGFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVs
YXRlZFRhcmdldCk7CisKKyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdl
dCgpOyB9CisgICAgY29uc3QgRXZlbnQqIGV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmVudC5n
ZXQoKTsgfQorCisgICAgYm9vbCBzaG91bGRDb250aW51ZVRvUGFyZW50RG9jdW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2V2ZW50QW5jZXN0b3JDb250aW51YXRpb24gPT0gRXZlbnRBbmNlc3RvckNv
bnRpbnVlVG9QYXJlbnQ7IH0KKworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0
Y2hFdmVudFByZVByb2Nlc3MoKTsKKyAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3Bh
dGNoRXZlbnRBdENhcHR1cmluZygpOworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlz
cGF0Y2hFdmVudEF0VGFyZ2V0KCk7CisgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNw
YXRjaEV2ZW50QXRCdWJibGluZygpOworICAgIHZvaWQgZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNz
KCk7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50RGVmYXVsdEhhbmRsZXIoKTsKKworICAgIHZvaWQg
cmVzZXRUYXJnZXQoKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbERp
c3BhdGNoRXZlbnQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBFdmVudERpc3BhdGNoQmVoYXZp
b3IgZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihTaGFkb3dSb290KiwgRXZlbnRUYXJnZXQqKTsK
KyAgICBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29udGV4dCgpOworICAgIEV2ZW50QW5j
ZXN0b3JDb250aW51YXRpb24gY2FsdWN1bGF0ZUV2ZW50QW5jZXN0b3JzKCk7CisKKyAgICBSZWZQ
dHI8Tm9kZT4gbV9ub2RlOworICAgIFJlZlB0cjxFdmVudD4gbV9ldmVudDsKKyAgICBWZWN0b3I8
RXZlbnRDb250ZXh0PiBtX2FuY2VzdG9yczsKKyAgICBFdmVudEFuY2VzdG9yQ29udGludWF0aW9u
IG1fZXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbjsKKyAgICBSZWZQdHI8RnJhbWVWaWV3PiBtX3Zp
ZXc7CisgICAgV2luZG93RXZlbnRDb250ZXh0IG1fd2luZG93RXZlbnRDb250ZXh0OworICAgIHZv
aWQqIG1fcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQ7Cit9OworCiBzdGF0aWMgSGFzaFNl
dDxOb2RlKj4qIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gMDsKIAogRXZlbnRS
ZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OkV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKFBhc3NSZWZQ
dHI8Tm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KQpAQCAtMTE5LDE0
ICsxODIsNiBAQCBFdmVudFRhcmdldCogRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OmZpbmRS
ZWxhdGVkVGFyZ2V0KFRyZWVTY29wZSogc2NvcGUpCiAgICAgcmV0dXJuIHJlbGF0ZWRUYXJnZXQ7
CiB9CiAKLWJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG5vZGUsIFBh
c3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKLXsKLSAgICBBU1NFUlQo
IU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwot
Ci0gICAgRXZlbnREaXNwYXRjaGVyIGRpc3BhdGNoZXIobm9kZSk7Ci0gICAgcmV0dXJuIG1lZGlh
dG9yLT5kaXNwYXRjaEV2ZW50KCZkaXNwYXRjaGVyKTsKLX0KLQogaW5saW5lIHN0YXRpYyBFdmVu
dFRhcmdldCogZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoTm9kZSogcmVmZXJl
bmNlTm9kZSkKIHsKICAgICBBU1NFUlQocmVmZXJlbmNlTm9kZSk7CkBAIC0xNDksNyArMjA0LDcg
QEAgaW5saW5lIHN0YXRpYyBFdmVudFRhcmdldCogZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFy
Z2V0UnVsZXMoTm9kZSogcmVmZXJlbmNlTm8KICAgICByZXR1cm4gcmVmZXJlbmNlTm9kZTsKIH0K
IAotdm9pZCBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50
LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KQordm9pZCBQZXJGcmFt
ZURpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4g
cHJwUmVsYXRlZFRhcmdldCkKIHsKICAgICBpZiAoIXBycFJlbGF0ZWRUYXJnZXQpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1OCwyNiArMjEzLDI5IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjphZGp1
c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiBldmVudCwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4KICAg
ICAgICAgcmV0dXJuOwogICAgIGlmICghbV9ub2RlLmdldCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQpOworICAgIGlmIChtX2FuY2VzdG9ycy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKICAgICBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlciht
X25vZGUsIHJlbGF0ZWRUYXJnZXQucmVsZWFzZSgpKS5hZGp1c3QobV9hbmNlc3RvcnMpOwogfQog
Ci1FdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcihOb2RlKiBub2RlKQorUGVyRnJhbWVE
aXNwYXRjaGVyOjpQZXJGcmFtZURpc3BhdGNoZXIoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCiAgICAgOiBtX25vZGUobm9kZSkKLSAgICAsIG1fYW5jZXN0b3JzSW5pdGlhbGl6
ZWQoZmFsc2UpCi0jaWZuZGVmIE5ERUJVRwotICAgICwgbV9ldmVudERpc3BhdGNoZWQoZmFsc2Up
Ci0jZW5kaWYKKyAgICAsIG1fZXZlbnQoZXZlbnQpCisgICAgLCBtX2FuY2VzdG9ycygpCisgICAg
LCBtX2V2ZW50QW5jZXN0b3JDb250aW51YXRpb24oY2FsdWN1bGF0ZUV2ZW50QW5jZXN0b3JzKCkp
CisgICAgLCBtX3ZpZXcobV9ub2RlLT5kb2N1bWVudCgpLT52aWV3KCkpCisgICAgLCBtX3dpbmRv
d0V2ZW50Q29udGV4dChtX2V2ZW50LmdldCgpLCBtX25vZGUuZ2V0KCksIHRvcEV2ZW50Q29udGV4
dCgpKQorICAgICwgbV9wcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCgwKQogewotICAgIEFT
U0VSVChub2RlKTsKLSAgICBtX3ZpZXcgPSBub2RlLT5kb2N1bWVudCgpLT52aWV3KCk7CisgICAg
QVNTRVJUKG1fbm9kZSk7CisgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwor
ICAgIEFTU0VSVCghbV9ldmVudC0+dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBjb2Rl
IGNhbiBjcmVhdGUgYW4gZXZlbnQgd2l0aCBhbiBlbXB0eSBuYW1lLCBidXQgbm90IG51bGwuCisg
ICAgbV9ldmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVz
KG1fbm9kZS5nZXQoKSkpOwogfQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJlRXZlbnRB
bmNlc3RvcnMoRXZlbnQqIGV2ZW50KQorRXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbiBQZXJGcmFt
ZURpc3BhdGNoZXI6OmNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycygpCiB7Ci0gICAgaWYgKG1fYW5j
ZXN0b3JzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2FuY2VzdG9yc0luaXRp
YWxpemVkID0gdHJ1ZTsKKyAgICBBU1NFUlQobV9hbmNlc3RvcnMuaXNFbXB0eSgpKTsKICAgICBi
b29sIGluRG9jdW1lbnQgPSBtX25vZGUtPmluRG9jdW1lbnQoKTsKICAgICBib29sIGlzU1ZHRWxl
bWVudCA9IG1fbm9kZS0+aXNTVkdFbGVtZW50KCk7CiAgICAgVmVjdG9yPEV2ZW50VGFyZ2V0Kj4g
dGFyZ2V0U3RhY2s7CkBAIC0xODksMTc3ICsyNDcsMTI1IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVy
OjplbnN1cmVFdmVudEFuY2VzdG9ycyhFdmVudCogZXZlbnQpCiAgICAgICAgICAgICB0YXJnZXRT
dGFjay5hcHBlbmQodGFyZ2V0U3RhY2subGFzdCgpKTsKICAgICAgICAgbV9hbmNlc3RvcnMuYXBw
ZW5kKEV2ZW50Q29udGV4dChub2RlLCBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxl
cyhub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSk7CiAgICAgICAgIGlmICghaW5Eb2N1bWVudCkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBFdmVudEFuY2VzdG9yU3Rv
cDsKICAgICAgICAgaWYgKCFub2RlLT5pc1NoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihldmVudCwgdG9TaGFk
b3dSb290KG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpID09IFN0YXlJbnNpZGVTaGFkb3dET00p
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChkZXRlcm1pbmVEaXNwYXRjaEJlaGF2
aW9yKHRvU2hhZG93Um9vdChub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSA9PSBTdGF5SW5zaWRl
U2hhZG93RE9NKQorICAgICAgICAgICAgcmV0dXJuIEV2ZW50QW5jZXN0b3JTdG9wOwogICAgICAg
ICBpZiAoIWlzU1ZHRWxlbWVudCkgewogICAgICAgICAgICAgQVNTRVJUKCF0YXJnZXRTdGFjay5p
c0VtcHR5KCkpOwogICAgICAgICAgICAgdGFyZ2V0U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAg
ICB9CiAgICAgfQorICAgIHJldHVybiBFdmVudEFuY2VzdG9yQ29udGludWVUb1BhcmVudDsKIH0K
IAotdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQoTm9kZSogbm9kZSwg
UGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+IG1lZGlhdG9yKQotewotICAgIC8vIFdl
IG5lZWQgdG8gc2V0IHRoZSB0YXJnZXQgaGVyZSBiZWNhdXNlIGl0IGNhbiBnbyBhd2F5IGJ5IHRo
ZSB0aW1lIHdlIGFjdHVhbGx5IGZpcmUgdGhlIGV2ZW50LgotICAgIG1lZGlhdG9yLT5ldmVudCgp
LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobm9kZSkpOwot
ICAgIFNjb3BlZEV2ZW50UXVldWU6Omluc3RhbmNlKCktPmVucXVldWVFdmVudERpc3BhdGNoTWVk
aWF0b3IobWVkaWF0b3IpOwotfQotCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTaW11
bGF0ZWRDbGljayhOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQs
IGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29sIHNob3dQcmVzc2VkTG9vaykKLXsKLSAgICBpZiAo
bm9kZS0+ZGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFnTm9kZXNEaXNw
YXRjaGluZ1NpbXVsYXRlZENsaWNrcykKLSAgICAgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0
ZWRDbGlja3MgPSBuZXcgSGFzaFNldDxOb2RlKj47Ci0gICAgZWxzZSBpZiAoZ05vZGVzRGlzcGF0
Y2hpbmdTaW11bGF0ZWRDbGlja3MtPmNvbnRhaW5zKG5vZGUpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+YWRkKG5vZGUpOwotCi0gICAg
Ly8gc2VuZCBtb3VzZWRvd24gYW5kIG1vdXNldXAgYmVmb3JlIHRoZSBjbGljaywgaWYgcmVxdWVz
dGVkCi0gICAgaWYgKHNlbmRNb3VzZUV2ZW50cykKLSAgICAgICAgRXZlbnREaXNwYXRjaGVyKG5v
ZGUpLmRpc3BhdGNoRXZlbnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5tb3VzZWRvd25FdmVudCwgbm9kZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwgdW5kZXJs
eWluZ0V2ZW50KSk7Ci0gICAgbm9kZS0+c2V0QWN0aXZlKHRydWUsIHNob3dQcmVzc2VkTG9vayk7
Ci0gICAgaWYgKHNlbmRNb3VzZUV2ZW50cykKLSAgICAgICAgRXZlbnREaXNwYXRjaGVyKG5vZGUp
LmRpc3BhdGNoRXZlbnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdF
dmVudCkpOwotICAgIG5vZGUtPnNldEFjdGl2ZShmYWxzZSk7Ci0KLSAgICAvLyBhbHdheXMgc2Vu
ZCBjbGljawotICAgIEV2ZW50RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRl
ZE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgbm9kZS0+ZG9jdW1l
bnQoKS0+ZGVmYXVsdFZpZXcoKSwgdW5kZXJseWluZ0V2ZW50KSk7Ci0KLSAgICBnTm9kZXNEaXNw
YXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+cmVtb3ZlKG5vZGUpOwotfQotCi1ib29sIEV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBQZXJGcmFtZURpc3BhdGNoZXI6OndpbGxEaXNwYXRj
aEV2ZW50KCkgY29uc3QKIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgQVNTRVJUKCFtX2V2ZW50RGlz
cGF0Y2hlZCk7Ci0gICAgbV9ldmVudERpc3BhdGNoZWQgPSB0cnVlOwotI2VuZGlmCi0gICAgUmVm
UHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwotICAgIENoaWxkTm9kZXNMYXp5U25hcHNob3Q6
OnRha2VDaGlsZE5vZGVzTGF6eVNuYXBzaG90KCk7Ci0KLSAgICBldmVudC0+c2V0VGFyZ2V0KGV2
ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOwotICAgIEFT
U0VSVCghTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4o
KSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7Ci0gICAgQVNTRVJUKCFldmVudC0+dHlw
ZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBjb2RlIGNhbiBjcmVhdGUgYW4gZXZlbnQgd2l0
aCBhbiBlbXB0eSBuYW1lLCBidXQgbm90IG51bGwuCi0gICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMo
ZXZlbnQuZ2V0KCkpOwotICAgIFdpbmRvd0V2ZW50Q29udGV4dCB3aW5kb3dFdmVudENvbnRleHQo
ZXZlbnQuZ2V0KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZlbnRDb250ZXh0KCkpOwotICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxEaXNwYXRjaEV2ZW50KG1fbm9kZS0+ZG9jdW1lbnQoKSwgKmV2ZW50LCB3aW5kb3dF
dmVudENvbnRleHQud2luZG93KCksIG1fbm9kZS5nZXQoKSwgbV9hbmNlc3RvcnMpOwotCi0gICAg
dm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQ7Ci0gICAgaWYgKGRpc3BhdGNoRXZl
bnRQcmVQcm9jZXNzKGV2ZW50LCBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCkgPT0gQ29u
dGludWVEaXNwYXRjaGluZykKLSAgICAgICAgaWYgKGRpc3BhdGNoRXZlbnRBdENhcHR1cmluZyhl
dmVudCwgd2luZG93RXZlbnRDb250ZXh0KSA9PSBDb250aW51ZURpc3BhdGNoaW5nKQotICAgICAg
ICAgICAgaWYgKGRpc3BhdGNoRXZlbnRBdFRhcmdldChldmVudCkgPT0gQ29udGludWVEaXNwYXRj
aGluZykKLSAgICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50QXRCdWJibGluZyhldmVudCwgd2lu
ZG93RXZlbnRDb250ZXh0KTsKLSAgICBkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoZXZlbnQsIHBy
ZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IGFmdGVy
IGV2ZW50IGRpc3BhdGNoLCB0aGUgZXZlbnQncyB0YXJnZXQgb2JqZWN0IGlzIHRoZQotICAgIC8v
IG91dGVybW9zdCBzaGFkb3cgRE9NIGJvdW5kYXJ5LgotICAgIGV2ZW50LT5zZXRUYXJnZXQod2lu
ZG93RXZlbnRDb250ZXh0LnRhcmdldCgpKTsKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCgw
KTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnQoY29va2ll
KTsKLQotICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICByZXR1cm4g
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudChtX25vZGUtPmRvY3Vt
ZW50KCksICptX2V2ZW50LCBtX3dpbmRvd0V2ZW50Q29udGV4dC53aW5kb3coKSwgbV9ub2RlLmdl
dCgpLCBtX2FuY2VzdG9ycyk7CiB9CiAKLWlubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9u
IEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQsIHZvaWQqJiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCkKK2lubGluZSBF
dmVudERpc3BhdGNoQ29udGludWF0aW9uIFBlckZyYW1lRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVu
dFByZVByb2Nlc3MoKQogewogICAgIC8vIEdpdmUgdGhlIHRhcmdldCBub2RlIGEgY2hhbmNlIHRv
IGRvIHNvbWUgd29yayBiZWZvcmUgRE9NIGV2ZW50IGhhbmRsZXJzIGdldCBhIGNyYWNrLgotICAg
IHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0ID0gbV9ub2RlLT5wcmVEaXNwYXRjaEV2ZW50
SGFuZGxlcihldmVudC5nZXQoKSk7Ci0gICAgcmV0dXJuIChtX2FuY2VzdG9ycy5pc0VtcHR5KCkg
fHwgZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKSA/IERvbmVEaXNwYXRjaGluZyA6IENvbnRp
bnVlRGlzcGF0Y2hpbmc7CisgICAgbV9wcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCA9IG1f
bm9kZS0+cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIobV9ldmVudC5nZXQoKSk7CisgICAgcmV0dXJu
IChtX2FuY2VzdG9ycy5pc0VtcHR5KCkgfHwgbV9ldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkp
ID8gRG9uZURpc3BhdGNoaW5nIDogQ29udGludWVEaXNwYXRjaGluZzsKIH0KIAotaW5saW5lIEV2
ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRD
YXB0dXJpbmcoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFdpbmRvd0V2ZW50Q29udGV4dCYgd2lu
ZG93RXZlbnRDb250ZXh0KQoraW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gUGVyRnJh
bWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoKQogewogICAgIC8vIFRyaWdn
ZXIgY2FwdHVyaW5nIGV2ZW50IGhhbmRsZXJzLCBzdGFydGluZyBhdCB0aGUgdG9wIGFuZCB3b3Jr
aW5nIG91ciB3YXkgZG93bi4KLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVS
SU5HX1BIQVNFKTsKKyAgICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdf
UEhBU0UpOwogCi0gICAgaWYgKHdpbmRvd0V2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhl
dmVudC5nZXQoKSkgJiYgZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgIGlmIChtX3dp
bmRvd0V2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50LmdldCgpKSAmJiBtX2V2
ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgcmV0dXJuIERvbmVEaXNwYXRjaGlu
ZzsKIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2FuY2VzdG9ycy5zaXplKCkgLSAxOyBpID4gMDsg
LS1pKSB7CiAgICAgICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNl
c3RvcnNbaV07CiAgICAgICAgIGlmIChldmVudENvbnRleHQuY3VycmVudFRhcmdldFNhbWVBc1Rh
cmdldCgpKSB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSkKKyAgICAgICAgICAg
IGlmIChtX2V2ZW50LT5idWJibGVzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICAgICAg
ICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CiAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19Q
SEFTRSk7Ci0gICAgICAgIGV2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQo
KSk7Ci0gICAgICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgICAgICAg
ICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOworICAgICAg
ICBldmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMobV9ldmVudC5nZXQoKSk7CisgICAgICAg
IGlmIChtX2V2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgICAgIHJldHVybiBE
b25lRGlzcGF0Y2hpbmc7CiAgICAgfQogCiAgICAgcmV0dXJuIENvbnRpbnVlRGlzcGF0Y2hpbmc7
CiB9CiAKLWlubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQoraW5saW5lIEV2
ZW50RGlzcGF0Y2hDb250aW51YXRpb24gUGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50
QXRUYXJnZXQoKQogewotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQp
OwotICAgIG1fYW5jZXN0b3JzWzBdLmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKLSAg
ICByZXR1cm4gZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpID8gRG9uZURpc3BhdGNoaW5nIDog
Q29udGludWVEaXNwYXRjaGluZzsKKyAgICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpB
VF9UQVJHRVQpOworICAgIG1fYW5jZXN0b3JzWzBdLmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQu
Z2V0KCkpOworICAgIHJldHVybiBtX2V2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSA/IERvbmVE
aXNwYXRjaGluZyA6IENvbnRpbnVlRGlzcGF0Y2hpbmc7CiB9CiAKLWlubGluZSBFdmVudERpc3Bh
dGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0QnViYmxpbmco
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFdpbmRvd0V2ZW50Q29udGV4dCYgd2luZG93Q29udGV4
dCkKK2lubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIFBlckZyYW1lRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcoKQogewotICAgIGlmIChldmVudC0+YnViYmxlcygpICYm
ICFldmVudC0+Y2FuY2VsQnViYmxlKCkpIHsKKyAgICBpZiAobV9ldmVudC0+YnViYmxlcygpICYm
ICFtX2V2ZW50LT5jYW5jZWxCdWJibGUoKSkgewogICAgICAgICAvLyBUcmlnZ2VyIGJ1YmJsaW5n
IGV2ZW50IGhhbmRsZXJzLCBzdGFydGluZyBhdCB0aGUgYm90dG9tIGFuZCB3b3JraW5nIG91ciB3
YXkgdXAuCi0gICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFT
RSk7CisgICAgICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNF
KTsKIAogICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUoKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEV2
ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaV07CiAgICAgICAgICAgICBp
ZiAoZXZlbnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkKLSAgICAgICAgICAg
ICAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICAgICAgICAg
ICAgICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJC
TElOR19QSEFTRSk7Ci0gICAgICAgICAgICBldmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMo
ZXZlbnQuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQo
KSB8fCBldmVudC0+Y2FuY2VsQnViYmxlKCkpCisgICAgICAgICAgICAgICAgbV9ldmVudC0+c2V0
RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOworICAgICAgICAgICAgZXZlbnRDb250
ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpOworICAgICAgICAgICAgaWYgKG1f
ZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8IG1fZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBEb25lRGlzcGF0Y2hpbmc7CiAgICAgICAgIH0KLSAgICAg
ICAgd2luZG93Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7CisgICAgICAg
IG1fd2luZG93RXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpOwog
ICAgIH0KICAgICByZXR1cm4gQ29udGludWVEaXNwYXRjaGluZzsKIH0KIAotaW5saW5lIHZvaWQg
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQsIHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KQoraW5saW5lIHZv
aWQgUGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoKQogewotICAg
IGV2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9u
b2RlLmdldCgpKSk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7Ci0gICAgZXZlbnQt
PnNldEV2ZW50UGhhc2UoMCk7Ci0KKyAgICBtX2V2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRS
ZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9ub2RlLmdldCgpKSk7CisgICAgbV9ldmVudC0+c2V0
Q3VycmVudFRhcmdldCgwKTsKKyAgICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKDApOwogICAgIC8v
IFBhc3MgdGhlIGRhdGEgZnJvbSB0aGUgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIgdG8gdGhlIHBv
c3REaXNwYXRjaEV2ZW50SGFuZGxlci4KLSAgICBtX25vZGUtPnBvc3REaXNwYXRjaEV2ZW50SGFu
ZGxlcihldmVudC5nZXQoKSwgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOworICAgIG1f
bm9kZS0+cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCksIG1fcHJlRGlzcGF0
Y2hFdmVudEhhbmRsZXJSZXN1bHQpOworfQogCitpbmxpbmUgdm9pZCBQZXJGcmFtZURpc3BhdGNo
ZXI6OmRpc3BhdGNoRXZlbnREZWZhdWx0SGFuZGxlcigpCit7CiAgICAgLy8gQ2FsbCBkZWZhdWx0
IGV2ZW50IGhhbmRsZXJzLiBXaGlsZSB0aGUgRE9NIGRvZXMgaGF2ZSBhIGNvbmNlcHQgb2YgcHJl
dmVudGluZwogICAgIC8vIGRlZmF1bHQgaGFuZGxpbmcsIHRoZSBkZXRhaWwgb2Ygd2hpY2ggaGFu
ZGxlcnMgYXJlIGNhbGxlZCBpcyBhbiBpbnRlcm5hbAogICAgIC8vIGltcGxlbWVudGF0aW9uIGRl
dGFpbCBhbmQgbm90IHBhcnQgb2YgdGhlIERPTS4KLSAgICBpZiAoIWV2ZW50LT5kZWZhdWx0UHJl
dmVudGVkKCkgJiYgIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKSB7CisgICAgaWYgKCFtX2V2ZW50
LT5kZWZhdWx0UHJldmVudGVkKCkgJiYgIW1fZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpIHsKICAg
ICAgICAgLy8gTm9uLWJ1YmJsaW5nIGV2ZW50cyBjYWxsIG9ubHkgb25lIGRlZmF1bHQgZXZlbnQg
aGFuZGxlciwgdGhlIG9uZSBmb3IgdGhlIHRhcmdldC4KLSAgICAgICAgbV9ub2RlLT5kZWZhdWx0
RXZlbnRIYW5kbGVyKGV2ZW50LmdldCgpKTsKLSAgICAgICAgQVNTRVJUKCFldmVudC0+ZGVmYXVs
dFByZXZlbnRlZCgpKTsKLSAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQorICAg
ICAgICBtX25vZGUtPmRlZmF1bHRFdmVudEhhbmRsZXIobV9ldmVudC5nZXQoKSk7CisgICAgICAg
IEFTU0VSVCghbV9ldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpKTsKKyAgICAgICAgaWYgKG1fZXZl
bnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIEZv
ciBidWJibGluZyBldmVudHMsIGNhbGwgZGVmYXVsdCBldmVudCBoYW5kbGVycyBvbiB0aGUgc2Ft
ZSB0YXJnZXRzIGluIHRoZQogICAgICAgICAvLyBzYW1lIG9yZGVyIGFzIHRoZSBidWJibGluZyBw
aGFzZS4KLSAgICAgICAgaWYgKGV2ZW50LT5idWJibGVzKCkpIHsKKyAgICAgICAgaWYgKG1fZXZl
bnQtPmJ1YmJsZXMoKSkgewogICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBtX2FuY2VzdG9ycy5z
aXplKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICAgICAgICAgIG1fYW5jZXN0b3JzW2ldLm5vZGUoKS0+ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFldmVudC0+ZGVmYXVsdFBy
ZXZlbnRlZCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkp
CisgICAgICAgICAgICAgICAgbV9hbmNlc3RvcnNbaV0ubm9kZSgpLT5kZWZhdWx0RXZlbnRIYW5k
bGVyKG1fZXZlbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9ldmVudC0+ZGVm
YXVsdFByZXZlbnRlZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ldmVudC0+ZGVmYXVsdEhh
bmRsZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogfQogCi1jb25zdCBFdmVudENvbnRleHQqIEV2ZW50RGlzcGF0Y2hlcjo6
dG9wRXZlbnRDb250ZXh0KCkKK2lubGluZSB2b2lkIFBlckZyYW1lRGlzcGF0Y2hlcjo6cmVzZXRU
YXJnZXQoKQoreworICAgIG1fZXZlbnQtPnNldFRhcmdldChtX3dpbmRvd0V2ZW50Q29udGV4dC50
YXJnZXQoKSk7CisgICAgbV9ldmVudC0+c2V0Q3VycmVudFRhcmdldCgwKTsKK30KKworaW5saW5l
IGNvbnN0IEV2ZW50Q29udGV4dCogUGVyRnJhbWVEaXNwYXRjaGVyOjp0b3BFdmVudENvbnRleHQo
KQogewogICAgIHJldHVybiBtX2FuY2VzdG9ycy5pc0VtcHR5KCkgPyAwIDogJm1fYW5jZXN0b3Jz
Lmxhc3QoKTsKIH0KQEAgLTM2OSw3ICszNzUsMjQgQEAgc3RhdGljIGlubGluZSBib29sIGluVGhl
U2FtZVNjb3BlKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiAg
ICAgcmV0dXJuIHRhcmdldC0+dG9Ob2RlKCkgJiYgdGFyZ2V0LT50b05vZGUoKS0+dHJlZVNjb3Bl
KCktPnJvb3ROb2RlKCkgPT0gc2hhZG93Um9vdDsKIH0KIAotRXZlbnREaXNwYXRjaEJlaGF2aW9y
IEV2ZW50RGlzcGF0Y2hlcjo6ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCogZXZlbnQs
IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCitpbmxpbmUgc3Rh
dGljIGJvb2wgZXZlbnRTaG91bGRCZVN0b3BwZWRBdEJvdW5kYXJ5KEV2ZW50KiBldmVudCkKK3sK
KyAgICAvLyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBzZWxlY3RzdGFydCBldmVudCB0byBjcm9zcyB0
aGUgdGhlIHNoYWRvdyBET00gYm91bmRhcnkuCisgICAgLy8gQ2hhbmdpbmcgdGhpcyBicmVha3Mg
ZXhpc3Rpbmcgc2l0ZXMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MjE5NSBmb3IgZGV0YWlscy4KKyAgICBjb25zdCBBdG9taWNTdHJpbmcgZXZl
bnRUeXBlID0gZXZlbnQtPnR5cGUoKTsKKyAgICByZXR1cm4gZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS5hYm9ydEV2ZW50CisgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hh
bmdlRXZlbnQKKyAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50
CisgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubG9hZEV2ZW50CisgICAgICAg
IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAorICAgICAgICB8fCBldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50CisgICAgICAgIHx8IGV2ZW50VHlwZSA9
PSBldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQKKyAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50
TmFtZXMoKS5zZWxlY3RFdmVudAorICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LnNlbGVjdHN0YXJ0RXZlbnQ7Cit9CisKK2lubGluZSBFdmVudERpc3BhdGNoQmVoYXZpb3IgUGVy
RnJhbWVEaXNwYXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKFNoYWRvd1Jvb3QqIHNo
YWRvd1Jvb3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKSAmJiBFTkFCTEUoVklERU8pCiAgICAgLy8gVmlkZW8tb25seSBmdWxsIHNjcmVlbiBpcyBh
IG1vZGUgd2hlcmUgd2UgdXNlIHRoZSBzaGFkb3cgRE9NIGFzIGFuIGltcGxlbWVudGF0aW9uCkBA
IC0zODQsMjMgKzQwNywxNjMgQEAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIEV2ZW50RGlzcGF0Y2hl
cjo6ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCogZXZlbnQsIFMKICAgICBVTlVTRURf
UEFSQU0oc2hhZG93Um9vdCk7CiAjZW5kaWYKIAotICAgIC8vIFdlYktpdCBuZXZlciBhbGxvd2Vk
IHNlbGVjdHN0YXJ0IGV2ZW50IHRvIGNyb3NzIHRoZSB0aGUgc2hhZG93IERPTSBib3VuZGFyeS4K
LSAgICAvLyBDaGFuZ2luZyB0aGlzIGJyZWFrcyBleGlzdGluZyBzaXRlcy4KLSAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMTk1IGZvciBkZXRhaWxz
LgotICAgIGNvbnN0IEF0b21pY1N0cmluZyBldmVudFR5cGUgPSBldmVudC0+dHlwZSgpOwotICAg
IGlmIChpblRoZVNhbWVTY29wZShzaGFkb3dSb290LCB0YXJnZXQpCi0gICAgICAgICYmIChldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9
PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5sb2FkRXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkucmVzZXRFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMo
KS5yZXNpemVFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5z
Y3JvbGxFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxl
Y3RFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3Rz
dGFydEV2ZW50KSkKKyAgICBpZiAoaW5UaGVTYW1lU2NvcGUoc2hhZG93Um9vdCwgdGFyZ2V0KSAm
JiBldmVudFNob3VsZEJlU3RvcHBlZEF0Qm91bmRhcnkobV9ldmVudC5nZXQoKSkpCiAgICAgICAg
IHJldHVybiBTdGF5SW5zaWRlU2hhZG93RE9NOwotCiAgICAgcmV0dXJuIFJldGFyZ2V0RXZlbnQ7
CiB9CiAKK0V2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCisgICAg
OiBtX25vZGUobm9kZSkKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2V2ZW50RGlzcGF0Y2hlZChm
YWxzZSkKKyNlbmRpZgoreworICAgIEFTU0VSVChub2RlKTsKK30KKworYm9vbCBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNo
TWVkaWF0b3I+IG1lZGlhdG9yKQoreworICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRl
bigpKTsKKworICAgIEV2ZW50RGlzcGF0Y2hlciBkaXNwYXRjaGVyKG5vZGUpOworICAgIHJldHVy
biBtZWRpYXRvci0+ZGlzcGF0Y2hFdmVudCgmZGlzcGF0Y2hlcik7Cit9CisKK3ZvaWQgRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaFNjb3BlZEV2ZW50KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZl
bnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKK3sKKyAgICAvLyBXZSBuZWVkIHRvIHNldCB0
aGUgdGFyZ2V0IGhlcmUgYmVjYXVzZSBpdCBjYW4gZ28gYXdheSBieSB0aGUgdGltZSB3ZSBhY3R1
YWxseSBmaXJlIHRoZSBldmVudC4KKyAgICBtZWRpYXRvci0+ZXZlbnQoKS0+c2V0VGFyZ2V0KGV2
ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG5vZGUpKTsKKyAgICBTY29wZWRFdmVu
dFF1ZXVlOjppbnN0YW5jZSgpLT5lbnF1ZXVlRXZlbnREaXNwYXRjaE1lZGlhdG9yKG1lZGlhdG9y
KTsKK30KKwordm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9k
ZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3Vz
ZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2spCit7CisgICAgaWYgKG5vZGUtPmRpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0
ZWRDbGlja3MpCisgICAgICAgIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gbmV3
IEhhc2hTZXQ8Tm9kZSo+OworICAgIGVsc2UgaWYgKGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVk
Q2xpY2tzLT5jb250YWlucyhub2RlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ05vZGVzRGlz
cGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPmFkZChub2RlKTsKKworICAgIC8vIHNlbmQgbW91c2Vk
b3duIGFuZCBtb3VzZXVwIGJlZm9yZSB0aGUgY2xpY2ssIGlmIHJlcXVlc3RlZAorICAgIGlmIChz
ZW5kTW91c2VFdmVudHMpCisgICAgICAgIEV2ZW50RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2
ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubW91c2Vkb3duRXZl
bnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkpOwor
ICAgIG5vZGUtPnNldEFjdGl2ZSh0cnVlLCBzaG93UHJlc3NlZExvb2spOworICAgIGlmIChzZW5k
TW91c2VFdmVudHMpCisgICAgICAgIEV2ZW50RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50
KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBu
b2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCB1bmRlcmx5aW5nRXZlbnQpKTsKKyAgICBu
b2RlLT5zZXRBY3RpdmUoZmFsc2UpOworCisgICAgLy8gYWx3YXlzIHNlbmQgY2xpY2sKKyAgICBF
dmVudERpc3BhdGNoZXIobm9kZSkuZGlzcGF0Y2hFdmVudChTaW11bGF0ZWRNb3VzZUV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRW
aWV3KCksIHVuZGVybHlpbmdFdmVudCkpOworCisgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0
ZWRDbGlja3MtPnJlbW92ZShub2RlKTsKK30KKworaW5saW5lIHN0YXRpYyBib29sIHNob3VsZFBy
b3BhZ2F0ZUV2ZW50QWNyb3NzU2VhbWxlc3NJRnJhbWVzKEV2ZW50KiBldmVudCkKK3sKKyAgICBj
b25zdCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsKKyAgICAvLyBGSVhN
RTogU3VwcG9ydCBtb3JlIGV2ZW50cy4KKyAgICByZXR1cm4gZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS5jbGlja0V2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVu
dDsKK30KKworaW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpwcmVwYXJlRXZlbnREaXNwYXRj
aGVycyhQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK3sKKyAgICBBU1NFUlQobV9kaXNwYXRj
aGVycy5pc0VtcHR5KCkpOworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKKyAg
ICBOb2RlKiBub2RlID0gbV9ub2RlLmdldCgpOworICAgIGJvb2wgcHJvcGFnYXRlRXZlbnRBY3Jv
c3NTZWFtbGVzc0lGcmFtZXMgPSBzaG91bGRQcm9wYWdhdGVFdmVudEFjcm9zc1NlYW1sZXNzSUZy
YW1lcyhldmVudC5nZXQoKSk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgbV9kaXNwYXRj
aGVycy5hcHBlbmQoYWRvcHRQdHIobmV3IFBlckZyYW1lRGlzcGF0Y2hlcihub2RlLCBldmVudCkp
KTsKKyAgICAgICAgaWYgKCFtX2Rpc3BhdGNoZXJzLmxhc3QoKS0+c2hvdWxkQ29udGludWVUb1Bh
cmVudERvY3VtZW50KCkgfHwgIXByb3BhZ2F0ZUV2ZW50QWNyb3NzU2VhbWxlc3NJRnJhbWVzKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBIVE1MSUZyYW1lRWxlbWVudCogcGFyZW50SUZy
YW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+c2VhbWxlc3NQYXJlbnRJRnJhbWUoKTsKKyAgICAgICAg
aWYgKCFwYXJlbnRJRnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG5vZGUgPSBw
YXJlbnRJRnJhbWU7CisgICAgICAgIGV2ZW50ID0gZXZlbnQtPmNsb25lRm9yKHBhcmVudElGcmFt
ZSk7CisgICAgfQorfQorCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdl
dChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJw
UmVsYXRlZFRhcmdldCkKK3sKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7Cisg
ICAgaWYgKG1fZGlzcGF0Y2hlcnMuaXNFbXB0eSgpKQorICAgICAgICBwcmVwYXJlRXZlbnREaXNw
YXRjaGVycyhldmVudCk7CisgICAgQVNTRVJUKCFtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSk7Cisg
ICAgbV9kaXNwYXRjaGVycy5sYXN0KCktPmFkanVzdFJlbGF0ZWRUYXJnZXQocHJwUmVsYXRlZFRh
cmdldCk7Cit9CisKK2Jvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IHBycEV2ZW50KQoreworI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQoIW1fZXZl
bnREaXNwYXRjaGVkKTsKKyAgICBtX2V2ZW50RGlzcGF0Y2hlZCA9IHRydWU7CisjZW5kaWYKKyAg
ICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CisgICAgaWYgKG1fZGlzcGF0Y2hlcnMu
aXNFbXB0eSgpKQorICAgICAgICBwcmVwYXJlRXZlbnREaXNwYXRjaGVycyhldmVudCk7CisgICAg
QVNTRVJUKCFtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIGNvb2tpZSA9IG1fZGlzcGF0Y2hlcnNbMF0tPndpbGxEaXNwYXRjaEV2ZW50
KCk7CisKKyAgICBmaXJlRGlzcGF0Y2hlcnMoKTsKKyAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQg
PSBmaXJlRGlzcGF0Y2hlcnNEZWZhdWx0RXZlbnRIYW5kbGVyKCk7CisKKyAgICAvLyBFbnN1cmUg
dGhhdCBhZnRlciBldmVudCBkaXNwYXRjaCwgdGhlIGV2ZW50J3MgdGFyZ2V0IG9iamVjdCBpcyB0
aGUKKyAgICAvLyBvdXRlcm1vc3Qgc2hhZG93IERPTSBib3VuZGFyeS4KKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZGlzcGF0Y2hlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZGlzcGF0
Y2hlcnNbaV0tPnJlc2V0VGFyZ2V0KCk7CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZERpc3BhdGNoRXZlbnQoY29va2llKTsKKyAgICByZXR1cm4gIWRlZmF1bHRQcmV2ZW50ZWQ7
Cit9CisKK2lubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNoZXJzKCkKK3sK
KyAgICBBU1NFUlQoIW1fZGlzcGF0Y2hlcnMuaXNFbXB0eSgpKTsKKyAgICBzaXplX3Qgc2l6ZSA9
IG1fZGlzcGF0Y2hlcnMuc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAw
OyAtLWkpIHsKKyAgICAgICAgaWYgKG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZlbnRQcmVQ
cm9jZXNzKCkgPT0gRG9uZURpc3BhdGNoaW5nCisgICAgICAgICAgICB8fCBtX2Rpc3BhdGNoZXJz
W2ldLT5kaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoKSA9PSBEb25lRGlzcGF0Y2hpbmcpIHsKKyAg
ICAgICAgICAgIGZpcmVEaXNwYXRjaGVyc1Bvc3RQcm9jZXNzKGkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7CisgICAgICAgIGlmIChtX2Rpc3BhdGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50QXRUYXJn
ZXQoKSA9PSBEb25lRGlzcGF0Y2hpbmcKKyAgICAgICAgICAgIHx8IG1fZGlzcGF0Y2hlcnNbaV0t
PmRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKCkgPT0gRG9uZURpc3BhdGNoaW5nKSB7CisgICAgICAg
ICAgICBmaXJlRGlzcGF0Y2hlcnNQb3N0UHJvY2VzcyhpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBtX2Rpc3BhdGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50UG9zdFBy
b2Nlc3MoKTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURp
c3BhdGNoZXJzUG9zdFByb2Nlc3MoaW50IHN0YXJ0aW5nRnJhbWUpCit7CisgICAgc2l6ZV90IHNp
emUgPSBtX2Rpc3BhdGNoZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRpbmdG
cmFtZTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbV9kaXNwYXRjaGVyc1tpXS0+ZGlzcGF0Y2hF
dmVudFBvc3RQcm9jZXNzKCk7Cit9CisKK2lubGluZSBib29sIEV2ZW50RGlzcGF0Y2hlcjo6Zmly
ZURpc3BhdGNoZXJzRGVmYXVsdEV2ZW50SGFuZGxlcigpCit7CisgICAgc2l6ZV90IHNpemUgPSBt
X2Rpc3BhdGNoZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICBjb25zdCBFdmVudCogZXZlbnQgPSBtX2Rpc3BhdGNoZXJzW2ldLT5ldmVu
dCgpOworICAgICAgICBpZiAoZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBtX2Rpc3BhdGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50RGVm
YXVsdEhhbmRsZXIoKTsKKyAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghZXZlbnQtPmJ1YmJsZXMo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggNWJmZWFkMGQwZTZj
YmUwYjgwMDM0ZDQyMjVhNjBlMzI0ZGZhYzgzOS4uODg1MDgwMWVkOTVmYWIyNGExMzg0MDYwNWJh
MGNkY2ZkZTQ3MzNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0
Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApAQCAtMjcs
ODUgKzI3LDQxIEBACiAjZGVmaW5lIEV2ZW50RGlzcGF0Y2hlcl9oCiAKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBFdmVudDsKLWNsYXNzIEV2ZW50Q29udGV4dDsKIGNsYXNzIEV2ZW50RGlzcGF0Y2hNZWRp
YXRvcjsKIGNsYXNzIEV2ZW50VGFyZ2V0OwotY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgTm9kZTsK
LWNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKLWNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsK
LWNsYXNzIFNoYWRvd1Jvb3Q7Ci1jbGFzcyBUcmVlU2NvcGU7Ci1jbGFzcyBXaW5kb3dFdmVudENv
bnRleHQ7Ci0KLWVudW0gRXZlbnREaXNwYXRjaEJlaGF2aW9yIHsKLSAgICBSZXRhcmdldEV2ZW50
LAotICAgIFN0YXlJbnNpZGVTaGFkb3dET00KLX07Ci0KLWVudW0gRXZlbnREaXNwYXRjaENvbnRp
bnVhdGlvbiB7Ci0gICAgQ29udGludWVEaXNwYXRjaGluZywKLSAgICBEb25lRGlzcGF0Y2hpbmcK
LX07Ci0KLWNsYXNzIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyIHsKLXB1YmxpYzoKLSAgICBF
dmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPE5v
ZGU+IHJlbGF0ZWRUYXJnZXQpOwotICAgIHZvaWQgYWRqdXN0KFZlY3RvcjxFdmVudENvbnRleHQ+
Jik7Ci1wcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxUcmVlU2NvcGUqLCBFdmVudFRhcmdl
dCo+IFJlbGF0ZWRUYXJnZXRNYXA7Ci0gICAgRXZlbnRUYXJnZXQqIGZpbmRSZWxhdGVkVGFyZ2V0
KFRyZWVTY29wZSopOwotCi0gICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKLSAgICBSZWZQdHI8Tm9k
ZT4gbV9yZWxhdGVkVGFyZ2V0OwotICAgIFJlbGF0ZWRUYXJnZXRNYXAgbV9yZWxhdGVkVGFyZ2V0
TWFwOwotfTsKK2NsYXNzIFBlckZyYW1lRGlzcGF0Y2hlcjsKIAogY2xhc3MgRXZlbnREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaEV2ZW50KE5vZGUqLCBQYXNz
UmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4pOwogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNo
U2NvcGVkRXZlbnQoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPik7Ci0K
ICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqLCBQYXNzUmVmUHRy
PEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29sIHNob3dQ
cmVzc2VkTG9vayk7CiAKKyAgICB2b2lkIGFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxF
dmVudD4sIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQpOwogICAgIGJvb2wg
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgdm9pZCBhZGp1c3RSZWxhdGVk
VGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRhcmdldCk7
Ci0gICAgTm9kZSogbm9kZSgpIGNvbnN0OworICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVy
biBtX25vZGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBFdmVudERpc3BhdGNoZXIoTm9kZSop
OworICAgIHZvaWQgcHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoUGFzc1JlZlB0cjxFdmVudD4pOwor
ICAgIHZvaWQgZmlyZURpc3BhdGNoZXJzKCk7CisgICAgdm9pZCBmaXJlRGlzcGF0Y2hlcnNQb3N0
UHJvY2VzcyhpbnQgYnJvd3NpbmdDb250ZXh0TnVtYmVyKTsKKyAgICBib29sIGZpcmVEaXNwYXRj
aGVyc0RlZmF1bHRFdmVudEhhbmRsZXIoKTsKIAotICAgIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciBk
ZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiwgU2hhZG93Um9vdCosIEV2ZW50VGFyZ2V0
Kik7Ci0KLSAgICB2b2lkIGVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50Kik7Ci0gICAgY29uc3Qg
RXZlbnRDb250ZXh0KiB0b3BFdmVudENvbnRleHQoKTsKLQotICAgIEV2ZW50RGlzcGF0Y2hDb250
aW51YXRpb24gZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MoUGFzc1JlZlB0cjxFdmVudD4sIHZvaWQq
JiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7Ci0gICAgRXZlbnREaXNwYXRjaENvbnRp
bnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoUGFzc1JlZlB0cjxFdmVudD4sIFdpbmRv
d0V2ZW50Q29udGV4dCYpOwotICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hF
dmVudEF0VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBFdmVudERpc3BhdGNoQ29udGlu
dWF0aW9uIGRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKFBhc3NSZWZQdHI8RXZlbnQ+LCBXaW5kb3dF
dmVudENvbnRleHQmKTsKLSAgICB2b2lkIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcyhQYXNzUmVm
UHRyPEV2ZW50Piwgdm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOwotCi0gICAg
VmVjdG9yPEV2ZW50Q29udGV4dD4gbV9hbmNlc3RvcnM7CisgICAgVmVjdG9yPE93blB0cjxQZXJG
cmFtZURpc3BhdGNoZXI+ID4gbV9kaXNwYXRjaGVyczsKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2Rl
OwotICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1fdmlldzsKLSAgICBib29sIG1fYW5jZXN0b3JzSW5p
dGlhbGl6ZWQ7CiAjaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgbV9ldmVudERpc3BhdGNoZWQ7CiAj
ZW5kaWYKIH07CiAKLWlubGluZSBOb2RlKiBFdmVudERpc3BhdGNoZXI6Om5vZGUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX25vZGUuZ2V0KCk7Ci19Ci0KIH0KIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzQ5
ODdlZGJhZTM2ODRhOWI5MTdiNzVhZjM0MWM1OGEzOTQ5MzA1MC4uODZkMDVhY2ZmM2Q4NDY5Zjk2
NTA4OTg0YzdmMDFhODkwMDI3NjJkZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTEwLTE1
ICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBTdXBwb3J0IGFu
IGV2ZW50IHByb3BhZ2F0aW9uIGFjcm9zcyBzZWFtbGVzcyBpZnJhbWVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyOTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZnJhbWVzL3NlYW1sZXNz
L3Jlc291cmNlcy9maXJlLWV2ZW50cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZyYW1l
cy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMuaHRtbDogQWRkZWQuCisKIDIw
MTItMTAtMTUgIFNoaW55YSBLYXdhbmFrYSAgPHNoaW55YWtAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtDaHJvbWl1bV0gVW5yZXZpZXdlZCBnYXJkZW5pbmcsIFRlc3RFeHBlY3RhdGlvbnMgdXBk
YXRlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3Jlc291
cmNlcy9maXJlLWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mv
cmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNlNjI3MDNjN2NlMTE1MWE1
YmU4NGIyODBmZTEzZWM0M2QzODIwNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZnJhbWVzL3NlYW1sZXNzL3Jlc291cmNlcy9maXJlLWV2ZW50cy5odG1sCkBAIC0wLDAgKzEs
MTggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxkaXYgaWQ9J3RhcmdldCc+
PC9kaXY+Cis8c2NyaXB0Pgord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5j
dGlvbihldmVudCkgeworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
dGFyZ2V0Jyk7CisgICAgdmFyIGV2ZW50cyA9IFsnYWJvcnQnLCAnc2VsZWN0JywgJ2NoYW5nZScs
ICdjbGljaycsICdkYmxjbGljaycsICdyZXNldCcsICdyZXNpemUnLCAnc2Nyb2xsJywgJ3NlbGVj
dHN0YXJ0J107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ1VJRXZlbnQnKTsKKyAg
ICAgICAgZXZlbnQuaW5pdEV2ZW50KGV2ZW50c1tpXSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICB0
YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgfQorICAgIHdpbmRvdy50b3AucG9zdE1l
c3NhZ2UoJ0RPTkUnLCAnKicpOworfSwgZmFsc2UpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVz
cy1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mv
c2VhbWxlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWM2ZWE1OGIwYTQ0ZjA3
NTVlOGU2MjIzZDVlYmI5YTRjNTM2NzQxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDI0IEBACitUZXN0IHRoYXQgZXZlbnQgcHJvcGFnYXRlcyBhY3Jvc3Mgc2VhbWxlc3MgaWZy
YW1lcy4KKworICBhYm9ydAorCisgIHNlbGVjdAorCisgIGNoYW5nZQorCisgIGNsaWNrCisgICAg
IEBzZWFtbGVzcy1pZnJhbWUgKHRhcmdldDogc2VhbWxlc3MtaWZyYW1lKQorICAgICBAYm9keSAo
dGFyZ2V0OiBzZWFtbGVzcy1pZnJhbWUpCisKKyAgZGJsY2xpY2sKKyAgICAgQHNlYW1sZXNzLWlm
cmFtZSAodGFyZ2V0OiBzZWFtbGVzcy1pZnJhbWUpCisgICAgIEBib2R5ICh0YXJnZXQ6IHNlYW1s
ZXNzLWlmcmFtZSkKKworICByZXNldAorCisgIHJlc2l6ZQorCisgIHNjcm9sbAorCisgIHNlbGVj
dHN0YXJ0CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3Nl
YW1sZXNzLWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2Vh
bWxlc3MtZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNmODMxMmNiYzFmNTFmZmRmOWU3YTJjZjky
MWY1NWM5NzMyZjZhNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVz
L3NlYW1sZXNzL3NlYW1sZXNzLWV2ZW50cy5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8Ym9keSBpZD0nYm9keSc+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitkZWJ1ZygiVGVz
dCB0aGF0IGV2ZW50IHByb3BhZ2F0ZXMgYWNyb3NzIHNlYW1sZXNzIGlmcmFtZXMuIikKKworaWYg
KHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBldmVudHMgPSBbJ2Fib3J0Jywg
J3NlbGVjdCcsICdjaGFuZ2UnLCAnY2xpY2snLCAnZGJsY2xpY2snLCAncmVzZXQnLCAncmVzaXpl
JywgJ3Njcm9sbCcsICdzZWxlY3RzdGFydCddOwordmFyIGV2ZW50UmVjb3JkcyA9IHt9OworCitm
b3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkKKyAgICBkb2N1bWVudC5ib2R5
LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRzW2ldLCByZWNvcmRFdmVudCk7CisKK2Z1bmN0aW9uIGlm
cmFtZUxvYWRlZChpZnJhbWUpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5n
dGg7ICsraSkKKyAgICAgICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRzW2ldLCByZWNv
cmRFdmVudCk7CisgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoJ2ZpcmUnLCAn
KicpOworfQorCit2YXIgbWVzc2FnZVJlY2VpdmVkQ291bnQgPSAwOworCit3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKCsrbWVzc2Fn
ZVJlY2VpdmVkQ291bnQgPT0gMikgIHsKKyAgICAgICAgZHVtcERpc3BhdGNoZWRFdmVudCgpOwor
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKKyAgICB9Cit9LCBmYWxzZSk7CisKK2Z1bmN0aW9uIHJlY29yZEV2ZW50KGV2
ZW50KQoreworICAgIHZhciBldmVudFR5cGUgPSBldmVudC50eXBlCisgICAgaWYgKCFldmVudFJl
Y29yZHNbZXZlbnRUeXBlXSkKKyAgICAgICAgZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0gPSBbXTsK
KyAgICB2YXIgZXZlbnRTdHJpbmcgPSAnJzsKKyAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldCkK
KyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyBAJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuaWQ7Cisg
ICAgaWYgKGV2ZW50LnRhcmdldCkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAodGFyZ2V0OiAn
ICsgZXZlbnQudGFyZ2V0LmlkICsgJyknOworICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0KQor
ICAgICAgICBldmVudFN0cmluZyArPSAnIChyZWxhdGVkOiAnICsgZXZlbnQucmVsYXRlZFRhcmdl
dC5pZCArICcpJzsKKyAgICBpZiAoZXZlbnQuZXZlbnRQaGFzZSA9PSAxKQorICAgICAgICBldmVu
dFN0cmluZyArPSAnKGNhcHR1cmluZyBwaGFzZSknOworICAgIGlmIChldmVudC50YXJnZXQgJiYg
ZXZlbnQuY3VycmVudFRhcmdldCAmJiBldmVudC50YXJnZXQuaWQgPT0gZXZlbnQuY3VycmVudFRh
cmdldC5pZCkKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50LmV2ZW50UGhhc2UiLCAiMiIsIHRydWUp
OworICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdLnB1c2goZXZlbnRTdHJpbmcpOworfQorCitm
dW5jdGlvbiBkdW1wRGlzcGF0Y2hlZEV2ZW50KCkKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGV2ZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgZXZlbnRUeXBlID0gZXZlbnRzW2ld
OworICAgICAgICBkZWJ1ZygnXG4gICcgKyBldmVudFR5cGUpOworICAgICAgICB2YXIgcmVjb3Jk
ID0gZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0gfHwgW107CisgICAgICAgIGZvciAodmFyIGogPSAw
OyBqIDwgcmVjb3JkLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgZGVidWcoJyAgICAnICsgcmVj
b3JkW2pdKQorICAgIH0KK30KKworPC9zY3JpcHQ+Cis8ZGl2IGlkPSJjb250YWluZXIiPgorICAg
IDxpZnJhbWUgaWQ9J3NlYW1sZXNzLWlmcmFtZScgb25sb2FkPSdpZnJhbWVMb2FkZWQodGhpcykn
IHNyYz0ncmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwnIHNlYW1sZXNzPSd0cnVlJz48L2lmcmFt
ZT4KKyAgICA8aWZyYW1lIGlkPSdub24tc2VhbWxlc3MtaWZyYW1lJyBvbmxvYWQ9J2lmcmFtZUxv
YWRlZCh0aGlzKScgc3JjPSdyZXNvdXJjZXMvZmlyZS1ldmVudHMuaHRtbCc+PC9pZnJhbWU+Cis8
L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168866</attachid>
            <date>2012-10-15 23:28:20 -0700</date>
            <delta_ts>2013-04-08 20:27:23 -0700</delta_ts>
            <desc>Sync with ToT</desc>
            <filename>bug-91290-20121016152709.patch</filename>
            <type>text/plain</type>
            <size>37470</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNDEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhlZTg4MTQ0OGY5ODhl
OTdmOGU0MWRiNzIyODEyMjk0OGMxOWE3OS4uNWQxMWFhOTY0NmU3OWU1NWRlZmU1Mzg5NGNiM2Q5
NWZhZjYxOWQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0xMC0xNSAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVu
dCBwcm9wYWdhdGlvbiBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjkwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBhbiBldmVudCBwcm9wYWdhdGlv
biBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1lcy4KKyAgICAgICAgQXMgdGhlIGZpcnN0IHN0ZXAsICdj
bGljaycgYW5kICdkYmxjbGljaycgZXZlbnRzIGhhdmUgYmVlbiBzdXBwb3J0ZWQuCisKKyAgICAg
ICAgVG8gc3VwcG9ydCBhbiBldmVudCBkaXNwYXRjaGluZyBhY3Jvc3MgYnJvd3NpbmcgY29udGV4
dCwgSSd2ZQorICAgICAgICBpbnRyb2R1Y2VkIGEgRXZlbnREaXNwYXRjaGVyRm9yQnJvd3NpbmdD
b250ZXh0LCB3aG9zZSByb2xlIGlzIHNpbWlsYXIgdG8KKyAgICAgICAgYW4gRXZlbnREaXNwYXRj
aGVyIHByaW9yIHRvIHRoaXMgcGF0Y2guIEJ1dCB0aGUgaW50ZXJuYWwKKyAgICAgICAgc3RydWN0
dXJlIHdhcyBzaWduaWZpY2FudGx5IGNoYW5nZWQgc28gdGhhdCBpdCBjYW4gYmUgbWFuYWdlZCBm
cm9tIG91dHNpZGUuCisKKyAgICAgICAgQW4gRXZlbnREaXNwYXRjaGVyIG5vdyBhY3RzIGFzIGlm
IGl0IHdlcmUgYSBtZXRhIGRpc3BhdGNoZXIgd2hpY2gKKyAgICAgICAgZGVsZWdhdGVzIGV2ZW50
IGRpc3BhdGNoaW5nIHRvIGVhY2ggZGlzcGF0Y2hlciBpbiBlYWNoIGJyb3dzaW5nCisgICAgICAg
IGNvbnRleHQuIEl0IG1hbmFnZXMgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIG9mIGRpc3BhdGNoZXJz
LgorCisgICAgICAgIEFjY29yZGluZyB0byB0aGUgZGlzY3Vzc2lvbiBvZiBidWcgOTEyOTAsIHdo
YXR3ZyBtaWdodCBzcGVjCisgICAgICAgIHdoYXRldmVyIFdlYktpdCBpbXBsZW1lbnRzLiAgU28g
bGV0IG1lIGV4cGxhaW4gaG93IGV2ZW50CisgICAgICAgIGRpc3BhdGNoaW5nIHdvcmtzIGFjcm9z
cyBzZWFtbGVzcyBpZnJhbWVzIGJyaWVmbHkgaGVyZToKKworICAgICAgICAxLiBBbmNlc3RvciBu
b2RlcyBvZiBldmVudCBhcmUgY2FsY3VsYXRlZCBhcyB1c3VhbCwgYnV0IGlmIHRoZQorICAgICAg
ICAgICBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHQgaXMgdGhhdCBvZiBhIHNlYW1sZXNzIGlmcmFt
ZSwgY29udGludWUgdG8KKyAgICAgICAgICAgdHJhdmVyc2luZyBhbmNlc3RvcnMgb2YgdGhlIHBh
cmVudCBicm93c2luZyBjb250ZXh0LgorICAgICAgICAyLiBGb3IgZWFjaCBicm93c2luZyBjb250
ZXh0LCBjbG9uZSB0aGUgZXZlbnQgb2JqZWN0LiBJbiB0aGUgbGF0ZXIKKyAgICAgICAgICAgZXZl
bnQgZGlzcGF0Y2hpbmcsIHVzZSB0aGUgY2xvbmVkIGV2ZW50IG9iamVjdCBpbiBlYWNoIGJyb3dz
aW5nCisgICAgICAgICAgIGNvbnRleHQgc28gdGhhdCB3ZSBjYW4gaXNvbGF0ZSBldmVudCBvYmpl
Y3RzLgorICAgICAgICAzLiBUYXJnZXQgb2YgdGhlIGNsb25lZCBldmVudCBvYmplY3RzIGlzIHJl
dGFyZ2V0ZWQgdG8gaWZyYW1lJ3Mgb3duZXIgZWxlbWVudC4KKyAgICAgICAgNC4gUHJvY2VzcyBj
YXB0dXJpbmcsIHRhcmdldCBhbmQgYnViYmxpbmcgcGhhc2VzIGFzIGlmIHRoZXJlIHdhcworICAg
ICAgICAgICBvbmUgYmlnICdhbmNlc3RvcicgY2hhaW4uICBUaGF0IG1lYW5zIGlmIGFuIGV2ZW50
IGxpc3RlbmVyIGluIGFuCisgICAgICAgICAgIHVwcGVyIGJyb3dzaW5nIGNvbnRleHQgY2FsbHMg
c3RvcFByb3BhZ2F0aW9uKCkgYXQgY2FwdHVyaW5nCisgICAgICAgICAgIHBoYXNlLCBuZXN0ZWQg
YnJvd3NpbmcgY29udGV4dHMgbmV2ZXIgcmVjZWl2ZSBhbiBldmVudC4KKyAgICAgICAgNS4gVW5s
ZXNzIGRlZmF1bHQgaXMgcHJldmVudGVkLCB0cnkgdG8gY2FsbCBkZWZhdWx0IGV2ZW50IGhhbmRs
ZXIKKyAgICAgICAgICAgc3RhcnRpbmcgZnJvbSB0aGUgYm90dG9tIG5vZGUgb2YgYW5jZXN0b3Jz
IHVudGlsIGEgZGVmYXVsdCBpcworICAgICAgICAgICBoYW5kbGVkLgorCisgICAgICAgIEV4YW1w
bGU6ICBTdXBwb3NlIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBIVE1MIGFuZCBuZXN0ZWQgc2VhbWxl
c3MgaWZyYW1lcy4gVGhlcmUgYXJlIHRocmVlIGJyb3dzaW5nIGNvbnRleHRzLgorCisgICAgICAg
IDEpIGRvYy5odG1sOgorICAgICAgICAgICA8QT4KKyAgICAgICAgICAgICAgPEI+CisgICAgICAg
ICAgICAgICAgPGlmcmFtZSBpZD1DIHNlYW1sZXNzIHNyYz0iaWZyYW1lMS5odG1sIj4KKworICAg
ICAgICAyKSBpZnJhbWUxLmh0bWw6CisgICAgICAgICAgIDxEPgorICAgICAgICAgICAgICA8RT4K
KyAgICAgICAgICAgICAgICA8aWZyYW1lIGlkPUYgc2VhbWxlc3Mgc3JjPSJpZnJhbWUyLmh0bWwi
PgorCisgICAgICAgIDMpIGlmcmFtZTIuaHRtbDoKKyAgICAgICAgICAgPEc+CisgICAgICAgICAg
ICAgIDxIPgorCisgICAgICAgIElmIGEgY2xpY2snIGV2ZW50IGlzIGZpcmVkIG9uIG5vZGUgRiwg
d2Ugd2lsbCBkaXNwYXRjaCBldmVudHMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKyAgICAgICAg
ICAxLiBBIChAY2FwdHVyZSkgKHRhcmdldCA9PSBDKQorICAgICAgICAgIDIuIEIgKEBjYXB0dXJl
KSAodGFyZ2V0ID09IEMpCisgICAgICAgICAgMy4gRCAoQGNhcHR1cmUpICh0YXJnZXQgPT0gRikK
KyAgICAgICAgICA0LiBFIChAY2FwdHVyZSkgKHRhcmdldCA9PSBGKQorICAgICAgICAgIDUuIEcg
KEBjYXB0dXJlKSAodGFyZ2V0ID09IEgpCisgICAgICAgICAgNi4gSCAoQHRhcmdldCkgICh0YXJn
ZXQgPT0gSCkKKyAgICAgICAgICA3LiBHIChAYnViYmxlKSAgKHRhcmdldCA9PSBIKQorICAgICAg
ICAgIDguIEYgKEB0YXJnZXQpICAodGFyZ2V0ID09IEYpCisgICAgICAgICAgOS4gRSAoQGJ1YmJs
ZSkgICh0YXJnZXQgPT0gRikKKyAgICAgICAgICA5LiBEIChAYnViYmxlKSAgKHRhcmdldCA9PSBG
KQorICAgICAgICAgMTAuIEMgKEB0YXJnZXQpICAodGFyZ2V0ID09IEMpCisgICAgICAgICAxMS4g
QiAoYnViYmxlKSAgICh0YXJnZXQgPT0gQykKKyAgICAgICAgIDEyLiBBIChidWJibGUpICAgKHRh
cmdldCA9PSBDKQorCisgICAgICAgIFRlc3Q6IGZhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1sZXNz
LWV2ZW50cy5odG1sCisKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAg
ICAgKEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoUGVyRnJhbWVEaXNwYXRjaGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1lRGlz
cGF0Y2hlcjo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6OmV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1lRGlzcGF0Y2hlcjo6c2hvdWxkQ29udGlu
dWVUb1BhcmVudERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1lRGlzcGF0Y2hl
cjo6YWRqdXN0UmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3Bh
dGNoZXI6OlBlckZyYW1lRGlzcGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURp
c3BhdGNoZXI6OmNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZXJGcmFtZURpc3BhdGNoZXI6OndpbGxEaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBlckZyYW1lRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRUYXJn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50
QXRCdWJibGluZyk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNoZXI6OmRpc3Bh
dGNoRXZlbnRQb3N0UHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3BhdGNo
ZXI6OmRpc3BhdGNoRXZlbnREZWZhdWx0SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQZXJG
cmFtZURpc3BhdGNoZXI6OnJlc2V0VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlckZyYW1l
RGlzcGF0Y2hlcjo6dG9wRXZlbnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmV2ZW50U2hv
dWxkQmVTdG9wcGVkQXRCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpQZXJGcmFtZURpc3Bh
dGNoZXI6OmRldGVybWluZURpc3BhdGNoQmVoYXZpb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2spOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxk
UHJvcGFnYXRlRXZlbnRBY3Jvc3NTZWFtbGVzc0lGcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnREaXNwYXRjaGVyOjpwcmVwYXJlRXZlbnREaXNwYXRjaGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnREaXNwYXRjaGVyOjpmaXJlRGlzcGF0Y2hlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnREaXNwYXRjaGVyOjpmaXJlRGlzcGF0Y2hlcnNQb3N0UHJvY2Vzcyk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmZpcmVEaXNwYXRjaGVyc0RlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoRXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
RGlzcGF0Y2hlcjo6bm9kZSk6CisKIDIwMTItMTAtMTUgIE1pa2UgV2VzdCAgPG1rd3N0QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBXYXJuIHdoZW4gQ1NQIGhlYWRlcnMgZG9uJ3Qgc2VwYXJhdGUg
ZGlyZWN0aXZlcyB3aXRoICc7Jy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAK
aW5kZXggYjNjNjM5YWM4MzQ2MzYwNWI0NWJiNzNmMGRhNGJjM2NmOGM0NWQwYi4uNTQ5MGZkOWVi
ZDgzYTA3OTlhODAxZjE2MThmMjMyZTkxMjMxMzIyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
RGlzcGF0Y2hlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJFdmVudENvbnRleHQu
aCIKICNpbmNsdWRlICJFdmVudERpc3BhdGNoTWVkaWF0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKKyNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRp
YUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oIgpAQCAtNTAsNiArNTEsNjggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitlbnVtIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciB7CisgICAgUmV0YXJnZXRFdmVu
dCwKKyAgICBTdGF5SW5zaWRlU2hhZG93RE9NCit9OworCitlbnVtIEV2ZW50RGlzcGF0Y2hDb250
aW51YXRpb24geworICAgIENvbnRpbnVlRGlzcGF0Y2hpbmcsCisgICAgRG9uZURpc3BhdGNoaW5n
Cit9OworCitlbnVtIEV2ZW50QW5jZXN0b3JDb250aW51YXRpb24geworICAgIEV2ZW50QW5jZXN0
b3JTdG9wLAorICAgIEV2ZW50QW5jZXN0b3JDb250aW51ZVRvUGFyZW50Cit9OworCitjbGFzcyBF
dmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlciB7CitwdWJsaWM6CisgICAgRXZlbnRSZWxhdGVkVGFy
Z2V0QWRqdXN0ZXIoUGFzc1JlZlB0cjxOb2RlPiwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFy
Z2V0KTsKKyAgICB2b2lkIGFkanVzdChWZWN0b3I8RXZlbnRDb250ZXh0PiYpOworcHJpdmF0ZToK
KyAgICB0eXBlZGVmIEhhc2hNYXA8VHJlZVNjb3BlKiwgRXZlbnRUYXJnZXQqPiBSZWxhdGVkVGFy
Z2V0TWFwOworICAgIEV2ZW50VGFyZ2V0KiBmaW5kUmVsYXRlZFRhcmdldChUcmVlU2NvcGUqKTsK
KworICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgUmVmUHRyPE5vZGU+IG1fcmVsYXRlZFRh
cmdldDsKKyAgICBSZWxhdGVkVGFyZ2V0TWFwIG1fcmVsYXRlZFRhcmdldE1hcDsKK307CisKK2Ns
YXNzIFBlckZyYW1lRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgUGVyRnJhbWVEaXNwYXRjaGVy
KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBhZGp1c3RSZWxhdGVkVGFyZ2V0
KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpOworCisgICAgTm9kZSog
bm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQorICAgIGNvbnN0IEV2ZW50KiBl
dmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnQuZ2V0KCk7IH0KKworICAgIGJvb2wgc2hvdWxk
Q29udGludWVUb1BhcmVudERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmVudEFuY2VzdG9y
Q29udGludWF0aW9uID09IEV2ZW50QW5jZXN0b3JDb250aW51ZVRvUGFyZW50OyB9CisKKyAgICBF
dmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZlbnRQcmVQcm9jZXNzKCk7CisgICAg
RXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoKTsKKyAg
ICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZlbnRBdFRhcmdldCgpOworICAg
IEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcoKTsKKyAg
ICB2b2lkIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcygpOworICAgIHZvaWQgZGlzcGF0Y2hFdmVu
dERlZmF1bHRIYW5kbGVyKCk7CisKKyAgICB2b2lkIHJlc2V0VGFyZ2V0KCk7CisgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxEaXNwYXRjaEV2ZW50KCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIGRldGVybWluZURpc3BhdGNoQmVoYXZp
b3IoU2hhZG93Um9vdCosIEV2ZW50VGFyZ2V0Kik7CisgICAgY29uc3QgRXZlbnRDb250ZXh0KiB0
b3BFdmVudENvbnRleHQoKTsKKyAgICBFdmVudEFuY2VzdG9yQ29udGludWF0aW9uIGNhbHVjdWxh
dGVFdmVudEFuY2VzdG9ycygpOworCisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQ
dHI8RXZlbnQ+IG1fZXZlbnQ7CisgICAgVmVjdG9yPEV2ZW50Q29udGV4dD4gbV9hbmNlc3RvcnM7
CisgICAgRXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbiBtX2V2ZW50QW5jZXN0b3JDb250aW51YXRp
b247CisgICAgUmVmUHRyPEZyYW1lVmlldz4gbV92aWV3OworICAgIFdpbmRvd0V2ZW50Q29udGV4
dCBtX3dpbmRvd0V2ZW50Q29udGV4dDsKKyAgICB2b2lkKiBtX3ByZURpc3BhdGNoRXZlbnRIYW5k
bGVyUmVzdWx0OworfTsKKwogc3RhdGljIEhhc2hTZXQ8Tm9kZSo+KiBnTm9kZXNEaXNwYXRjaGlu
Z1NpbXVsYXRlZENsaWNrcyA9IDA7CiAKIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpFdmVu
dFJlbGF0ZWRUYXJnZXRBZGp1c3RlcihQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFBhc3NSZWZQdHI8
Tm9kZT4gcmVsYXRlZFRhcmdldCkKQEAgLTExOSwxNCArMTgyLDYgQEAgRXZlbnRUYXJnZXQqIEV2
ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRlZFRhcmdldChUcmVlU2NvcGUqIHNj
b3BlKQogICAgIHJldHVybiByZWxhdGVkVGFyZ2V0OwogfQogCi1ib29sIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRp
YXRvcj4gbWVkaWF0b3IpCi17Ci0gICAgQVNTRVJUKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246
OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLQotICAgIEV2ZW50RGlzcGF0Y2hlciBkaXNw
YXRjaGVyKG5vZGUpOwotICAgIHJldHVybiBtZWRpYXRvci0+ZGlzcGF0Y2hFdmVudCgmZGlzcGF0
Y2hlcik7Ci19Ci0KIGlubGluZSBzdGF0aWMgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0UmVzcGVj
dGluZ1NWR1RhcmdldFJ1bGVzKE5vZGUqIHJlZmVyZW5jZU5vZGUpCiB7CiAgICAgQVNTRVJUKHJl
ZmVyZW5jZU5vZGUpOwpAQCAtMTQ5LDcgKzIwNCw3IEBAIGlubGluZSBzdGF0aWMgRXZlbnRUYXJn
ZXQqIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKE5vZGUqIHJlZmVyZW5jZU5v
CiAgICAgcmV0dXJuIHJlZmVyZW5jZU5vZGU7CiB9CiAKLXZvaWQgRXZlbnREaXNwYXRjaGVyOjph
ZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiBldmVudCwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4g
cHJwUmVsYXRlZFRhcmdldCkKK3ZvaWQgUGVyRnJhbWVEaXNwYXRjaGVyOjphZGp1c3RSZWxhdGVk
VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCiB7CiAgICAg
aWYgKCFwcnBSZWxhdGVkVGFyZ2V0KQogICAgICAgICByZXR1cm47CkBAIC0xNTgsMjYgKzIxMywy
OCBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCogZXZl
bnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1f
bm9kZS5nZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVuc3VyZUV2ZW50QW5jZXN0b3JzKGV2
ZW50KTsKKyAgICBpZiAobV9hbmNlc3RvcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAg
ICAgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIobV9ub2RlLCByZWxhdGVkVGFyZ2V0LnJlbGVh
c2UoKSkuYWRqdXN0KG1fYW5jZXN0b3JzKTsKIH0KIAotRXZlbnREaXNwYXRjaGVyOjpFdmVudERp
c3BhdGNoZXIoTm9kZSogbm9kZSkKK1BlckZyYW1lRGlzcGF0Y2hlcjo6UGVyRnJhbWVEaXNwYXRj
aGVyKE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIDogbV9ub2RlKG5v
ZGUpCi0gICAgLCBtX2FuY2VzdG9yc0luaXRpYWxpemVkKGZhbHNlKQotI2lmbmRlZiBOREVCVUcK
LSAgICAsIG1fZXZlbnREaXNwYXRjaGVkKGZhbHNlKQotI2VuZGlmCisgICAgLCBtX2V2ZW50KGV2
ZW50KQorICAgICwgbV9hbmNlc3RvcnMoKQorICAgICwgbV9ldmVudEFuY2VzdG9yQ29udGludWF0
aW9uKGNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycygpKQorICAgICwgbV92aWV3KG1fbm9kZS0+ZG9j
dW1lbnQoKS0+dmlldygpKQorICAgICwgbV93aW5kb3dFdmVudENvbnRleHQobV9ldmVudC5nZXQo
KSwgbV9ub2RlLmdldCgpLCB0b3BFdmVudENvbnRleHQoKSkKKyAgICAsIG1fcHJlRGlzcGF0Y2hF
dmVudEhhbmRsZXJSZXN1bHQoMCkKIHsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgbV92aWV3ID0g
bm9kZS0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIEFTU0VSVChtX25vZGUpOworICAgIEFTU0VS
VCghbV9ldmVudC0+dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBjb2RlIGNhbiBjcmVh
dGUgYW4gZXZlbnQgd2l0aCBhbiBlbXB0eSBuYW1lLCBidXQgbm90IG51bGwuCisgICAgbV9ldmVu
dC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9kZS5n
ZXQoKSkpOwogfQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJlRXZlbnRBbmNlc3RvcnMo
RXZlbnQqIGV2ZW50KQorRXZlbnRBbmNlc3RvckNvbnRpbnVhdGlvbiBQZXJGcmFtZURpc3BhdGNo
ZXI6OmNhbHVjdWxhdGVFdmVudEFuY2VzdG9ycygpCiB7Ci0gICAgaWYgKG1fYW5jZXN0b3JzSW5p
dGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2FuY2VzdG9yc0luaXRpYWxpemVkID0g
dHJ1ZTsKKyAgICBBU1NFUlQobV9hbmNlc3RvcnMuaXNFbXB0eSgpKTsKICAgICBib29sIGluRG9j
dW1lbnQgPSBtX25vZGUtPmluRG9jdW1lbnQoKTsKICAgICBib29sIGlzU1ZHRWxlbWVudCA9IG1f
bm9kZS0+aXNTVkdFbGVtZW50KCk7CiAgICAgVmVjdG9yPEV2ZW50VGFyZ2V0Kj4gdGFyZ2V0U3Rh
Y2s7CkBAIC0xODksMTc3ICsyNDYsMTI1IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjplbnN1cmVF
dmVudEFuY2VzdG9ycyhFdmVudCogZXZlbnQpCiAgICAgICAgICAgICB0YXJnZXRTdGFjay5hcHBl
bmQodGFyZ2V0U3RhY2subGFzdCgpKTsKICAgICAgICAgbV9hbmNlc3RvcnMuYXBwZW5kKEV2ZW50
Q29udGV4dChub2RlLCBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhub2RlKSwg
dGFyZ2V0U3RhY2subGFzdCgpKSk7CiAgICAgICAgIGlmICghaW5Eb2N1bWVudCkKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBFdmVudEFuY2VzdG9yU3RvcDsKICAgICAg
ICAgaWYgKCFub2RlLT5pc1NoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBpZiAoZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihldmVudCwgdG9TaGFkb3dSb290KG5v
ZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpID09IFN0YXlJbnNpZGVTaGFkb3dET00pCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmIChkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKHRvU2hh
ZG93Um9vdChub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSA9PSBTdGF5SW5zaWRlU2hhZG93RE9N
KQorICAgICAgICAgICAgcmV0dXJuIEV2ZW50QW5jZXN0b3JTdG9wOwogICAgICAgICBpZiAoIWlz
U1ZHRWxlbWVudCkgewogICAgICAgICAgICAgQVNTRVJUKCF0YXJnZXRTdGFjay5pc0VtcHR5KCkp
OwogICAgICAgICAgICAgdGFyZ2V0U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICB9CiAgICAg
fQorICAgIHJldHVybiBFdmVudEFuY2VzdG9yQ29udGludWVUb1BhcmVudDsKIH0KIAotdm9pZCBF
dmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0
cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+IG1lZGlhdG9yKQotewotICAgIC8vIFdlIG5lZWQgdG8g
c2V0IHRoZSB0YXJnZXQgaGVyZSBiZWNhdXNlIGl0IGNhbiBnbyBhd2F5IGJ5IHRoZSB0aW1lIHdl
IGFjdHVhbGx5IGZpcmUgdGhlIGV2ZW50LgotICAgIG1lZGlhdG9yLT5ldmVudCgpLT5zZXRUYXJn
ZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobm9kZSkpOwotICAgIFNjb3Bl
ZEV2ZW50UXVldWU6Omluc3RhbmNlKCktPmVucXVldWVFdmVudERpc3BhdGNoTWVkaWF0b3IobWVk
aWF0b3IpOwotfQotCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTaW11bGF0ZWRDbGlj
ayhOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2Vu
ZE1vdXNlRXZlbnRzLCBib29sIHNob3dQcmVzc2VkTG9vaykKLXsKLSAgICBpZiAobm9kZS0+ZGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFnTm9kZXNEaXNwYXRjaGluZ1Np
bXVsYXRlZENsaWNrcykKLSAgICAgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3Mg
PSBuZXcgSGFzaFNldDxOb2RlKj47Ci0gICAgZWxzZSBpZiAoZ05vZGVzRGlzcGF0Y2hpbmdTaW11
bGF0ZWRDbGlja3MtPmNvbnRhaW5zKG5vZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnTm9k
ZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcy0+YWRkKG5vZGUpOwotCi0gICAgLy8gc2VuZCBt
b3VzZWRvd24gYW5kIG1vdXNldXAgYmVmb3JlIHRoZSBjbGljaywgaWYgcmVxdWVzdGVkCi0gICAg
aWYgKHNlbmRNb3VzZUV2ZW50cykKLSAgICAgICAgRXZlbnREaXNwYXRjaGVyKG5vZGUpLmRpc3Bh
dGNoRXZlbnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5tb3VzZWRv
d25FdmVudCwgbm9kZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwgdW5kZXJseWluZ0V2ZW50
KSk7Ci0gICAgbm9kZS0+c2V0QWN0aXZlKHRydWUsIHNob3dQcmVzc2VkTG9vayk7Ci0gICAgaWYg
KHNlbmRNb3VzZUV2ZW50cykKLSAgICAgICAgRXZlbnREaXNwYXRjaGVyKG5vZGUpLmRpc3BhdGNo
RXZlbnQoU2ltdWxhdGVkTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZl
bnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkpOwot
ICAgIG5vZGUtPnNldEFjdGl2ZShmYWxzZSk7Ci0KLSAgICAvLyBhbHdheXMgc2VuZCBjbGljawot
ICAgIEV2ZW50RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgbm9kZS0+ZG9jdW1lbnQoKS0+ZGVm
YXVsdFZpZXcoKSwgdW5kZXJseWluZ0V2ZW50KSk7Ci0KLSAgICBnTm9kZXNEaXNwYXRjaGluZ1Np
bXVsYXRlZENsaWNrcy0+cmVtb3ZlKG5vZGUpOwotfQotCi1ib29sIEV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSBQZXJGcmFtZURpc3BhdGNoZXI6OndpbGxEaXNwYXRjaEV2ZW50KCkg
Y29uc3QKIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgQVNTRVJUKCFtX2V2ZW50RGlzcGF0Y2hlZCk7
Ci0gICAgbV9ldmVudERpc3BhdGNoZWQgPSB0cnVlOwotI2VuZGlmCi0gICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IHBycEV2ZW50OwotICAgIENoaWxkTm9kZXNMYXp5U25hcHNob3Q6OnRha2VDaGls
ZE5vZGVzTGF6eVNuYXBzaG90KCk7Ci0KLSAgICBldmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0
UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOwotICAgIEFTU0VSVCghTm9F
dmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0gICAg
QVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7Ci0gICAgQVNTRVJUKCFldmVudC0+dHlwZSgpLmlzTnVs
bCgpKTsgLy8gSmF2YVNjcmlwdCBjb2RlIGNhbiBjcmVhdGUgYW4gZXZlbnQgd2l0aCBhbiBlbXB0
eSBuYW1lLCBidXQgbm90IG51bGwuCi0gICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQuZ2V0
KCkpOwotICAgIFdpbmRvd0V2ZW50Q29udGV4dCB3aW5kb3dFdmVudENvbnRleHQoZXZlbnQuZ2V0
KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZlbnRDb250ZXh0KCkpOwotICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxE
aXNwYXRjaEV2ZW50KG1fbm9kZS0+ZG9jdW1lbnQoKSwgKmV2ZW50LCB3aW5kb3dFdmVudENvbnRl
eHQud2luZG93KCksIG1fbm9kZS5nZXQoKSwgbV9hbmNlc3RvcnMpOwotCi0gICAgdm9pZCogcHJl
RGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQ7Ci0gICAgaWYgKGRpc3BhdGNoRXZlbnRQcmVQcm9j
ZXNzKGV2ZW50LCBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCkgPT0gQ29udGludWVEaXNw
YXRjaGluZykKLSAgICAgICAgaWYgKGRpc3BhdGNoRXZlbnRBdENhcHR1cmluZyhldmVudCwgd2lu
ZG93RXZlbnRDb250ZXh0KSA9PSBDb250aW51ZURpc3BhdGNoaW5nKQotICAgICAgICAgICAgaWYg
KGRpc3BhdGNoRXZlbnRBdFRhcmdldChldmVudCkgPT0gQ29udGludWVEaXNwYXRjaGluZykKLSAg
ICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50QXRCdWJibGluZyhldmVudCwgd2luZG93RXZlbnRD
b250ZXh0KTsKLSAgICBkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoZXZlbnQsIHByZURpc3BhdGNo
RXZlbnRIYW5kbGVyUmVzdWx0KTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IGFmdGVyIGV2ZW50IGRp
c3BhdGNoLCB0aGUgZXZlbnQncyB0YXJnZXQgb2JqZWN0IGlzIHRoZQotICAgIC8vIG91dGVybW9z
dCBzaGFkb3cgRE9NIGJvdW5kYXJ5LgotICAgIGV2ZW50LT5zZXRUYXJnZXQod2luZG93RXZlbnRD
b250ZXh0LnRhcmdldCgpKTsKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCgwKTsKLSAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnQoY29va2llKTsKLQotICAg
IHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICByZXR1cm4gSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudChtX25vZGUtPmRvY3VtZW50KCksICpt
X2V2ZW50LCBtX3dpbmRvd0V2ZW50Q29udGV4dC53aW5kb3coKSwgbV9ub2RlLmdldCgpLCBtX2Fu
Y2VzdG9ycyk7CiB9CiAKLWlubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQs
IHZvaWQqJiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCkKK2lubGluZSBFdmVudERpc3Bh
dGNoQ29udGludWF0aW9uIFBlckZyYW1lRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFByZVByb2Nl
c3MoKQogewogICAgIC8vIEdpdmUgdGhlIHRhcmdldCBub2RlIGEgY2hhbmNlIHRvIGRvIHNvbWUg
d29yayBiZWZvcmUgRE9NIGV2ZW50IGhhbmRsZXJzIGdldCBhIGNyYWNrLgotICAgIHByZURpc3Bh
dGNoRXZlbnRIYW5kbGVyUmVzdWx0ID0gbV9ub2RlLT5wcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihl
dmVudC5nZXQoKSk7Ci0gICAgcmV0dXJuIChtX2FuY2VzdG9ycy5pc0VtcHR5KCkgfHwgZXZlbnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpKSA/IERvbmVEaXNwYXRjaGluZyA6IENvbnRpbnVlRGlzcGF0
Y2hpbmc7CisgICAgbV9wcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCA9IG1fbm9kZS0+cHJl
RGlzcGF0Y2hFdmVudEhhbmRsZXIobV9ldmVudC5nZXQoKSk7CisgICAgcmV0dXJuIChtX2FuY2Vz
dG9ycy5pc0VtcHR5KCkgfHwgbV9ldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpID8gRG9uZURp
c3BhdGNoaW5nIDogQ29udGludWVEaXNwYXRjaGluZzsKIH0KIAotaW5saW5lIEV2ZW50RGlzcGF0
Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmco
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFdpbmRvd0V2ZW50Q29udGV4dCYgd2luZG93RXZlbnRD
b250ZXh0KQoraW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gUGVyRnJhbWVEaXNwYXRj
aGVyOjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoKQogewogICAgIC8vIFRyaWdnZXIgY2FwdHVy
aW5nIGV2ZW50IGhhbmRsZXJzLCBzdGFydGluZyBhdCB0aGUgdG9wIGFuZCB3b3JraW5nIG91ciB3
YXkgZG93bi4KLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNF
KTsKKyAgICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOwog
Ci0gICAgaWYgKHdpbmRvd0V2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQo
KSkgJiYgZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgIGlmIChtX3dpbmRvd0V2ZW50
Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhtX2V2ZW50LmdldCgpKSAmJiBtX2V2ZW50LT5wcm9w
YWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgcmV0dXJuIERvbmVEaXNwYXRjaGluZzsKIAogICAg
IGZvciAoc2l6ZV90IGkgPSBtX2FuY2VzdG9ycy5zaXplKCkgLSAxOyBpID4gMDsgLS1pKSB7CiAg
ICAgICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaV07
CiAgICAgICAgIGlmIChldmVudENvbnRleHQuY3VycmVudFRhcmdldFNhbWVBc1RhcmdldCgpKSB7
Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPmJ1YmJsZXMoKSkKKyAgICAgICAgICAgIGlmIChtX2V2
ZW50LT5idWJibGVzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBl
dmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICAgICAgICAgIG1fZXZl
bnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CiAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7Ci0g
ICAgICAgIGV2ZW50Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7Ci0gICAg
ICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgICAgICAgICBtX2V2ZW50
LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOworICAgICAgICBldmVudENv
bnRleHQuaGFuZGxlTG9jYWxFdmVudHMobV9ldmVudC5nZXQoKSk7CisgICAgICAgIGlmIChtX2V2
ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgICAgIHJldHVybiBEb25lRGlzcGF0
Y2hpbmc7CiAgICAgfQogCiAgICAgcmV0dXJuIENvbnRpbnVlRGlzcGF0Y2hpbmc7CiB9CiAKLWlu
bGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hF
dmVudEF0VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQoraW5saW5lIEV2ZW50RGlzcGF0
Y2hDb250aW51YXRpb24gUGVyRnJhbWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRUYXJnZXQo
KQogewotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwotICAgIG1f
YW5jZXN0b3JzWzBdLmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKLSAgICByZXR1cm4g
ZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpID8gRG9uZURpc3BhdGNoaW5nIDogQ29udGludWVE
aXNwYXRjaGluZzsKKyAgICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQp
OworICAgIG1fYW5jZXN0b3JzWzBdLmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpOwor
ICAgIHJldHVybiBtX2V2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSA/IERvbmVEaXNwYXRjaGlu
ZyA6IENvbnRpbnVlRGlzcGF0Y2hpbmc7CiB9CiAKLWlubGluZSBFdmVudERpc3BhdGNoQ29udGlu
dWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcoUGFzc1JlZlB0
cjxFdmVudD4gZXZlbnQsIFdpbmRvd0V2ZW50Q29udGV4dCYgd2luZG93Q29udGV4dCkKK2lubGlu
ZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIFBlckZyYW1lRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hF
dmVudEF0QnViYmxpbmcoKQogewotICAgIGlmIChldmVudC0+YnViYmxlcygpICYmICFldmVudC0+
Y2FuY2VsQnViYmxlKCkpIHsKKyAgICBpZiAobV9ldmVudC0+YnViYmxlcygpICYmICFtX2V2ZW50
LT5jYW5jZWxCdWJibGUoKSkgewogICAgICAgICAvLyBUcmlnZ2VyIGJ1YmJsaW5nIGV2ZW50IGhh
bmRsZXJzLCBzdGFydGluZyBhdCB0aGUgYm90dG9tIGFuZCB3b3JraW5nIG91ciB3YXkgdXAuCi0g
ICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CisgICAg
ICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKIAogICAg
ICAgICBzaXplX3Qgc2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUoKTsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEV2ZW50Q29udGV4
dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaV07CiAgICAgICAgICAgICBpZiAoZXZlbnRD
b250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkKLSAgICAgICAgICAgICAgICBldmVu
dC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICAgICAgICAgICAgICBtX2V2
ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFT
RSk7Ci0gICAgICAgICAgICBldmVudENvbnRleHQuaGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0
KCkpOwotICAgICAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCBldmVu
dC0+Y2FuY2VsQnViYmxlKCkpCisgICAgICAgICAgICAgICAgbV9ldmVudC0+c2V0RXZlbnRQaGFz
ZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOworICAgICAgICAgICAgZXZlbnRDb250ZXh0LmhhbmRs
ZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpOworICAgICAgICAgICAgaWYgKG1fZXZlbnQtPnBy
b3BhZ2F0aW9uU3RvcHBlZCgpIHx8IG1fZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBEb25lRGlzcGF0Y2hpbmc7CiAgICAgICAgIH0KLSAgICAgICAgd2luZG93
Q29udGV4dC5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7CisgICAgICAgIG1fd2luZG93
RXZlbnRDb250ZXh0LmhhbmRsZUxvY2FsRXZlbnRzKG1fZXZlbnQuZ2V0KCkpOwogICAgIH0KICAg
ICByZXR1cm4gQ29udGludWVEaXNwYXRjaGluZzsKIH0KIAotaW5saW5lIHZvaWQgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQs
IHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KQoraW5saW5lIHZvaWQgUGVyRnJh
bWVEaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoKQogewotICAgIGV2ZW50LT5z
ZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMobV9ub2RlLmdldCgp
KSk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7Ci0gICAgZXZlbnQtPnNldEV2ZW50
UGhhc2UoMCk7Ci0KKyAgICBtX2V2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5n
U1ZHVGFyZ2V0UnVsZXMobV9ub2RlLmdldCgpKSk7CisgICAgbV9ldmVudC0+c2V0Q3VycmVudFRh
cmdldCgwKTsKKyAgICBtX2V2ZW50LT5zZXRFdmVudFBoYXNlKDApOwogICAgIC8vIFBhc3MgdGhl
IGRhdGEgZnJvbSB0aGUgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIgdG8gdGhlIHBvc3REaXNwYXRj
aEV2ZW50SGFuZGxlci4KLSAgICBtX25vZGUtPnBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcihldmVu
dC5nZXQoKSwgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOworICAgIG1fbm9kZS0+cG9z
dERpc3BhdGNoRXZlbnRIYW5kbGVyKG1fZXZlbnQuZ2V0KCksIG1fcHJlRGlzcGF0Y2hFdmVudEhh
bmRsZXJSZXN1bHQpOworfQogCitpbmxpbmUgdm9pZCBQZXJGcmFtZURpc3BhdGNoZXI6OmRpc3Bh
dGNoRXZlbnREZWZhdWx0SGFuZGxlcigpCit7CiAgICAgLy8gQ2FsbCBkZWZhdWx0IGV2ZW50IGhh
bmRsZXJzLiBXaGlsZSB0aGUgRE9NIGRvZXMgaGF2ZSBhIGNvbmNlcHQgb2YgcHJldmVudGluZwog
ICAgIC8vIGRlZmF1bHQgaGFuZGxpbmcsIHRoZSBkZXRhaWwgb2Ygd2hpY2ggaGFuZGxlcnMgYXJl
IGNhbGxlZCBpcyBhbiBpbnRlcm5hbAogICAgIC8vIGltcGxlbWVudGF0aW9uIGRldGFpbCBhbmQg
bm90IHBhcnQgb2YgdGhlIERPTS4KLSAgICBpZiAoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkg
JiYgIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKSB7CisgICAgaWYgKCFtX2V2ZW50LT5kZWZhdWx0
UHJldmVudGVkKCkgJiYgIW1fZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpIHsKICAgICAgICAgLy8g
Tm9uLWJ1YmJsaW5nIGV2ZW50cyBjYWxsIG9ubHkgb25lIGRlZmF1bHQgZXZlbnQgaGFuZGxlciwg
dGhlIG9uZSBmb3IgdGhlIHRhcmdldC4KLSAgICAgICAgbV9ub2RlLT5kZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50LmdldCgpKTsKLSAgICAgICAgQVNTRVJUKCFldmVudC0+ZGVmYXVsdFByZXZlbnRl
ZCgpKTsKLSAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICBtX25v
ZGUtPmRlZmF1bHRFdmVudEhhbmRsZXIobV9ldmVudC5nZXQoKSk7CisgICAgICAgIEFTU0VSVCgh
bV9ldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpKTsKKyAgICAgICAgaWYgKG1fZXZlbnQtPmRlZmF1
bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIEZvciBidWJibGlu
ZyBldmVudHMsIGNhbGwgZGVmYXVsdCBldmVudCBoYW5kbGVycyBvbiB0aGUgc2FtZSB0YXJnZXRz
IGluIHRoZQogICAgICAgICAvLyBzYW1lIG9yZGVyIGFzIHRoZSBidWJibGluZyBwaGFzZS4KLSAg
ICAgICAgaWYgKGV2ZW50LT5idWJibGVzKCkpIHsKKyAgICAgICAgaWYgKG1fZXZlbnQtPmJ1YmJs
ZXMoKSkgewogICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBtX2FuY2VzdG9ycy5zaXplKCk7CiAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAg
ICAgICAgIG1fYW5jZXN0b3JzW2ldLm5vZGUoKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudC5n
ZXQoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgp
KTsKLSAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAg
ICAgICAgICAgbV9hbmNlc3RvcnNbaV0ubm9kZSgpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKG1fZXZl
bnQuZ2V0KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9ldmVudC0+ZGVmYXVsdFByZXZl
bnRlZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQogfQogCi1jb25zdCBFdmVudENvbnRleHQqIEV2ZW50RGlzcGF0Y2hlcjo6dG9wRXZlbnRD
b250ZXh0KCkKK2lubGluZSB2b2lkIFBlckZyYW1lRGlzcGF0Y2hlcjo6cmVzZXRUYXJnZXQoKQor
eworICAgIG1fZXZlbnQtPnNldFRhcmdldChtX3dpbmRvd0V2ZW50Q29udGV4dC50YXJnZXQoKSk7
CisgICAgbV9ldmVudC0+c2V0Q3VycmVudFRhcmdldCgwKTsKK30KKworaW5saW5lIGNvbnN0IEV2
ZW50Q29udGV4dCogUGVyRnJhbWVEaXNwYXRjaGVyOjp0b3BFdmVudENvbnRleHQoKQogewogICAg
IHJldHVybiBtX2FuY2VzdG9ycy5pc0VtcHR5KCkgPyAwIDogJm1fYW5jZXN0b3JzLmxhc3QoKTsK
IH0KQEAgLTM2OSw3ICszNzQsMjQgQEAgc3RhdGljIGlubGluZSBib29sIGluVGhlU2FtZVNjb3Bl
KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiAgICAgcmV0dXJu
IHRhcmdldC0+dG9Ob2RlKCkgJiYgdGFyZ2V0LT50b05vZGUoKS0+dHJlZVNjb3BlKCktPnJvb3RO
b2RlKCkgPT0gc2hhZG93Um9vdDsKIH0KIAotRXZlbnREaXNwYXRjaEJlaGF2aW9yIEV2ZW50RGlz
cGF0Y2hlcjo6ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCogZXZlbnQsIFNoYWRvd1Jv
b3QqIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCitpbmxpbmUgc3RhdGljIGJvb2wg
ZXZlbnRTaG91bGRCZVN0b3BwZWRBdEJvdW5kYXJ5KEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyBX
ZWJLaXQgbmV2ZXIgYWxsb3dlZCBzZWxlY3RzdGFydCBldmVudCB0byBjcm9zcyB0aGUgdGhlIHNo
YWRvdyBET00gYm91bmRhcnkuCisgICAgLy8gQ2hhbmdpbmcgdGhpcyBicmVha3MgZXhpc3Rpbmcg
c2l0ZXMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MjE5NSBmb3IgZGV0YWlscy4KKyAgICBjb25zdCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0g
ZXZlbnQtPnR5cGUoKTsKKyAgICByZXR1cm4gZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hYm9y
dEV2ZW50CisgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQK
KyAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50CisgICAgICAg
IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubG9hZEV2ZW50CisgICAgICAgIHx8IGV2ZW50
VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAorICAgICAgICB8fCBldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50CisgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkuc2Nyb2xsRXZlbnQKKyAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5z
ZWxlY3RFdmVudAorICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdHN0
YXJ0RXZlbnQ7Cit9CisKK2lubGluZSBFdmVudERpc3BhdGNoQmVoYXZpb3IgUGVyRnJhbWVEaXNw
YXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3Qs
IEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBF
TkFCTEUoVklERU8pCiAgICAgLy8gVmlkZW8tb25seSBmdWxsIHNjcmVlbiBpcyBhIG1vZGUgd2hl
cmUgd2UgdXNlIHRoZSBzaGFkb3cgRE9NIGFzIGFuIGltcGxlbWVudGF0aW9uCkBAIC0zODQsMjMg
KzQwNiwxNjEgQEAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIEV2ZW50RGlzcGF0Y2hlcjo6ZGV0ZXJt
aW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCogZXZlbnQsIFMKICAgICBVTlVTRURfUEFSQU0oc2hh
ZG93Um9vdCk7CiAjZW5kaWYKIAotICAgIC8vIFdlYktpdCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0
YXJ0IGV2ZW50IHRvIGNyb3NzIHRoZSB0aGUgc2hhZG93IERPTSBib3VuZGFyeS4KLSAgICAvLyBD
aGFuZ2luZyB0aGlzIGJyZWFrcyBleGlzdGluZyBzaXRlcy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMTk1IGZvciBkZXRhaWxzLgotICAgIGNv
bnN0IEF0b21pY1N0cmluZyBldmVudFR5cGUgPSBldmVudC0+dHlwZSgpOwotICAgIGlmIChpblRo
ZVNhbWVTY29wZShzaGFkb3dSb290LCB0YXJnZXQpCi0gICAgICAgICYmIChldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLmFib3J0RXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkuY2hhbmdlRXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkuZXJyb3JFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMo
KS5sb2FkRXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVz
ZXRFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNpemVF
dmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVu
dAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudAot
ICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50
KSkKKyAgICBpZiAoaW5UaGVTYW1lU2NvcGUoc2hhZG93Um9vdCwgdGFyZ2V0KSAmJiBldmVudFNo
b3VsZEJlU3RvcHBlZEF0Qm91bmRhcnkobV9ldmVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBT
dGF5SW5zaWRlU2hhZG93RE9NOwotCiAgICAgcmV0dXJuIFJldGFyZ2V0RXZlbnQ7CiB9CiAKK0V2
ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCisgICAgOiBtX25vZGUo
bm9kZSkKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2V2ZW50RGlzcGF0Y2hlZChmYWxzZSkKKyNl
bmRpZgoreworICAgIEFTU0VSVChub2RlKTsKK30KKworYm9vbCBFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoRXZlbnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+
IG1lZGlhdG9yKQoreworICAgIEV2ZW50RGlzcGF0Y2hlciBkaXNwYXRjaGVyKG5vZGUpOworICAg
IHJldHVybiBtZWRpYXRvci0+ZGlzcGF0Y2hFdmVudCgmZGlzcGF0Y2hlcik7Cit9CisKK3ZvaWQg
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNjb3BlZEV2ZW50KE5vZGUqIG5vZGUsIFBhc3NSZWZQ
dHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKK3sKKyAgICAvLyBXZSBuZWVkIHRv
IHNldCB0aGUgdGFyZ2V0IGhlcmUgYmVjYXVzZSBpdCBjYW4gZ28gYXdheSBieSB0aGUgdGltZSB3
ZSBhY3R1YWxseSBmaXJlIHRoZSBldmVudC4KKyAgICBtZWRpYXRvci0+ZXZlbnQoKS0+c2V0VGFy
Z2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKG5vZGUpKTsKKyAgICBTY29w
ZWRFdmVudFF1ZXVlOjppbnN0YW5jZSgpLT5lbnF1ZXVlRXZlbnREaXNwYXRjaE1lZGlhdG9yKG1l
ZGlhdG9yKTsKK30KKwordm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xp
Y2soTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNl
bmRNb3VzZUV2ZW50cywgYm9vbCBzaG93UHJlc3NlZExvb2spCit7CisgICAgaWYgKG5vZGUtPmRp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZ05vZGVzRGlzcGF0Y2hpbmdT
aW11bGF0ZWRDbGlja3MpCisgICAgICAgIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tz
ID0gbmV3IEhhc2hTZXQ8Tm9kZSo+OworICAgIGVsc2UgaWYgKGdOb2Rlc0Rpc3BhdGNoaW5nU2lt
dWxhdGVkQ2xpY2tzLT5jb250YWlucyhub2RlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ05v
ZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPmFkZChub2RlKTsKKworICAgIC8vIHNlbmQg
bW91c2Vkb3duIGFuZCBtb3VzZXVwIGJlZm9yZSB0aGUgY2xpY2ssIGlmIHJlcXVlc3RlZAorICAg
IGlmIChzZW5kTW91c2VFdmVudHMpCisgICAgICAgIEV2ZW50RGlzcGF0Y2hlcihub2RlKS5kaXNw
YXRjaEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVu
dCkpOworICAgIG5vZGUtPnNldEFjdGl2ZSh0cnVlLCBzaG93UHJlc3NlZExvb2spOworICAgIGlm
IChzZW5kTW91c2VFdmVudHMpCisgICAgICAgIEV2ZW50RGlzcGF0Y2hlcihub2RlKS5kaXNwYXRj
aEV2ZW50KFNpbXVsYXRlZE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubW91c2V1cEV2
ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCB1bmRlcmx5aW5nRXZlbnQpKTsK
KyAgICBub2RlLT5zZXRBY3RpdmUoZmFsc2UpOworCisgICAgLy8gYWx3YXlzIHNlbmQgY2xpY2sK
KyAgICBFdmVudERpc3BhdGNoZXIobm9kZSkuZGlzcGF0Y2hFdmVudChTaW11bGF0ZWRNb3VzZUV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRl
ZmF1bHRWaWV3KCksIHVuZGVybHlpbmdFdmVudCkpOworCisgICAgZ05vZGVzRGlzcGF0Y2hpbmdT
aW11bGF0ZWRDbGlja3MtPnJlbW92ZShub2RlKTsKK30KKworaW5saW5lIHN0YXRpYyBib29sIHNo
b3VsZFByb3BhZ2F0ZUV2ZW50QWNyb3NzU2VhbWxlc3NJRnJhbWVzKEV2ZW50KiBldmVudCkKK3sK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsKKyAgICAv
LyBGSVhNRTogU3VwcG9ydCBtb3JlIGV2ZW50cy4KKyAgICByZXR1cm4gZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5jbGlja0V2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZGJsY2xp
Y2tFdmVudDsKK30KKworaW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpwcmVwYXJlRXZlbnRE
aXNwYXRjaGVycyhQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK3sKKyAgICBBU1NFUlQobV9k
aXNwYXRjaGVycy5pc0VtcHR5KCkpOworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVu
dDsKKyAgICBOb2RlKiBub2RlID0gbV9ub2RlLmdldCgpOworICAgIGJvb2wgcHJvcGFnYXRlRXZl
bnRBY3Jvc3NTZWFtbGVzc0lGcmFtZXMgPSBzaG91bGRQcm9wYWdhdGVFdmVudEFjcm9zc1NlYW1s
ZXNzSUZyYW1lcyhldmVudC5nZXQoKSk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgbV9k
aXNwYXRjaGVycy5hcHBlbmQoYWRvcHRQdHIobmV3IFBlckZyYW1lRGlzcGF0Y2hlcihub2RlLCBl
dmVudCkpKTsKKyAgICAgICAgaWYgKCFtX2Rpc3BhdGNoZXJzLmxhc3QoKS0+c2hvdWxkQ29udGlu
dWVUb1BhcmVudERvY3VtZW50KCkgfHwgIXByb3BhZ2F0ZUV2ZW50QWNyb3NzU2VhbWxlc3NJRnJh
bWVzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBIVE1MSUZyYW1lRWxlbWVudCogcGFy
ZW50SUZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+c2VhbWxlc3NQYXJlbnRJRnJhbWUoKTsKKyAg
ICAgICAgaWYgKCFwYXJlbnRJRnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG5v
ZGUgPSBwYXJlbnRJRnJhbWU7CisgICAgICAgIGV2ZW50ID0gZXZlbnQtPmNsb25lRm9yKHBhcmVu
dElGcmFtZSk7CisgICAgfQorfQorCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRl
ZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCwgUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gcHJwUmVsYXRlZFRhcmdldCkKK3sKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZl
bnQ7CisgICAgaWYgKG1fZGlzcGF0Y2hlcnMuaXNFbXB0eSgpKQorICAgICAgICBwcmVwYXJlRXZl
bnREaXNwYXRjaGVycyhldmVudCk7CisgICAgQVNTRVJUKCFtX2Rpc3BhdGNoZXJzLmlzRW1wdHko
KSk7CisgICAgbV9kaXNwYXRjaGVycy5sYXN0KCktPmFkanVzdFJlbGF0ZWRUYXJnZXQocHJwUmVs
YXRlZFRhcmdldCk7Cit9CisKK2Jvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQoreworI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQo
IW1fZXZlbnREaXNwYXRjaGVkKTsKKyAgICBtX2V2ZW50RGlzcGF0Y2hlZCA9IHRydWU7CisjZW5k
aWYKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CisgICAgaWYgKG1fZGlzcGF0
Y2hlcnMuaXNFbXB0eSgpKQorICAgICAgICBwcmVwYXJlRXZlbnREaXNwYXRjaGVycyhldmVudCk7
CisgICAgQVNTRVJUKCFtX2Rpc3BhdGNoZXJzLmlzRW1wdHkoKSk7CisgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IG1fZGlzcGF0Y2hlcnNbMF0tPndpbGxEaXNwYXRj
aEV2ZW50KCk7CisKKyAgICBmaXJlRGlzcGF0Y2hlcnMoKTsKKyAgICBib29sIGRlZmF1bHRQcmV2
ZW50ZWQgPSBmaXJlRGlzcGF0Y2hlcnNEZWZhdWx0RXZlbnRIYW5kbGVyKCk7CisKKyAgICAvLyBF
bnN1cmUgdGhhdCBhZnRlciBldmVudCBkaXNwYXRjaCwgdGhlIGV2ZW50J3MgdGFyZ2V0IG9iamVj
dCBpcyB0aGUKKyAgICAvLyBvdXRlcm1vc3Qgc2hhZG93IERPTSBib3VuZGFyeS4KKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZGlzcGF0Y2hlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1f
ZGlzcGF0Y2hlcnNbaV0tPnJlc2V0VGFyZ2V0KCk7CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZERpc3BhdGNoRXZlbnQoY29va2llKTsKKyAgICByZXR1cm4gIWRlZmF1bHRQcmV2
ZW50ZWQ7Cit9CisKK2lubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZmlyZURpc3BhdGNoZXJz
KCkKK3sKKyAgICBBU1NFUlQoIW1fZGlzcGF0Y2hlcnMuaXNFbXB0eSgpKTsKKyAgICBzaXplX3Qg
c2l6ZSA9IG1fZGlzcGF0Y2hlcnMuc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsg
aSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKG1fZGlzcGF0Y2hlcnNbaV0tPmRpc3BhdGNoRXZl
bnRQcmVQcm9jZXNzKCkgPT0gRG9uZURpc3BhdGNoaW5nCisgICAgICAgICAgICB8fCBtX2Rpc3Bh
dGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoKSA9PSBEb25lRGlzcGF0Y2hpbmcp
IHsKKyAgICAgICAgICAgIGZpcmVEaXNwYXRjaGVyc1Bvc3RQcm9jZXNzKGkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChtX2Rpc3BhdGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50
QXRUYXJnZXQoKSA9PSBEb25lRGlzcGF0Y2hpbmcKKyAgICAgICAgICAgIHx8IG1fZGlzcGF0Y2hl
cnNbaV0tPmRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKCkgPT0gRG9uZURpc3BhdGNoaW5nKSB7Cisg
ICAgICAgICAgICBmaXJlRGlzcGF0Y2hlcnNQb3N0UHJvY2VzcyhpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2Rpc3BhdGNoZXJzW2ldLT5kaXNwYXRjaEV2ZW50
UG9zdFByb2Nlc3MoKTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6
ZmlyZURpc3BhdGNoZXJzUG9zdFByb2Nlc3MoaW50IHN0YXJ0aW5nRnJhbWUpCit7CisgICAgc2l6
ZV90IHNpemUgPSBtX2Rpc3BhdGNoZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gc3Rh
cnRpbmdGcmFtZTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbV9kaXNwYXRjaGVyc1tpXS0+ZGlz
cGF0Y2hFdmVudFBvc3RQcm9jZXNzKCk7Cit9CisKK2lubGluZSBib29sIEV2ZW50RGlzcGF0Y2hl
cjo6ZmlyZURpc3BhdGNoZXJzRGVmYXVsdEV2ZW50SGFuZGxlcigpCit7CisgICAgc2l6ZV90IHNp
emUgPSBtX2Rpc3BhdGNoZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICBjb25zdCBFdmVudCogZXZlbnQgPSBtX2Rpc3BhdGNoZXJzW2ld
LT5ldmVudCgpOworICAgICAgICBpZiAoZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBtX2Rpc3BhdGNoZXJzW2ldLT5kaXNwYXRjaEV2
ZW50RGVmYXVsdEhhbmRsZXIoKTsKKyAgICAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
KSB7CisgICAgICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghZXZlbnQtPmJ1
YmJsZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRj
aGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggNWJmZWFk
MGQwZTZjYmUwYjgwMDM0ZDQyMjVhNjBlMzI0ZGZhYzgzOS4uODg1MDgwMWVkOTVmYWIyNGExMzg0
MDYwNWJhMGNkY2ZkZTQ3MzNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApA
QCAtMjcsODUgKzI3LDQxIEBACiAjZGVmaW5lIEV2ZW50RGlzcGF0Y2hlcl9oCiAKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBFdmVudDsKLWNsYXNzIEV2ZW50Q29udGV4dDsKIGNsYXNzIEV2ZW50RGlzcGF0
Y2hNZWRpYXRvcjsKIGNsYXNzIEV2ZW50VGFyZ2V0OwotY2xhc3MgRnJhbWVWaWV3OwogY2xhc3Mg
Tm9kZTsKLWNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKLWNsYXNzIFBsYXRmb3JtTW91c2VF
dmVudDsKLWNsYXNzIFNoYWRvd1Jvb3Q7Ci1jbGFzcyBUcmVlU2NvcGU7Ci1jbGFzcyBXaW5kb3dF
dmVudENvbnRleHQ7Ci0KLWVudW0gRXZlbnREaXNwYXRjaEJlaGF2aW9yIHsKLSAgICBSZXRhcmdl
dEV2ZW50LAotICAgIFN0YXlJbnNpZGVTaGFkb3dET00KLX07Ci0KLWVudW0gRXZlbnREaXNwYXRj
aENvbnRpbnVhdGlvbiB7Ci0gICAgQ29udGludWVEaXNwYXRjaGluZywKLSAgICBEb25lRGlzcGF0
Y2hpbmcKLX07Ci0KLWNsYXNzIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyIHsKLXB1YmxpYzoK
LSAgICBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVm
UHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpOwotICAgIHZvaWQgYWRqdXN0KFZlY3RvcjxFdmVudENv
bnRleHQ+Jik7Ci1wcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxUcmVlU2NvcGUqLCBFdmVu
dFRhcmdldCo+IFJlbGF0ZWRUYXJnZXRNYXA7Ci0gICAgRXZlbnRUYXJnZXQqIGZpbmRSZWxhdGVk
VGFyZ2V0KFRyZWVTY29wZSopOwotCi0gICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKLSAgICBSZWZQ
dHI8Tm9kZT4gbV9yZWxhdGVkVGFyZ2V0OwotICAgIFJlbGF0ZWRUYXJnZXRNYXAgbV9yZWxhdGVk
VGFyZ2V0TWFwOwotfTsKK2NsYXNzIFBlckZyYW1lRGlzcGF0Y2hlcjsKIAogY2xhc3MgRXZlbnRE
aXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaEV2ZW50KE5vZGUq
LCBQYXNzUmVmUHRyPEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4pOwogICAgIHN0YXRpYyB2b2lkIGRp
c3BhdGNoU2NvcGVkRXZlbnQoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9y
Pik7Ci0KICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqLCBQYXNz
UmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29s
IHNob3dQcmVzc2VkTG9vayk7CiAKKyAgICB2b2lkIGFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1Jl
ZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQpOwogICAg
IGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgdm9pZCBhZGp1c3RS
ZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRlZFRh
cmdldCk7Ci0gICAgTm9kZSogbm9kZSgpIGNvbnN0OworICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7
IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBFdmVudERpc3BhdGNoZXIo
Tm9kZSopOworICAgIHZvaWQgcHJlcGFyZUV2ZW50RGlzcGF0Y2hlcnMoUGFzc1JlZlB0cjxFdmVu
dD4pOworICAgIHZvaWQgZmlyZURpc3BhdGNoZXJzKCk7CisgICAgdm9pZCBmaXJlRGlzcGF0Y2hl
cnNQb3N0UHJvY2VzcyhpbnQgYnJvd3NpbmdDb250ZXh0TnVtYmVyKTsKKyAgICBib29sIGZpcmVE
aXNwYXRjaGVyc0RlZmF1bHRFdmVudEhhbmRsZXIoKTsKIAotICAgIEV2ZW50RGlzcGF0Y2hCZWhh
dmlvciBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiwgU2hhZG93Um9vdCosIEV2ZW50
VGFyZ2V0Kik7Ci0KLSAgICB2b2lkIGVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50Kik7Ci0gICAg
Y29uc3QgRXZlbnRDb250ZXh0KiB0b3BFdmVudENvbnRleHQoKTsKLQotICAgIEV2ZW50RGlzcGF0
Y2hDb250aW51YXRpb24gZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MoUGFzc1JlZlB0cjxFdmVudD4s
IHZvaWQqJiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7Ci0gICAgRXZlbnREaXNwYXRj
aENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoUGFzc1JlZlB0cjxFdmVudD4s
IFdpbmRvd0V2ZW50Q29udGV4dCYpOwotICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gZGlz
cGF0Y2hFdmVudEF0VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBFdmVudERpc3BhdGNo
Q29udGludWF0aW9uIGRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKFBhc3NSZWZQdHI8RXZlbnQ+LCBX
aW5kb3dFdmVudENvbnRleHQmKTsKLSAgICB2b2lkIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcyhQ
YXNzUmVmUHRyPEV2ZW50Piwgdm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOwot
Ci0gICAgVmVjdG9yPEV2ZW50Q29udGV4dD4gbV9hbmNlc3RvcnM7CisgICAgVmVjdG9yPE93blB0
cjxQZXJGcmFtZURpc3BhdGNoZXI+ID4gbV9kaXNwYXRjaGVyczsKICAgICBSZWZQdHI8Tm9kZT4g
bV9ub2RlOwotICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1fdmlldzsKLSAgICBib29sIG1fYW5jZXN0
b3JzSW5pdGlhbGl6ZWQ7CiAjaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgbV9ldmVudERpc3BhdGNo
ZWQ7CiAjZW5kaWYKIH07CiAKLWlubGluZSBOb2RlKiBFdmVudERpc3BhdGNoZXI6Om5vZGUoKSBj
b25zdAotewotICAgIHJldHVybiBtX25vZGUuZ2V0KCk7Ci19Ci0KIH0KIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggODBmY2I3MzM5ODUxYjBkYjFiM2MxM2FiODNjNTMwZmM2YTQzZTY1Mi4uZThkYmFiNGZiYjJm
NWNlZGI2ZGI5YjdiMWUzNDczNGMxNmI2ZGU3NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEy
LTEwLTE1ICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBTdXBw
b3J0IGFuIGV2ZW50IHByb3BhZ2F0aW9uIGFjcm9zcyBzZWFtbGVzcyBpZnJhbWVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyOTAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZnJhbWVzL3Nl
YW1sZXNzL3Jlc291cmNlcy9maXJlLWV2ZW50cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1ldmVudHMuaHRtbDogQWRkZWQu
CisKIDIwMTItMTAtMTUgIE1pa2UgV2VzdCAgPG1rd3N0QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBXYXJuIHdoZW4gQ1NQIGhlYWRlcnMgZG9uJ3Qgc2VwYXJhdGUgZGlyZWN0aXZlcyB3aXRoICc7
Jy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3Jlc291cmNl
cy9maXJlLWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3MvcmVz
b3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNlNjI3MDNjN2NlMTE1MWE1YmU4
NGIyODBmZTEzZWM0M2QzODIwNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZnJhbWVzL3NlYW1sZXNzL3Jlc291cmNlcy9maXJlLWV2ZW50cy5odG1sCkBAIC0wLDAgKzEsMTgg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxkaXYgaWQ9J3RhcmdldCc+PC9k
aXY+Cis8c2NyaXB0Pgord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlv
bihldmVudCkgeworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFy
Z2V0Jyk7CisgICAgdmFyIGV2ZW50cyA9IFsnYWJvcnQnLCAnc2VsZWN0JywgJ2NoYW5nZScsICdj
bGljaycsICdkYmxjbGljaycsICdyZXNldCcsICdyZXNpemUnLCAnc2Nyb2xsJywgJ3NlbGVjdHN0
YXJ0J107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ1VJRXZlbnQnKTsKKyAgICAg
ICAgZXZlbnQuaW5pdEV2ZW50KGV2ZW50c1tpXSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICB0YXJn
ZXQuZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgfQorICAgIHdpbmRvdy50b3AucG9zdE1lc3Nh
Z2UoJ0RPTkUnLCAnKicpOworfSwgZmFsc2UpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9zZWFtbGVzcy9zZWFtbGVzcy1l
dmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2Vh
bWxlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWM2ZWE1OGIwYTQ0ZjA3NTVl
OGU2MjIzZDVlYmI5YTRjNTM2NzQxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDI0IEBACitUZXN0IHRoYXQgZXZlbnQgcHJvcGFnYXRlcyBhY3Jvc3Mgc2VhbWxlc3MgaWZyYW1l
cy4KKworICBhYm9ydAorCisgIHNlbGVjdAorCisgIGNoYW5nZQorCisgIGNsaWNrCisgICAgIEBz
ZWFtbGVzcy1pZnJhbWUgKHRhcmdldDogc2VhbWxlc3MtaWZyYW1lKQorICAgICBAYm9keSAodGFy
Z2V0OiBzZWFtbGVzcy1pZnJhbWUpCisKKyAgZGJsY2xpY2sKKyAgICAgQHNlYW1sZXNzLWlmcmFt
ZSAodGFyZ2V0OiBzZWFtbGVzcy1pZnJhbWUpCisgICAgIEBib2R5ICh0YXJnZXQ6IHNlYW1sZXNz
LWlmcmFtZSkKKworICByZXNldAorCisgIHJlc2l6ZQorCisgIHNjcm9sbAorCisgIHNlbGVjdHN0
YXJ0CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3NlYW1sZXNzL3NlYW1s
ZXNzLWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvc2VhbWxlc3Mvc2VhbWxl
c3MtZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNmODMxMmNiYzFmNTFmZmRmOWU3YTJjZjkyMWY1
NWM5NzMyZjZhNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3Nl
YW1sZXNzL3NlYW1sZXNzLWV2ZW50cy5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8Ym9keSBpZD0nYm9keSc+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitkZWJ1ZygiVGVzdCB0
aGF0IGV2ZW50IHByb3BhZ2F0ZXMgYWNyb3NzIHNlYW1sZXNzIGlmcmFtZXMuIikKKworaWYgKHdp
bmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBldmVudHMgPSBbJ2Fib3J0JywgJ3Nl
bGVjdCcsICdjaGFuZ2UnLCAnY2xpY2snLCAnZGJsY2xpY2snLCAncmVzZXQnLCAncmVzaXplJywg
J3Njcm9sbCcsICdzZWxlY3RzdGFydCddOwordmFyIGV2ZW50UmVjb3JkcyA9IHt9OworCitmb3Ig
KHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkKKyAgICBkb2N1bWVudC5ib2R5LmFk
ZEV2ZW50TGlzdGVuZXIoZXZlbnRzW2ldLCByZWNvcmRFdmVudCk7CisKK2Z1bmN0aW9uIGlmcmFt
ZUxvYWRlZChpZnJhbWUpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7
ICsraSkKKyAgICAgICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRzW2ldLCByZWNvcmRF
dmVudCk7CisgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoJ2ZpcmUnLCAnKicp
OworfQorCit2YXIgbWVzc2FnZVJlY2VpdmVkQ291bnQgPSAwOworCit3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKCsrbWVzc2FnZVJl
Y2VpdmVkQ291bnQgPT0gMikgIHsKKyAgICAgICAgZHVtcERpc3BhdGNoZWRFdmVudCgpOworICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKKyAgICB9Cit9LCBmYWxzZSk7CisKK2Z1bmN0aW9uIHJlY29yZEV2ZW50KGV2ZW50
KQoreworICAgIHZhciBldmVudFR5cGUgPSBldmVudC50eXBlCisgICAgaWYgKCFldmVudFJlY29y
ZHNbZXZlbnRUeXBlXSkKKyAgICAgICAgZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0gPSBbXTsKKyAg
ICB2YXIgZXZlbnRTdHJpbmcgPSAnJzsKKyAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldCkKKyAg
ICAgICAgZXZlbnRTdHJpbmcgKz0gJyBAJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuaWQ7CisgICAg
aWYgKGV2ZW50LnRhcmdldCkKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAodGFyZ2V0OiAnICsg
ZXZlbnQudGFyZ2V0LmlkICsgJyknOworICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0KQorICAg
ICAgICBldmVudFN0cmluZyArPSAnIChyZWxhdGVkOiAnICsgZXZlbnQucmVsYXRlZFRhcmdldC5p
ZCArICcpJzsKKyAgICBpZiAoZXZlbnQuZXZlbnRQaGFzZSA9PSAxKQorICAgICAgICBldmVudFN0
cmluZyArPSAnKGNhcHR1cmluZyBwaGFzZSknOworICAgIGlmIChldmVudC50YXJnZXQgJiYgZXZl
bnQuY3VycmVudFRhcmdldCAmJiBldmVudC50YXJnZXQuaWQgPT0gZXZlbnQuY3VycmVudFRhcmdl
dC5pZCkKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50LmV2ZW50UGhhc2UiLCAiMiIsIHRydWUpOwor
ICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdLnB1c2goZXZlbnRTdHJpbmcpOworfQorCitmdW5j
dGlvbiBkdW1wRGlzcGF0Y2hlZEV2ZW50KCkKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2
ZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgZXZlbnRUeXBlID0gZXZlbnRzW2ldOwor
ICAgICAgICBkZWJ1ZygnXG4gICcgKyBldmVudFR5cGUpOworICAgICAgICB2YXIgcmVjb3JkID0g
ZXZlbnRSZWNvcmRzW2V2ZW50VHlwZV0gfHwgW107CisgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgcmVjb3JkLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgZGVidWcoJyAgICAnICsgcmVjb3Jk
W2pdKQorICAgIH0KK30KKworPC9zY3JpcHQ+Cis8ZGl2IGlkPSJjb250YWluZXIiPgorICAgIDxp
ZnJhbWUgaWQ9J3NlYW1sZXNzLWlmcmFtZScgb25sb2FkPSdpZnJhbWVMb2FkZWQodGhpcyknIHNy
Yz0ncmVzb3VyY2VzL2ZpcmUtZXZlbnRzLmh0bWwnIHNlYW1sZXNzPSd0cnVlJz48L2lmcmFtZT4K
KyAgICA8aWZyYW1lIGlkPSdub24tc2VhbWxlc3MtaWZyYW1lJyBvbmxvYWQ9J2lmcmFtZUxvYWRl
ZCh0aGlzKScgc3JjPSdyZXNvdXJjZXMvZmlyZS1ldmVudHMuaHRtbCc+PC9pZnJhbWU+Cis8L2Rp
dj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>