<?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>162478</bug_id>
          
          <creation_ts>2016-09-22 18:15:50 -0700</creation_ts>
          <short_desc>Add SynchronizedFixedQueue class</short_desc>
          <delta_ts>2016-10-11 12:38:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>155322</blocked>
    
    <blocked>155546</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1232737</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-22 18:15:50 -0700</bug_when>
    <thetext>The purpose of this class is to synchronize safely enqueuing and dequeuing elements form a FixedQueue. This class can be used in implementing a producer-consumer pattern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232746</commentid>
    <comment_count>1</comment_count>
      <attachid>289642</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-22 18:30:01 -0700</bug_when>
    <thetext>Created attachment 289642
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232747</commentid>
    <comment_count>2</comment_count>
      <attachid>289643</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-22 18:32:46 -0700</bug_when>
    <thetext>Created attachment 289643
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232772</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-09-22 20:21:54 -0700</bug_when>
    <thetext>Safe is a very overloaded word, so it doesn&apos;t really explain the difference. Would something like SynchronizefSafeQueue be accurate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232773</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-09-22 20:22:45 -0700</bug_when>
    <thetext>I meant &quot;Synchronized&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232908</commentid>
    <comment_count>5</comment_count>
      <attachid>289643</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-09-23 10:55:50 -0700</bug_when>
    <thetext>Comment on attachment 289643
Patch

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

&gt; Source/WTF/wtf/Broadcast.h:35
&gt; +class Broadcast {

I think this name needs to be improved. What is this broadcasting? It seems to be a range?

&gt; Source/WTF/wtf/FixedQueue.h:31
&gt; +class FixedQueue {

Fixed in what sense? Fixed size?

&gt; Source/WTF/wtf/SafeFixedQueue.h:36
&gt; +class SafeFixedQueue : public FixedQueue&lt;T, BufferSize&gt; {

Safe in what sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232934</commentid>
    <comment_count>6</comment_count>
      <attachid>289643</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-23 12:04:55 -0700</bug_when>
    <thetext>Comment on attachment 289643
Patch

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

&gt; Source/WTF/wtf/Broadcast.h:102
&gt; +    void decrement()
&gt; +    {
&gt; +        waitUntilAndNotify([this]() { return m_isShutdown || (m_value &gt; m_minValue &amp;&amp; m_value--); });
&gt; +    }
&gt; +
&gt; +    void increment()
&gt; +    {
&gt; +        waitUntilAndNotify([this]() { return m_isShutdown || (m_value &lt; m_maxValue &amp;&amp; ++m_value); });
&gt; +    }

It&apos;s very sneaky to disguise a state change as a condition variable predicate. Probably too sneaky.

&gt; Source/WTF/wtf/FixedQueue.h:44
&gt; +        if (isFull())
&gt; +            return false;

I think this means that image decoding, if it runs faster than image rendering, will throw away new frames instead of old frames.

Is that the behavior we want? My understanding is that most graphics systems skip old frames when under time pressure.

&gt; Source/WTF/wtf/FixedQueue.h:87
&gt; +        size_t count = 1;
&gt; +        for (size_t head = m_head; head != m_tail; head = (head + 1) % BufferSize)
&gt; +            ++count;

I think you can compute size without linear search. If m_head &lt; m_tail, size is m_tail - m_head. Otherwise, size is distance from m_buffer to m_tail (using %) + distance from m_head (using %) to m_buffer end. Or you can just keep a size counter instead of an m_isEmpty flag.

&gt; Source/WTF/wtf/FixedQueue.h:101
&gt; +using WTF::FixedQueue;

Do we benefit specifically from a fixed-sized buffer, or should we just use std::queue with a custom allocator that calls WTF::fastMalloc?

Part of why I&apos;m asking is that this is the second time I think I&apos;ve spotted some problems in this class, so I see some potential benefit from reusing known-good code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232940</commentid>
    <comment_count>7</comment_count>
      <attachid>289695</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-23 12:26:51 -0700</bug_when>
    <thetext>Created attachment 289695
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232946</commentid>
    <comment_count>8</comment_count>
      <attachid>289643</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-23 12:44:04 -0700</bug_when>
    <thetext>Comment on attachment 289643
Patch

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

&gt;&gt; Source/WTF/wtf/Broadcast.h:35
&gt;&gt; +class Broadcast {
&gt; 
&gt; I think this name needs to be improved. What is this broadcasting? It seems to be a range?

This is what Geoff suggested here: https://bugs.webkit.org/attachment.cgi?id=287822&amp;action=review. But I will try to come up with a better name.

&gt;&gt; Source/WTF/wtf/Broadcast.h:102
&gt;&gt; +    }
&gt; 
&gt; It&apos;s very sneaky to disguise a state change as a condition variable predicate. Probably too sneaky.

I did not understand where the problem is. Is it in how the predicate is written? Or is it in the concept itself? Did not you like having to wait for a predicate and at the same time change the value of a member once the predicate is true?

&gt;&gt; Source/WTF/wtf/FixedQueue.h:31
&gt;&gt; +class FixedQueue {
&gt; 
&gt; Fixed in what sense? Fixed size?

This is what Geoff suggested here: https://bugs.webkit.org/attachment.cgi?id=287822&amp;action=review. But I will try to come up with a better name.

&gt;&gt; Source/WTF/wtf/FixedQueue.h:44
&gt;&gt; +            return false;
&gt; 
&gt; I think this means that image decoding, if it runs faster than image rendering, will throw away new frames instead of old frames.
&gt; 
&gt; Is that the behavior we want? My understanding is that most graphics systems skip old frames when under time pressure.

I think this can be left to the caller. For the case of dropping the oldest item, the caller can do the following:

if (m_queue.isFull())
    m_queue.dequeue();

m_queue.enqueue();

&gt;&gt; Source/WTF/wtf/FixedQueue.h:87
&gt;&gt; +            ++count;
&gt; 
&gt; I think you can compute size without linear search. If m_head &lt; m_tail, size is m_tail - m_head. Otherwise, size is distance from m_buffer to m_tail (using %) + distance from m_head (using %) to m_buffer end. Or you can just keep a size counter instead of an m_isEmpty flag.

Done.

&gt;&gt; Source/WTF/wtf/FixedQueue.h:101
&gt;&gt; +using WTF::FixedQueue;
&gt; 
&gt; Do we benefit specifically from a fixed-sized buffer, or should we just use std::queue with a custom allocator that calls WTF::fastMalloc?
&gt; 
&gt; Part of why I&apos;m asking is that this is the second time I think I&apos;ve spotted some problems in this class, so I see some potential benefit from reusing known-good code.

This is fine too. But the suggestions so far are just optimizations and the class is not a big deal. For the size() function I have to admit I was lazy writing it because I added it only for testing.

&gt;&gt; Source/WTF/wtf/SafeFixedQueue.h:36
&gt;&gt; +class SafeFixedQueue : public FixedQueue&lt;T, BufferSize&gt; {
&gt; 
&gt; Safe in what sense?

I changed it to SynchronizedFixedQueue as Alexey suggested in https://bugs.webkit.org/show_bug.cgi?id=162478#c3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232947</commentid>
    <comment_count>9</comment_count>
      <attachid>289697</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-23 12:57:11 -0700</bug_when>
    <thetext>Created attachment 289697
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232960</commentid>
    <comment_count>10</comment_count>
      <attachid>289700</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-23 13:19:18 -0700</bug_when>
    <thetext>Created attachment 289700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232964</commentid>
    <comment_count>11</comment_count>
      <attachid>289697</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-09-23 13:25:15 -0700</bug_when>
    <thetext>Comment on attachment 289697
Patch

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

&gt; Source/WTF/wtf/Broadcast.h:35
&gt; +class Broadcast {

I could call this ThreadsafeCounter or something.

&gt; Source/WTF/wtf/Broadcast.h:78
&gt; +        m_condition.notifyAll();

Should you notify if the value didn&apos;t change?

&gt; Source/WTF/wtf/Broadcast.h:94
&gt; +    void decrement()

I think this and increment() need better names, that indicate their waiting/blocking nature.

&gt; Source/WTF/wtf/FixedQueue.h:31
&gt; +class FixedQueue {

Why not CircularQueue?

&gt; Source/WTF/wtf/FixedQueue.h:90
&gt; +    size_t m_head { 0 };
&gt; +    size_t m_tail { 0 };

Call these m_headIndex and m_tailIndex.

&gt; Source/WTF/wtf/SynchronizedFixedQueue.h:89
&gt; +    Broadcast&lt;int&gt; m_empty;
&gt; +    Broadcast&lt;int&gt; m_full;

These names don&apos;t tell me what these do. And why do you need both, and not just a single thing that tracks the fullness level?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232989</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-23 14:13:09 -0700</bug_when>
    <thetext>&gt; &gt; Source/WTF/wtf/Broadcast.h:35
&gt; &gt; +class Broadcast {
&gt; 
&gt; I could call this ThreadsafeCounter or something.

Some more options:

Watchable&lt;T&gt;, AtomicWatchable&lt;T&gt;, Observable&lt;T&gt;, AtomicObservable&lt;T&gt;.

Or, if we like &quot;Counter&quot; in the name:

WatchableCounter&lt;T&gt;, AtomicWatchableCounter&lt;T&gt;, ObservableCounter&lt;T&gt;, AtomicObservableCounter&lt;T&gt;.

(Note that the class is not only thread safe; it also wakes up other threads to signal its changes.)

I suppose, since this is just a counter, there&apos;s no point in the template parameter. We can just make the data size_t.

The template abstraction would be justified if we removed the explicit increment() and decrement() functions and we just provided functions for &quot;read the data&quot;, &quot;wait until the data changes&quot;, and &quot;write the data&quot;.

&gt; &gt; It&apos;s very sneaky to disguise a state change as a condition variable predicate. Probably too sneaky.

&gt; I did not understand where the problem is. Is it in how the predicate is written? Or
&gt; is it in the concept itself? Did not you like having to wait for a predicate and at
&gt; the same time change the value of a member once the predicate is true?

The waitUntil function declares that it takes a &quot;predicate&quot; argument. A &quot;predicate&quot; in logic is &quot;something that is affirmed or denied concerning an argument of a proposition&quot;. It is very surprising for a function that is supposed to answer a yes/no question to have side-effects, and it is stranger still for those side-effects to potentially change the answer to the yes/no question.

Consider this conversation:

Me: Are you going to the ballgame?

You: Because you asked me that, I have adopted a kitten.

Me: ?

You: And, now that I own a kitten, I&apos;m too busy to go the ballgame.

Me: ???

In fact, I just realized that this is a hard error. Condition variables are allowed to invoke their predicates spuriously, and in this case that would cause multiple increment or multiple decrement.

&gt; &gt; Is that the behavior we want? My understanding is that most graphics systems skip old frames when under time pressure.

&gt; I think this can be left to the caller. For the case of dropping the oldest item, the caller can do the following:

OK, but do we have any callers that want the behavior where new items are discarded? If we&apos;re writing a data structure abstraction, it should cater to our use case.

&gt; &gt; Do we benefit specifically from a fixed-sized buffer, or should we just use std::queue with a custom allocator that calls WTF::fastMalloc?
&gt; &gt; 
&gt; &gt; Part of why I&apos;m asking is that this is the second time I think I&apos;ve spotted some problems in this class, so I see some potential benefit from reusing known-good code.

&gt; This is fine too. But the suggestions so far are just optimizations and the class is not a big deal. For the size() function I have to admit I was lazy writing it because I added it only for testing.

Is there any benefit to writing this data structure for ourselves?

Put otherwise: What was your motivation in writing this data structure?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233006</commentid>
    <comment_count>13</comment_count>
      <attachid>289700</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-09-23 14:54:50 -0700</bug_when>
    <thetext>Comment on attachment 289700
Patch

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

&gt; Source/WTF/wtf/Broadcast.h:96
&gt; +        waitUntilAndNotify([this]() { return m_isShutdown || (m_value &gt; m_minValue &amp;&amp; m_value--); });

This condition is wrong; m_value-- should check against the min.

&gt; Source/WTF/wtf/SynchronizedFixedQueue.h:60
&gt; +        m_empty.decrement();

Wait for slot to become available.

&gt; Source/WTF/wtf/SynchronizedFixedQueue.h:67
&gt; +        m_full.increment();

Notify that a slot has become filled.

&gt; Source/WTF/wtf/SynchronizedFixedQueue.h:74
&gt; +        m_full.decrement();

Wait for a full slot to be dequeable

&gt; Source/WTF/wtf/SynchronizedFixedQueue.h:83
&gt; +        m_empty.increment();

Notify that a slot is now empty

&gt; Source/WTF/wtf/SynchronizedFixedQueue.h:89
&gt; +    Broadcast&lt;int&gt; m_empty;
&gt; +    Broadcast&lt;int&gt; m_full;

Names should reflect these are about empty and full slots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235380</commentid>
    <comment_count>14</comment_count>
      <attachid>289700</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-30 13:27:33 -0700</bug_when>
    <thetext>Comment on attachment 289700
Patch

Can SynchronizedFixedQueue just use a single lock and condition variable instead of three?

I believe that enqueue can lock, check for shutdown, enqueue, and then broadcast, and dequeue can lock, wait for !isEmpty() &amp;&amp; !m_isShutdown, and then dequeue. That&apos;s one lock and condition variable instead of three, and two fewer state variables (m_empty and m_full).

Why does SynchronizedFixedQueue::dequeue invoke its functor while holding the queue lock? That means I can&apos;t write an algorithm that optionally dequeues a second item because I will deadlock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235526</commentid>
    <comment_count>15</comment_count>
      <attachid>290413</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-30 17:50:13 -0700</bug_when>
    <thetext>Created attachment 290413
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235547</commentid>
    <comment_count>16</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-30 18:23:24 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 289700 [details]
&gt; Patch
&gt; 
&gt; Can SynchronizedFixedQueue just use a single lock and condition variable
&gt; instead of three?
&gt; 
&gt; I believe that enqueue can lock, check for shutdown, enqueue, and then
&gt; broadcast, and dequeue can lock, wait for !isEmpty() &amp;&amp; !m_isShutdown, and
&gt; then dequeue. That&apos;s one lock and condition variable instead of three, and
&gt; two fewer state variables (m_empty and m_full).
&gt; 
&gt; Why does SynchronizedFixedQueue::dequeue invoke its functor while holding
&gt; the queue lock? That means I can&apos;t write an algorithm that optionally
&gt; dequeues a second item because I will deadlock.

I cleaned the patch a little. I removed the FixedQueue template. I made SynchronizedFixedQueue holds to a data member of type Deque instead. I changed SynchronizedFixedQueue::dequeue(), as you suggested, to not hold the lock while processing the item. I also replaced Broadcast by a template class called Watchable&lt;T&gt; and a class called WatchableCounter which is derived from Watchable&lt;size_t&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235843</commentid>
    <comment_count>17</comment_count>
      <attachid>290413</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-03 12:09:03 -0700</bug_when>
    <thetext>Comment on attachment 290413
Patch

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

&gt; Source/WTF/ChangeLog:17
&gt; +        3. SafeFixedQueue: A fixed-size queue but its enqueue() and dequeue()
&gt; +           are controlled by two WatchableCounter: m_empty and m_full.

As a high-level comment, I think that SafeFixedQueue would look a lot cleaner if it did not use the Watchable/WatchableCounter abstraction.  I would have written it directly using a condition variable for empty and a condition variable for full.  I think that would have resulted in less code, and so fewer things that could go wrong.

On the other hand, I grok this code, so my objection is soft.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235856</commentid>
    <comment_count>18</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-03 12:32:15 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 289700 [details]
&gt; Patch
&gt; 
&gt; Can SynchronizedFixedQueue just use a single lock and condition variable
&gt; instead of three?
&gt; 
&gt; I believe that enqueue can lock, check for shutdown, enqueue, and then
&gt; broadcast, and dequeue can lock, wait for !isEmpty() &amp;&amp; !m_isShutdown, and
&gt; then dequeue. That&apos;s one lock and condition variable instead of three, and
&gt; two fewer state variables (m_empty and m_full).
&gt; 
&gt; Why does SynchronizedFixedQueue::dequeue invoke its functor while holding
&gt; the queue lock? That means I can&apos;t write an algorithm that optionally
&gt; dequeues a second item because I will deadlock.

If we use a single lock, that will make each thread waits for the other thread(s) to release the lock. For example, if a producer wants to insert a request in the queue it has to wait for the the consumer thread to finish even if the queue has empty spaces. I think we should make all threads compete for a single lock only when accessing the queue.

But to allow two threads to proceed at the same time without getting incorrect value for the queue current count, two additional semaphores have to be used, one for the fullCounter and the other for the emptyCounter. One semaphore is used to block the thread until it can proceed and the other semaphore is used to notify the other thread with completion.

Producer:
    m_emptyCounter.decrement(); // Blocks execution until there is an empty space.
    {
        LockHolder lockHolder(m_mutex);
        m_queue.append(value);
    }
    m_fullCounter.increment(); // Notify the other thread that there is an item for processing.


Consumer:
    m_fullCounter.decrement(); // Blocks execution until there is an item to be processed.
    {
        LockHolder lockHolder(m_mutex);
        // Remove the first of the queue.
        value = m_queue.first();
        m_queue.removeFirst();
    }
    m_emptyCounter.increment(); // Notify the other threads that an item was removed from the queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235862</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-03 12:47:17 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #14)
&gt; &gt; Comment on attachment 289700 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Can SynchronizedFixedQueue just use a single lock and condition variable
&gt; &gt; instead of three?
&gt; &gt; 
&gt; &gt; I believe that enqueue can lock, check for shutdown, enqueue, and then
&gt; &gt; broadcast, and dequeue can lock, wait for !isEmpty() &amp;&amp; !m_isShutdown, and
&gt; &gt; then dequeue. That&apos;s one lock and condition variable instead of three, and
&gt; &gt; two fewer state variables (m_empty and m_full).
&gt; &gt; 
&gt; &gt; Why does SynchronizedFixedQueue::dequeue invoke its functor while holding
&gt; &gt; the queue lock? That means I can&apos;t write an algorithm that optionally
&gt; &gt; dequeues a second item because I will deadlock.
&gt; 
&gt; If we use a single lock, that will make each thread waits for the other
&gt; thread(s) to release the lock. For example, if a producer wants to insert a
&gt; request in the queue it has to wait for the the consumer thread to finish
&gt; even if the queue has empty spaces. I think we should make all threads
&gt; compete for a single lock only when accessing the queue.

I don&apos;t think you&apos;re getting any extra concurrency over what you&apos;d get with just one lock.  The queue lock is the bottleneck either way.

&gt; 
&gt; But to allow two threads to proceed at the same time without getting
&gt; incorrect value for the queue current count, two additional semaphores have
&gt; to be used, one for the fullCounter and the other for the emptyCounter. One
&gt; semaphore is used to block the thread until it can proceed and the other
&gt; semaphore is used to notify the other thread with completion.
&gt; 
&gt; Producer:
&gt;     m_emptyCounter.decrement(); // Blocks execution until there is an empty
&gt; space.
&gt;     {
&gt;         LockHolder lockHolder(m_mutex);
&gt;         m_queue.append(value);
&gt;     }
&gt;     m_fullCounter.increment(); // Notify the other thread that there is an
&gt; item for processing.
&gt; 
&gt; 
&gt; Consumer:
&gt;     m_fullCounter.decrement(); // Blocks execution until there is an item to
&gt; be processed.
&gt;     {
&gt;         LockHolder lockHolder(m_mutex);
&gt;         // Remove the first of the queue.
&gt;         value = m_queue.first();
&gt;         m_queue.removeFirst();
&gt;     }
&gt;     m_emptyCounter.increment(); // Notify the other threads that an item was
&gt; removed from the queue.

Or you could just do this:

template&lt;typename T&gt;
class Queue {
public:
    void enqueue(T value)
    {
        LockHolder holder(m_lock);
        while (m_data.size() &gt;= limit)
            m_cond.wait(m_lock);
        m_data.append(value);
        m_cond.notifyAll();
    }

    T dequeue()
    {
        LockHolder locker(m_lock);
        while (m_data.isEmpty())
            m_cond.wait(m_lock);
        T result = m_data.takeFirst();
        m_cond.notifyAll();
        return result;
    }
private:
    Deque&lt;T&gt; m_data;
    Lock m_lock;
    Condition m_condition;
};

This has one lock, one condition variable, and will probably perform as well as your queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235865</commentid>
    <comment_count>20</comment_count>
      <attachid>290413</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-03 12:49:38 -0700</bug_when>
    <thetext>Comment on attachment 290413
Patch

I&apos;m going to mark this r+ because I believe that the code is correct and it does everything that the changelog says it does.  I suspect that this could be simplified, but I don&apos;t want my suspicion to block your work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235870</commentid>
    <comment_count>21</comment_count>
      <attachid>290413</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-10-03 13:07:01 -0700</bug_when>
    <thetext>Comment on attachment 290413
Patch

Here&apos;s a design for enqueue / dequeue that I think would work, with less complexity:

(1) enqueue:

LockHolder lockHolder(m_mutex);
m_condition.wait(m_mutex, [] { return m_isShutDown || m_queue.size() &lt; BufferSize; };
if (m_isShutDown)
    return false;
m_queue.append(value);
m_condition.notifyAll();
return true;

(2) dequeue:

LockHolder lockHolder(m_mutex);
m_condition.wait(m_mutex, [] { return m_isShutDown || m_queue.size(); };
if (m_isShutDown)
    return false;
value = m_queue.first();
m_queue.removeFirst();
m_condition.notifyAll();
return true;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235871</commentid>
    <comment_count>22</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-10-03 13:10:47 -0700</bug_when>
    <thetext>&gt; If we use a single lock, that will make each thread waits for the other
&gt; thread(s) to release the lock. For example, if a producer wants to insert a
&gt; request in the queue it has to wait for the the consumer thread to finish
&gt; even if the queue has empty spaces. I think we should make all threads
&gt; compete for a single lock only when accessing the queue.

This comment concerns me and demonstrates a problem in the current design that Simon ran into as well: By using semaphores, the current design implies that enqueue and dequeue can be concurrent, but in fact that isn&apos;t true, since they both acquire m_mutex.

Perhaps semaphores could be used to achieve an alternative lock-free design, but that isn&apos;t what we have here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235903</commentid>
    <comment_count>23</comment_count>
      <attachid>290413</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-03 14:18:38 -0700</bug_when>
    <thetext>Comment on attachment 290413
Patch

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

&gt; Source/WTF/wtf/SynchronizedFixedQueue.h:107
&gt; +    Deque&lt;T, BufferSize&gt; m_queue;

You probably want to separate members onto different cache lines depending on which you expect to be read / written by threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235916</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-03 14:34:34 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Comment on attachment 290413 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=290413&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/SynchronizedFixedQueue.h:107
&gt; &gt; +    Deque&lt;T, BufferSize&gt; m_queue;
&gt; 
&gt; You probably want to separate members onto different cache lines depending
&gt; on which you expect to be read / written by threads.

Does that matter if the queue requires a single lock to protect everything?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235919</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-03 14:35:56 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; &gt; If we use a single lock, that will make each thread waits for the other
&gt; &gt; thread(s) to release the lock. For example, if a producer wants to insert a
&gt; &gt; request in the queue it has to wait for the the consumer thread to finish
&gt; &gt; even if the queue has empty spaces. I think we should make all threads
&gt; &gt; compete for a single lock only when accessing the queue.
&gt; 
&gt; This comment concerns me and demonstrates a problem in the current design
&gt; that Simon ran into as well: By using semaphores, the current design implies
&gt; that enqueue and dequeue can be concurrent, but in fact that isn&apos;t true,
&gt; since they both acquire m_mutex.
&gt; 
&gt; Perhaps semaphores could be used to achieve an alternative lock-free design,
&gt; but that isn&apos;t what we have here.

If it&apos;s using semaphores then it&apos;s probably not lock-free. :-P

How much perf do we need here?  Note that the JSC GC&apos;s queueing, which scales to ~8 cores, does not use lock-freedom and protects itself with one lock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235944</commentid>
    <comment_count>26</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-10-03 15:22:30 -0700</bug_when>
    <thetext>&gt; How much perf do we need here?

I don&apos;t think this queue is going to be a bottleneck. It guards image decoding. So, the producer does a ~4ms decode and then enqueues and then the consumer does a dequeue while rendering a ~16ms frame. Meanwhile, this little queue takes like 100 microseconds max to lock and signal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236333</commentid>
    <comment_count>27</comment_count>
      <attachid>290638</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-04 13:27:08 -0700</bug_when>
    <thetext>Created attachment 290638
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236336</commentid>
    <comment_count>28</comment_count>
      <attachid>290413</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-04 13:31:01 -0700</bug_when>
    <thetext>Comment on attachment 290413
Patch

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

&gt;&gt; Source/WTF/ChangeLog:17
&gt;&gt; +           are controlled by two WatchableCounter: m_empty and m_full.
&gt; 
&gt; As a high-level comment, I think that SafeFixedQueue would look a lot cleaner if it did not use the Watchable/WatchableCounter abstraction.  I would have written it directly using a condition variable for empty and a condition variable for full.  I think that would have resulted in less code, and so fewer things that could go wrong.
&gt; 
&gt; On the other hand, I grok this code, so my objection is soft.

Watchable and WatchableCounter were removed. The design of SynchronizedFixedQueue is now simpler.It uses a single lock and a single condition to synchronize all the members of the class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236340</commentid>
    <comment_count>29</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-04 13:47:09 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; Comment on attachment 289700 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; Can SynchronizedFixedQueue just use a single lock and condition variable
&gt; &gt; &gt; instead of three?
&gt; &gt; &gt; 
&gt; &gt; &gt; I believe that enqueue can lock, check for shutdown, enqueue, and then
&gt; &gt; &gt; broadcast, and dequeue can lock, wait for !isEmpty() &amp;&amp; !m_isShutdown, and
&gt; &gt; &gt; then dequeue. That&apos;s one lock and condition variable instead of three, and
&gt; &gt; &gt; two fewer state variables (m_empty and m_full).
&gt; &gt; &gt; 
&gt; &gt; &gt; Why does SynchronizedFixedQueue::dequeue invoke its functor while holding
&gt; &gt; &gt; the queue lock? That means I can&apos;t write an algorithm that optionally
&gt; &gt; &gt; dequeues a second item because I will deadlock.
&gt; &gt; 
&gt; &gt; If we use a single lock, that will make each thread waits for the other
&gt; &gt; thread(s) to release the lock. For example, if a producer wants to insert a
&gt; &gt; request in the queue it has to wait for the the consumer thread to finish
&gt; &gt; even if the queue has empty spaces. I think we should make all threads
&gt; &gt; compete for a single lock only when accessing the queue.
&gt; 
&gt; I don&apos;t think you&apos;re getting any extra concurrency over what you&apos;d get with
&gt; just one lock.  The queue lock is the bottleneck either way.
&gt; 
&gt; &gt; 
&gt; &gt; But to allow two threads to proceed at the same time without getting
&gt; &gt; incorrect value for the queue current count, two additional semaphores have
&gt; &gt; to be used, one for the fullCounter and the other for the emptyCounter. One
&gt; &gt; semaphore is used to block the thread until it can proceed and the other
&gt; &gt; semaphore is used to notify the other thread with completion.
&gt; &gt; 
&gt; &gt; Producer:
&gt; &gt;     m_emptyCounter.decrement(); // Blocks execution until there is an empty
&gt; &gt; space.
&gt; &gt;     {
&gt; &gt;         LockHolder lockHolder(m_mutex);
&gt; &gt;         m_queue.append(value);
&gt; &gt;     }
&gt; &gt;     m_fullCounter.increment(); // Notify the other thread that there is an
&gt; &gt; item for processing.
&gt; &gt; 
&gt; &gt; 
&gt; &gt; Consumer:
&gt; &gt;     m_fullCounter.decrement(); // Blocks execution until there is an item to
&gt; &gt; be processed.
&gt; &gt;     {
&gt; &gt;         LockHolder lockHolder(m_mutex);
&gt; &gt;         // Remove the first of the queue.
&gt; &gt;         value = m_queue.first();
&gt; &gt;         m_queue.removeFirst();
&gt; &gt;     }
&gt; &gt;     m_emptyCounter.increment(); // Notify the other threads that an item was
&gt; &gt; removed from the queue.
&gt; 
&gt; Or you could just do this:
&gt; 
&gt; template&lt;typename T&gt;
&gt; class Queue {
&gt; public:
&gt;     void enqueue(T value)
&gt;     {
&gt;         LockHolder holder(m_lock);
&gt;         while (m_data.size() &gt;= limit)
&gt;             m_cond.wait(m_lock);
&gt;         m_data.append(value);
&gt;         m_cond.notifyAll();
&gt;     }
&gt; 
&gt;     T dequeue()
&gt;     {
&gt;         LockHolder locker(m_lock);
&gt;         while (m_data.isEmpty())
&gt;             m_cond.wait(m_lock);
&gt;         T result = m_data.takeFirst();
&gt;         m_cond.notifyAll();
&gt;         return result;
&gt;     }
&gt; private:
&gt;     Deque&lt;T&gt; m_data;
&gt;     Lock m_lock;
&gt;     Condition m_condition;
&gt; };
&gt; 
&gt; This has one lock, one condition variable, and will probably perform as well
&gt; as your queue.

I changed the class to be almost as you suggested expect for one thing: the close() function. I need this function because the image decoding thread has to be alive all the time as long as the image has many frames and it is animating. But I also need to terminate the thread when the Image object itself is deleted. To do that dequeue() has to return a bool saying if it returns because a successful dequeuing or because of closing the queue. And to have a robust close() I needed to track the active working threads to be sure that by the end of close() all the threads are terminated. So I added registerWorker(), unregisterWorker() and isRegisteredWorker(). I keep the worker in a HashSet. The close() function returns only when the size of the HashSet is zero.

The question I have is: I use the same condition with different predicates for closing the queue and terminating the workers as well as for enqueuing/dequeuing the elements. 
This seems to work. But should I create different conditions for different predicates?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236341</commentid>
    <comment_count>30</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-04 13:49:52 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Comment on attachment 290413 [details]
&gt; Patch
&gt; 
&gt; Here&apos;s a design for enqueue / dequeue that I think would work, with less
&gt; complexity:
&gt; 
&gt; (1) enqueue:
&gt; 
&gt; LockHolder lockHolder(m_mutex);
&gt; m_condition.wait(m_mutex, [] { return m_isShutDown || m_queue.size() &lt;
&gt; BufferSize; };
&gt; if (m_isShutDown)
&gt;     return false;
&gt; m_queue.append(value);
&gt; m_condition.notifyAll();
&gt; return true;
&gt; 
&gt; (2) dequeue:
&gt; 
&gt; LockHolder lockHolder(m_mutex);
&gt; m_condition.wait(m_mutex, [] { return m_isShutDown || m_queue.size(); };
&gt; if (m_isShutDown)
&gt;     return false;
&gt; value = m_queue.first();
&gt; m_queue.removeFirst();
&gt; m_condition.notifyAll();
&gt; return true;

You are right. This design is simpler. I implemented it in a edition to few other functions to robustly handle the close() function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236685</commentid>
    <comment_count>31</comment_count>
      <attachid>290722</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-05 10:18:08 -0700</bug_when>
    <thetext>Created attachment 290722
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237393</commentid>
    <comment_count>32</comment_count>
      <attachid>290722</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-10-06 16:16:29 -0700</bug_when>
    <thetext>Comment on attachment 290722
Patch

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

&gt; Source/WTF/wtf/SynchronizedFixedQueue.h:153
&gt; +    HashSet&lt;const void*&gt; m_workers;

This is not a very good separation of concerns. Tracking a set of worker threads is unrelated to maintaining data elements in a queue.

I recommend putting this set of workers into its own data structure. For example, if you&apos;re going to use WTF::WorkQueue, that data structure can track outstanding workers and provide API for waiting on them.

Another option is to use a separate data structure entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237674</commentid>
    <comment_count>33</comment_count>
      <attachid>290944</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-07 10:51:08 -0700</bug_when>
    <thetext>Created attachment 290944
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237680</commentid>
    <comment_count>34</comment_count>
      <attachid>290722</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-07 10:58:18 -0700</bug_when>
    <thetext>Comment on attachment 290722
Patch

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

&gt;&gt; Source/WTF/wtf/SynchronizedFixedQueue.h:153
&gt;&gt; +    HashSet&lt;const void*&gt; m_workers;
&gt; 
&gt; This is not a very good separation of concerns. Tracking a set of worker threads is unrelated to maintaining data elements in a queue.
&gt; 
&gt; I recommend putting this set of workers into its own data structure. For example, if you&apos;re going to use WTF::WorkQueue, that data structure can track outstanding workers and provide API for waiting on them.
&gt; 
&gt; Another option is to use a separate data structure entirely.

Tracking the workers was removed form the SynchronizedFixedQueue. Instead I am using a BinarySemaphore in caller of SynchronizedFixedQueue::close(). Here is how it is working:

void Caller::start()
{
    workQueue()-&gt;dispatch([this] {
        while (m_synchronizedFixedQueue.dequeue(item))
            processItem(item);
        m_closeSemaphore.signal();
    }
}

void Caller::stop()
{
    m_synchronizedFixedQueue.close();
    m_closeSemaphore.wait(std::numeric_limits&lt;double&gt;::max());
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238919</commentid>
    <comment_count>35</comment_count>
      <attachid>290944</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-10-11 10:56:59 -0700</bug_when>
    <thetext>Comment on attachment 290944
Patch

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

r=me

&gt; Source/WTF/wtf/SynchronizedFixedQueue.h:47
&gt; +    void open()
&gt; +    {
&gt; +        if (isOpen())
&gt; +            return;

We should probably lock here. I think the branch on m_open is a race.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238928</commentid>
    <comment_count>36</comment_count>
      <attachid>291279</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-11 11:40:00 -0700</bug_when>
    <thetext>Created attachment 291279
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238955</commentid>
    <comment_count>37</comment_count>
      <attachid>291279</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-11 12:38:12 -0700</bug_when>
    <thetext>Comment on attachment 291279
Patch

Clearing flags on attachment: 291279

Committed r207156: &lt;http://trac.webkit.org/changeset/207156&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238956</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-11 12:38:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289642</attachid>
            <date>2016-09-22 18:30:01 -0700</date>
            <delta_ts>2016-09-22 18:32:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162478-20160922182710.patch</filename>
            <type>text/plain</type>
            <size>17910</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDYyODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE2LTA5LTIyICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFNhZmVGaXhlZFF1ZXVlIGNs
YXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI0
NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgorCisgICAgICAgIDEuIEJyb2FkY2Fz
dDogSXQgaXMgZXF1aXZhbGVudCB0byBzdGQ6OmF0b21pYyBpbiB0aGUgYWRkaXRpb24gdG8gb3Ro
ZXIKKyAgICAgICAgICAgYmxvY2tpbmcgZnVuY3Rpb25zOiBpbmNyZW1lbnQoKSwgZGVjcmVtZW50
KCkgYW5kIHdhaXRVbnRpbEVxdWFsKCkuCisgICAgICAgIAorICAgICAgICAyLiBGaXhlZFF1ZXVl
OiBBIGNpcmN1bGFyIHF1ZXVlIChhLmsuYSBjaXJjdWxhciBidWZmZXIpLgorCisgICAgICAgIDMu
IFNhZmVGaXhlZFF1ZXVlOiBBIHJlZ3VsYXIgRml4ZWRRdWV1ZSBidXQgaXRzIGVucXVldWUoKSBh
bmQgZGVxdWV1ZSgpCisgICAgICAgICAgIGFyZSBjb250cm9sbGVkIGJ5IHR3byBCcm9hZGNhc3Rz
OiBtX2VtcHR5IGFuZCBtX2Z1bGwuIEFsc28gaXRzIGRlcXVldWUoKQorICAgICAgICAgICB0YWtl
cyBhIGZ1bmN0b3IgdG8gcHJvY2VzcyB0aGUgZWxlbWVudC10by1iZS1yZW1vdmVkIHNhZmVseS4K
KworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0
Zi9Ccm9hZGNhc3QuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6QnJvYWRjYXN0
KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0OjpyZXNldCk6CisgICAgICAgIChXVEY6OkJyb2Fk
Y2FzdDo6aXNTaHV0ZG93bik6CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6b3BlcmF0b3IgVCk6
CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkJy
b2FkY2FzdDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0OjpzaHV0ZG93bik6
CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6d2FpdFVudGlsRXF1YWwpOgorICAgICAgICAoV1RG
OjpCcm9hZGNhc3Q6OmRlY3JlbWVudCk6CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6aW5jcmVt
ZW50KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0Ojp3YWl0VW50aWwpOgorICAgICAgICAoV1RG
OjpCcm9hZGNhc3Q6OndhaXRVbnRpbEFuZE5vdGlmeSk6CisgICAgICAgICogd3RmL0ZpeGVkUXVl
dWUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkZpeGVkUXVldWU6OkZpeGVkUXVldWUpOgorICAg
ICAgICAoV1RGOjpGaXhlZFF1ZXVlOjppc0VtcHR5KToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1
ZTo6aXNGdWxsKToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1ZTo6ZW5xdWV1ZSk6CisgICAgICAg
IChXVEY6OkZpeGVkUXVldWU6OmRlcXVldWUpOgorICAgICAgICAoV1RGOjpGaXhlZFF1ZXVlOjpo
ZWFkKToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1ZTo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpG
aXhlZFF1ZXVlOjpzaXplKToKKyAgICAgICAgKiB3dGYvU2FmZUZpeGVkUXVldWUuaDogQWRkZWQu
CisgICAgICAgIChXVEY6OlNhZmVGaXhlZFF1ZXVlOjpTYWZlRml4ZWRRdWV1ZSk6CisgICAgICAg
IChXVEY6OlNhZmVGaXhlZFF1ZXVlOjpyZXNldCk6CisgICAgICAgIChXVEY6OlNhZmVGaXhlZFF1
ZXVlOjpzaHV0ZG93bik6CisgICAgICAgIChXVEY6OlNhZmVGaXhlZFF1ZXVlOjplbnF1ZXVlKToK
KyAgICAgICAgKFdURjo6U2FmZUZpeGVkUXVldWU6OmRlcXVldWUpOgorCiAyMDE2LTA5LTIyICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRmVuY2VzIG9uIHg4NiBz
aG91bGQgYmUgYSBsb3QgY2hlYXBlcgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDYyNTkpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDkgQEAKIAkJ
NTE1Rjc5NTYxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUY3OTU1MUNGRDNBNjkwMEND
RUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggKi87IH07CiAJCTUzOUVCMDYzMUQ1NTI4NDIwMEM4
MkVGNyAvKiBMRUJEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovOyB9
OwogCQk1NTMwNzFDQTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTMwNzFDOTFDNDA0MjcyMDAz
ODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi87IH07CisJCTU1OTdGODJGMUQ5NEI5OTcwMDY2QkMy
MSAvKiBTYWZlRml4ZWRRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTU5N0Y4MkMxRDk0Qjk5NzAwNjZCQzIxIC8qIFNhZmVGaXhlZFF1ZXVlLmgg
Ki87IH07CisJCTU1OTdGODMwMUQ5NEI5OTcwMDY2QkMyMSAvKiBCcm9hZGNhc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OTdGODJEMUQ5NEI5OTcw
MDY2QkMyMSAvKiBCcm9hZGNhc3QuaCAqLzsgfTsKKwkJNTU5N0Y4MzExRDk0Qjk5NzAwNjZCQzIx
IC8qIEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU1OTdGODJFMUQ5NEI5OTcwMDY2QkMyMSAvKiBGaXhlZFF1ZXVlLmggKi87IH07CiAJ
CTVDN0M4OEQ0MUQwQTNBMEEwMDlEMkY2RCAvKiBVbmlxdWVSZWYuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDN0M4OEQzMUQwQTNBMEEwMDlEMkY2RCAv
KiBVbmlxdWVSZWYuaCAqLzsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJv
bFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcwQTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgKi87IH07
CiAJCTcwQTk5M0ZGMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBBOTkzRkQxQUQ3MTUxMzAw
RkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmggKi87IH07CkBAIC00NjIsNiArNDY1LDkgQEAKIAkJ
NTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRRdWV1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMRUJEZWNvZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJV
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueUxSVUNhY2hlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAv
KiBTYWZlRml4ZWRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYWZl
Rml4ZWRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTk3RjgyRDFEOTRC
OTk3MDA2NkJDMjEgLyogQnJvYWRjYXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEJyb2FkY2FzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTk3RjgyRTFE
OTRCOTk3MDA2NkJDMjEgLyogRml4ZWRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaXhlZFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCNDMz
ODNBNUQwQjQ2M0M5NDMzRDkzMyAvKiBJbmRleE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbmRleE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzdD
ODhEMzFEMEEzQTBBMDA5RDJGNkQgLyogVW5pcXVlUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVuaXF1ZVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
RDI0N0I2MjE0Njg5Qjg2MDBFNzhCNzYgLyogbGliV1RGLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0g
MDsgcGF0aCA9IGxpYldURi5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpA
QCAtODQ3LDYgKzg1Myw3IEBACiAJCQkJQThBNDcyNjQxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb2Nr
U3RhY2suaCAqLywKIAkJCQlBOEE0NzI2NTE1MUE4MjVBMDA0MTIzRkYgLyogQmxvb21GaWx0ZXIu
aCAqLywKIAkJCQkwRjkzMjc0QTFDMTdGNEI3MDBDRjY1NjQgLyogQm94LmggKi8sCisJCQkJNTU5
N0Y4MkQxRDk0Qjk5NzAwNjZCQzIxIC8qIEJyb2FkY2FzdC5oICovLAogCQkJCTBGNDU3MDQ0MUJF
ODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0LmggKi8sCiAJCQkJQThBNDcyNjcxNTFBODI1QTAw
NDEyM0ZGIC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggKi8sCiAJCQkJRUI5NUUxRUYxNjFBNzI0
MTAwODlBMkY1IC8qIEJ5dGVPcmRlci5oICovLApAQCAtODg3LDYgKzg5NCw3IEBACiAJCQkJQThB
NDcyQTExNTFBODI1QTAwNDEyM0ZGIC8qIEZhc3RNYWxsb2MuY3BwICovLAogCQkJCUE4QTQ3MkEy
MTUxQTgyNUEwMDQxMjNGRiAvKiBGYXN0TWFsbG9jLmggKi8sCiAJCQkJQjM4RkQ3QkMxNjg5NTNF
ODAwNjVDOTY5IC8qIEZlYXR1cmVEZWZpbmVzLmggKi8sCisJCQkJNTU5N0Y4MkUxRDk0Qjk5NzAw
NjZCQzIxIC8qIEZpeGVkUXVldWUuaCAqLywKIAkJCQkwRjlEMzM1QjE2NURCQTczMDA1QUQzODcg
LyogRmlsZVByaW50U3RyZWFtLmNwcCAqLywKIAkJCQkwRjlEMzM1QzE2NURCQTczMDA1QUQzODcg
LyogRmlsZVByaW50U3RyZWFtLmggKi8sCiAJCQkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8q
IEZsaXBCeXRlcy5oICovLApAQCAtOTkwLDYgKzk5OCw3IEBACiAJCQkJMkNERUQwRjIxODExNUM4
NTAwNERCQTcwIC8qIFJ1bkxvb3AuaCAqLywKIAkJCQkxNDY5NDE5MDE2RUFBRjZEMDAyNEUxNDYg
LyogUnVuTG9vcFRpbWVyLmggKi8sCiAJCQkJMTQ2OTQxOTExNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1
bkxvb3BUaW1lckNGLmNwcCAqLywKKwkJCQk1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU2Fm
ZUZpeGVkUXVldWUuaCAqLywKIAkJCQkxNEYzQjBGNjE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJh
dGVkQXJpdGhtZXRpYy5oICovLAogCQkJCTE0Njk0MTk0MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hl
ZHVsZVBhaXIuaCAqLywKIAkJCQkxNDY5NDE5ODE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQ
YWlyQ0YuY3BwICovLApAQCAtMTM0Miw2ICsxMzUxLDcgQEAKIAkJCQlGRTgyMjUzMTFCMkExRTVC
MDBCQTY4RkQgLyogTmFrZWRQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEQ4NUI0MTcyMzRD
QzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VGMTUxQTgy
NUIwMDQxMjNGRiAvKiBOb25jb3B5YWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU5N0Y4MzEx
RDk0Qjk5NzAwNjZCQzIxIC8qIEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFNDY1
MTZFMTlEQjFGQjQwMDNFQ0EwNSAvKiBOU01hcFRhYmxlU1BJLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzNGNTE1MUE4MjVCMDA0MTIzRkYgLyogTnVtYmVyT2ZDb3Jlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJN0UyOUMzM0UxNUZGRDc5QjAwNTE2RDYxIC8qIE9iamNSdW50aW1lRXh0cmFzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE0MDMsNiArMTQxMyw3IEBACiAJCQkJQzRGOEE5MzcxOUM2NUVC
NDAwQjJCMTVEIC8qIFN0b3B3YXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2QkI3NjkxNjJG
MzAwNTAwREQxNkRCIC8qIFN0cmVhbUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
M0IxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTU5N0Y4MkYxRDk0Qjk5NzAwNjZCQzIxIC8qIFNhZmVGaXhlZFF1ZXVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzQzRDE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVpbGRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDMwQjQ3ODkxQUFBQUMxQTAwMTIyM0RBIC8qIFN0cmluZ0NvbW1vbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0UxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0Nv
bmNhdGVuYXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTE0NDQsNiArMTQ1NSw3IEBACiAJCQkJQThB
NDc0N0UxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0N0YxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0ODAxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTU5N0Y4MzAxRDk0Qjk5NzAwNjZCQzIxIC8qIEJyb2FkY2FzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTc0Q0ZDOEUxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxRkE0N0M4QjE1MjUwMkRBMDA1NjhEMUIgLyogV2ViQ29yZVRocmVhZC5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Ccm9hZGNhc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Ccm9hZGNhc3QuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9Ccm9hZGNhc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitjbGFzcyBCcm9hZGNhc3QgeworcHVibGljOgorICAgIEJyb2FkY2FzdChjb25zdCBU
JiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1faW5pdFZhbHVl
KHZhbHVlKQorICAgICAgICAsIG1fbWluVmFsdWUodmFsdWUpCisgICAgICAgICwgbV9tYXhWYWx1
ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgQnJvYWRjYXN0KGNvbnN0IFQmIHZhbHVlLCBj
b25zdCBUJiBtaW5WYWx1ZSwgY29uc3QgVCYgbWF4VmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2
YWx1ZSkKKyAgICAgICAgLCBtX2luaXRWYWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX21pblZhbHVl
KG1pblZhbHVlKQorICAgICAgICAsIG1fbWF4VmFsdWUobWF4VmFsdWUpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgcmVzZXQoKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91
bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIHN0YXJ0aW5nIHNoYXJpbmcgdGhpcyBzZW1hcGhvcmUg
d2l0aCBvdGhlciB0aHJlYWRzLgorICAgICAgICBtX3ZhbHVlID0gbV9pbml0VmFsdWU7CisgICAg
ICAgIG1faXNTaHV0ZG93biA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2h1dGRv
d24oKSBjb25zdCB7IHJldHVybiBtX2lzU2h1dGRvd247IH0KKworICAgIG9wZXJhdG9yIFQoKQor
ICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrSG9sZGVyKG1fbXV0ZXgpOworICAgICAgICBy
ZXR1cm4gbV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrSG9sZGVyKG1fbXV0ZXgpOwor
ICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgVCBvcGVy
YXRvcj0oY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xk
ZXIobV9tdXRleCk7CisgICAgICAgIG1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgbV9jb25kaXRp
b24ubm90aWZ5QWxsKCk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzaHV0ZG93bigpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9t
dXRleCk7CisgICAgICAgIG1faXNTaHV0ZG93biA9IHRydWU7CisgICAgICAgIG1fY29uZGl0aW9u
Lm5vdGlmeUFsbCgpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsRXF1YWwoY29uc3QgVCYg
dmFsdWUpCisgICAgeworICAgICAgICB3YWl0VW50aWwoW3RoaXMsIHZhbHVlXSgpIHsgcmV0dXJu
IG1faXNTaHV0ZG93biB8fCBtX3ZhbHVlID09IHZhbHVlOyB9KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkZWNyZW1lbnQoKQorICAgIHsKKyAgICAgICAgd2FpdFVudGlsQW5kTm90aWZ5KFt0aGlz
XSgpIHsgcmV0dXJuIG1faXNTaHV0ZG93biB8fCAobV92YWx1ZSA+IG1fbWluVmFsdWUgJiYgbV92
YWx1ZS0tKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBpbmNyZW1lbnQoKQorICAgIHsKKyAgICAg
ICAgd2FpdFVudGlsQW5kTm90aWZ5KFt0aGlzXSgpIHsgcmV0dXJuIG1faXNTaHV0ZG93biB8fCAo
bV92YWx1ZSA8IG1fbWF4VmFsdWUgJiYgKyttX3ZhbHVlKTsgfSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCB3YWl0VW50aWwoY29u
c3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrSG9s
ZGVyKG1fbXV0ZXgpOworICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbXV0ZXgsIHByZWRpY2F0
ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHdh
aXRVbnRpbEFuZE5vdGlmeShjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpCisgICAgeworICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIG1fY29uZGl0aW9uLndh
aXQobV9tdXRleCwgcHJlZGljYXRlKTsKKyAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7
CisgICAgfQorCisgICAgTG9jayBtX211dGV4OworICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsK
KyAgICBUIG1fdmFsdWUsIG1faW5pdFZhbHVlLCBtX21pblZhbHVlLCBtX21heFZhbHVlOworICAg
IGJvb2wgbV9pc1NodXRkb3duIHsgZmFsc2UgfTsKK307CisgICAgCit9CisKK3VzaW5nIFdURjo6
QnJvYWRjYXN0OwpJbmRleDogU291cmNlL1dURi93dGYvRml4ZWRRdWV1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0ZpeGVkUXVldWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9GaXhlZFF1ZXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK25hbWVzcGFjZSBXVEYgeworICAgIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEJ1
ZmZlclNpemU+CitjbGFzcyBGaXhlZFF1ZXVlIHsKK3B1YmxpYzoKKyAgICBGaXhlZFF1ZXVlKCkK
KyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoISgoQnVmZmVyU2l6ZSAtIDEpICYgQnVmZmVy
U2l6ZSksICJCdWZmZXJTaXplIG11c3QgYmUgcG93ZXIgb2YgMi4iKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9pc0VtcHR5OyB9CisgICAgYm9vbCBp
c0Z1bGwoKSBjb25zdCB7IHJldHVybiAobV90YWlsICsgMSkgJSBCdWZmZXJTaXplID09IG1faGVh
ZDsgfQorICAgIAorICAgIGJvb2wgZW5xdWV1ZShjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmIChpc0Z1bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBp
ZiAoaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9pc0VtcHR5ID0gZmFsc2U7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fdGFpbCA9IChtX3RhaWwgKyAxKSAlIEJ1ZmZlclNpemU7CisKKyAg
ICAgICAgbV9idWZmZXJbbV90YWlsXSA9IHZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBkZXF1ZXVlKCkKKyAgICB7CisgICAgICAgIGlmIChpc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAobV9o
ZWFkID09IG1fdGFpbCkKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1faGVhZCA9IChtX2hlYWQgKyAxKSAlIEJ1ZmZlclNpemU7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBoZWFkKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVy
W21faGVhZF07CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX2lz
RW1wdHkgPSB0cnVlOworICAgICAgICBtX2hlYWQgPSBtX3RhaWwgPSAwOworICAgIH0KKworICAg
IHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBjb3VudCA9IDE7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGhlYWQgPSBtX2hlYWQ7IGhlYWQgIT0gbV90YWlsOyBoZWFkID0g
KGhlYWQgKyAxKSAlIEJ1ZmZlclNpemUpCisgICAgICAgICAgICArK2NvdW50OworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIGNvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc2l6ZV90
IG1faGVhZCB7IDAgfTsKKyAgICBzaXplX3QgbV90YWlsIHsgMCB9OworICAgIGJvb2wgbV9pc0Vt
cHR5IHsgdHJ1ZSB9OworICAgIFQgbV9idWZmZXJbQnVmZmVyU2l6ZV07Cit9OworCit9CisKK3Vz
aW5nIFdURjo6Rml4ZWRRdWV1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NhZmVGaXhlZFF1ZXVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2FmZUZpeGVkUXVldWUuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TYWZlRml4ZWRRdWV1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQnJvYWRjYXN0Lmg+CisjaW5j
bHVkZSA8d3RmL0ZpeGVkUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrZXIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBCdWZmZXJTaXplPgorY2xhc3MgU2FmZUZpeGVkUXVldWUgOiBwdWJsaWMgRml4ZWRR
dWV1ZTxULCBCdWZmZXJTaXplPiB7CitwdWJsaWM6CisgICAgU2FmZUZpeGVkUXVldWUoKQorICAg
ICAgICA6IG1fZW1wdHkoQnVmZmVyU2l6ZSwgMCwgQnVmZmVyU2l6ZSkKKyAgICAgICAgLCBtX2Z1
bGwoMCwgMCwgQnVmZmVyU2l6ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVzZXQo
KQorICAgIHsKKyAgICAgICAgbV9lbXB0eS5yZXNldCgpOworICAgICAgICBtX2Z1bGwucmVzZXQo
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaHV0ZG93bigpCisgICAgeworICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHRoaXMtPmNsZWFyKCk7CisgICAg
ICAgIG1fZW1wdHkuc2h1dGRvd24oKTsKKyAgICAgICAgbV9mdWxsLnNodXRkb3duKCk7CisgICAg
fQorICAgIAorICAgIGJvb2wgZW5xdWV1ZShjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IG1fZW1wdHkuZGVjcmVtZW50KCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAgICAgIGlmIChtX2VtcHR5LmlzU2h1dGRvd24o
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBGaXhlZFF1ZXVl
PFQsIEJ1ZmZlclNpemU+OjplbnF1ZXVlKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBtX2Z1
bGwuaW5jcmVtZW50KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIGJvb2wgZGVxdWV1ZShjb25zdCBGdW5jdG9y
JiBvcGVyYXRpb24pCisgICAgeworICAgICAgICBtX2Z1bGwuZGVjcmVtZW50KCk7CisgICAgICAg
IHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAg
ICAgIGlmIChtX2Z1bGwuaXNTaHV0ZG93bigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3BlcmF0aW9uKHRoaXMtPmhlYWQoKSk7Cisg
ICAgICAgICAgICBGaXhlZFF1ZXVlPFQsIEJ1ZmZlclNpemU+OjpkZXF1ZXVlKCk7CisgICAgICAg
IH0KKyAgICAgICAgbV9lbXB0eS5pbmNyZW1lbnQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIEJyb2FkY2FzdDxpbnQ+IG1fZW1wdHk7CisgICAgQnJvYWRjYXN0PGlu
dD4gbV9mdWxsOworICAgIExvY2sgbV9tdXRleDsKK307CisKK30KKwordXNpbmcgV1RGOjpTYWZl
Rml4ZWRRdWV1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289643</attachid>
            <date>2016-09-22 18:32:46 -0700</date>
            <delta_ts>2016-09-23 12:26:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162478-20160922182956.patch</filename>
            <type>text/plain</type>
            <size>17916</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDYyODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE2LTA5LTIyICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFNhZmVGaXhlZFF1ZXVlIGNs
YXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI0
NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgorCisgICAgICAgIDEuIEJyb2FkY2Fz
dDogSXQgaXMgZXF1aXZhbGVudCB0byBzdGQ6OmF0b21pYyBpbiB0aGUgYWRkaXRpb24gdG8gb3Ro
ZXIKKyAgICAgICAgICAgYmxvY2tpbmcgZnVuY3Rpb25zOiBpbmNyZW1lbnQoKSwgZGVjcmVtZW50
KCkgYW5kIHdhaXRVbnRpbEVxdWFsKCkuCisgICAgICAgIAorICAgICAgICAyLiBGaXhlZFF1ZXVl
OiBBIGNpcmN1bGFyIHF1ZXVlIChhLmsuYSBjaXJjdWxhciBidWZmZXIpLgorCisgICAgICAgIDMu
IFNhZmVGaXhlZFF1ZXVlOiBBIHJlZ3VsYXIgRml4ZWRRdWV1ZSBidXQgaXRzIGVucXVldWUoKSBh
bmQgZGVxdWV1ZSgpCisgICAgICAgICAgIGFyZSBjb250cm9sbGVkIGJ5IHR3byBCcm9hZGNhc3Rz
OiBtX2VtcHR5IGFuZCBtX2Z1bGwuIEFsc28gaXRzIGRlcXVldWUoKQorICAgICAgICAgICB0YWtl
cyBhIGZ1bmN0b3IgdG8gcHJvY2VzcyB0aGUgZWxlbWVudC10by1iZS1yZW1vdmVkIHNhZmVseS4K
KworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0
Zi9Ccm9hZGNhc3QuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6QnJvYWRjYXN0
KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0OjpyZXNldCk6CisgICAgICAgIChXVEY6OkJyb2Fk
Y2FzdDo6aXNTaHV0ZG93bik6CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6b3BlcmF0b3IgVCk6
CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkJy
b2FkY2FzdDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0OjpzaHV0ZG93bik6
CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6d2FpdFVudGlsRXF1YWwpOgorICAgICAgICAoV1RG
OjpCcm9hZGNhc3Q6OmRlY3JlbWVudCk6CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6aW5jcmVt
ZW50KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0Ojp3YWl0VW50aWwpOgorICAgICAgICAoV1RG
OjpCcm9hZGNhc3Q6OndhaXRVbnRpbEFuZE5vdGlmeSk6CisgICAgICAgICogd3RmL0ZpeGVkUXVl
dWUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkZpeGVkUXVldWU6OkZpeGVkUXVldWUpOgorICAg
ICAgICAoV1RGOjpGaXhlZFF1ZXVlOjppc0VtcHR5KToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1
ZTo6aXNGdWxsKToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1ZTo6ZW5xdWV1ZSk6CisgICAgICAg
IChXVEY6OkZpeGVkUXVldWU6OmRlcXVldWUpOgorICAgICAgICAoV1RGOjpGaXhlZFF1ZXVlOjpo
ZWFkKToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1ZTo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpG
aXhlZFF1ZXVlOjpzaXplKToKKyAgICAgICAgKiB3dGYvU2FmZUZpeGVkUXVldWUuaDogQWRkZWQu
CisgICAgICAgIChXVEY6OlNhZmVGaXhlZFF1ZXVlOjpTYWZlRml4ZWRRdWV1ZSk6CisgICAgICAg
IChXVEY6OlNhZmVGaXhlZFF1ZXVlOjpyZXNldCk6CisgICAgICAgIChXVEY6OlNhZmVGaXhlZFF1
ZXVlOjpzaHV0ZG93bik6CisgICAgICAgIChXVEY6OlNhZmVGaXhlZFF1ZXVlOjplbnF1ZXVlKToK
KyAgICAgICAgKFdURjo6U2FmZUZpeGVkUXVldWU6OmRlcXVldWUpOgorCiAyMDE2LTA5LTIyICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRmVuY2VzIG9uIHg4NiBz
aG91bGQgYmUgYSBsb3QgY2hlYXBlcgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDYyNTkpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDkgQEAKIAkJ
NTE1Rjc5NTYxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUY3OTU1MUNGRDNBNjkwMEND
RUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggKi87IH07CiAJCTUzOUVCMDYzMUQ1NTI4NDIwMEM4
MkVGNyAvKiBMRUJEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovOyB9
OwogCQk1NTMwNzFDQTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTMwNzFDOTFDNDA0MjcyMDAz
ODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi87IH07CisJCTU1OTdGODJGMUQ5NEI5OTcwMDY2QkMy
MSAvKiBTYWZlRml4ZWRRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTU5N0Y4MkMxRDk0Qjk5NzAwNjZCQzIxIC8qIFNhZmVGaXhlZFF1ZXVlLmgg
Ki87IH07CisJCTU1OTdGODMwMUQ5NEI5OTcwMDY2QkMyMSAvKiBCcm9hZGNhc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OTdGODJEMUQ5NEI5OTcw
MDY2QkMyMSAvKiBCcm9hZGNhc3QuaCAqLzsgfTsKKwkJNTU5N0Y4MzExRDk0Qjk5NzAwNjZCQzIx
IC8qIEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU1OTdGODJFMUQ5NEI5OTcwMDY2QkMyMSAvKiBGaXhlZFF1ZXVlLmggKi87IH07CiAJ
CTVDN0M4OEQ0MUQwQTNBMEEwMDlEMkY2RCAvKiBVbmlxdWVSZWYuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDN0M4OEQzMUQwQTNBMEEwMDlEMkY2RCAv
KiBVbmlxdWVSZWYuaCAqLzsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJv
bFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcwQTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgKi87IH07
CiAJCTcwQTk5M0ZGMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBBOTkzRkQxQUQ3MTUxMzAw
RkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmggKi87IH07CkBAIC00NjIsNiArNDY1LDkgQEAKIAkJ
NTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRRdWV1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMRUJEZWNvZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJV
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueUxSVUNhY2hlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAv
KiBTYWZlRml4ZWRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYWZl
Rml4ZWRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTk3RjgyRDFEOTRC
OTk3MDA2NkJDMjEgLyogQnJvYWRjYXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEJyb2FkY2FzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTk3RjgyRTFE
OTRCOTk3MDA2NkJDMjEgLyogRml4ZWRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaXhlZFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCNDMz
ODNBNUQwQjQ2M0M5NDMzRDkzMyAvKiBJbmRleE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbmRleE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzdD
ODhEMzFEMEEzQTBBMDA5RDJGNkQgLyogVW5pcXVlUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVuaXF1ZVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
RDI0N0I2MjE0Njg5Qjg2MDBFNzhCNzYgLyogbGliV1RGLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0g
MDsgcGF0aCA9IGxpYldURi5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpA
QCAtODQ3LDYgKzg1Myw3IEBACiAJCQkJQThBNDcyNjQxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb2Nr
U3RhY2suaCAqLywKIAkJCQlBOEE0NzI2NTE1MUE4MjVBMDA0MTIzRkYgLyogQmxvb21GaWx0ZXIu
aCAqLywKIAkJCQkwRjkzMjc0QTFDMTdGNEI3MDBDRjY1NjQgLyogQm94LmggKi8sCisJCQkJNTU5
N0Y4MkQxRDk0Qjk5NzAwNjZCQzIxIC8qIEJyb2FkY2FzdC5oICovLAogCQkJCTBGNDU3MDQ0MUJF
ODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0LmggKi8sCiAJCQkJQThBNDcyNjcxNTFBODI1QTAw
NDEyM0ZGIC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggKi8sCiAJCQkJRUI5NUUxRUYxNjFBNzI0
MTAwODlBMkY1IC8qIEJ5dGVPcmRlci5oICovLApAQCAtODg3LDYgKzg5NCw3IEBACiAJCQkJQThB
NDcyQTExNTFBODI1QTAwNDEyM0ZGIC8qIEZhc3RNYWxsb2MuY3BwICovLAogCQkJCUE4QTQ3MkEy
MTUxQTgyNUEwMDQxMjNGRiAvKiBGYXN0TWFsbG9jLmggKi8sCiAJCQkJQjM4RkQ3QkMxNjg5NTNF
ODAwNjVDOTY5IC8qIEZlYXR1cmVEZWZpbmVzLmggKi8sCisJCQkJNTU5N0Y4MkUxRDk0Qjk5NzAw
NjZCQzIxIC8qIEZpeGVkUXVldWUuaCAqLywKIAkJCQkwRjlEMzM1QjE2NURCQTczMDA1QUQzODcg
LyogRmlsZVByaW50U3RyZWFtLmNwcCAqLywKIAkJCQkwRjlEMzM1QzE2NURCQTczMDA1QUQzODcg
LyogRmlsZVByaW50U3RyZWFtLmggKi8sCiAJCQkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8q
IEZsaXBCeXRlcy5oICovLApAQCAtOTkwLDYgKzk5OCw3IEBACiAJCQkJMkNERUQwRjIxODExNUM4
NTAwNERCQTcwIC8qIFJ1bkxvb3AuaCAqLywKIAkJCQkxNDY5NDE5MDE2RUFBRjZEMDAyNEUxNDYg
LyogUnVuTG9vcFRpbWVyLmggKi8sCiAJCQkJMTQ2OTQxOTExNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1
bkxvb3BUaW1lckNGLmNwcCAqLywKKwkJCQk1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU2Fm
ZUZpeGVkUXVldWUuaCAqLywKIAkJCQkxNEYzQjBGNjE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJh
dGVkQXJpdGhtZXRpYy5oICovLAogCQkJCTE0Njk0MTk0MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hl
ZHVsZVBhaXIuaCAqLywKIAkJCQkxNDY5NDE5ODE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQ
YWlyQ0YuY3BwICovLApAQCAtMTM0Miw2ICsxMzUxLDcgQEAKIAkJCQlGRTgyMjUzMTFCMkExRTVC
MDBCQTY4RkQgLyogTmFrZWRQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEQ4NUI0MTcyMzRD
QzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VGMTUxQTgy
NUIwMDQxMjNGRiAvKiBOb25jb3B5YWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU5N0Y4MzEx
RDk0Qjk5NzAwNjZCQzIxIC8qIEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFNDY1
MTZFMTlEQjFGQjQwMDNFQ0EwNSAvKiBOU01hcFRhYmxlU1BJLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzNGNTE1MUE4MjVCMDA0MTIzRkYgLyogTnVtYmVyT2ZDb3Jlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJN0UyOUMzM0UxNUZGRDc5QjAwNTE2RDYxIC8qIE9iamNSdW50aW1lRXh0cmFzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE0MDMsNiArMTQxMyw3IEBACiAJCQkJQzRGOEE5MzcxOUM2NUVC
NDAwQjJCMTVEIC8qIFN0b3B3YXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2QkI3NjkxNjJG
MzAwNTAwREQxNkRCIC8qIFN0cmVhbUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
M0IxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTU5N0Y4MkYxRDk0Qjk5NzAwNjZCQzIxIC8qIFNhZmVGaXhlZFF1ZXVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzQzRDE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVpbGRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDMwQjQ3ODkxQUFBQUMxQTAwMTIyM0RBIC8qIFN0cmluZ0NvbW1vbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0UxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0Nv
bmNhdGVuYXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTE0NDQsNiArMTQ1NSw3IEBACiAJCQkJQThB
NDc0N0UxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0N0YxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0ODAxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTU5N0Y4MzAxRDk0Qjk5NzAwNjZCQzIxIC8qIEJyb2FkY2FzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTc0Q0ZDOEUxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxRkE0N0M4QjE1MjUwMkRBMDA1NjhEMUIgLyogV2ViQ29yZVRocmVhZC5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Ccm9hZGNhc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Ccm9hZGNhc3QuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9Ccm9hZGNhc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitjbGFzcyBCcm9hZGNhc3QgeworcHVibGljOgorICAgIEJyb2FkY2FzdChjb25zdCBU
JiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1faW5pdFZhbHVl
KHZhbHVlKQorICAgICAgICAsIG1fbWluVmFsdWUodmFsdWUpCisgICAgICAgICwgbV9tYXhWYWx1
ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgQnJvYWRjYXN0KGNvbnN0IFQmIHZhbHVlLCBj
b25zdCBUJiBtaW5WYWx1ZSwgY29uc3QgVCYgbWF4VmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2
YWx1ZSkKKyAgICAgICAgLCBtX2luaXRWYWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX21pblZhbHVl
KG1pblZhbHVlKQorICAgICAgICAsIG1fbWF4VmFsdWUobWF4VmFsdWUpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgcmVzZXQoKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91
bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIHN0YXJ0aW5nIHNoYXJpbmcgdGhpcyBzZW1hcGhvcmUg
d2l0aCBvdGhlciB0aHJlYWRzLgorICAgICAgICBtX3ZhbHVlID0gbV9pbml0VmFsdWU7CisgICAg
ICAgIG1faXNTaHV0ZG93biA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2h1dGRv
d24oKSBjb25zdCB7IHJldHVybiBtX2lzU2h1dGRvd247IH0KKworICAgIG9wZXJhdG9yIFQoKQor
ICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrSG9sZGVyKG1fbXV0ZXgpOworICAgICAgICBy
ZXR1cm4gbV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrSG9sZGVyKG1fbXV0ZXgpOwor
ICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgVCBvcGVy
YXRvcj0oY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xk
ZXIobV9tdXRleCk7CisgICAgICAgIG1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgbV9jb25kaXRp
b24ubm90aWZ5QWxsKCk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzaHV0ZG93bigpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9t
dXRleCk7CisgICAgICAgIG1faXNTaHV0ZG93biA9IHRydWU7CisgICAgICAgIG1fY29uZGl0aW9u
Lm5vdGlmeUFsbCgpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsRXF1YWwoY29uc3QgVCYg
dmFsdWUpCisgICAgeworICAgICAgICB3YWl0VW50aWwoW3RoaXMsIHZhbHVlXSgpIHsgcmV0dXJu
IG1faXNTaHV0ZG93biB8fCBtX3ZhbHVlID09IHZhbHVlOyB9KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkZWNyZW1lbnQoKQorICAgIHsKKyAgICAgICAgd2FpdFVudGlsQW5kTm90aWZ5KFt0aGlz
XSgpIHsgcmV0dXJuIG1faXNTaHV0ZG93biB8fCAobV92YWx1ZSA+IG1fbWluVmFsdWUgJiYgbV92
YWx1ZS0tKTsgfSk7CisgICAgfQorCisgICAgdm9pZCBpbmNyZW1lbnQoKQorICAgIHsKKyAgICAg
ICAgd2FpdFVudGlsQW5kTm90aWZ5KFt0aGlzXSgpIHsgcmV0dXJuIG1faXNTaHV0ZG93biB8fCAo
bV92YWx1ZSA8IG1fbWF4VmFsdWUgJiYgKyttX3ZhbHVlKTsgfSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCB3YWl0VW50aWwoY29u
c3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrSG9s
ZGVyKG1fbXV0ZXgpOworICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbXV0ZXgsIHByZWRpY2F0
ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHdh
aXRVbnRpbEFuZE5vdGlmeShjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpCisgICAgeworICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIG1fY29uZGl0aW9uLndh
aXQobV9tdXRleCwgcHJlZGljYXRlKTsKKyAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7
CisgICAgfQorCisgICAgTG9jayBtX211dGV4OworICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsK
KyAgICBUIG1fdmFsdWUsIG1faW5pdFZhbHVlLCBtX21pblZhbHVlLCBtX21heFZhbHVlOworICAg
IGJvb2wgbV9pc1NodXRkb3duIHsgZmFsc2UgfTsKK307CisgICAgCit9CisKK3VzaW5nIFdURjo6
QnJvYWRjYXN0OwpJbmRleDogU291cmNlL1dURi93dGYvRml4ZWRRdWV1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0ZpeGVkUXVldWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9GaXhlZFF1ZXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK25hbWVzcGFjZSBXVEYgeworICAgIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEJ1
ZmZlclNpemU+CitjbGFzcyBGaXhlZFF1ZXVlIHsKK3B1YmxpYzoKKyAgICBGaXhlZFF1ZXVlKCkK
KyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoISgoQnVmZmVyU2l6ZSAtIDEpICYgQnVmZmVy
U2l6ZSksICJCdWZmZXJTaXplIG11c3QgYmUgcG93ZXIgb2YgMi4iKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9pc0VtcHR5OyB9CisgICAgYm9vbCBp
c0Z1bGwoKSBjb25zdCB7IHJldHVybiAobV90YWlsICsgMSkgJSBCdWZmZXJTaXplID09IG1faGVh
ZDsgfQorICAgIAorICAgIGJvb2wgZW5xdWV1ZShjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmIChpc0Z1bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBp
ZiAoaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9pc0VtcHR5ID0gZmFsc2U7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fdGFpbCA9IChtX3RhaWwgKyAxKSAlIEJ1ZmZlclNpemU7CisKKyAg
ICAgICAgbV9idWZmZXJbbV90YWlsXSA9IHZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBkZXF1ZXVlKCkKKyAgICB7CisgICAgICAgIGlmIChpc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAobV9o
ZWFkID09IG1fdGFpbCkKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1faGVhZCA9IChtX2hlYWQgKyAxKSAlIEJ1ZmZlclNpemU7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBoZWFkKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVy
W21faGVhZF07CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX2lz
RW1wdHkgPSB0cnVlOworICAgICAgICBtX2hlYWQgPSBtX3RhaWwgPSAwOworICAgIH0KKworICAg
IHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBjb3VudCA9IDE7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGhlYWQgPSBtX2hlYWQ7IGhlYWQgIT0gbV90YWlsOyBoZWFkID0g
KGhlYWQgKyAxKSAlIEJ1ZmZlclNpemUpCisgICAgICAgICAgICArK2NvdW50OworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIGNvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc2l6ZV90
IG1faGVhZCB7IDAgfTsKKyAgICBzaXplX3QgbV90YWlsIHsgMCB9OworICAgIGJvb2wgbV9pc0Vt
cHR5IHsgdHJ1ZSB9OworICAgIFQgbV9idWZmZXJbQnVmZmVyU2l6ZV07Cit9OworCit9CisKK3Vz
aW5nIFdURjo6Rml4ZWRRdWV1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NhZmVGaXhlZFF1ZXVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2FmZUZpeGVkUXVldWUuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TYWZlRml4ZWRRdWV1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQnJvYWRjYXN0Lmg+CisjaW5j
bHVkZSA8d3RmL0ZpeGVkUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrZXIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBCdWZmZXJTaXplPgorY2xhc3MgU2FmZUZpeGVkUXVldWUgOiBwdWJsaWMgRml4ZWRR
dWV1ZTxULCBCdWZmZXJTaXplPiB7CitwdWJsaWM6CisgICAgU2FmZUZpeGVkUXVldWUoKQorICAg
ICAgICA6IG1fZW1wdHkoQnVmZmVyU2l6ZSwgMCwgQnVmZmVyU2l6ZSkKKyAgICAgICAgLCBtX2Z1
bGwoMCwgMCwgQnVmZmVyU2l6ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVzZXQo
KQorICAgIHsKKyAgICAgICAgbV9lbXB0eS5yZXNldCgpOworICAgICAgICBtX2Z1bGwucmVzZXQo
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaHV0ZG93bigpCisgICAgeworICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHRoaXMtPmNsZWFyKCk7CisgICAg
ICAgIG1fZW1wdHkuc2h1dGRvd24oKTsKKyAgICAgICAgbV9mdWxsLnNodXRkb3duKCk7CisgICAg
fQorICAgIAorICAgIGJvb2wgZW5xdWV1ZShjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IG1fZW1wdHkuZGVjcmVtZW50KCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAgICAgIGlmIChtX2VtcHR5LmlzU2h1dGRvd24o
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBGaXhlZFF1ZXVl
PFQsIEJ1ZmZlclNpemU+OjplbnF1ZXVlKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBtX2Z1
bGwuaW5jcmVtZW50KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIGJvb2wgZGVxdWV1ZShjb25zdCBGdW5jdG9y
JiBvcGVyYXRpb24pCisgICAgeworICAgICAgICBtX2Z1bGwuZGVjcmVtZW50KCk7CisgICAgICAg
IHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAg
ICAgIGlmIChtX2Z1bGwuaXNTaHV0ZG93bigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3BlcmF0aW9uKHRoaXMtPmhlYWQoKSk7Cisg
ICAgICAgICAgICBGaXhlZFF1ZXVlPFQsIEJ1ZmZlclNpemU+OjpkZXF1ZXVlKCk7CisgICAgICAg
IH0KKyAgICAgICAgbV9lbXB0eS5pbmNyZW1lbnQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEJyb2FkY2FzdDxpbnQ+IG1fZW1wdHk7CisgICAgQnJvYWRj
YXN0PGludD4gbV9mdWxsOworICAgIExvY2sgbV9tdXRleDsKK307CisKK30KKwordXNpbmcgV1RG
OjpTYWZlRml4ZWRRdWV1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289695</attachid>
            <date>2016-09-23 12:26:51 -0700</date>
            <delta_ts>2016-09-23 12:57:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162478-20160923122359.patch</filename>
            <type>text/plain</type>
            <size>33921</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDYyODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE2LTA5LTIzICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFN5bmNocm9uaXplZEZpeGVk
UXVldWUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjQ3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGUgZm9sbG93aW5nIGNsYXNzZXM6CisKKyAgICAgICAgMS4g
QnJvYWRjYXN0OiBJdCBpcyBlcXVpdmFsZW50IHRvIHN0ZDo6YXRvbWljIGluIHRoZSBhZGRpdGlv
biB0byBvdGhlcgorICAgICAgICAgICBibG9ja2luZyBmdW5jdGlvbnM6IGluY3JlbWVudCgpLCBk
ZWNyZW1lbnQoKSBhbmQgd2FpdFVudGlsRXF1YWwoKS4KKworICAgICAgICAyLiBGaXhlZFF1ZXVl
OiBBIGNpcmN1bGFyIHF1ZXVlIChhLmsuYSBjaXJjdWxhciBidWZmZXIpLgorCisgICAgICAgIDMu
IFNhZmVGaXhlZFF1ZXVlOiBBIHJlZ3VsYXIgRml4ZWRRdWV1ZSBidXQgaXRzIGVucXVldWUoKSBh
bmQgZGVxdWV1ZSgpCisgICAgICAgICAgIGFyZSBjb250cm9sbGVkIGJ5IHR3byBCcm9hZGNhc3Rz
OiBtX2VtcHR5IGFuZCBtX2Z1bGwuIEFsc28gaXRzIGRlcXVldWUoKQorICAgICAgICAgICB0YWtl
cyBhIGZ1bmN0b3IgdG8gcHJvY2VzcyB0aGUgZWxlbWVudC10by1iZS1yZW1vdmVkIHNhZmVseS4K
KworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0
Zi9Ccm9hZGNhc3QuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6QnJvYWRjYXN0
KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0OjpyZXNldCk6CisgICAgICAgIChXVEY6OkJyb2Fk
Y2FzdDo6aXNTaHV0ZG93bik6CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6b3BlcmF0b3IgVCk6
CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkJy
b2FkY2FzdDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0OjpzaHV0ZG93bik6
CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6d2FpdFVudGlsRXF1YWwpOgorICAgICAgICAoV1RG
OjpCcm9hZGNhc3Q6OmRlY3JlbWVudCk6CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6aW5jcmVt
ZW50KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0Ojp3YWl0VW50aWwpOgorICAgICAgICAoV1RG
OjpCcm9hZGNhc3Q6OndhaXRVbnRpbEFuZE5vdGlmeSk6CisgICAgICAgICogd3RmL0ZpeGVkUXVl
dWUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkZpeGVkUXVldWU6OkZpeGVkUXVldWUpOgorICAg
ICAgICAoV1RGOjpGaXhlZFF1ZXVlOjppc0VtcHR5KToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1
ZTo6aXNGdWxsKToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1ZTo6ZW5xdWV1ZSk6CisgICAgICAg
IChXVEY6OkZpeGVkUXVldWU6OmRlcXVldWUpOgorICAgICAgICAoV1RGOjpGaXhlZFF1ZXVlOjpo
ZWFkKToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1ZTo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpG
aXhlZFF1ZXVlOjpzaXplKToKKyAgICAgICAgKiB3dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6U3luY2hyb25p
emVkRml4ZWRRdWV1ZSk6CisgICAgICAgIChXVEY6OlN5bmNocm9uaXplZEZpeGVkUXVldWU6OnJl
c2V0KToKKyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6c2h1dGRvd24pOgor
ICAgICAgICAoV1RGOjpTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlOjplbnF1ZXVlKToKKyAgICAgICAg
KFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6ZGVxdWV1ZSk6CisKIDIwMTYtMDktMjIgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGZW5jZXMgb24geDg2IHNo
b3VsZCBiZSBhIGxvdCBjaGVhcGVyCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNjI1OSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksOSBAQAogCQk1
MTVGNzk1NjFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NF
RDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCAqLzsgfTsKIAkJNTM5RUIwNjMxRDU1Mjg0MjAwQzgy
RUY3IC8qIExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi87IH07
CiAJCTU1MzA3MUNBMUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MzA3MUM5MUM0MDQyNzIwMDM4
NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLzsgfTsKKwkJNTU5N0Y4MkYxRDk0Qjk5NzAwNjZCQzIx
IC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6
ZWRGaXhlZFF1ZXVlLmggKi87IH07CisJCTU1OTdGODMwMUQ5NEI5OTcwMDY2QkMyMSAvKiBCcm9h
ZGNhc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1
OTdGODJEMUQ5NEI5OTcwMDY2QkMyMSAvKiBCcm9hZGNhc3QuaCAqLzsgfTsKKwkJNTU5N0Y4MzEx
RDk0Qjk5NzAwNjZCQzIxIC8qIEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OTdGODJFMUQ5NEI5OTcwMDY2QkMyMSAvKiBGaXhlZFF1
ZXVlLmggKi87IH07CiAJCTVDN0M4OEQ0MUQwQTNBMEEwMDlEMkY2RCAvKiBVbmlxdWVSZWYuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDN0M4OEQzMUQw
QTNBMEEwMDlEMkY2RCAvKiBVbmlxdWVSZWYuaCAqLzsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAw
RkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwQTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdp
c3RyeS5jcHAgKi87IH07CiAJCTcwQTk5M0ZGMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdp
c3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBB
OTkzRkQxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmggKi87IH07CkBAIC00NjIs
NiArNDY1LDkgQEAKIAkJNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVl
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRRdWV1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzlFQjA2MjFENTUyODQyMDBDODJFRjcg
LyogTEVCRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMRUJEZWNv
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MzA3MUM5MUM0MDQyNzIwMDM4
NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGlueUxSVUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1OTdGODJDMUQ5
NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9uaXplZEZpeGVkUXVldWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTU5N0Y4MkQxRDk0Qjk5NzAwNjZCQzIxIC8qIEJyb2FkY2FzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCcm9hZGNhc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU5N0Y4MkUxRDk0Qjk5NzAwNjZCQzIxIC8qIEZpeGVkUXVl
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRml4ZWRRdWV1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjQzMzgzQTVEMEI0NjNDOTQzM0Q5MzMgLyogSW5k
ZXhNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhNYXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM3Qzg4RDMxRDBBM0EwQTAwOUQyRjZEIC8qIFVu
aXF1ZVJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmlxdWVSZWYuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQyNDdCNjIxNDY4OUI4NjAwRTc4Qjc2IC8q
IGxpYldURi5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJXVEYuYTsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTg0Nyw2ICs4NTMsNyBAQAogCQkJCUE4
QTQ3MjY0MTUxQTgyNUEwMDQxMjNGRiAvKiBCbG9ja1N0YWNrLmggKi8sCiAJCQkJQThBNDcyNjUx
NTFBODI1QTAwNDEyM0ZGIC8qIEJsb29tRmlsdGVyLmggKi8sCiAJCQkJMEY5MzI3NEExQzE3RjRC
NzAwQ0Y2NTY0IC8qIEJveC5oICovLAorCQkJCTU1OTdGODJEMUQ5NEI5OTcwMDY2QkMyMSAvKiBC
cm9hZGNhc3QuaCAqLywKIAkJCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29y
dC5oICovLAogCQkJCUE4QTQ3MjY3MTUxQTgyNUEwMDQxMjNGRiAvKiBCdW1wUG9pbnRlckFsbG9j
YXRvci5oICovLAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5QTJGNSAvKiBCeXRlT3JkZXIuaCAq
LywKQEAgLTg4Nyw2ICs4OTQsNyBAQAogCQkJCUE4QTQ3MkExMTUxQTgyNUEwMDQxMjNGRiAvKiBG
YXN0TWFsbG9jLmNwcCAqLywKIAkJCQlBOEE0NzJBMjE1MUE4MjVBMDA0MTIzRkYgLyogRmFzdE1h
bGxvYy5oICovLAogCQkJCUIzOEZEN0JDMTY4OTUzRTgwMDY1Qzk2OSAvKiBGZWF0dXJlRGVmaW5l
cy5oICovLAorCQkJCTU1OTdGODJFMUQ5NEI5OTcwMDY2QkMyMSAvKiBGaXhlZFF1ZXVlLmggKi8s
CiAJCQkJMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5jcHAgKi8s
CiAJCQkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5oICovLAog
CQkJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLywKQEAgLTk5MCw2
ICs5OTgsNyBAQAogCQkJCTJDREVEMEYyMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmggKi8s
CiAJCQkJMTQ2OTQxOTAxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oICovLAogCQkJ
CTE0Njk0MTkxMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXJDRi5jcHAgKi8sCisJCQkJ
NTU5N0Y4MkMxRDk0Qjk5NzAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCAqLywK
IAkJCQkxNEYzQjBGNjE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oICov
LAogCQkJCTE0Njk0MTk0MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCAqLywKIAkJ
CQkxNDY5NDE5ODE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwICovLApAQCAt
MTM0Miw2ICsxMzUxLDcgQEAKIAkJCQlGRTgyMjUzMTFCMkExRTVCMDBCQTY4RkQgLyogTmFrZWRQ
dHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VGMTUxQTgyNUIwMDQxMjNGRiAvKiBOb25j
b3B5YWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU5N0Y4MzExRDk0Qjk5NzAwNjZCQzIxIC8q
IEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFNDY1MTZFMTlEQjFGQjQwMDNFQ0Ew
NSAvKiBOU01hcFRhYmxlU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGNTE1MUE4MjVC
MDA0MTIzRkYgLyogTnVtYmVyT2ZDb3Jlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0UyOUMzM0Ux
NUZGRDc5QjAwNTE2RDYxIC8qIE9iamNSdW50aW1lRXh0cmFzLmggaW4gSGVhZGVycyAqLywKQEAg
LTE0MDMsNiArMTQxMyw3IEBACiAJCQkJQzRGOEE5MzcxOUM2NUVCNDAwQjJCMTVEIC8qIFN0b3B3
YXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2QkI3NjkxNjJGMzAwNTAwREQxNkRCIC8qIFN0
cmVhbUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0IxNTFBODI1QjAwNDEyM0ZG
IC8qIFN0cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU5N0Y4MkYxRDk0Qjk5NzAw
NjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDNEMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MzBCNDc4OTFBQUFBQzFBMDAxMjIzREEgLyogU3RyaW5nQ29tbW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQzRTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQ29uY2F0ZW5hdGUu
aCBpbiBIZWFkZXJzICovLApAQCAtMTQ0NCw2ICsxNDU1LDcgQEAKIAkJCQlBOEE0NzQ3RTE1MUE4
MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ3RjE1MUE4
MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4
MDE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NTk3Rjgz
MDFEOTRCOTk3MDA2NkJDMjEgLyogQnJvYWRjYXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzRD
RkM4RTE2QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
NTAxNjQxQkIyNThENTAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFGQTQ3QzhCMTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmggaW4gSGVhZGVycyAq
LywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jyb2FkY2FzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0Jyb2FkY2FzdC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Jy
b2FkY2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3Rm
L0xvY2tlci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIEJyb2FkY2FzdCB7CitwdWJsaWM6CisgICAgQnJvYWRjYXN0KGNvbnN0IFQmIHZhbHVlKQor
ICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAgICwgbV9pbml0VmFsdWUodmFsdWUpCisg
ICAgICAgICwgbV9taW5WYWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX21heFZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICB9CisKKyAgICBCcm9hZGNhc3QoY29uc3QgVCYgdmFsdWUsIGNvbnN0IFQmIG1p
blZhbHVlLCBjb25zdCBUJiBtYXhWYWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAg
ICAgICAsIG1faW5pdFZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fbWluVmFsdWUobWluVmFsdWUp
CisgICAgICAgICwgbV9tYXhWYWx1ZShtYXhWYWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCByZXNldCgpCisgICAgeworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBiZWZvcmUgc3RhcnRpbmcgc2hhcmluZyB0aGlzIHNlbWFwaG9yZSB3aXRoIG90aGVy
IHRocmVhZHMuCisgICAgICAgIG1fdmFsdWUgPSBtX2luaXRWYWx1ZTsKKyAgICAgICAgbV9pc1No
dXRkb3duID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTaHV0ZG93bigpIGNvbnN0
IHsgcmV0dXJuIG1faXNTaHV0ZG93bjsgfQorCisgICAgb3BlcmF0b3IgVCgpCisgICAgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgdmFsdWUpCisg
ICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHJl
dHVybiBtX3ZhbHVlID09IHZhbHVlOworICAgIH0KKyAgICAKKyAgICBUIG9wZXJhdG9yPShjb25z
dCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4
KTsKKyAgICAgICAgbV92YWx1ZSA9IHZhbHVlOworICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlB
bGwoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNodXRk
b3duKCkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAg
ICAgICAgbV9pc1NodXRkb3duID0gdHJ1ZTsKKyAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxs
KCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxFcXVhbChjb25zdCBUJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHdhaXRVbnRpbChbdGhpcywgdmFsdWVdKCkgeyByZXR1cm4gbV9pc1NodXRk
b3duIHx8IG1fdmFsdWUgPT0gdmFsdWU7IH0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlY3Jl
bWVudCgpCisgICAgeworICAgICAgICB3YWl0VW50aWxBbmROb3RpZnkoW3RoaXNdKCkgeyByZXR1
cm4gbV9pc1NodXRkb3duIHx8IChtX3ZhbHVlID4gbV9taW5WYWx1ZSAmJiBtX3ZhbHVlLS0pOyB9
KTsKKyAgICB9CisKKyAgICB2b2lkIGluY3JlbWVudCgpCisgICAgeworICAgICAgICB3YWl0VW50
aWxBbmROb3RpZnkoW3RoaXNdKCkgeyByZXR1cm4gbV9pc1NodXRkb3duIHx8IChtX3ZhbHVlIDwg
bV9tYXhWYWx1ZSAmJiArK21fdmFsdWUpOyB9KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHdhaXRVbnRpbChjb25zdCBGdW5jdG9y
JiBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRl
eCk7CisgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9tdXRleCwgcHJlZGljYXRlKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgd2FpdFVudGlsQW5k
Tm90aWZ5KGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIExvY2tIb2xk
ZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX211dGV4
LCBwcmVkaWNhdGUpOworICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICB9CisK
KyAgICBMb2NrIG1fbXV0ZXg7CisgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAgIFQgbV92
YWx1ZSwgbV9pbml0VmFsdWUsIG1fbWluVmFsdWUsIG1fbWF4VmFsdWU7CisgICAgYm9vbCBtX2lz
U2h1dGRvd24geyBmYWxzZSB9OworfTsKKyAgICAKK30KKwordXNpbmcgV1RGOjpCcm9hZGNhc3Q7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaXhlZFF1ZXVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvRml4ZWRRdWV1ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zp
eGVkUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3Bh
Y2UgV1RGIHsKKyAgICAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBCdWZmZXJTaXplPgor
Y2xhc3MgRml4ZWRRdWV1ZSB7CitwdWJsaWM6CisgICAgRml4ZWRRdWV1ZSgpCisgICAgeworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KCEoKEJ1ZmZlclNpemUgLSAxKSAmIEJ1ZmZlclNpemUpLCAiQnVm
ZmVyU2l6ZSBtdXN0IGJlIHBvd2VyIG9mIDIuIik7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faXNFbXB0eTsgfQorICAgIGJvb2wgaXNGdWxsKCkgY29u
c3QgeyByZXR1cm4gKG1fdGFpbCArIDEpICUgQnVmZmVyU2l6ZSA9PSBtX2hlYWQ7IH0KKyAgICAK
KyAgICBib29sIGVucXVldWUoY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoaXNG
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGlzRW1wdHko
KSkKKyAgICAgICAgICAgIG1faXNFbXB0eSA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX3RhaWwgPSAobV90YWlsICsgMSkgJSBCdWZmZXJTaXplOworCisgICAgICAgIG1fYnVm
ZmVyW21fdGFpbF0gPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgZGVxdWV1ZSgpCisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG1faGVhZCA9PSBtX3Rh
aWwpCisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2hl
YWQgPSAobV9oZWFkICsgMSkgJSBCdWZmZXJTaXplOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgY29uc3QgVCYgaGVhZCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybiBtX2J1ZmZlclttX2hlYWRdOwor
ICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9pc0VtcHR5ID0gdHJ1
ZTsKKyAgICAgICAgbV9oZWFkID0gbV90YWlsID0gMDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIG1faGVhZCA8PSBtX3RhaWwgPyBtX3RhaWwgLSBtX2hl
YWQgKyAxIDogQnVmZmVyU2l6ZSAtIG1faGVhZCArIG1fdGFpbCArIDE7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBzaXplX3QgbV9oZWFkIHsgMCB9OworICAgIHNpemVfdCBtX3RhaWwgeyAw
IH07CisgICAgYm9vbCBtX2lzRW1wdHkgeyB0cnVlIH07CisgICAgVCBtX2J1ZmZlcltCdWZmZXJT
aXplXTsKK307CisKK30KKwordXNpbmcgV1RGOjpGaXhlZFF1ZXVlOwpJbmRleDogU291cmNlL1dU
Ri93dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1N5bmNocm9uaXplZEZpeGVkUXVldWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Ccm9hZGNhc3QuaD4KKyNpbmNsdWRlIDx3dGYvRml4
ZWRRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5o
PgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEJ1ZmZl
clNpemU+CitjbGFzcyBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlIDogcHVibGljIEZpeGVkUXVldWU8
VCwgQnVmZmVyU2l6ZT4geworcHVibGljOgorICAgIFN5bmNocm9uaXplZEZpeGVkUXVldWUoKQor
ICAgICAgICA6IG1fZW1wdHkoQnVmZmVyU2l6ZSwgMCwgQnVmZmVyU2l6ZSkKKyAgICAgICAgLCBt
X2Z1bGwoMCwgMCwgQnVmZmVyU2l6ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVz
ZXQoKQorICAgIHsKKyAgICAgICAgbV9lbXB0eS5yZXNldCgpOworICAgICAgICBtX2Z1bGwucmVz
ZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaHV0ZG93bigpCisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHRoaXMtPmNsZWFyKCk7Cisg
ICAgICAgIG1fZW1wdHkuc2h1dGRvd24oKTsKKyAgICAgICAgbV9mdWxsLnNodXRkb3duKCk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgZW5xdWV1ZShjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIG1fZW1wdHkuZGVjcmVtZW50KCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAgICAgIGlmIChtX2VtcHR5LmlzU2h1dGRv
d24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBGaXhlZFF1
ZXVlPFQsIEJ1ZmZlclNpemU+OjplbnF1ZXVlKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBt
X2Z1bGwuaW5jcmVtZW50KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIGJvb2wgZGVxdWV1ZShjb25zdCBGdW5j
dG9yJiBvcGVyYXRpb24pCisgICAgeworICAgICAgICBtX2Z1bGwuZGVjcmVtZW50KCk7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAg
ICAgICAgIGlmIChtX2Z1bGwuaXNTaHV0ZG93bigpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3BlcmF0aW9uKHRoaXMtPmhlYWQoKSk7
CisgICAgICAgICAgICBGaXhlZFF1ZXVlPFQsIEJ1ZmZlclNpemU+OjpkZXF1ZXVlKCk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9lbXB0eS5pbmNyZW1lbnQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCitwcml2YXRlOgorICAgIEJyb2FkY2FzdDxpbnQ+IG1fZW1wdHk7CisgICAgQnJv
YWRjYXN0PGludD4gbV9mdWxsOworICAgIExvY2sgbV9tdXRleDsKK307CisKK30KKwordXNpbmcg
V1RGOjpTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzE4KQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTYtMDktMjMgIFNhaWQg
QWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgU3lu
Y2hyb25pemVkRml4ZWRRdWV1ZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNDc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhl
ZFF1ZXVlLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcDog
QWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXh0SXRlbSk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjp0b1VwcGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252
ZXJ0ZXI6OlRvVXBwZXJDb252ZXJ0ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBl
ckNvbnZlcnRlcjo6cHJvZHVjZVF1ZXVlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBw
ZXJDb252ZXJ0ZXI6OmNvbnN1bWVRdWV1ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1Vw
cGVyQ29udmVydGVyOjpzdGFydCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29u
dmVydGVyOjpzdG9wKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6
OmVucXVldWUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6aXNQ
cm9kdWNpbmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6aXND
b25zdW1pbmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6cHJv
ZHVjZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6Y29uc3Vt
ZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6cHJvZHVjZSk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpjb25zdW1lKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE2LTA5LTIzICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMDQx
NjMpOiBbR1RLXSBBUEkgdGVzdCAvd2Via2l0Mi9XZWJLaXRTZWN1cml0eU1hbmFnZXIvZmlsZS14
aHIgaXMgZmFpbGluZwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNjI1
OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNiArMTM3LDggQEAKIAkJNTJFNUNFNDkx
NEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkU1Q0U0ODE0RDIxRUFCMDAzQjJCRDgg
LyogUGFyZW50RnJhbWVfQnVuZGxlLmNwcCAqLzsgfTsKIAkJNTM2NzcwMzQxQ0M4MDIyODAwRDQy
NUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzMxQ0M4MDIyODAwRDQyNUIxIC8qIFdl
YlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tICovOyB9OwogCQk1MzY3NzAzNjFDQzgxQjYxMDBE
NDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzY3NzAzNTFDQzgxMkY5MDBE
NDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbCAqLzsgfTsKKwkJNTU5N0Y4
MzMxRDk1ODkxOTAwNjZCQzIxIC8qIEZpeGVkUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU5N0Y4MzIxRDk1ODkxOTAwNjZCQzIxIC8qIEZp
eGVkUXVldWUuY3BwICovOyB9OworCQk1NTk3RjgzNjFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hy
b25pemVkRml4ZWRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5jcHAgKi87IH07CiAJCTU3MTRFQ0I5MUNBOEI1QjAwMDA1MUFDOCAvKiBEb3dubG9hZFJl
cXVlc3RPcmlnaW5hbFVSTC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0I4MUNBOEI1ODgwMDA1MUFDOCAvKiBEb3dubG9hZFJl
cXVlc3RPcmlnaW5hbFVSTC5odG1sICovOyB9OwogCQk1NzE0RUNCQjFDQThCRkU0MDAwNTFBQzgg
LyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0JBMUNBOEJGRDEwMDA1
MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgKi87IH07CiAJCTU3
MTRFQ0JEMUNBOEMyMkEwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTDIuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
NzE0RUNCQzFDQThDMjE4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwyLmh0
bWwgKi87IH07CkBAIC04OTksNiArOTAxLDggQEAKIAkJNTJFNUNFNDgxNEQyMUVBQjAwM0IyQkQ4
IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYXJlbnRGcmFtZV9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzY3NzAzMzFDQzgwMjI4MDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRp
b24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRP
YmplY3REZXNjcmlwdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM2Nzcw
MzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1s
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTk3RjgzMjFEOTU4OTE5MDA2NkJDMjEg
LyogRml4ZWRRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
aXhlZFF1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU5N0Y4MzQxRDk1
OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MTRFQ0I4MUNBOEI1ODgwMDA1MUFDOCAvKiBEb3du
bG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0g
RG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTcxNEVDQkExQ0E4QkZEMTAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFs
VVJMRnJhbWUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IERvd25sb2FkUmVxdWVz
dE9yaWdpbmFsVVJMRnJhbWUuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcx
NEVDQkMxQ0E4QzIxODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMMi5odG1s
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwy
Lmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzMxLDYgKzE3MzUsNyBAQAog
CQkJCTFBMzUyNEE5MUQ2MjdCRDQwMDMxNzI5QiAvKiBEZWxldGVkQWRkcmVzc09mT3BlcmF0b3Iu
aCAqLywKIAkJCQlFNEE3NTdEMzE3OEFFQTVCMDBCNUQ3QTQgLyogRGVxdWUuY3BwICovLAogCQkJ
CTFBRjdCMjFEMUQ2Q0QxMkUwMDhDMTI2QyAvKiBFbnVtVHJhaXRzLmNwcCAqLywKKwkJCQk1NTk3
RjgzMjFEOTU4OTE5MDA2NkJDMjEgLyogRml4ZWRRdWV1ZS5jcHAgKi8sCiAJCQkJN0EzOEQ3RTUx
Qzc1MkQ1RjAwNEYxNTdEIC8qIEhhc2hDb3VudGVkU2V0LmNwcCAqLywKIAkJCQkwQkNEODMzNDE0
ODU3Q0U0MDBFQTIwMDMgLyogSGFzaE1hcC5jcHAgKi8sCiAJCQkJMjZCMkRGRjgxNUJERTU5OTAw
NEY2OTFEIC8qIEhhc2hTZXQuY3BwICovLApAQCAtMTc2Miw2ICsxNzY3LDcgQEAKIAkJCQkyNkYx
QjQ0MzE1Q0E0MzRGMDBEMUU0QkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQzAxMzYzQzcx
M0MzOTk3MzAwRUYzOTY0IC8qIFN0cmluZ09wZXJhdG9ycy5jcHAgKi8sCiAJCQkJN0M3NEQ0MkQx
ODgyMjhGMzAwRTVFRDU3IC8qIFN0cmluZ1ZpZXcuY3BwICovLAorCQkJCTU1OTdGODM0MUQ5NTk2
QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCAqLywKIAkJCQkwQkNEODU2
OTE0ODVDOThCMDBFQTIwMDMgLyogVGVtcG9yYXJ5Q2hhbmdlLmNwcCAqLywKIAkJCQk1QzVFNjMz
RDFEMEI2Nzk0MDA4NUEwMjUgLyogVW5pcXVlUmVmLmNwcCAqLywKIAkJCQk3Q0QwRDVBQTFENTUz
NERFMDAwQ0M5RTEgLyogVmFyaWFudC5jcHAgKi8sCkBAIC0yMjQwLDYgKzIyNDYsNyBAQAogCQkJ
CTdDODNERjU5MUQwQTU5MEMwMEZFQkNGMyAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDODNERjEzMUQwQTU5MEMwMEZFQkNGMyAvKiBSZWRCbGFja1RyZWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M4M0RGMTQxRDBBNTkwQzAwRkVCQ0YzIC8qIFJlZi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1NTk3RjgzMzFEOTU4OTE5MDA2NkJDMjEgLyogRml4ZWRRdWV1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYxNTFEMEE1OTBDMDBGRUJDRjMgLyogUmVmQ291bnRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVENzFEMEE1OTBDMDBGRUJDRjMgLyogUmVm
TG9nZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjE2MUQwQTU5MEMwMEZFQkNGMyAv
KiBSZWZQdHIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMjUyLDYgKzIyNTksNyBAQAogCQkJCTdD
ODNERjM2MUQwQTU5MEMwMEZFQkNGMyAvKiBTdHJpbmdIYXNoZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0M4M0RGMzcxRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmluZ0ltcGwuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0M4M0RGMzgxRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmluZ09wZXJhdG9ycy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1NTk3RjgzNjFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hy
b25pemVkRml4ZWRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzQTFEMEE1OTBD
MDBGRUJDRjMgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzRDFE
MEE1OTBDMDBGRUJDRjMgLyogVGVtcG9yYXJ5Q2hhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdDODNERjQwMUQwQTU5MEMwMEZFQkNGMyAvKiBUZXN0c0NvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhlZFF1ZXVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhlZFF1ZXVl
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhl
ZFF1ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHd0Zi9GaXhlZFF1ZXVlLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisK
K1RFU1QoV1RGX0ZpeGVkUXVldWUsIEJhc2ljKQoreworICAgIEZpeGVkUXVldWU8aW50LCA0VT4g
cXVldWU7CisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UocXVldWUuaXNGdWxsKCkpOworICAgIEVYUEVDVF9FUShxdWV1ZS5zaXplKCksIDBVKTsKKyAg
ICBFWFBFQ1RfRkFMU0UocXVldWUuZGVxdWV1ZSgpKTsKK30KKworVEVTVChXVEZfRml4ZWRRdWV1
ZSwgQ2lyY3VsYXIpCit7CisgICAgRml4ZWRRdWV1ZTxDU3RyaW5nLCA0VT4gcXVldWU7CisKKyAg
ICBzdGF0aWMgY2hhciBjb25zdCogaXRlbXNbXSA9IHsgImZpcnN0IiwgInNlY29uZCIsICJ0aGly
ZCIsICJmb3VydGgiLCAiZmlmdGgiLCAic2l4dGgiIH07CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDQ7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuZW5xdWV1ZShpdGVtc1tpXSkp
OworCisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNGdWxsKCkpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuaGVhZCgpID09IGl0
ZW1zW2ldKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuZGVxdWV1ZSgpKTsKKyAgICB9CisK
KyAgICBFWFBFQ1RfRVEocXVldWUuc2l6ZSgpLCAyVSk7CisKKyAgICBmb3IgKGludCBpID0gNDsg
aSA8IDY7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuZW5xdWV1ZShpdGVtc1tpXSkp
OworCisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNGdWxsKCkpOworCisgICAgZm9yIChpbnQgaSA9
IDI7IGkgPCA2OyArK2kpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuaGVhZCgpID09IGl0
ZW1zW2ldKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuZGVxdWV1ZSgpKTsKKyAgICB9CisK
KyAgICBFWFBFQ1RfVFJVRShxdWV1ZS5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9GaXhlZFF1
ZXVlLCBDbGVhcikKK3sKKyAgICBGaXhlZFF1ZXVlPGludCwgOFU+IHF1ZXVlOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA4OyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKHF1ZXVlLmVucXVl
dWUoaSkpOworCisgICAgcXVldWUuY2xlYXIoKTsKKyAgICBFWFBFQ1RfVFJVRShxdWV1ZS5pc0Vt
cHR5KCkpOworICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5kZXF1ZXVlKCkpOworfQorCitURVNUKFdU
Rl9GaXhlZFF1ZXVlLCBMaW1pdHMpCit7CisgICAgRml4ZWRRdWV1ZTxDU3RyaW5nLCA0VT4gcXVl
dWU7CisKKyAgICBzdGF0aWMgY2hhciBjb25zdCogaXRlbXNbXSA9IHsgImZpcnN0IiwgInNlY29u
ZCIsICJ0aGlyZCIsICJmb3VydGgiIH07CisKKyAgICBmb3IgKGF1dG8gaXRlbSA6IGl0ZW1zKQor
ICAgICAgICBFWFBFQ1RfVFJVRShxdWV1ZS5lbnF1ZXVlKGl0ZW0pKTsKKworICAgIEVYUEVDVF9F
UShxdWV1ZS5zaXplKCksIHNpemVvZihpdGVtcykgLyBzaXplb2YoaXRlbXNbMF0pKTsKKworICAg
IEVYUEVDVF9GQUxTRShxdWV1ZS5lbnF1ZXVlKCJvdmVyZmxvdyIpKTsKKworICAgIGZvciAoYXV0
byBpdGVtIDogaXRlbXMpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuaGVhZCgpID09IGl0
ZW0pOworICAgICAgICBFWFBFQ1RfVFJVRShxdWV1ZS5kZXF1ZXVlKCkpOworICAgIH0KKyAgICAK
KyAgICBFWFBFQ1RfRkFMU0UocXVldWUuZGVxdWV1ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hy
b25pemVkRml4ZWRRdWV1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8dGhyZWFkPgorCisjaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvQnJvYWRjYXN0Lmg+CisjaW5jbHVk
ZSA8d3RmL1N5bmNocm9uaXplZEZpeGVkUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVl
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgVGVzdFdlYktp
dEFQSSB7CisKK3N0YXRpYyBjaGFyIGNvbnN0KiB0ZXh0SXRlbShzaXplX3QgaW5kZXgpCit7Cisg
ICAgc3RhdGljIGNoYXIgY29uc3QqIGl0ZW1zW10gPSB7ICJmaXJzdCIsICJzZWNvbmQiLCAidGhp
cmQiLCAiZm91cnRoIiwgImZpZnRoIiwgInNpeHRoIiB9OworICAgIHJldHVybiBpbmRleCA8IHNp
emVvZihpdGVtcykgLyBzaXplb2YoaXRlbXNbMF0pID8gaXRlbXNbaW5kZXhdIDogbnVsbHB0cjsK
K30KKworc3RhdGljIENTdHJpbmcgdG9VcHBlcihjb25zdCBDU3RyaW5nJiBsb3dlcikKK3sKKyAg
ICBDU3RyaW5nIHVwcGVyID0gbG93ZXI7CisKKyAgICBmb3IgKGNoYXIqIGJ1ZmZlciA9IHVwcGVy
Lm11dGFibGVEYXRhKCk7ICpidWZmZXI7ICsrYnVmZmVyKQorICAgICAgICAqYnVmZmVyID0gdG9B
U0NJSVVwcGVyKCpidWZmZXIpOworCisgICAgcmV0dXJuIHVwcGVyOworfQorCitjbGFzcyBUb1Vw
cGVyQ29udmVydGVyIHsKK3B1YmxpYzoKKyAgICBUb1VwcGVyQ29udmVydGVyKCkKKyAgICAgICAg
OiBtX2lzUHJvZHVjaW5nKGZhbHNlKQorICAgICAgICAsIG1faXNDb25zdW1pbmcoZmFsc2UpCisg
ICAgeworICAgIH0KKworICAgIFdvcmtRdWV1ZSYgcHJvZHVjZVF1ZXVlKCkKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBhdXRvJiBxdWV1ZSA9IFdvcmtRdWV1ZTo6Y3JlYXRlKCJvcmcud2Via2l0LlBy
b2R1Y2UiKS5sZWFrUmVmKCk7CisgICAgICAgIHJldHVybiBxdWV1ZTsKKyAgICB9CisKKyAgICBX
b3JrUXVldWUmIGNvbnN1bWVRdWV1ZSgpCisgICAgeworICAgICAgICBzdGF0aWMgYXV0byYgcXVl
dWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgib3JnLndlYmtpdC5Db25zdW1lIikubGVha1JlZigpOwor
ICAgICAgICByZXR1cm4gcXVldWU7CisgICAgfQorCisgICAgdm9pZCBzdGFydCgpCisgICAgewor
ICAgICAgICBwcm9kdWNlKCk7CisgICAgICAgIGNvbnN1bWUoKTsKKyAgICB9CisKKyAgICB2b2lk
IHN0b3AoKQorICAgIHsKKyAgICAgICAgaWYgKG1faXNQcm9kdWNpbmcpIHsKKyAgICAgICAgICAg
IG1fbG93ZXJRdWV1ZS5zaHV0ZG93bigpOworICAgICAgICAgICAgbV9pc1Byb2R1Y2luZy53YWl0
VW50aWxFcXVhbChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9pc0NvbnN1bWlu
ZykgeworICAgICAgICAgICAgbV91cHBlclF1ZXVlLnNodXRkb3duKCk7CisgICAgICAgICAgICBt
X2lzQ29uc3VtaW5nLndhaXRVbnRpbEVxdWFsKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZvaWQgZW5xdWV1ZShjb25zdCBDU3RyaW5nJiBsb3dlcikKKyAgICB7CisgICAgICAgIG1f
bG93ZXJRdWV1ZS5lbnF1ZXVlKGxvd2VyKTsKKyAgICB9CisKKyAgICBib29sIGlzUHJvZHVjaW5n
KCkgeyByZXR1cm4gbV9pc1Byb2R1Y2luZzsgfQorICAgIGJvb2wgaXNDb25zdW1pbmcoKSB7IHJl
dHVybiBtX2lzQ29uc3VtaW5nOyB9CisKKyAgICBzaXplX3QgcHJvZHVjZWQoKSBjb25zdCB7IHJl
dHVybiBtX3Byb2R1Y2VkOyB9CisgICAgc2l6ZV90IGNvbnN1bWVkKCkgY29uc3QgeyByZXR1cm4g
bV9jb25zdW1lZDsgfQorCitwcml2YXRlOgorICAgIHZvaWQgcHJvZHVjZSgpCisgICAgeworICAg
ICAgICBpZiAobV9pc1Byb2R1Y2luZykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBw
cm9kdWNlUXVldWUoKS5kaXNwYXRjaChbdGhpc10geworCisgICAgICAgICAgICBmb3IgKGJvb2wg
c3RhdHVzID0gdHJ1ZTsgc3RhdHVzOyArK21fcHJvZHVjZWQpIHsKKyAgICAgICAgICAgICAgICBz
dGF0dXMgPSBtX2xvd2VyUXVldWUuZGVxdWV1ZShbdGhpc10oY29uc3QgQ1N0cmluZyYgbG93ZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV91cHBlclF1ZXVlLmVucXVldWUodG9VcHBlcihsb3dl
cikpOworCisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGxvd2VyID09IHRleHRJdGVt
KG1fcHJvZHVjZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xl
ZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTApKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9pc1Byb2R1Y2luZyA9IGZhbHNlOwor
ICAgICAgICB9KTsKKworICAgICAgICBtX2lzUHJvZHVjaW5nID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICB2b2lkIGNvbnN1bWUoKQorICAgIHsKKyAgICAgICAgaWYgKG1faXNDb25zdW1pbmcpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29uc3VtZVF1ZXVlKCkuZGlzcGF0Y2goW3RoaXNd
IHsKKworICAgICAgICAgICAgZm9yIChib29sIHN0YXR1cyA9IHRydWU7IHN0YXR1czsgKyttX2Nv
bnN1bWVkKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gbV91cHBlclF1ZXVlLmRlcXVldWUo
W3RoaXNdKGNvbnN0IENTdHJpbmcmIHVwcGVyKSB7CisgICAgICAgICAgICAgICAgICAgIEVYUEVD
VF9UUlVFKHVwcGVyID09IHRvVXBwZXIodGV4dEl0ZW0obV9jb25zdW1lZCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMoNTApKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgbV9pc0NvbnN1bWluZyA9IGZhbHNlOworICAgICAgICB9KTsKKworICAgICAgICBt
X2lzQ29uc3VtaW5nID0gdHJ1ZTsKKyAgICB9CisKKyAgICBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVl
PENTdHJpbmcsIDRVPiBtX2xvd2VyUXVldWU7CisgICAgU3luY2hyb25pemVkRml4ZWRRdWV1ZTxD
U3RyaW5nLCA0VT4gbV91cHBlclF1ZXVlOworICAgIEJyb2FkY2FzdDxib29sPiBtX2lzUHJvZHVj
aW5nOworICAgIEJyb2FkY2FzdDxib29sPiBtX2lzQ29uc3VtaW5nOworICAgIHNpemVfdCBtX3By
b2R1Y2VkIHsgMCB9OworICAgIHNpemVfdCBtX2NvbnN1bWVkIHsgMCB9OworfTsKKworVEVTVChX
VEZfU3luY2hyb25pemVkRml4ZWRRdWV1ZSwgQmFzaWMpCit7CisgICAgVG9VcHBlckNvbnZlcnRl
ciBjb252ZXJ0ZXI7CisKKyAgICBjb252ZXJ0ZXIuc3RhcnQoKTsKKyAgICBFWFBFQ1RfVFJVRShj
b252ZXJ0ZXIuaXNQcm9kdWNpbmcoKSAmJiBjb252ZXJ0ZXIuaXNDb25zdW1pbmcoKSk7CisKKyAg
ICBjb252ZXJ0ZXIuc3RvcCgpOworICAgIEVYUEVDVF9GQUxTRShjb252ZXJ0ZXIuaXNQcm9kdWNp
bmcoKSB8fCBjb252ZXJ0ZXIuaXNDb25zdW1pbmcoKSk7Cit9CisKK1RFU1QoV1RGX1N5bmNocm9u
aXplZEZpeGVkUXVldWUsIExpbWl0cykKK3sKKyAgICBUb1VwcGVyQ29udmVydGVyIGNvbnZlcnRl
cjsKKworICAgIGNvbnZlcnRlci5zdGFydCgpOworICAgIEVYUEVDVF9UUlVFKGNvbnZlcnRlci5p
c1Byb2R1Y2luZygpICYmIGNvbnZlcnRlci5pc0NvbnN1bWluZygpKTsKKworICAgIHNpemVfdCBj
b3VudCA9IDA7CisgICAgd2hpbGUgKGNoYXIgY29uc3QqIGl0ZW0gPSB0ZXh0SXRlbShjb3VudCsr
KSkgeworICAgICAgICBjb252ZXJ0ZXIuZW5xdWV1ZShpdGVtKTsKKyAgICAgICAgc3RkOjp0aGlz
X3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMSkpOworICAgIH0K
KworICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2ZvcihzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzKDQwMCkpOworCisgICAgY29udmVydGVyLnN0b3AoKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29u
dmVydGVyLmlzUHJvZHVjaW5nKCkgfHwgY29udmVydGVyLmlzQ29uc3VtaW5nKCkpOworCisgICAg
RVhQRUNUX0VRKGNvbnZlcnRlci5wcm9kdWNlZCgpLCBjb3VudCk7CisgICAgRVhQRUNUX0VRKGNv
bnZlcnRlci5jb25zdW1lZCgpLCBjb3VudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289697</attachid>
            <date>2016-09-23 12:57:11 -0700</date>
            <delta_ts>2016-09-30 17:50:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162478-20160923125419.patch</filename>
            <type>text/plain</type>
            <size>33915</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDYyODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE2LTA5LTIzICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFN5bmNocm9uaXplZEZpeGVk
UXVldWUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjQ3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGUgZm9sbG93aW5nIGNsYXNzZXM6CisKKyAgICAgICAgMS4g
QnJvYWRjYXN0OiBJdCBpcyBlcXVpdmFsZW50IHRvIHN0ZDo6YXRvbWljIGluIHRoZSBhZGRpdGlv
biB0byBvdGhlcgorICAgICAgICAgICBibG9ja2luZyBmdW5jdGlvbnM6IGluY3JlbWVudCgpLCBk
ZWNyZW1lbnQoKSBhbmQgd2FpdFVudGlsRXF1YWwoKS4KKworICAgICAgICAyLiBGaXhlZFF1ZXVl
OiBBIGNpcmN1bGFyIHF1ZXVlIChhLmsuYSBjaXJjdWxhciBidWZmZXIpLgorCisgICAgICAgIDMu
IFNhZmVGaXhlZFF1ZXVlOiBBIHJlZ3VsYXIgRml4ZWRRdWV1ZSBidXQgaXRzIGVucXVldWUoKSBh
bmQgZGVxdWV1ZSgpCisgICAgICAgICAgIGFyZSBjb250cm9sbGVkIGJ5IHR3byBCcm9hZGNhc3Rz
OiBtX2VtcHR5IGFuZCBtX2Z1bGwuIEFsc28gaXRzIGRlcXVldWUoKQorICAgICAgICAgICB0YWtl
cyBhIGZ1bmN0b3IgdG8gcHJvY2VzcyB0aGUgZWxlbWVudC10by1iZS1yZW1vdmVkIHNhZmVseS4K
KworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0
Zi9Ccm9hZGNhc3QuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6QnJvYWRjYXN0
KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0OjpyZXNldCk6CisgICAgICAgIChXVEY6OkJyb2Fk
Y2FzdDo6aXNTaHV0ZG93bik6CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6b3BlcmF0b3IgVCk6
CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkJy
b2FkY2FzdDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0OjpzaHV0ZG93bik6
CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6d2FpdFVudGlsRXF1YWwpOgorICAgICAgICAoV1RG
OjpCcm9hZGNhc3Q6OmRlY3JlbWVudCk6CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6aW5jcmVt
ZW50KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0Ojp3YWl0VW50aWwpOgorICAgICAgICAoV1RG
OjpCcm9hZGNhc3Q6OndhaXRVbnRpbEFuZE5vdGlmeSk6CisgICAgICAgICogd3RmL0ZpeGVkUXVl
dWUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkZpeGVkUXVldWU6OkZpeGVkUXVldWUpOgorICAg
ICAgICAoV1RGOjpGaXhlZFF1ZXVlOjppc0VtcHR5KToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1
ZTo6aXNGdWxsKToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1ZTo6ZW5xdWV1ZSk6CisgICAgICAg
IChXVEY6OkZpeGVkUXVldWU6OmRlcXVldWUpOgorICAgICAgICAoV1RGOjpGaXhlZFF1ZXVlOjpo
ZWFkKToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1ZTo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpG
aXhlZFF1ZXVlOjpzaXplKToKKyAgICAgICAgKiB3dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6U3luY2hyb25p
emVkRml4ZWRRdWV1ZSk6CisgICAgICAgIChXVEY6OlN5bmNocm9uaXplZEZpeGVkUXVldWU6OnJl
c2V0KToKKyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6c2h1dGRvd24pOgor
ICAgICAgICAoV1RGOjpTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlOjplbnF1ZXVlKToKKyAgICAgICAg
KFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6ZGVxdWV1ZSk6CisKIDIwMTYtMDktMjIgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGZW5jZXMgb24geDg2IHNo
b3VsZCBiZSBhIGxvdCBjaGVhcGVyCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNjI1OSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksOSBAQAogCQk1
MTVGNzk1NjFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NF
RDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCAqLzsgfTsKIAkJNTM5RUIwNjMxRDU1Mjg0MjAwQzgy
RUY3IC8qIExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi87IH07
CiAJCTU1MzA3MUNBMUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MzA3MUM5MUM0MDQyNzIwMDM4
NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLzsgfTsKKwkJNTU5N0Y4MkYxRDk0Qjk5NzAwNjZCQzIx
IC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6
ZWRGaXhlZFF1ZXVlLmggKi87IH07CisJCTU1OTdGODMwMUQ5NEI5OTcwMDY2QkMyMSAvKiBCcm9h
ZGNhc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1
OTdGODJEMUQ5NEI5OTcwMDY2QkMyMSAvKiBCcm9hZGNhc3QuaCAqLzsgfTsKKwkJNTU5N0Y4MzEx
RDk0Qjk5NzAwNjZCQzIxIC8qIEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OTdGODJFMUQ5NEI5OTcwMDY2QkMyMSAvKiBGaXhlZFF1
ZXVlLmggKi87IH07CiAJCTVDN0M4OEQ0MUQwQTNBMEEwMDlEMkY2RCAvKiBVbmlxdWVSZWYuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDN0M4OEQzMUQw
QTNBMEEwMDlEMkY2RCAvKiBVbmlxdWVSZWYuaCAqLzsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAw
RkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwQTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdp
c3RyeS5jcHAgKi87IH07CiAJCTcwQTk5M0ZGMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdp
c3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBB
OTkzRkQxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmggKi87IH07CkBAIC00NjIs
NiArNDY1LDkgQEAKIAkJNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVl
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRRdWV1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzlFQjA2MjFENTUyODQyMDBDODJFRjcg
LyogTEVCRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMRUJEZWNv
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MzA3MUM5MUM0MDQyNzIwMDM4
NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGlueUxSVUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1OTdGODJDMUQ5
NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9uaXplZEZpeGVkUXVldWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTU5N0Y4MkQxRDk0Qjk5NzAwNjZCQzIxIC8qIEJyb2FkY2FzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCcm9hZGNhc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU5N0Y4MkUxRDk0Qjk5NzAwNjZCQzIxIC8qIEZpeGVkUXVl
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRml4ZWRRdWV1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjQzMzgzQTVEMEI0NjNDOTQzM0Q5MzMgLyogSW5k
ZXhNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhNYXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM3Qzg4RDMxRDBBM0EwQTAwOUQyRjZEIC8qIFVu
aXF1ZVJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmlxdWVSZWYuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQyNDdCNjIxNDY4OUI4NjAwRTc4Qjc2IC8q
IGxpYldURi5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJXVEYuYTsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTg0Nyw2ICs4NTMsNyBAQAogCQkJCUE4
QTQ3MjY0MTUxQTgyNUEwMDQxMjNGRiAvKiBCbG9ja1N0YWNrLmggKi8sCiAJCQkJQThBNDcyNjUx
NTFBODI1QTAwNDEyM0ZGIC8qIEJsb29tRmlsdGVyLmggKi8sCiAJCQkJMEY5MzI3NEExQzE3RjRC
NzAwQ0Y2NTY0IC8qIEJveC5oICovLAorCQkJCTU1OTdGODJEMUQ5NEI5OTcwMDY2QkMyMSAvKiBC
cm9hZGNhc3QuaCAqLywKIAkJCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29y
dC5oICovLAogCQkJCUE4QTQ3MjY3MTUxQTgyNUEwMDQxMjNGRiAvKiBCdW1wUG9pbnRlckFsbG9j
YXRvci5oICovLAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5QTJGNSAvKiBCeXRlT3JkZXIuaCAq
LywKQEAgLTg4Nyw2ICs4OTQsNyBAQAogCQkJCUE4QTQ3MkExMTUxQTgyNUEwMDQxMjNGRiAvKiBG
YXN0TWFsbG9jLmNwcCAqLywKIAkJCQlBOEE0NzJBMjE1MUE4MjVBMDA0MTIzRkYgLyogRmFzdE1h
bGxvYy5oICovLAogCQkJCUIzOEZEN0JDMTY4OTUzRTgwMDY1Qzk2OSAvKiBGZWF0dXJlRGVmaW5l
cy5oICovLAorCQkJCTU1OTdGODJFMUQ5NEI5OTcwMDY2QkMyMSAvKiBGaXhlZFF1ZXVlLmggKi8s
CiAJCQkJMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5jcHAgKi8s
CiAJCQkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5oICovLAog
CQkJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLywKQEAgLTk5MCw2
ICs5OTgsNyBAQAogCQkJCTJDREVEMEYyMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmggKi8s
CiAJCQkJMTQ2OTQxOTAxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oICovLAogCQkJ
CTE0Njk0MTkxMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXJDRi5jcHAgKi8sCisJCQkJ
NTU5N0Y4MkMxRDk0Qjk5NzAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCAqLywK
IAkJCQkxNEYzQjBGNjE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oICov
LAogCQkJCTE0Njk0MTk0MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCAqLywKIAkJ
CQkxNDY5NDE5ODE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwICovLApAQCAt
MTM0Miw2ICsxMzUxLDcgQEAKIAkJCQlGRTgyMjUzMTFCMkExRTVCMDBCQTY4RkQgLyogTmFrZWRQ
dHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VGMTUxQTgyNUIwMDQxMjNGRiAvKiBOb25j
b3B5YWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU5N0Y4MzExRDk0Qjk5NzAwNjZCQzIxIC8q
IEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFNDY1MTZFMTlEQjFGQjQwMDNFQ0Ew
NSAvKiBOU01hcFRhYmxlU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGNTE1MUE4MjVC
MDA0MTIzRkYgLyogTnVtYmVyT2ZDb3Jlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0UyOUMzM0Ux
NUZGRDc5QjAwNTE2RDYxIC8qIE9iamNSdW50aW1lRXh0cmFzLmggaW4gSGVhZGVycyAqLywKQEAg
LTE0MDMsNiArMTQxMyw3IEBACiAJCQkJQzRGOEE5MzcxOUM2NUVCNDAwQjJCMTVEIC8qIFN0b3B3
YXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2QkI3NjkxNjJGMzAwNTAwREQxNkRCIC8qIFN0
cmVhbUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0IxNTFBODI1QjAwNDEyM0ZG
IC8qIFN0cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU5N0Y4MkYxRDk0Qjk5NzAw
NjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDNEMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MzBCNDc4OTFBQUFBQzFBMDAxMjIzREEgLyogU3RyaW5nQ29tbW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQzRTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQ29uY2F0ZW5hdGUu
aCBpbiBIZWFkZXJzICovLApAQCAtMTQ0NCw2ICsxNDU1LDcgQEAKIAkJCQlBOEE0NzQ3RTE1MUE4
MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ3RjE1MUE4
MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4
MDE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NTk3Rjgz
MDFEOTRCOTk3MDA2NkJDMjEgLyogQnJvYWRjYXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzRD
RkM4RTE2QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
NTAxNjQxQkIyNThENTAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFGQTQ3QzhCMTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmggaW4gSGVhZGVycyAq
LywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jyb2FkY2FzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0Jyb2FkY2FzdC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Jy
b2FkY2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3Rm
L0xvY2tlci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIEJyb2FkY2FzdCB7CitwdWJsaWM6CisgICAgQnJvYWRjYXN0KGNvbnN0IFQmIHZhbHVlKQor
ICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAgICwgbV9pbml0VmFsdWUodmFsdWUpCisg
ICAgICAgICwgbV9taW5WYWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX21heFZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICB9CisKKyAgICBCcm9hZGNhc3QoY29uc3QgVCYgdmFsdWUsIGNvbnN0IFQmIG1p
blZhbHVlLCBjb25zdCBUJiBtYXhWYWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAg
ICAgICAsIG1faW5pdFZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fbWluVmFsdWUobWluVmFsdWUp
CisgICAgICAgICwgbV9tYXhWYWx1ZShtYXhWYWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCByZXNldCgpCisgICAgeworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBiZWZvcmUgc3RhcnRpbmcgc2hhcmluZyB0aGlzIHNlbWFwaG9yZSB3aXRoIG90aGVy
IHRocmVhZHMuCisgICAgICAgIG1fdmFsdWUgPSBtX2luaXRWYWx1ZTsKKyAgICAgICAgbV9pc1No
dXRkb3duID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTaHV0ZG93bigpIGNvbnN0
IHsgcmV0dXJuIG1faXNTaHV0ZG93bjsgfQorCisgICAgb3BlcmF0b3IgVCgpCisgICAgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgdmFsdWUpCisg
ICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHJl
dHVybiBtX3ZhbHVlID09IHZhbHVlOworICAgIH0KKyAgICAKKyAgICBUIG9wZXJhdG9yPShjb25z
dCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4
KTsKKyAgICAgICAgbV92YWx1ZSA9IHZhbHVlOworICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlB
bGwoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNodXRk
b3duKCkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAg
ICAgICAgbV9pc1NodXRkb3duID0gdHJ1ZTsKKyAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxs
KCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxFcXVhbChjb25zdCBUJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHdhaXRVbnRpbChbdGhpcywgdmFsdWVdKCkgeyByZXR1cm4gbV9pc1NodXRk
b3duIHx8IG1fdmFsdWUgPT0gdmFsdWU7IH0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlY3Jl
bWVudCgpCisgICAgeworICAgICAgICB3YWl0VW50aWxBbmROb3RpZnkoW3RoaXNdKCkgeyByZXR1
cm4gbV9pc1NodXRkb3duIHx8IChtX3ZhbHVlID4gbV9taW5WYWx1ZSAmJiBtX3ZhbHVlLS0pOyB9
KTsKKyAgICB9CisKKyAgICB2b2lkIGluY3JlbWVudCgpCisgICAgeworICAgICAgICB3YWl0VW50
aWxBbmROb3RpZnkoW3RoaXNdKCkgeyByZXR1cm4gbV9pc1NodXRkb3duIHx8IChtX3ZhbHVlIDwg
bV9tYXhWYWx1ZSAmJiArK21fdmFsdWUpOyB9KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHdhaXRVbnRpbChjb25zdCBGdW5jdG9y
JiBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRl
eCk7CisgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9tdXRleCwgcHJlZGljYXRlKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgd2FpdFVudGlsQW5k
Tm90aWZ5KGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIExvY2tIb2xk
ZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX211dGV4
LCBwcmVkaWNhdGUpOworICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICB9CisK
KyAgICBMb2NrIG1fbXV0ZXg7CisgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAgIFQgbV92
YWx1ZSwgbV9pbml0VmFsdWUsIG1fbWluVmFsdWUsIG1fbWF4VmFsdWU7CisgICAgYm9vbCBtX2lz
U2h1dGRvd24geyBmYWxzZSB9OworfTsKKyAgICAKK30KKwordXNpbmcgV1RGOjpCcm9hZGNhc3Q7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaXhlZFF1ZXVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvRml4ZWRRdWV1ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zp
eGVkUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3Bh
Y2UgV1RGIHsKKyAgICAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBCdWZmZXJTaXplPgor
Y2xhc3MgRml4ZWRRdWV1ZSB7CitwdWJsaWM6CisgICAgRml4ZWRRdWV1ZSgpCisgICAgeworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KCEoKEJ1ZmZlclNpemUgLSAxKSAmIEJ1ZmZlclNpemUpLCAiQnVm
ZmVyU2l6ZSBtdXN0IGJlIHBvd2VyIG9mIDIuIik7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faXNFbXB0eTsgfQorICAgIGJvb2wgaXNGdWxsKCkgY29u
c3QgeyByZXR1cm4gKG1fdGFpbCArIDEpICUgQnVmZmVyU2l6ZSA9PSBtX2hlYWQ7IH0KKyAgICAK
KyAgICBib29sIGVucXVldWUoY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoaXNG
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGlzRW1wdHko
KSkKKyAgICAgICAgICAgIG1faXNFbXB0eSA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX3RhaWwgPSAobV90YWlsICsgMSkgJSBCdWZmZXJTaXplOworCisgICAgICAgIG1fYnVm
ZmVyW21fdGFpbF0gPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgZGVxdWV1ZSgpCisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG1faGVhZCA9PSBtX3Rh
aWwpCisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2hl
YWQgPSAobV9oZWFkICsgMSkgJSBCdWZmZXJTaXplOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgY29uc3QgVCYgaGVhZCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybiBtX2J1ZmZlclttX2hlYWRdOwor
ICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9pc0VtcHR5ID0gdHJ1
ZTsKKyAgICAgICAgbV9oZWFkID0gbV90YWlsID0gMDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIG1faGVhZCA8PSBtX3RhaWwgPyBtX3RhaWwgLSBtX2hl
YWQgKyAxIDogQnVmZmVyU2l6ZSAtIG1faGVhZCArIG1fdGFpbCArIDE7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBzaXplX3QgbV9oZWFkIHsgMCB9OworICAgIHNpemVfdCBtX3RhaWwgeyAw
IH07CisgICAgYm9vbCBtX2lzRW1wdHkgeyB0cnVlIH07CisgICAgVCBtX2J1ZmZlcltCdWZmZXJT
aXplXTsKK307CisKK30KKwordXNpbmcgV1RGOjpGaXhlZFF1ZXVlOwpJbmRleDogU291cmNlL1dU
Ri93dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1N5bmNocm9uaXplZEZpeGVkUXVldWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Ccm9hZGNhc3QuaD4KKyNpbmNsdWRlIDx3dGYvRml4
ZWRRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5o
PgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEJ1ZmZl
clNpemU+CitjbGFzcyBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlIDogcHVibGljIEZpeGVkUXVldWU8
VCwgQnVmZmVyU2l6ZT4geworcHVibGljOgorICAgIFN5bmNocm9uaXplZEZpeGVkUXVldWUoKQor
ICAgICAgICA6IG1fZW1wdHkoQnVmZmVyU2l6ZSwgMCwgQnVmZmVyU2l6ZSkKKyAgICAgICAgLCBt
X2Z1bGwoMCwgMCwgQnVmZmVyU2l6ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVz
ZXQoKQorICAgIHsKKyAgICAgICAgbV9lbXB0eS5yZXNldCgpOworICAgICAgICBtX2Z1bGwucmVz
ZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaHV0ZG93bigpCisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHRoaXMtPmNsZWFyKCk7Cisg
ICAgICAgIG1fZW1wdHkuc2h1dGRvd24oKTsKKyAgICAgICAgbV9mdWxsLnNodXRkb3duKCk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgZW5xdWV1ZShjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIG1fZW1wdHkuZGVjcmVtZW50KCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAgICAgIGlmIChtX2VtcHR5LmlzU2h1dGRv
d24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBGaXhlZFF1
ZXVlPFQsIEJ1ZmZlclNpemU+OjplbnF1ZXVlKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBt
X2Z1bGwuaW5jcmVtZW50KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIGJvb2wgZGVxdWV1ZShjb25zdCBGdW5j
dG9yJiBvcGVyYXRpb24pCisgICAgeworICAgICAgICBtX2Z1bGwuZGVjcmVtZW50KCk7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAg
ICAgICAgIGlmIChtX2Z1bGwuaXNTaHV0ZG93bigpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3BlcmF0aW9uKHRoaXMtPmhlYWQoKSk7
CisgICAgICAgICAgICBGaXhlZFF1ZXVlPFQsIEJ1ZmZlclNpemU+OjpkZXF1ZXVlKCk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9lbXB0eS5pbmNyZW1lbnQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCitwcml2YXRlOgorICAgIEJyb2FkY2FzdDxpbnQ+IG1fZW1wdHk7CisgICAgQnJv
YWRjYXN0PGludD4gbV9mdWxsOworICAgIExvY2sgbV9tdXRleDsKK307CisKK30KKwordXNpbmcg
V1RGOjpTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzE4KQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTYtMDktMjMgIFNhaWQg
QWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgU3lu
Y2hyb25pemVkRml4ZWRRdWV1ZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNDc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhl
ZFF1ZXVlLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcDog
QWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXh0SXRlbSk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjp0b1VwcGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252
ZXJ0ZXI6OlRvVXBwZXJDb252ZXJ0ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBl
ckNvbnZlcnRlcjo6cHJvZHVjZVF1ZXVlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBw
ZXJDb252ZXJ0ZXI6OmNvbnN1bWVRdWV1ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1Vw
cGVyQ29udmVydGVyOjpzdGFydCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29u
dmVydGVyOjpzdG9wKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6
OmVucXVldWUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6aXNQ
cm9kdWNpbmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6aXND
b25zdW1pbmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6cHJv
ZHVjZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6Y29uc3Vt
ZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6cHJvZHVjZSk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpjb25zdW1lKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE2LTA5LTIzICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMDQx
NjMpOiBbR1RLXSBBUEkgdGVzdCAvd2Via2l0Mi9XZWJLaXRTZWN1cml0eU1hbmFnZXIvZmlsZS14
aHIgaXMgZmFpbGluZwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNjI1
OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNiArMTM3LDggQEAKIAkJNTJFNUNFNDkx
NEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkU1Q0U0ODE0RDIxRUFCMDAzQjJCRDgg
LyogUGFyZW50RnJhbWVfQnVuZGxlLmNwcCAqLzsgfTsKIAkJNTM2NzcwMzQxQ0M4MDIyODAwRDQy
NUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzMxQ0M4MDIyODAwRDQyNUIxIC8qIFdl
YlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tICovOyB9OwogCQk1MzY3NzAzNjFDQzgxQjYxMDBE
NDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzY3NzAzNTFDQzgxMkY5MDBE
NDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbCAqLzsgfTsKKwkJNTU5N0Y4
MzMxRDk1ODkxOTAwNjZCQzIxIC8qIEZpeGVkUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU5N0Y4MzIxRDk1ODkxOTAwNjZCQzIxIC8qIEZp
eGVkUXVldWUuY3BwICovOyB9OworCQk1NTk3RjgzNjFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hy
b25pemVkRml4ZWRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5jcHAgKi87IH07CiAJCTU3MTRFQ0I5MUNBOEI1QjAwMDA1MUFDOCAvKiBEb3dubG9hZFJl
cXVlc3RPcmlnaW5hbFVSTC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0I4MUNBOEI1ODgwMDA1MUFDOCAvKiBEb3dubG9hZFJl
cXVlc3RPcmlnaW5hbFVSTC5odG1sICovOyB9OwogCQk1NzE0RUNCQjFDQThCRkU0MDAwNTFBQzgg
LyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0JBMUNBOEJGRDEwMDA1
MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgKi87IH07CiAJCTU3
MTRFQ0JEMUNBOEMyMkEwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTDIuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
NzE0RUNCQzFDQThDMjE4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwyLmh0
bWwgKi87IH07CkBAIC04OTksNiArOTAxLDggQEAKIAkJNTJFNUNFNDgxNEQyMUVBQjAwM0IyQkQ4
IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYXJlbnRGcmFtZV9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzY3NzAzMzFDQzgwMjI4MDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRp
b24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRP
YmplY3REZXNjcmlwdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM2Nzcw
MzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1s
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTk3RjgzMjFEOTU4OTE5MDA2NkJDMjEg
LyogRml4ZWRRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
aXhlZFF1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU5N0Y4MzQxRDk1
OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MTRFQ0I4MUNBOEI1ODgwMDA1MUFDOCAvKiBEb3du
bG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0g
RG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTcxNEVDQkExQ0E4QkZEMTAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFs
VVJMRnJhbWUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IERvd25sb2FkUmVxdWVz
dE9yaWdpbmFsVVJMRnJhbWUuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcx
NEVDQkMxQ0E4QzIxODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMMi5odG1s
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwy
Lmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzMxLDYgKzE3MzUsNyBAQAog
CQkJCTFBMzUyNEE5MUQ2MjdCRDQwMDMxNzI5QiAvKiBEZWxldGVkQWRkcmVzc09mT3BlcmF0b3Iu
aCAqLywKIAkJCQlFNEE3NTdEMzE3OEFFQTVCMDBCNUQ3QTQgLyogRGVxdWUuY3BwICovLAogCQkJ
CTFBRjdCMjFEMUQ2Q0QxMkUwMDhDMTI2QyAvKiBFbnVtVHJhaXRzLmNwcCAqLywKKwkJCQk1NTk3
RjgzMjFEOTU4OTE5MDA2NkJDMjEgLyogRml4ZWRRdWV1ZS5jcHAgKi8sCiAJCQkJN0EzOEQ3RTUx
Qzc1MkQ1RjAwNEYxNTdEIC8qIEhhc2hDb3VudGVkU2V0LmNwcCAqLywKIAkJCQkwQkNEODMzNDE0
ODU3Q0U0MDBFQTIwMDMgLyogSGFzaE1hcC5jcHAgKi8sCiAJCQkJMjZCMkRGRjgxNUJERTU5OTAw
NEY2OTFEIC8qIEhhc2hTZXQuY3BwICovLApAQCAtMTc2Miw2ICsxNzY3LDcgQEAKIAkJCQkyNkYx
QjQ0MzE1Q0E0MzRGMDBEMUU0QkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQzAxMzYzQzcx
M0MzOTk3MzAwRUYzOTY0IC8qIFN0cmluZ09wZXJhdG9ycy5jcHAgKi8sCiAJCQkJN0M3NEQ0MkQx
ODgyMjhGMzAwRTVFRDU3IC8qIFN0cmluZ1ZpZXcuY3BwICovLAorCQkJCTU1OTdGODM0MUQ5NTk2
QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCAqLywKIAkJCQkwQkNEODU2
OTE0ODVDOThCMDBFQTIwMDMgLyogVGVtcG9yYXJ5Q2hhbmdlLmNwcCAqLywKIAkJCQk1QzVFNjMz
RDFEMEI2Nzk0MDA4NUEwMjUgLyogVW5pcXVlUmVmLmNwcCAqLywKIAkJCQk3Q0QwRDVBQTFENTUz
NERFMDAwQ0M5RTEgLyogVmFyaWFudC5jcHAgKi8sCkBAIC0yMjQwLDYgKzIyNDYsNyBAQAogCQkJ
CTdDODNERjU5MUQwQTU5MEMwMEZFQkNGMyAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDODNERjEzMUQwQTU5MEMwMEZFQkNGMyAvKiBSZWRCbGFja1RyZWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M4M0RGMTQxRDBBNTkwQzAwRkVCQ0YzIC8qIFJlZi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1NTk3RjgzMzFEOTU4OTE5MDA2NkJDMjEgLyogRml4ZWRRdWV1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYxNTFEMEE1OTBDMDBGRUJDRjMgLyogUmVmQ291bnRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVENzFEMEE1OTBDMDBGRUJDRjMgLyogUmVm
TG9nZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjE2MUQwQTU5MEMwMEZFQkNGMyAv
KiBSZWZQdHIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMjUyLDYgKzIyNTksNyBAQAogCQkJCTdD
ODNERjM2MUQwQTU5MEMwMEZFQkNGMyAvKiBTdHJpbmdIYXNoZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0M4M0RGMzcxRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmluZ0ltcGwuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0M4M0RGMzgxRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmluZ09wZXJhdG9ycy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1NTk3RjgzNjFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hy
b25pemVkRml4ZWRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzQTFEMEE1OTBD
MDBGRUJDRjMgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzRDFE
MEE1OTBDMDBGRUJDRjMgLyogVGVtcG9yYXJ5Q2hhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdDODNERjQwMUQwQTU5MEMwMEZFQkNGMyAvKiBUZXN0c0NvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhlZFF1ZXVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhlZFF1ZXVl
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhl
ZFF1ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHd0Zi9GaXhlZFF1ZXVlLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisK
K1RFU1QoV1RGX0ZpeGVkUXVldWUsIEJhc2ljKQoreworICAgIEZpeGVkUXVldWU8aW50LCA0VT4g
cXVldWU7CisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UocXVldWUuaXNGdWxsKCkpOworICAgIEVYUEVDVF9FUShxdWV1ZS5zaXplKCksIDBVKTsKKyAg
ICBFWFBFQ1RfRkFMU0UocXVldWUuZGVxdWV1ZSgpKTsKK30KKworVEVTVChXVEZfRml4ZWRRdWV1
ZSwgQ2lyY3VsYXIpCit7CisgICAgRml4ZWRRdWV1ZTxDU3RyaW5nLCA0VT4gcXVldWU7CisKKyAg
ICBzdGF0aWMgY2hhciBjb25zdCogaXRlbXNbXSA9IHsgImZpcnN0IiwgInNlY29uZCIsICJ0aGly
ZCIsICJmb3VydGgiLCAiZmlmdGgiLCAic2l4dGgiIH07CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDQ7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuZW5xdWV1ZShpdGVtc1tpXSkp
OworCisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNGdWxsKCkpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuaGVhZCgpID09IGl0
ZW1zW2ldKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuZGVxdWV1ZSgpKTsKKyAgICB9CisK
KyAgICBFWFBFQ1RfRVEocXVldWUuc2l6ZSgpLCAyVSk7CisKKyAgICBmb3IgKGludCBpID0gNDsg
aSA8IDY7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuZW5xdWV1ZShpdGVtc1tpXSkp
OworCisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNGdWxsKCkpOworCisgICAgZm9yIChpbnQgaSA9
IDI7IGkgPCA2OyArK2kpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuaGVhZCgpID09IGl0
ZW1zW2ldKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuZGVxdWV1ZSgpKTsKKyAgICB9CisK
KyAgICBFWFBFQ1RfVFJVRShxdWV1ZS5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9GaXhlZFF1
ZXVlLCBDbGVhcikKK3sKKyAgICBGaXhlZFF1ZXVlPGludCwgOFU+IHF1ZXVlOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA4OyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKHF1ZXVlLmVucXVl
dWUoaSkpOworCisgICAgcXVldWUuY2xlYXIoKTsKKyAgICBFWFBFQ1RfVFJVRShxdWV1ZS5pc0Vt
cHR5KCkpOworICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5kZXF1ZXVlKCkpOworfQorCitURVNUKFdU
Rl9GaXhlZFF1ZXVlLCBMaW1pdHMpCit7CisgICAgRml4ZWRRdWV1ZTxDU3RyaW5nLCA0VT4gcXVl
dWU7CisKKyAgICBzdGF0aWMgY2hhciBjb25zdCogaXRlbXNbXSA9IHsgImZpcnN0IiwgInNlY29u
ZCIsICJ0aGlyZCIsICJmb3VydGgiIH07CisKKyAgICBmb3IgKGF1dG8gaXRlbSA6IGl0ZW1zKQor
ICAgICAgICBFWFBFQ1RfVFJVRShxdWV1ZS5lbnF1ZXVlKGl0ZW0pKTsKKworICAgIEVYUEVDVF9F
UShxdWV1ZS5zaXplKCksIHNpemVvZihpdGVtcykgLyBzaXplb2YoaXRlbXNbMF0pKTsKKworICAg
IEVYUEVDVF9GQUxTRShxdWV1ZS5lbnF1ZXVlKCJvdmVyZmxvdyIpKTsKKworICAgIGZvciAoYXV0
byBpdGVtIDogaXRlbXMpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuaGVhZCgpID09IGl0
ZW0pOworICAgICAgICBFWFBFQ1RfVFJVRShxdWV1ZS5kZXF1ZXVlKCkpOworICAgIH0KKyAgICAK
KyAgICBFWFBFQ1RfRkFMU0UocXVldWUuZGVxdWV1ZSgpKTsKK30KKworfQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
U3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxjaHJvbm8+
CisjaW5jbHVkZSA8dGhyZWFkPgorCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNs
dWRlIDx3dGYvQnJvYWRjYXN0Lmg+CisjaW5jbHVkZSA8d3RmL1N5bmNocm9uaXplZEZpeGVkUXVl
dWUuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3N0YXRpYyBjaGFyIGNvbnN0
KiB0ZXh0SXRlbShzaXplX3QgaW5kZXgpCit7CisgICAgc3RhdGljIGNoYXIgY29uc3QqIGl0ZW1z
W10gPSB7ICJmaXJzdCIsICJzZWNvbmQiLCAidGhpcmQiLCAiZm91cnRoIiwgImZpZnRoIiwgInNp
eHRoIiB9OworICAgIHJldHVybiBpbmRleCA8IHNpemVvZihpdGVtcykgLyBzaXplb2YoaXRlbXNb
MF0pID8gaXRlbXNbaW5kZXhdIDogbnVsbHB0cjsKK30KKworc3RhdGljIENTdHJpbmcgdG9VcHBl
cihjb25zdCBDU3RyaW5nJiBsb3dlcikKK3sKKyAgICBDU3RyaW5nIHVwcGVyID0gbG93ZXI7CisK
KyAgICBmb3IgKGNoYXIqIGJ1ZmZlciA9IHVwcGVyLm11dGFibGVEYXRhKCk7ICpidWZmZXI7ICsr
YnVmZmVyKQorICAgICAgICAqYnVmZmVyID0gdG9BU0NJSVVwcGVyKCpidWZmZXIpOworCisgICAg
cmV0dXJuIHVwcGVyOworfQorCitjbGFzcyBUb1VwcGVyQ29udmVydGVyIHsKK3B1YmxpYzoKKyAg
ICBUb1VwcGVyQ29udmVydGVyKCkKKyAgICAgICAgOiBtX2lzUHJvZHVjaW5nKGZhbHNlKQorICAg
ICAgICAsIG1faXNDb25zdW1pbmcoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIFdvcmtRdWV1
ZSYgcHJvZHVjZVF1ZXVlKCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBhdXRvJiBxdWV1ZSA9IFdv
cmtRdWV1ZTo6Y3JlYXRlKCJvcmcud2Via2l0LlByb2R1Y2UiKS5sZWFrUmVmKCk7CisgICAgICAg
IHJldHVybiBxdWV1ZTsKKyAgICB9CisKKyAgICBXb3JrUXVldWUmIGNvbnN1bWVRdWV1ZSgpCisg
ICAgeworICAgICAgICBzdGF0aWMgYXV0byYgcXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgib3Jn
LndlYmtpdC5Db25zdW1lIikubGVha1JlZigpOworICAgICAgICByZXR1cm4gcXVldWU7CisgICAg
fQorCisgICAgdm9pZCBzdGFydCgpCisgICAgeworICAgICAgICBpZiAoIW1faXNQcm9kdWNpbmcp
CisgICAgICAgICAgICBwcm9kdWNlKCk7CisKKyAgICAgICAgaWYgKCFtX2lzQ29uc3VtaW5nKQor
ICAgICAgICAgICAgY29uc3VtZSgpOworICAgIH0KKworICAgIHZvaWQgc3RvcCgpCisgICAgewor
ICAgICAgICBpZiAobV9pc1Byb2R1Y2luZykgeworICAgICAgICAgICAgbV9sb3dlclF1ZXVlLnNo
dXRkb3duKCk7CisgICAgICAgICAgICBtX2lzUHJvZHVjaW5nLndhaXRVbnRpbEVxdWFsKGZhbHNl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2lzQ29uc3VtaW5nKSB7CisgICAgICAgICAg
ICBtX3VwcGVyUXVldWUuc2h1dGRvd24oKTsKKyAgICAgICAgICAgIG1faXNDb25zdW1pbmcud2Fp
dFVudGlsRXF1YWwoZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBlbnF1ZXVl
KGNvbnN0IENTdHJpbmcmIGxvd2VyKQorICAgIHsKKyAgICAgICAgbV9sb3dlclF1ZXVlLmVucXVl
dWUobG93ZXIpOworICAgIH0KKworICAgIGJvb2wgaXNQcm9kdWNpbmcoKSB7IHJldHVybiBtX2lz
UHJvZHVjaW5nOyB9CisgICAgYm9vbCBpc0NvbnN1bWluZygpIHsgcmV0dXJuIG1faXNDb25zdW1p
bmc7IH0KKworICAgIHNpemVfdCBwcm9kdWNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZHVjZWQ7
IH0KKyAgICBzaXplX3QgY29uc3VtZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnN1bWVkOyB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBwcm9kdWNlKCkKKyAgICB7CisgICAgICAgIHByb2R1Y2VRdWV1
ZSgpLmRpc3BhdGNoKFt0aGlzXSB7CisKKyAgICAgICAgICAgIGZvciAoYm9vbCBzdGF0dXMgPSB0
cnVlOyBzdGF0dXM7ICkgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IG1fbG93ZXJRdWV1ZS5k
ZXF1ZXVlKFt0aGlzXShjb25zdCBDU3RyaW5nJiBsb3dlcikgeworICAgICAgICAgICAgICAgICAg
ICBtX3VwcGVyUXVldWUuZW5xdWV1ZSh0b1VwcGVyKGxvd2VyKSk7CisgICAgICAgICAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKGxvd2VyID09IHRleHRJdGVtKG1fcHJvZHVjZWQrKykpOworICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3Ioc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcygxMCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBtX2lzUHJvZHVjaW5nID0gZmFsc2U7CisgICAgICAgIH0pOworCisgICAgICAg
IG1faXNQcm9kdWNpbmcgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgY29uc3VtZSgpCisgICAg
eworICAgICAgICBjb25zdW1lUXVldWUoKS5kaXNwYXRjaChbdGhpc10geworCisgICAgICAgICAg
ICBmb3IgKGJvb2wgc3RhdHVzID0gdHJ1ZTsgc3RhdHVzOyApIHsKKyAgICAgICAgICAgICAgICBz
dGF0dXMgPSBtX3VwcGVyUXVldWUuZGVxdWV1ZShbdGhpc10oY29uc3QgQ1N0cmluZyYgdXBwZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUodXBwZXIgPT0gdG9VcHBlcih0ZXh0
SXRlbShtX2NvbnN1bWVkKyspKSk7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dGhpc190aHJl
YWQ6OnNsZWVwX2ZvcihzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUwKSk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1faXNDb25zdW1pbmcgPSBm
YWxzZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgbV9pc0NvbnN1bWluZyA9IHRydWU7CisgICAg
fQorCisgICAgU3luY2hyb25pemVkRml4ZWRRdWV1ZTxDU3RyaW5nLCA0VT4gbV9sb3dlclF1ZXVl
OworICAgIFN5bmNocm9uaXplZEZpeGVkUXVldWU8Q1N0cmluZywgNFU+IG1fdXBwZXJRdWV1ZTsK
KyAgICBCcm9hZGNhc3Q8Ym9vbD4gbV9pc1Byb2R1Y2luZzsKKyAgICBCcm9hZGNhc3Q8Ym9vbD4g
bV9pc0NvbnN1bWluZzsKKyAgICBzaXplX3QgbV9wcm9kdWNlZCB7IDAgfTsKKyAgICBzaXplX3Qg
bV9jb25zdW1lZCB7IDAgfTsKK307CisKK1RFU1QoV1RGX1N5bmNocm9uaXplZEZpeGVkUXVldWUs
IEJhc2ljKQoreworICAgIFRvVXBwZXJDb252ZXJ0ZXIgY29udmVydGVyOworCisgICAgY29udmVy
dGVyLnN0YXJ0KCk7CisgICAgRVhQRUNUX1RSVUUoY29udmVydGVyLmlzUHJvZHVjaW5nKCkgJiYg
Y29udmVydGVyLmlzQ29uc3VtaW5nKCkpOworCisgICAgY29udmVydGVyLnN0b3AoKTsKKyAgICBF
WFBFQ1RfRkFMU0UoY29udmVydGVyLmlzUHJvZHVjaW5nKCkgfHwgY29udmVydGVyLmlzQ29uc3Vt
aW5nKCkpOworCisgICAgRVhQRUNUX0VRKGNvbnZlcnRlci5wcm9kdWNlZCgpLCAwVSk7CisgICAg
RVhQRUNUX0VRKGNvbnZlcnRlci5jb25zdW1lZCgpLCAwVSk7Cit9CisKK1RFU1QoV1RGX1N5bmNo
cm9uaXplZEZpeGVkUXVldWUsIExpbWl0cykKK3sKKyAgICBUb1VwcGVyQ29udmVydGVyIGNvbnZl
cnRlcjsKKworICAgIGNvbnZlcnRlci5zdGFydCgpOworICAgIEVYUEVDVF9UUlVFKGNvbnZlcnRl
ci5pc1Byb2R1Y2luZygpICYmIGNvbnZlcnRlci5pc0NvbnN1bWluZygpKTsKKworICAgIHNpemVf
dCBjb3VudCA9IDA7CisgICAgd2hpbGUgKGNoYXIgY29uc3QqIGl0ZW0gPSB0ZXh0SXRlbShjb3Vu
dCkpIHsKKyAgICAgICAgY29udmVydGVyLmVucXVldWUoaXRlbSk7CisgICAgICAgICsrY291bnQ7
CisKKyAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMoMSkpOworICAgIH0KKworICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2Zvcihz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDQwMCkpOworCisgICAgY29udmVydGVyLnN0b3AoKTsK
KyAgICBFWFBFQ1RfRkFMU0UoY29udmVydGVyLmlzUHJvZHVjaW5nKCkgfHwgY29udmVydGVyLmlz
Q29uc3VtaW5nKCkpOworCisgICAgRVhQRUNUX0VRKGNvbnZlcnRlci5wcm9kdWNlZCgpLCBjb3Vu
dCk7CisgICAgRVhQRUNUX0VRKGNvbnZlcnRlci5jb25zdW1lZCgpLCBjb3VudCk7Cit9CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289700</attachid>
            <date>2016-09-23 13:19:18 -0700</date>
            <delta_ts>2016-09-30 17:50:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162478-20160923131627.patch</filename>
            <type>text/plain</type>
            <size>33981</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDYyODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE2LTA5LTIzICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFN5bmNocm9uaXplZEZpeGVk
UXVldWUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjQ3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGUgZm9sbG93aW5nIGNsYXNzZXM6CisKKyAgICAgICAgMS4g
QnJvYWRjYXN0OiBJdCBpcyBlcXVpdmFsZW50IHRvIHN0ZDo6YXRvbWljIGluIHRoZSBhZGRpdGlv
biB0byBvdGhlcgorICAgICAgICAgICBibG9ja2luZyBmdW5jdGlvbnM6IGluY3JlbWVudCgpLCBk
ZWNyZW1lbnQoKSBhbmQgd2FpdFVudGlsRXF1YWwoKS4KKworICAgICAgICAyLiBGaXhlZFF1ZXVl
OiBBIGNpcmN1bGFyIHF1ZXVlIChhLmsuYSBjaXJjdWxhciBidWZmZXIpLgorCisgICAgICAgIDMu
IFNhZmVGaXhlZFF1ZXVlOiBBIHJlZ3VsYXIgRml4ZWRRdWV1ZSBidXQgaXRzIGVucXVldWUoKSBh
bmQgZGVxdWV1ZSgpCisgICAgICAgICAgIGFyZSBjb250cm9sbGVkIGJ5IHR3byBCcm9hZGNhc3Rz
OiBtX2VtcHR5IGFuZCBtX2Z1bGwuIEFsc28gaXRzIGRlcXVldWUoKQorICAgICAgICAgICB0YWtl
cyBhIGZ1bmN0b3IgdG8gcHJvY2VzcyB0aGUgZWxlbWVudC10by1iZS1yZW1vdmVkIHNhZmVseS4K
KworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0
Zi9Ccm9hZGNhc3QuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6QnJvYWRjYXN0
KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0OjpyZXNldCk6CisgICAgICAgIChXVEY6OkJyb2Fk
Y2FzdDo6aXNTaHV0ZG93bik6CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6b3BlcmF0b3IgVCk6
CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkJy
b2FkY2FzdDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0OjpzaHV0ZG93bik6
CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6d2FpdFVudGlsRXF1YWwpOgorICAgICAgICAoV1RG
OjpCcm9hZGNhc3Q6OmRlY3JlbWVudCk6CisgICAgICAgIChXVEY6OkJyb2FkY2FzdDo6aW5jcmVt
ZW50KToKKyAgICAgICAgKFdURjo6QnJvYWRjYXN0Ojp3YWl0VW50aWwpOgorICAgICAgICAoV1RG
OjpCcm9hZGNhc3Q6OndhaXRVbnRpbEFuZE5vdGlmeSk6CisgICAgICAgICogd3RmL0ZpeGVkUXVl
dWUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkZpeGVkUXVldWU6OkZpeGVkUXVldWUpOgorICAg
ICAgICAoV1RGOjpGaXhlZFF1ZXVlOjppc0VtcHR5KToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1
ZTo6aXNGdWxsKToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1ZTo6ZW5xdWV1ZSk6CisgICAgICAg
IChXVEY6OkZpeGVkUXVldWU6OmRlcXVldWUpOgorICAgICAgICAoV1RGOjpGaXhlZFF1ZXVlOjpo
ZWFkKToKKyAgICAgICAgKFdURjo6Rml4ZWRRdWV1ZTo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpG
aXhlZFF1ZXVlOjpzaXplKToKKyAgICAgICAgKiB3dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6U3luY2hyb25p
emVkRml4ZWRRdWV1ZSk6CisgICAgICAgIChXVEY6OlN5bmNocm9uaXplZEZpeGVkUXVldWU6OnJl
c2V0KToKKyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6c2h1dGRvd24pOgor
ICAgICAgICAoV1RGOjpTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlOjplbnF1ZXVlKToKKyAgICAgICAg
KFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6ZGVxdWV1ZSk6CisKIDIwMTYtMDktMjIgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGZW5jZXMgb24geDg2IHNo
b3VsZCBiZSBhIGxvdCBjaGVhcGVyCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNjI1OSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksOSBAQAogCQk1
MTVGNzk1NjFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NF
RDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCAqLzsgfTsKIAkJNTM5RUIwNjMxRDU1Mjg0MjAwQzgy
RUY3IC8qIExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi87IH07
CiAJCTU1MzA3MUNBMUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MzA3MUM5MUM0MDQyNzIwMDM4
NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLzsgfTsKKwkJNTU5N0Y4MkYxRDk0Qjk5NzAwNjZCQzIx
IC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6
ZWRGaXhlZFF1ZXVlLmggKi87IH07CisJCTU1OTdGODMwMUQ5NEI5OTcwMDY2QkMyMSAvKiBCcm9h
ZGNhc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1
OTdGODJEMUQ5NEI5OTcwMDY2QkMyMSAvKiBCcm9hZGNhc3QuaCAqLzsgfTsKKwkJNTU5N0Y4MzEx
RDk0Qjk5NzAwNjZCQzIxIC8qIEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OTdGODJFMUQ5NEI5OTcwMDY2QkMyMSAvKiBGaXhlZFF1
ZXVlLmggKi87IH07CiAJCTVDN0M4OEQ0MUQwQTNBMEEwMDlEMkY2RCAvKiBVbmlxdWVSZWYuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDN0M4OEQzMUQw
QTNBMEEwMDlEMkY2RCAvKiBVbmlxdWVSZWYuaCAqLzsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAw
RkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwQTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdp
c3RyeS5jcHAgKi87IH07CiAJCTcwQTk5M0ZGMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdp
c3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBB
OTkzRkQxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmggKi87IH07CkBAIC00NjIs
NiArNDY1LDkgQEAKIAkJNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVl
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRRdWV1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzlFQjA2MjFENTUyODQyMDBDODJFRjcg
LyogTEVCRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMRUJEZWNv
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MzA3MUM5MUM0MDQyNzIwMDM4
NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGlueUxSVUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1OTdGODJDMUQ5
NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9uaXplZEZpeGVkUXVldWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTU5N0Y4MkQxRDk0Qjk5NzAwNjZCQzIxIC8qIEJyb2FkY2FzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCcm9hZGNhc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU5N0Y4MkUxRDk0Qjk5NzAwNjZCQzIxIC8qIEZpeGVkUXVl
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRml4ZWRRdWV1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjQzMzgzQTVEMEI0NjNDOTQzM0Q5MzMgLyogSW5k
ZXhNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhNYXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM3Qzg4RDMxRDBBM0EwQTAwOUQyRjZEIC8qIFVu
aXF1ZVJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmlxdWVSZWYuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQyNDdCNjIxNDY4OUI4NjAwRTc4Qjc2IC8q
IGxpYldURi5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJXVEYuYTsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTg0Nyw2ICs4NTMsNyBAQAogCQkJCUE4
QTQ3MjY0MTUxQTgyNUEwMDQxMjNGRiAvKiBCbG9ja1N0YWNrLmggKi8sCiAJCQkJQThBNDcyNjUx
NTFBODI1QTAwNDEyM0ZGIC8qIEJsb29tRmlsdGVyLmggKi8sCiAJCQkJMEY5MzI3NEExQzE3RjRC
NzAwQ0Y2NTY0IC8qIEJveC5oICovLAorCQkJCTU1OTdGODJEMUQ5NEI5OTcwMDY2QkMyMSAvKiBC
cm9hZGNhc3QuaCAqLywKIAkJCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29y
dC5oICovLAogCQkJCUE4QTQ3MjY3MTUxQTgyNUEwMDQxMjNGRiAvKiBCdW1wUG9pbnRlckFsbG9j
YXRvci5oICovLAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5QTJGNSAvKiBCeXRlT3JkZXIuaCAq
LywKQEAgLTg4Nyw2ICs4OTQsNyBAQAogCQkJCUE4QTQ3MkExMTUxQTgyNUEwMDQxMjNGRiAvKiBG
YXN0TWFsbG9jLmNwcCAqLywKIAkJCQlBOEE0NzJBMjE1MUE4MjVBMDA0MTIzRkYgLyogRmFzdE1h
bGxvYy5oICovLAogCQkJCUIzOEZEN0JDMTY4OTUzRTgwMDY1Qzk2OSAvKiBGZWF0dXJlRGVmaW5l
cy5oICovLAorCQkJCTU1OTdGODJFMUQ5NEI5OTcwMDY2QkMyMSAvKiBGaXhlZFF1ZXVlLmggKi8s
CiAJCQkJMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5jcHAgKi8s
CiAJCQkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5oICovLAog
CQkJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLywKQEAgLTk5MCw2
ICs5OTgsNyBAQAogCQkJCTJDREVEMEYyMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmggKi8s
CiAJCQkJMTQ2OTQxOTAxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oICovLAogCQkJ
CTE0Njk0MTkxMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXJDRi5jcHAgKi8sCisJCQkJ
NTU5N0Y4MkMxRDk0Qjk5NzAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCAqLywK
IAkJCQkxNEYzQjBGNjE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oICov
LAogCQkJCTE0Njk0MTk0MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCAqLywKIAkJ
CQkxNDY5NDE5ODE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwICovLApAQCAt
MTM0Miw2ICsxMzUxLDcgQEAKIAkJCQlGRTgyMjUzMTFCMkExRTVCMDBCQTY4RkQgLyogTmFrZWRQ
dHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VGMTUxQTgyNUIwMDQxMjNGRiAvKiBOb25j
b3B5YWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU5N0Y4MzExRDk0Qjk5NzAwNjZCQzIxIC8q
IEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFNDY1MTZFMTlEQjFGQjQwMDNFQ0Ew
NSAvKiBOU01hcFRhYmxlU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGNTE1MUE4MjVC
MDA0MTIzRkYgLyogTnVtYmVyT2ZDb3Jlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0UyOUMzM0Ux
NUZGRDc5QjAwNTE2RDYxIC8qIE9iamNSdW50aW1lRXh0cmFzLmggaW4gSGVhZGVycyAqLywKQEAg
LTE0MDMsNiArMTQxMyw3IEBACiAJCQkJQzRGOEE5MzcxOUM2NUVCNDAwQjJCMTVEIC8qIFN0b3B3
YXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2QkI3NjkxNjJGMzAwNTAwREQxNkRCIC8qIFN0
cmVhbUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0IxNTFBODI1QjAwNDEyM0ZG
IC8qIFN0cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU5N0Y4MkYxRDk0Qjk5NzAw
NjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDNEMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MzBCNDc4OTFBQUFBQzFBMDAxMjIzREEgLyogU3RyaW5nQ29tbW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQzRTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQ29uY2F0ZW5hdGUu
aCBpbiBIZWFkZXJzICovLApAQCAtMTQ0NCw2ICsxNDU1LDcgQEAKIAkJCQlBOEE0NzQ3RTE1MUE4
MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ3RjE1MUE4
MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4
MDE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NTk3Rjgz
MDFEOTRCOTk3MDA2NkJDMjEgLyogQnJvYWRjYXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzRD
RkM4RTE2QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
NTAxNjQxQkIyNThENTAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFGQTQ3QzhCMTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmggaW4gSGVhZGVycyAq
LywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jyb2FkY2FzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0Jyb2FkY2FzdC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Jy
b2FkY2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3Rm
L0xvY2tlci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIEJyb2FkY2FzdCB7CitwdWJsaWM6CisgICAgQnJvYWRjYXN0KGNvbnN0IFQmIHZhbHVlKQor
ICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAgICwgbV9pbml0VmFsdWUodmFsdWUpCisg
ICAgICAgICwgbV9taW5WYWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX21heFZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICB9CisKKyAgICBCcm9hZGNhc3QoY29uc3QgVCYgdmFsdWUsIGNvbnN0IFQmIG1p
blZhbHVlLCBjb25zdCBUJiBtYXhWYWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAg
ICAgICAsIG1faW5pdFZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fbWluVmFsdWUobWluVmFsdWUp
CisgICAgICAgICwgbV9tYXhWYWx1ZShtYXhWYWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCByZXNldCgpCisgICAgeworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBiZWZvcmUgc3RhcnRpbmcgc2hhcmluZyB0aGlzIHNlbWFwaG9yZSB3aXRoIG90aGVy
IHRocmVhZHMuCisgICAgICAgIG1fdmFsdWUgPSBtX2luaXRWYWx1ZTsKKyAgICAgICAgbV9pc1No
dXRkb3duID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTaHV0ZG93bigpIGNvbnN0
IHsgcmV0dXJuIG1faXNTaHV0ZG93bjsgfQorCisgICAgb3BlcmF0b3IgVCgpCisgICAgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgdmFsdWUpCisg
ICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHJl
dHVybiBtX3ZhbHVlID09IHZhbHVlOworICAgIH0KKyAgICAKKyAgICBUIG9wZXJhdG9yPShjb25z
dCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4
KTsKKyAgICAgICAgbV92YWx1ZSA9IHZhbHVlOworICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlB
bGwoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNodXRk
b3duKCkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAg
ICAgICAgbV9pc1NodXRkb3duID0gdHJ1ZTsKKyAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxs
KCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxFcXVhbChjb25zdCBUJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHdhaXRVbnRpbChbdGhpcywgdmFsdWVdKCkgeyByZXR1cm4gbV9pc1NodXRk
b3duIHx8IG1fdmFsdWUgPT0gdmFsdWU7IH0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlY3Jl
bWVudCgpCisgICAgeworICAgICAgICB3YWl0VW50aWxBbmROb3RpZnkoW3RoaXNdKCkgeyByZXR1
cm4gbV9pc1NodXRkb3duIHx8IChtX3ZhbHVlID4gbV9taW5WYWx1ZSAmJiBtX3ZhbHVlLS0pOyB9
KTsKKyAgICB9CisKKyAgICB2b2lkIGluY3JlbWVudCgpCisgICAgeworICAgICAgICB3YWl0VW50
aWxBbmROb3RpZnkoW3RoaXNdKCkgeyByZXR1cm4gbV9pc1NodXRkb3duIHx8IChtX3ZhbHVlIDwg
bV9tYXhWYWx1ZSAmJiArK21fdmFsdWUpOyB9KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHdhaXRVbnRpbChjb25zdCBGdW5jdG9y
JiBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRl
eCk7CisgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9tdXRleCwgcHJlZGljYXRlKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgd2FpdFVudGlsQW5k
Tm90aWZ5KGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIExvY2tIb2xk
ZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX211dGV4
LCBwcmVkaWNhdGUpOworICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICB9CisK
KyAgICBMb2NrIG1fbXV0ZXg7CisgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAgIFQgbV92
YWx1ZSwgbV9pbml0VmFsdWUsIG1fbWluVmFsdWUsIG1fbWF4VmFsdWU7CisgICAgYm9vbCBtX2lz
U2h1dGRvd24geyBmYWxzZSB9OworfTsKKyAgICAKK30KKwordXNpbmcgV1RGOjpCcm9hZGNhc3Q7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaXhlZFF1ZXVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvRml4ZWRRdWV1ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zp
eGVkUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3Bh
Y2UgV1RGIHsKKyAgICAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBCdWZmZXJTaXplPgor
Y2xhc3MgRml4ZWRRdWV1ZSB7CitwdWJsaWM6CisgICAgRml4ZWRRdWV1ZSgpCisgICAgeworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KCEoKEJ1ZmZlclNpemUgLSAxKSAmIEJ1ZmZlclNpemUpLCAiQnVm
ZmVyU2l6ZSBtdXN0IGJlIHBvd2VyIG9mIDIuIik7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faXNFbXB0eTsgfQorICAgIGJvb2wgaXNGdWxsKCkgY29u
c3QgeyByZXR1cm4gKG1fdGFpbCArIDEpICUgQnVmZmVyU2l6ZSA9PSBtX2hlYWQ7IH0KKyAgICAK
KyAgICBib29sIGVucXVldWUoY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoaXNG
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGlzRW1wdHko
KSkKKyAgICAgICAgICAgIG1faXNFbXB0eSA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX3RhaWwgPSAobV90YWlsICsgMSkgJSBCdWZmZXJTaXplOworCisgICAgICAgIG1fYnVm
ZmVyW21fdGFpbF0gPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgZGVxdWV1ZSgpCisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG1faGVhZCA9PSBtX3Rh
aWwpCisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2hl
YWQgPSAobV9oZWFkICsgMSkgJSBCdWZmZXJTaXplOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgY29uc3QgVCYgaGVhZCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybiBtX2J1ZmZlclttX2hlYWRdOwor
ICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9pc0VtcHR5ID0gdHJ1
ZTsKKyAgICAgICAgbV9oZWFkID0gbV90YWlsID0gMDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIG1faGVhZCA8PSBtX3RhaWwgPyBtX3RhaWwgLSBtX2hl
YWQgKyAxIDogQnVmZmVyU2l6ZSAtIG1faGVhZCArIG1fdGFpbCArIDE7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBzaXplX3QgbV9oZWFkIHsgMCB9OworICAgIHNpemVfdCBtX3RhaWwgeyAw
IH07CisgICAgYm9vbCBtX2lzRW1wdHkgeyB0cnVlIH07CisgICAgVCBtX2J1ZmZlcltCdWZmZXJT
aXplXTsKK307CisKK30KKwordXNpbmcgV1RGOjpGaXhlZFF1ZXVlOwpJbmRleDogU291cmNlL1dU
Ri93dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1N5bmNocm9uaXplZEZpeGVkUXVldWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Ccm9hZGNhc3QuaD4KKyNpbmNsdWRlIDx3dGYvRml4
ZWRRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5o
PgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEJ1ZmZl
clNpemU+CitjbGFzcyBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlIDogcHVibGljIEZpeGVkUXVldWU8
VCwgQnVmZmVyU2l6ZT4geworcHVibGljOgorICAgIFN5bmNocm9uaXplZEZpeGVkUXVldWUoKQor
ICAgICAgICA6IG1fZW1wdHkoQnVmZmVyU2l6ZSwgMCwgQnVmZmVyU2l6ZSkKKyAgICAgICAgLCBt
X2Z1bGwoMCwgMCwgQnVmZmVyU2l6ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVz
ZXQoKQorICAgIHsKKyAgICAgICAgbV9lbXB0eS5yZXNldCgpOworICAgICAgICBtX2Z1bGwucmVz
ZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaHV0ZG93bigpCisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHRoaXMtPmNsZWFyKCk7Cisg
ICAgICAgIG1fZW1wdHkuc2h1dGRvd24oKTsKKyAgICAgICAgbV9mdWxsLnNodXRkb3duKCk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgZW5xdWV1ZShjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIG1fZW1wdHkuZGVjcmVtZW50KCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAgICAgIGlmIChtX2VtcHR5LmlzU2h1dGRv
d24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBGaXhlZFF1
ZXVlPFQsIEJ1ZmZlclNpemU+OjplbnF1ZXVlKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBt
X2Z1bGwuaW5jcmVtZW50KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIGJvb2wgZGVxdWV1ZShjb25zdCBGdW5j
dG9yJiBvcGVyYXRpb24pCisgICAgeworICAgICAgICBtX2Z1bGwuZGVjcmVtZW50KCk7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAg
ICAgICAgIGlmIChtX2Z1bGwuaXNTaHV0ZG93bigpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3BlcmF0aW9uKHRoaXMtPmhlYWQoKSk7
CisgICAgICAgICAgICBGaXhlZFF1ZXVlPFQsIEJ1ZmZlclNpemU+OjpkZXF1ZXVlKCk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9lbXB0eS5pbmNyZW1lbnQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCitwcml2YXRlOgorICAgIEJyb2FkY2FzdDxpbnQ+IG1fZW1wdHk7CisgICAgQnJv
YWRjYXN0PGludD4gbV9mdWxsOworICAgIExvY2sgbV9tdXRleDsKK307CisKK30KKwordXNpbmcg
V1RGOjpTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MzE4KQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTYtMDktMjMgIFNhaWQg
QWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgU3lu
Y2hyb25pemVkRml4ZWRRdWV1ZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNDc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhl
ZFF1ZXVlLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcDog
QWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXh0SXRlbSk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjp0b1VwcGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252
ZXJ0ZXI6OlRvVXBwZXJDb252ZXJ0ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBl
ckNvbnZlcnRlcjo6cHJvZHVjZVF1ZXVlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBw
ZXJDb252ZXJ0ZXI6OmNvbnN1bWVRdWV1ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1Vw
cGVyQ29udmVydGVyOjpzdGFydCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29u
dmVydGVyOjpzdG9wKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6
OmVucXVldWUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6aXNQ
cm9kdWNpbmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6aXND
b25zdW1pbmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6cHJv
ZHVjZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6Y29uc3Vt
ZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6cHJvZHVjZSk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpjb25zdW1lKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE2LTA5LTIzICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMDQx
NjMpOiBbR1RLXSBBUEkgdGVzdCAvd2Via2l0Mi9XZWJLaXRTZWN1cml0eU1hbmFnZXIvZmlsZS14
aHIgaXMgZmFpbGluZwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNjI1
OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNiArMTM3LDggQEAKIAkJNTJFNUNFNDkx
NEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkU1Q0U0ODE0RDIxRUFCMDAzQjJCRDgg
LyogUGFyZW50RnJhbWVfQnVuZGxlLmNwcCAqLzsgfTsKIAkJNTM2NzcwMzQxQ0M4MDIyODAwRDQy
NUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzMxQ0M4MDIyODAwRDQyNUIxIC8qIFdl
YlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tICovOyB9OwogCQk1MzY3NzAzNjFDQzgxQjYxMDBE
NDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzY3NzAzNTFDQzgxMkY5MDBE
NDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbCAqLzsgfTsKKwkJNTU5N0Y4
MzMxRDk1ODkxOTAwNjZCQzIxIC8qIEZpeGVkUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU5N0Y4MzIxRDk1ODkxOTAwNjZCQzIxIC8qIEZp
eGVkUXVldWUuY3BwICovOyB9OworCQk1NTk3RjgzNjFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hy
b25pemVkRml4ZWRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5jcHAgKi87IH07CiAJCTU3MTRFQ0I5MUNBOEI1QjAwMDA1MUFDOCAvKiBEb3dubG9hZFJl
cXVlc3RPcmlnaW5hbFVSTC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0I4MUNBOEI1ODgwMDA1MUFDOCAvKiBEb3dubG9hZFJl
cXVlc3RPcmlnaW5hbFVSTC5odG1sICovOyB9OwogCQk1NzE0RUNCQjFDQThCRkU0MDAwNTFBQzgg
LyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0JBMUNBOEJGRDEwMDA1
MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgKi87IH07CiAJCTU3
MTRFQ0JEMUNBOEMyMkEwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTDIuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
NzE0RUNCQzFDQThDMjE4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwyLmh0
bWwgKi87IH07CkBAIC04OTksNiArOTAxLDggQEAKIAkJNTJFNUNFNDgxNEQyMUVBQjAwM0IyQkQ4
IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYXJlbnRGcmFtZV9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzY3NzAzMzFDQzgwMjI4MDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRp
b24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRP
YmplY3REZXNjcmlwdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM2Nzcw
MzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1s
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTk3RjgzMjFEOTU4OTE5MDA2NkJDMjEg
LyogRml4ZWRRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
aXhlZFF1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU5N0Y4MzQxRDk1
OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MTRFQ0I4MUNBOEI1ODgwMDA1MUFDOCAvKiBEb3du
bG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0g
RG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTcxNEVDQkExQ0E4QkZEMTAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFs
VVJMRnJhbWUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IERvd25sb2FkUmVxdWVz
dE9yaWdpbmFsVVJMRnJhbWUuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcx
NEVDQkMxQ0E4QzIxODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMMi5odG1s
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwy
Lmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzMxLDYgKzE3MzUsNyBAQAog
CQkJCTFBMzUyNEE5MUQ2MjdCRDQwMDMxNzI5QiAvKiBEZWxldGVkQWRkcmVzc09mT3BlcmF0b3Iu
aCAqLywKIAkJCQlFNEE3NTdEMzE3OEFFQTVCMDBCNUQ3QTQgLyogRGVxdWUuY3BwICovLAogCQkJ
CTFBRjdCMjFEMUQ2Q0QxMkUwMDhDMTI2QyAvKiBFbnVtVHJhaXRzLmNwcCAqLywKKwkJCQk1NTk3
RjgzMjFEOTU4OTE5MDA2NkJDMjEgLyogRml4ZWRRdWV1ZS5jcHAgKi8sCiAJCQkJN0EzOEQ3RTUx
Qzc1MkQ1RjAwNEYxNTdEIC8qIEhhc2hDb3VudGVkU2V0LmNwcCAqLywKIAkJCQkwQkNEODMzNDE0
ODU3Q0U0MDBFQTIwMDMgLyogSGFzaE1hcC5jcHAgKi8sCiAJCQkJMjZCMkRGRjgxNUJERTU5OTAw
NEY2OTFEIC8qIEhhc2hTZXQuY3BwICovLApAQCAtMTc2Miw2ICsxNzY3LDcgQEAKIAkJCQkyNkYx
QjQ0MzE1Q0E0MzRGMDBEMUU0QkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQzAxMzYzQzcx
M0MzOTk3MzAwRUYzOTY0IC8qIFN0cmluZ09wZXJhdG9ycy5jcHAgKi8sCiAJCQkJN0M3NEQ0MkQx
ODgyMjhGMzAwRTVFRDU3IC8qIFN0cmluZ1ZpZXcuY3BwICovLAorCQkJCTU1OTdGODM0MUQ5NTk2
QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCAqLywKIAkJCQkwQkNEODU2
OTE0ODVDOThCMDBFQTIwMDMgLyogVGVtcG9yYXJ5Q2hhbmdlLmNwcCAqLywKIAkJCQk1QzVFNjMz
RDFEMEI2Nzk0MDA4NUEwMjUgLyogVW5pcXVlUmVmLmNwcCAqLywKIAkJCQk3Q0QwRDVBQTFENTUz
NERFMDAwQ0M5RTEgLyogVmFyaWFudC5jcHAgKi8sCkBAIC0yMjQwLDYgKzIyNDYsNyBAQAogCQkJ
CTdDODNERjU5MUQwQTU5MEMwMEZFQkNGMyAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDODNERjEzMUQwQTU5MEMwMEZFQkNGMyAvKiBSZWRCbGFja1RyZWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M4M0RGMTQxRDBBNTkwQzAwRkVCQ0YzIC8qIFJlZi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1NTk3RjgzMzFEOTU4OTE5MDA2NkJDMjEgLyogRml4ZWRRdWV1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYxNTFEMEE1OTBDMDBGRUJDRjMgLyogUmVmQ291bnRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVENzFEMEE1OTBDMDBGRUJDRjMgLyogUmVm
TG9nZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjE2MUQwQTU5MEMwMEZFQkNGMyAv
KiBSZWZQdHIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMjUyLDYgKzIyNTksNyBAQAogCQkJCTdD
ODNERjM2MUQwQTU5MEMwMEZFQkNGMyAvKiBTdHJpbmdIYXNoZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0M4M0RGMzcxRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmluZ0ltcGwuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0M4M0RGMzgxRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmluZ09wZXJhdG9ycy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1NTk3RjgzNjFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hy
b25pemVkRml4ZWRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzQTFEMEE1OTBD
MDBGRUJDRjMgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzRDFE
MEE1OTBDMDBGRUJDRjMgLyogVGVtcG9yYXJ5Q2hhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdDODNERjQwMUQwQTU5MEMwMEZFQkNGMyAvKiBUZXN0c0NvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhlZFF1ZXVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhlZFF1ZXVl
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhl
ZFF1ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHd0Zi9GaXhlZFF1ZXVlLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisK
K1RFU1QoV1RGX0ZpeGVkUXVldWUsIEJhc2ljKQoreworICAgIEZpeGVkUXVldWU8aW50LCA0VT4g
cXVldWU7CisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UocXVldWUuaXNGdWxsKCkpOworICAgIEVYUEVDVF9FUShxdWV1ZS5zaXplKCksIDBVKTsKKyAg
ICBFWFBFQ1RfRkFMU0UocXVldWUuZGVxdWV1ZSgpKTsKK30KKworVEVTVChXVEZfRml4ZWRRdWV1
ZSwgQ2lyY3VsYXIpCit7CisgICAgRml4ZWRRdWV1ZTxDU3RyaW5nLCA0VT4gcXVldWU7CisKKyAg
ICBzdGF0aWMgY2hhciBjb25zdCogaXRlbXNbXSA9IHsgImZpcnN0IiwgInNlY29uZCIsICJ0aGly
ZCIsICJmb3VydGgiLCAiZmlmdGgiLCAic2l4dGgiIH07CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDQ7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuZW5xdWV1ZShpdGVtc1tpXSkp
OworCisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNGdWxsKCkpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuaGVhZCgpID09IGl0
ZW1zW2ldKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuZGVxdWV1ZSgpKTsKKyAgICB9CisK
KyAgICBFWFBFQ1RfRVEocXVldWUuc2l6ZSgpLCAyVSk7CisKKyAgICBmb3IgKGludCBpID0gNDsg
aSA8IDY7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuZW5xdWV1ZShpdGVtc1tpXSkp
OworCisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNGdWxsKCkpOworCisgICAgZm9yIChpbnQgaSA9
IDI7IGkgPCA2OyArK2kpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuaGVhZCgpID09IGl0
ZW1zW2ldKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuZGVxdWV1ZSgpKTsKKyAgICB9CisK
KyAgICBFWFBFQ1RfVFJVRShxdWV1ZS5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9GaXhlZFF1
ZXVlLCBDbGVhcikKK3sKKyAgICBGaXhlZFF1ZXVlPGludCwgOFU+IHF1ZXVlOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA4OyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKHF1ZXVlLmVucXVl
dWUoaSkpOworCisgICAgcXVldWUuY2xlYXIoKTsKKyAgICBFWFBFQ1RfVFJVRShxdWV1ZS5pc0Vt
cHR5KCkpOworICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5kZXF1ZXVlKCkpOworfQorCitURVNUKFdU
Rl9GaXhlZFF1ZXVlLCBMaW1pdHMpCit7CisgICAgRml4ZWRRdWV1ZTxDU3RyaW5nLCA0VT4gcXVl
dWU7CisKKyAgICBzdGF0aWMgY2hhciBjb25zdCogaXRlbXNbXSA9IHsgImZpcnN0IiwgInNlY29u
ZCIsICJ0aGlyZCIsICJmb3VydGgiIH07CisKKyAgICBmb3IgKGF1dG8gaXRlbSA6IGl0ZW1zKQor
ICAgICAgICBFWFBFQ1RfVFJVRShxdWV1ZS5lbnF1ZXVlKGl0ZW0pKTsKKworICAgIEVYUEVDVF9F
UShxdWV1ZS5zaXplKCksIHNpemVvZihpdGVtcykgLyBzaXplb2YoaXRlbXNbMF0pKTsKKworICAg
IEVYUEVDVF9GQUxTRShxdWV1ZS5lbnF1ZXVlKCJvdmVyZmxvdyIpKTsKKworICAgIGZvciAoYXV0
byBpdGVtIDogaXRlbXMpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuaGVhZCgpID09IGl0
ZW0pOworICAgICAgICBFWFBFQ1RfVFJVRShxdWV1ZS5kZXF1ZXVlKCkpOworICAgIH0KKyAgICAK
KyAgICBFWFBFQ1RfRkFMU0UocXVldWUuZGVxdWV1ZSgpKTsKK30KKworfQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
U3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxjaHJvbm8+
CisjaW5jbHVkZSA8dGhyZWFkPgorCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNs
dWRlIDx3dGYvQnJvYWRjYXN0Lmg+CisjaW5jbHVkZSA8d3RmL1N5bmNocm9uaXplZEZpeGVkUXVl
dWUuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3N0YXRpYyBjaGFyIGNvbnN0
KiB0ZXh0SXRlbShzaXplX3QgaW5kZXgpCit7CisgICAgc3RhdGljIGNoYXIgY29uc3QqIGl0ZW1z
W10gPSB7ICJmaXJzdCIsICJzZWNvbmQiLCAidGhpcmQiLCAiZm91cnRoIiwgImZpZnRoIiwgInNp
eHRoIiB9OworICAgIHJldHVybiBpbmRleCA8IHNpemVvZihpdGVtcykgLyBzaXplb2YoaXRlbXNb
MF0pID8gaXRlbXNbaW5kZXhdIDogbnVsbHB0cjsKK30KKworc3RhdGljIENTdHJpbmcgdG9VcHBl
cihjb25zdCBDU3RyaW5nJiBsb3dlcikKK3sKKyAgICBDU3RyaW5nIHVwcGVyID0gbG93ZXI7CisK
KyAgICBmb3IgKGNoYXIqIGJ1ZmZlciA9IHVwcGVyLm11dGFibGVEYXRhKCk7ICpidWZmZXI7ICsr
YnVmZmVyKQorICAgICAgICAqYnVmZmVyID0gdG9BU0NJSVVwcGVyKCpidWZmZXIpOworCisgICAg
cmV0dXJuIHVwcGVyOworfQorCitjbGFzcyBUb1VwcGVyQ29udmVydGVyIHsKK3B1YmxpYzoKKyAg
ICBUb1VwcGVyQ29udmVydGVyKCkKKyAgICAgICAgOiBtX2lzUHJvZHVjaW5nKGZhbHNlKQorICAg
ICAgICAsIG1faXNDb25zdW1pbmcoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIFdvcmtRdWV1
ZSYgcHJvZHVjZVF1ZXVlKCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBhdXRvJiBxdWV1ZSA9IFdv
cmtRdWV1ZTo6Y3JlYXRlKCJvcmcud2Via2l0LlByb2R1Y2UiKS5sZWFrUmVmKCk7CisgICAgICAg
IHJldHVybiBxdWV1ZTsKKyAgICB9CisKKyAgICBXb3JrUXVldWUmIGNvbnN1bWVRdWV1ZSgpCisg
ICAgeworICAgICAgICBzdGF0aWMgYXV0byYgcXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgib3Jn
LndlYmtpdC5Db25zdW1lIikubGVha1JlZigpOworICAgICAgICByZXR1cm4gcXVldWU7CisgICAg
fQorCisgICAgdm9pZCBzdGFydCgpCisgICAgeworICAgICAgICBpZiAoIW1faXNQcm9kdWNpbmcp
CisgICAgICAgICAgICBwcm9kdWNlKCk7CisKKyAgICAgICAgaWYgKCFtX2lzQ29uc3VtaW5nKQor
ICAgICAgICAgICAgY29uc3VtZSgpOworICAgIH0KKworICAgIHZvaWQgc3RvcCgpCisgICAgewor
ICAgICAgICBpZiAobV9pc1Byb2R1Y2luZykgeworICAgICAgICAgICAgbV9sb3dlclF1ZXVlLnNo
dXRkb3duKCk7CisgICAgICAgICAgICBtX2lzUHJvZHVjaW5nLndhaXRVbnRpbEVxdWFsKGZhbHNl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2lzQ29uc3VtaW5nKSB7CisgICAgICAgICAg
ICBtX3VwcGVyUXVldWUuc2h1dGRvd24oKTsKKyAgICAgICAgICAgIG1faXNDb25zdW1pbmcud2Fp
dFVudGlsRXF1YWwoZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBlbnF1ZXVl
KGNvbnN0IENTdHJpbmcmIGxvd2VyKQorICAgIHsKKyAgICAgICAgbV9sb3dlclF1ZXVlLmVucXVl
dWUobG93ZXIpOworICAgIH0KKworICAgIGJvb2wgaXNQcm9kdWNpbmcoKSB7IHJldHVybiBtX2lz
UHJvZHVjaW5nOyB9CisgICAgYm9vbCBpc0NvbnN1bWluZygpIHsgcmV0dXJuIG1faXNDb25zdW1p
bmc7IH0KKworICAgIHNpemVfdCBwcm9kdWNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZHVjZWQ7
IH0KKyAgICBzaXplX3QgY29uc3VtZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnN1bWVkOyB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBwcm9kdWNlKCkKKyAgICB7CisgICAgICAgIG1fbG93ZXJRdWV1
ZS5yZXNldCgpOworCisgICAgICAgIHByb2R1Y2VRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzXSB7CisK
KyAgICAgICAgICAgIGZvciAoYm9vbCBzdGF0dXMgPSB0cnVlOyBzdGF0dXM7ICkgeworICAgICAg
ICAgICAgICAgIHN0YXR1cyA9IG1fbG93ZXJRdWV1ZS5kZXF1ZXVlKFt0aGlzXShjb25zdCBDU3Ry
aW5nJiBsb3dlcikgeworICAgICAgICAgICAgICAgICAgICBtX3VwcGVyUXVldWUuZW5xdWV1ZSh0
b1VwcGVyKGxvd2VyKSk7CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGxvd2VyID09
IHRleHRJdGVtKG1fcHJvZHVjZWQrKykpOworICAgICAgICAgICAgICAgICAgICBzdGQ6OnRoaXNf
dGhyZWFkOjpzbGVlcF9mb3Ioc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygxMCkpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2lzUHJvZHVjaW5n
ID0gZmFsc2U7CisgICAgICAgIH0pOworCisgICAgICAgIG1faXNQcm9kdWNpbmcgPSB0cnVlOwor
ICAgIH0KKworICAgIHZvaWQgY29uc3VtZSgpCisgICAgeworICAgICAgICBtX3VwcGVyUXVldWUu
cmVzZXQoKTsKKworICAgICAgICBjb25zdW1lUXVldWUoKS5kaXNwYXRjaChbdGhpc10geworCisg
ICAgICAgICAgICBmb3IgKGJvb2wgc3RhdHVzID0gdHJ1ZTsgc3RhdHVzOyApIHsKKyAgICAgICAg
ICAgICAgICBzdGF0dXMgPSBtX3VwcGVyUXVldWUuZGVxdWV1ZShbdGhpc10oY29uc3QgQ1N0cmlu
ZyYgdXBwZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUodXBwZXIgPT0gdG9V
cHBlcih0ZXh0SXRlbShtX2NvbnN1bWVkKyspKSk7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6
dGhpc190aHJlYWQ6OnNsZWVwX2ZvcihzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUwKSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1faXNDb25z
dW1pbmcgPSBmYWxzZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgbV9pc0NvbnN1bWluZyA9IHRy
dWU7CisgICAgfQorCisgICAgU3luY2hyb25pemVkRml4ZWRRdWV1ZTxDU3RyaW5nLCA0VT4gbV9s
b3dlclF1ZXVlOworICAgIFN5bmNocm9uaXplZEZpeGVkUXVldWU8Q1N0cmluZywgNFU+IG1fdXBw
ZXJRdWV1ZTsKKyAgICBCcm9hZGNhc3Q8Ym9vbD4gbV9pc1Byb2R1Y2luZzsKKyAgICBCcm9hZGNh
c3Q8Ym9vbD4gbV9pc0NvbnN1bWluZzsKKyAgICBzaXplX3QgbV9wcm9kdWNlZCB7IDAgfTsKKyAg
ICBzaXplX3QgbV9jb25zdW1lZCB7IDAgfTsKK307CisKK1RFU1QoV1RGX1N5bmNocm9uaXplZEZp
eGVkUXVldWUsIEJhc2ljKQoreworICAgIFRvVXBwZXJDb252ZXJ0ZXIgY29udmVydGVyOworCisg
ICAgY29udmVydGVyLnN0YXJ0KCk7CisgICAgRVhQRUNUX1RSVUUoY29udmVydGVyLmlzUHJvZHVj
aW5nKCkgJiYgY29udmVydGVyLmlzQ29uc3VtaW5nKCkpOworCisgICAgY29udmVydGVyLnN0b3Ao
KTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udmVydGVyLmlzUHJvZHVjaW5nKCkgfHwgY29udmVydGVy
LmlzQ29uc3VtaW5nKCkpOworCisgICAgRVhQRUNUX0VRKGNvbnZlcnRlci5wcm9kdWNlZCgpLCAw
VSk7CisgICAgRVhQRUNUX0VRKGNvbnZlcnRlci5jb25zdW1lZCgpLCAwVSk7Cit9CisKK1RFU1Qo
V1RGX1N5bmNocm9uaXplZEZpeGVkUXVldWUsIExpbWl0cykKK3sKKyAgICBUb1VwcGVyQ29udmVy
dGVyIGNvbnZlcnRlcjsKKworICAgIGNvbnZlcnRlci5zdGFydCgpOworICAgIEVYUEVDVF9UUlVF
KGNvbnZlcnRlci5pc1Byb2R1Y2luZygpICYmIGNvbnZlcnRlci5pc0NvbnN1bWluZygpKTsKKwor
ICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgd2hpbGUgKGNoYXIgY29uc3QqIGl0ZW0gPSB0ZXh0
SXRlbShjb3VudCkpIHsKKyAgICAgICAgY29udmVydGVyLmVucXVldWUoaXRlbSk7CisgICAgICAg
ICsrY291bnQ7CisKKyAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMoMSkpOworICAgIH0KKworICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNs
ZWVwX2ZvcihzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDQwMCkpOworCisgICAgY29udmVydGVy
LnN0b3AoKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udmVydGVyLmlzUHJvZHVjaW5nKCkgfHwgY29u
dmVydGVyLmlzQ29uc3VtaW5nKCkpOworCisgICAgRVhQRUNUX0VRKGNvbnZlcnRlci5wcm9kdWNl
ZCgpLCBjb3VudCk7CisgICAgRVhQRUNUX0VRKGNvbnZlcnRlci5jb25zdW1lZCgpLCBjb3VudCk7
Cit9CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290413</attachid>
            <date>2016-09-30 17:50:13 -0700</date>
            <delta_ts>2016-10-04 13:27:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162478-20160930174709.patch</filename>
            <type>text/plain</type>
            <size>27618</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDY2MzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTA5LTMwICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFN5bmNocm9uaXplZEZpeGVk
UXVldWUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjQ3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGUgZm9sbG93aW5nIGNsYXNzZXM6CisKKyAgICAgICAgMS4g
V2F0Y2hhYmxlOiBJdCBpcyBlcXVpdmFsZW50IHRvIHN0ZDo6YXRvbWljIGJ1dCBhbHNvIGl0IGFs
c28gd2FrZXMgdXAKKyAgICAgICAgICAgb3RoZXIgdGhyZWFkcyB0byBzaWduYWwgaXRzIGNoYW5n
ZXMuCisKKyAgICAgICAgMi4gV2F0Y2hhYmxlQ291bnRlcjogQSBXYXRjaGFibGUgY2xhc3MgYnV0
IHdpdGggYWJpbGl0eSB0byBpbmNyZW1lbnQgYW5kCisgICAgICAgICAgIGRlY3JlbWVudCBhIGNv
dW50ZXIuCisKKyAgICAgICAgMy4gU2FmZUZpeGVkUXVldWU6IEEgZml4ZWQtc2l6ZSBxdWV1ZSBi
dXQgaXRzIGVucXVldWUoKSBhbmQgZGVxdWV1ZSgpCisgICAgICAgICAgIGFyZSBjb250cm9sbGVk
IGJ5IHR3byBXYXRjaGFibGVDb3VudGVyOiBtX2VtcHR5IGFuZCBtX2Z1bGwuCisKKyAgICAgICAg
KiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvU3luY2hyb25p
emVkRml4ZWRRdWV1ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRR
dWV1ZTo6U3luY2hyb25pemVkRml4ZWRRdWV1ZSk6CisgICAgICAgIChXVEY6OlN5bmNocm9uaXpl
ZEZpeGVkUXVldWU6OnJlc2V0KToKKyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1
ZTo6c2h1dGRvd24pOgorICAgICAgICAoV1RGOjpTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlOjplbnF1
ZXVlKToKKyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6ZGVxdWV1ZSk6Cisg
ICAgICAgICogd3RmL1dhdGNoYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2F0Y2hhYmxl
OjpXYXRjaGFibGUpOgorICAgICAgICAoV1RGOjpXYXRjaGFibGU6Om9wZXJhdG9yIFQpOgorICAg
ICAgICAoV1RGOjpXYXRjaGFibGU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpXYXRjaGFi
bGU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OldhdGNoYWJsZTo6c2h1dGRvd24pOgorICAg
ICAgICAoV1RGOjpXYXRjaGFibGU6OmlzU2h1dGRvd24pOgorICAgICAgICAoV1RGOjpXYXRjaGFi
bGU6OnJlc2V0KToKKyAgICAgICAgKFdURjo6V2F0Y2hhYmxlOjp3YWl0VmFsdWUpOgorICAgICAg
ICAoV1RGOjpXYXRjaGFibGU6OndhaXRQcmVkaWNhdGUpOgorICAgICAgICAoV1RGOjpXYXRjaGFi
bGU6OndhaXRQcmVkaWNhdGVBbmRTZXRWYWx1ZSk6CisgICAgICAgICogd3RmL1dhdGNoYWJsZUNv
dW50ZXIuaDogQWRkZWQuCisgICAgICAgIChXVEY6OldhdGNoYWJsZUNvdW50ZXI6OldhdGNoYWJs
ZUNvdW50ZXIpOgorICAgICAgICAoV1RGOjpXYXRjaGFibGVDb3VudGVyOjppbmNyZW1lbnQpOgor
ICAgICAgICAoV1RGOjpXYXRjaGFibGVDb3VudGVyOjpkZWNyZW1lbnQpOgorCiAyMDE2LTA5LTI5
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZS1lbmFibGUgU3Ry
aW5nVmlldyBsaWZlLWN5Y2xlIGNoZWNraW5nLgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDY2MzQpCisrKyBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDgg
QEAKIAkJNTE1Rjc5NTYxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUY3OTU1MUNGRDNB
NjkwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggKi87IH07CiAJCTUzOUVCMDYzMUQ1NTI4
NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5o
ICovOyB9OwogCQk1NTMwNzFDQTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTMwNzFDOTFDNDA0
MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi87IH07CisJCTU1OTdGODJGMUQ5NEI5OTcw
MDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3lu
Y2hyb25pemVkRml4ZWRRdWV1ZS5oICovOyB9OworCQk1NTk3RjgzMDFEOTRCOTk3MDA2NkJDMjEg
LyogV2F0Y2hhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NTk3RjgyRDFEOTRCOTk3MDA2NkJDMjEgLyogV2F0Y2hhYmxlLmggKi87IH07CiAJCTVD
N0M4OEQ0MUQwQTNBMEEwMDlEMkY2RCAvKiBVbmlxdWVSZWYuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDN0M4OEQzMUQwQTNBMEEwMDlEMkY2RCAvKiBV
bmlxdWVSZWYuaCAqLzsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJl
Z2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcwQTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgKi87IH07CiAJ
CTcwQTk5M0ZGMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBBOTkzRkQxQUQ3MTUxMzAwRkE2
MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmggKi87IH07CkBAIC00NjIsNiArNDY0LDkgQEAKIAkJNTE1
Rjc5NTUxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMRUJEZWNvZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2Fj
aGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueUxSVUNhY2hlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1ODU5NDkyMUQ5RjJENDMwMDgwQTI2QiAvKiBX
YXRjaGFibGVDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhdGNoYWJsZUNvdW50ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU5N0Y4MkMxRDk0Qjk5NzAwNjZCQzIxIC8qIFN5
bmNocm9uaXplZEZpeGVkUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3luY2hyb25pemVkRml4ZWRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
NTk3RjgyRDFEOTRCOTk3MDA2NkJDMjEgLyogV2F0Y2hhYmxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhdGNoYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1QjQzMzgzQTVEMEI0NjNDOTQzM0Q5MzMgLyogSW5kZXhNYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUM3Qzg4RDMxRDBBM0EwQTAwOUQyRjZEIC8qIFVuaXF1ZVJlZi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBVbmlxdWVSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUQyNDdCNjIxNDY4OUI4NjAwRTc4Qjc2IC8qIGxpYldURi5hICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5J
bmRleCA9IDA7IHBhdGggPSBsaWJXVEYuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKQEAgLTEwMjAsNiArMTAyNSw3IEBACiAJCQkJQTc0ODc0NTExN0EwQkRBRTAwRkEwNENC
IC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oICovLAogCQkJCTBGRERCRkE1MTY2NkRGQTMwMEM1
NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi8sCiAJCQkJMEZEREJGQTYxNjY2REZBMzAw
QzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8sCisJCQkJNTU5N0Y4MkMxRDk0Qjk5NzAw
NjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCAqLywKIAkJCQkwRkIzMTdDMzFDNDg4
MDAxMDA3RTM5NUEgLyogU3lzdGVtVHJhY2luZy5oICovLAogCQkJCUE4QTQ3MzFBMTUxQTgyNUIw
MDQxMjNGRiAvKiBUZW1wb3JhcnlDaGFuZ2UuaCAqLywKIAkJCQlBOEE0NzMyRjE1MUE4MjVCMDA0
MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggKi8sCkBAIC0xMDQyLDYgKzEwNDgs
OCBAQAogCQkJCUE4QTQ3MzcwMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCAqLywKIAkJCQlB
OEE0NzM3MTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi8sCiAJCQkJQThBNDcz
NzIxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oICovLAorCQkJCTU1OTdGODJEMUQ5NEI5OTcw
MDY2QkMyMSAvKiBXYXRjaGFibGUuaCAqLywKKwkJCQk1NTg1OTQ5MjFEOUYyRDQzMDA4MEEyNkIg
LyogV2F0Y2hhYmxlQ291bnRlci5oICovLAogCQkJCTk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAv
KiBXZWFrUHRyLmggKi8sCiAJCQkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5k
b20uaCAqLywKIAkJCQkwRkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suY3BwICov
LApAQCAtMTQwMyw2ICsxNDExLDcgQEAKIAkJCQlDNEY4QTkzNzE5QzY1RUI0MDBCMkIxNUQgLyog
U3RvcHdhdGNoLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTZCQjc2OTE2MkYzMDA1MDBERDE2REIg
LyogU3RyZWFtQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzQjE1MUE4MjVCMDA0
MTIzRkYgLyogU3RyaW5nQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NTk3RjgyRjFEOTRC
OTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0M0QxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQzMEI0Nzg5MUFBQUFDMUEwMDEyMjNEQSAvKiBTdHJpbmdDb21tb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDNFMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdDb25jYXRl
bmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNDQ0LDYgKzE0NTMsNyBAQAogCQkJCUE4QTQ3NDdF
MTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDdG
MTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDgwMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTU1
OTdGODMwMUQ5NEI5OTcwMDY2QkMyMSAvKiBXYXRjaGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3NENGQzhFMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM1MDE2NDFCQjI1OEQ1MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUZBNDdDOEIxNTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N5bmNocm9uaXplZEZpeGVkUXVldWUuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRGVxdWUu
aD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNs
dWRlIDx3dGYvV2F0Y2hhYmxlQ291bnRlci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IEJ1ZmZlclNpemU+CitjbGFzcyBTeW5jaHJvbml6ZWRGaXhl
ZFF1ZXVlIHsKK3B1YmxpYzoKKyAgICBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlKCkKKyAgICAgICAg
OiBtX2VtcHR5KEJ1ZmZlclNpemUsIEJ1ZmZlclNpemUpCisgICAgICAgICwgbV9mdWxsKDAsIEJ1
ZmZlclNpemUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlc2V0KCkKKyAgICB7Cisg
ICAgICAgIC8vIFJlc3RvcmUgdGhlIHF1ZXVlIHN0YXRlIHRvIGl0cyBvcmlnaW5hbCBzdGF0ZS4K
KyAgICAgICAgTG9ja0hvbGRlciBsb2NrSG9sZGVyKG1fbXV0ZXgpOworICAgICAgICBtX2VtcHR5
LnJlc2V0KEJ1ZmZlclNpemUpOworICAgICAgICBtX2Z1bGwucmVzZXQoQnVmZmVyU2l6ZSk7Cisg
ICAgICAgIG1fcXVldWUuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaHV0ZG93bigp
CisgICAgeworICAgICAgICAvLyBBIHRocmVhZCBjYW4gd2FpdCBvbmx5IG9uIGEgc2luZ2xlIGNv
bmRpdGlvbi4gU28gdG8gd2FrZSB1cCB0aGUgb3RoZXIgdGhyZWFkcworICAgICAgICAvLyB0aGUg
d2FpdGVkIGNvbmRpdGlvbiBoYXMgdG8gbm90aWZ5IGFsbCB0aGUgdGhyZWFkcyBidXQgd2l0aCBh
IHNodXR0aW5nIGRvd24gc3RhdGUuCisgICAgICAgIC8vIFNodXR0aW5nIGRvd24gbV9lbXB0eSBh
bmQgbV9mdWxsIHdpbGwgd2FrZSB1cCBhbGwgdGhlIG90aGVyIHRocmVhZHMgYW5kIHRoaXMgd2ls
bAorICAgICAgICAvLyBhbGxvdyB0ZXJtaW5hdGluZyB0aGVtIHdpdGhvdXQgYW55IGZ1dGhlciB3
YWl0aW5nLgorICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAg
IG1fZW1wdHkuc2h1dGRvd24oKTsKKyAgICAgICAgbV9mdWxsLnNodXRkb3duKCk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgZW5xdWV1ZShjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8v
IFdhaXQgZm9yIGFuIGVtcHR5IHBsYWNlIHRvIGJlIGF2YWlsYWJsZSBpbiB0aGUgcXVldWUuCisg
ICAgICAgIGlmICghbV9lbXB0eS5kZWNyZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRl
eCk7CisgICAgICAgICAgICBpZiAobV9lbXB0eS5pc1NodXRkb3duKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAvLyBBZGQgdGhlIGl0ZW0gaW4gdGhlIHF1
ZXVlLgorICAgICAgICAgICAgbV9xdWV1ZS5hcHBlbmQodmFsdWUpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gTm90aWZ5IHRoZSBvdGhlciB0aHJlYWRzIHRoYXQgYW4gaXRlbSB3YXMgYWRkZWQg
dG8gdGhlIHF1ZXVlLgorICAgICAgICByZXR1cm4gbV9mdWxsLmluY3JlbWVudCgpOworICAgIH0K
KyAgICAKKyAgICBib29sIGRlcXVldWUoVCYgdmFsdWUpCisgICAgeworICAgICAgICAvLyBXYWl0
IGZvciBhbiBpdGVtIHRvIGJlIGFkZGVkLgorICAgICAgICBpZiAoIW1fZnVsbC5kZWNyZW1lbnQo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB7CisgICAgICAgICAgICBM
b2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgICAgICBpZiAobV9mdWxsLmlz
U2h1dGRvd24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAg
IC8vIFByb2Nlc3MgdGhpcyBpdGVtIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgcXVldWUuCisgICAg
ICAgICAgICB2YWx1ZSA9IG1fcXVldWUuZmlyc3QoKTsKKyAgICAgICAgICAgIG1fcXVldWUucmVt
b3ZlRmlyc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdGlmeSB0aGUgb3RoZXIgdGhy
ZWFkcyB0aGF0IGFuIGl0ZW0gd2FzIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUuCisgICAgICAgIHJl
dHVybiBtX2VtcHR5LmluY3JlbWVudCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXYXRjaGFi
bGVDb3VudGVyIG1fZW1wdHk7CisgICAgV2F0Y2hhYmxlQ291bnRlciBtX2Z1bGw7CisgICAgTG9j
ayBtX211dGV4OworICAgIERlcXVlPFQsIEJ1ZmZlclNpemU+IG1fcXVldWU7Cit9OworCit9CisK
K3VzaW5nIFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1dhdGNoYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dhdGNoYWJsZS5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1dhdGNoYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFdhdGNoYWJsZSB7CitwdWJsaWM6
CisgICAgV2F0Y2hhYmxlKGNvbnN0IFQmIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUp
CisgICAgeworICAgIH0KKworICAgIG9wZXJhdG9yIFQoKQorICAgIHsKKyAgICAgICAgTG9ja0hv
bGRlciBsb2NrSG9sZGVyKG1fbXV0ZXgpOworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09
IHZhbHVlOworICAgIH0KKworICAgIFQgb3BlcmF0b3I9KGNvbnN0IFQmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgTG9ja0hvbGRlciBsb2NrSG9sZGVyKG1fbXV0ZXgpOworICAgICAgICBpZiAobV92
YWx1ZSAhPSB2YWx1ZSkgeworICAgICAgICAgICAgbV92YWx1ZSA9IHZhbHVlOworICAgICAgICAg
ICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgIH0KKworICAgIHZvaWQgc2h1dGRvd24oKQorICAgIHsKKyAgICAgICAgTG9ja0hv
bGRlciBsb2NrSG9sZGVyKG1fbXV0ZXgpOworICAgICAgICBtX2lzU2h1dGRvd24gPSB0cnVlOwor
ICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICB9CisKKyAgICBib29sIGlzU2h1
dGRvd24oKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrSG9sZGVyKG1fbXV0ZXgpOwor
ICAgICAgICByZXR1cm4gbV9pc1NodXRkb3duOworICAgIH0KKworICAgIHZvaWQgcmVzZXQoY29u
c3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRl
eCk7CisgICAgICAgIG1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgbV9pc1NodXRkb3duID0gZmFs
c2U7CisgICAgfQorCisgICAgYm9vbCB3YWl0VmFsdWUoY29uc3QgVCYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gd2FpdFByZWRpY2F0ZShbdGhpcywgdmFsdWVdKCkgeyByZXR1cm4gbV9p
c1NodXRkb3duIHx8IG1fdmFsdWUgPT0gdmFsdWU7IH0pOworICAgIH0KKworcHJvdGVjdGVkOgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWRpY2F0ZT4KKyAgICBib29sIHdhaXRQcmVkaWNhdGUo
Y29uc3QgUHJlZGljYXRlJiBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9tdXRleCwgcHJl
ZGljYXRlKTsKKyAgICAgICAgcmV0dXJuICFtX2lzU2h1dGRvd247CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlLCB0eXBlbmFtZSBTZXR0ZXI+CisgICAgYm9vbCB3YWl0
UHJlZGljYXRlQW5kU2V0VmFsdWUoY29uc3QgUHJlZGljYXRlJiBwcmVkaWNhdGUsIGNvbnN0IFNl
dHRlciYgc2V0dGVyKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrSG9sZGVyKG1fbXV0
ZXgpOworICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbXV0ZXgsIHByZWRpY2F0ZSk7CisgICAg
ICAgIGlmICghbV9pc1NodXRkb3duKQorICAgICAgICAgICAgc2V0dGVyKCk7CisgICAgICAgIG1f
Y29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgICAgICByZXR1cm4gIW1faXNTaHV0ZG93bjsKKyAg
ICB9CisKKyAgICBMb2NrIG1fbXV0ZXg7CisgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAg
IFQgbV92YWx1ZTsKKyAgICBib29sIG1faXNTaHV0ZG93biB7IGZhbHNlIH07Cit9OworCit9CisK
K3VzaW5nIFdURjo6V2F0Y2hhYmxlOwpJbmRleDogU291cmNlL1dURi93dGYvV2F0Y2hhYmxlQ291
bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dhdGNoYWJsZUNvdW50ZXIuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9XYXRjaGFibGVDb3VudGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24u
aD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNs
dWRlIDx3dGYvV2F0Y2hhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBXYXRjaGFi
bGVDb3VudGVyIDogcHVibGljIFdhdGNoYWJsZTxzaXplX3Q+IHsKK3B1YmxpYzoKKyAgICBXYXRj
aGFibGVDb3VudGVyKHNpemVfdCB2YWx1ZSwgc2l6ZV90IGxhc3QpCisgICAgICAgIDogV2F0Y2hh
YmxlPHNpemVfdD4odmFsdWUpCisgICAgICAgICwgbV9sYXN0KGxhc3QpCisgICAgeworICAgIH0K
KworICAgIGJvb2wgaW5jcmVtZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiB3YWl0UHJlZGlj
YXRlQW5kU2V0VmFsdWUoW3RoaXNdKCkgeyByZXR1cm4gbV9pc1NodXRkb3duIHx8IG1fdmFsdWUg
PCBtX2xhc3Q7IH0sIFt0aGlzXSgpIHsgKyttX3ZhbHVlOyB9KTsKKyAgICB9CisKKyAgICBib29s
IGRlY3JlbWVudCgpCisgICAgeworICAgICAgICByZXR1cm4gd2FpdFByZWRpY2F0ZUFuZFNldFZh
bHVlKFt0aGlzXSgpIHsgcmV0dXJuIG1faXNTaHV0ZG93biB8fCBtX3ZhbHVlOyB9LCBbdGhpc10o
KSB7IC0tbV92YWx1ZTsgfSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHNpemVfdCBtX2xhc3Q7
Cit9OworICAgIAorfQorCit1c2luZyBXVEY6OldhdGNoYWJsZUNvdW50ZXI7CkluZGV4OiBUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDY2
OTcpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAor
MjAxNi0wOS0zMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlIGNsYXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI0NzgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1N5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OnRleHRJdGVtKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRvVXBw
ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6VG9VcHBlckNv
bnZlcnRlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpwcm9k
dWNlUXVldWUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6Y29u
c3VtZVF1ZXVlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnN0
YXJ0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnN0b3ApOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6ZW5xdWV1ZSk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjppc1Byb2R1Y2luZyk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjppc0NvbnN1bWluZyk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpwcm9kdWNlZCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpjb25zdW1lZCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpwcm9kdWNlKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OmNvbnN1bWUpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6CisKIDIwMTYtMDktMzAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5z
ZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggb2ZmLWJ5LW9uZSBlcnJvciBpbiBVUkxQYXJz
ZXI6OnBhcnNlSVB2NEhvc3QKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDY2MzQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSw3IEBACiAJCTUyRTVD
RTQ5MTREMjFFQUIwMDNCMkJEOCAvKiBQYXJlbnRGcmFtZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFNUNFNDgxNEQyMUVBQjAwM0Iy
QkQ4IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5jcHAgKi87IH07CiAJCTUzNjc3MDM0MUNDODAyMjgw
MEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAv
KiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSAqLzsgfTsKIAkJNTM2NzcwMzYxQ0M4MUI2
MTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzUxQ0M4MTJG
OTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi87IH07CisJCTU1
OTdGODM2MUQ5NTk2QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OTdGODM0MUQ5NTk2
QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCAqLzsgfTsKIAkJNTcxNEVD
QjkxQ0E4QjVCMDAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcxNEVD
QjgxQ0E4QjU4ODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWwgKi87
IH07CiAJCTU3MTRFQ0JCMUNBOEJGRTQwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5h
bFVSTEZyYW1lLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTcxNEVDQkExQ0E4QkZEMTAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9y
aWdpbmFsVVJMRnJhbWUuaHRtbCAqLzsgfTsKIAkJNTcxNEVDQkQxQ0E4QzIyQTAwMDUxQUM4IC8q
IERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMMi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0JDMUNBOEMyMTgwMDA1MUFDOCAv
KiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTDIuaHRtbCAqLzsgfTsKQEAgLTkwOCw2ICs5MDks
NyBAQAogCQk1MkU1Q0U0ODE0RDIxRUFCMDAzQjJCRDggLyogUGFyZW50RnJhbWVfQnVuZGxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcmVudEZyYW1lX0J1bmRs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNjc3MDMzMUNDODAyMjgwMEQ0
MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzY3NzAzNTFDQzgxMkY5MDBENDI1QjEgLyogV2Vi
U2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9
IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTU1OTdGODM0MUQ5NTk2QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9uaXplZEZp
eGVkUXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzE0RUNCODFDQThC
NTg4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuaHRtbDsgcGF0aCA9IERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MTRFQ0JBMUNBOEJGRDEwMDA1MUFDOCAvKiBEb3du
bG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBh
dGggPSBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU3MTRFQ0JDMUNBOEMyMTgwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVl
c3RPcmlnaW5hbFVSTDIuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IERvd25sb2Fk
UmVxdWVzdE9yaWdpbmFsVVJMMi5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTc3OSw2ICsxNzgxLDcgQEAKIAkJCQkyNkYxQjQ0MzE1Q0E0MzRGMDBEMUU0QkYgLyogU3RyaW5n
SW1wbC5jcHAgKi8sCiAJCQkJQzAxMzYzQzcxM0MzOTk3MzAwRUYzOTY0IC8qIFN0cmluZ09wZXJh
dG9ycy5jcHAgKi8sCiAJCQkJN0M3NEQ0MkQxODgyMjhGMzAwRTVFRDU3IC8qIFN0cmluZ1ZpZXcu
Y3BwICovLAorCQkJCTU1OTdGODM0MUQ5NTk2QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhl
ZFF1ZXVlLmNwcCAqLywKIAkJCQkwQkNEODU2OTE0ODVDOThCMDBFQTIwMDMgLyogVGVtcG9yYXJ5
Q2hhbmdlLmNwcCAqLywKIAkJCQk1QzVFNjMzRDFEMEI2Nzk0MDA4NUEwMjUgLyogVW5pcXVlUmVm
LmNwcCAqLywKIAkJCQk3Q0QwRDVBQTFENTUzNERFMDAwQ0M5RTEgLyogVmFyaWFudC5jcHAgKi8s
CkBAIC0yMjcyLDYgKzIyNzUsNyBAQAogCQkJCTdDODNERjM2MUQwQTU5MEMwMEZFQkNGMyAvKiBT
dHJpbmdIYXNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMzcxRDBBNTkwQzAwRkVC
Q0YzIC8qIFN0cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMzgxRDBBNTkw
QzAwRkVCQ0YzIC8qIFN0cmluZ09wZXJhdG9ycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1NTk3
RjgzNjFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3QzgzREYzQTFEMEE1OTBDMDBGRUJDRjMgLyogU3RyaW5nVmlldy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzRDFEMEE1OTBDMDBGRUJDRjMgLyogVGVtcG9yYXJ5
Q2hhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjQwMUQwQTU5MEMwMEZFQkNGMyAv
KiBUZXN0c0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNw
cAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJv
bml6ZWRGaXhlZFF1ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNs
dWRlIDx0aHJlYWQ+CisKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0
Zi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL1dhdGNoYWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIGNoYXIgY29uc3QqIHRleHRJ
dGVtKHNpemVfdCBpbmRleCkKK3sKKyAgICBzdGF0aWMgY2hhciBjb25zdCogaXRlbXNbXSA9IHsg
ImZpcnN0IiwgInNlY29uZCIsICJ0aGlyZCIsICJmb3VydGgiLCAiZmlmdGgiLCAic2l4dGgiIH07
CisgICAgcmV0dXJuIGluZGV4IDwgc2l6ZW9mKGl0ZW1zKSAvIHNpemVvZihpdGVtc1swXSkgPyBp
dGVtc1tpbmRleF0gOiBudWxscHRyOworfQorCitzdGF0aWMgQ1N0cmluZyB0b1VwcGVyKGNvbnN0
IENTdHJpbmcmIGxvd2VyKQoreworICAgIENTdHJpbmcgdXBwZXIgPSBsb3dlcjsKKworICAgIGZv
ciAoY2hhciogYnVmZmVyID0gdXBwZXIubXV0YWJsZURhdGEoKTsgKmJ1ZmZlcjsgKytidWZmZXIp
CisgICAgICAgICpidWZmZXIgPSB0b0FTQ0lJVXBwZXIoKmJ1ZmZlcik7CisKKyAgICByZXR1cm4g
dXBwZXI7Cit9CisKK2NsYXNzIFRvVXBwZXJDb252ZXJ0ZXIgeworcHVibGljOgorICAgIFRvVXBw
ZXJDb252ZXJ0ZXIoKQorICAgICAgICA6IG1faXNQcm9kdWNpbmcoZmFsc2UpCisgICAgICAgICwg
bV9pc0NvbnN1bWluZyhmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgV29ya1F1ZXVlJiBwcm9k
dWNlUXVldWUoKQorICAgIHsKKyAgICAgICAgc3RhdGljIGF1dG8mIHF1ZXVlID0gV29ya1F1ZXVl
OjpjcmVhdGUoIm9yZy53ZWJraXQuUHJvZHVjZSIpLmxlYWtSZWYoKTsKKyAgICAgICAgcmV0dXJu
IHF1ZXVlOworICAgIH0KKworICAgIFdvcmtRdWV1ZSYgY29uc3VtZVF1ZXVlKCkKKyAgICB7Cisg
ICAgICAgIHN0YXRpYyBhdXRvJiBxdWV1ZSA9IFdvcmtRdWV1ZTo6Y3JlYXRlKCJvcmcud2Via2l0
LkNvbnN1bWUiKS5sZWFrUmVmKCk7CisgICAgICAgIHJldHVybiBxdWV1ZTsKKyAgICB9CisKKyAg
ICB2b2lkIHN0YXJ0KCkKKyAgICB7CisgICAgICAgIGlmICghbV9pc1Byb2R1Y2luZykKKyAgICAg
ICAgICAgIHByb2R1Y2UoKTsKKworICAgICAgICBpZiAoIW1faXNDb25zdW1pbmcpCisgICAgICAg
ICAgICBjb25zdW1lKCk7CisgICAgfQorCisgICAgdm9pZCBzdG9wKCkKKyAgICB7CisgICAgICAg
IGlmIChtX2lzUHJvZHVjaW5nKSB7CisgICAgICAgICAgICBtX2xvd2VyUXVldWUuc2h1dGRvd24o
KTsKKyAgICAgICAgICAgIG1faXNQcm9kdWNpbmcud2FpdFZhbHVlKGZhbHNlKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChtX2lzQ29uc3VtaW5nKSB7CisgICAgICAgICAgICBtX3VwcGVyUXVl
dWUuc2h1dGRvd24oKTsKKyAgICAgICAgICAgIG1faXNDb25zdW1pbmcud2FpdFZhbHVlKGZhbHNl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZW5xdWV1ZShjb25zdCBDU3RyaW5nJiBs
b3dlcikKKyAgICB7CisgICAgICAgIG1fbG93ZXJRdWV1ZS5lbnF1ZXVlKGxvd2VyKTsKKyAgICB9
CisKKyAgICBib29sIGlzUHJvZHVjaW5nKCkgeyByZXR1cm4gbV9pc1Byb2R1Y2luZzsgfQorICAg
IGJvb2wgaXNDb25zdW1pbmcoKSB7IHJldHVybiBtX2lzQ29uc3VtaW5nOyB9CisKKyAgICBzaXpl
X3QgcHJvZHVjZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb2R1Y2VkOyB9CisgICAgc2l6ZV90IGNv
bnN1bWVkKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdW1lZDsgfQorCitwcml2YXRlOgorICAgIHZv
aWQgcHJvZHVjZSgpCisgICAgeworICAgICAgICBwcm9kdWNlUXVldWUoKS5kaXNwYXRjaChbdGhp
c10geworCisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIENTdHJp
bmcgbG93ZXI7CisKKyAgICAgICAgICAgICAgICBpZiAoIW1fbG93ZXJRdWV1ZS5kZXF1ZXVlKGxv
d2VyKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBtX3Vw
cGVyUXVldWUuZW5xdWV1ZSh0b1VwcGVyKGxvd2VyKSk7CisgICAgICAgICAgICAgICAgRVhQRUNU
X1RSVUUobG93ZXIgPT0gdGV4dEl0ZW0obV9wcm9kdWNlZCsrKSk7CisgICAgICAgICAgICAgICAg
c3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTAp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9pc1Byb2R1Y2luZyA9IGZhbHNlOwor
ICAgICAgICB9KTsKKworICAgICAgICBtX2lzUHJvZHVjaW5nID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICB2b2lkIGNvbnN1bWUoKQorICAgIHsKKyAgICAgICAgY29uc3VtZVF1ZXVlKCkuZGlzcGF0Y2go
W3RoaXNdIHsKKworICAgICAgICAgICAgZm9yIChib29sIHN0YXR1cyA9IHRydWU7IHN0YXR1czsg
KSB7CisgICAgICAgICAgICAgICAgQ1N0cmluZyB1cHBlcjsKKworICAgICAgICAgICAgICAgIGlm
ICghbV91cHBlclF1ZXVlLmRlcXVldWUodXBwZXIpKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHVwcGVyID09IHRvVXBwZXIodGV4dEl0
ZW0obV9jb25zdW1lZCsrKSkpOworICAgICAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNs
ZWVwX2ZvcihzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUwKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIG1faXNDb25zdW1pbmcgPSBmYWxzZTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgbV9pc0NvbnN1bWluZyA9IHRydWU7CisgICAgfQorCisgICAgU3luY2hyb25pemVkRml4ZWRR
dWV1ZTxDU3RyaW5nLCA0VT4gbV9sb3dlclF1ZXVlOworICAgIFN5bmNocm9uaXplZEZpeGVkUXVl
dWU8Q1N0cmluZywgNFU+IG1fdXBwZXJRdWV1ZTsKKyAgICBXYXRjaGFibGU8Ym9vbD4gbV9pc1By
b2R1Y2luZzsKKyAgICBXYXRjaGFibGU8Ym9vbD4gbV9pc0NvbnN1bWluZzsKKyAgICBzaXplX3Qg
bV9wcm9kdWNlZCB7IDAgfTsKKyAgICBzaXplX3QgbV9jb25zdW1lZCB7IDAgfTsKK307CisKK1RF
U1QoV1RGX1N5bmNocm9uaXplZEZpeGVkUXVldWUsIEJhc2ljKQoreworICAgIFRvVXBwZXJDb252
ZXJ0ZXIgY29udmVydGVyOworCisgICAgY29udmVydGVyLnN0YXJ0KCk7CisgICAgRVhQRUNUX1RS
VUUoY29udmVydGVyLmlzUHJvZHVjaW5nKCkgJiYgY29udmVydGVyLmlzQ29uc3VtaW5nKCkpOwor
CisgICAgY29udmVydGVyLnN0b3AoKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udmVydGVyLmlzUHJv
ZHVjaW5nKCkgfHwgY29udmVydGVyLmlzQ29uc3VtaW5nKCkpOworCisgICAgRVhQRUNUX0VRKGNv
bnZlcnRlci5wcm9kdWNlZCgpLCAwVSk7CisgICAgRVhQRUNUX0VRKGNvbnZlcnRlci5jb25zdW1l
ZCgpLCAwVSk7Cit9CisKK1RFU1QoV1RGX1N5bmNocm9uaXplZEZpeGVkUXVldWUsIExpbWl0cykK
K3sKKyAgICBUb1VwcGVyQ29udmVydGVyIGNvbnZlcnRlcjsKKworICAgIGNvbnZlcnRlci5zdGFy
dCgpOworICAgIEVYUEVDVF9UUlVFKGNvbnZlcnRlci5pc1Byb2R1Y2luZygpICYmIGNvbnZlcnRl
ci5pc0NvbnN1bWluZygpKTsKKworICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgd2hpbGUgKGNo
YXIgY29uc3QqIGl0ZW0gPSB0ZXh0SXRlbShjb3VudCkpIHsKKyAgICAgICAgY29udmVydGVyLmVu
cXVldWUoaXRlbSk7CisgICAgICAgICsrY291bnQ7CisKKyAgICAgICAgc3RkOjp0aGlzX3RocmVh
ZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMSkpOworICAgIH0KKworICAg
IHN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2ZvcihzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDQw
MCkpOworCisgICAgY29udmVydGVyLnN0b3AoKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udmVydGVy
LmlzUHJvZHVjaW5nKCkgfHwgY29udmVydGVyLmlzQ29uc3VtaW5nKCkpOworCisgICAgRVhQRUNU
X0VRKGNvbnZlcnRlci5wcm9kdWNlZCgpLCBjb3VudCk7CisgICAgRVhQRUNUX0VRKGNvbnZlcnRl
ci5jb25zdW1lZCgpLCBjb3VudCk7Cit9CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290638</attachid>
            <date>2016-10-04 13:27:08 -0700</date>
            <delta_ts>2016-10-05 10:18:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162478-20161004132357.patch</filename>
            <type>text/plain</type>
            <size>24756</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU5YTFhNTc3YzA3ZGVhZDFiNmFmZDRm
MjA2YWJkMWE5NDUwY2M0NTEuLjMzMDU2YzAwYTUwOTMzMmMwYzYzMjQ2ODRmNGE3MzBiNTEwNzg0
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTYtMTAtMDQgIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgU3luY2hyb25pemVkRml4ZWRR
dWV1ZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYyNDc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc2ltcGxlIHByb2R1Y2VyL2NvbnN1bWVyIHdvcmtl
ci4gSXQgZmFjaWxpdGF0ZXMKKyAgICAgICAgc3luY2hyb25pemluZyBlbnF1ZXVpbmcgdG8gYW5k
IGRlcXVldWluZyBmcm9tIGEgZml4ZWQgc2l6ZS1xdWV1ZS4gSXQgdXNlcworICAgICAgICBhIHNp
bmdsZSBsb2NrIGFuZCBhIHNpbmdsZSBjb25kaXRpb24gdG8gc3luY2hyb25pemUgYWxsIGl0cyBt
ZW1iZXJzIGFtb25nCisgICAgICAgIHRoZSB3b3JraW5nIHRocmVhZHMuIFRoaXMgbWVhbnMgYSBz
aW5nbGUgdGhyZWFkIGlzIGFjdGl2ZSBhdCBhbnkgdGltZSBhbmQKKyAgICAgICAgYW5kIHRoZSBv
dGhlciB0aHJlYWRzIGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIGJlIHJlbGVh
c2VkLiBPcgorICAgICAgICB0aGV5IGFyZSBzbGVlcGluZyB3YWl0aW5nIGZvciB0aGUgY29uZGl0
aW9uIHRvIGJlIHNhdGlzZmllZC4KKworICAgICAgICBPbmUgaW1wb3J0YW50IGZ1bmN0aW9uIHRo
aXMgY2xhc3MgcHJvdmlkZXMgaXMgdGhlIGFiaWxpdHkgdG8gY2xvc2UgaXRzZWxmCisgICAgICAg
IGJ5IGFueSB0aHJlYWQuIENhbGxpbmcgY2xvc2UoKSBjYXVzZXMgYWxsIHRoZSBzbGVlcGluZyB0
aHJlYWRzIHRvIHdha2UgdXAKKyAgICAgICAgYW5kIHRlcm1pbmF0ZXMgdGhlbXNlbHZlcy4gVGhl
IGNsb3NlKCkgd2lsbCByZXR1cm4gb25seSB3aGVuIGFsbCB0aGUgdGhyZWFkcworICAgICAgICBh
cmUgdGVybWluYXRlZCBzbyB0aGUgY2FsbGVyIGNhbiBkZWxldGUgdGhpcyBvYmplY3QgaW1tZWRp
YXRlbHkuCisKKyAgICAgICAgVG8gdHJhY2sgdGhlIGFjdGl2ZSB3b3JraW5nIHRocmVhZHMsIGFs
bCB0aGUgd29ya2luZyB0aHJlYWQgaGF2ZSB0byByZWdpc3RlcgorICAgICAgICB0aGVtc2VsdmVz
IGJlZm9yZSBjcmVhdGluZyB0aGVpciB0aHJlYWRzLiBUaGUgd29ya2luZyB0aHJlYWRzIGFsc28g
aGF2ZSB0bworICAgICAgICB1bnJlZ2lzdGVyIHRoZW1zZWx2ZXMgb25jZSB0aGV5IGFyZSBkb25l
IG9yIHRoZSBxdWV1ZSBpcyBjbG9zZWQuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6U3luY2hyb25pemVkRml4
ZWRRdWV1ZSk6CisgICAgICAgIChXVEY6OlN5bmNocm9uaXplZEZpeGVkUXVldWU6Om9wZW4pOiBS
ZXN0b3JlIHRoZSBxdWV1ZSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCisgICAgICAgIChXVEY6OlN5
bmNocm9uaXplZEZpeGVkUXVldWU6OmNsb3NlKTogV2FrZSBhbGwgdGhlIHNsZWVwaW5nIHRocmVh
ZHMgYW5kIHdhaXQgdGhlbSB0byB1bnJlZ2lzdGVyIHRoZW1zZWx2ZXMuCisgICAgICAgIChXVEY6
OlN5bmNocm9uaXplZEZpeGVkUXVldWU6OmlzT3Blbik6IERvZXMgdGhlIHF1ZXVlIGFjY2VwdCBu
ZXcgaXRlbXMvd29ya2Vycz8KKyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6
cmVnaXN0ZXJXb3JrZXIpOiBBZGQgYSBuZXcgd29ya2VyIHRvIHRoZSBzZXQgb2Ygd29ya2Vycy4K
KyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6dW5yZWdpc3Rlcldvcmtlcik6
IFJlbW92ZSBhIHdvcmtlciBmcm9tIHRoZSBzZXQgb2Ygd29ya2Vycy4KKyAgICAgICAgKFdURjo6
U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6aXNSZWdpc3RlcmVkV29ya2VyKTogQ2hlY2tzIHdoZXRo
ZXIgYSB3b3JrIGV4aXN0cyBpbiB0aGUgc2V0IG9mIHdvcmtlcnMuCisgICAgICAgIChXVEY6OlN5
bmNocm9uaXplZEZpeGVkUXVldWU6OmVucXVldWUpOiBFbnF1ZXVlIGFuIGl0ZW0gdG8gdGhlIHF1
ZXVlLgorICAgICAgICAoV1RGOjpTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlOjpkZXF1ZXVlKTogRGVx
dWV1ZSBhbiBpdGVtIGZvcm0gdGhlIHF1ZXVlLgorCiAyMDE2LTEwLTAzICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIEtleWJvYXJkRXZl
bnQua2V5IGF0dHJpYnV0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNmI3MzU3ZWQ5YTBkOWNkYzllMmVmMjI5MDE3NjIwMjkyNmY4Mzc4Yi4uZDI0MjZiMTcx
MDNjNTE5NTMzMTNkNzI0NWYxZTM2OGQ0MjMzYzhjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTksNiArMTE5LDcgQEAKIAkJNTE1Rjc5NTYxQ0ZEM0E2
OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUY3OTU1MUNGRDNBNjkwMENDRUQ5MyAvKiBDcm9zc1Ro
cmVhZFF1ZXVlLmggKi87IH07CiAJCTUzOUVCMDYzMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNv
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlF
QjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovOyB9OwogCQk1NTMwNzFDQTFD
NDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxS
VUNhY2hlLmggKi87IH07CisJCTU1OTdGODJGMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6
ZWRGaXhlZFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5o
ICovOyB9OwogCQk1QzdDODhENDFEMEEzQTBBMDA5RDJGNkQgLyogVW5pcXVlUmVmLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzdDODhEMzFEMEEzQTBB
MDA5RDJGNkQgLyogVW5pcXVlUmVmLmggKi87IH07CiAJCTcwQTk5M0ZFMUFENzE1MTMwMEZBNjE1
QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MEE5OTNGQzFBRDcxNTEzMDBGQTYxNUIgLyogU3ltYm9sUmVnaXN0cnku
Y3BwICovOyB9OwogCQk3MEE5OTNGRjFBRDcxNTEzMDBGQTYxNUIgLyogU3ltYm9sUmVnaXN0cnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwQTk5M0ZE
MUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5oICovOyB9OwpAQCAtNDYzLDYgKzQ2
NCw3IEBACiAJCTUxNUY3OTU1MUNGRDNBNjkwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkUXVldWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExF
QkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTEVCRGVjb2Rlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTgg
LyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlM
UlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTk3RjgyQzFEOTRCOTk3
MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVCNDMzODNBNUQwQjQ2M0M5NDMzRDkzMyAvKiBJbmRleE1hcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleE1hcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1QzdDODhEMzFEMEEzQTBBMDA5RDJGNkQgLyogVW5pcXVlUmVmLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaXF1ZVJlZi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1RDI0N0I2MjE0Njg5Qjg2MDBFNzhCNzYgLyogbGliV1RGLmEgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7
IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYldURi5hOyBzb3VyY2VUcmVlID0gQlVJTFRf
UFJPRFVDVFNfRElSOyB9OwpAQCAtMTAyMyw2ICsxMDI1LDcgQEAKIAkJCQlBNzQ4NzQ1MTE3QTBC
REFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggKi8sCiAJCQkJMEZEREJGQTUx
NjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLywKIAkJCQkwRkREQkZB
NjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLywKKwkJCQk1NTk3Rjgy
QzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICovLAogCQkJCTBG
QjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8sCiAJCQkJQThBNDcz
MUExNTFBODI1QjAwNDEyM0ZGIC8qIFRlbXBvcmFyeUNoYW5nZS5oICovLAogCQkJCUE4QTQ3MzJG
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCAqLywKQEAgLTE0
MDcsNiArMTQxMCw3IEBACiAJCQkJQzRGOEE5MzcxOUM2NUVCNDAwQjJCMTVEIC8qIFN0b3B3YXRj
aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2QkI3NjkxNjJGMzAwNTAwREQxNkRCIC8qIFN0cmVh
bUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0IxNTFBODI1QjAwNDEyM0ZGIC8q
IFN0cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU5N0Y4MkYxRDk0Qjk5NzAwNjZC
QzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
NDNEMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MzBCNDc4OTFBQUFBQzFBMDAxMjIzREEgLyogU3RyaW5nQ29tbW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzQzRTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQ29uY2F0ZW5hdGUuaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3luY2hyb25pemVkRml4
ZWRRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU0YzdkNWMyNDFiN2E5NjY2MWY4NzlmZTlkZGJkZDJjYWUxN2E0ZTEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmgKQEAgLTAs
MCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTG9j
ay5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBCdWZmZXJTaXplPgorY2xhc3MgU3luY2hyb25pemVkRml4
ZWRRdWV1ZSB7CitwdWJsaWM6CisgICAgU3luY2hyb25pemVkRml4ZWRRdWV1ZSgpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICB2b2lkIG9wZW4oKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrSG9sZGVyKG1fbXV0ZXgpOworICAgICAgICAKKyAgICAgICAgLy8gUmVzdG9yZSB0aGUgcXVl
dWUgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLgorICAgICAgICBtX3F1ZXVlLmNsZWFyKCk7CisgICAg
ICAgIG1fd29ya2Vycy5jbGVhcigpOworICAgICAgICBtX29wZW4gPSB0cnVlOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNsb3NlKCkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRl
cihtX211dGV4KTsKKworICAgICAgICAvLyBXYWtlIGFsbCB0aGUgc2xlZXBpbmcgdGhyZWFkcyB1
cCB3aXRoIGEgY2xvc2luZyBzdGF0ZS4KKyAgICAgICAgbV9vcGVuID0gZmFsc2U7CisgICAgICAg
IG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOworCisgICAgICAgIC8vIFdhaXQgZm9yIGFsbCB0aGUg
dGhyZWFkcyB0byBkaWUuIFRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBtaWdodAorICAgICAg
ICAvLyBkZWxldGUgdGhlIFN5bmNocm9uaXplZEZpeGVkUXVldWUgaXRzZWxmIGltbWVkaWF0ZWx5
IGFmdGVyIHRoaXMgY2FsbC4KKyAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX211dGV4LCBbdGhp
c10oKSB7IHJldHVybiAhbV93b3JrZXJzLnNpemUoKTsgfSApOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzT3BlbigpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRl
eCk7CisgICAgICAgIHJldHVybiBtX29wZW47CisgICAgfQorCisgICAgYm9vbCByZWdpc3Rlcldv
cmtlcihjb25zdCB2b2lkKiB3b3JrZXIpCisgICAgeworICAgICAgICBBU1NFUlQod29ya2VyKTsK
KyAgICAgICAgCisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAg
ICAgCisgICAgICAgIGlmICghbV9vcGVuIHx8IG1fd29ya2Vycy5jb250YWlucyh3b3JrZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gQWRkIHRoZSB3
b3JrZXIgdG8gdGhlIHNldCBvZiB3b3JrZXJzIGFuZCB0cnkgd2FraW5nIHVwIHNsZWVwaW5nIHRo
cmVhZHMuCisgICAgICAgIG1fd29ya2Vycy5hZGQod29ya2VyKTsKKyAgICAgICAgbV9jb25kaXRp
b24ubm90aWZ5QWxsKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBi
b29sIHVucmVnaXN0ZXJXb3JrZXIoY29uc3Qgdm9pZCogd29ya2VyKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHdvcmtlcik7CisgICAgICAgIAorICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIo
bV9tdXRleCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fd29ya2Vycy5jb250YWlucyh3b3Jr
ZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gUmVt
b3ZlIHRoZSB3b3JrZXIgZnJvbSB0aGUgc2V0IG9mIHdvcmtlcnMgYW5kIHRyeSB3YWtpbmcgdXAg
c2xlZXBpbmcgdGhyZWFkcy4KKyAgICAgICAgbV93b3JrZXJzLnJlbW92ZSh3b3JrZXIpOworICAg
ICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNSZWdpc3RlcmVkV29ya2VyKGNvbnN0IHZvaWQqIHdvcmtlcikK
KyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAg
cmV0dXJuIG1fd29ya2Vycy5jb250YWlucyh3b3JrZXIpOworICAgIH0KKyAgICAKKyAgICBib29s
IGVucXVldWUoY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tI
b2xkZXIobV9tdXRleCk7CisKKyAgICAgICAgLy8gV2FpdCBmb3IgYW4gZW1wdHkgcGxhY2UgdG8g
YmUgYXZhaWxhYmxlIGluIHRoZSBxdWV1ZS4KKyAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX211
dGV4LCBbdGhpc10oKSB7IHJldHVybiAhbV9vcGVuIHx8IG1fcXVldWUuc2l6ZSgpIDwgQnVmZmVy
U2l6ZTsgfSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgcXVldWUgaXMgY2xvc2luZywgZXhp
dCBpbW1lZGlhdGVseS4KKyAgICAgICAgaWYgKCFtX29wZW4pCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBBZGQgdGhlIGl0ZW0gaW4gdGhlIHF1ZXVlLgor
ICAgICAgICBtX3F1ZXVlLmFwcGVuZCh2YWx1ZSk7CisKKyAgICAgICAgLy8gTm90aWZ5IHRoZSBv
dGhlciB0aHJlYWRzIHRoYXQgYW4gaXRlbSB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVlLgorICAgICAg
ICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgZGVxdWV1ZShUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIExvY2tIb2xk
ZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAgCisgICAgICAgIC8vIFdhaXQgZm9yIGFu
IGl0ZW0gdG8gYmUgYWRkZWQuCisgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9tdXRleCwgW3Ro
aXNdKCkgeyByZXR1cm4gIW1fb3BlbiB8fCBtX3F1ZXVlLnNpemUoKTsgfSk7CisKKyAgICAgICAg
Ly8gVGhlIHF1ZXVlIGlzIGNsb3NpbmcsIGV4aXQgaW1tZWRpYXRlbHkuCisgICAgICAgIGlmICgh
bV9vcGVuKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIEdldCBhIGNv
cHkgZnJvbSBtX3F1ZXVlLmZpcnN0IGFuZCB0aGVuIHJlbW92ZSBpdC4KKyAgICAgICAgdmFsdWUg
PSBtX3F1ZXVlLmZpcnN0KCk7CisgICAgICAgIG1fcXVldWUucmVtb3ZlRmlyc3QoKTsKKworICAg
ICAgICAvLyBOb3RpZnkgdGhlIG90aGVyIHRocmVhZHMgdGhhdCBhbiBpdGVtIHdhcyByZW1vdmVk
IGZyb20gdGhlIHF1ZXVlLgorICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIExvY2sgbV9tdXRleDsKKyAg
ICBDb25kaXRpb24gbV9jb25kaXRpb247CisKKyAgICBib29sIG1fb3BlbiB7IHRydWUgfTsKKyAg
ICBIYXNoU2V0PGNvbnN0IHZvaWQqPiBtX3dvcmtlcnM7CisgICAgRGVxdWU8VCwgQnVmZmVyU2l6
ZT4gbV9xdWV1ZTsKK307CisKK30KKwordXNpbmcgV1RGOjpTeW5jaHJvbml6ZWRGaXhlZFF1ZXVl
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDE1
ZWExZGQ3Yzg4ZDU1OGUwZTZmOTE5NzBmMDBkMTQxMjFlZTYxOGMuLmVlYTkxOGYzNjFmYTQ0ZDUz
Mzk4OTA1MGIwOGY0YzFiYjdlNTE2M2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxNi0xMC0wNCAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBTeW5jaHJv
bml6ZWRGaXhlZFF1ZXVlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjI0NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgYSBuZXcgdGVzdCBmb3IgU3luY2hyb25pemVkRml4ZWRRdWV1ZS4g
VGhlIHRlc3QgZGVmaW5lcyBhIG5ldyBjbGFzcworICAgICAgICBjYWxsZWQgVG9VcHBlckNvbnZl
cnRlciB3aGljaCBjb252ZXJ0cyBzdHJpbmdzIGZyb20gbG93ZXIgY2FzZSB0byB1cHBlcgorICAg
ICAgICBjYXNlLiBJdCBjcmVhdGVzIHR3byB0aHJlYWRzIDogKDEpIHByb2R1Y2UgdGhyZWFkIGFu
ZCAoMikgY29uc3VtZSB0aHJlYWQuCisgICAgICAgIEhlcmUgaXMgd2hhdCBlYWNoIHRocmVhZCBk
b2VzOgorICAgICAgICAKKyAgICAgICAgMS4gTWFpbiB0aHJlYWRzOiBFbnF1ZXVlcyBsb3dlciBj
YXNlIHN0cmluZ3MgaW50byBtX2xvd2VyUXVldWUuCisgICAgICAgIDIuIFByb2R1Y2UgdGhyZWFk
OiBEZXF1ZXVlcyBsb3dlciBjYXNlIHN0cmluZ3MgZnJvbSBtX2xvd2VyUXVldWUgYW5kIAorICAg
ICAgICAgICBlbnF1ZXVlIHRoZWlyIHVwcGVyIGNhc2Ugc3RyaW5ncyBpbiB0aGUgbV91cHBlclF1
ZXVlLgorICAgICAgICAzLiBDb25zdW1lIHRocmVhZDogRGVxdWV1ZXMgdXBwZXIgY2FzZSBzdHJp
bmdzIGZyb20gbV91cHBlclF1ZXVlLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6dGV4dEl0ZW0pOiBBIGhlbHBlciBmdW5jdGlvbiB3aGljaCByZXR1cm5z
IGEgbG93ZXIgY2FzZSBzdHJpbmcgZ2l2ZW4gYW4gaW5kZXguCisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjp0b1VwcGVyKTogQSBoZWxwZXIgZnVuY3Rpb24gd2hpY2ggUmV0dXJucyB0aGUgdXBwZXIg
Y2FzZSBvZiBhIHN0cmluZy4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0
ZXI6OlRvVXBwZXJDb252ZXJ0ZXIpOiAKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJD
b252ZXJ0ZXI6OnByb2R1Y2VRdWV1ZSk6IFJldHVybnMgYSB3b3JrUXVldWUgZm9yIHRoZSBwcm9k
dWNlIHRocmVhZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OmNv
bnN1bWVRdWV1ZSk6IFJldHVybnMgYSB3b3JrUXVldWUgZm9yIHRoZSBjb25zdW1lIHRocmVhZC4K
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnN0YXJ0UHJvZHVjaW5n
KTogQ3JlYXRlcyBhIHRocmVhZCBmb3IgdGhlIHByb2R1Y2VyLgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6c3RhcnRDb25zdW1pbmcpOiBDcmVhdGVzIGEgdGhyZWFk
IGZvciB0aGUgY29uc3VtZXIuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVy
dGVyOjpzdGFydCk6IFN0YXJ0cyBib3RoIHRoZSBwcm9kdWNlciBhbmQgdGhlIGNvbnN1bWVyIHRo
cmVhZHMuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpzdG9wUHJv
ZHVjaW5nKTogVGVybWluYXRlcyB0aGUgcHJvZHVjZXIgdGhyZWFkLgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6c3RvcENvbnN1bWluZyk6IFRlcm1pbmF0ZXMgdGhl
IGNvbnN1bWVyIHRocmVhZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0
ZXI6OnN0b3ApOiBUZXJtaW5hdGVzIGJvdGggdGhlIHByb2R1Y2VyIGFuZCB0aGUgY29uc3VtZXIg
dGhyZWFkcy4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OmVucXVl
dWUpOiBBZGRzIGEgbG93ZXIgY2FzZSBzdHJpbmcgdG8gdGhlIG1fbG93ZXJRdWV1ZSBvbiB0aGUg
bWFpbiB0aHJlYWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpp
c1Byb2R1Y2luZyk6IFJldHVybnMgd2hldGhlciB0aGUgcHJvZHVjaW5nIHRocmVhZCBpcyBhY3Rp
dmUuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjppc0NvbnN1bWlu
Zyk6IFJldHVybnMgd2hldGhlciB0aGUgY29uc3VtaW5nIHRocmVhZCBpcyBhY3RpdmUuCisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpwcm9kdWNlZCk6IFJldHVybnMg
dGhlIG51bWJlciBvZiBwcm9kdWNlZCBlbGVtZW50cy4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRvVXBwZXJDb252ZXJ0ZXI6OmNvbnN1bWVkKTogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbnN1
bWVkIGVsZW1lbnRzLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6
cHJvZHVjZSk6IFN0YXJ0cyBhIHByb2R1Y2VyIHRocmVhZC4KKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRvVXBwZXJDb252ZXJ0ZXI6OmNvbnN1bWUpOiBTdGFydHMgYSBjb25zdW1lciB0aHJlYWQu
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNi0xMC0wMyAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVSTFBhcnNlcjog
ZnJhZ21lbnQtb25seSBVUkxzIHJlbGF0aXZlIHRvIGZpbGUgVVJMcyBzaG91bGQganVzdCBhZGQg
YSBmcmFnbWVudApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NzA3ZTg4NDhkZmZhYzA2MTY0
NzFjZjkxZjNiNzA3NGZiNTllZTFiLi5lMGRjZDBhOWUzMDU0NDZhNTUwNTM0YWM2ZWVmNWVhYWE0
NWVjMGQ2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM5LDYgKzEzOSw3IEBACiAJCTUy
RTVDRTQ5MTREMjFFQUIwMDNCMkJEOCAvKiBQYXJlbnRGcmFtZV9CdW5kbGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFNUNFNDgxNEQyMUVBQjAw
M0IyQkQ4IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5jcHAgKi87IH07CiAJCTUzNjc3MDM0MUNDODAy
MjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNjc3MDMzMUNDODAyMjgwMEQ0MjVC
MSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSAqLzsgfTsKIAkJNTM2NzcwMzYxQ0M4
MUI2MTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzUxQ0M4
MTJGOTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi87IH07CisJ
CTU1OTdGODM2MUQ5NTk2QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OTdGODM0MUQ5
NTk2QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCAqLzsgfTsKIAkJNTcx
NEVDQjkxQ0E4QjVCMDAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcx
NEVDQjgxQ0E4QjU4ODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWwg
Ki87IH07CiAJCTU3MTRFQ0JCMUNBOEJGRTQwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmln
aW5hbFVSTEZyYW1lLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTcxNEVDQkExQ0E4QkZEMTAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVz
dE9yaWdpbmFsVVJMRnJhbWUuaHRtbCAqLzsgfTsKIAkJNTcxNEVDQkQxQ0E4QzIyQTAwMDUxQUM4
IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMMi5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0JDMUNBOEMyMTgwMDA1MUFD
OCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTDIuaHRtbCAqLzsgfTsKQEAgLTkxMCw2ICs5
MTEsNyBAQAogCQk1MkU1Q0U0ODE0RDIxRUFCMDAzQjJCRDggLyogUGFyZW50RnJhbWVfQnVuZGxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcmVudEZyYW1lX0J1
bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNjc3MDMzMUNDODAyMjgw
MEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzY3NzAzNTFDQzgxMkY5MDBENDI1QjEgLyog
V2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0
aCA9IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTU1OTdGODM0MUQ5NTk2QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1
ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9uaXpl
ZEZpeGVkUXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzE0RUNCODFD
QThCNTg4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuaHRtbDsgcGF0aCA9IERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MTRFQ0JBMUNBOEJGRDEwMDA1MUFDOCAvKiBE
b3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7
IHBhdGggPSBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU3MTRFQ0JDMUNBOEMyMTgwMDA1MUFDOCAvKiBEb3dubG9hZFJl
cXVlc3RPcmlnaW5hbFVSTDIuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IERvd25s
b2FkUmVxdWVzdE9yaWdpbmFsVVJMMi5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTc4Myw2ICsxNzg1LDcgQEAKIAkJCQkyNkYxQjQ0MzE1Q0E0MzRGMDBEMUU0QkYgLyogU3Ry
aW5nSW1wbC5jcHAgKi8sCiAJCQkJQzAxMzYzQzcxM0MzOTk3MzAwRUYzOTY0IC8qIFN0cmluZ09w
ZXJhdG9ycy5jcHAgKi8sCiAJCQkJN0M3NEQ0MkQxODgyMjhGMzAwRTVFRDU3IC8qIFN0cmluZ1Zp
ZXcuY3BwICovLAorCQkJCTU1OTdGODM0MUQ5NTk2QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRG
aXhlZFF1ZXVlLmNwcCAqLywKIAkJCQkwQkNEODU2OTE0ODVDOThCMDBFQTIwMDMgLyogVGVtcG9y
YXJ5Q2hhbmdlLmNwcCAqLywKIAkJCQk1QzVFNjMzRDFEMEI2Nzk0MDA4NUEwMjUgLyogVW5pcXVl
UmVmLmNwcCAqLywKIAkJCQk3Q0QwRDVBQTFENTUzNERFMDAwQ0M5RTEgLyogVmFyaWFudC5jcHAg
Ki8sCkBAIC0yMjc2LDYgKzIyNzksNyBAQAogCQkJCTdDODNERjM2MUQwQTU5MEMwMEZFQkNGMyAv
KiBTdHJpbmdIYXNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMzcxRDBBNTkwQzAw
RkVCQ0YzIC8qIFN0cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMzgxRDBB
NTkwQzAwRkVCQ0YzIC8qIFN0cmluZ09wZXJhdG9ycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
NTk3RjgzNjFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3QzgzREYzQTFEMEE1OTBDMDBGRUJDRjMgLyogU3RyaW5nVmlldy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzRDFEMEE1OTBDMDBGRUJDRjMgLyogVGVtcG9y
YXJ5Q2hhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjQwMUQwQTU5MEMwMEZFQkNG
MyAvKiBUZXN0c0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdlYzc2NzgzNGE0ODlkMGIzMWFjNzkxNWY2OGUzMzkzZjUyOTJiYzcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRG
aXhlZFF1ZXVlLmNwcApAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDx0aHJlYWQ+CisKKyNpbmNs
dWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9TeW5jaHJvbml6ZWRGaXhlZFF1
ZXVlLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdGF0aWMgY2hhciBjb25z
dCogdGV4dEl0ZW0oc2l6ZV90IGluZGV4KQoreworICAgIHN0YXRpYyBjaGFyIGNvbnN0KiBpdGVt
c1tdID0geyAiZmlyc3QiLCAic2Vjb25kIiwgInRoaXJkIiwgImZvdXJ0aCIsICJmaWZ0aCIsICJz
aXh0aCIgfTsKKyAgICByZXR1cm4gaW5kZXggPCBzaXplb2YoaXRlbXMpIC8gc2l6ZW9mKGl0ZW1z
WzBdKSA/IGl0ZW1zW2luZGV4XSA6IG51bGxwdHI7Cit9CisKK3N0YXRpYyBDU3RyaW5nIHRvVXBw
ZXIoY29uc3QgQ1N0cmluZyYgbG93ZXIpCit7CisgICAgQ1N0cmluZyB1cHBlciA9IGxvd2VyOwor
CisgICAgZm9yIChjaGFyKiBidWZmZXIgPSB1cHBlci5tdXRhYmxlRGF0YSgpOyAqYnVmZmVyOyAr
K2J1ZmZlcikKKyAgICAgICAgKmJ1ZmZlciA9IHRvQVNDSUlVcHBlcigqYnVmZmVyKTsKKworICAg
IHJldHVybiB1cHBlcjsKK30KKworY2xhc3MgVG9VcHBlckNvbnZlcnRlciB7CitwdWJsaWM6Cisg
ICAgVG9VcHBlckNvbnZlcnRlcigpCisgICAgeworICAgIH0KKworICAgIFdvcmtRdWV1ZSYgcHJv
ZHVjZVF1ZXVlKCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBhdXRvJiBxdWV1ZSA9IFdvcmtRdWV1
ZTo6Y3JlYXRlKCJvcmcud2Via2l0LlByb2R1Y2UiKS5sZWFrUmVmKCk7CisgICAgICAgIHJldHVy
biBxdWV1ZTsKKyAgICB9CisKKyAgICBXb3JrUXVldWUmIGNvbnN1bWVRdWV1ZSgpCisgICAgewor
ICAgICAgICBzdGF0aWMgYXV0byYgcXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgib3JnLndlYmtp
dC5Db25zdW1lIikubGVha1JlZigpOworICAgICAgICByZXR1cm4gcXVldWU7CisgICAgfQorCisg
ICAgdm9pZCBzdGFydFByb2R1Y2luZygpCisgICAgeworICAgICAgICBpZiAoIWlzUHJvZHVjaW5n
KCkpCisgICAgICAgICAgICBwcm9kdWNlKCk7CisgICAgfQorCisgICAgdm9pZCBzdGFydENvbnN1
bWluZygpCisgICAgeworICAgICAgICBpZiAoIWlzQ29uc3VtaW5nKCkpCisgICAgICAgICAgICBj
b25zdW1lKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RhcnQoKQorICAgIHsKKyAgICAgICAg
c3RhcnRQcm9kdWNpbmcoKTsKKyAgICAgICAgc3RhcnRDb25zdW1pbmcoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHN0b3BQcm9kdWNpbmcoKQorICAgIHsKKyAgICAgICAgaWYgKGlzUHJvZHVjaW5nKCkp
CisgICAgICAgICAgICBtX2xvd2VyUXVldWUuY2xvc2UoKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzdG9wQ29uc3VtaW5nKCkKKyAgICB7CisgICAgICAgIGlmIChpc0NvbnN1bWluZygpKQorICAg
ICAgICAgICAgbV91cHBlclF1ZXVlLmNsb3NlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3Rv
cCgpCisgICAgeworICAgICAgICBzdG9wUHJvZHVjaW5nKCk7CisgICAgICAgIHN0b3BDb25zdW1p
bmcoKTsKKyAgICB9CisKKyAgICB2b2lkIGVucXVldWUoY29uc3QgQ1N0cmluZyYgbG93ZXIpCisg
ICAgeworICAgICAgICBtX2xvd2VyUXVldWUuZW5xdWV1ZShsb3dlcik7CisgICAgfQorCisgICAg
Ym9vbCBpc1Byb2R1Y2luZygpIHsgcmV0dXJuIG1fbG93ZXJRdWV1ZS5pc1JlZ2lzdGVyZWRXb3Jr
ZXIodGhpcyk7IH0KKyAgICBib29sIGlzQ29uc3VtaW5nKCkgeyByZXR1cm4gbV91cHBlclF1ZXVl
LmlzUmVnaXN0ZXJlZFdvcmtlcih0aGlzKTsgfQorCisgICAgc2l6ZV90IHByb2R1Y2VkKCkgY29u
c3QgeyByZXR1cm4gbV9wcm9kdWNlZDsgfQorICAgIHNpemVfdCBjb25zdW1lZCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3VtZWQ7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2R1Y2UoKQorICAg
IHsKKyAgICAgICAgbV9sb3dlclF1ZXVlLnJlZ2lzdGVyV29ya2VyKHRoaXMpOworCisgICAgICAg
IHByb2R1Y2VRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzXSB7CisgICAgICAgICAgICBDU3RyaW5nIGxv
d2VyOworICAgICAgICAgICAgd2hpbGUgKG1fbG93ZXJRdWV1ZS5kZXF1ZXVlKGxvd2VyKSkgewor
ICAgICAgICAgICAgICAgIG1fdXBwZXJRdWV1ZS5lbnF1ZXVlKHRvVXBwZXIobG93ZXIpKTsKKyAg
ICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShsb3dlciA9PSB0ZXh0SXRlbShtX3Byb2R1Y2VkKysp
KTsKKyAgICAgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3Ioc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcygxMCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9sb3dl
clF1ZXVlLnVucmVnaXN0ZXJXb3JrZXIodGhpcyk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IHZvaWQgY29uc3VtZSgpCisgICAgeworICAgICAgICBtX3VwcGVyUXVldWUucmVnaXN0ZXJXb3Jr
ZXIodGhpcyk7CisgICAgICAgIAorICAgICAgICBjb25zdW1lUXVldWUoKS5kaXNwYXRjaChbdGhp
c10geworICAgICAgICAgICAgQ1N0cmluZyB1cHBlcjsKKyAgICAgICAgICAgIHdoaWxlIChtX3Vw
cGVyUXVldWUuZGVxdWV1ZSh1cHBlcikpIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSh1
cHBlciA9PSB0b1VwcGVyKHRleHRJdGVtKG1fY29uc3VtZWQrKykpKTsKKyAgICAgICAgICAgICAg
ICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3Ioc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyg1
MCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV91cHBlclF1ZXVlLnVucmVnaXN0ZXJX
b3JrZXIodGhpcyk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIFN5bmNocm9uaXplZEZpeGVk
UXVldWU8Q1N0cmluZywgNFU+IG1fbG93ZXJRdWV1ZTsKKyAgICBTeW5jaHJvbml6ZWRGaXhlZFF1
ZXVlPENTdHJpbmcsIDRVPiBtX3VwcGVyUXVldWU7CisgICAgc2l6ZV90IG1fcHJvZHVjZWQgeyAw
IH07CisgICAgc2l6ZV90IG1fY29uc3VtZWQgeyAwIH07Cit9OworCitURVNUKFdURl9TeW5jaHJv
bml6ZWRGaXhlZFF1ZXVlLCBCYXNpYykKK3sKKyAgICBUb1VwcGVyQ29udmVydGVyIGNvbnZlcnRl
cjsKKworICAgIGNvbnZlcnRlci5zdGFydCgpOworICAgIEVYUEVDVF9UUlVFKGNvbnZlcnRlci5p
c1Byb2R1Y2luZygpICYmIGNvbnZlcnRlci5pc0NvbnN1bWluZygpKTsKKworICAgIGNvbnZlcnRl
ci5zdG9wKCk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnZlcnRlci5pc1Byb2R1Y2luZygpIHx8IGNv
bnZlcnRlci5pc0NvbnN1bWluZygpKTsKKworICAgIEVYUEVDVF9FUShjb252ZXJ0ZXIucHJvZHVj
ZWQoKSwgMFUpOworICAgIEVYUEVDVF9FUShjb252ZXJ0ZXIuY29uc3VtZWQoKSwgMFUpOworfQor
CitURVNUKFdURl9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLCBQcm9kdWNlKQoreworICAgIFRvVXBw
ZXJDb252ZXJ0ZXIgY29udmVydGVyOworICAgIAorICAgIGNvbnZlcnRlci5zdGFydFByb2R1Y2lu
ZygpOworICAgIEVYUEVDVF9UUlVFKGNvbnZlcnRlci5pc1Byb2R1Y2luZygpICYmICFjb252ZXJ0
ZXIuaXNDb25zdW1pbmcoKSk7CisKKyAgICBzaXplX3QgY291bnQgPSAwOworICAgIHdoaWxlIChj
aGFyIGNvbnN0KiBpdGVtID0gdGV4dEl0ZW0oY291bnQpKSB7CisgICAgICAgIGNvbnZlcnRlci5l
bnF1ZXVlKGl0ZW0pOworICAgICAgICArK2NvdW50OworICAgICAgICAKKyAgICAgICAgc3RkOjp0
aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMSkpOworICAg
IH0KKworICAgIGNvbnZlcnRlci5zdG9wKCk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnZlcnRlci5p
c1Byb2R1Y2luZygpIHx8IGNvbnZlcnRlci5pc0NvbnN1bWluZygpKTsKK30KKworVEVTVChXVEZf
U3luY2hyb25pemVkRml4ZWRRdWV1ZSwgQ29uc3VtZSkKK3sKKyAgICBUb1VwcGVyQ29udmVydGVy
IGNvbnZlcnRlcjsKKyAgICAKKyAgICBjb252ZXJ0ZXIuc3RhcnRDb25zdW1pbmcoKTsKKyAgICBF
WFBFQ1RfVFJVRSghY29udmVydGVyLmlzUHJvZHVjaW5nKCkgJiYgY29udmVydGVyLmlzQ29uc3Vt
aW5nKCkpOworICAgIAorICAgIGNvbnZlcnRlci5zdG9wKCk7CisgICAgRVhQRUNUX0ZBTFNFKGNv
bnZlcnRlci5pc1Byb2R1Y2luZygpIHx8IGNvbnZlcnRlci5pc0NvbnN1bWluZygpKTsKK30KKwor
VEVTVChXVEZfU3luY2hyb25pemVkRml4ZWRRdWV1ZSwgTGltaXRzKQoreworICAgIFRvVXBwZXJD
b252ZXJ0ZXIgY29udmVydGVyOworCisgICAgY29udmVydGVyLnN0YXJ0KCk7CisgICAgRVhQRUNU
X1RSVUUoY29udmVydGVyLmlzUHJvZHVjaW5nKCkgJiYgY29udmVydGVyLmlzQ29uc3VtaW5nKCkp
OworCisgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICB3aGlsZSAoY2hhciBjb25zdCogaXRlbSA9
IHRleHRJdGVtKGNvdW50KSkgeworICAgICAgICBjb252ZXJ0ZXIuZW5xdWV1ZShpdGVtKTsKKyAg
ICAgICAgKytjb3VudDsKKworICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3Ioc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcygxKSk7CisgICAgfQorCisgICAgc3RkOjp0aGlzX3RocmVh
ZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoNDAwKSk7CisKKyAgICBjb252
ZXJ0ZXIuc3RvcCgpOworICAgIEVYUEVDVF9GQUxTRShjb252ZXJ0ZXIuaXNQcm9kdWNpbmcoKSB8
fCBjb252ZXJ0ZXIuaXNDb25zdW1pbmcoKSk7CisgICAgCisgICAgRVhQRUNUX0VRKGNvbnZlcnRl
ci5wcm9kdWNlZCgpLCBjb3VudCk7CisgICAgRVhQRUNUX0VRKGNvbnZlcnRlci5jb25zdW1lZCgp
LCBjb3VudCk7Cit9CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290722</attachid>
            <date>2016-10-05 10:18:08 -0700</date>
            <delta_ts>2016-10-07 10:51:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162478-20161005101456.patch</filename>
            <type>text/plain</type>
            <size>24603</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDY4MTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE2LTEwLTA1ICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFN5bmNocm9uaXplZEZpeGVk
UXVldWUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjQ3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNpbXBsZSBwcm9kdWNlci9jb25zdW1lciB3b3Jr
ZXIuIEl0IGZhY2lsaXRhdGVzCisgICAgICAgIHN5bmNocm9uaXppbmcgZW5xdWV1aW5nIHRvIGFu
ZCBkZXF1ZXVpbmcgZnJvbSBhIGZpeGVkIHNpemUtcXVldWUuIEl0IHVzZXMKKyAgICAgICAgYSBz
aW5nbGUgbG9jayBhbmQgYSBzaW5nbGUgY29uZGl0aW9uIHRvIHN5bmNocm9uaXplIGFsbCBpdHMg
bWVtYmVycyBhbW9uZworICAgICAgICB0aGUgd29ya2luZyB0aHJlYWRzLiBUaGlzIG1lYW5zIGEg
c2luZ2xlIHRocmVhZCBpcyBhY3RpdmUgYXQgYW55IHRpbWUgYW5kCisgICAgICAgIGFuZCB0aGUg
b3RoZXIgdGhyZWFkcyBhcmUgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGUgbG9jayB0byBiZSByZWxl
YXNlZC4gT3IKKyAgICAgICAgdGhleSBhcmUgc2xlZXBpbmcgd2FpdGluZyBmb3IgdGhlIGNvbmRp
dGlvbiB0byBiZSBzYXRpc2ZpZWQuCisKKyAgICAgICAgT25lIGltcG9ydGFudCBmdW5jdGlvbiB0
aGlzIGNsYXNzIHByb3ZpZGVzIGlzIHRoZSBhYmlsaXR5IHRvIGNsb3NlIGl0c2VsZgorICAgICAg
ICBieSBhbnkgdGhyZWFkLiBDYWxsaW5nIGNsb3NlKCkgY2F1c2VzIGFsbCB0aGUgc2xlZXBpbmcg
dGhyZWFkcyB0byB3YWtlIHVwCisgICAgICAgIGFuZCB0ZXJtaW5hdGVzIHRoZW1zZWx2ZXMuIFRo
ZSBjbG9zZSgpIHdpbGwgcmV0dXJuIG9ubHkgd2hlbiBhbGwgdGhlIHRocmVhZHMKKyAgICAgICAg
YXJlIHRlcm1pbmF0ZWQgc28gdGhlIGNhbGxlciBjYW4gZGVsZXRlIHRoaXMgb2JqZWN0IGltbWVk
aWF0ZWx5LgorCisgICAgICAgIFRvIHRyYWNrIHRoZSBhY3RpdmUgd29ya2luZyB0aHJlYWRzLCBh
bGwgdGhlIHdvcmtpbmcgdGhyZWFkIGhhdmUgdG8gcmVnaXN0ZXIKKyAgICAgICAgdGhlbXNlbHZl
cyBiZWZvcmUgY3JlYXRpbmcgdGhlaXIgdGhyZWFkcy4gVGhlIHdvcmtpbmcgdGhyZWFkcyBhbHNv
IGhhdmUgdG8KKyAgICAgICAgdW5yZWdpc3RlciB0aGVtc2VsdmVzIG9uY2UgdGhleSBhcmUgZG9u
ZSBvciB0aGUgcXVldWUgaXMgY2xvc2VkLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1N5bmNocm9uaXplZEZpeGVkUXVldWUuaDogQWRk
ZWQuCisgICAgICAgIChXVEY6OlN5bmNocm9uaXplZEZpeGVkUXVldWU6OlN5bmNocm9uaXplZEZp
eGVkUXVldWUpOgorICAgICAgICAoV1RGOjpTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlOjpvcGVuKTog
UmVzdG9yZSB0aGUgcXVldWUgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLgorICAgICAgICAoV1RGOjpT
eW5jaHJvbml6ZWRGaXhlZFF1ZXVlOjpjbG9zZSk6IFdha2UgYWxsIHRoZSBzbGVlcGluZyB0aHJl
YWRzIGFuZCB3YWl0IHRoZW0gdG8gdW5yZWdpc3RlciB0aGVtc2VsdmVzLgorICAgICAgICAoV1RG
OjpTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlOjppc09wZW4pOiBEb2VzIHRoZSBxdWV1ZSBhY2NlcHQg
bmV3IGl0ZW1zL3dvcmtlcnM/CisgICAgICAgIChXVEY6OlN5bmNocm9uaXplZEZpeGVkUXVldWU6
OnJlZ2lzdGVyV29ya2VyKTogQWRkIGEgbmV3IHdvcmtlciB0byB0aGUgc2V0IG9mIHdvcmtlcnMu
CisgICAgICAgIChXVEY6OlN5bmNocm9uaXplZEZpeGVkUXVldWU6OnVucmVnaXN0ZXJXb3JrZXIp
OiBSZW1vdmUgYSB3b3JrZXIgZnJvbSB0aGUgc2V0IG9mIHdvcmtlcnMuCisgICAgICAgIChXVEY6
OlN5bmNocm9uaXplZEZpeGVkUXVldWU6OmlzUmVnaXN0ZXJlZFdvcmtlcik6IENoZWNrcyB3aGV0
aGVyIGEgd29yayBleGlzdHMgaW4gdGhlIHNldCBvZiB3b3JrZXJzLgorICAgICAgICAoV1RGOjpT
eW5jaHJvbml6ZWRGaXhlZFF1ZXVlOjplbnF1ZXVlKTogRW5xdWV1ZSBhbiBpdGVtIHRvIHRoZSBx
dWV1ZS4KKyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6ZGVxdWV1ZSk6IERl
cXVldWUgYW4gaXRlbSBmb3JtIHRoZSBxdWV1ZS4KKwogMjAxNi0xMC0wNSAgWmFuIERvYmVyc2Vr
ICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmVuYW1lIEVOQUJMRV9FTkNSWVBU
RURfTUVESUFfVjIgdG8gRU5BQkxFX0xFR0FDWV9FTkNSWVBURURfTUVESUEKSW5kZXg6IFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA2ODEzKQorKysg
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTE5LDYgKzExOSw3IEBACiAJCTUxNUY3OTU2MUNGRDNBNjkwMENDRUQ5MyAvKiBDcm9zc1Ro
cmVhZFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTVGNzk1NTFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oICovOyB9Owog
CQk1MzlFQjA2MzFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3
IC8qIExFQkRlY29kZXIuaCAqLzsgfTsKIAkJNTUzMDcxQ0ExQzQwNDI3MjAwMzg0ODk4IC8qIFRp
bnlMUlVDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTUzMDcxQzkxQzQwNDI3MjAwMzg0ODk4IC8qIFRpbnlMUlVDYWNoZS5oICovOyB9OworCQk1
NTk3RjgyRjFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU5N0Y4MkMxRDk0Qjk5
NzAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCAqLzsgfTsKIAkJNUM3Qzg4RDQx
RDBBM0EwQTAwOUQyRjZEIC8qIFVuaXF1ZVJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUM3Qzg4RDMxRDBBM0EwQTAwOUQyRjZEIC8qIFVuaXF1ZVJl
Zi5oICovOyB9OwogCQk3MEE5OTNGRTFBRDcxNTEzMDBGQTYxNUIgLyogU3ltYm9sUmVnaXN0cnku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBBOTkz
RkMxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJNzBBOTkz
RkYxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEE5OTNGRDFBRDcxNTEzMDBGQTYxNUIgLyog
U3ltYm9sUmVnaXN0cnkuaCAqLzsgfTsKQEAgLTQ2Myw2ICs0NjQsNyBAQAogCQk1MTVGNzk1NTFD
RkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTUzMDcxQzkxQzQwNDI3MjAwMzg0ODk4IC8qIFRpbnlMUlVDYWNoZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55TFJVQ2FjaGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU5N0Y4MkMxRDk0Qjk5NzAwNjZCQzIxIC8qIFN5bmNocm9u
aXplZEZpeGVkUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hy
b25pemVkRml4ZWRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjQzMzgz
QTVEMEI0NjNDOTQzM0Q5MzMgLyogSW5kZXhNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5kZXhNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM3Qzg4
RDMxRDBBM0EwQTAwOUQyRjZEIC8qIFVuaXF1ZVJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVbmlxdWVSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQy
NDdCNjIxNDY4OUI4NjAwRTc4Qjc2IC8qIGxpYldURi5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSBsaWJXVEYuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAg
LTEwMjMsNiArMTAyNSw3IEBACiAJCQkJQTc0ODc0NTExN0EwQkRBRTAwRkEwNENCIC8qIFN0cmlu
Z0hhc2hEdW1wQ29udGV4dC5oICovLAogCQkJCTBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBT
dHJpbmdQcmludFN0cmVhbS5jcHAgKi8sCiAJCQkJMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8q
IFN0cmluZ1ByaW50U3RyZWFtLmggKi8sCisJCQkJNTU5N0Y4MkMxRDk0Qjk5NzAwNjZCQzIxIC8q
IFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCAqLywKIAkJCQkwRkIzMTdDMzFDNDg4MDAxMDA3RTM5
NUEgLyogU3lzdGVtVHJhY2luZy5oICovLAogCQkJCUE4QTQ3MzFBMTUxQTgyNUIwMDQxMjNGRiAv
KiBUZW1wb3JhcnlDaGFuZ2UuaCAqLywKIAkJCQlBOEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyog
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggKi8sCkBAIC0xNDA3LDYgKzE0MTAsNyBAQAogCQkJ
CUM0RjhBOTM3MTlDNjVFQjQwMEIyQjE1RCAvKiBTdG9wd2F0Y2guaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBNkJCNzY5MTYyRjMwMDUwMEREMTZEQiAvKiBTdHJlYW1CdWZmZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3NDNCMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTU1OTdGODJGMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRG
aXhlZFF1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzRDE1MUE4MjVCMDA0MTIzRkYg
LyogU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDMwQjQ3ODkxQUFBQUMxQTAw
MTIyM0RBIC8qIFN0cmluZ0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0UxNTFB
ODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0NvbmNhdGVuYXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1N5bmNocm9uaXplZEZpeGVkUXVldWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dURi93dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgQnVmZmVyU2l6ZT4KK2NsYXNzIFN5bmNocm9uaXpl
ZEZpeGVkUXVldWUgeworcHVibGljOgorICAgIFN5bmNocm9uaXplZEZpeGVkUXVldWUoKQorICAg
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKChCdWZmZXJTaXplIC0gMSkgJiBCdWZmZXJTaXpl
KSwgIkJ1ZmZlclNpemUgbXVzdCBiZSBwb3dlciBvZiAyLiIpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIG9wZW4oKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrSG9sZGVyKG1fbXV0ZXgp
OworICAgICAgICAKKyAgICAgICAgLy8gUmVzdG9yZSB0aGUgcXVldWUgdG8gaXRzIG9yaWdpbmFs
IHN0YXRlLgorICAgICAgICBtX3F1ZXVlLmNsZWFyKCk7CisgICAgICAgIG1fd29ya2Vycy5jbGVh
cigpOworICAgICAgICBtX29wZW4gPSB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsb3Nl
KCkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKworICAg
ICAgICAvLyBXYWtlIGFsbCB0aGUgc2xlZXBpbmcgdGhyZWFkcyB1cCB3aXRoIGEgY2xvc2luZyBz
dGF0ZS4KKyAgICAgICAgbV9vcGVuID0gZmFsc2U7CisgICAgICAgIG1fY29uZGl0aW9uLm5vdGlm
eUFsbCgpOworCisgICAgICAgIC8vIFdhaXQgZm9yIGFsbCB0aGUgdGhyZWFkcyB0byBkaWUuIFRo
ZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBtaWdodAorICAgICAgICAvLyBkZWxldGUgdGhlIFN5
bmNocm9uaXplZEZpeGVkUXVldWUgaXRzZWxmIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgY2FsbC4K
KyAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX211dGV4LCBbdGhpc10oKSB7IHJldHVybiAhbV93
b3JrZXJzLnNpemUoKTsgfSApOworICAgIH0KKyAgICAKKyAgICBib29sIGlzT3BlbigpCisgICAg
eworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHJldHVy
biBtX29wZW47CisgICAgfQorCisgICAgYm9vbCByZWdpc3Rlcldvcmtlcihjb25zdCB2b2lkKiB3
b3JrZXIpCisgICAgeworICAgICAgICBBU1NFUlQod29ya2VyKTsKKyAgICAgICAgCisgICAgICAg
IExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
bV9vcGVuIHx8IG1fd29ya2Vycy5jb250YWlucyh3b3JrZXIpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gQWRkIHRoZSB3b3JrZXIgdG8gdGhlIHNldCBv
ZiB3b3JrZXJzIGFuZCB0cnkgd2FraW5nIHVwIHNsZWVwaW5nIHRocmVhZHMuCisgICAgICAgIG1f
d29ya2Vycy5hZGQod29ya2VyKTsKKyAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIHVucmVnaXN0ZXJXb3Jr
ZXIoY29uc3Qgdm9pZCogd29ya2VyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHdvcmtlcik7Cisg
ICAgICAgIAorICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAg
IAorICAgICAgICBpZiAoIW1fd29ya2Vycy5jb250YWlucyh3b3JrZXIpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSB3b3JrZXIgZnJv
bSB0aGUgc2V0IG9mIHdvcmtlcnMgYW5kIHRyeSB3YWtpbmcgdXAgc2xlZXBpbmcgdGhyZWFkcy4K
KyAgICAgICAgbV93b3JrZXJzLnJlbW92ZSh3b3JrZXIpOworICAgICAgICBtX2NvbmRpdGlvbi5u
b3RpZnlBbGwoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNSZWdpc3RlcmVkV29ya2VyKGNvbnN0IHZvaWQqIHdvcmtlcikKKyAgICB7CisgICAgICAgIExv
Y2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAgcmV0dXJuIG1fd29ya2Vycy5j
b250YWlucyh3b3JrZXIpOworICAgIH0KKyAgICAKKyAgICBib29sIGVucXVldWUoY29uc3QgVCYg
dmFsdWUpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisK
KyAgICAgICAgLy8gV2FpdCBmb3IgYW4gZW1wdHkgcGxhY2UgdG8gYmUgYXZhaWxhYmxlIGluIHRo
ZSBxdWV1ZS4KKyAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX211dGV4LCBbdGhpc10oKSB7IHJl
dHVybiAhbV9vcGVuIHx8IG1fcXVldWUuc2l6ZSgpIDwgQnVmZmVyU2l6ZTsgfSk7CisgICAgICAg
IAorICAgICAgICAvLyBUaGUgcXVldWUgaXMgY2xvc2luZywgZXhpdCBpbW1lZGlhdGVseS4KKyAg
ICAgICAgaWYgKCFtX29wZW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICAvLyBBZGQgdGhlIGl0ZW0gaW4gdGhlIHF1ZXVlLgorICAgICAgICBtX3F1ZXVlLmFw
cGVuZCh2YWx1ZSk7CisKKyAgICAgICAgLy8gTm90aWZ5IHRoZSBvdGhlciB0aHJlYWRzIHRoYXQg
YW4gaXRlbSB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVlLgorICAgICAgICBtX2NvbmRpdGlvbi5ub3Rp
ZnlBbGwoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgZGVx
dWV1ZShUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211
dGV4KTsKKyAgICAgICAgCisgICAgICAgIC8vIFdhaXQgZm9yIGFuIGl0ZW0gdG8gYmUgYWRkZWQu
CisgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9tdXRleCwgW3RoaXNdKCkgeyByZXR1cm4gIW1f
b3BlbiB8fCBtX3F1ZXVlLnNpemUoKTsgfSk7CisKKyAgICAgICAgLy8gVGhlIHF1ZXVlIGlzIGNs
b3NpbmcsIGV4aXQgaW1tZWRpYXRlbHkuCisgICAgICAgIGlmICghbV9vcGVuKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIEdldCBhIGNvcHkgZnJvbSBtX3F1ZXVlLmZp
cnN0IGFuZCB0aGVuIHJlbW92ZSBpdC4KKyAgICAgICAgdmFsdWUgPSBtX3F1ZXVlLmZpcnN0KCk7
CisgICAgICAgIG1fcXVldWUucmVtb3ZlRmlyc3QoKTsKKworICAgICAgICAvLyBOb3RpZnkgdGhl
IG90aGVyIHRocmVhZHMgdGhhdCBhbiBpdGVtIHdhcyByZW1vdmVkIGZyb20gdGhlIHF1ZXVlLgor
ICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIExvY2sgbV9tdXRleDsKKyAgICBDb25kaXRpb24gbV9jb25k
aXRpb247CisKKyAgICBib29sIG1fb3BlbiB7IHRydWUgfTsKKyAgICBIYXNoU2V0PGNvbnN0IHZv
aWQqPiBtX3dvcmtlcnM7CisgICAgRGVxdWU8VCwgQnVmZmVyU2l6ZT4gbV9xdWV1ZTsKK307CisK
K30KKwordXNpbmcgV1RGOjpTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlOwpJbmRleDogVG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2ODEzKQor
KysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTYt
MTAtMDUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgU3luY2hyb25pemVkRml4ZWRRdWV1ZSBjbGFzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNDc4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IHRlc3QgZm9yIFN5bmNocm9u
aXplZEZpeGVkUXVldWUuIFRoZSB0ZXN0IGRlZmluZXMgYSBuZXcgY2xhc3MKKyAgICAgICAgY2Fs
bGVkIFRvVXBwZXJDb252ZXJ0ZXIgd2hpY2ggY29udmVydHMgc3RyaW5ncyBmcm9tIGxvd2VyIGNh
c2UgdG8gdXBwZXIKKyAgICAgICAgY2FzZS4gSXQgY3JlYXRlcyB0d28gdGhyZWFkcyA6ICgxKSBw
cm9kdWNlIHRocmVhZCBhbmQgKDIpIGNvbnN1bWUgdGhyZWFkLgorICAgICAgICBIZXJlIGlzIHdo
YXQgZWFjaCB0aHJlYWQgZG9lczoKKyAgICAgICAgCisgICAgICAgIDEuIE1haW4gdGhyZWFkczog
RW5xdWV1ZXMgbG93ZXIgY2FzZSBzdHJpbmdzIGludG8gbV9sb3dlclF1ZXVlLgorICAgICAgICAy
LiBQcm9kdWNlIHRocmVhZDogRGVxdWV1ZXMgbG93ZXIgY2FzZSBzdHJpbmdzIGZyb20gbV9sb3dl
clF1ZXVlIGFuZCAKKyAgICAgICAgICAgZW5xdWV1ZSB0aGVpciB1cHBlciBjYXNlIHN0cmluZ3Mg
aW4gdGhlIG1fdXBwZXJRdWV1ZS4KKyAgICAgICAgMy4gQ29uc3VtZSB0aHJlYWQ6IERlcXVldWVz
IHVwcGVyIGNhc2Ugc3RyaW5ncyBmcm9tIG1fdXBwZXJRdWV1ZS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRleHRJdGVtKTogQSBoZWxwZXIgZnVuY3Rp
b24gd2hpY2ggcmV0dXJucyBhIGxvd2VyIGNhc2Ugc3RyaW5nIGdpdmVuIGFuIGluZGV4LgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6dG9VcHBlcik6IEEgaGVscGVyIGZ1bmN0aW9uIHdoaWNoIFJl
dHVybnMgdGhlIHVwcGVyIGNhc2Ugb2YgYSBzdHJpbmcuCisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpUb1VwcGVyQ29udmVydGVyOjpUb1VwcGVyQ29udmVydGVyKTogCisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpwcm9kdWNlUXVldWUpOiBSZXR1cm5zIGEgd29ya1F1
ZXVlIGZvciB0aGUgcHJvZHVjZSB0aHJlYWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1Vw
cGVyQ29udmVydGVyOjpjb25zdW1lUXVldWUpOiBSZXR1cm5zIGEgd29ya1F1ZXVlIGZvciB0aGUg
Y29uc3VtZSB0aHJlYWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVy
OjpzdGFydFByb2R1Y2luZyk6IENyZWF0ZXMgYSB0aHJlYWQgZm9yIHRoZSBwcm9kdWNlci4KKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnN0YXJ0Q29uc3VtaW5nKTog
Q3JlYXRlcyBhIHRocmVhZCBmb3IgdGhlIGNvbnN1bWVyLgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VG9VcHBlckNvbnZlcnRlcjo6c3RhcnQpOiBTdGFydHMgYm90aCB0aGUgcHJvZHVjZXIgYW5k
IHRoZSBjb25zdW1lciB0aHJlYWRzLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNv
bnZlcnRlcjo6c3RvcFByb2R1Y2luZyk6IFRlcm1pbmF0ZXMgdGhlIHByb2R1Y2VyIHRocmVhZC4K
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnN0b3BDb25zdW1pbmcp
OiBUZXJtaW5hdGVzIHRoZSBjb25zdW1lciB0aHJlYWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpUb1VwcGVyQ29udmVydGVyOjpzdG9wKTogVGVybWluYXRlcyBib3RoIHRoZSBwcm9kdWNlciBh
bmQgdGhlIGNvbnN1bWVyIHRocmVhZHMuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVy
Q29udmVydGVyOjplbnF1ZXVlKTogQWRkcyBhIGxvd2VyIGNhc2Ugc3RyaW5nIHRvIHRoZSBtX2xv
d2VyUXVldWUgb24gdGhlIG1haW4gdGhyZWFkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9V
cHBlckNvbnZlcnRlcjo6aXNQcm9kdWNpbmcpOiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb2R1Y2lu
ZyB0aHJlYWQgaXMgYWN0aXZlLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZl
cnRlcjo6aXNDb25zdW1pbmcpOiBSZXR1cm5zIHdoZXRoZXIgdGhlIGNvbnN1bWluZyB0aHJlYWQg
aXMgYWN0aXZlLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6cHJv
ZHVjZWQpOiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcHJvZHVjZWQgZWxlbWVudHMuCisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpjb25zdW1lZCk6IFJldHVybnMgdGhl
IG51bWJlciBvZiBjb25zdW1lZCBlbGVtZW50cy4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRv
VXBwZXJDb252ZXJ0ZXI6OnByb2R1Y2UpOiBTdGFydHMgYSBwcm9kdWNlciB0aHJlYWQuCisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpjb25zdW1lKTogU3RhcnRzIGEg
Y29uc3VtZXIgdGhyZWFkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTYt
MTAtMDUgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFJl
bmFtZSBFTkFCTEVfRU5DUllQVEVEX01FRElBX1YyIHRvIEVOQUJMRV9MRUdBQ1lfRU5DUllQVEVE
X01FRElBCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA2ODEzKQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw2ICsxMzksNyBAQAogCQk1MkU1Q0U0OTE0RDIxRUFC
MDAzQjJCRDggLyogUGFyZW50RnJhbWVfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRTVDRTQ4MTREMjFFQUIwMDNCMkJEOCAvKiBQYXJl
bnRGcmFtZV9CdW5kbGUuY3BwICovOyB9OwogCQk1MzY3NzAzNDFDQzgwMjI4MDBENDI1QjEgLyog
V2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzY3NzAzMzFDQzgwMjI4MDBENDI1QjEgLyogV2ViU2NyaXB0
T2JqZWN0RGVzY3JpcHRpb24ubW0gKi87IH07CiAJCTUzNjc3MDM2MUNDODFCNjEwMEQ0MjVCMSAv
KiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNjc3MDM1MUNDODEyRjkwMEQ0MjVCMSAv
KiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1sICovOyB9OworCQk1NTk3RjgzNjFEOTU5
NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEg
LyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgKi87IH07CiAJCTU3MTRFQ0I5MUNBOEI1QjAw
MDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0I4MUNBOEI1ODgw
MDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sICovOyB9OwogCQk1NzE0
RUNCQjFDQThCRkU0MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5o
dG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU3MTRFQ0JBMUNBOEJGRDEwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZy
YW1lLmh0bWwgKi87IH07CiAJCTU3MTRFQ0JEMUNBOEMyMkEwMDA1MUFDOCAvKiBEb3dubG9hZFJl
cXVlc3RPcmlnaW5hbFVSTDIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NzE0RUNCQzFDQThDMjE4MDAwNTFBQzggLyogRG93bmxvYWRS
ZXF1ZXN0T3JpZ2luYWxVUkwyLmh0bWwgKi87IH07CkBAIC05MTAsNiArOTExLDcgQEAKIAkJNTJF
NUNFNDgxNEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJlbnRGcmFtZV9CdW5kbGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzY3NzAzMzFDQzgwMjI4MDBENDI1QjEgLyogV2Vi
U2NyaXB0T2JqZWN0RGVzY3JpcHRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVj
dERlc2NyaXB0aW9uLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBXZWJTY3JpcHRP
YmplY3REZXNjcmlwdGlvbi5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTk3
RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcxNEVDQjgxQ0E4QjU4ODAwMDUxQUM4
IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7
IHBhdGggPSBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1NzE0RUNCQTFDQThCRkQxMDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0
T3JpZ2luYWxVUkxGcmFtZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRG93bmxv
YWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1NzE0RUNCQzFDQThDMjE4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxV
UkwyLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBEb3dubG9hZFJlcXVlc3RPcmln
aW5hbFVSTDIuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3ODMsNiArMTc4
NSw3IEBACiAJCQkJMjZGMUI0NDMxNUNBNDM0RjAwRDFFNEJGIC8qIFN0cmluZ0ltcGwuY3BwICov
LAogCQkJCUMwMTM2M0M3MTNDMzk5NzMwMEVGMzk2NCAvKiBTdHJpbmdPcGVyYXRvcnMuY3BwICov
LAogCQkJCTdDNzRENDJEMTg4MjI4RjMwMEU1RUQ1NyAvKiBTdHJpbmdWaWV3LmNwcCAqLywKKwkJ
CQk1NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAg
Ki8sCiAJCQkJMEJDRDg1NjkxNDg1Qzk4QjAwRUEyMDAzIC8qIFRlbXBvcmFyeUNoYW5nZS5jcHAg
Ki8sCiAJCQkJNUM1RTYzM0QxRDBCNjc5NDAwODVBMDI1IC8qIFVuaXF1ZVJlZi5jcHAgKi8sCiAJ
CQkJN0NEMEQ1QUExRDU1MzRERTAwMENDOUUxIC8qIFZhcmlhbnQuY3BwICovLApAQCAtMjI3Niw2
ICsyMjc5LDcgQEAKIAkJCQk3QzgzREYzNjFEMEE1OTBDMDBGRUJDRjMgLyogU3RyaW5nSGFzaGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjM3MUQwQTU5MEMwMEZFQkNGMyAvKiBTdHJp
bmdJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjM4MUQwQTU5MEMwMEZFQkNGMyAv
KiBTdHJpbmdPcGVyYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTU5N0Y4MzYxRDk1OTZD
ODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0M4M0RGM0ExRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmluZ1ZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0M4M0RGM0QxRDBBNTkwQzAwRkVCQ0YzIC8qIFRlbXBvcmFyeUNoYW5nZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREY0MDFEMEE1OTBDMDBGRUJDRjMgLyogVGVzdHNDb250
cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8dGhyZWFk
PgorCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvU3luY2hyb25p
emVkRml4ZWRRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGlj
IGNoYXIgY29uc3QqIHRleHRJdGVtKHNpemVfdCBpbmRleCkKK3sKKyAgICBzdGF0aWMgY2hhciBj
b25zdCogaXRlbXNbXSA9IHsgImZpcnN0IiwgInNlY29uZCIsICJ0aGlyZCIsICJmb3VydGgiLCAi
ZmlmdGgiLCAic2l4dGgiIH07CisgICAgcmV0dXJuIGluZGV4IDwgc2l6ZW9mKGl0ZW1zKSAvIHNp
emVvZihpdGVtc1swXSkgPyBpdGVtc1tpbmRleF0gOiBudWxscHRyOworfQorCitzdGF0aWMgQ1N0
cmluZyB0b1VwcGVyKGNvbnN0IENTdHJpbmcmIGxvd2VyKQoreworICAgIENTdHJpbmcgdXBwZXIg
PSBsb3dlcjsKKworICAgIGZvciAoY2hhciogYnVmZmVyID0gdXBwZXIubXV0YWJsZURhdGEoKTsg
KmJ1ZmZlcjsgKytidWZmZXIpCisgICAgICAgICpidWZmZXIgPSB0b0FTQ0lJVXBwZXIoKmJ1ZmZl
cik7CisKKyAgICByZXR1cm4gdXBwZXI7Cit9CisKK2NsYXNzIFRvVXBwZXJDb252ZXJ0ZXIgewor
cHVibGljOgorICAgIFRvVXBwZXJDb252ZXJ0ZXIoKQorICAgIHsKKyAgICB9CisKKyAgICBXb3Jr
UXVldWUmIHByb2R1Y2VRdWV1ZSgpCisgICAgeworICAgICAgICBzdGF0aWMgYXV0byYgcXVldWUg
PSBXb3JrUXVldWU6OmNyZWF0ZSgib3JnLndlYmtpdC5Qcm9kdWNlIikubGVha1JlZigpOworICAg
ICAgICByZXR1cm4gcXVldWU7CisgICAgfQorCisgICAgV29ya1F1ZXVlJiBjb25zdW1lUXVldWUo
KQorICAgIHsKKyAgICAgICAgc3RhdGljIGF1dG8mIHF1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUo
Im9yZy53ZWJraXQuQ29uc3VtZSIpLmxlYWtSZWYoKTsKKyAgICAgICAgcmV0dXJuIHF1ZXVlOwor
ICAgIH0KKworICAgIHZvaWQgc3RhcnRQcm9kdWNpbmcoKQorICAgIHsKKyAgICAgICAgaWYgKCFp
c1Byb2R1Y2luZygpKQorICAgICAgICAgICAgcHJvZHVjZSgpOworICAgIH0KKworICAgIHZvaWQg
c3RhcnRDb25zdW1pbmcoKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0NvbnN1bWluZygpKQorICAg
ICAgICAgICAgY29uc3VtZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0YXJ0KCkKKyAgICB7
CisgICAgICAgIHN0YXJ0UHJvZHVjaW5nKCk7CisgICAgICAgIHN0YXJ0Q29uc3VtaW5nKCk7Cisg
ICAgfQorCisgICAgdm9pZCBzdG9wUHJvZHVjaW5nKCkKKyAgICB7CisgICAgICAgIGlmIChpc1By
b2R1Y2luZygpKQorICAgICAgICAgICAgbV9sb3dlclF1ZXVlLmNsb3NlKCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgc3RvcENvbnN1bWluZygpCisgICAgeworICAgICAgICBpZiAoaXNDb25zdW1p
bmcoKSkKKyAgICAgICAgICAgIG1fdXBwZXJRdWV1ZS5jbG9zZSgpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHN0b3AoKQorICAgIHsKKyAgICAgICAgc3RvcFByb2R1Y2luZygpOworICAgICAgICBz
dG9wQ29uc3VtaW5nKCk7CisgICAgfQorCisgICAgdm9pZCBlbnF1ZXVlKGNvbnN0IENTdHJpbmcm
IGxvd2VyKQorICAgIHsKKyAgICAgICAgbV9sb3dlclF1ZXVlLmVucXVldWUobG93ZXIpOworICAg
IH0KKworICAgIGJvb2wgaXNQcm9kdWNpbmcoKSB7IHJldHVybiBtX2xvd2VyUXVldWUuaXNSZWdp
c3RlcmVkV29ya2VyKHRoaXMpOyB9CisgICAgYm9vbCBpc0NvbnN1bWluZygpIHsgcmV0dXJuIG1f
dXBwZXJRdWV1ZS5pc1JlZ2lzdGVyZWRXb3JrZXIodGhpcyk7IH0KKworICAgIHNpemVfdCBwcm9k
dWNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZHVjZWQ7IH0KKyAgICBzaXplX3QgY29uc3VtZWQo
KSBjb25zdCB7IHJldHVybiBtX2NvbnN1bWVkOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9k
dWNlKCkKKyAgICB7CisgICAgICAgIG1fbG93ZXJRdWV1ZS5yZWdpc3Rlcldvcmtlcih0aGlzKTsK
KworICAgICAgICBwcm9kdWNlUXVldWUoKS5kaXNwYXRjaChbdGhpc10geworICAgICAgICAgICAg
Q1N0cmluZyBsb3dlcjsKKyAgICAgICAgICAgIHdoaWxlIChtX2xvd2VyUXVldWUuZGVxdWV1ZShs
b3dlcikpIHsKKyAgICAgICAgICAgICAgICBtX3VwcGVyUXVldWUuZW5xdWV1ZSh0b1VwcGVyKGxv
d2VyKSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUobG93ZXIgPT0gdGV4dEl0ZW0obV9w
cm9kdWNlZCsrKSk7CisgICAgICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9y
KHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1fbG93ZXJRdWV1ZS51bnJlZ2lzdGVyV29ya2VyKHRoaXMpOworICAgICAgICB9KTsKKyAg
ICB9CisKKyAgICB2b2lkIGNvbnN1bWUoKQorICAgIHsKKyAgICAgICAgbV91cHBlclF1ZXVlLnJl
Z2lzdGVyV29ya2VyKHRoaXMpOworICAgICAgICAKKyAgICAgICAgY29uc3VtZVF1ZXVlKCkuZGlz
cGF0Y2goW3RoaXNdIHsKKyAgICAgICAgICAgIENTdHJpbmcgdXBwZXI7CisgICAgICAgICAgICB3
aGlsZSAobV91cHBlclF1ZXVlLmRlcXVldWUodXBwZXIpKSB7CisgICAgICAgICAgICAgICAgRVhQ
RUNUX1RSVUUodXBwZXIgPT0gdG9VcHBlcih0ZXh0SXRlbShtX2NvbnN1bWVkKyspKSk7CisgICAg
ICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMoNTApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fdXBwZXJRdWV1ZS51
bnJlZ2lzdGVyV29ya2VyKHRoaXMpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBTeW5jaHJv
bml6ZWRGaXhlZFF1ZXVlPENTdHJpbmcsIDRVPiBtX2xvd2VyUXVldWU7CisgICAgU3luY2hyb25p
emVkRml4ZWRRdWV1ZTxDU3RyaW5nLCA0VT4gbV91cHBlclF1ZXVlOworICAgIHNpemVfdCBtX3By
b2R1Y2VkIHsgMCB9OworICAgIHNpemVfdCBtX2NvbnN1bWVkIHsgMCB9OworfTsKKworVEVTVChX
VEZfU3luY2hyb25pemVkRml4ZWRRdWV1ZSwgQmFzaWMpCit7CisgICAgVG9VcHBlckNvbnZlcnRl
ciBjb252ZXJ0ZXI7CisKKyAgICBjb252ZXJ0ZXIuc3RhcnQoKTsKKyAgICBFWFBFQ1RfVFJVRShj
b252ZXJ0ZXIuaXNQcm9kdWNpbmcoKSAmJiBjb252ZXJ0ZXIuaXNDb25zdW1pbmcoKSk7CisKKyAg
ICBjb252ZXJ0ZXIuc3RvcCgpOworICAgIEVYUEVDVF9GQUxTRShjb252ZXJ0ZXIuaXNQcm9kdWNp
bmcoKSB8fCBjb252ZXJ0ZXIuaXNDb25zdW1pbmcoKSk7CisKKyAgICBFWFBFQ1RfRVEoY29udmVy
dGVyLnByb2R1Y2VkKCksIDBVKTsKKyAgICBFWFBFQ1RfRVEoY29udmVydGVyLmNvbnN1bWVkKCks
IDBVKTsKK30KKworVEVTVChXVEZfU3luY2hyb25pemVkRml4ZWRRdWV1ZSwgUHJvZHVjZU9ubHkp
Cit7CisgICAgVG9VcHBlckNvbnZlcnRlciBjb252ZXJ0ZXI7CisgICAgCisgICAgY29udmVydGVy
LnN0YXJ0UHJvZHVjaW5nKCk7CisgICAgRVhQRUNUX1RSVUUoY29udmVydGVyLmlzUHJvZHVjaW5n
KCkgJiYgIWNvbnZlcnRlci5pc0NvbnN1bWluZygpKTsKKworICAgIHNpemVfdCBjb3VudCA9IDA7
CisgICAgd2hpbGUgKGNoYXIgY29uc3QqIGl0ZW0gPSB0ZXh0SXRlbShjb3VudCkpIHsKKyAgICAg
ICAgY29udmVydGVyLmVucXVldWUoaXRlbSk7CisgICAgICAgICsrY291bnQ7CisgICAgICAgIAor
ICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3Ioc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcygxKSk7CisgICAgfQorCisgICAgY29udmVydGVyLnN0b3AoKTsKKyAgICBFWFBFQ1RfRkFM
U0UoY29udmVydGVyLmlzUHJvZHVjaW5nKCkgfHwgY29udmVydGVyLmlzQ29uc3VtaW5nKCkpOwor
fQorCitURVNUKFdURl9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLCBDb25zdW1lT25seSkKK3sKKyAg
ICBUb1VwcGVyQ29udmVydGVyIGNvbnZlcnRlcjsKKyAgICAKKyAgICBjb252ZXJ0ZXIuc3RhcnRD
b25zdW1pbmcoKTsKKyAgICBFWFBFQ1RfVFJVRSghY29udmVydGVyLmlzUHJvZHVjaW5nKCkgJiYg
Y29udmVydGVyLmlzQ29uc3VtaW5nKCkpOworICAgIAorICAgIGNvbnZlcnRlci5zdG9wKCk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGNvbnZlcnRlci5pc1Byb2R1Y2luZygpIHx8IGNvbnZlcnRlci5pc0Nv
bnN1bWluZygpKTsKK30KKworVEVTVChXVEZfU3luY2hyb25pemVkRml4ZWRRdWV1ZSwgTGltaXRz
KQoreworICAgIFRvVXBwZXJDb252ZXJ0ZXIgY29udmVydGVyOworCisgICAgY29udmVydGVyLnN0
YXJ0KCk7CisgICAgRVhQRUNUX1RSVUUoY29udmVydGVyLmlzUHJvZHVjaW5nKCkgJiYgY29udmVy
dGVyLmlzQ29uc3VtaW5nKCkpOworCisgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICB3aGlsZSAo
Y2hhciBjb25zdCogaXRlbSA9IHRleHRJdGVtKGNvdW50KSkgeworICAgICAgICBjb252ZXJ0ZXIu
ZW5xdWV1ZShpdGVtKTsKKyAgICAgICAgKytjb3VudDsKKworICAgICAgICBzdGQ6OnRoaXNfdGhy
ZWFkOjpzbGVlcF9mb3Ioc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygxKSk7CisgICAgfQorCisg
ICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMo
NDAwKSk7CisKKyAgICBjb252ZXJ0ZXIuc3RvcCgpOworICAgIEVYUEVDVF9GQUxTRShjb252ZXJ0
ZXIuaXNQcm9kdWNpbmcoKSB8fCBjb252ZXJ0ZXIuaXNDb25zdW1pbmcoKSk7CisgICAgCisgICAg
RVhQRUNUX0VRKGNvbnZlcnRlci5wcm9kdWNlZCgpLCBjb3VudCk7CisgICAgRVhQRUNUX0VRKGNv
bnZlcnRlci5jb25zdW1lZCgpLCBjb3VudCk7Cit9CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290944</attachid>
            <date>2016-10-07 10:51:08 -0700</date>
            <delta_ts>2016-10-11 11:39:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162478-20161007104753.patch</filename>
            <type>text/plain</type>
            <size>22722</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDY5MTIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTEwLTA3ICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFN5bmNocm9uaXplZEZpeGVk
UXVldWUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjQ3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNpbXBsZSBwcm9kdWNlci9jb25zdW1lciB3b3Jr
ZXIuIEl0IGZhY2lsaXRhdGVzCisgICAgICAgIHN5bmNocm9uaXppbmcgZW5xdWV1aW5nIHRvIGFu
ZCBkZXF1ZXVpbmcgZnJvbSBhIGZpeGVkIHNpemUtcXVldWUuIEl0IHVzZXMKKyAgICAgICAgYSBz
aW5nbGUgbG9jayBhbmQgYSBzaW5nbGUgY29uZGl0aW9uIHRvIHN5bmNocm9uaXplIGFsbCBpdHMg
bWVtYmVycyBhbW9uZworICAgICAgICB0aGUgd29ya2luZyB0aHJlYWRzLiBUaGlzIG1lYW5zIGEg
c2luZ2xlIHRocmVhZCBpcyBhY3RpdmUgYXQgYW55IHRpbWUgYW5kCisgICAgICAgIGFuZCB0aGUg
b3RoZXIgdGhyZWFkcyBhcmUgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGUgbG9jayB0byBiZSByZWxl
YXNlZC4gT3IKKyAgICAgICAgdGhleSBhcmUgc2xlZXBpbmcgd2FpdGluZyBmb3IgdGhlIGNvbmRp
dGlvbiB0byBiZSBzYXRpc2ZpZWQuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6U3luY2hyb25pemVkRml4ZWRR
dWV1ZSk6CisgICAgICAgIChXVEY6OlN5bmNocm9uaXplZEZpeGVkUXVldWU6Om9wZW4pOiBSZXN0
b3JlIHRoZSBxdWV1ZSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCisgICAgICAgIChXVEY6OlN5bmNo
cm9uaXplZEZpeGVkUXVldWU6OmNsb3NlKTogV2FrZSBhbGwgdGhlIHNsZWVwaW5nIHRocmVhZHMg
d2l0aCBhIGNsb3Npbmcgc3RhdGUuCisgICAgICAgIChXVEY6OlN5bmNocm9uaXplZEZpeGVkUXVl
dWU6OmlzT3Blbik6IERvZXMgdGhlIHF1ZXVlIGFjY2VwdCBuZXcgaXRlbXM/CisgICAgICAgIChX
VEY6OlN5bmNocm9uaXplZEZpeGVkUXVldWU6OmVucXVldWUpOiBFbnF1ZXVlIGFuIGl0ZW0gaW50
byB0aGUgcXVldWUuCisgICAgICAgIChXVEY6OlN5bmNocm9uaXplZEZpeGVkUXVldWU6OmRlcXVl
dWUpOiBEZXF1ZXVlIGFuIGl0ZW0gZm9ybSB0aGUgcXVldWUuCisKIDIwMTYtMTAtMDYgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl1bRGlyZWN0MkRd
IEFkZCBEaXJlY3QyRCBDTWFrZSBydWxlcwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDY5MTIpCisrKyBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDcgQEAK
IAkJNTE1Rjc5NTYxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUY3OTU1MUNGRDNBNjkw
MENDRUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggKi87IH07CiAJCTUzOUVCMDYzMUQ1NTI4NDIw
MEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICov
OyB9OwogCQk1NTMwNzFDQTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTMwNzFDOTFDNDA0Mjcy
MDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi87IH07CisJCTU1OTdGODJGMUQ5NEI5OTcwMDY2
QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hy
b25pemVkRml4ZWRRdWV1ZS5oICovOyB9OwogCQk1QzdDODhENDFEMEEzQTBBMDA5RDJGNkQgLyog
VW5pcXVlUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1QzdDODhEMzFEMEEzQTBBMDA5RDJGNkQgLyogVW5pcXVlUmVmLmggKi87IH07CiAJCTcwQTk5
M0ZFMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEE5OTNGQzFBRDcxNTEzMDBGQTYxNUIg
LyogU3ltYm9sUmVnaXN0cnkuY3BwICovOyB9OwogCQk3MEE5OTNGRjFBRDcxNTEzMDBGQTYxNUIg
LyogU3ltYm9sUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcwQTk5M0ZEMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5oICov
OyB9OwpAQCAtNDYzLDYgKzQ2NCw3IEBACiAJCTUxNUY3OTU1MUNGRDNBNjkwMENDRUQ5MyAvKiBD
cm9zc1RocmVhZFF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyb3Nz
VGhyZWFkUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwNjIxRDU1
Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTEVCRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFD
OTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCNDMzODNBNUQwQjQ2M0M5NDMzRDkzMyAv
KiBJbmRleE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleE1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzdDODhEMzFEMEEzQTBBMDA5RDJGNkQg
LyogVW5pcXVlUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaXF1ZVJl
Zi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDI0N0I2MjE0Njg5Qjg2MDBFNzhC
NzYgLyogbGliV1RGLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYldURi5hOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTAyMyw2ICsxMDI1LDcgQEAK
IAkJCQlBNzQ4NzQ1MTE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0Lmgg
Ki8sCiAJCQkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNw
cCAqLywKIAkJCQkwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0u
aCAqLywKKwkJCQk1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5oICovLAogCQkJCTBGQjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5n
LmggKi8sCiAJCQkJQThBNDczMUExNTFBODI1QjAwNDEyM0ZGIC8qIFRlbXBvcmFyeUNoYW5nZS5o
ICovLAogCQkJCUE4QTQ3MzJGMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5jdGlvbkludm9j
YXRpb24uaCAqLywKQEAgLTE0MDcsNiArMTQxMCw3IEBACiAJCQkJQzRGOEE5MzcxOUM2NUVCNDAw
QjJCMTVEIC8qIFN0b3B3YXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2QkI3NjkxNjJGMzAw
NTAwREQxNkRCIC8qIFN0cmVhbUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0Ix
NTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU5
N0Y4MkYxRDk0Qjk5NzAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDNEMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0MzBCNDc4OTFBQUFBQzFBMDAxMjIzREEgLyogU3RyaW5nQ29t
bW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzRTE1MUE4MjVCMDA0MTIzRkYgLyogU3Ry
aW5nQ29uY2F0ZW5hdGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvU3lu
Y2hyb25pemVkRml4ZWRRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N5bmNo
cm9uaXplZEZpeGVkUXVldWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TeW5j
aHJvbml6ZWRGaXhlZFF1ZXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrZXIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBCdWZmZXJTaXplPgorY2xhc3MgU3luY2hyb25pemVkRml4ZWRRdWV1ZSB7CitwdWJs
aWM6CisgICAgU3luY2hyb25pemVkRml4ZWRRdWV1ZSgpCisgICAgeworICAgICAgICBzdGF0aWNf
YXNzZXJ0KCEoKEJ1ZmZlclNpemUgLSAxKSAmIEJ1ZmZlclNpemUpLCAiQnVmZmVyU2l6ZSBtdXN0
IGJlIHBvd2VyIG9mIDIuIik7CisgICAgfQorICAgIAorICAgIHZvaWQgb3BlbigpCisgICAgewor
ICAgICAgICBpZiAoaXNPcGVuKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICAvLyBSZXN0b3JlIHRoZSBxdWV1ZSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCisgICAgICAg
IG1fcXVldWUuY2xlYXIoKTsKKyAgICAgICAgbV9vcGVuID0gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjbG9zZSgpCisgICAgeworICAgICAgICBpZiAoIWlzT3BlbigpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKwor
ICAgICAgICAvLyBXYWtlIGFsbCB0aGUgc2xlZXBpbmcgdGhyZWFkcyB1cCB3aXRoIGEgY2xvc2lu
ZyBzdGF0ZS4KKyAgICAgICAgbV9vcGVuID0gZmFsc2U7CisgICAgICAgIG1fY29uZGl0aW9uLm5v
dGlmeUFsbCgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzT3BlbigpCisgICAgeworICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIHJldHVybiBtX29wZW47
CisgICAgfQorCisgICAgYm9vbCBlbnF1ZXVlKGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgTG9ja0hvbGRlciBsb2NrSG9sZGVyKG1fbXV0ZXgpOworCisgICAgICAgIC8vIFdhaXQgZm9y
IGFuIGVtcHR5IHBsYWNlIHRvIGJlIGF2YWlsYWJsZSBpbiB0aGUgcXVldWUuCisgICAgICAgIG1f
Y29uZGl0aW9uLndhaXQobV9tdXRleCwgW3RoaXNdKCkgeyByZXR1cm4gIW1fb3BlbiB8fCBtX3F1
ZXVlLnNpemUoKSA8IEJ1ZmZlclNpemU7IH0pOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIHF1
ZXVlIGlzIGNsb3NpbmcsIGV4aXQgaW1tZWRpYXRlbHkuCisgICAgICAgIGlmICghbV9vcGVuKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gQWRkIHRoZSBp
dGVtIGluIHRoZSBxdWV1ZS4KKyAgICAgICAgbV9xdWV1ZS5hcHBlbmQodmFsdWUpOworCisgICAg
ICAgIC8vIE5vdGlmeSB0aGUgb3RoZXIgdGhyZWFkcyB0aGF0IGFuIGl0ZW0gd2FzIGFkZGVkIHRv
IHRoZSBxdWV1ZS4KKyAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGRlcXVldWUoVCYgdmFsdWUpCisgICAg
eworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIAorICAg
ICAgICAvLyBXYWl0IGZvciBhbiBpdGVtIHRvIGJlIGFkZGVkLgorICAgICAgICBtX2NvbmRpdGlv
bi53YWl0KG1fbXV0ZXgsIFt0aGlzXSgpIHsgcmV0dXJuICFtX29wZW4gfHwgbV9xdWV1ZS5zaXpl
KCk7IH0pOworCisgICAgICAgIC8vIFRoZSBxdWV1ZSBpcyBjbG9zaW5nLCBleGl0IGltbWVkaWF0
ZWx5LgorICAgICAgICBpZiAoIW1fb3BlbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAvLyBHZXQgYSBjb3B5IGZyb20gbV9xdWV1ZS5maXJzdCBhbmQgdGhlbiByZW1vdmUg
aXQuCisgICAgICAgIHZhbHVlID0gbV9xdWV1ZS5maXJzdCgpOworICAgICAgICBtX3F1ZXVlLnJl
bW92ZUZpcnN0KCk7CisKKyAgICAgICAgLy8gTm90aWZ5IHRoZSBvdGhlciB0aHJlYWRzIHRoYXQg
YW4gaXRlbSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZS4KKyAgICAgICAgbV9jb25kaXRpb24u
bm90aWZ5QWxsKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBMb2NrIG1fbXV0ZXg7CisgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworCisgICAgYm9vbCBt
X29wZW4geyB0cnVlIH07CisgICAgRGVxdWU8VCwgQnVmZmVyU2l6ZT4gbV9xdWV1ZTsKK307CisK
K30KKwordXNpbmcgV1RGOjpTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlOwpJbmRleDogVG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2OTEyKQor
KysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTYt
MTAtMDcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgU3luY2hyb25pemVkRml4ZWRRdWV1ZSBjbGFzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNDc4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IHRlc3QgZm9yIFN5bmNocm9u
aXplZEZpeGVkUXVldWUuIFRoZSB0ZXN0IGRlZmluZXMgYSBuZXcgY2xhc3MKKyAgICAgICAgY2Fs
bGVkIFRvVXBwZXJDb252ZXJ0ZXIgd2hpY2ggY29udmVydHMgc3RyaW5ncyBmcm9tIGxvd2VyIGNh
c2UgdG8gdXBwZXIKKyAgICAgICAgY2FzZS4gSXQgY3JlYXRlcyB0d28gdGhyZWFkcyA6ICgxKSBw
cm9kdWNlIHRocmVhZCBhbmQgKDIpIGNvbnN1bWUgdGhyZWFkLgorICAgICAgICBIZXJlIGlzIHdo
YXQgZWFjaCB0aHJlYWQgZG9lczoKKworICAgICAgICAxLiBNYWluIHRocmVhZHM6IEVucXVldWVz
IGxvd2VyIGNhc2Ugc3RyaW5ncyBpbnRvIG1fbG93ZXJRdWV1ZS4KKyAgICAgICAgMi4gUHJvZHVj
ZSB0aHJlYWQ6IERlcXVldWVzIGxvd2VyIGNhc2Ugc3RyaW5ncyBmcm9tIG1fbG93ZXJRdWV1ZSBh
bmQgCisgICAgICAgICAgIGVucXVldWUgdGhlaXIgdXBwZXIgY2FzZSBzdHJpbmdzIGluIHRoZSBt
X3VwcGVyUXVldWUuCisgICAgICAgIDMuIENvbnN1bWUgdGhyZWFkOiBEZXF1ZXVlcyB1cHBlciBj
YXNlIHN0cmluZ3MgZnJvbSBtX3VwcGVyUXVldWUuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcDogQWRkZWQuCisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXh0SXRlbSk6IEEgaGVscGVyIGZ1bmN0aW9uIHdoaWNo
IHJldHVybnMgYSBsb3dlciBjYXNlIHN0cmluZyBnaXZlbiBhbiBpbmRleC4KKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OnRvVXBwZXIpOiBBIGhlbHBlciBmdW5jdGlvbiB3aGljaCBSZXR1cm5zIHRo
ZSB1cHBlciBjYXNlIG9mIGEgc3RyaW5nLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBl
ckNvbnZlcnRlcjo6VG9VcHBlckNvbnZlcnRlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
b1VwcGVyQ29udmVydGVyOjpwcm9kdWNlUXVldWUpOiBSZXR1cm5zIGEgd29ya1F1ZXVlIGZvciB0
aGUgcHJvZHVjZSB0aHJlYWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVy
dGVyOjpjb25zdW1lUXVldWUpOiBSZXR1cm5zIGEgd29ya1F1ZXVlIGZvciB0aGUgY29uc3VtZSB0
aHJlYWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpzdGFydFBy
b2R1Y2luZyk6IENyZWF0ZXMgYSB0aHJlYWQgZm9yIHRoZSBwcm9kdWNlci4KKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnN0YXJ0Q29uc3VtaW5nKTogQ3JlYXRlcyBh
IHRocmVhZCBmb3IgdGhlIGNvbnN1bWVyLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBl
ckNvbnZlcnRlcjo6c3RhcnQpOiBTdGFydHMgYm90aCB0aGUgcHJvZHVjZXIgYW5kIHRoZSBjb25z
dW1lciB0aHJlYWRzLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6
c3RvcFByb2R1Y2luZyk6IFRlcm1pbmF0ZXMgdGhlIHByb2R1Y2VyIHRocmVhZC4KKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnN0b3BDb25zdW1pbmcpOiBUZXJtaW5h
dGVzIHRoZSBjb25zdW1lciB0aHJlYWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVy
Q29udmVydGVyOjpzdG9wKTogVGVybWluYXRlcyBib3RoIHRoZSBwcm9kdWNlciBhbmQgdGhlIGNv
bnN1bWVyIHRocmVhZHMuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVy
OjplbnF1ZXVlTG93ZXIpOiBBZGRzIGEgbG93ZXIgY2FzZSBzdHJpbmcgdG8gdGhlIG1fbG93ZXJR
dWV1ZSBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVy
Q29udmVydGVyOjppc1Byb2R1Y2luZyk6IFJldHVybnMgd2hldGhlciB0aGUgcHJvZHVjaW5nIHRo
cmVhZCBpcyBhY3RpdmUuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVy
Ojppc0NvbnN1bWluZyk6IFJldHVybnMgd2hldGhlciB0aGUgY29uc3VtaW5nIHRocmVhZCBpcyBh
Y3RpdmUuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpwcm9kdWNl
Q291bnQpOiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcHJvZHVjZWQgZWxlbWVudHMuCisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpjb25zdW1lQ291bnQpOiBSZXR1cm5z
IHRoZSBudW1iZXIgb2YgY29uc3VtZWQgZWxlbWVudHMuCisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKwogMjAxNi0xMC0wNyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CiAKICAgICAgICAgU3R5bGUgQ2hlY2tpbmcgRXJyb3Igd2hlbiBPYmplY3RpdmUgQyBCbG9j
a3MgcGFzc2VkIGFzIEFyZ3VtZW50CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA2OTEyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsNyBAQAogCQk1
MkU1Q0U0OTE0RDIxRUFCMDAzQjJCRDggLyogUGFyZW50RnJhbWVfQnVuZGxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRTVDRTQ4MTREMjFFQUIw
MDNCMkJEOCAvKiBQYXJlbnRGcmFtZV9CdW5kbGUuY3BwICovOyB9OwogCQk1MzY3NzAzNDFDQzgw
MjI4MDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24ubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzY3NzAzMzFDQzgwMjI4MDBENDI1
QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24ubW0gKi87IH07CiAJCTUzNjc3MDM2MUND
ODFCNjEwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1sIGluIENvcHkg
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNjc3MDM1MUND
ODEyRjkwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1sICovOyB9Owor
CQk1NTk3RjgzNjFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTk3RjgzNDFE
OTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgKi87IH07CiAJCTU3
MTRFQ0I5MUNBOEI1QjAwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1s
IGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
MTRFQ0I4MUNBOEI1ODgwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1s
ICovOyB9OwogCQk1NzE0RUNCQjFDQThCRkU0MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3Jp
Z2luYWxVUkxGcmFtZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0JBMUNBOEJGRDEwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVl
c3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgKi87IH07CiAJCTU3MTRFQ0JEMUNBOEMyMkEwMDA1MUFD
OCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTDIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzE0RUNCQzFDQThDMjE4MDAwNTFB
QzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwyLmh0bWwgKi87IH07CkBAIC05MTIsNiAr
OTEzLDcgQEAKIAkJNTJFNUNFNDgxNEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVudEZyYW1lX0J1bmRs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJlbnRGcmFtZV9C
dW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzY3NzAzMzFDQzgwMjI4
MDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24ubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8q
IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBh
dGggPSBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJvbml6
ZWRGaXhlZFF1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcxNEVDQjgx
Q0E4QjU4ODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzE0RUNCQTFDQThCRkQxMDAwNTFBQzggLyog
RG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1s
OyBwYXRoID0gRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1NzE0RUNCQzFDQThDMjE4MDAwNTFBQzggLyogRG93bmxvYWRS
ZXF1ZXN0T3JpZ2luYWxVUkwyLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBEb3du
bG9hZFJlcXVlc3RPcmlnaW5hbFVSTDIuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE3ODYsNiArMTc4OCw3IEBACiAJCQkJMjZGMUI0NDMxNUNBNDM0RjAwRDFFNEJGIC8qIFN0
cmluZ0ltcGwuY3BwICovLAogCQkJCUMwMTM2M0M3MTNDMzk5NzMwMEVGMzk2NCAvKiBTdHJpbmdP
cGVyYXRvcnMuY3BwICovLAogCQkJCTdDNzRENDJEMTg4MjI4RjMwMEU1RUQ1NyAvKiBTdHJpbmdW
aWV3LmNwcCAqLywKKwkJCQk1NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVk
Rml4ZWRRdWV1ZS5jcHAgKi8sCiAJCQkJMEJDRDg1NjkxNDg1Qzk4QjAwRUEyMDAzIC8qIFRlbXBv
cmFyeUNoYW5nZS5jcHAgKi8sCiAJCQkJNUM1RTYzM0QxRDBCNjc5NDAwODVBMDI1IC8qIFVuaXF1
ZVJlZi5jcHAgKi8sCiAJCQkJN0NEMEQ1QUExRDU1MzRERTAwMENDOUUxIC8qIFZhcmlhbnQuY3Bw
ICovLApAQCAtMjI3OSw2ICsyMjgyLDcgQEAKIAkJCQk3QzgzREYzNjFEMEE1OTBDMDBGRUJDRjMg
LyogU3RyaW5nSGFzaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjM3MUQwQTU5MEMw
MEZFQkNGMyAvKiBTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjM4MUQw
QTU5MEMwMEZFQkNGMyAvKiBTdHJpbmdPcGVyYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTU5N0Y4MzYxRDk1OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGM0ExRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmluZ1ZpZXcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGM0QxRDBBNTkwQzAwRkVCQ0YzIC8qIFRlbXBv
cmFyeUNoYW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREY0MDFEMEE1OTBDMDBGRUJD
RjMgLyogVGVzdHNDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1
ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3lu
Y2hyb25pemVkRml4ZWRRdWV1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxjaHJvbm8+Cisj
aW5jbHVkZSA8dGhyZWFkPgorCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRl
IDx3dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMv
QmluYXJ5U2VtYXBob3JlLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGlj
IGNoYXIgY29uc3QqIHRleHRJdGVtKHNpemVfdCBpbmRleCkKK3sKKyAgICBzdGF0aWMgY2hhciBj
b25zdCogaXRlbXNbXSA9IHsgImZpcnN0IiwgInNlY29uZCIsICJ0aGlyZCIsICJmb3VydGgiLCAi
ZmlmdGgiLCAic2l4dGgiIH07CisgICAgcmV0dXJuIGluZGV4IDwgc2l6ZW9mKGl0ZW1zKSAvIHNp
emVvZihpdGVtc1swXSkgPyBpdGVtc1tpbmRleF0gOiBudWxscHRyOworfQorCitzdGF0aWMgQ1N0
cmluZyB0b1VwcGVyKGNvbnN0IENTdHJpbmcmIGxvd2VyKQoreworICAgIENTdHJpbmcgdXBwZXIg
PSBsb3dlcjsKKworICAgIGZvciAoY2hhciogYnVmZmVyID0gdXBwZXIubXV0YWJsZURhdGEoKTsg
KmJ1ZmZlcjsgKytidWZmZXIpCisgICAgICAgICpidWZmZXIgPSB0b0FTQ0lJVXBwZXIoKmJ1ZmZl
cik7CisKKyAgICByZXR1cm4gdXBwZXI7Cit9CisKK3RlbXBsYXRlIDxzaXplX3QgQnVmZmVyU2l6
ZT4KK2NsYXNzIFRvVXBwZXJDb252ZXJ0ZXIgeworcHVibGljOgorICAgIFRvVXBwZXJDb252ZXJ0
ZXIoKQorICAgIHsKKyAgICB9CisKKyAgICBXb3JrUXVldWUqIHByb2R1Y2VRdWV1ZSgpCisgICAg
eworICAgICAgICBpZiAoIW1fcHJvZHVjZVF1ZXVlKQorICAgICAgICAgICAgbV9wcm9kdWNlUXVl
dWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgib3JnLndlYmtpdC5Qcm9kdWNlIik7CisgICAgICAgIHJl
dHVybiBtX3Byb2R1Y2VRdWV1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBXb3JrUXVldWUqIGNvbnN1
bWVRdWV1ZSgpCisgICAgeworICAgICAgICBpZiAoIW1fY29uc3VtZVF1ZXVlKQorICAgICAgICAg
ICAgbV9jb25zdW1lUXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgib3JnLndlYmtpdC5Db25zdW1l
Iik7CisgICAgICAgIHJldHVybiBtX2NvbnN1bWVRdWV1ZS5nZXQoKTsKKyAgICB9CisKKyAgICB2
b2lkIHN0YXJ0UHJvZHVjaW5nKCkKKyAgICB7CisgICAgICAgIGlmIChpc1Byb2R1Y2luZygpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHByb2R1Y2VRdWV1ZSgpLT5kaXNwYXRjaChb
dGhpc10geworICAgICAgICAgICAgQ1N0cmluZyBsb3dlcjsKKyAgICAgICAgICAgIHdoaWxlICht
X2xvd2VyUXVldWUuZGVxdWV1ZShsb3dlcikpIHsKKyAgICAgICAgICAgICAgICBtX3VwcGVyUXVl
dWUuZW5xdWV1ZSh0b1VwcGVyKGxvd2VyKSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUo
bG93ZXIgPT0gdGV4dEl0ZW0obV9wcm9kdWNlQ291bnQrKykpOworICAgICAgICAgICAgICAgIHN0
ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2ZvcihzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3Byb2R1Y2VDbG9zZVNlbWFwaG9yZS5zaWdu
YWwoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgdm9pZCBzdGFydENvbnN1bWluZygpCisg
ICAgeworICAgICAgICBpZiAoaXNDb25zdW1pbmcoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBjb25zdW1lUXVldWUoKS0+ZGlzcGF0Y2goW3RoaXNdIHsKKyAgICAgICAgICAgIENT
dHJpbmcgdXBwZXI7CisgICAgICAgICAgICB3aGlsZSAobV91cHBlclF1ZXVlLmRlcXVldWUodXBw
ZXIpKSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUodXBwZXIgPT0gdG9VcHBlcih0ZXh0
SXRlbShtX2NvbnN1bWVDb3VudCsrKSkpOworICAgICAgICAgICAgICAgIHN0ZDo6dGhpc190aHJl
YWQ6OnNsZWVwX2ZvcihzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUwKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBtX2NvbnN1bWVDbG9zZVNlbWFwaG9yZS5zaWduYWwoKTsKKyAgICAg
ICAgfSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RhcnQoKQorICAgIHsKKyAgICAgICAgc3Rh
cnRQcm9kdWNpbmcoKTsKKyAgICAgICAgc3RhcnRDb25zdW1pbmcoKTsKKyAgICB9CisKKyAgICB2
b2lkIHN0b3BQcm9kdWNpbmcoKQorICAgIHsKKyAgICAgICAgaWYgKCFpc1Byb2R1Y2luZygpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fbG93ZXJRdWV1ZS5jbG9zZSgpOworICAg
ICAgICBtX3Byb2R1Y2VDbG9zZVNlbWFwaG9yZS53YWl0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6bWF4KCkpOworICAgICAgICBtX3Byb2R1Y2VRdWV1ZSA9IG51bGxwdHI7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc3RvcENvbnN1bWluZygpCisgICAgeworICAgICAgICBpZiAoIWlzQ29u
c3VtaW5nKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV91cHBlclF1ZXVlLmNs
b3NlKCk7CisgICAgICAgIG1fY29uc3VtZUNsb3NlU2VtYXBob3JlLndhaXQoc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisgICAgICAgIG1fY29uc3VtZVF1ZXVlID0gbnVsbHB0
cjsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9wKCkKKyAgICB7CisgICAgICAgIHN0b3BQcm9k
dWNpbmcoKTsKKyAgICAgICAgc3RvcENvbnN1bWluZygpOworICAgIH0KKworICAgIHZvaWQgZW5x
dWV1ZUxvd2VyKGNvbnN0IENTdHJpbmcmIGxvd2VyKQorICAgIHsKKyAgICAgICAgbV9sb3dlclF1
ZXVlLmVucXVldWUobG93ZXIpOworICAgIH0KKworICAgIGJvb2wgaXNQcm9kdWNpbmcoKSB7IHJl
dHVybiBtX3Byb2R1Y2VRdWV1ZTsgfQorICAgIGJvb2wgaXNDb25zdW1pbmcoKSB7IHJldHVybiBt
X2NvbnN1bWVRdWV1ZTsgfQorCisgICAgc2l6ZV90IHByb2R1Y2VDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvZHVjZUNvdW50OyB9CisgICAgc2l6ZV90IGNvbnN1bWVDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3VtZUNvdW50OyB9CisKK3ByaXZhdGU6CisgICAgU3luY2hyb25pemVkRml4
ZWRRdWV1ZTxDU3RyaW5nLCBCdWZmZXJTaXplPiBtX2xvd2VyUXVldWU7CisgICAgU3luY2hyb25p
emVkRml4ZWRRdWV1ZTxDU3RyaW5nLCBCdWZmZXJTaXplPiBtX3VwcGVyUXVldWU7CisgICAgUmVm
UHRyPFdvcmtRdWV1ZT4gbV9wcm9kdWNlUXVldWU7CisgICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV9j
b25zdW1lUXVldWU7CisgICAgQmluYXJ5U2VtYXBob3JlIG1fcHJvZHVjZUNsb3NlU2VtYXBob3Jl
OworICAgIEJpbmFyeVNlbWFwaG9yZSBtX2NvbnN1bWVDbG9zZVNlbWFwaG9yZTsKKyAgICBzaXpl
X3QgbV9wcm9kdWNlQ291bnQgeyAwIH07CisgICAgc2l6ZV90IG1fY29uc3VtZUNvdW50IHsgMCB9
OworfTsKKworVEVTVChXVEZfU3luY2hyb25pemVkRml4ZWRRdWV1ZSwgQmFzaWMpCit7CisgICAg
VG9VcHBlckNvbnZlcnRlcjw0VT4gY29udmVydGVyOworCisgICAgY29udmVydGVyLnN0YXJ0KCk7
CisgICAgRVhQRUNUX1RSVUUoY29udmVydGVyLmlzUHJvZHVjaW5nKCkgJiYgY29udmVydGVyLmlz
Q29uc3VtaW5nKCkpOworCisgICAgY29udmVydGVyLnN0b3AoKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y29udmVydGVyLmlzUHJvZHVjaW5nKCkgfHwgY29udmVydGVyLmlzQ29uc3VtaW5nKCkpOworCisg
ICAgRVhQRUNUX0VRKGNvbnZlcnRlci5wcm9kdWNlQ291bnQoKSwgMFUpOworICAgIEVYUEVDVF9F
UShjb252ZXJ0ZXIuY29uc3VtZUNvdW50KCksIDBVKTsKK30KKworVEVTVChXVEZfU3luY2hyb25p
emVkRml4ZWRRdWV1ZSwgUHJvZHVjZU9ubHkpCit7CisgICAgVG9VcHBlckNvbnZlcnRlcjw0VT4g
Y29udmVydGVyOworICAgIAorICAgIGNvbnZlcnRlci5zdGFydFByb2R1Y2luZygpOworICAgIEVY
UEVDVF9UUlVFKGNvbnZlcnRlci5pc1Byb2R1Y2luZygpICYmICFjb252ZXJ0ZXIuaXNDb25zdW1p
bmcoKSk7CisKKyAgICBzaXplX3QgY291bnQgPSAwOworICAgIHdoaWxlIChjaGFyIGNvbnN0KiBp
dGVtID0gdGV4dEl0ZW0oY291bnQpKSB7CisgICAgICAgIGNvbnZlcnRlci5lbnF1ZXVlTG93ZXIo
aXRlbSk7CisgICAgICAgICsrY291bnQ7CisgICAgICAgIAorICAgICAgICBzdGQ6OnRoaXNfdGhy
ZWFkOjpzbGVlcF9mb3Ioc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygxKSk7CisgICAgfQorCisg
ICAgY29udmVydGVyLnN0b3AoKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udmVydGVyLmlzUHJvZHVj
aW5nKCkgfHwgY29udmVydGVyLmlzQ29uc3VtaW5nKCkpOworfQorCitURVNUKFdURl9TeW5jaHJv
bml6ZWRGaXhlZFF1ZXVlLCBDb25zdW1lT25seSkKK3sKKyAgICBUb1VwcGVyQ29udmVydGVyPDRV
PiBjb252ZXJ0ZXI7CisgICAgCisgICAgY29udmVydGVyLnN0YXJ0Q29uc3VtaW5nKCk7CisgICAg
RVhQRUNUX1RSVUUoIWNvbnZlcnRlci5pc1Byb2R1Y2luZygpICYmIGNvbnZlcnRlci5pc0NvbnN1
bWluZygpKTsKKyAgICAKKyAgICBjb252ZXJ0ZXIuc3RvcCgpOworICAgIEVYUEVDVF9GQUxTRShj
b252ZXJ0ZXIuaXNQcm9kdWNpbmcoKSB8fCBjb252ZXJ0ZXIuaXNDb25zdW1pbmcoKSk7Cit9CisK
K1RFU1QoV1RGX1N5bmNocm9uaXplZEZpeGVkUXVldWUsIExpbWl0cykKK3sKKyAgICBUb1VwcGVy
Q29udmVydGVyPDRVPiBjb252ZXJ0ZXI7CisKKyAgICBjb252ZXJ0ZXIuc3RhcnQoKTsKKyAgICBF
WFBFQ1RfVFJVRShjb252ZXJ0ZXIuaXNQcm9kdWNpbmcoKSAmJiBjb252ZXJ0ZXIuaXNDb25zdW1p
bmcoKSk7CisKKyAgICBzaXplX3QgY291bnQgPSAwOworICAgIHdoaWxlIChjaGFyIGNvbnN0KiBp
dGVtID0gdGV4dEl0ZW0oY291bnQpKSB7CisgICAgICAgIGNvbnZlcnRlci5lbnF1ZXVlTG93ZXIo
aXRlbSk7CisgICAgICAgICsrY291bnQ7CisKKyAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xl
ZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMSkpOworICAgIH0KKworICAgIHN0ZDo6
dGhpc190aHJlYWQ6OnNsZWVwX2ZvcihzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDQwMCkpOwor
CisgICAgY29udmVydGVyLnN0b3AoKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udmVydGVyLmlzUHJv
ZHVjaW5nKCkgfHwgY29udmVydGVyLmlzQ29uc3VtaW5nKCkpOworICAgIAorICAgIEVYUEVDVF9F
UShjb252ZXJ0ZXIucHJvZHVjZUNvdW50KCksIGNvdW50KTsKKyAgICBFWFBFQ1RfRVEoY29udmVy
dGVyLmNvbnN1bWVDb3VudCgpLCBjb3VudCk7Cit9CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291279</attachid>
            <date>2016-10-11 11:40:00 -0700</date>
            <delta_ts>2016-10-11 12:38:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162478-20161011113638.patch</filename>
            <type>text/plain</type>
            <size>22748</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDcxNTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTEwLTExICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFN5bmNocm9uaXplZEZpeGVk
UXVldWUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjQ3OAorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAg
ICAgIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNpbXBsZSBwcm9kdWNlci9jb25zdW1lciB3b3Jr
ZXIuIEl0IGZhY2lsaXRhdGVzCisgICAgICAgIHN5bmNocm9uaXppbmcgZW5xdWV1aW5nIHRvIGFu
ZCBkZXF1ZXVpbmcgZnJvbSBhIGZpeGVkIHNpemUtcXVldWUuIEl0IHVzZXMKKyAgICAgICAgYSBz
aW5nbGUgbG9jayBhbmQgYSBzaW5nbGUgY29uZGl0aW9uIHRvIHN5bmNocm9uaXplIGFsbCBpdHMg
bWVtYmVycyBhbW9uZworICAgICAgICB0aGUgd29ya2luZyB0aHJlYWRzLiBUaGlzIG1lYW5zIGEg
c2luZ2xlIHRocmVhZCBpcyBhY3RpdmUgYXQgYW55IHRpbWUgYW5kCisgICAgICAgIGFuZCB0aGUg
b3RoZXIgdGhyZWFkcyBhcmUgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGUgbG9jayB0byBiZSByZWxl
YXNlZC4gT3IKKyAgICAgICAgdGhleSBhcmUgc2xlZXBpbmcgd2FpdGluZyBmb3IgdGhlIGNvbmRp
dGlvbiB0byBiZSBzYXRpc2ZpZWQuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6U3luY2hyb25pemVkRml4ZWRRdWV1ZTo6U3luY2hyb25pemVkRml4ZWRR
dWV1ZSk6CisgICAgICAgIChXVEY6OlN5bmNocm9uaXplZEZpeGVkUXVldWU6Om9wZW4pOiBSZXN0
b3JlIHRoZSBxdWV1ZSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCisgICAgICAgIChXVEY6OlN5bmNo
cm9uaXplZEZpeGVkUXVldWU6OmNsb3NlKTogV2FrZSBhbGwgdGhlIHNsZWVwaW5nIHRocmVhZHMg
d2l0aCBhIGNsb3Npbmcgc3RhdGUuCisgICAgICAgIChXVEY6OlN5bmNocm9uaXplZEZpeGVkUXVl
dWU6OmlzT3Blbik6IERvZXMgdGhlIHF1ZXVlIGFjY2VwdCBuZXcgaXRlbXM/CisgICAgICAgIChX
VEY6OlN5bmNocm9uaXplZEZpeGVkUXVldWU6OmVucXVldWUpOiBFbnF1ZXVlIGFuIGl0ZW0gaW50
byB0aGUgcXVldWUuCisgICAgICAgIChXVEY6OlN5bmNocm9uaXplZEZpeGVkUXVldWU6OmRlcXVl
dWUpOiBEZXF1ZXVlIGFuIGl0ZW0gZm9ybSB0aGUgcXVldWUuCisKIDIwMTYtMTAtMTAgIFphbiBE
b2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEFkZCBFTkFCTEVfRU5D
UllQVEVEX01FRElBIGNvbmZpZ3VyYXRpb24gb3B0aW9uCkluZGV4OiBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNzE1MCkKKysrIFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsx
MTksNyBAQAogCQk1MTVGNzk1NjFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1Rjc5NTUx
Q0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCAqLzsgfTsKIAkJNTM5RUIwNjMx
RDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNv
ZGVyLmggKi87IH07CiAJCTU1MzA3MUNBMUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MzA3MUM5
MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLzsgfTsKKwkJNTU5N0Y4MkYxRDk0
Qjk5NzAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAv
KiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggKi87IH07CiAJCTVDN0M4OEQ0MUQwQTNBMEEwMDlE
MkY2RCAvKiBVbmlxdWVSZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDN0M4OEQzMUQwQTNBMEEwMDlEMkY2RCAvKiBVbmlxdWVSZWYuaCAqLzsgfTsK
IAkJNzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwQTk5M0ZDMUFENzE1MTMw
MEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgKi87IH07CiAJCTcwQTk5M0ZGMUFENzE1MTMw
MEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzBBOTkzRkQxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lz
dHJ5LmggKi87IH07CkBAIC00NjMsNiArNDY0LDcgQEAKIAkJNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NF
RDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ3Jvc3NUaHJlYWRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzlF
QjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMRUJEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueUxSVUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1
ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9uaXplZEZpeGVk
UXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI0MzM4M0E1RDBCNDYzQzk0
MzNEOTMzIC8qIEluZGV4TWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
ZGV4TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDN0M4OEQzMUQwQTNBMEEw
MDlEMkY2RCAvKiBVbmlxdWVSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VW5pcXVlUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEMjQ3QjYyMTQ2ODlC
ODYwMEU3OEI3NiAvKiBsaWJXVEYuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGli
V1RGLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xMDIzLDYgKzEw
MjUsNyBAQAogCQkJCUE3NDg3NDUxMTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENv
bnRleHQuaCAqLywKIAkJCQkwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRT
dHJlYW0uY3BwICovLAogCQkJCTBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmlu
dFN0cmVhbS5oICovLAorCQkJCTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6
ZWRGaXhlZFF1ZXVlLmggKi8sCiAJCQkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3Rl
bVRyYWNpbmcuaCAqLywKIAkJCQlBOEE0NzMxQTE1MUE4MjVCMDA0MTIzRkYgLyogVGVtcG9yYXJ5
Q2hhbmdlLmggKi8sCiAJCQkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0
aW9uSW52b2NhdGlvbi5oICovLApAQCAtMTQwNyw2ICsxNDEwLDcgQEAKIAkJCQlDNEY4QTkzNzE5
QzY1RUI0MDBCMkIxNUQgLyogU3RvcHdhdGNoLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTZCQjc2
OTE2MkYzMDA1MDBERDE2REIgLyogU3RyZWFtQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzQzQjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1NTk3RjgyRjFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0QxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0J1
aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzMEI0Nzg5MUFBQUFDMUEwMDEyMjNEQSAvKiBT
dHJpbmdDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNFMTUxQTgyNUIwMDQxMjNG
RiAvKiBTdHJpbmdDb25jYXRlbmF0ZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYv
d3RmL1N5bmNocm9uaXplZEZpeGVkUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Cisj
aW5jbHVkZSA8d3RmL0xvY2tlci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IEJ1ZmZlclNpemU+CitjbGFzcyBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVl
IHsKK3B1YmxpYzoKKyAgICBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlKCkKKyAgICB7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoISgoQnVmZmVyU2l6ZSAtIDEpICYgQnVmZmVyU2l6ZSksICJCdWZmZXJT
aXplIG11c3QgYmUgcG93ZXIgb2YgMi4iKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVuKCkK
KyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAg
aWYgKG1fb3BlbikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBSZXN0b3JlIHRo
ZSBxdWV1ZSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCisgICAgICAgIG1fb3BlbiA9IHRydWU7Cisg
ICAgICAgIG1fcXVldWUuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9zZSgpCisg
ICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIobV9tdXRleCk7CisgICAgICAgIGlm
ICghbV9vcGVuKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFdha2UgYWxsIHRo
ZSBzbGVlcGluZyB0aHJlYWRzIHVwIHdpdGggYSBjbG9zaW5nIHN0YXRlLgorICAgICAgICBtX29w
ZW4gPSBmYWxzZTsKKyAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNPcGVuKCkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja0hvbGRl
cihtX211dGV4KTsKKyAgICAgICAgcmV0dXJuIG1fb3BlbjsKKyAgICB9CisKKyAgICBib29sIGVu
cXVldWUoY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xk
ZXIobV9tdXRleCk7CisKKyAgICAgICAgLy8gV2FpdCBmb3IgYW4gZW1wdHkgcGxhY2UgdG8gYmUg
YXZhaWxhYmxlIGluIHRoZSBxdWV1ZS4KKyAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX211dGV4
LCBbdGhpc10oKSB7IHJldHVybiAhbV9vcGVuIHx8IG1fcXVldWUuc2l6ZSgpIDwgQnVmZmVyU2l6
ZTsgfSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgcXVldWUgaXMgY2xvc2luZywgZXhpdCBp
bW1lZGlhdGVseS4KKyAgICAgICAgaWYgKCFtX29wZW4pCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICAvLyBBZGQgdGhlIGl0ZW0gaW4gdGhlIHF1ZXVlLgorICAg
ICAgICBtX3F1ZXVlLmFwcGVuZCh2YWx1ZSk7CisKKyAgICAgICAgLy8gTm90aWZ5IHRoZSBvdGhl
ciB0aHJlYWRzIHRoYXQgYW4gaXRlbSB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVlLgorICAgICAgICBt
X2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIGJvb2wgZGVxdWV1ZShUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIg
bG9ja0hvbGRlcihtX211dGV4KTsKKyAgICAgICAgCisgICAgICAgIC8vIFdhaXQgZm9yIGFuIGl0
ZW0gdG8gYmUgYWRkZWQuCisgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9tdXRleCwgW3RoaXNd
KCkgeyByZXR1cm4gIW1fb3BlbiB8fCBtX3F1ZXVlLnNpemUoKTsgfSk7CisKKyAgICAgICAgLy8g
VGhlIHF1ZXVlIGlzIGNsb3NpbmcsIGV4aXQgaW1tZWRpYXRlbHkuCisgICAgICAgIGlmICghbV9v
cGVuKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIEdldCBhIGNvcHkg
ZnJvbSBtX3F1ZXVlLmZpcnN0IGFuZCB0aGVuIHJlbW92ZSBpdC4KKyAgICAgICAgdmFsdWUgPSBt
X3F1ZXVlLmZpcnN0KCk7CisgICAgICAgIG1fcXVldWUucmVtb3ZlRmlyc3QoKTsKKworICAgICAg
ICAvLyBOb3RpZnkgdGhlIG90aGVyIHRocmVhZHMgdGhhdCBhbiBpdGVtIHdhcyByZW1vdmVkIGZy
b20gdGhlIHF1ZXVlLgorICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIExvY2sgbV9tdXRleDsKKyAgICBD
b25kaXRpb24gbV9jb25kaXRpb247CisKKyAgICBib29sIG1fb3BlbiB7IHRydWUgfTsKKyAgICBE
ZXF1ZTxULCBCdWZmZXJTaXplPiBtX3F1ZXVlOworfTsKKworfQorCit1c2luZyBXVEY6OlN5bmNo
cm9uaXplZEZpeGVkUXVldWU7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDcxNTApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw0MCBAQAorMjAxNi0xMC0xMSAgU2FpZCBBYm91LUhhbGxh
d2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBTeW5jaHJvbml6ZWRG
aXhlZFF1ZXVlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI0NzgKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKwor
ICAgICAgICBBZGQgYSBuZXcgdGVzdCBmb3IgU3luY2hyb25pemVkRml4ZWRRdWV1ZS4gVGhlIHRl
c3QgZGVmaW5lcyBhIG5ldyBjbGFzcworICAgICAgICBjYWxsZWQgVG9VcHBlckNvbnZlcnRlciB3
aGljaCBjb252ZXJ0cyBzdHJpbmdzIGZyb20gbG93ZXIgY2FzZSB0byB1cHBlcgorICAgICAgICBj
YXNlLiBJdCBjcmVhdGVzIHR3byB0aHJlYWRzIDogKDEpIHByb2R1Y2UgdGhyZWFkIGFuZCAoMikg
Y29uc3VtZSB0aHJlYWQuCisgICAgICAgIEhlcmUgaXMgd2hhdCBlYWNoIHRocmVhZCBkb2VzOgor
CisgICAgICAgIDEuIE1haW4gdGhyZWFkczogRW5xdWV1ZXMgbG93ZXIgY2FzZSBzdHJpbmdzIGlu
dG8gbV9sb3dlclF1ZXVlLgorICAgICAgICAyLiBQcm9kdWNlIHRocmVhZDogRGVxdWV1ZXMgbG93
ZXIgY2FzZSBzdHJpbmdzIGZyb20gbV9sb3dlclF1ZXVlIGFuZCAKKyAgICAgICAgICAgZW5xdWV1
ZSB0aGVpciB1cHBlciBjYXNlIHN0cmluZ3MgaW4gdGhlIG1fdXBwZXJRdWV1ZS4KKyAgICAgICAg
My4gQ29uc3VtZSB0aHJlYWQ6IERlcXVldWVzIHVwcGVyIGNhc2Ugc3RyaW5ncyBmcm9tIG1fdXBw
ZXJRdWV1ZS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N5
bmNocm9uaXplZEZpeGVkUXVldWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OnRleHRJdGVtKTogQSBoZWxwZXIgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhIGxvd2VyIGNhc2Ug
c3RyaW5nIGdpdmVuIGFuIGluZGV4LgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dG9VcHBlcik6
IEEgaGVscGVyIGZ1bmN0aW9uIHdoaWNoIFJldHVybnMgdGhlIHVwcGVyIGNhc2Ugb2YgYSBzdHJp
bmcuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpUb1VwcGVyQ29u
dmVydGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnByb2R1
Y2VRdWV1ZSk6IFJldHVybnMgYSB3b3JrUXVldWUgZm9yIHRoZSBwcm9kdWNlIHRocmVhZC4KKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OmNvbnN1bWVRdWV1ZSk6IFJl
dHVybnMgYSB3b3JrUXVldWUgZm9yIHRoZSBjb25zdW1lIHRocmVhZC4KKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnN0YXJ0UHJvZHVjaW5nKTogQ3JlYXRlcyBhIHRo
cmVhZCBmb3IgdGhlIHByb2R1Y2VyLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNv
bnZlcnRlcjo6c3RhcnRDb25zdW1pbmcpOiBDcmVhdGVzIGEgdGhyZWFkIGZvciB0aGUgY29uc3Vt
ZXIuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpzdGFydCk6IFN0
YXJ0cyBib3RoIHRoZSBwcm9kdWNlciBhbmQgdGhlIGNvbnN1bWVyIHRocmVhZHMuCisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpzdG9wUHJvZHVjaW5nKTogVGVybWlu
YXRlcyB0aGUgcHJvZHVjZXIgdGhyZWFkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBl
ckNvbnZlcnRlcjo6c3RvcENvbnN1bWluZyk6IFRlcm1pbmF0ZXMgdGhlIGNvbnN1bWVyIHRocmVh
ZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnN0b3ApOiBUZXJt
aW5hdGVzIGJvdGggdGhlIHByb2R1Y2VyIGFuZCB0aGUgY29uc3VtZXIgdGhyZWFkcy4KKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OmVucXVldWVMb3dlcik6IEFkZHMg
YSBsb3dlciBjYXNlIHN0cmluZyB0byB0aGUgbV9sb3dlclF1ZXVlIG9uIHRoZSBtYWluIHRocmVh
ZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OmlzUHJvZHVjaW5n
KTogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm9kdWNpbmcgdGhyZWFkIGlzIGFjdGl2ZS4KKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OmlzQ29uc3VtaW5nKTogUmV0dXJu
cyB3aGV0aGVyIHRoZSBjb25zdW1pbmcgdGhyZWFkIGlzIGFjdGl2ZS4KKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnByb2R1Y2VDb3VudCk6IFJldHVybnMgdGhlIG51
bWJlciBvZiBwcm9kdWNlZCBlbGVtZW50cy4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBw
ZXJDb252ZXJ0ZXI6OmNvbnN1bWVDb3VudCk6IFJldHVybnMgdGhlIG51bWJlciBvZiBjb25zdW1l
ZCBlbGVtZW50cy4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE2LTEwLTEx
ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1vZGlmeSBj
aGVjay13ZWJraXQtc3R5bGUgdG8gcHJvaGliaXQgc2Vuc2l0aXZlIHBocmFzZXMKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDcxNTApCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTQwLDYgKzE0MCw3IEBACiAJCTUyRTVDRTQ5MTREMjFFQUIwMDNCMkJEOCAvKiBQYXJl
bnRGcmFtZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJFNUNFNDgxNEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5j
cHAgKi87IH07CiAJCTUzNjc3MDM0MUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3RE
ZXNjcmlwdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlv
bi5tbSAqLzsgfTsKIAkJNTM2NzcwMzYxQ0M4MUI2MTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVj
dERlc2NyaXB0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVj
dERlc2NyaXB0aW9uLmh0bWwgKi87IH07CisJCTU1OTdGODM2MUQ5NTk2QzgwMDY2QkMyMSAvKiBT
eW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU1OTdGODM0MUQ5NTk2QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRG
aXhlZFF1ZXVlLmNwcCAqLzsgfTsKIAkJNTcxNEVDQjkxQ0E4QjVCMDAwMDUxQUM4IC8qIERvd25s
b2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcxNEVDQjgxQ0E4QjU4ODAwMDUxQUM4IC8qIERvd25s
b2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWwgKi87IH07CiAJCTU3MTRFQ0JCMUNBOEJGRTQwMDA1
MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcxNEVDQkExQ0E4QkZE
MTAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbCAqLzsgfTsK
IAkJNTcxNEVDQkQxQ0E4QzIyQTAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJM
Mi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3MTRFQ0JDMUNBOEMyMTgwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVS
TDIuaHRtbCAqLzsgfTsKQEAgLTkxNiw2ICs5MTcsNyBAQAogCQk1MkU1Q0U0ODE0RDIxRUFCMDAz
QjJCRDggLyogUGFyZW50RnJhbWVfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBhcmVudEZyYW1lX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNj
cmlwdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlNj
cmlwdE9iamVjdERlc2NyaXB0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzY3NzAzNTFDQzgxMkY5MDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRt
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9u
Lmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1OTdGODM0MUQ5NTk2QzgwMDY2
QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NzE0RUNCODFDQThCNTg4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1
ZXN0T3JpZ2luYWxVUkwuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IERvd25sb2Fk
UmVxdWVzdE9yaWdpbmFsVVJMLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3
MTRFQ0JBMUNBOEJGRDEwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1l
Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBEb3dubG9hZFJlcXVlc3RPcmlnaW5h
bFVSTEZyYW1lLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MTRFQ0JDMUNB
OEMyMTgwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTDIuaHRtbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuaHRtbDsgcGF0aCA9IERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMMi5odG1sOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc5NSw2ICsxNzk3LDcgQEAKIAkJCQkyNkYx
QjQ0MzE1Q0E0MzRGMDBEMUU0QkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQzAxMzYzQzcx
M0MzOTk3MzAwRUYzOTY0IC8qIFN0cmluZ09wZXJhdG9ycy5jcHAgKi8sCiAJCQkJN0M3NEQ0MkQx
ODgyMjhGMzAwRTVFRDU3IC8qIFN0cmluZ1ZpZXcuY3BwICovLAorCQkJCTU1OTdGODM0MUQ5NTk2
QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCAqLywKIAkJCQkwQkNEODU2
OTE0ODVDOThCMDBFQTIwMDMgLyogVGVtcG9yYXJ5Q2hhbmdlLmNwcCAqLywKIAkJCQk1QzVFNjMz
RDFEMEI2Nzk0MDA4NUEwMjUgLyogVW5pcXVlUmVmLmNwcCAqLywKIAkJCQk3Q0QwRDVBQTFENTUz
NERFMDAwQ0M5RTEgLyogVmFyaWFudC5jcHAgKi8sCkBAIC0yMjg5LDYgKzIyOTIsNyBAQAogCQkJ
CTdDODNERjM2MUQwQTU5MEMwMEZFQkNGMyAvKiBTdHJpbmdIYXNoZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0M4M0RGMzcxRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmluZ0ltcGwuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M4M0RGMzgxRDBBNTkwQzAwRkVCQ0YzIC8qIFN0cmluZ09wZXJhdG9y
cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1NTk3RjgzNjFEOTU5NkM4MDA2NkJDMjEgLyogU3lu
Y2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzQTFEMEE1
OTBDMDBGRUJDRjMgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYz
RDFEMEE1OTBDMDBGRUJDRjMgLyogVGVtcG9yYXJ5Q2hhbmdlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDODNERjQwMUQwQTU5MEMwMEZFQkNGMyAvKiBUZXN0c0NvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6
ZWRGaXhlZFF1ZXVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDx0aHJlYWQ+CisKKyNpbmNsdWRlIDx3
dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmg+
CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaD4KKworbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgeworCitzdGF0aWMgY2hhciBjb25zdCogdGV4dEl0ZW0oc2l6ZV90IGlu
ZGV4KQoreworICAgIHN0YXRpYyBjaGFyIGNvbnN0KiBpdGVtc1tdID0geyAiZmlyc3QiLCAic2Vj
b25kIiwgInRoaXJkIiwgImZvdXJ0aCIsICJmaWZ0aCIsICJzaXh0aCIgfTsKKyAgICByZXR1cm4g
aW5kZXggPCBzaXplb2YoaXRlbXMpIC8gc2l6ZW9mKGl0ZW1zWzBdKSA/IGl0ZW1zW2luZGV4XSA6
IG51bGxwdHI7Cit9CisKK3N0YXRpYyBDU3RyaW5nIHRvVXBwZXIoY29uc3QgQ1N0cmluZyYgbG93
ZXIpCit7CisgICAgQ1N0cmluZyB1cHBlciA9IGxvd2VyOworCisgICAgZm9yIChjaGFyKiBidWZm
ZXIgPSB1cHBlci5tdXRhYmxlRGF0YSgpOyAqYnVmZmVyOyArK2J1ZmZlcikKKyAgICAgICAgKmJ1
ZmZlciA9IHRvQVNDSUlVcHBlcigqYnVmZmVyKTsKKworICAgIHJldHVybiB1cHBlcjsKK30KKwor
dGVtcGxhdGUgPHNpemVfdCBCdWZmZXJTaXplPgorY2xhc3MgVG9VcHBlckNvbnZlcnRlciB7Citw
dWJsaWM6CisgICAgVG9VcHBlckNvbnZlcnRlcigpCisgICAgeworICAgIH0KKworICAgIFdvcmtR
dWV1ZSogcHJvZHVjZVF1ZXVlKCkKKyAgICB7CisgICAgICAgIGlmICghbV9wcm9kdWNlUXVldWUp
CisgICAgICAgICAgICBtX3Byb2R1Y2VRdWV1ZSA9IFdvcmtRdWV1ZTo6Y3JlYXRlKCJvcmcud2Vi
a2l0LlByb2R1Y2UiKTsKKyAgICAgICAgcmV0dXJuIG1fcHJvZHVjZVF1ZXVlLmdldCgpOworICAg
IH0KKworICAgIFdvcmtRdWV1ZSogY29uc3VtZVF1ZXVlKCkKKyAgICB7CisgICAgICAgIGlmICgh
bV9jb25zdW1lUXVldWUpCisgICAgICAgICAgICBtX2NvbnN1bWVRdWV1ZSA9IFdvcmtRdWV1ZTo6
Y3JlYXRlKCJvcmcud2Via2l0LkNvbnN1bWUiKTsKKyAgICAgICAgcmV0dXJuIG1fY29uc3VtZVF1
ZXVlLmdldCgpOworICAgIH0KKworICAgIHZvaWQgc3RhcnRQcm9kdWNpbmcoKQorICAgIHsKKyAg
ICAgICAgaWYgKGlzUHJvZHVjaW5nKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
cHJvZHVjZVF1ZXVlKCktPmRpc3BhdGNoKFt0aGlzXSB7CisgICAgICAgICAgICBDU3RyaW5nIGxv
d2VyOworICAgICAgICAgICAgd2hpbGUgKG1fbG93ZXJRdWV1ZS5kZXF1ZXVlKGxvd2VyKSkgewor
ICAgICAgICAgICAgICAgIG1fdXBwZXJRdWV1ZS5lbnF1ZXVlKHRvVXBwZXIobG93ZXIpKTsKKyAg
ICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShsb3dlciA9PSB0ZXh0SXRlbShtX3Byb2R1Y2VDb3Vu
dCsrKSk7CisgICAgICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHMoMTApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
cHJvZHVjZUNsb3NlU2VtYXBob3JlLnNpZ25hbCgpOworICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICB2b2lkIHN0YXJ0Q29uc3VtaW5nKCkKKyAgICB7CisgICAgICAgIGlmIChpc0NvbnN1bWluZygp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN1bWVRdWV1ZSgpLT5kaXNwYXRj
aChbdGhpc10geworICAgICAgICAgICAgQ1N0cmluZyB1cHBlcjsKKyAgICAgICAgICAgIHdoaWxl
IChtX3VwcGVyUXVldWUuZGVxdWV1ZSh1cHBlcikpIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1Rf
VFJVRSh1cHBlciA9PSB0b1VwcGVyKHRleHRJdGVtKG1fY29uc3VtZUNvdW50KyspKSk7CisgICAg
ICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMoNTApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29uc3VtZUNsb3Nl
U2VtYXBob3JlLnNpZ25hbCgpOworICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
dGFydCgpCisgICAgeworICAgICAgICBzdGFydFByb2R1Y2luZygpOworICAgICAgICBzdGFydENv
bnN1bWluZygpOworICAgIH0KKworICAgIHZvaWQgc3RvcFByb2R1Y2luZygpCisgICAgeworICAg
ICAgICBpZiAoIWlzUHJvZHVjaW5nKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
bV9sb3dlclF1ZXVlLmNsb3NlKCk7CisgICAgICAgIG1fcHJvZHVjZUNsb3NlU2VtYXBob3JlLndh
aXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisgICAgICAgIG1fcHJvZHVj
ZVF1ZXVlID0gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9wQ29uc3VtaW5nKCkK
KyAgICB7CisgICAgICAgIGlmICghaXNDb25zdW1pbmcoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBtX3VwcGVyUXVldWUuY2xvc2UoKTsKKyAgICAgICAgbV9jb25zdW1lQ2xvc2VT
ZW1hcGhvcmUud2FpdChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKKyAgICAg
ICAgbV9jb25zdW1lUXVldWUgPSBudWxscHRyOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3Ao
KQorICAgIHsKKyAgICAgICAgc3RvcFByb2R1Y2luZygpOworICAgICAgICBzdG9wQ29uc3VtaW5n
KCk7CisgICAgfQorCisgICAgdm9pZCBlbnF1ZXVlTG93ZXIoY29uc3QgQ1N0cmluZyYgbG93ZXIp
CisgICAgeworICAgICAgICBtX2xvd2VyUXVldWUuZW5xdWV1ZShsb3dlcik7CisgICAgfQorCisg
ICAgYm9vbCBpc1Byb2R1Y2luZygpIHsgcmV0dXJuIG1fcHJvZHVjZVF1ZXVlOyB9CisgICAgYm9v
bCBpc0NvbnN1bWluZygpIHsgcmV0dXJuIG1fY29uc3VtZVF1ZXVlOyB9CisKKyAgICBzaXplX3Qg
cHJvZHVjZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wcm9kdWNlQ291bnQ7IH0KKyAgICBzaXpl
X3QgY29uc3VtZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb25zdW1lQ291bnQ7IH0KKworcHJp
dmF0ZToKKyAgICBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlPENTdHJpbmcsIEJ1ZmZlclNpemU+IG1f
bG93ZXJRdWV1ZTsKKyAgICBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlPENTdHJpbmcsIEJ1ZmZlclNp
emU+IG1fdXBwZXJRdWV1ZTsKKyAgICBSZWZQdHI8V29ya1F1ZXVlPiBtX3Byb2R1Y2VRdWV1ZTsK
KyAgICBSZWZQdHI8V29ya1F1ZXVlPiBtX2NvbnN1bWVRdWV1ZTsKKyAgICBCaW5hcnlTZW1hcGhv
cmUgbV9wcm9kdWNlQ2xvc2VTZW1hcGhvcmU7CisgICAgQmluYXJ5U2VtYXBob3JlIG1fY29uc3Vt
ZUNsb3NlU2VtYXBob3JlOworICAgIHNpemVfdCBtX3Byb2R1Y2VDb3VudCB7IDAgfTsKKyAgICBz
aXplX3QgbV9jb25zdW1lQ291bnQgeyAwIH07Cit9OworCitURVNUKFdURl9TeW5jaHJvbml6ZWRG
aXhlZFF1ZXVlLCBCYXNpYykKK3sKKyAgICBUb1VwcGVyQ29udmVydGVyPDRVPiBjb252ZXJ0ZXI7
CisKKyAgICBjb252ZXJ0ZXIuc3RhcnQoKTsKKyAgICBFWFBFQ1RfVFJVRShjb252ZXJ0ZXIuaXNQ
cm9kdWNpbmcoKSAmJiBjb252ZXJ0ZXIuaXNDb25zdW1pbmcoKSk7CisKKyAgICBjb252ZXJ0ZXIu
c3RvcCgpOworICAgIEVYUEVDVF9GQUxTRShjb252ZXJ0ZXIuaXNQcm9kdWNpbmcoKSB8fCBjb252
ZXJ0ZXIuaXNDb25zdW1pbmcoKSk7CisKKyAgICBFWFBFQ1RfRVEoY29udmVydGVyLnByb2R1Y2VD
b3VudCgpLCAwVSk7CisgICAgRVhQRUNUX0VRKGNvbnZlcnRlci5jb25zdW1lQ291bnQoKSwgMFUp
OworfQorCitURVNUKFdURl9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLCBQcm9kdWNlT25seSkKK3sK
KyAgICBUb1VwcGVyQ29udmVydGVyPDRVPiBjb252ZXJ0ZXI7CisgICAgCisgICAgY29udmVydGVy
LnN0YXJ0UHJvZHVjaW5nKCk7CisgICAgRVhQRUNUX1RSVUUoY29udmVydGVyLmlzUHJvZHVjaW5n
KCkgJiYgIWNvbnZlcnRlci5pc0NvbnN1bWluZygpKTsKKworICAgIHNpemVfdCBjb3VudCA9IDA7
CisgICAgd2hpbGUgKGNoYXIgY29uc3QqIGl0ZW0gPSB0ZXh0SXRlbShjb3VudCkpIHsKKyAgICAg
ICAgY29udmVydGVyLmVucXVldWVMb3dlcihpdGVtKTsKKyAgICAgICAgKytjb3VudDsKKyAgICAg
ICAgCisgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2ZvcihzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzKDEpKTsKKyAgICB9CisKKyAgICBjb252ZXJ0ZXIuc3RvcCgpOworICAgIEVYUEVD
VF9GQUxTRShjb252ZXJ0ZXIuaXNQcm9kdWNpbmcoKSB8fCBjb252ZXJ0ZXIuaXNDb25zdW1pbmco
KSk7Cit9CisKK1RFU1QoV1RGX1N5bmNocm9uaXplZEZpeGVkUXVldWUsIENvbnN1bWVPbmx5KQor
eworICAgIFRvVXBwZXJDb252ZXJ0ZXI8NFU+IGNvbnZlcnRlcjsKKyAgICAKKyAgICBjb252ZXJ0
ZXIuc3RhcnRDb25zdW1pbmcoKTsKKyAgICBFWFBFQ1RfVFJVRSghY29udmVydGVyLmlzUHJvZHVj
aW5nKCkgJiYgY29udmVydGVyLmlzQ29uc3VtaW5nKCkpOworICAgIAorICAgIGNvbnZlcnRlci5z
dG9wKCk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnZlcnRlci5pc1Byb2R1Y2luZygpIHx8IGNvbnZl
cnRlci5pc0NvbnN1bWluZygpKTsKK30KKworVEVTVChXVEZfU3luY2hyb25pemVkRml4ZWRRdWV1
ZSwgTGltaXRzKQoreworICAgIFRvVXBwZXJDb252ZXJ0ZXI8NFU+IGNvbnZlcnRlcjsKKworICAg
IGNvbnZlcnRlci5zdGFydCgpOworICAgIEVYUEVDVF9UUlVFKGNvbnZlcnRlci5pc1Byb2R1Y2lu
ZygpICYmIGNvbnZlcnRlci5pc0NvbnN1bWluZygpKTsKKworICAgIHNpemVfdCBjb3VudCA9IDA7
CisgICAgd2hpbGUgKGNoYXIgY29uc3QqIGl0ZW0gPSB0ZXh0SXRlbShjb3VudCkpIHsKKyAgICAg
ICAgY29udmVydGVyLmVucXVldWVMb3dlcihpdGVtKTsKKyAgICAgICAgKytjb3VudDsKKworICAg
ICAgICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3Ioc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cygxKSk7CisgICAgfQorCisgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMoNDAwKSk7CisKKyAgICBjb252ZXJ0ZXIuc3RvcCgpOworICAgIEVY
UEVDVF9GQUxTRShjb252ZXJ0ZXIuaXNQcm9kdWNpbmcoKSB8fCBjb252ZXJ0ZXIuaXNDb25zdW1p
bmcoKSk7CisgICAgCisgICAgRVhQRUNUX0VRKGNvbnZlcnRlci5wcm9kdWNlQ291bnQoKSwgY291
bnQpOworICAgIEVYUEVDVF9FUShjb252ZXJ0ZXIuY29uc3VtZUNvdW50KCksIGNvdW50KTsKK30K
KworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>