<?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>37218</bug_id>
          
          <creation_ts>2010-04-07 10:26:43 -0700</creation_ts>
          <short_desc>Implement FileStreamProxy that calls FileStream methods on FileThread for FileAPI</short_desc>
          <delta_ts>2010-07-07 13:21:07 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>37217</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Kinuko Yasuda">kinuko</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>dimich</cc>
    
    <cc>ericu</cc>
    
    <cc>fishd</cc>
    
    <cc>jeffschiller</cc>
    
    <cc>jianli</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>209705</commentid>
    <comment_count>0</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-07 10:26:43 -0700</bug_when>
    <thetext>To support asynchronous file operations in FileAPI, we need a proxy module that proxies the requests and calls corresponding FileStream methods on the file thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209730</commentid>
    <comment_count>1</comment_count>
      <attachid>52755</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-07 10:50:31 -0700</bug_when>
    <thetext>Created attachment 52755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209732</commentid>
    <comment_count>2</comment_count>
      <attachid>52755</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-07 10:51:32 -0700</bug_when>
    <thetext>Comment on attachment 52755
Patch

The patch depends on another patch for bug 37217.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209753</commentid>
    <comment_count>3</comment_count>
      <attachid>52761</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-07 11:36:00 -0700</bug_when>
    <thetext>Created attachment 52761
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209762</commentid>
    <comment_count>4</comment_count>
      <attachid>52761</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-04-07 11:57:03 -0700</bug_when>
    <thetext>Comment on attachment 52761
Patch

&gt; --- /dev/null
&gt; +++ b/WebCore/html/FileStreamProxy.cpp
&gt; +#include &quot;FileThread.h&quot;
&gt; +#include &quot;FileThreadTask.h&quot;
This include should be placed above so that it will be in the alphabetical
order.

&gt; FileStreamProxy::~FileStreamProxy()
&gt; {
&gt;     if (fileThread())
&gt;         fileThread()-&gt;unscheduleTasks(m_stream.get());
Is it possible that m_context is destructed before FileStreamProxy instance?

&gt; +void FileStreamProxy::read(char* buffer, int length)
&gt; +{
&gt; +    fileThread()-&gt;postTask(createFileThreadTask(m_stream.get(), &amp;FileStream::read, buffer, length));
&gt; +}
&gt; +
&gt; +void FileStreamProxy::write(Blob* blob, long long position, size_t length)
We should use either size_t or int for length in read() and write(), for
consistency.

&gt; +FileThread* FileStreamProxy::fileThread()
&gt; +{
&gt; +    ASSERT(m_context-&gt;fileThread()); // FIXME
What is this FIXME about? 
&gt; +    return m_context-&gt;fileThread();
&gt; +}

&gt; +void FileStreamProxy::abort()
&gt; +{
&gt; +    if (fileThread())
Do we really need to check for fileThread()?
&gt; +        fileThread()-&gt;unscheduleTasks(m_stream.get());
&gt; +}

&gt; +static void notifyWriteOnContext(ScriptExecutionContext* context, FileStreamProxy* stream, int nwritten)
Better to name it as bytesWritten.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209954</commentid>
    <comment_count>5</comment_count>
      <attachid>52817</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-07 18:05:09 -0700</bug_when>
    <thetext>Created attachment 52817
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209958</commentid>
    <comment_count>6</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-07 18:14:04 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 52761 [details])
&gt; &gt; --- /dev/null
&gt; &gt; +++ b/WebCore/html/FileStreamProxy.cpp
&gt; &gt; +#include &quot;FileThread.h&quot;
&gt; &gt; +#include &quot;FileThreadTask.h&quot;
&gt; This include should be placed above so that it will be in the alphabetical
&gt; order.

The order is enforced by check-webkit-style, so I assume the current order is ok.

&gt; &gt; FileStreamProxy::~FileStreamProxy()
&gt; &gt; {
&gt; &gt;     if (fileThread())
&gt; &gt;         fileThread()-&gt;unscheduleTasks(m_stream.get());
&gt; Is it possible that m_context is destructed before FileStreamProxy instance?

I fixed some refs/destructor issues.  The new code assumes the object that holds a reference to FileStreamProxy calls FileStreamProxy::stop() in its destructor to safely shutdown the context/thread.

&gt; &gt; +void FileStreamProxy::write(Blob* blob, long long position, size_t length)
&gt; We should use either size_t or int for length in read() and write(), for
&gt; consistency.

Changed size_t to int.
 
&gt; &gt; +FileThread* FileStreamProxy::fileThread()
&gt; &gt; +{
&gt; &gt; +    ASSERT(m_context-&gt;fileThread()); // FIXME
&gt; What is this FIXME about? 

If thread creation fails it will cause SEGV... but currently I have no idea to &apos;fix&apos; it, so I removed the comment.

&gt; &gt; +static void notifyWriteOnContext(ScriptExecutionContext* context, FileStreamProxy* stream, int nwritten)
&gt; Better to name it as bytesWritten.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210297</commentid>
    <comment_count>7</comment_count>
      <attachid>52883</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-08 11:49:49 -0700</bug_when>
    <thetext>Created attachment 52883
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210299</commentid>
    <comment_count>8</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-08 11:50:50 -0700</bug_when>
    <thetext>Made one more fix (added fileThread()-&gt;unscheduleTasks() in FileStream::stop()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210443</commentid>
    <comment_count>9</comment_count>
      <attachid>52883</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-04-08 15:46:06 -0700</bug_when>
    <thetext>Comment on attachment 52883
Patch

&gt; diff --git a/WebCore/html/FileStreamProxy.cpp b/WebCore/html/FileStreamProxy.cpp
&gt; new file mode 100644
&gt; index 0000000..59abd68
We should not have the above info in the patch. Otherwise, you will make svn think it
is branched from other existing file, like previously landed patch:
  http://trac.webkit.org/changeset/57229

&gt; +void FileStreamProxy::abort()
&gt; +{
&gt; +    fileThread()-&gt;unscheduleTasks(m_stream.get());
&gt; +}
&gt; +
&gt; +void FileStreamProxy::stop()
&gt; +{
&gt; +    fileThread()-&gt;unscheduleTasks(m_stream.get());
&gt; +    fileThread()-&gt;postTask(createFileThreadTask(m_stream.get(), &amp;FileStream::stop));
&gt; +}
It seems to be quite confusing with both abort() and stop() and they seem to do the similar things.
For stop(), you call unscheduleTasks to remove all file thread tasks and then call postTask
to add a new one. This seems to be a bit unnatural. Can you illustrate how the whole destruction
logic work?

&gt; +static void notifyGetSizeOnContext(ScriptExecutionContext* context, FileStreamProxy* proxy, long long size)
&gt; +{
&gt; +    ASSERT(context-&gt;isContextThread());
Probably this ASSERT is really not needed. I think it would be better to have ASSERTs on did*** methods to
ensure they&apos;re called from file thread; and ASSERTS on open/read/write/... methods to ensure they&apos;re called
from non-file thread.

&gt; +void FileStreamProxy::didStop()
&gt; +{
&gt; +    m_context-&gt;postTask(createCallbackTask(&amp;notifyStopOnContext, this));
&gt; +}
&gt; +
&gt; +void FileStreamProxy::didStopAndDestroy()
didStop() is called on file thread and didStopAndDestroy is called on context thread and both of them
are prefixed with &quot;did&quot;, which increases the difficulty to understand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210479</commentid>
    <comment_count>10</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-08 16:44:56 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 52883 [details])
&gt; &gt; diff --git a/WebCore/html/FileStreamProxy.cpp b/WebCore/html/FileStreamProxy.cpp
&gt; &gt; new file mode 100644
&gt; &gt; index 0000000..59abd68
&gt; We should not have the above info in the patch. Otherwise, you will make svn
&gt; think it
&gt; is branched from other existing file, like previously landed patch:
&gt;   http://trac.webkit.org/changeset/57229

Hmm they&apos;re done by webkit-patch.  I&apos;ll look into how I can avoid that.
 
&gt; &gt; +void FileStreamProxy::stop()
&gt; &gt; +{
&gt; &gt; +    fileThread()-&gt;unscheduleTasks(m_stream.get());
&gt; &gt; +    fileThread()-&gt;postTask(createFileThreadTask(m_stream.get(), &amp;FileStream::stop));
&gt; &gt; +}
&gt; It seems to be quite confusing with both abort() and stop() and they seem to do
&gt; the similar things.
&gt; For stop(), you call unscheduleTasks to remove all file thread tasks and then
&gt; call postTask
&gt; to add a new one. This seems to be a bit unnatural. Can you illustrate how the
&gt; whole destruction
&gt; logic work?

Abort() is straightforward, it needs to stop any (pending) writes/reads, thus it unschedules tasks.  it&apos;s just an API and by definition it doesn&apos;t have anything to do with destructing FileStreamProxy/FileStream.

Stop() is for enforcing a destruction order and closing a file handle on the file thread.  It shouldn&apos;t be called for other purpose.
It might be written better, but the logic I thought is:

0. FileStreamProxy holds refs for ScriptExecutionContext and FileStream, so they must be available throughout the proxy&apos;s life cycle.
1. when we need to stop/destroy FileStreamProxy, we call FileStreamProxy::stop() and then deref the proxy.
    (e.g. m_streamProxy-&gt;stop(); m_streamProxy = 0;)
     FileStreamProxy holds its own ref so it won&apos;t be deleted until it really thinks it&apos;s done.
2. FileStreamProxy::stop() calls unscheduleTasks to remove any pending writes/reads (i.e. tasks still in the queue) for the stream.
3. FileStreamProxy::stop() posts a task to close the file and waits for the close (and any ongoing tasks) to be completed.
4. When FileStreamProxy::didStop() is called we can safely say that the file is closed and there&apos;re no ongoing/pending tasks that need call back to the proxy.
5. FileStreamProxy::didStopAndDestroy() derefs itself and the context.

&gt; &gt; +static void notifyGetSizeOnContext(ScriptExecutionContext* context, FileStreamProxy* proxy, long long size)
&gt; &gt; +{
&gt; &gt; +    ASSERT(context-&gt;isContextThread());
&gt; Probably this ASSERT is really not needed. I think it would be better to have
&gt; ASSERTs on did*** methods to
&gt; ensure they&apos;re called from file thread; and ASSERTS on open/read/write/...
&gt; methods to ensure they&apos;re called
&gt; from non-file thread.

Sounds good.  notifyXXX are all static methods and they are less likely to be called unexpectedly.
&gt; &gt; +void FileStreamProxy::didStop()
&gt; &gt; +{
&gt; &gt; +    m_context-&gt;postTask(createCallbackTask(&amp;notifyStopOnContext, this));
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void FileStreamProxy::didStopAndDestroy()
&gt; didStop() is called on file thread and didStopAndDestroy is called on context
&gt; thread and both of them
&gt; are prefixed with &quot;did&quot;, which increases the difficulty to understand.

I&apos;ve tried to name it better but haven&apos;t come up with a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210497</commentid>
    <comment_count>11</comment_count>
      <attachid>52921</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-08 17:24:49 -0700</bug_when>
    <thetext>Created attachment 52921
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210500</commentid>
    <comment_count>12</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-08 17:29:03 -0700</bug_when>
    <thetext>Made a minor cleanup.  Removed didStopAndDestroy method.

The patch still has &apos; new file mode...&apos; part.  I&apos;ll try fixing it...
&gt; new file mode 100644
&gt; index 0000000..59abd68</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210834</commentid>
    <comment_count>13</comment_count>
      <attachid>52921</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-04-09 12:10:19 -0700</bug_when>
    <thetext>Comment on attachment 52921
Patch

I think the way to fix &quot;new file mode...&quot; problem in the patch is to create a new file
from the scratch and then copy and paste the content over. You need to revert all new
files just added and then create files and add them to the repository.

&gt; diff --git a/WebCore/html/FileStreamProxy.cpp b/WebCore/html/FileStreamProxy.cpp
&gt; +FileStreamProxy::FileStreamProxy(ScriptExecutionContext* context, FileStreamClient* client)
&gt; +    : m_context(context)
&gt; +    , m_client(client)
&gt; +    , m_stream(FileStream::create(this))
&gt; +{
&gt; +    ref();
Could you please add the comment about why we need to keep its own ref here?

&gt; +void FileStreamProxy::abort()
&gt; +{
&gt; +    fileThread()-&gt;unscheduleTasks(m_stream.get());
&gt; +}
&gt; +
&gt; +void FileStreamProxy::stop()
&gt; +{
&gt; +    fileThread()-&gt;unscheduleTasks(m_stream.get());
&gt; +    fileThread()-&gt;postTask(createFileThreadTask(m_stream.get(), &amp;FileStream::stop));
&gt; +}
I still think we do not need both abort() and stop(). Since we are not going to resume
after abort, can we simply call stop() from FileReader/FieWriter::abort()?

&gt; diff --git a/WebCore/html/FileStreamProxy.h b/WebCore/html/FileStreamProxy.h
&gt; +class FileStreamProxy : public RefCounted&lt;FileStreamProxy&gt;, public FileStreamClient {
&gt; +protected:
If we&apos;re not going to have other child classes derived from FileStreamProxy,
it would be better to make it &quot;private&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210991</commentid>
    <comment_count>14</comment_count>
      <attachid>53006</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-09 15:51:27 -0700</bug_when>
    <thetext>Created attachment 53006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210996</commentid>
    <comment_count>15</comment_count>
      <attachid>53009</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-09 16:03:21 -0700</bug_when>
    <thetext>Created attachment 53009
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211005</commentid>
    <comment_count>16</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-09 16:13:08 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 52921 [details])
&gt; I think the way to fix &quot;new file mode...&quot; problem in the patch is to create a
&gt; new file
&gt; from the scratch and then copy and paste the content over. You need to revert
&gt; all new
&gt; files just added and then create files and add them to the repository.

I tried something similar to this.  Hope it&apos;ll work this time.

&gt; &gt; diff --git a/WebCore/html/FileStreamProxy.cpp b/WebCore/html/FileStreamProxy.cpp
&gt; &gt; +FileStreamProxy::FileStreamProxy(ScriptExecutionContext* context, FileStreamClient* client)
&gt; &gt; +    ref();
&gt; Could you please add the comment about why we need to keep its own ref here?

Done.
 
&gt; &gt; +void FileStreamProxy::stop()
&gt; &gt; +{
&gt; &gt; +    fileThread()-&gt;unscheduleTasks(m_stream.get());
&gt; &gt; +    fileThread()-&gt;postTask(createFileThreadTask(m_stream.get(), &amp;FileStream::stop));
&gt; &gt; +}
&gt; I still think we do not need both abort() and stop(). Since we are not going to
&gt; resume
&gt; after abort, can we simply call stop() from FileReader/FieWriter::abort()?

OK, I removed the abort method and added some more comments (chose stop() over abort() just for consistency).

&gt; &gt; diff --git a/WebCore/html/FileStreamProxy.h b/WebCore/html/FileStreamProxy.h
&gt; &gt; +class FileStreamProxy : public RefCounted&lt;FileStreamProxy&gt;, public FileStreamClient {
&gt; &gt; +protected:
&gt; If we&apos;re not going to have other child classes derived from FileStreamProxy,
&gt; it would be better to make it &quot;private&quot;.

Right, I&apos;ve been missing to fix it from another merge... Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211028</commentid>
    <comment_count>17</comment_count>
      <attachid>53009</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-04-09 16:48:56 -0700</bug_when>
    <thetext>Comment on attachment 53009
Patch

Only some minor things to resolve.

&gt; diff --git a/WebCore/html/FileStreamProxy.cpp b/WebCore/html/FileStreamProxy.cpp
&gt; +static void derefProxyOnContext(ScriptExecutionContext*, FileStreamProxy* proxy)
&gt; +{
&gt; +    proxy-&gt;deref();
Can we add an ASSERT before this line, like:
       ASSERT(proxy-&gt;hasOneRef());
This way, we can ensure that the caller, i.e., FileReader/FileWriter, has already
released the reference and now it should only has ref count 1 now.

&gt; diff --git a/WebCore/html/FileStreamProxy.h b/WebCore/html/FileStreamProxy.h
&gt; +// A proxy module that calls corresponding FileStream methods on the file thread.  Note: you must call stop() before destroying a FileStreamProxy instance, e.g. in the desctructor of an object that holds a reference to the proxy.
Probably we could say the following for Note part:
   // ... Note: you must call stop() first and then release the reference to the FileStreamProxy instance.

&gt; +    // Stop() stops any pending tasks, close the file and derefs itself; the caller should not recycle the instance after calling stop().
It is not needed to repeat stop() in the comment. Also we should use &quot;closes&quot; to be consistent with &quot;stops&quot;.
Probably it is better to say &quot;destruct&quot;.
      // Stops the proxy and schedules it to be destructed. All the pending tasks will be aborted and the file stream will be closed.
      // Note: the caller should not recycle the instance after calling stop().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211044</commentid>
    <comment_count>18</comment_count>
      <attachid>53020</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-09 17:29:45 -0700</bug_when>
    <thetext>Created attachment 53020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211048</commentid>
    <comment_count>19</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-09 17:36:00 -0700</bug_when>
    <thetext>Thanks.

(In reply to comment #17)
&gt; (From update of attachment 53009 [details])
&gt; &gt; +static void derefProxyOnContext(ScriptExecutionContext*, FileStreamProxy* proxy)
&gt; &gt; +{
&gt; &gt; +    proxy-&gt;deref();
&gt; Can we add an ASSERT before this line, like:
&gt;        ASSERT(proxy-&gt;hasOneRef());
&gt; This way, we can ensure that the caller, i.e., FileReader/FileWriter, has
&gt; already
&gt; released the reference and now it should only has ref count 1 now.

Asserting on ref count makes me a bit nervous, so I added another status flag to allow recycling even after stop() (just in case).

&gt; &gt; diff --git a/WebCore/html/FileStreamProxy.h b/WebCore/html/FileStreamProxy.h
&gt; &gt; +// A proxy module that calls corresponding FileStream methods on the file thread.  Note: you must call stop() before destroying a FileStreamProxy instance, e.g. in the desctructor of an object that holds a reference to the proxy.
&gt; Probably we could say the following for Note part:
&gt;    // ... Note: you must call stop() first and then release the reference to
&gt; the FileStreamProxy instance.

Done.
 
&gt; &gt; +    // Stop() stops any pending tasks, close the file and derefs itself; the caller should not recycle the instance after calling stop().
&gt; It is not needed to repeat stop() in the comment. Also we should use &quot;closes&quot;
&gt; to be consistent with &quot;stops&quot;.
&gt; Probably it is better to say &quot;destruct&quot;.
&gt;       // Stops the proxy and schedules it to be destructed. All the pending
&gt; tasks will be aborted and the file stream will be closed.
&gt;       // Note: the caller should not recycle the instance after calling stop().

Done.  Also removed the notion about recycling as now it doesn&apos;t apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211722</commentid>
    <comment_count>20</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-04-12 14:05:12 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Asserting on ref count makes me a bit nervous, so I added another status flag
&gt; to allow recycling even after stop() (just in case).
&gt; 

Is there any scenario we want to support reusing FileStreamProxy after calling stop()? If not at present, I&apos;d rather keep the semantic strict because it is kind of confusing. Normally we assume calling something like start() or restart() to revive the instance. But with your new patch, calling any other methods of FileStreamProxy could trigger the reviving and this could make it easy to make the mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211797</commentid>
    <comment_count>21</comment_count>
      <attachid>53207</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-12 18:15:29 -0700</bug_when>
    <thetext>Created attachment 53207
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211800</commentid>
    <comment_count>22</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-12 18:26:43 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; Asserting on ref count makes me a bit nervous, so I added another status flag
&gt; &gt; to allow recycling even after stop() (just in case).
&gt; 
&gt; Is there any scenario we want to support reusing FileStreamProxy after calling
&gt; stop()? If not at present, I&apos;d rather keep the semantic strict because it is
&gt; kind of confusing. Normally we assume calling something like start() or
&gt; restart() to revive the instance. But with your new patch, calling any other
&gt; methods of FileStreamProxy could trigger the reviving and this could make it
&gt; easy to make the mistake.

Ah ok FileReader has a reason to make it strict. (I changed like that since in FileWriter I didn&apos;t see a reason to force the caller to deref the proxy after abort().)
Added the ASSERT as you suggested in your previous review.  Also added a line to nullify the client in stop() to avoid calling back on the client after stop().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211802</commentid>
    <comment_count>23</comment_count>
      <attachid>53208</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-12 18:43:27 -0700</bug_when>
    <thetext>Created attachment 53208
Rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211803</commentid>
    <comment_count>24</comment_count>
      <attachid>53209</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-12 18:47:17 -0700</bug_when>
    <thetext>Created attachment 53209
Fixed the mess in diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211861</commentid>
    <comment_count>25</comment_count>
      <attachid>53209</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-04-12 22:57:09 -0700</bug_when>
    <thetext>Comment on attachment 53209
Fixed the mess in diff

r=me

Please fix several minor issues before landing. Thanks.

&gt; diff --git a/WebCore/html/FileStreamProxy.cpp b/WebCore/html/FileStreamProxy.cpp
&gt; +FileStreamProxy::FileStreamProxy(ScriptExecutionContext* context, FileStreamClient* client)
&gt; +    : m_context(context)
&gt; +    , m_client(client)
&gt; +    , m_stream(FileStream::create(this))
&gt; +{
&gt; +    // Holds an extra ref so that the instance will not get deleted while there can be any tasks on the file thread.
&gt; +    ref();
Please add an empty line here for better readability.

&gt; +void FileStreamProxy::stop()
&gt; +{
&gt; +    // Clear the client so that we won&apos;t be calling callbacks on the client.
&gt; +    m_client = 0;
Please add an empty line here for better readability.

&gt; diff --git a/WebCore/html/FileStreamProxy.h b/WebCore/html/FileStreamProxy.h
&gt; +    FileThread* fileThread();
Please add an empty line here.

&gt; +    bool m_running;
Please remove this leftover.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213441</commentid>
    <comment_count>26</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-16 14:55:34 -0700</bug_when>
    <thetext>Committed r57749: &lt;http://trac.webkit.org/changeset/57749&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247689</commentid>
    <comment_count>27</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-07 12:44:06 -0700</bug_when>
    <thetext>Adam Barth had some comments on this design in bug 41547.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247720</commentid>
    <comment_count>28</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-07 13:21:07 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; Adam Barth had some comments on this design in bug 41547.

Thanks, I&apos;m going to open a new issue for that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52755</attachid>
            <date>2010-04-07 10:50:31 -0700</date>
            <delta_ts>2010-04-07 11:35:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37218-20100407105030.patch</filename>
            <type>text/plain</type>
            <size>24187</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWIwMzRkMC4uOTNjNWQwOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAxMC0wNC0wNyAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZpbGVTdHJlYW1Qcm94eSB0aGF0IGNhbGxzIEZp
bGVTdHJlYW0gbWV0aG9kcyBvbiBGaWxlVGhyZWFkIGZvciBGaWxlQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzIxOAorCisgICAgICAgIE5vIG5l
dyB0ZXN0czsgd2lsbCBiZSBhZGRlZCB3aGVuIHdlIGhhdmUgY29tcGxldGUgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbGVTdHJlYW1Qcm94eTo6RmlsZVN0cmVhbVByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGVTdHJlYW1Qcm94eTo6fkZpbGVTdHJlYW1Qcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
U3RyZWFtUHJveHk6Om9wZW5Gb3JSZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW1Q
cm94eTo6b3BlbkZvcldyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW1Qcm94eTo6
Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbVByb3h5OjpyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVTdHJlYW1Qcm94eTo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZVN0cmVhbVByb3h5Ojp0cnVuY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3RyZWFt
UHJveHk6OmZpbGVUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbVByb3h5Ojph
Ym9ydCk6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlHZXRTaXplT25Db250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVTdHJlYW1Qcm94eTo6ZGlkR2V0U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpub3RpZnlSZWFkT25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW1Q
cm94eTo6ZGlkUmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlXcml0ZU9uQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3RyZWFtUHJveHk6OmRpZFdyaXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Om5vdGlmeVN0YXJ0T25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVT
dHJlYW1Qcm94eTo6ZGlkU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5RmluaXNoT25D
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW1Qcm94eTo6ZGlkRmluaXNoKToK
KyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeUZhaWxPbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZVN0cmVhbVByb3h5OjpkaWRGYWlsKToKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW1Q
cm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW1Qcm94eTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW1Qcm94eTo6Y2xpZW50KToKKyAgICAgICAg
KiBodG1sL0ZpbGVUaHJlYWRUYXNrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbGVUaHJlYWRUYXNrMDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVUaHJlYWRUYXNrMDo6RmlsZVRocmVhZFRhc2swKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbGVUaHJlYWRUYXNrMDo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVRo
cmVhZFRhc2sxOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVRocmVhZFRhc2sxOjpG
aWxlVGhyZWFkVGFzazEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVRocmVhZFRhc2sxOjpwZXJm
b3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlVGhyZWFkVGFzazI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlVGhyZWFkVGFzazI6OkZpbGVUaHJlYWRUYXNrMik6CisgICAg
ICAgIChXZWJDb3JlOjpGaWxlVGhyZWFkVGFzazI6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGVUaHJlYWRUYXNrMzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVU
aHJlYWRUYXNrMzo6RmlsZVRocmVhZFRhc2szKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVUaHJl
YWRUYXNrMzo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRmlsZVRocmVh
ZFRhc2spOgorCiAyMDEwLTA0LTA2ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3ODE0ZDlmLi5hMzYyYmE3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjIxNCw2ICsyMjE0LDkg
QEAKIAkJODk1MjUzRDcxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzRDQxMTZDNEM2ODAw
Q0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwICovOyB9OwogCQk4OTUyNTNEODExNkM0QzY4MDBDQUJG
MDAgLyogRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODk1MjUzRDUxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uaCAqLzsgfTsK
IAkJODk1MjUzRDkxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0Q2MTE2QzRDNjgw
MENBQkYwMCAvKiBGaWxlU3RyZWFtQ2xpZW50LmggKi87IH07CisJCTg5NTI1M0RDMTE2QzRFRjUw
MENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREExMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJl
YW1Qcm94eS5jcHAgKi87IH07CisJCTg5NTI1M0REMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3Ry
ZWFtUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg5NTI1M0RCMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuaCAqLzsgfTsKKwkJ
ODk1MjUzREYxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNERTExNkM0RjA2MDBDQUJG
MDAgLyogRmlsZVRocmVhZFRhc2suaCAqLzsgfTsKIAkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgz
IC8qIFBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLzsgfTsK
IAkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgz
IC8qIFBhZ2VHcm91cC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTkzMDVCMjREMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwNUIyNEMwOThGMUI2QjAwQzI4
ODU1IC8qIFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTc2NzAsNiArNzY3Myw5IEBACiAJCTg5NTI1M0Q0MTE2QzRDNjgwMENBQkYwMCAv
KiBGaWxlU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZp
bGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTUyNTNENTExNkM0
QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWxlU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1M0Q2
MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZpbGVTdHJlYW1DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJODk1MjUzREExMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlU3RyZWFtUHJveHkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAg
LyogRmlsZVN0cmVhbVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZp
bGVTdHJlYW1Qcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTUyNTNERTEx
NkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsZVRocmVhZFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEyOTU5LDYgKzEyOTY1LDkgQEAKIAkJOTNFRUMxRUMwOUMyODc3NzAwQzUx
NUQxIC8qIGh0bWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTg5NTI1M0RFMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovLAorCQkJ
CTg5NTI1M0RBMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuY3BwICovLAorCQkJ
CTg5NTI1M0RCMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuaCAqLywKIAkJCQk4
OTUyNTNENDExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgKi8sCiAJCQkJODk1MjUz
RDUxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uaCAqLywKIAkJCQk4OTUyNTNENjExNkM0
QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oICovLApAQCAtMTg4MjUsNiArMTg4MzQs
OCBAQAogCQkJCTI1NDJGNERCMTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk1MjUzRDgxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVT
dHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTg5NTI1M0Q5MTE2QzRDNjgwMENBQkYwMCAvKiBG
aWxlU3RyZWFtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk4OTUyNTNERDExNkM0RUY1MDBD
QUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQk4OTUyNTNERjEx
NkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjEw
NDYsNiArMjEwNTcsNyBAQAogCQkJCTg5NTI1MzUyMTE2NDFCMzQwMENBQkYwMCAvKiBGaWxlVGhy
ZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI1NDJGNERBMTE2NkMyNUEwMEU4OUE4NiAvKiBV
c2VyR2VzdHVyZUluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4OTUyNTNENzExNkM0
QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4OTUyNTNE
QzExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAgYi9XZWJDb3JlL2h0
bWwvRmlsZVN0cmVhbVByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zZDQ3OTIzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94
eS5jcHAKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KEZJTEVfUkVBREVSKSB8fCBFTkFCTEUoRklMRV9XUklURVIpCisKKyNpbmNsdWRlICJGaWxlU3Ry
ZWFtUHJveHkuaCIKKworI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJGaWxlU3RyZWFtLmgi
CisjaW5jbHVkZSAiRmlsZVRocmVhZC5oIgorI2luY2x1ZGUgIkZpbGVUaHJlYWRUYXNrLmgiCisj
aW5jbHVkZSAiR2VuZXJpY1dvcmtlclRhc2suaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitGaWxlU3RyZWFtUHJveHk6OkZpbGVTdHJlYW1Qcm94eShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fc3RyZWFtKEZpbGVT
dHJlYW06OmNyZWF0ZSh0aGlzKSkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0
ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6c3RhcnQpKTsKK30K
KworRmlsZVN0cmVhbVByb3h5Ojp+RmlsZVN0cmVhbVByb3h5KCkKK3sKKyAgICBpZiAoZmlsZVRo
cmVhZCgpKQorICAgICAgICBmaWxlVGhyZWFkKCktPnVuc2NoZWR1bGVUYXNrcyhtX3N0cmVhbS5n
ZXQoKSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpvcGVuRm9yUmVhZChCbG9iKiBibG9i
KQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9z
dHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjpvcGVuRm9yUmVhZCwgYmxvYikpOworfQorCit2b2lk
IEZpbGVTdHJlYW1Qcm94eTo6b3BlbkZvcldyaXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdl
dCgpLCAmRmlsZVN0cmVhbTo6b3BlbkZvcldyaXRlLCBwYXRoKSk7Cit9CisKK3ZvaWQgRmlsZVN0
cmVhbVByb3h5OjpjbG9zZSgpCit7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVG
aWxlVGhyZWFkVGFzayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06OmNsb3NlKSk7Cit9CisK
K3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpyZWFkKGNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKK3sK
KyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFt
LmdldCgpLCAmRmlsZVN0cmVhbTo6cmVhZCwgYnVmZmVyLCBsZW5ndGgpKTsKK30KKwordm9pZCBG
aWxlU3RyZWFtUHJveHk6OndyaXRlKEJsb2IqIGJsb2IsIGxvbmcgbG9uZyBwb3NpdGlvbiwgc2l6
ZV90IGxlbmd0aCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJl
YWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6d3JpdGUsIGJsb2IsIHBvc2l0aW9u
LCBsZW5ndGgpKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OnRydW5jYXRlKGxvbmcgbG9u
ZyBwb3NpdGlvbikKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJl
YWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6dHJ1bmNhdGUsIHBvc2l0aW9uKSk7
Cit9CisKK0ZpbGVUaHJlYWQqIEZpbGVTdHJlYW1Qcm94eTo6ZmlsZVRocmVhZCgpCit7CisgICAg
QVNTRVJUKG1fY29udGV4dC0+ZmlsZVRocmVhZCgpKTsgLy8gRklYTUUKKyAgICByZXR1cm4gbV9j
b250ZXh0LT5maWxlVGhyZWFkKCk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjphYm9ydCgp
Cit7CisgICAgaWYgKGZpbGVUaHJlYWQoKSkKKyAgICAgICAgZmlsZVRocmVhZCgpLT51bnNjaGVk
dWxlVGFza3MobV9zdHJlYW0uZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlHZXRTaXpl
T25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1Qcm94
eSogc3RyZWFtLCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNDb250
ZXh0VGhyZWFkKCkpOworICAgIGlmIChzdHJlYW0tPmNsaWVudCgpKQorICAgICAgICBzdHJlYW0t
PmNsaWVudCgpLT5kaWRHZXRTaXplKHNpemUpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6
ZGlkR2V0U2l6ZShsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5R2V0U2l6ZU9uQ29udGV4dCwgdGhpcywgc2l6ZSkpOwor
fQorCitzdGF0aWMgdm9pZCBub3RpZnlSZWFkT25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIEZpbGVTdHJlYW1Qcm94eSogc3RyZWFtLCBjb25zdCBjaGFyKiBkYXRhLCBp
bnQgYnl0ZXNSZWFkKQoreworICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7
CisgICAgaWYgKHN0cmVhbS0+Y2xpZW50KCkpCisgICAgICAgIHN0cmVhbS0+Y2xpZW50KCktPmRp
ZFJlYWQoZGF0YSwgYnl0ZXNSZWFkKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmRpZFJl
YWQoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVzUmVhZCkKK3sKKyAgICBtX2NvbnRleHQtPnBv
c3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5UmVhZE9uQ29udGV4dCwgdGhpcywgZGF0
YSwgYnl0ZXNSZWFkKSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeVdyaXRlT25Db250ZXh0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1Qcm94eSogc3RyZWFtLCBp
bnQgbndyaXR0ZW4pCit7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsK
KyAgICBpZiAoc3RyZWFtLT5jbGllbnQoKSkKKyAgICAgICAgc3RyZWFtLT5jbGllbnQoKS0+ZGlk
V3JpdGUobndyaXR0ZW4pOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlkV3JpdGUoaW50
IG53cml0dGVuKQoreworICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNr
KCZub3RpZnlXcml0ZU9uQ29udGV4dCwgdGhpcywgbndyaXR0ZW4pKTsKK30KKwordm9pZCBub3Rp
ZnlTdGFydE9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBGaWxlU3Ry
ZWFtUHJveHkqIHN0cmVhbSkKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFk
KCkpOworICAgIGlmIChzdHJlYW0tPmNsaWVudCgpKQorICAgICAgICBzdHJlYW0tPmNsaWVudCgp
LT5kaWRTdGFydCgpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlkU3RhcnQoKQorewor
ICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlTdGFydE9u
Q29udGV4dCwgdGhpcykpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlGaW5pc2hPbkNvbnRleHQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRmlsZVN0cmVhbVByb3h5KiBzdHJlYW0p
Cit7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAoc3Ry
ZWFtLT5jbGllbnQoKSkKKyAgICAgICAgc3RyZWFtLT5jbGllbnQoKS0+ZGlkRmluaXNoKCk7Cit9
CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRGaW5pc2goKQoreworICAgIG1fY29udGV4dC0+
cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlGaW5pc2hPbkNvbnRleHQsIHRoaXMp
KTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5RmFpbE9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFtUHJveHkqIHN0cmVhbSwgRXhjZXB0aW9uQ29kZSBl
YykKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmIChz
dHJlYW0tPmNsaWVudCgpKQorICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5kaWRGYWlsKGVjKTsK
K30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmRpZEZhaWwoRXhjZXB0aW9uQ29kZSBlYykKK3sK
KyAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5RmFpbE9u
Q29udGV4dCwgdGhpcywgZWMpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKEZJTEVfV1JJVEVSKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVT
dHJlYW1Qcm94eS5oIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZmVkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpbGVT
dHJlYW1Qcm94eV9oCisjZGVmaW5lIEZpbGVTdHJlYW1Qcm94eV9oCisKKyNpZiBFTkFCTEUoRklM
RV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKKyNpbmNsdWRlICJGaWxlU3RyZWFtQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCbG9iOworY2xhc3MgRmlsZVN0
cmVhbTsKK2NsYXNzIEZpbGVUaHJlYWQ7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Owor
Y2xhc3MgU3RyaW5nOworCitjbGFzcyBGaWxlU3RyZWFtUHJveHkgOiBwdWJsaWMgUmVmQ291bnRl
ZDxGaWxlU3RyZWFtUHJveHk+LCBwdWJsaWMgRmlsZVN0cmVhbUNsaWVudCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZVN0cmVhbVByb3h5PiBjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlU3RyZWFtUHJveHkoY29udGV4dCwgY2xpZW50
KSk7CisgICAgfQorICAgIHZpcnR1YWwgfkZpbGVTdHJlYW1Qcm94eSgpOworCisgICAgdm9pZCBv
cGVuRm9yUmVhZChCbG9iKiBibG9iKTsKKyAgICB2b2lkIG9wZW5Gb3JXcml0ZShjb25zdCBTdHJp
bmcmIHBhdGgpOworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lkIHJlYWQoY2hhciogYnVmZmVy
LCBpbnQgbGVuZ3RoKTsKKyAgICB2b2lkIHdyaXRlKEJsb2IqIGJsb2IsIGxvbmcgbG9uZyBwb3Np
dGlvbiwgc2l6ZV90IGxlbmd0aCk7CisgICAgdm9pZCB0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRp
b24pOworCisgICAgdm9pZCBhYm9ydCgpOworCisgICAgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50
KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworcHJvdGVjdGVkOgorICAgIEZpbGVTdHJl
YW1Qcm94eShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbUNsaWVudCopOworCisg
ICAgLy8gRmlsZVN0cmVhbUNsaWVudCBtZXRob2RzLgorICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRT
aXplKGxvbmcgbG9uZyk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlYWQoY29uc3QgY2hhciosIGlu
dCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFdyaXRlKGludCk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFN0YXJ0KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaCgpOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsKEV4Y2VwdGlvbkNvZGUpOworCisgICAgRmlsZVRocmVhZCogZmlsZVRocmVhZCgp
OworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fY29udGV4dDsKKyAgICBGaWxlU3RyZWFt
Q2xpZW50KiBtX2NsaWVudDsKKyAgICBSZWZQdHI8RmlsZVN0cmVhbT4gbV9zdHJlYW07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9SRUFERVIp
IHx8IEVOQUJMRShGSUxFX1dSSVRFUikKKworI2VuZGlmIC8vIEZpbGVTdHJlYW1Qcm94eV9oCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVRocmVhZFRhc2suaCBiL1dlYkNvcmUvaHRtbC9G
aWxlVGhyZWFkVGFzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YzU5
ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVRocmVhZFRhc2suaApAQCAt
MCwwICsxLDIzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEZpbGVUaHJlYWRUYXNrX2gKKyNkZWZpbmUgRmlsZVRocmVh
ZFRhc2tfaAorCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKKyNpbmNsdWRlICJGaWxl
VGhyZWFkLmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRyYWl0cyBmb3IgdGhlIFRhc2suCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHMgeworICAgIHR5cGVk
ZWYgY29uc3QgVCYgUGFyYW1UeXBlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEZpbGVUaHJlYWRUYXNrVHJhaXRzPFQqPiB7CisgICAgdHlwZWRlZiBUKiBQYXJhbVR5cGU7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHM8UGFz
c1JlZlB0cjxUPiA+IHsKKyAgICB0eXBlZGVmIFBhc3NSZWZQdHI8VD4gUGFyYW1UeXBlOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZpbGVUaHJlYWRUYXNrVHJhaXRzPFBhc3NP
d25QdHI8VD4gPiB7CisgICAgdHlwZWRlZiBQYXNzT3duUHRyPFQ+IFBhcmFtVHlwZTsKK307CisK
K2NsYXNzIEZpbGVUaHJlYWRUYXNrMCA6IHB1YmxpYyBGaWxlVGhyZWFkOjpUYXNrIHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIHZvaWQgKEZpbGVTdHJlYW06OipNZXRob2QpKCk7CisgICAgdHlwZWRl
ZiBGaWxlVGhyZWFkVGFzazAgRmlsZVRocmVhZFRhc2s7CisKKyAgICBzdGF0aWMgUGFzc093blB0
cjxGaWxlVGhyZWFkVGFzaz4gY3JlYXRlKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhv
ZCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgRmlsZVRocmVhZFRhc2soc3RyZWFtLCBtZXRo
b2QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGaWxlVGhyZWFkVGFzazAoRmlsZVN0cmVhbSog
c3RyZWFtLCBNZXRob2QgbWV0aG9kKQorICAgICAgICA6IEZpbGVUaHJlYWQ6OlRhc2soc3RyZWFt
KQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RyZWFtKCkuKm1fbWV0aG9k
KSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgorY2xhc3MgRmlsZVRocmVhZFRhc2sxIDog
cHVibGljIEZpbGVUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoRmls
ZVN0cmVhbTo6Kk1ldGhvZCkoTVAxKTsKKyAgICB0eXBlZGVmIEZpbGVUaHJlYWRUYXNrMTxQMSwg
TVAxPiBGaWxlVGhyZWFkVGFzazsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNr
VHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEZp
bGVUaHJlYWRUYXNrPiBjcmVhdGUoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQ
YXJhbTEgcGFyYW1ldGVyMSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgRmlsZVRocmVhZFRh
c2soc3RyZWFtLCBtZXRob2QsIHBhcmFtZXRlcjEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBG
aWxlVGhyZWFkVGFzazEoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEg
cGFyYW1ldGVyMSkKKyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVhbSkKKyAgICAgICAg
LCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAg
ICAgICAoKnN0cmVhbSgpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBN
UDI+CitjbGFzcyBGaWxlVGhyZWFkVGFzazIgOiBwdWJsaWMgRmlsZVRocmVhZDo6VGFzayB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChGaWxlU3RyZWFtOjoqTWV0aG9kKShNUDEsIE1QMik7
CisgICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazI8UDEsIE1QMSwgUDIsIE1QMj4gRmlsZVRocmVh
ZFRhc2s7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMT46OlBh
cmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0
czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlVGhy
ZWFkVGFzaz4gY3JlYXRlKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0x
IHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMik7
CisgICAgfQorCitwcml2YXRlOgorICAgIEZpbGVUaHJlYWRUYXNrMihGaWxlU3RyZWFtKiBzdHJl
YW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikK
KyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVhbSkKKyAgICAgICAgLCBtX21ldGhvZCht
ZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICwgbV9w
YXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0cmVhbSgpLiptX21ldGhvZCkobV9wYXJh
bWV0ZXIxLCBtX3BhcmFtZXRlcjIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9t
ZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFt
ZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+CitjbGFzcyBGaWxlVGhyZWFkVGFzazMg
OiBwdWJsaWMgRmlsZVRocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChG
aWxlU3RyZWFtOjoqTWV0aG9kKShNUDEsIE1QMiwgTVAzKTsKKyAgICB0eXBlZGVmIEZpbGVUaHJl
YWRUYXNrMzxQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzPiBGaWxlVGhyZWFkVGFzazsKKyAgICB0
eXBlZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFt
MTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1U
eXBlIFBhcmFtMjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAz
Pjo6UGFyYW1UeXBlIFBhcmFtMzsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRU
YXNrPiBjcmVhdGUoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFy
YW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCwgcGFyYW1ldGVy
MSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMyk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZpbGVU
aHJlYWRUYXNrMyhGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJh
bWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMpCisgICAgICAgIDog
RmlsZVRocmVhZDo6VGFzayhzdHJlYW0pCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAg
ICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVyMihw
YXJhbWV0ZXIyKQorICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpz
dHJlYW0oKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRl
cjMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9w
YXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQMyBtX3BhcmFtZXRlcjM7Cit9
OworCitQYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAor
ICAgIEZpbGVTdHJlYW0qIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChGaWxlU3RyZWFtOjoqbWV0
aG9kKSgpKQoreworICAgIHJldHVybiBGaWxlVGhyZWFkVGFzazA6OmNyZWF0ZSgKKyAgICAgICAg
Y2FsbGVlLAorICAgICAgICBtZXRob2QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlw
ZW5hbWUgTVAxPgorUGFzc093blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBjcmVhdGVGaWxlVGhyZWFk
VGFzaygKKyAgICBGaWxlU3RyZWFtKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoRmlsZVN0cmVh
bTo6Km1ldGhvZCkoTVAxKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSkKK3sKKyAgICByZXR1
cm4gRmlsZVRocmVhZFRhc2sxPHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwg
TVAxPjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KK1Bh
c3NPd25QdHI8RmlsZVRocmVhZDo6VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCisgICAgRmls
ZVN0cmVhbSogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKEZpbGVTdHJlYW06OiptZXRob2QpKE1Q
MSwgTVAyKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1l
dGVyMikKK3sKKyAgICByZXR1cm4gRmlsZVRocmVhZFRhc2syPHR5cGVuYW1lIENyb3NzVGhyZWFk
Q29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5
cGUsIE1QMj46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAg
ICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5h
bWUgUDMsIHR5cGVuYW1lIE1QMz4KK1Bhc3NPd25QdHI8RmlsZVRocmVhZDo6VGFzaz4gY3JlYXRl
RmlsZVRocmVhZFRhc2soCisgICAgRmlsZVN0cmVhbSogY29uc3QgY2FsbGVlLAorICAgIHZvaWQg
KEZpbGVTdHJlYW06OiptZXRob2QpKE1QMSwgTVAyLCBNUDMpLAorICAgIGNvbnN0IFAxJiBwYXJh
bWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0
ZXIzKQoreworICAgIHJldHVybiBGaWxlVGhyZWFkVGFzazM8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRD
b3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlw
ZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMz46OmNyZWF0
ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFk
Q29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNv
cHkocGFyYW1ldGVyMykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBGaWxlVGhyZWFkVGFza19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52761</attachid>
            <date>2010-04-07 11:36:00 -0700</date>
            <delta_ts>2010-04-07 18:05:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37218-20100407113559.patch</filename>
            <type>text/plain</type>
            <size>25032</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWIwMzRkMC4uYzIxMWE1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wNC0wNyAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZpbGVTdHJlYW1Qcm94eSB0aGF0IGNhbGxzIEZp
bGVTdHJlYW0gbWV0aG9kcyBvbiBGaWxlVGhyZWFkIGZvciBGaWxlQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzIxOAorCisgICAgICAgIE5vIG5l
dyB0ZXN0czsgd2lsbCBiZSBhZGRlZCB3aGVuIHdlIGhhdmUgdXBwZXIgbGF5ZXIgaW1wbGVtZW50
YXRpb25zLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAq
IGh0bWwvRmlsZVN0cmVhbVByb3h5Lmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvRmlsZVRocmVh
ZFRhc2suaDogQWRkZWQuCisKIDIwMTAtMDQtMDYgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRl
eCAyNDQ2MmUyLi4wZDEwODU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEwMjksOCArMTAyOSwxMSBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBcCiAJV2ViQ29yZS9o
dG1sL0ZpbGVTdHJlYW0uaCBcCiAJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaCBcCisJ
V2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAgXAorCVdlYkNvcmUvaHRtbC9GaWxlU3Ry
ZWFtUHJveHkuaCBcCiAJV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWQuY3BwIFwKIAlXZWJDb3JlL2h0
bWwvRmlsZVRocmVhZC5oIFwKKwlXZWJDb3JlL2h0bWwvRmlsZVRocmVhZFRhc2suaCBcCiAJV2Vi
Q29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogCVdlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3Qu
aCBcCiAJV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcCBcCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDU2N2ZkZDUu
LmQ5MWRkMjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0xNDMzLDggKzE0MzMsMTEgQEAKICAgICAgICAgICAgICdodG1sL0Zp
bGVTdHJlYW0uY3BwJywKICAgICAgICAgICAgICdodG1sL0ZpbGVTdHJlYW0uaCcsCiAgICAgICAg
ICAgICAnaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgnLAorICAgICAgICAgICAgJ2h0bWwvRmlsZVN0
cmVhbVByb3h5LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9GaWxlU3RyZWFtUHJveHkuaCcsCiAg
ICAgICAgICAgICAnaHRtbC9GaWxlVGhyZWFkLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxl
VGhyZWFkLmgnLAorICAgICAgICAgICAgJ2h0bWwvRmlsZVRocmVhZFRhc2suaCcsCiAgICAgICAg
ICAgICAnaHRtbC9Gb3JtRGF0YUxpc3QuY3BwJywKICAgICAgICAgICAgICdodG1sL0Zvcm1EYXRh
TGlzdC5oJywKICAgICAgICAgICAgICdodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcCcsCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA4
OTAzZDBmLi4wODI2MWU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS5wcm8KQEAgLTYxNSw2ICs2MTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBo
dG1sL0ZpbGUuY3BwIFwKICAgICBodG1sL0ZpbGVMaXN0LmNwcCBcCiAgICAgaHRtbC9GaWxlU3Ry
ZWFtLmNwcCBcCisgICAgaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwIFwKICAgICBodG1sL0ZpbGVU
aHJlYWQuY3BwIFwKICAgICBodG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogICAgIGh0bWwvSFRNTEFs
bENvbGxlY3Rpb24uY3BwIFwKQEAgLTEzMjYsNyArMTMyNyw5IEBAIEhFQURFUlMgKz0gXAogICAg
IGh0bWwvRmlsZUxpc3QuaCBcCiAgICAgaHRtbC9GaWxlU3RyZWFtLmggXAogICAgIGh0bWwvRmls
ZVN0cmVhbUNsaWVudC5oIFwKKyAgICBodG1sL0ZpbGVTdHJlYW1Qcm94eS5oIFwKICAgICBodG1s
L0ZpbGVUaHJlYWQuaCBcCisgICAgaHRtbC9GaWxlVGhyZWFkVGFzay5oIFwKICAgICBodG1sL0Zv
cm1EYXRhTGlzdC5oIFwKICAgICBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmggXAogICAgIGh0bWwv
SFRNTEFuY2hvckVsZW1lbnQuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpp
bmRleCA2NjE4NzQyLi43NTgzOWM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKQEAgLTMwMjQ5LDYgKzMwMjQ5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVN0cmVhbVByb3h5LmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmls
ZVN0cmVhbVByb3h5LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxodG1sXEZpbGVUaHJlYWQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
QEAgLTMwMjU3LDYgKzMwMjY1LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVRocmVhZFRhc2suaCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRm9ybURhdGFM
aXN0LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDc4MTRkOWYuLmEzNjJiYTcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjE0LDYgKzIyMTQsOSBAQAogCQk4OTUy
NTNENzExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENDExNkM0QzY4MDBDQUJGMDAgLyog
RmlsZVN0cmVhbS5jcHAgKi87IH07CiAJCTg5NTI1M0Q4MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxl
U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
OTUyNTNENTExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oICovOyB9OwogCQk4OTUyNTNE
OTExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzRDYxMTZDNEM2ODAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1DbGllbnQuaCAqLzsgfTsKKwkJODk1MjUzREMxMTZDNEVGNTAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1Qcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNw
cCAqLzsgfTsKKwkJODk1MjUzREQxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREIx
MTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovOyB9OworCQk4OTUyNTNERjEx
NkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RFMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxl
VGhyZWFkVGFzay5oICovOyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdy
b3VwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
MDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAyQjBC
RjBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdy
b3VwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
OTMwNUIyNEQwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGlt
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
NzY3MCw2ICs3NjczLDkgQEAKIAkJODk1MjUzRDQxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJl
YW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVN0cmVhbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1M0Q1MTE2QzRDNjgwMENBQkYw
MCAvKiBGaWxlU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVT
dHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODk1MjUzRDYxMTZDNEM2ODAw
Q0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmlsZVN0cmVhbUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTdHJlYW1Qcm94eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5NTI1M0RCMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3Ry
ZWFtUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVN0cmVhbVBy
b3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5NTI1M0RFMTE2QzRGMDYwMENB
QkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWxlVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAyQjBC
QzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTI5NTksNiArMTI5NjUsOSBAQAogCQk5M0VFQzFFQzA5QzI4Nzc3MDBDNTE1RDEgLyogaHRt
bCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJODk1MjUz
REUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi8sCisJCQkJODk1MjUzREEx
MTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgKi8sCisJCQkJODk1MjUzREIx
MTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovLAogCQkJCTg5NTI1M0Q0MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLywKIAkJCQk4OTUyNTNENTExNkM0QzY4
MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oICovLAogCQkJCTg5NTI1M0Q2MTE2QzRDNjgwMENBQkYw
MCAvKiBGaWxlU3RyZWFtQ2xpZW50LmggKi8sCkBAIC0xODgyNSw2ICsxODgzNCw4IEBACiAJCQkJ
MjU0MkY0REIxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4OTUyNTNEODExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODk1MjUzRDkxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1D
bGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0REMTE2QzRFRjUwMENBQkYwMCAvKiBG
aWxlU3RyZWFtUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0RGMTE2QzRGMDYwMENB
QkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMTA0Niw2ICsyMTA1
Nyw3IEBACiAJCQkJODk1MjUzNTIxMTY0MUIzNDAwQ0FCRjAwIC8qIEZpbGVUaHJlYWQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJl
SW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5NTI1M0Q3MTE2QzRDNjgwMENBQkYw
MCAvKiBGaWxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg5NTI1M0RDMTE2QzRFRjUw
MENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxlU3Ry
ZWFtUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDc5MjMK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcApAQCAt
MCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRklMRV9SRUFE
RVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKKworI2luY2x1ZGUgIkZpbGVTdHJlYW1Qcm94eS5o
IgorCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkZpbGVTdHJlYW0uaCIKKyNpbmNsdWRl
ICJGaWxlVGhyZWFkLmgiCisjaW5jbHVkZSAiRmlsZVRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJH
ZW5lcmljV29ya2VyVGFzay5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zp
bGVTdHJlYW1Qcm94eTo6RmlsZVN0cmVhbVByb3h5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0
KQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zdHJlYW0oRmlsZVN0cmVhbTo6Y3Jl
YXRlKHRoaXMpKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVh
ZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjpzdGFydCkpOworfQorCitGaWxlU3Ry
ZWFtUHJveHk6On5GaWxlU3RyZWFtUHJveHkoKQoreworICAgIGlmIChmaWxlVGhyZWFkKCkpCisg
ICAgICAgIGZpbGVUaHJlYWQoKS0+dW5zY2hlZHVsZVRhc2tzKG1fc3RyZWFtLmdldCgpKTsKK30K
Kwordm9pZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JSZWFkKEJsb2IqIGJsb2IpCit7CisgICAg
ZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayhtX3N0cmVhbS5nZXQo
KSwgJkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkLCBibG9iKSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVh
bVByb3h5OjpvcGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGZpbGVUaHJl
YWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxl
U3RyZWFtOjpvcGVuRm9yV3JpdGUsIHBhdGgpKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6
OmNsb3NlKCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRU
YXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6Y2xvc2UpKTsKK30KKwordm9pZCBGaWxl
U3RyZWFtUHJveHk6OnJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQoreworICAgIGZpbGVU
aHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCksICZG
aWxlU3RyZWFtOjpyZWFkLCBidWZmZXIsIGxlbmd0aCkpOworfQorCit2b2lkIEZpbGVTdHJlYW1Q
cm94eTo6d3JpdGUoQmxvYiogYmxvYiwgbG9uZyBsb25nIHBvc2l0aW9uLCBzaXplX3QgbGVuZ3Ro
KQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9z
dHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjp3cml0ZSwgYmxvYiwgcG9zaXRpb24sIGxlbmd0aCkp
OworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6dHJ1bmNhdGUobG9uZyBsb25nIHBvc2l0aW9u
KQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9z
dHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjp0cnVuY2F0ZSwgcG9zaXRpb24pKTsKK30KKworRmls
ZVRocmVhZCogRmlsZVN0cmVhbVByb3h5OjpmaWxlVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQobV9j
b250ZXh0LT5maWxlVGhyZWFkKCkpOyAvLyBGSVhNRQorICAgIHJldHVybiBtX2NvbnRleHQtPmZp
bGVUaHJlYWQoKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmFib3J0KCkKK3sKKyAgICBp
ZiAoZmlsZVRocmVhZCgpKQorICAgICAgICBmaWxlVGhyZWFkKCktPnVuc2NoZWR1bGVUYXNrcyht
X3N0cmVhbS5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeUdldFNpemVPbkNvbnRleHQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRmlsZVN0cmVhbVByb3h5KiBzdHJlYW0s
IGxvbmcgbG9uZyBzaXplKQoreworICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQo
KSk7CisgICAgaWYgKHN0cmVhbS0+Y2xpZW50KCkpCisgICAgICAgIHN0cmVhbS0+Y2xpZW50KCkt
PmRpZEdldFNpemUoc2l6ZSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRHZXRTaXpl
KGxvbmcgbG9uZyBzaXplKQoreworICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZub3RpZnlHZXRTaXplT25Db250ZXh0LCB0aGlzLCBzaXplKSk7Cit9CisKK3N0YXRp
YyB2b2lkIG5vdGlmeVJlYWRPbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgRmlsZVN0cmVhbVByb3h5KiBzdHJlYW0sIGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1Jl
YWQpCit7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAo
c3RyZWFtLT5jbGllbnQoKSkKKyAgICAgICAgc3RyZWFtLT5jbGllbnQoKS0+ZGlkUmVhZChkYXRh
LCBieXRlc1JlYWQpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlkUmVhZChjb25zdCBj
aGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFkKQoreworICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlSZWFkT25Db250ZXh0LCB0aGlzLCBkYXRhLCBieXRlc1Jl
YWQpKTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5V3JpdGVPbkNvbnRleHQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgRmlsZVN0cmVhbVByb3h5KiBzdHJlYW0sIGludCBud3JpdHRl
bikKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmIChz
dHJlYW0tPmNsaWVudCgpKQorICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5kaWRXcml0ZShud3Jp
dHRlbik7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRXcml0ZShpbnQgbndyaXR0ZW4p
Cit7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeVdy
aXRlT25Db250ZXh0LCB0aGlzLCBud3JpdHRlbikpOworfQorCit2b2lkIG5vdGlmeVN0YXJ0T25D
b250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1Qcm94eSog
c3RyZWFtKQoreworICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAg
aWYgKHN0cmVhbS0+Y2xpZW50KCkpCisgICAgICAgIHN0cmVhbS0+Y2xpZW50KCktPmRpZFN0YXJ0
KCk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRTdGFydCgpCit7CisgICAgbV9jb250
ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeVN0YXJ0T25Db250ZXh0LCB0
aGlzKSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeUZpbmlzaE9uQ29udGV4dChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFtUHJveHkqIHN0cmVhbSkKK3sKKyAgICBB
U1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmIChzdHJlYW0tPmNsaWVu
dCgpKQorICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5kaWRGaW5pc2goKTsKK30KKwordm9pZCBG
aWxlU3RyZWFtUHJveHk6OmRpZEZpbmlzaCgpCit7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhj
cmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeUZpbmlzaE9uQ29udGV4dCwgdGhpcykpOworfQorCitz
dGF0aWMgdm9pZCBub3RpZnlGYWlsT25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIEZpbGVTdHJlYW1Qcm94eSogc3RyZWFtLCBFeGNlcHRpb25Db2RlIGVjKQoreworICAg
IEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgaWYgKHN0cmVhbS0+Y2xp
ZW50KCkpCisgICAgICAgIHN0cmVhbS0+Y2xpZW50KCktPmRpZEZhaWwoZWMpOworfQorCit2b2lk
IEZpbGVTdHJlYW1Qcm94eTo6ZGlkRmFpbChFeGNlcHRpb25Db2RlIGVjKQoreworICAgIG1fY29u
dGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlGYWlsT25Db250ZXh0LCB0
aGlzLCBlYykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoRklMRV9XUklURVIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5
LmggYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYjFmZWQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9G
aWxlU3RyZWFtUHJveHkuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmlsZVN0cmVhbVByb3h5
X2gKKyNkZWZpbmUgRmlsZVN0cmVhbVByb3h5X2gKKworI2lmIEVOQUJMRShGSUxFX1JFQURFUikg
fHwgRU5BQkxFKEZJTEVfV1JJVEVSKQorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2lu
Y2x1ZGUgIkZpbGVTdHJlYW1DbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJsb2I7CitjbGFzcyBGaWxlU3RyZWFtOworY2xh
c3MgRmlsZVRocmVhZDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTdHJp
bmc7CisKK2NsYXNzIEZpbGVTdHJlYW1Qcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVTdHJl
YW1Qcm94eT4sIHB1YmxpYyBGaWxlU3RyZWFtQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGaWxlU3RyZWFtUHJveHk+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEZpbGVTdHJlYW1Qcm94eShjb250ZXh0LCBjbGllbnQpKTsKKyAgICB9
CisgICAgdmlydHVhbCB+RmlsZVN0cmVhbVByb3h5KCk7CisKKyAgICB2b2lkIG9wZW5Gb3JSZWFk
KEJsb2IqIGJsb2IpOworICAgIHZvaWQgb3BlbkZvcldyaXRlKGNvbnN0IFN0cmluZyYgcGF0aCk7
CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgcmVhZChjaGFyKiBidWZmZXIsIGludCBsZW5n
dGgpOworICAgIHZvaWQgd3JpdGUoQmxvYiogYmxvYiwgbG9uZyBsb25nIHBvc2l0aW9uLCBzaXpl
X3QgbGVuZ3RoKTsKKyAgICB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbik7CisKKyAg
ICB2b2lkIGFib3J0KCk7CisKKyAgICBGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7
IHJldHVybiBtX2NsaWVudDsgfQorCitwcm90ZWN0ZWQ6CisgICAgRmlsZVN0cmVhbVByb3h5KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtQ2xpZW50Kik7CisKKyAgICAvLyBGaWxl
U3RyZWFtQ2xpZW50IG1ldGhvZHMuCisgICAgdmlydHVhbCB2b2lkIGRpZEdldFNpemUobG9uZyBs
b25nKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZChjb25zdCBjaGFyKiwgaW50KTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkV3JpdGUoaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwo
RXhjZXB0aW9uQ29kZSk7CisKKyAgICBGaWxlVGhyZWFkKiBmaWxlVGhyZWFkKCk7CisgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogbV9jb250ZXh0OworICAgIEZpbGVTdHJlYW1DbGllbnQqIG1f
Y2xpZW50OworICAgIFJlZlB0cjxGaWxlU3RyZWFtPiBtX3N0cmVhbTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1JFQURFUikgfHwgRU5BQkxF
KEZJTEVfV1JJVEVSKQorCisjZW5kaWYgLy8gRmlsZVN0cmVhbVByb3h5X2gKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oIGIvV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWRU
YXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRjNTlkOAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oCkBAIC0wLDAgKzEsMjM4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgRmlsZVRocmVhZFRhc2tfaAorI2RlZmluZSBGaWxlVGhyZWFkVGFza19oCisK
KyNpbmNsdWRlICJDcm9zc1RocmVhZENvcGllci5oIgorI2luY2x1ZGUgIkZpbGVUaHJlYWQuaCIK
KyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gVHJhaXRzIGZvciB0aGUgVGFzay4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBGaWxlVGhyZWFkVGFza1RyYWl0cyB7CisgICAgdHlwZWRlZiBjb25zdCBU
JiBQYXJhbVR5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRocmVh
ZFRhc2tUcmFpdHM8VCo+IHsKKyAgICB0eXBlZGVmIFQqIFBhcmFtVHlwZTsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGaWxlVGhyZWFkVGFza1RyYWl0czxQYXNzUmVmUHRyPFQ+
ID4geworICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxUPiBQYXJhbVR5cGU7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHM8UGFzc093blB0cjxUPiA+
IHsKKyAgICB0eXBlZGVmIFBhc3NPd25QdHI8VD4gUGFyYW1UeXBlOworfTsKKworY2xhc3MgRmls
ZVRocmVhZFRhc2swIDogcHVibGljIEZpbGVUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5
cGVkZWYgdm9pZCAoRmlsZVN0cmVhbTo6Kk1ldGhvZCkoKTsKKyAgICB0eXBlZGVmIEZpbGVUaHJl
YWRUYXNrMCBGaWxlVGhyZWFkVGFzazsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJl
YWRUYXNrPiBjcmVhdGUoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEZpbGVUaHJlYWRUYXNrMChGaWxlU3RyZWFtKiBzdHJlYW0sIE1l
dGhvZCBtZXRob2QpCisgICAgICAgIDogRmlsZVRocmVhZDo6VGFzayhzdHJlYW0pCisgICAgICAg
ICwgbV9tZXRob2QobWV0aG9kKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdHJlYW0oKS4qbV9tZXRob2QpKCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDE+CitjbGFzcyBGaWxlVGhyZWFkVGFzazEgOiBwdWJsaWMgRmls
ZVRocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChGaWxlU3RyZWFtOjoq
TWV0aG9kKShNUDEpOworICAgIHR5cGVkZWYgRmlsZVRocmVhZFRhc2sxPFAxLCBNUDE+IEZpbGVU
aHJlYWRUYXNrOworICAgIHR5cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDE+
OjpQYXJhbVR5cGUgUGFyYW0xOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRh
c2s+IGNyZWF0ZShGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJh
bWV0ZXIxKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0s
IG1ldGhvZCwgcGFyYW1ldGVyMSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZpbGVUaHJlYWRU
YXNrMShGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIx
KQorICAgICAgICA6IEZpbGVUaHJlYWQ6OlRhc2soc3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9k
KG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3Ry
ZWFtKCkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBN
ZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KK2NsYXNz
IEZpbGVUaHJlYWRUYXNrMiA6IHB1YmxpYyBGaWxlVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIHZvaWQgKEZpbGVTdHJlYW06OipNZXRob2QpKE1QMSwgTVAyKTsKKyAgICB0eXBl
ZGVmIEZpbGVUaHJlYWRUYXNrMjxQMSwgTVAxLCBQMiwgTVAyPiBGaWxlVGhyZWFkVGFzazsKKyAg
ICB0eXBlZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBh
cmFtMTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFy
YW1UeXBlIFBhcmFtMjsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrPiBj
cmVhdGUoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVy
MSwgUGFyYW0yIHBhcmFtZXRlcjIpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJl
YWRUYXNrKHN0cmVhbSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgRmlsZVRocmVhZFRhc2syKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9k
IG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQorICAgICAgICA6
IEZpbGVUaHJlYWQ6OlRhc2soc3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAg
ICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIo
cGFyYW1ldGVyMikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNr
KCkKKyAgICB7CisgICAgICAgICgqc3RyZWFtKCkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1f
cGFyYW1ldGVyMik7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAg
ICBQMSBtX3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlw
ZW5hbWUgUDMsIHR5cGVuYW1lIE1QMz4KK2NsYXNzIEZpbGVUaHJlYWRUYXNrMyA6IHB1YmxpYyBG
aWxlVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKEZpbGVTdHJlYW06
OipNZXRob2QpKE1QMSwgTVAyLCBNUDMpOworICAgIHR5cGVkZWYgRmlsZVRocmVhZFRhc2szPFAx
LCBNUDEsIFAyLCBNUDIsIFAzLCBNUDM+IEZpbGVUaHJlYWRUYXNrOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5
cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0y
OworICAgIHR5cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5
cGUgUGFyYW0zOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRhc2s+IGNyZWF0
ZShGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQ
YXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMpCisgICAgeworICAgICAgICByZXR1
cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0cmVhbSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0
ZXIyLCBwYXJhbWV0ZXIzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmlsZVRocmVhZFRhc2sz
KEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBh
cmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICAgICAgOiBGaWxlVGhyZWFk
OjpUYXNrKHN0cmVhbSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9w
YXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIp
CisgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0cmVhbSgpLipt
X21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMyk7CisgICAg
fQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7
CisgICAgUDIgbV9wYXJhbWV0ZXIyOworICAgIFAzIG1fcGFyYW1ldGVyMzsKK307CisKK1Bhc3NP
d25QdHI8RmlsZVRocmVhZDo6VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCisgICAgRmlsZVN0
cmVhbSogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKEZpbGVTdHJlYW06OiptZXRob2QpKCkpCit7
CisgICAgcmV0dXJuIEZpbGVUaHJlYWRUYXNrMDo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisg
ICAgICAgIG1ldGhvZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDE+
CitQYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAorICAg
IEZpbGVTdHJlYW0qIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChGaWxlU3RyZWFtOjoqbWV0aG9k
KShNUDEpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxKQoreworICAgIHJldHVybiBGaWxlVGhy
ZWFkVGFzazE8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDE+OjpjcmVh
dGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVh
ZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQ
MSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgorUGFzc093blB0cjxG
aWxlVGhyZWFkOjpUYXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKKyAgICBGaWxlU3RyZWFtKiBj
b25zdCBjYWxsZWUsCisgICAgdm9pZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoTVAxLCBNUDIpLAor
ICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyKQorewor
ICAgIHJldHVybiBGaWxlVGhyZWFkVGFzazI8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+
OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyPjo6
Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NU
aHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENv
cGllcjxQMj46OmNvcHkocGFyYW1ldGVyMikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwg
dHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlw
ZW5hbWUgTVAzPgorUGFzc093blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBjcmVhdGVGaWxlVGhyZWFk
VGFzaygKKyAgICBGaWxlU3RyZWFtKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoRmlsZVN0cmVh
bTo6Km1ldGhvZCkoTVAxLCBNUDIsIE1QMyksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisg
ICAgY29uc3QgUDImIHBhcmFtZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMpCit7Cisg
ICAgcmV0dXJuIEZpbGVUaHJlYWRUYXNrMzx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46
OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5
cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzPjo6Y3JlYXRlKAorICAgICAg
ICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+
Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHko
cGFyYW1ldGVyMiksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0
ZXIzKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZpbGVUaHJl
YWRUYXNrX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52817</attachid>
            <date>2010-04-07 18:05:09 -0700</date>
            <delta_ts>2010-04-08 11:49:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37218-20100407180507.patch</filename>
            <type>text/plain</type>
            <size>27197</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWIwMzRkMC4uYTQ0NjA3MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0wNC0wNyAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZpbGVTdHJlYW1Qcm94eSB0aGF0IGNhbGxzIEZp
bGVTdHJlYW0gbWV0aG9kcyBvbiBGaWxlVGhyZWFkIGZvciBGaWxlQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzIxOAorCisgICAgICAgIE5vIG5l
dyB0ZXN0czsgd2lsbCBiZSBhZGRlZCB3aGVuIHdlIGhhdmUgdXBwZXIgbGF5ZXIgaW1wbGVtZW50
YXRpb25zLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZVN0cmVhbTo6c3RvcCk6CisgICAgICAgICogaHRtbC9GaWxlU3RyZWFtLmg6CisgICAgICAgICog
aHRtbC9GaWxlU3RyZWFtQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3RyZWFtQ2xp
ZW50OjpkaWRTdG9wKToKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHA6IEFkZGVk
LgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbVByb3h5Lmg6IEFkZGVkLgorICAgICAgICAqIGh0
bWwvRmlsZVRocmVhZFRhc2suaDogQWRkZWQuCisKIDIwMTAtMDQtMDYgIEFuZHkgRXN0ZXMgIDxh
ZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IERhbiBCZXJuc3Rl
aW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQppbmRleCAyNDQ2MmUyLi4wZDEwODU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEwMjksOCArMTAyOSwx
MSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBc
CiAJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uaCBcCiAJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1D
bGllbnQuaCBcCisJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAgXAorCVdlYkNvcmUv
aHRtbC9GaWxlU3RyZWFtUHJveHkuaCBcCiAJV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWQuY3BwIFwK
IAlXZWJDb3JlL2h0bWwvRmlsZVRocmVhZC5oIFwKKwlXZWJDb3JlL2h0bWwvRmlsZVRocmVhZFRh
c2suaCBcCiAJV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogCVdlYkNvcmUvaHRtbC9G
b3JtRGF0YUxpc3QuaCBcCiAJV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcCBcCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDU2N2ZkZDUuLmQ5MWRkMjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNDMzLDggKzE0MzMsMTEgQEAKICAgICAgICAg
ICAgICdodG1sL0ZpbGVTdHJlYW0uY3BwJywKICAgICAgICAgICAgICdodG1sL0ZpbGVTdHJlYW0u
aCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgnLAorICAgICAgICAgICAg
J2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9GaWxlU3RyZWFt
UHJveHkuaCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxlVGhyZWFkLmNwcCcsCiAgICAgICAgICAg
ICAnaHRtbC9GaWxlVGhyZWFkLmgnLAorICAgICAgICAgICAgJ2h0bWwvRmlsZVRocmVhZFRhc2su
aCcsCiAgICAgICAgICAgICAnaHRtbC9Gb3JtRGF0YUxpc3QuY3BwJywKICAgICAgICAgICAgICdo
dG1sL0Zvcm1EYXRhTGlzdC5oJywKICAgICAgICAgICAgICdodG1sL0hUTUxBbGxDb2xsZWN0aW9u
LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3Jl
LnBybwppbmRleCA4OTAzZDBmLi4wODI2MWU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUu
cHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTYxNSw2ICs2MTUsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBodG1sL0ZpbGUuY3BwIFwKICAgICBodG1sL0ZpbGVMaXN0LmNwcCBcCiAgICAg
aHRtbC9GaWxlU3RyZWFtLmNwcCBcCisgICAgaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwIFwKICAg
ICBodG1sL0ZpbGVUaHJlYWQuY3BwIFwKICAgICBodG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogICAg
IGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwIFwKQEAgLTEzMjYsNyArMTMyNyw5IEBAIEhFQURF
UlMgKz0gXAogICAgIGh0bWwvRmlsZUxpc3QuaCBcCiAgICAgaHRtbC9GaWxlU3RyZWFtLmggXAog
ICAgIGh0bWwvRmlsZVN0cmVhbUNsaWVudC5oIFwKKyAgICBodG1sL0ZpbGVTdHJlYW1Qcm94eS5o
IFwKICAgICBodG1sL0ZpbGVUaHJlYWQuaCBcCisgICAgaHRtbC9GaWxlVGhyZWFkVGFzay5oIFwK
ICAgICBodG1sL0Zvcm1EYXRhTGlzdC5oIFwKICAgICBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmgg
XAogICAgIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagppbmRleCA2NjE4NzQyLi43NTgzOWM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKQEAgLTMwMjQ5LDYgKzMwMjQ5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmls
ZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVN0cmVhbVByb3h5
LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGh0bWxcRmlsZVN0cmVhbVByb3h5LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEZpbGVUaHJlYWQuY3BwIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0KQEAgLTMwMjU3LDYgKzMwMjY1LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4N
CiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVRocmVhZFRhc2suaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0
bWxcRm9ybURhdGFMaXN0LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc4MTRkOWYuLmEzNjJiYTcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjE0LDYgKzIyMTQs
OSBAQAogCQk4OTUyNTNENzExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENDExNkM0QzY4
MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgKi87IH07CiAJCTg5NTI1M0Q4MTE2QzRDNjgwMENB
QkYwMCAvKiBGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4OTUyNTNENTExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oICovOyB9
OwogCQk4OTUyNTNEOTExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzRDYxMTZDNEM2
ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLzsgfTsKKwkJODk1MjUzREMxMTZDNEVG
NTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0
cmVhbVByb3h5LmNwcCAqLzsgfTsKKwkJODk1MjUzREQxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVT
dHJlYW1Qcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODk1MjUzREIxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovOyB9Owor
CQk4OTUyNTNERjExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RFMTE2QzRGMDYwMENB
QkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovOyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VF
ODMgLyogUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9
OwogCQk5MzAyQjBCRjBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VF
ODMgLyogUGFnZUdyb3VwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJOTMwNUIyNEQwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBD
Mjg4NTUgLyogVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNzY3MCw2ICs3NjczLDkgQEAKIAkJODk1MjUzRDQxMTZDNEM2ODAwQ0FCRjAw
IC8qIEZpbGVTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RmlsZVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1M0Q1MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZpbGVTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODk1MjUz
RDYxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmlsZVN0cmVhbUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTdHJlYW1Qcm94eS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5NTI1M0RCMTE2QzRFRjUwMENBQkYw
MCAvKiBGaWxlU3RyZWFtUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RmlsZVN0cmVhbVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5NTI1M0RF
MTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWxlVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUdyb3VwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTI5NTksNiArMTI5NjUsOSBAQAogCQk5M0VFQzFFQzA5QzI4Nzc3MDBD
NTE1RDEgLyogaHRtbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi8sCisJ
CQkJODk1MjUzREExMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgKi8sCisJ
CQkJODk1MjUzREIxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovLAogCQkJ
CTg5NTI1M0Q0MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLywKIAkJCQk4OTUy
NTNENTExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oICovLAogCQkJCTg5NTI1M0Q2MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtQ2xpZW50LmggKi8sCkBAIC0xODgyNSw2ICsxODgz
NCw4IEBACiAJCQkJMjU0MkY0REIxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTUyNTNEODExNkM0QzY4MDBDQUJGMDAgLyogRmls
ZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk1MjUzRDkxMTZDNEM2ODAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1DbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0REMTE2QzRFRjUw
MENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0RG
MTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0y
MTA0Niw2ICsyMTA1Nyw3IEBACiAJCQkJODk1MjUzNTIxMTY0MUIzNDAwQ0FCRjAwIC8qIEZpbGVU
aHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2IC8q
IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5NTI1M0Q3MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg5NTI1
M0RDMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAgYi9XZWJDb3JlL2h0bWwv
RmlsZVN0cmVhbS5jcHAKaW5kZXggNTNjOTkyYy4uODRhMjhkNiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0ZpbGVTdHJlYW0uY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcApA
QCAtNTYsNiArNTYsMTMgQEAgdm9pZCBGaWxlU3RyZWFtOjpzdGFydCgpCiAgICAgbV9jbGllbnQt
PmRpZFN0YXJ0KCk7CiB9CiAKK3ZvaWQgRmlsZVN0cmVhbTo6c3RvcCgpCit7CisgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CisgICAgY2xvc2UoKTsKKyAgICBtX2NsaWVudC0+ZGlkU3RvcCgp
OworfQorCiB2b2lkIEZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKEJsb2IqKQogewogICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0u
aCBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmgKaW5kZXggYmE3YzA1Ni4uYmRhOGZjNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uaAorKysgYi9XZWJDb3JlL2h0bWwvRmls
ZVN0cmVhbS5oCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5GaWxlU3Ry
ZWFtKCk7CiAKICAgICB2b2lkIHN0YXJ0KCk7CisgICAgdm9pZCBzdG9wKCk7CiAKICAgICB2b2lk
IG9wZW5Gb3JSZWFkKEJsb2IqKTsKICAgICB2b2lkIG9wZW5Gb3JXcml0ZShjb25zdCBTdHJpbmcm
IHBhdGgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaCBiL1dl
YkNvcmUvaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgKaW5kZXggOWQyNGJkZi4uZTFhZWM1MyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaAorKysgYi9XZWJDb3JlL2h0
bWwvRmlsZVN0cmVhbUNsaWVudC5oCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIC8v
IEZvciBib3RoIHJlYWRpbmcgYW5kIHdyaXRpbmcuCiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0
KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFN0b3AoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluaXNoKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoRXhjZXB0aW9uQ29kZSkg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEdldFNpemUobG9uZyBsb25nKSB7IH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGVT
dHJlYW1Qcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg2YTQ1
NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwCkBA
IC0wLDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShGSUxFX1JF
QURFUikgfHwgRU5BQkxFKEZJTEVfV1JJVEVSKQorCisjaW5jbHVkZSAiRmlsZVN0cmVhbVByb3h5
LmgiCisKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiRmlsZVN0cmVhbS5oIgorI2luY2x1
ZGUgIkZpbGVUaHJlYWQuaCIKKyNpbmNsdWRlICJGaWxlVGhyZWFkVGFzay5oIgorI2luY2x1ZGUg
IkdlbmVyaWNXb3JrZXJUYXNrLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
RmlsZVN0cmVhbVByb3h5OjpGaWxlU3RyZWFtUHJveHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQorICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3N0cmVhbShGaWxlU3RyZWFtOjpj
cmVhdGUodGhpcykpCit7CisgICAgbV9zZWxmUmVmID0gdGhpczsKKyAgICBmaWxlVGhyZWFkKCkt
PnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVh
bTo6c3RhcnQpKTsKK30KKworRmlsZVN0cmVhbVByb3h5Ojp+RmlsZVN0cmVhbVByb3h5KCkKK3sK
K30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JSZWFkKEJsb2IqIGJsb2IpCit7Cisg
ICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayhtX3N0cmVhbS5n
ZXQoKSwgJkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkLCBibG9iKSk7Cit9CisKK3ZvaWQgRmlsZVN0
cmVhbVByb3h5OjpvcGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGZpbGVU
aHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCksICZG
aWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUsIHBhdGgpKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJv
eHk6OmNsb3NlKCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJl
YWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6Y2xvc2UpKTsKK30KKwordm9pZCBG
aWxlU3RyZWFtUHJveHk6OnJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQoreworICAgIGZp
bGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCks
ICZGaWxlU3RyZWFtOjpyZWFkLCBidWZmZXIsIGxlbmd0aCkpOworfQorCit2b2lkIEZpbGVTdHJl
YW1Qcm94eTo6d3JpdGUoQmxvYiogYmxvYiwgbG9uZyBsb25nIHBvc2l0aW9uLCBpbnQgbGVuZ3Ro
KQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9z
dHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjp3cml0ZSwgYmxvYiwgcG9zaXRpb24sIGxlbmd0aCkp
OworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6dHJ1bmNhdGUobG9uZyBsb25nIHBvc2l0aW9u
KQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9z
dHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjp0cnVuY2F0ZSwgcG9zaXRpb24pKTsKK30KKworRmls
ZVRocmVhZCogRmlsZVN0cmVhbVByb3h5OjpmaWxlVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQobV9j
b250ZXh0LT5maWxlVGhyZWFkKCkpOworICAgIHJldHVybiBtX2NvbnRleHQtPmZpbGVUaHJlYWQo
KTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmFib3J0KCkKK3sKKyAgICBmaWxlVGhyZWFk
KCktPnVuc2NoZWR1bGVUYXNrcyhtX3N0cmVhbS5nZXQoKSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVh
bVByb3h5OjpzdG9wKCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVU
aHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6c3RvcCkpOworfQorCitzdGF0
aWMgdm9pZCBub3RpZnlHZXRTaXplT25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGxvbmcgbG9uZyBzaXplKQoreworICAgIEFT
U0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgaWYgKHByb3h5LT5jbGllbnQo
KSkKKyAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRHZXRTaXplKHNpemUpOworfQorCit2b2lk
IEZpbGVTdHJlYW1Qcm94eTo6ZGlkR2V0U2l6ZShsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBtX2Nv
bnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5R2V0U2l6ZU9uQ29udGV4
dCwgdGhpcywgc2l6ZSkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlSZWFkT25Db250ZXh0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGNv
bnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpCit7CisgICAgQVNTRVJUKGNvbnRleHQtPmlz
Q29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94
eS0+Y2xpZW50KCktPmRpZFJlYWQoZGF0YSwgYnl0ZXNSZWFkKTsKK30KKwordm9pZCBGaWxlU3Ry
ZWFtUHJveHk6OmRpZFJlYWQoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVzUmVhZCkKK3sKKyAg
ICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5UmVhZE9uQ29u
dGV4dCwgdGhpcywgZGF0YSwgYnl0ZXNSZWFkKSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeVdy
aXRlT25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1Q
cm94eSogcHJveHksIGludCBieXRlc1dyaXR0ZW4pCit7CisgICAgQVNTRVJUKGNvbnRleHQtPmlz
Q29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94
eS0+Y2xpZW50KCktPmRpZFdyaXRlKGJ5dGVzV3JpdHRlbik7Cit9CisKK3ZvaWQgRmlsZVN0cmVh
bVByb3h5OjpkaWRXcml0ZShpbnQgYnl0ZXNXcml0dGVuKQoreworICAgIG1fY29udGV4dC0+cG9z
dFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlXcml0ZU9uQ29udGV4dCwgdGhpcywgYnl0
ZXNXcml0dGVuKSk7Cit9CisKK3ZvaWQgbm90aWZ5U3RhcnRPbkNvbnRleHQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSkKK3sKKyAgICBBU1NF
UlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmIChwcm94eS0+Y2xpZW50KCkp
CisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkU3RhcnQoKTsKK30KKwordm9pZCBGaWxlU3Ry
ZWFtUHJveHk6OmRpZFN0YXJ0KCkKK3sKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNh
bGxiYWNrVGFzaygmbm90aWZ5U3RhcnRPbkNvbnRleHQsIHRoaXMpKTsKK30KKworc3RhdGljIHZv
aWQgbm90aWZ5RmluaXNoT25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEZpbGVTdHJlYW1Qcm94eSogcHJveHkpCit7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4
dFRocmVhZCgpKTsKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xp
ZW50KCktPmRpZEZpbmlzaCgpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlkRmluaXNo
KCkKK3sKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5
RmluaXNoT25Db250ZXh0LCB0aGlzKSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeUZhaWxPbkNv
bnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRmlsZVN0cmVhbVByb3h5KiBw
cm94eSwgRXhjZXB0aW9uQ29kZSBlYykKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0
VGhyZWFkKCkpOworICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5jbGll
bnQoKS0+ZGlkRmFpbChlYyk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRGYWlsKEV4
Y2VwdGlvbkNvZGUgZWMpCit7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFj
a1Rhc2soJm5vdGlmeUZhaWxPbkNvbnRleHQsIHRoaXMsIGVjKSk7Cit9CisKK3N0YXRpYyB2b2lk
IG5vdGlmeVN0b3BPbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRmls
ZVN0cmVhbVByb3h5KiBwcm94eSkKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhy
ZWFkKCkpOworICAgIHByb3h5LT5kaWRTdG9wQW5kRGVzdHJveSgpOworfQorCit2b2lkIEZpbGVT
dHJlYW1Qcm94eTo6ZGlkU3RvcCgpCit7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVD
YWxsYmFja1Rhc2soJm5vdGlmeVN0b3BPbkNvbnRleHQsIHRoaXMpKTsKK30KKwordm9pZCBGaWxl
U3RyZWFtUHJveHk6OmRpZFN0b3BBbmREZXN0cm95KCkKK3sKKyAgICAvLyBOb3cgaXQncyByZWFk
eSB0byBiZSBkZXN0cm95ZWQuCisgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgbV9zZWxmUmVm
ID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJ
TEVfV1JJVEVSKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5oIGIv
V2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjdmOGYzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbVByb3h5LmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpbGVTdHJlYW1Qcm94eV9oCisj
ZGVmaW5lIEZpbGVTdHJlYW1Qcm94eV9oCisKKyNpZiBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVO
QUJMRShGSUxFX1dSSVRFUikKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRl
ICJGaWxlU3RyZWFtQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBCbG9iOworY2xhc3MgRmlsZVN0cmVhbTsKK2NsYXNzIEZp
bGVUaHJlYWQ7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgU3RyaW5nOwor
CisvLyBBIHByb3h5IG1vZHVsZSB0aGF0IGNhbGxzIGNvcnJlc3BvbmRpbmcgRmlsZVN0cmVhbSBt
ZXRob2RzIG9uIHRoZSBmaWxlIHRocmVhZC4gIE5vdGU6IHlvdSBtdXN0IGNhbGwgc3RvcCgpIHRv
IGRlc3Ryb3kgYSBGaWxlU3RyZWFtUHJveHkgaW5zdGFuY2UsIGUuZy4gaW4gdGhlIGRlc2N0cnVj
dG9yIG9mIGFuIG9iamVjdCB0aGF0IGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBwcm94eS4KK2Ns
YXNzIEZpbGVTdHJlYW1Qcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVTdHJlYW1Qcm94eT4s
IHB1YmxpYyBGaWxlU3RyZWFtQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxGaWxlU3RyZWFtUHJveHk+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEZpbGVTdHJlYW1Qcm94eShjb250ZXh0LCBjbGllbnQpKTsKKyAgICB9CisgICAgdmly
dHVhbCB+RmlsZVN0cmVhbVByb3h5KCk7CisKKyAgICB2b2lkIG9wZW5Gb3JSZWFkKEJsb2IqIGJs
b2IpOworICAgIHZvaWQgb3BlbkZvcldyaXRlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdm9p
ZCBjbG9zZSgpOworICAgIHZvaWQgcmVhZChjaGFyKiBidWZmZXIsIGludCBsZW5ndGgpOworICAg
IHZvaWQgd3JpdGUoQmxvYiogYmxvYiwgbG9uZyBsb25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKTsK
KyAgICB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbik7CisKKyAgICB2b2lkIGFib3J0
KCk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgdm9pZCBkaWRTdG9wQW5kRGVzdHJveSgpOworCisg
ICAgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0K
KworcHJvdGVjdGVkOgorICAgIEZpbGVTdHJlYW1Qcm94eShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgRmlsZVN0cmVhbUNsaWVudCopOworCisgICAgLy8gRmlsZVN0cmVhbUNsaWVudCBtZXRob2Rz
LgorICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRTaXplKGxvbmcgbG9uZyk7CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlYWQoY29uc3QgY2hhciosIGludCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFdyaXRl
KGludCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaCgpOworICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsKEV4Y2VwdGlvbkNvZGUpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydCgpOworICAg
IHZpcnR1YWwgdm9pZCBkaWRTdG9wKCk7CisKKyAgICBGaWxlVGhyZWFkKiBmaWxlVGhyZWFkKCk7
CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fY29udGV4dDsKKyAgICBGaWxl
U3RyZWFtQ2xpZW50KiBtX2NsaWVudDsKKyAgICBSZWZQdHI8RmlsZVN0cmVhbT4gbV9zdHJlYW07
CisgICAgUmVmUHRyPEZpbGVTdHJlYW1Qcm94eT4gbV9zZWxmUmVmOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfUkVBREVSKSB8fCBFTkFCTEUo
RklMRV9XUklURVIpCisKKyNlbmRpZiAvLyBGaWxlU3RyZWFtUHJveHlfaApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9odG1sL0ZpbGVUaHJlYWRUYXNrLmggYi9XZWJDb3JlL2h0bWwvRmlsZVRocmVhZFRh
c2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGM1OWQ4Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWRUYXNrLmgKQEAgLTAsMCArMSwyMzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBGaWxlVGhyZWFkVGFza19oCisjZGVmaW5lIEZpbGVUaHJlYWRUYXNrX2gKKwor
I2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCisjaW5jbHVkZSAiRmlsZVRocmVhZC5oIgor
I2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBUcmFpdHMgZm9yIHRoZSBUYXNrLgordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEZpbGVUaHJlYWRUYXNrVHJhaXRzIHsKKyAgICB0eXBlZGVmIGNvbnN0IFQm
IFBhcmFtVHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGaWxlVGhyZWFk
VGFza1RyYWl0czxUKj4geworICAgIHR5cGVkZWYgVCogUGFyYW1UeXBlOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEZpbGVUaHJlYWRUYXNrVHJhaXRzPFBhc3NSZWZQdHI8VD4g
PiB7CisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPFQ+IFBhcmFtVHlwZTsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBGaWxlVGhyZWFkVGFza1RyYWl0czxQYXNzT3duUHRyPFQ+ID4g
eworICAgIHR5cGVkZWYgUGFzc093blB0cjxUPiBQYXJhbVR5cGU7Cit9OworCitjbGFzcyBGaWxl
VGhyZWFkVGFzazAgOiBwdWJsaWMgRmlsZVRocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiB2b2lkIChGaWxlU3RyZWFtOjoqTWV0aG9kKSgpOworICAgIHR5cGVkZWYgRmlsZVRocmVh
ZFRhc2swIEZpbGVUaHJlYWRUYXNrOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVh
ZFRhc2s+IGNyZWF0ZShGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QpCisgICAgewor
ICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0cmVhbSwgbWV0aG9kKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgRmlsZVRocmVhZFRhc2swKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0
aG9kIG1ldGhvZCkKKyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVhbSkKKyAgICAgICAg
LCBtX21ldGhvZChtZXRob2QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0cmVhbSgpLiptX21ldGhvZCkoKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgUDEsIHR5cGVuYW1lIE1QMT4KK2NsYXNzIEZpbGVUaHJlYWRUYXNrMSA6IHB1YmxpYyBGaWxl
VGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKEZpbGVTdHJlYW06OipN
ZXRob2QpKE1QMSk7CisgICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazE8UDEsIE1QMT4gRmlsZVRo
cmVhZFRhc2s7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMT46
OlBhcmFtVHlwZSBQYXJhbTE7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlVGhyZWFkVGFz
az4gY3JlYXRlKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFt
ZXRlcjEpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0cmVhbSwg
bWV0aG9kLCBwYXJhbWV0ZXIxKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmlsZVRocmVhZFRh
c2sxKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEp
CisgICAgICAgIDogRmlsZVRocmVhZDo6VGFzayhzdHJlYW0pCisgICAgICAgICwgbV9tZXRob2Qo
bWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdHJl
YW0oKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1l
dGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgorY2xhc3Mg
RmlsZVRocmVhZFRhc2syIDogcHVibGljIEZpbGVUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAg
IHR5cGVkZWYgdm9pZCAoRmlsZVN0cmVhbTo6Kk1ldGhvZCkoTVAxLCBNUDIpOworICAgIHR5cGVk
ZWYgRmlsZVRocmVhZFRhc2syPFAxLCBNUDEsIFAyLCBNUDI+IEZpbGVUaHJlYWRUYXNrOworICAg
IHR5cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFy
YW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJh
bVR5cGUgUGFyYW0yOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRhc2s+IGNy
ZWF0ZShGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIx
LCBQYXJhbTIgcGFyYW1ldGVyMikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgRmlsZVRocmVh
ZFRhc2soc3RyZWFtLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBGaWxlVGhyZWFkVGFzazIoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIpCisgICAgICAgIDog
RmlsZVRocmVhZDo6VGFzayhzdHJlYW0pCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAg
ICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVyMihw
YXJhbWV0ZXIyKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
KQorICAgIHsKKyAgICAgICAgKCpzdHJlYW0oKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9w
YXJhbWV0ZXIyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAg
IFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBl
bmFtZSBQMywgdHlwZW5hbWUgTVAzPgorY2xhc3MgRmlsZVRocmVhZFRhc2szIDogcHVibGljIEZp
bGVUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoRmlsZVN0cmVhbTo6
Kk1ldGhvZCkoTVAxLCBNUDIsIE1QMyk7CisgICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazM8UDEs
IE1QMSwgUDIsIE1QMiwgUDMsIE1QMz4gRmlsZVRocmVhZFRhc2s7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlw
ZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7
CisgICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlw
ZSBQYXJhbTM7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlVGhyZWFkVGFzaz4gY3JlYXRl
KEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBh
cmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgRmlsZVRocmVhZFRhc2soc3RyZWFtLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRl
cjIsIHBhcmFtZXRlcjMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGaWxlVGhyZWFkVGFzazMo
RmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFy
YW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgICAgICA6IEZpbGVUaHJlYWQ6
OlRhc2soc3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3Bh
cmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikK
KyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RyZWFtKCkuKm1f
bWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsK
KyAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJhbWV0ZXIzOworfTsKKworUGFzc093
blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKKyAgICBGaWxlU3Ry
ZWFtKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoKSkKK3sK
KyAgICByZXR1cm4gRmlsZVRocmVhZFRhc2swOjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAg
ICAgICAgbWV0aG9kKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMT4K
K1Bhc3NPd25QdHI8RmlsZVRocmVhZDo6VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCisgICAg
RmlsZVN0cmVhbSogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKEZpbGVTdHJlYW06OiptZXRob2Qp
KE1QMSksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEpCit7CisgICAgcmV0dXJuIEZpbGVUaHJl
YWRUYXNrMTx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMT46OmNyZWF0
ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFk
Q29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAx
LCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+CitQYXNzT3duUHRyPEZp
bGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAorICAgIEZpbGVTdHJlYW0qIGNv
bnN0IGNhbGxlZSwKKyAgICB2b2lkIChGaWxlU3RyZWFtOjoqbWV0aG9kKShNUDEsIE1QMiksCisg
ICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIpCit7Cisg
ICAgcmV0dXJuIEZpbGVUaHJlYWRUYXNrMjx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46
OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDI+Ojpj
cmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29w
aWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0
eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBl
bmFtZSBNUDM+CitQYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRU
YXNrKAorICAgIEZpbGVTdHJlYW0qIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChGaWxlU3RyZWFt
OjoqbWV0aG9kKShNUDEsIE1QMiwgTVAzKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAg
ICBjb25zdCBQMiYgcGFyYW1ldGVyMiwKKyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMykKK3sKKyAg
ICByZXR1cm4gRmlsZVRocmVhZFRhc2szPHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6
VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDM+OjpjcmVhdGUoCisgICAgICAg
IGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46
OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShw
YXJhbWV0ZXIyKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRl
cjMpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRmlsZVRocmVh
ZFRhc2tfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52883</attachid>
            <date>2010-04-08 11:49:49 -0700</date>
            <delta_ts>2010-04-08 17:24:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37218-20100408114948.patch</filename>
            <type>text/plain</type>
            <size>27066</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWIwMzRkMC4uYzIxMWE1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wNC0wNyAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZpbGVTdHJlYW1Qcm94eSB0aGF0IGNhbGxzIEZp
bGVTdHJlYW0gbWV0aG9kcyBvbiBGaWxlVGhyZWFkIGZvciBGaWxlQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzIxOAorCisgICAgICAgIE5vIG5l
dyB0ZXN0czsgd2lsbCBiZSBhZGRlZCB3aGVuIHdlIGhhdmUgdXBwZXIgbGF5ZXIgaW1wbGVtZW50
YXRpb25zLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAq
IGh0bWwvRmlsZVN0cmVhbVByb3h5Lmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvRmlsZVRocmVh
ZFRhc2suaDogQWRkZWQuCisKIDIwMTAtMDQtMDYgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRl
eCAyNDQ2MmUyLi4wZDEwODU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEwMjksOCArMTAyOSwxMSBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBcCiAJV2ViQ29yZS9o
dG1sL0ZpbGVTdHJlYW0uaCBcCiAJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaCBcCisJ
V2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAgXAorCVdlYkNvcmUvaHRtbC9GaWxlU3Ry
ZWFtUHJveHkuaCBcCiAJV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWQuY3BwIFwKIAlXZWJDb3JlL2h0
bWwvRmlsZVRocmVhZC5oIFwKKwlXZWJDb3JlL2h0bWwvRmlsZVRocmVhZFRhc2suaCBcCiAJV2Vi
Q29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogCVdlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3Qu
aCBcCiAJV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcCBcCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDU2N2ZkZDUu
LmQ5MWRkMjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0xNDMzLDggKzE0MzMsMTEgQEAKICAgICAgICAgICAgICdodG1sL0Zp
bGVTdHJlYW0uY3BwJywKICAgICAgICAgICAgICdodG1sL0ZpbGVTdHJlYW0uaCcsCiAgICAgICAg
ICAgICAnaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgnLAorICAgICAgICAgICAgJ2h0bWwvRmlsZVN0
cmVhbVByb3h5LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9GaWxlU3RyZWFtUHJveHkuaCcsCiAg
ICAgICAgICAgICAnaHRtbC9GaWxlVGhyZWFkLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxl
VGhyZWFkLmgnLAorICAgICAgICAgICAgJ2h0bWwvRmlsZVRocmVhZFRhc2suaCcsCiAgICAgICAg
ICAgICAnaHRtbC9Gb3JtRGF0YUxpc3QuY3BwJywKICAgICAgICAgICAgICdodG1sL0Zvcm1EYXRh
TGlzdC5oJywKICAgICAgICAgICAgICdodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcCcsCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA4
OTAzZDBmLi4wODI2MWU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS5wcm8KQEAgLTYxNSw2ICs2MTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBo
dG1sL0ZpbGUuY3BwIFwKICAgICBodG1sL0ZpbGVMaXN0LmNwcCBcCiAgICAgaHRtbC9GaWxlU3Ry
ZWFtLmNwcCBcCisgICAgaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwIFwKICAgICBodG1sL0ZpbGVU
aHJlYWQuY3BwIFwKICAgICBodG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogICAgIGh0bWwvSFRNTEFs
bENvbGxlY3Rpb24uY3BwIFwKQEAgLTEzMjYsNyArMTMyNyw5IEBAIEhFQURFUlMgKz0gXAogICAg
IGh0bWwvRmlsZUxpc3QuaCBcCiAgICAgaHRtbC9GaWxlU3RyZWFtLmggXAogICAgIGh0bWwvRmls
ZVN0cmVhbUNsaWVudC5oIFwKKyAgICBodG1sL0ZpbGVTdHJlYW1Qcm94eS5oIFwKICAgICBodG1s
L0ZpbGVUaHJlYWQuaCBcCisgICAgaHRtbC9GaWxlVGhyZWFkVGFzay5oIFwKICAgICBodG1sL0Zv
cm1EYXRhTGlzdC5oIFwKICAgICBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmggXAogICAgIGh0bWwv
SFRNTEFuY2hvckVsZW1lbnQuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpp
bmRleCA2NjE4NzQyLi43NTgzOWM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKQEAgLTMwMjQ5LDYgKzMwMjQ5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVN0cmVhbVByb3h5LmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmls
ZVN0cmVhbVByb3h5LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxodG1sXEZpbGVUaHJlYWQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
QEAgLTMwMjU3LDYgKzMwMjY1LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVRocmVhZFRhc2suaCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRm9ybURhdGFM
aXN0LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDc4MTRkOWYuLmEzNjJiYTcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjE0LDYgKzIyMTQsOSBAQAogCQk4OTUy
NTNENzExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENDExNkM0QzY4MDBDQUJGMDAgLyog
RmlsZVN0cmVhbS5jcHAgKi87IH07CiAJCTg5NTI1M0Q4MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxl
U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
OTUyNTNENTExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oICovOyB9OwogCQk4OTUyNTNE
OTExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzRDYxMTZDNEM2ODAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1DbGllbnQuaCAqLzsgfTsKKwkJODk1MjUzREMxMTZDNEVGNTAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1Qcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNw
cCAqLzsgfTsKKwkJODk1MjUzREQxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREIx
MTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovOyB9OworCQk4OTUyNTNERjEx
NkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RFMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxl
VGhyZWFkVGFzay5oICovOyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdy
b3VwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
MDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAyQjBC
RjBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdy
b3VwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
OTMwNUIyNEQwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGlt
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
NzY3MCw2ICs3NjczLDkgQEAKIAkJODk1MjUzRDQxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJl
YW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVN0cmVhbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1M0Q1MTE2QzRDNjgwMENBQkYw
MCAvKiBGaWxlU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVT
dHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODk1MjUzRDYxMTZDNEM2ODAw
Q0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmlsZVN0cmVhbUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTdHJlYW1Qcm94eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5NTI1M0RCMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3Ry
ZWFtUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVN0cmVhbVBy
b3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5NTI1M0RFMTE2QzRGMDYwMENB
QkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWxlVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAyQjBC
QzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTI5NTksNiArMTI5NjUsOSBAQAogCQk5M0VFQzFFQzA5QzI4Nzc3MDBDNTE1RDEgLyogaHRt
bCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJODk1MjUz
REUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi8sCisJCQkJODk1MjUzREEx
MTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgKi8sCisJCQkJODk1MjUzREIx
MTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovLAogCQkJCTg5NTI1M0Q0MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLywKIAkJCQk4OTUyNTNENTExNkM0QzY4
MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oICovLAogCQkJCTg5NTI1M0Q2MTE2QzRDNjgwMENBQkYw
MCAvKiBGaWxlU3RyZWFtQ2xpZW50LmggKi8sCkBAIC0xODgyNSw2ICsxODgzNCw4IEBACiAJCQkJ
MjU0MkY0REIxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4OTUyNTNEODExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODk1MjUzRDkxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1D
bGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0REMTE2QzRFRjUwMENBQkYwMCAvKiBG
aWxlU3RyZWFtUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0RGMTE2QzRGMDYwMENB
QkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMTA0Niw2ICsyMTA1
Nyw3IEBACiAJCQkJODk1MjUzNTIxMTY0MUIzNDAwQ0FCRjAwIC8qIEZpbGVUaHJlYWQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJl
SW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5NTI1M0Q3MTE2QzRDNjgwMENBQkYw
MCAvKiBGaWxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg5NTI1M0RDMTE2QzRFRjUw
MENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5j
cHAKaW5kZXggNTNjOTkyYy4uODRhMjhkNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVT
dHJlYW0uY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcApAQCAtNTYsNiArNTYs
MTMgQEAgdm9pZCBGaWxlU3RyZWFtOjpzdGFydCgpCiAgICAgbV9jbGllbnQtPmRpZFN0YXJ0KCk7
CiB9CiAKK3ZvaWQgRmlsZVN0cmVhbTo6c3RvcCgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CisgICAgY2xvc2UoKTsKKyAgICBtX2NsaWVudC0+ZGlkU3RvcCgpOworfQorCiB2b2lk
IEZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKEJsb2IqKQogewogICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uaCBiL1dlYkNvcmUv
aHRtbC9GaWxlU3RyZWFtLmgKaW5kZXggYmE3YzA1Ni4uYmRhOGZjNyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9odG1sL0ZpbGVTdHJlYW0uaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5oCkBA
IC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5GaWxlU3RyZWFtKCk7CiAKICAg
ICB2b2lkIHN0YXJ0KCk7CisgICAgdm9pZCBzdG9wKCk7CiAKICAgICB2b2lkIG9wZW5Gb3JSZWFk
KEJsb2IqKTsKICAgICB2b2lkIG9wZW5Gb3JXcml0ZShjb25zdCBTdHJpbmcmIHBhdGgpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaCBiL1dlYkNvcmUvaHRtbC9G
aWxlU3RyZWFtQ2xpZW50LmgKaW5kZXggOWQyNGJkZi4uZTFhZWM1MyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVh
bUNsaWVudC5oCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEZvciBib3RoIHJl
YWRpbmcgYW5kIHdyaXRpbmcuCiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0KCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIGRpZFN0b3AoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoKCkg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoRXhjZXB0aW9uQ29kZSkgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGRpZEdldFNpemUobG9uZyBsb25nKSB7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhYmQ2OAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwCkBAIC0wLDAgKzEsMTk5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShGSUxFX1JFQURFUikgfHwgRU5B
QkxFKEZJTEVfV1JJVEVSKQorCisjaW5jbHVkZSAiRmlsZVN0cmVhbVByb3h5LmgiCisKKyNpbmNs
dWRlICJCbG9iLmgiCisjaW5jbHVkZSAiRmlsZVN0cmVhbS5oIgorI2luY2x1ZGUgIkZpbGVUaHJl
YWQuaCIKKyNpbmNsdWRlICJGaWxlVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIkdlbmVyaWNXb3Jr
ZXJUYXNrLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsZVN0cmVhbVBy
b3h5OjpGaWxlU3RyZWFtUHJveHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRmls
ZVN0cmVhbUNsaWVudCogY2xpZW50KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBt
X2NsaWVudChjbGllbnQpCisgICAgLCBtX3N0cmVhbShGaWxlU3RyZWFtOjpjcmVhdGUodGhpcykp
Cit7CisgICAgbV9zZWxmUmVmID0gdGhpczsKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNy
ZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6c3RhcnQpKTsK
K30KKworRmlsZVN0cmVhbVByb3h5Ojp+RmlsZVN0cmVhbVByb3h5KCkKK3sKK30KKwordm9pZCBG
aWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JSZWFkKEJsb2IqIGJsb2IpCit7CisgICAgZmlsZVRocmVh
ZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVT
dHJlYW06Om9wZW5Gb3JSZWFkLCBibG9iKSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5Ojpv
cGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9z
dFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjpv
cGVuRm9yV3JpdGUsIHBhdGgpKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmNsb3NlKCkK
K3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3Ry
ZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6Y2xvc2UpKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJv
eHk6OnJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQoreworICAgIGZpbGVUaHJlYWQoKS0+
cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFt
OjpyZWFkLCBidWZmZXIsIGxlbmd0aCkpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6d3Jp
dGUoQmxvYiogYmxvYiwgbG9uZyBsb25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKQoreworICAgIGZp
bGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCks
ICZGaWxlU3RyZWFtOjp3cml0ZSwgYmxvYiwgcG9zaXRpb24sIGxlbmd0aCkpOworfQorCit2b2lk
IEZpbGVTdHJlYW1Qcm94eTo6dHJ1bmNhdGUobG9uZyBsb25nIHBvc2l0aW9uKQoreworICAgIGZp
bGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCks
ICZGaWxlU3RyZWFtOjp0cnVuY2F0ZSwgcG9zaXRpb24pKTsKK30KKworRmlsZVRocmVhZCogRmls
ZVN0cmVhbVByb3h5OjpmaWxlVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0LT5maWxl
VGhyZWFkKCkpOworICAgIHJldHVybiBtX2NvbnRleHQtPmZpbGVUaHJlYWQoKTsKK30KKwordm9p
ZCBGaWxlU3RyZWFtUHJveHk6OmFib3J0KCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnVuc2NoZWR1
bGVUYXNrcyhtX3N0cmVhbS5nZXQoKSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpzdG9w
KCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnVuc2NoZWR1bGVUYXNrcyhtX3N0cmVhbS5nZXQoKSk7
CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayhtX3N0cmVh
bS5nZXQoKSwgJkZpbGVTdHJlYW06OnN0b3ApKTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5R2V0
U2l6ZU9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFt
UHJveHkqIHByb3h5LCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXND
b250ZXh0VGhyZWFkKCkpOworICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCisgICAgICAgIHByb3h5
LT5jbGllbnQoKS0+ZGlkR2V0U2l6ZShzaXplKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6
OmRpZEdldFNpemUobG9uZyBsb25nIHNpemUpCit7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhj
cmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeUdldFNpemVPbkNvbnRleHQsIHRoaXMsIHNpemUpKTsK
K30KKworc3RhdGljIHZvaWQgbm90aWZ5UmVhZE9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFtUHJveHkqIHByb3h5LCBjb25zdCBjaGFyKiBkYXRhLCBp
bnQgYnl0ZXNSZWFkKQoreworICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7
CisgICAgaWYgKHByb3h5LT5jbGllbnQoKSkKKyAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRS
ZWFkKGRhdGEsIGJ5dGVzUmVhZCk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRSZWFk
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpCit7CisgICAgbV9jb250ZXh0LT5wb3N0
VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeVJlYWRPbkNvbnRleHQsIHRoaXMsIGRhdGEs
IGJ5dGVzUmVhZCkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlXcml0ZU9uQ29udGV4dChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFtUHJveHkqIHByb3h5LCBpbnQg
Ynl0ZXNXcml0dGVuKQoreworICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7
CisgICAgaWYgKHByb3h5LT5jbGllbnQoKSkKKyAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRX
cml0ZShieXRlc1dyaXR0ZW4pOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlkV3JpdGUo
aW50IGJ5dGVzV3JpdHRlbikKK3sKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxi
YWNrVGFzaygmbm90aWZ5V3JpdGVPbkNvbnRleHQsIHRoaXMsIGJ5dGVzV3JpdHRlbikpOworfQor
Cit2b2lkIG5vdGlmeVN0YXJ0T25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEZpbGVTdHJlYW1Qcm94eSogcHJveHkpCit7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29u
dGV4dFRocmVhZCgpKTsKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+
Y2xpZW50KCktPmRpZFN0YXJ0KCk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRTdGFy
dCgpCit7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlm
eVN0YXJ0T25Db250ZXh0LCB0aGlzKSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeUZpbmlzaE9u
Q29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFtUHJveHkq
IHByb3h5KQoreworICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAg
aWYgKHByb3h5LT5jbGllbnQoKSkKKyAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRGaW5pc2go
KTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmRpZEZpbmlzaCgpCit7CisgICAgbV9jb250
ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeUZpbmlzaE9uQ29udGV4dCwg
dGhpcykpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlGYWlsT25Db250ZXh0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIEV4Y2VwdGlvbkNv
ZGUgZWMpCit7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBp
ZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xpZW50KCktPmRpZEZhaWwoZWMp
OworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlkRmFpbChFeGNlcHRpb25Db2RlIGVjKQor
eworICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlGYWls
T25Db250ZXh0LCB0aGlzLCBlYykpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlTdG9wT25Db250
ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1Qcm94eSogcHJv
eHkpCit7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBwcm94
eS0+ZGlkU3RvcEFuZERlc3Ryb3koKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmRpZFN0
b3AoKQoreworICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZub3Rp
ZnlTdG9wT25Db250ZXh0LCB0aGlzKSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRT
dG9wQW5kRGVzdHJveSgpCit7CisgICAgLy8gTm93IGl0J3MgcmVhZHkgdG8gYmUgZGVzdHJveWVk
LgorICAgIG1fY29udGV4dC5jbGVhcigpOworICAgIG1fc2VsZlJlZiA9IDA7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1dSSVRFUikKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuaCBiL1dlYkNvcmUvaHRtbC9GaWxl
U3RyZWFtUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjhmMzQx
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5oCkBAIC0w
LDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBGaWxlU3RyZWFtUHJveHlfaAorI2RlZmluZSBGaWxlU3RyZWFt
UHJveHlfaAorCisjaWYgRU5BQkxFKEZJTEVfUkVBREVSKSB8fCBFTkFCTEUoRklMRV9XUklURVIp
CisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRmlsZVN0cmVhbUNsaWVu
dC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQmxvYjsKK2NsYXNzIEZpbGVTdHJlYW07CitjbGFzcyBGaWxlVGhyZWFkOworY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFN0cmluZzsKKworLy8gQSBwcm94eSBtb2R1
bGUgdGhhdCBjYWxscyBjb3JyZXNwb25kaW5nIEZpbGVTdHJlYW0gbWV0aG9kcyBvbiB0aGUgZmls
ZSB0aHJlYWQuICBOb3RlOiB5b3UgbXVzdCBjYWxsIHN0b3AoKSB0byBkZXN0cm95IGEgRmlsZVN0
cmVhbVByb3h5IGluc3RhbmNlLCBlLmcuIGluIHRoZSBkZXNjdHJ1Y3RvciBvZiBhbiBvYmplY3Qg
dGhhdCBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgcHJveHkuCitjbGFzcyBGaWxlU3RyZWFtUHJv
eHkgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWxlU3RyZWFtUHJveHk+LCBwdWJsaWMgRmlsZVN0cmVh
bUNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZVN0cmVhbVByb3h5
PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRmlsZVN0cmVhbUNsaWVu
dCogY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlU3RyZWFt
UHJveHkoY29udGV4dCwgY2xpZW50KSk7CisgICAgfQorICAgIHZpcnR1YWwgfkZpbGVTdHJlYW1Q
cm94eSgpOworCisgICAgdm9pZCBvcGVuRm9yUmVhZChCbG9iKiBibG9iKTsKKyAgICB2b2lkIG9w
ZW5Gb3JXcml0ZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2
b2lkIHJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKTsKKyAgICB2b2lkIHdyaXRlKEJsb2Iq
IGJsb2IsIGxvbmcgbG9uZyBwb3NpdGlvbiwgaW50IGxlbmd0aCk7CisgICAgdm9pZCB0cnVuY2F0
ZShsb25nIGxvbmcgcG9zaXRpb24pOworCisgICAgdm9pZCBhYm9ydCgpOworICAgIHZvaWQgc3Rv
cCgpOworICAgIHZvaWQgZGlkU3RvcEFuZERlc3Ryb3koKTsKKworICAgIEZpbGVTdHJlYW1DbGll
bnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBGaWxlU3RyZWFtUHJveHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1DbGll
bnQqKTsKKworICAgIC8vIEZpbGVTdHJlYW1DbGllbnQgbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkR2V0U2l6ZShsb25nIGxvbmcpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkKGNvbnN0
IGNoYXIqLCBpbnQpOworICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZShpbnQpOworICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChFeGNlcHRpb25D
b2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
U3RvcCgpOworCisgICAgRmlsZVRocmVhZCogZmlsZVRocmVhZCgpOworICAgIFJlZlB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0PiBtX2NvbnRleHQ7CisgICAgRmlsZVN0cmVhbUNsaWVudCogbV9j
bGllbnQ7CisgICAgUmVmUHRyPEZpbGVTdHJlYW0+IG1fc3RyZWFtOworICAgIFJlZlB0cjxGaWxl
U3RyZWFtUHJveHk+IG1fc2VsZlJlZjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShGSUxFX1JFQURFUikgfHwgRU5BQkxFKEZJTEVfV1JJVEVSKQorCisj
ZW5kaWYgLy8gRmlsZVN0cmVhbVByb3h5X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxl
VGhyZWFkVGFzay5oIGIvV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWRUYXNrLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRjNTlkOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmlsZVRo
cmVhZFRhc2tfaAorI2RlZmluZSBGaWxlVGhyZWFkVGFza19oCisKKyNpbmNsdWRlICJDcm9zc1Ro
cmVhZENvcGllci5oIgorI2luY2x1ZGUgIkZpbGVUaHJlYWQuaCIKKyNpbmNsdWRlIDxtZW1vcnk+
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gVHJhaXRzIGZvciB0aGUgVGFzay4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGaWxl
VGhyZWFkVGFza1RyYWl0cyB7CisgICAgdHlwZWRlZiBjb25zdCBUJiBQYXJhbVR5cGU7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHM8VCo+IHsK
KyAgICB0eXBlZGVmIFQqIFBhcmFtVHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBGaWxlVGhyZWFkVGFza1RyYWl0czxQYXNzUmVmUHRyPFQ+ID4geworICAgIHR5cGVkZWYg
UGFzc1JlZlB0cjxUPiBQYXJhbVR5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHM8UGFzc093blB0cjxUPiA+IHsKKyAgICB0eXBlZGVmIFBh
c3NPd25QdHI8VD4gUGFyYW1UeXBlOworfTsKKworY2xhc3MgRmlsZVRocmVhZFRhc2swIDogcHVi
bGljIEZpbGVUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoRmlsZVN0
cmVhbTo6Kk1ldGhvZCkoKTsKKyAgICB0eXBlZGVmIEZpbGVUaHJlYWRUYXNrMCBGaWxlVGhyZWFk
VGFzazsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrPiBjcmVhdGUoRmls
ZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IEZpbGVUaHJlYWRUYXNrMChGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QpCisgICAg
ICAgIDogRmlsZVRocmVhZDo6VGFzayhzdHJlYW0pCisgICAgICAgICwgbV9tZXRob2QobWV0aG9k
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsK
KyAgICAgICAgKCpzdHJlYW0oKS4qbV9tZXRob2QpKCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IE1ldGhvZCBtX21ldGhvZDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBN
UDE+CitjbGFzcyBGaWxlVGhyZWFkVGFzazEgOiBwdWJsaWMgRmlsZVRocmVhZDo6VGFzayB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChGaWxlU3RyZWFtOjoqTWV0aG9kKShNUDEpOworICAg
IHR5cGVkZWYgRmlsZVRocmVhZFRhc2sxPFAxLCBNUDE+IEZpbGVUaHJlYWRUYXNrOworICAgIHR5
cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0x
OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRhc2s+IGNyZWF0ZShGaWxlU3Ry
ZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCwgcGFyYW1ldGVy
MSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZpbGVUaHJlYWRUYXNrMShGaWxlU3RyZWFtKiBz
dHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQorICAgICAgICA6IEZpbGVU
aHJlYWQ6OlRhc2soc3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAg
LCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RyZWFtKCkuKm1fbWV0aG9kKSht
X3BhcmFtZXRlcjEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7Cisg
ICAgUDEgbV9wYXJhbWV0ZXIxOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1l
IE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KK2NsYXNzIEZpbGVUaHJlYWRUYXNrMiA6
IHB1YmxpYyBGaWxlVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKEZp
bGVTdHJlYW06OipNZXRob2QpKE1QMSwgTVAyKTsKKyAgICB0eXBlZGVmIEZpbGVUaHJlYWRUYXNr
MjxQMSwgTVAxLCBQMiwgTVAyPiBGaWxlVGhyZWFkVGFzazsKKyAgICB0eXBlZGVmIHR5cGVuYW1l
IEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrPiBjcmVhdGUoRmlsZVN0cmVhbSog
c3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRl
cjIpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0cmVhbSwgbWV0
aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmls
ZVRocmVhZFRhc2syKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBh
cmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQorICAgICAgICA6IEZpbGVUaHJlYWQ6OlRhc2so
c3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRl
cjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAg
ICgqc3RyZWFtKCkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMik7CisgICAg
fQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7
CisgICAgUDIgbV9wYXJhbWV0ZXIyOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVu
YW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1l
IE1QMz4KK2NsYXNzIEZpbGVUaHJlYWRUYXNrMyA6IHB1YmxpYyBGaWxlVGhyZWFkOjpUYXNrIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKEZpbGVTdHJlYW06OipNZXRob2QpKE1QMSwgTVAy
LCBNUDMpOworICAgIHR5cGVkZWYgRmlsZVRocmVhZFRhc2szPFAxLCBNUDEsIFAyLCBNUDIsIFAz
LCBNUDM+IEZpbGVUaHJlYWRUYXNrOworICAgIHR5cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRh
c2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUgRmls
ZVRocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOworCisgICAg
c3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRhc2s+IGNyZWF0ZShGaWxlU3RyZWFtKiBzdHJl
YW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwg
UGFyYW0zIHBhcmFtZXRlcjMpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRU
YXNrKHN0cmVhbSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgRmlsZVRocmVhZFRhc2szKEZpbGVTdHJlYW0qIHN0cmVh
bSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQ
YXJhbTMgcGFyYW1ldGVyMykKKyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVhbSkKKyAg
ICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRl
cjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgICAgICwgbV9wYXJh
bWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0cmVhbSgpLiptX21ldGhvZCkobV9wYXJhbWV0
ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMyk7CisgICAgfQorCitwcml2YXRlOgorICAg
IE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0
ZXIyOworICAgIFAzIG1fcGFyYW1ldGVyMzsKK307CisKK1Bhc3NPd25QdHI8RmlsZVRocmVhZDo6
VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCisgICAgRmlsZVN0cmVhbSogY29uc3QgY2FsbGVl
LAorICAgIHZvaWQgKEZpbGVTdHJlYW06OiptZXRob2QpKCkpCit7CisgICAgcmV0dXJuIEZpbGVU
aHJlYWRUYXNrMDo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDE+CitQYXNzT3duUHRyPEZpbGVU
aHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAorICAgIEZpbGVTdHJlYW0qIGNvbnN0
IGNhbGxlZSwKKyAgICB2b2lkIChGaWxlU3RyZWFtOjoqbWV0aG9kKShNUDEpLAorICAgIGNvbnN0
IFAxJiBwYXJhbWV0ZXIxKQoreworICAgIHJldHVybiBGaWxlVGhyZWFkVGFzazE8dHlwZW5hbWUg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDE+OjpjcmVhdGUoCisgICAgICAgIGNhbGxl
ZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHko
cGFyYW1ldGVyMSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0
eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgorUGFzc093blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBj
cmVhdGVGaWxlVGhyZWFkVGFzaygKKyAgICBGaWxlU3RyZWFtKiBjb25zdCBjYWxsZWUsCisgICAg
dm9pZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoTVAxLCBNUDIpLAorICAgIGNvbnN0IFAxJiBwYXJh
bWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyKQoreworICAgIHJldHVybiBGaWxlVGhy
ZWFkVGFzazI8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVu
YW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyPjo6Y3JlYXRlKAorICAgICAgICBj
YWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpj
b3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFy
YW1ldGVyMikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBl
bmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzPgorUGFzc093
blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKKyAgICBGaWxlU3Ry
ZWFtKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoTVAxLCBN
UDIsIE1QMyksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFt
ZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMpCit7CisgICAgcmV0dXJuIEZpbGVUaHJl
YWRUYXNrMzx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5h
bWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFk
Q29waWVyPFAzPjo6VHlwZSwgTVAzPjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAg
IG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEp
LAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisgICAg
ICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZpbGVUaHJlYWRUYXNrX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52921</attachid>
            <date>2010-04-08 17:24:49 -0700</date>
            <delta_ts>2010-04-09 15:51:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37218-20100408172448.patch</filename>
            <type>text/plain</type>
            <size>26941</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWIwMzRkMC4uMGE1NGIzOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0wNC0wOCAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZpbGVTdHJlYW1Qcm94eSB0aGF0IGNhbGxzIEZp
bGVTdHJlYW0gbWV0aG9kcyBvbiBGaWxlVGhyZWFkIGZvciBGaWxlQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzIxOAorCisgICAgICAgIE5vIG5l
dyB0ZXN0czsgd2lsbCBiZSBhZGRlZCB3aGVuIHdlIGhhdmUgdXBwZXIgbGF5ZXIgaW1wbGVtZW50
YXRpb25zLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZVN0cmVhbTo6c3RvcCk6CisgICAgICAgICogaHRtbC9GaWxlU3RyZWFtLmg6CisgICAgICAgICog
aHRtbC9GaWxlU3RyZWFtQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3RyZWFtQ2xp
ZW50OjpkaWRTdG9wKToKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHA6IEFkZGVk
LgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbVByb3h5Lmg6IEFkZGVkLgorICAgICAgICAqIGh0
bWwvRmlsZVRocmVhZFRhc2suaDogQWRkZWQuCisKIDIwMTAtMDQtMDYgIEFuZHkgRXN0ZXMgIDxh
ZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IERhbiBCZXJuc3Rl
aW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQppbmRleCAyNDQ2MmUyLi4wZDEwODU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEwMjksOCArMTAyOSwx
MSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBc
CiAJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uaCBcCiAJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1D
bGllbnQuaCBcCisJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAgXAorCVdlYkNvcmUv
aHRtbC9GaWxlU3RyZWFtUHJveHkuaCBcCiAJV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWQuY3BwIFwK
IAlXZWJDb3JlL2h0bWwvRmlsZVRocmVhZC5oIFwKKwlXZWJDb3JlL2h0bWwvRmlsZVRocmVhZFRh
c2suaCBcCiAJV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogCVdlYkNvcmUvaHRtbC9G
b3JtRGF0YUxpc3QuaCBcCiAJV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcCBcCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDU2N2ZkZDUuLmQ5MWRkMjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNDMzLDggKzE0MzMsMTEgQEAKICAgICAgICAg
ICAgICdodG1sL0ZpbGVTdHJlYW0uY3BwJywKICAgICAgICAgICAgICdodG1sL0ZpbGVTdHJlYW0u
aCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgnLAorICAgICAgICAgICAg
J2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9GaWxlU3RyZWFt
UHJveHkuaCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxlVGhyZWFkLmNwcCcsCiAgICAgICAgICAg
ICAnaHRtbC9GaWxlVGhyZWFkLmgnLAorICAgICAgICAgICAgJ2h0bWwvRmlsZVRocmVhZFRhc2su
aCcsCiAgICAgICAgICAgICAnaHRtbC9Gb3JtRGF0YUxpc3QuY3BwJywKICAgICAgICAgICAgICdo
dG1sL0Zvcm1EYXRhTGlzdC5oJywKICAgICAgICAgICAgICdodG1sL0hUTUxBbGxDb2xsZWN0aW9u
LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3Jl
LnBybwppbmRleCA4OTAzZDBmLi4wODI2MWU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUu
cHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTYxNSw2ICs2MTUsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBodG1sL0ZpbGUuY3BwIFwKICAgICBodG1sL0ZpbGVMaXN0LmNwcCBcCiAgICAg
aHRtbC9GaWxlU3RyZWFtLmNwcCBcCisgICAgaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwIFwKICAg
ICBodG1sL0ZpbGVUaHJlYWQuY3BwIFwKICAgICBodG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogICAg
IGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwIFwKQEAgLTEzMjYsNyArMTMyNyw5IEBAIEhFQURF
UlMgKz0gXAogICAgIGh0bWwvRmlsZUxpc3QuaCBcCiAgICAgaHRtbC9GaWxlU3RyZWFtLmggXAog
ICAgIGh0bWwvRmlsZVN0cmVhbUNsaWVudC5oIFwKKyAgICBodG1sL0ZpbGVTdHJlYW1Qcm94eS5o
IFwKICAgICBodG1sL0ZpbGVUaHJlYWQuaCBcCisgICAgaHRtbC9GaWxlVGhyZWFkVGFzay5oIFwK
ICAgICBodG1sL0Zvcm1EYXRhTGlzdC5oIFwKICAgICBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmgg
XAogICAgIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagppbmRleCA2NjE4NzQyLi43NTgzOWM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKQEAgLTMwMjQ5LDYgKzMwMjQ5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmls
ZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVN0cmVhbVByb3h5
LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGh0bWxcRmlsZVN0cmVhbVByb3h5LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEZpbGVUaHJlYWQuY3BwIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0KQEAgLTMwMjU3LDYgKzMwMjY1LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4N
CiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVRocmVhZFRhc2suaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0
bWxcRm9ybURhdGFMaXN0LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc4MTRkOWYuLmEzNjJiYTcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjE0LDYgKzIyMTQs
OSBAQAogCQk4OTUyNTNENzExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENDExNkM0QzY4
MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgKi87IH07CiAJCTg5NTI1M0Q4MTE2QzRDNjgwMENB
QkYwMCAvKiBGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4OTUyNTNENTExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oICovOyB9
OwogCQk4OTUyNTNEOTExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzRDYxMTZDNEM2
ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLzsgfTsKKwkJODk1MjUzREMxMTZDNEVG
NTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0
cmVhbVByb3h5LmNwcCAqLzsgfTsKKwkJODk1MjUzREQxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVT
dHJlYW1Qcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODk1MjUzREIxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovOyB9Owor
CQk4OTUyNTNERjExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RFMTE2QzRGMDYwMENB
QkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovOyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VF
ODMgLyogUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9
OwogCQk5MzAyQjBCRjBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VF
ODMgLyogUGFnZUdyb3VwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJOTMwNUIyNEQwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBD
Mjg4NTUgLyogVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNzY3MCw2ICs3NjczLDkgQEAKIAkJODk1MjUzRDQxMTZDNEM2ODAwQ0FCRjAw
IC8qIEZpbGVTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RmlsZVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1M0Q1MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZpbGVTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODk1MjUz
RDYxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmlsZVN0cmVhbUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTdHJlYW1Qcm94eS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5NTI1M0RCMTE2QzRFRjUwMENBQkYw
MCAvKiBGaWxlU3RyZWFtUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RmlsZVN0cmVhbVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5NTI1M0RF
MTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWxlVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUdyb3VwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTI5NTksNiArMTI5NjUsOSBAQAogCQk5M0VFQzFFQzA5QzI4Nzc3MDBD
NTE1RDEgLyogaHRtbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi8sCisJ
CQkJODk1MjUzREExMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgKi8sCisJ
CQkJODk1MjUzREIxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovLAogCQkJ
CTg5NTI1M0Q0MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLywKIAkJCQk4OTUy
NTNENTExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oICovLAogCQkJCTg5NTI1M0Q2MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtQ2xpZW50LmggKi8sCkBAIC0xODgyNSw2ICsxODgz
NCw4IEBACiAJCQkJMjU0MkY0REIxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTUyNTNEODExNkM0QzY4MDBDQUJGMDAgLyogRmls
ZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk1MjUzRDkxMTZDNEM2ODAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1DbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0REMTE2QzRFRjUw
MENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0RG
MTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0y
MTA0Niw2ICsyMTA1Nyw3IEBACiAJCQkJODk1MjUzNTIxMTY0MUIzNDAwQ0FCRjAwIC8qIEZpbGVU
aHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2IC8q
IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5NTI1M0Q3MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg5NTI1
M0RDMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAgYi9XZWJDb3JlL2h0bWwv
RmlsZVN0cmVhbS5jcHAKaW5kZXggNTNjOTkyYy4uODRhMjhkNiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0ZpbGVTdHJlYW0uY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcApA
QCAtNTYsNiArNTYsMTMgQEAgdm9pZCBGaWxlU3RyZWFtOjpzdGFydCgpCiAgICAgbV9jbGllbnQt
PmRpZFN0YXJ0KCk7CiB9CiAKK3ZvaWQgRmlsZVN0cmVhbTo6c3RvcCgpCit7CisgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CisgICAgY2xvc2UoKTsKKyAgICBtX2NsaWVudC0+ZGlkU3RvcCgp
OworfQorCiB2b2lkIEZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKEJsb2IqKQogewogICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0u
aCBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmgKaW5kZXggYmE3YzA1Ni4uYmRhOGZjNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uaAorKysgYi9XZWJDb3JlL2h0bWwvRmls
ZVN0cmVhbS5oCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5GaWxlU3Ry
ZWFtKCk7CiAKICAgICB2b2lkIHN0YXJ0KCk7CisgICAgdm9pZCBzdG9wKCk7CiAKICAgICB2b2lk
IG9wZW5Gb3JSZWFkKEJsb2IqKTsKICAgICB2b2lkIG9wZW5Gb3JXcml0ZShjb25zdCBTdHJpbmcm
IHBhdGgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaCBiL1dl
YkNvcmUvaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgKaW5kZXggOWQyNGJkZi4uZTFhZWM1MyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaAorKysgYi9XZWJDb3JlL2h0
bWwvRmlsZVN0cmVhbUNsaWVudC5oCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIC8v
IEZvciBib3RoIHJlYWRpbmcgYW5kIHdyaXRpbmcuCiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0
KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFN0b3AoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluaXNoKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoRXhjZXB0aW9uQ29kZSkg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEdldFNpemUobG9uZyBsb25nKSB7IH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGVT
dHJlYW1Qcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4OTVl
MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwCkBA
IC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShGSUxFX1JF
QURFUikgfHwgRU5BQkxFKEZJTEVfV1JJVEVSKQorCisjaW5jbHVkZSAiRmlsZVN0cmVhbVByb3h5
LmgiCisKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiRmlsZVN0cmVhbS5oIgorI2luY2x1
ZGUgIkZpbGVUaHJlYWQuaCIKKyNpbmNsdWRlICJGaWxlVGhyZWFkVGFzay5oIgorI2luY2x1ZGUg
IkdlbmVyaWNXb3JrZXJUYXNrLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
RmlsZVN0cmVhbVByb3h5OjpGaWxlU3RyZWFtUHJveHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQorICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3N0cmVhbShGaWxlU3RyZWFtOjpj
cmVhdGUodGhpcykpCit7CisgICAgcmVmKCk7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhj
cmVhdGVGaWxlVGhyZWFkVGFzayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06OnN0YXJ0KSk7
Cit9CisKK0ZpbGVTdHJlYW1Qcm94eTo6fkZpbGVTdHJlYW1Qcm94eSgpCit7Cit9CisKK3ZvaWQg
RmlsZVN0cmVhbVByb3h5OjpvcGVuRm9yUmVhZChCbG9iKiBibG9iKQoreworICAgIGZpbGVUaHJl
YWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxl
U3RyZWFtOjpvcGVuRm9yUmVhZCwgYmxvYikpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6
b3BlbkZvcldyaXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBv
c3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6
b3BlbkZvcldyaXRlLCBwYXRoKSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpjbG9zZSgp
Cit7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayhtX3N0
cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06OmNsb3NlKSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVBy
b3h5OjpyZWFkKGNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKK3sKKyAgICBmaWxlVGhyZWFkKCkt
PnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVh
bTo6cmVhZCwgYnVmZmVyLCBsZW5ndGgpKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6Ondy
aXRlKEJsb2IqIGJsb2IsIGxvbmcgbG9uZyBwb3NpdGlvbiwgaW50IGxlbmd0aCkKK3sKKyAgICBm
aWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgp
LCAmRmlsZVN0cmVhbTo6d3JpdGUsIGJsb2IsIHBvc2l0aW9uLCBsZW5ndGgpKTsKK30KKwordm9p
ZCBGaWxlU3RyZWFtUHJveHk6OnRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbikKK3sKKyAgICBm
aWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgp
LCAmRmlsZVN0cmVhbTo6dHJ1bmNhdGUsIHBvc2l0aW9uKSk7Cit9CisKK0ZpbGVUaHJlYWQqIEZp
bGVTdHJlYW1Qcm94eTo6ZmlsZVRocmVhZCgpCit7CisgICAgQVNTRVJUKG1fY29udGV4dC0+Zmls
ZVRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5maWxlVGhyZWFkKCk7Cit9CisKK3Zv
aWQgRmlsZVN0cmVhbVByb3h5OjphYm9ydCgpCit7CisgICAgZmlsZVRocmVhZCgpLT51bnNjaGVk
dWxlVGFza3MobV9zdHJlYW0uZ2V0KCkpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6c3Rv
cCgpCit7CisgICAgZmlsZVRocmVhZCgpLT51bnNjaGVkdWxlVGFza3MobV9zdHJlYW0uZ2V0KCkp
OworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJl
YW0uZ2V0KCksICZGaWxlU3RyZWFtOjpzdG9wKSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeUdl
dFNpemVPbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSog
cHJveHksIGxvbmcgbG9uZyBzaXplKQoreworICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCisgICAg
ICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkR2V0U2l6ZShzaXplKTsKK30KKwordm9pZCBGaWxlU3Ry
ZWFtUHJveHk6OmRpZEdldFNpemUobG9uZyBsb25nIHNpemUpCit7CisgICAgQVNTRVJUKCFtX2Nv
bnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0
ZUNhbGxiYWNrVGFzaygmbm90aWZ5R2V0U2l6ZU9uQ29udGV4dCwgdGhpcywgc2l6ZSkpOworfQor
CitzdGF0aWMgdm9pZCBub3RpZnlSZWFkT25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBGaWxlU3RyZWFtUHJveHkqIHByb3h5LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFk
KQoreworICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+
ZGlkUmVhZChkYXRhLCBieXRlc1JlYWQpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlk
UmVhZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFkKQoreworICAgIEFTU0VSVCghbV9j
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVh
dGVDYWxsYmFja1Rhc2soJm5vdGlmeVJlYWRPbkNvbnRleHQsIHRoaXMsIGRhdGEsIGJ5dGVzUmVh
ZCkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlXcml0ZU9uQ29udGV4dChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwgaW50IGJ5dGVzV3JpdHRlbikKK3sK
KyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xpZW50KCktPmRpZFdy
aXRlKGJ5dGVzV3JpdHRlbik7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRXcml0ZShp
bnQgYnl0ZXNXcml0dGVuKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0LT5pc0NvbnRleHRUaHJl
YWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlm
eVdyaXRlT25Db250ZXh0LCB0aGlzLCBieXRlc1dyaXR0ZW4pKTsKK30KKwordm9pZCBub3RpZnlT
dGFydE9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBw
cm94eSkKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xpZW50
KCktPmRpZFN0YXJ0KCk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRTdGFydCgpCit7
CisgICAgQVNTRVJUKCFtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2NvbnRl
eHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5U3RhcnRPbkNvbnRleHQsIHRo
aXMpKTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5RmluaXNoT25Db250ZXh0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5KQoreworICAgIGlmIChwcm94eS0+
Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkRmluaXNoKCk7Cit9CisKK3Zv
aWQgRmlsZVN0cmVhbVByb3h5OjpkaWRGaW5pc2goKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0
LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxs
YmFja1Rhc2soJm5vdGlmeUZpbmlzaE9uQ29udGV4dCwgdGhpcykpOworfQorCitzdGF0aWMgdm9p
ZCBub3RpZnlGYWlsT25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFt
UHJveHkqIHByb3h5LCBFeGNlcHRpb25Db2RlIGVjKQoreworICAgIGlmIChwcm94eS0+Y2xpZW50
KCkpCisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkRmFpbChlYyk7Cit9CisKK3ZvaWQgRmls
ZVN0cmVhbVByb3h5OjpkaWRGYWlsKEV4Y2VwdGlvbkNvZGUgZWMpCit7CisgICAgQVNTRVJUKCFt
X2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5RmFpbE9uQ29udGV4dCwgdGhpcywgZWMpKTsKK30KKwor
c3RhdGljIHZvaWQgZGVyZWZQcm94eU9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
RmlsZVN0cmVhbVByb3h5KiBwcm94eSkKK3sKKyAgICBwcm94eS0+ZGVyZWYoKTsKK30KKwordm9p
ZCBGaWxlU3RyZWFtUHJveHk6OmRpZFN0b3AoKQoreworICAgIG1fY29udGV4dC0+cG9zdFRhc2so
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZkZXJlZlByb3h5T25Db250ZXh0LCB0aGlzKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1dSSVRFUikKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuaCBiL1dlYkNvcmUvaHRtbC9G
aWxlU3RyZWFtUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTUz
MTM5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5oCkBA
IC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBGaWxlU3RyZWFtUHJveHlfaAorI2RlZmluZSBGaWxlU3Ry
ZWFtUHJveHlfaAorCisjaWYgRU5BQkxFKEZJTEVfUkVBREVSKSB8fCBFTkFCTEUoRklMRV9XUklU
RVIpCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRmlsZVN0cmVhbUNs
aWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQmxvYjsKK2NsYXNzIEZpbGVTdHJlYW07CitjbGFzcyBGaWxlVGhyZWFkOworY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFN0cmluZzsKKworLy8gQSBwcm94eSBt
b2R1bGUgdGhhdCBjYWxscyBjb3JyZXNwb25kaW5nIEZpbGVTdHJlYW0gbWV0aG9kcyBvbiB0aGUg
ZmlsZSB0aHJlYWQuICBOb3RlOiB5b3UgbXVzdCBjYWxsIHN0b3AoKSB0byBkZXN0cm95IGEgRmls
ZVN0cmVhbVByb3h5IGluc3RhbmNlLCBlLmcuIGluIHRoZSBkZXNjdHJ1Y3RvciBvZiBhbiBvYmpl
Y3QgdGhhdCBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgcHJveHkuCitjbGFzcyBGaWxlU3RyZWFt
UHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWxlU3RyZWFtUHJveHk+LCBwdWJsaWMgRmlsZVN0
cmVhbUNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZVN0cmVhbVBy
b3h5PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRmlsZVN0cmVhbUNs
aWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlU3Ry
ZWFtUHJveHkoY29udGV4dCwgY2xpZW50KSk7CisgICAgfQorICAgIHZpcnR1YWwgfkZpbGVTdHJl
YW1Qcm94eSgpOworCisgICAgdm9pZCBvcGVuRm9yUmVhZChCbG9iKiBibG9iKTsKKyAgICB2b2lk
IG9wZW5Gb3JXcml0ZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZvaWQgY2xvc2UoKTsKKyAg
ICB2b2lkIHJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKTsKKyAgICB2b2lkIHdyaXRlKEJs
b2IqIGJsb2IsIGxvbmcgbG9uZyBwb3NpdGlvbiwgaW50IGxlbmd0aCk7CisgICAgdm9pZCB0cnVu
Y2F0ZShsb25nIGxvbmcgcG9zaXRpb24pOworCisgICAgdm9pZCBhYm9ydCgpOworICAgIHZvaWQg
c3RvcCgpOworCisgICAgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4g
bV9jbGllbnQ7IH0KKworcHJvdGVjdGVkOgorICAgIEZpbGVTdHJlYW1Qcm94eShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbUNsaWVudCopOworCisgICAgLy8gRmlsZVN0cmVhbUNs
aWVudCBtZXRob2RzLgorICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRTaXplKGxvbmcgbG9uZyk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFJlYWQoY29uc3QgY2hhciosIGludCk7CisgICAgdmlydHVhbCB2
b2lkIGRpZFdyaXRlKGludCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaCgpOworICAgIHZp
cnR1YWwgdm9pZCBkaWRGYWlsKEV4Y2VwdGlvbkNvZGUpOworICAgIHZpcnR1YWwgdm9pZCBkaWRT
dGFydCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTdG9wKCk7CisKKyAgICBGaWxlVGhyZWFkKiBm
aWxlVGhyZWFkKCk7CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fY29udGV4
dDsKKyAgICBGaWxlU3RyZWFtQ2xpZW50KiBtX2NsaWVudDsKKyAgICBSZWZQdHI8RmlsZVN0cmVh
bT4gbV9zdHJlYW07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKKworI2VuZGlmIC8vIEZp
bGVTdHJlYW1Qcm94eV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVRocmVhZFRhc2su
aCBiL1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmY0YzU5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvRmls
ZVRocmVhZFRhc2suaApAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpbGVUaHJlYWRUYXNrX2gK
KyNkZWZpbmUgRmlsZVRocmVhZFRhc2tfaAorCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIu
aCIKKyNpbmNsdWRlICJGaWxlVGhyZWFkLmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVHlwZVRyYWl0cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRyYWl0cyBm
b3IgdGhlIFRhc2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRocmVhZFRhc2tU
cmFpdHMgeworICAgIHR5cGVkZWYgY29uc3QgVCYgUGFyYW1UeXBlOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEZpbGVUaHJlYWRUYXNrVHJhaXRzPFQqPiB7CisgICAgdHlwZWRl
ZiBUKiBQYXJhbVR5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRo
cmVhZFRhc2tUcmFpdHM8UGFzc1JlZlB0cjxUPiA+IHsKKyAgICB0eXBlZGVmIFBhc3NSZWZQdHI8
VD4gUGFyYW1UeXBlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZpbGVUaHJl
YWRUYXNrVHJhaXRzPFBhc3NPd25QdHI8VD4gPiB7CisgICAgdHlwZWRlZiBQYXNzT3duUHRyPFQ+
IFBhcmFtVHlwZTsKK307CisKK2NsYXNzIEZpbGVUaHJlYWRUYXNrMCA6IHB1YmxpYyBGaWxlVGhy
ZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKEZpbGVTdHJlYW06OipNZXRo
b2QpKCk7CisgICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazAgRmlsZVRocmVhZFRhc2s7CisKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxGaWxlVGhyZWFkVGFzaz4gY3JlYXRlKEZpbGVTdHJlYW0qIHN0
cmVhbSwgTWV0aG9kIG1ldGhvZCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgRmlsZVRocmVh
ZFRhc2soc3RyZWFtLCBtZXRob2QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGaWxlVGhyZWFk
VGFzazAoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kKQorICAgICAgICA6IEZpbGVU
aHJlYWQ6OlRhc2soc3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgq
c3RyZWFtKCkuKm1fbWV0aG9kKSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9t
ZXRob2Q7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgorY2xhc3Mg
RmlsZVRocmVhZFRhc2sxIDogcHVibGljIEZpbGVUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAg
IHR5cGVkZWYgdm9pZCAoRmlsZVN0cmVhbTo6Kk1ldGhvZCkoTVAxKTsKKyAgICB0eXBlZGVmIEZp
bGVUaHJlYWRUYXNrMTxQMSwgTVAxPiBGaWxlVGhyZWFkVGFzazsKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKworICAgIHN0
YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrPiBjcmVhdGUoRmlsZVN0cmVhbSogc3RyZWFt
LCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgRmlsZVRocmVhZFRhc2soc3RyZWFtLCBtZXRob2QsIHBhcmFtZXRlcjEpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBGaWxlVGhyZWFkVGFzazEoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRo
b2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKKyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNr
KHN0cmVhbSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0
ZXIxKHBhcmFtZXRlcjEpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
VGFzaygpCisgICAgeworICAgICAgICAoKnN0cmVhbSgpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIx
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFy
YW1ldGVyMTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVu
YW1lIFAyLCB0eXBlbmFtZSBNUDI+CitjbGFzcyBGaWxlVGhyZWFkVGFzazIgOiBwdWJsaWMgRmls
ZVRocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChGaWxlU3RyZWFtOjoq
TWV0aG9kKShNUDEsIE1QMik7CisgICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazI8UDEsIE1QMSwg
UDIsIE1QMj4gRmlsZVRocmVhZFRhc2s7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFk
VGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBG
aWxlVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisKKyAgICBzdGF0aWMg
UGFzc093blB0cjxGaWxlVGhyZWFkVGFzaz4gY3JlYXRlKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0
aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCwgcGFyYW1l
dGVyMSwgcGFyYW1ldGVyMik7CisgICAgfQorCitwcml2YXRlOgorICAgIEZpbGVUaHJlYWRUYXNr
MihGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQ
YXJhbTIgcGFyYW1ldGVyMikKKyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVhbSkKKyAg
ICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRl
cjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0cmVhbSgp
LiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1f
cGFyYW1ldGVyMjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5
cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+CitjbGFz
cyBGaWxlVGhyZWFkVGFzazMgOiBwdWJsaWMgRmlsZVRocmVhZDo6VGFzayB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiB2b2lkIChGaWxlU3RyZWFtOjoqTWV0aG9kKShNUDEsIE1QMiwgTVAzKTsKKyAg
ICB0eXBlZGVmIEZpbGVUaHJlYWRUYXNrMzxQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzPiBGaWxl
VGhyZWFkVGFzazsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAx
Pjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNr
VHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEZpbGVU
aHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKworICAgIHN0YXRpYyBQYXNz
T3duUHRyPEZpbGVUaHJlYWRUYXNrPiBjcmVhdGUoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJh
bWV0ZXIzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0s
IG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMyk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEZpbGVUaHJlYWRUYXNrMyhGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBt
ZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFt
ZXRlcjMpCisgICAgICAgIDogRmlsZVRocmVhZDo6VGFzayhzdHJlYW0pCisgICAgICAgICwgbV9t
ZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAg
ICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJh
bWV0ZXIzKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQor
ICAgIHsKKyAgICAgICAgKCpzdHJlYW0oKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJh
bWV0ZXIyLCBtX3BhcmFtZXRlcjMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9t
ZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQ
MyBtX3BhcmFtZXRlcjM7Cit9OworCitQYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0
ZUZpbGVUaHJlYWRUYXNrKAorICAgIEZpbGVTdHJlYW0qIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lk
IChGaWxlU3RyZWFtOjoqbWV0aG9kKSgpKQoreworICAgIHJldHVybiBGaWxlVGhyZWFkVGFzazA6
OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgorUGFzc093blB0cjxGaWxlVGhyZWFkOjpUYXNr
PiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKKyAgICBGaWxlU3RyZWFtKiBjb25zdCBjYWxsZWUsCisg
ICAgdm9pZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoTVAxKSwKKyAgICBjb25zdCBQMSYgcGFyYW1l
dGVyMSkKK3sKKyAgICByZXR1cm4gRmlsZVRocmVhZFRhc2sxPHR5cGVuYW1lIENyb3NzVGhyZWFk
Q29waWVyPFAxPjo6VHlwZSwgTVAxPjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAg
IG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIs
IHR5cGVuYW1lIE1QMj4KK1Bhc3NPd25QdHI8RmlsZVRocmVhZDo6VGFzaz4gY3JlYXRlRmlsZVRo
cmVhZFRhc2soCisgICAgRmlsZVN0cmVhbSogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKEZpbGVT
dHJlYW06OiptZXRob2QpKE1QMSwgTVAyKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAg
ICBjb25zdCBQMiYgcGFyYW1ldGVyMikKK3sKKyAgICByZXR1cm4gRmlsZVRocmVhZFRhc2syPHR5
cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1Ro
cmVhZENvcGllcjxQMj46OlR5cGUsIE1QMj46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAg
ICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0
ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5
cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMz4KK1Bhc3NPd25QdHI8RmlsZVRo
cmVhZDo6VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCisgICAgRmlsZVN0cmVhbSogY29uc3Qg
Y2FsbGVlLAorICAgIHZvaWQgKEZpbGVTdHJlYW06OiptZXRob2QpKE1QMSwgTVAyLCBNUDMpLAor
ICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAg
IGNvbnN0IFAzJiBwYXJhbWV0ZXIzKQoreworICAgIHJldHVybiBGaWxlVGhyZWFkVGFzazM8dHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46
OlR5cGUsIE1QMz46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisg
ICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMykpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBGaWxlVGhyZWFkVGFza19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53006</attachid>
            <date>2010-04-09 15:51:27 -0700</date>
            <delta_ts>2010-04-09 16:03:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37218-20100409155126.patch</filename>
            <type>text/plain</type>
            <size>27106</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDliOGQxZi4uNzkzMmY2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0wNC0wOSAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZpbGVTdHJlYW1Qcm94eSB0aGF0IGNhbGxzIEZp
bGVTdHJlYW0gbWV0aG9kcyBvbiBGaWxlVGhyZWFkIGZvciBGaWxlQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzIxOAorCisgICAgICAgIE5vIG5l
dyB0ZXN0czsgdGVzdHMgd2lsbCBiZSBhZGRlZCB3aGVuIHdlIGFkZCB1cHBlciBsYXllciBpbXBs
ZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlU3RyZWFtOjpzdG9wKToKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW0uaDoKKyAgICAg
ICAgKiBodG1sL0ZpbGVTdHJlYW1DbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJl
YW1DbGllbnQ6OmRpZFN0b3ApOgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbVByb3h5LmNwcDog
QWRkZWQKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW1Qcm94eS5oOiBBZGRlZAorICAgICAgICAq
IGh0bWwvRmlsZVRocmVhZFRhc2suaDogQWRkZWQKKwogMjAxMC0wMy0zMCAgRHVtaXRydSBEYW5p
bGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkg
R2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCmluZGV4IDVhMTY1ZTIuLjNjOTA1NTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTAzMiw4ICsx
MDMyLDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0u
Y3BwIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbUNsaWVudC5oIFwKKwlXZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcCBcCisJV2Vi
Q29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVRocmVhZC5j
cHAgXAogCVdlYkNvcmUvaHRtbC9GaWxlVGhyZWFkLmggXAorCVdlYkNvcmUvaHRtbC9GaWxlVGhy
ZWFkVGFzay5oIFwKIAlXZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcCBcCiAJV2ViQ29yZS9o
dG1sL0Zvcm1EYXRhTGlzdC5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3Bw
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggMzU2N2Y5ZS4uNzZlNGRmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE0MzMsOCArMTQzMywxMSBAQAogICAg
ICAgICAgICAgJ2h0bWwvRmlsZVN0cmVhbS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRmlsZVN0
cmVhbS5oJywKICAgICAgICAgICAgICdodG1sL0ZpbGVTdHJlYW1DbGllbnQuaCcsCisgICAgICAg
ICAgICAnaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwJywKKyAgICAgICAgICAgICdodG1sL0ZpbGVT
dHJlYW1Qcm94eS5oJywKICAgICAgICAgICAgICdodG1sL0ZpbGVUaHJlYWQuY3BwJywKICAgICAg
ICAgICAgICdodG1sL0ZpbGVUaHJlYWQuaCcsCisgICAgICAgICAgICAnaHRtbC9GaWxlVGhyZWFk
VGFzay5oJywKICAgICAgICAgICAgICdodG1sL0Zvcm1EYXRhTGlzdC5jcHAnLAogICAgICAgICAg
ICAgJ2h0bWwvRm9ybURhdGFMaXN0LmgnLAogICAgICAgICAgICAgJ2h0bWwvSFRNTEFsbENvbGxl
Y3Rpb24uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dl
YkNvcmUucHJvCmluZGV4IGU3YmI5ODMuLjc0MjViMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNjE1LDYgKzYxNSw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIGh0bWwvRmlsZS5jcHAgXAogICAgIGh0bWwvRmlsZUxpc3QuY3BwIFwK
ICAgICBodG1sL0ZpbGVTdHJlYW0uY3BwIFwKKyAgICBodG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAg
XAogICAgIGh0bWwvRmlsZVRocmVhZC5jcHAgXAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmNwcCBc
CiAgICAgaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAgXApAQCAtMTMyNiw3ICsxMzI3LDkgQEAg
SEVBREVSUyArPSBcCiAgICAgaHRtbC9GaWxlTGlzdC5oIFwKICAgICBodG1sL0ZpbGVTdHJlYW0u
aCBcCiAgICAgaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmggXAorICAgIGh0bWwvRmlsZVN0cmVhbVBy
b3h5LmggXAogICAgIGh0bWwvRmlsZVRocmVhZC5oIFwKKyAgICBodG1sL0ZpbGVUaHJlYWRUYXNr
LmggXAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmggXAogICAgIGh0bWwvSFRNTEFsbENvbGxlY3Rp
b24uaCBcCiAgICAgaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCmluZGV4IDlkZWFjY2YuLmE2NDYwYWUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzAyNDksNiArMzAyNDksMTQgQEAKIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGaWxlU3RyZWFt
UHJveHkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxGaWxlU3RyZWFtUHJveHkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVRocmVhZC5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzAyNTcsNiArMzAyNjUsMTAgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGaWxlVGhyZWFkVGFz
ay5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caHRtbFxGb3JtRGF0YUxpc3QuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWI3YWViMi4uYmQyODJlNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyMTQsNiAr
MjIxNCw5IEBACiAJCTg5NTI1M0Q3MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0Q0MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLzsgfTsKIAkJODk1MjUzRDgxMTZDNEM2
ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg5NTI1M0Q1MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmgg
Ki87IH07CiAJCTg5NTI1M0Q5MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENjEx
NkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oICovOyB9OworCQk4OTUyNTNEQzEx
NkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RBMTE2QzRFRjUwMENBQkYwMCAvKiBG
aWxlU3RyZWFtUHJveHkuY3BwICovOyB9OworCQk4OTUyNTNERDExNkM0RUY1MDBDQUJGMDAgLyog
RmlsZVN0cmVhbVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggKi87
IH07CisJCTg5NTI1M0RGMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREUxMTZDNEYw
NjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi87IH07CiAJCTkzMDJCMEJEMEQ3OUY4Mjkw
MEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAg
Ki87IH07CiAJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMw
MEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVCMjRDMDk4RjFC
NkIwMEMyODg1NSAvKiBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC03NjcwLDYgKzc2NzMsOSBAQAogCQk4OTUyNTNENDExNkM0QzY4MDBD
QUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGaWxlU3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODk1MjUz
RDUxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsZVN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
OTUyNTNENjExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlU3RyZWFtQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg5NTI1M0RBMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVN0cmVhbVBy
b3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk1MjUzREIxMTZDNEVGNTAw
Q0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWxlU3RyZWFtUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk1
MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVUaHJlYWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUdyb3VwLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlR3JvdXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjk1OSw2ICsxMjk2NSw5IEBACiAJCTkzRUVDMUVDMDlDMjg3
NzcwMEM1MTVEMSAvKiBodG1sICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk4OTUyNTNERTExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCAq
LywKKwkJCQk4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCAq
LywKKwkJCQk4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggKi8s
CiAJCQkJODk1MjUzRDQxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwICovLAogCQkJ
CTg5NTI1M0Q1MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmggKi8sCiAJCQkJODk1MjUz
RDYxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLywKQEAgLTE4ODI1LDYg
KzE4ODM0LDggQEAKIAkJCQlDNUQ0QUE3QTExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNz
TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTUyNTNEODExNkM0QzY4MDBDQUJGMDAgLyogRmls
ZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk1MjUzRDkxMTZDNEM2ODAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1DbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0REMTE2QzRFRjUw
MENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0RG
MTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0y
MTA0Niw2ICsyMTA1Nyw3IEBACiAJCQkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1RDRBQTc5MTE2QkFGQjYw
MDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODk1MjUz
RDcxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
ODk1MjUzREMxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBiL1dlYkNvcmUv
aHRtbC9GaWxlU3RyZWFtLmNwcAppbmRleCA1M2M5OTJjLi44NGEyOGQ2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0u
Y3BwCkBAIC01Niw2ICs1NiwxMyBAQCB2b2lkIEZpbGVTdHJlYW06OnN0YXJ0KCkKICAgICBtX2Ns
aWVudC0+ZGlkU3RhcnQoKTsKIH0KIAordm9pZCBGaWxlU3RyZWFtOjpzdG9wKCkKK3sKKyAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBjbG9zZSgpOworICAgIG1fY2xpZW50LT5kaWRT
dG9wKCk7Cit9CisKIHZvaWQgRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQoQmxvYiopCiB7CiAgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbS5oIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uaAppbmRleCBiYTdjMDU2Li5iZGE4ZmM3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5oCisrKyBiL1dlYkNvcmUvaHRt
bC9GaWxlU3RyZWFtLmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkZp
bGVTdHJlYW0oKTsKIAogICAgIHZvaWQgc3RhcnQoKTsKKyAgICB2b2lkIHN0b3AoKTsKIAogICAg
IHZvaWQgb3BlbkZvclJlYWQoQmxvYiopOwogICAgIHZvaWQgb3BlbkZvcldyaXRlKGNvbnN0IFN0
cmluZyYgcGF0aCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbUNsaWVudC5o
IGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaAppbmRleCA5ZDI0YmRmLi5lMWFlYzUz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbUNsaWVudC5oCisrKyBiL1dlYkNv
cmUvaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogCiAg
ICAgLy8gRm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZy4KICAgICB2aXJ0dWFsIHZvaWQgZGlk
U3RhcnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcCgpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBkaWRGaW5pc2goKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChFeGNlcHRpb25D
b2RlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0U2l6ZShsb25nIGxvbmcpIHsgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAgYi9XZWJDb3JlL2h0bWwv
RmlsZVN0cmVhbVByb3h5LmNwcAppbmRleCBlNjlkZTI5Li5iNTExYmViIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbVByb3h5LmNwcApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKKworI2luY2x1ZGUg
IkZpbGVTdHJlYW1Qcm94eS5oIgorCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkZpbGVT
dHJlYW0uaCIKKyNpbmNsdWRlICJGaWxlVGhyZWFkLmgiCisjaW5jbHVkZSAiRmlsZVRocmVhZFRh
c2suaCIKKyNpbmNsdWRlICJHZW5lcmljV29ya2VyVGFzay5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ZpbGVTdHJlYW1Qcm94eTo6RmlsZVN0cmVhbVByb3h5KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKKyAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zdHJl
YW0oRmlsZVN0cmVhbTo6Y3JlYXRlKHRoaXMpKQoreworICAgIC8vIEhvbGRzIGFuIGV4dHJhIHJl
ZiBzbyB0aGF0IGl0IGRvZXNuJ3QgZ2V0IGRlbGV0ZWQgd2hpbGUgaXQgaXMgd2FpdGluZyBub3Rp
ZmljYXRpb25zIGZyb20gdGhlIHRhc2tzIGl0IHBvc3RlZCB0byB0aGUgZmlsZSB0aHJlYWQuCisg
ICAgcmVmKCk7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFz
ayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06OnN0YXJ0KSk7Cit9CisKK0ZpbGVTdHJlYW1Q
cm94eTo6fkZpbGVTdHJlYW1Qcm94eSgpCit7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5Ojpv
cGVuRm9yUmVhZChCbG9iKiBibG9iKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3Jl
YXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjpvcGVuRm9yUmVh
ZCwgYmxvYikpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6b3BlbkZvcldyaXRlKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVU
aHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6b3BlbkZvcldyaXRlLCBwYXRo
KSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpjbG9zZSgpCit7CisgICAgZmlsZVRocmVh
ZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVT
dHJlYW06OmNsb3NlKSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpyZWFkKGNoYXIqIGJ1
ZmZlciwgaW50IGxlbmd0aCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZp
bGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6cmVhZCwgYnVmZmVyLCBs
ZW5ndGgpKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OndyaXRlKEJsb2IqIGJsb2IsIGxv
bmcgbG9uZyBwb3NpdGlvbiwgaW50IGxlbmd0aCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RU
YXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6d3Jp
dGUsIGJsb2IsIHBvc2l0aW9uLCBsZW5ndGgpKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6
OnRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbikKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RU
YXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6dHJ1
bmNhdGUsIHBvc2l0aW9uKSk7Cit9CisKK0ZpbGVUaHJlYWQqIEZpbGVTdHJlYW1Qcm94eTo6Zmls
ZVRocmVhZCgpCit7CisgICAgQVNTRVJUKG1fY29udGV4dC0+ZmlsZVRocmVhZCgpKTsKKyAgICBy
ZXR1cm4gbV9jb250ZXh0LT5maWxlVGhyZWFkKCk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5
OjphYm9ydCgpCit7CisgICAgZmlsZVRocmVhZCgpLT51bnNjaGVkdWxlVGFza3MobV9zdHJlYW0u
Z2V0KCkpOworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2so
bV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjpzdG9wKSk7Cit9CisKK3N0YXRpYyB2b2lkIG5v
dGlmeUdldFNpemVPbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Q
cm94eSogcHJveHksIGxvbmcgbG9uZyBzaXplKQoreworICAgIGlmIChwcm94eS0+Y2xpZW50KCkp
CisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkR2V0U2l6ZShzaXplKTsKK30KKwordm9pZCBG
aWxlU3RyZWFtUHJveHk6OmRpZEdldFNpemUobG9uZyBsb25nIHNpemUpCit7CisgICAgQVNTRVJU
KCFtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5R2V0U2l6ZU9uQ29udGV4dCwgdGhpcywgc2l6ZSkp
OworfQorCitzdGF0aWMgdm9pZCBub3RpZnlSZWFkT25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0
ZXNSZWFkKQoreworICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5jbGll
bnQoKS0+ZGlkUmVhZChkYXRhLCBieXRlc1JlYWQpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94
eTo6ZGlkUmVhZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFkKQoreworICAgIEFTU0VS
VCghbV9jb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFz
ayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeVJlYWRPbkNvbnRleHQsIHRoaXMsIGRhdGEsIGJ5
dGVzUmVhZCkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlXcml0ZU9uQ29udGV4dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwgaW50IGJ5dGVzV3JpdHRl
bikKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xpZW50KCkt
PmRpZFdyaXRlKGJ5dGVzV3JpdHRlbik7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRX
cml0ZShpbnQgYnl0ZXNXcml0dGVuKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0LT5pc0NvbnRl
eHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2so
Jm5vdGlmeVdyaXRlT25Db250ZXh0LCB0aGlzLCBieXRlc1dyaXR0ZW4pKTsKK30KKwordm9pZCBu
b3RpZnlTdGFydE9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVBy
b3h5KiBwcm94eSkKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+
Y2xpZW50KCktPmRpZFN0YXJ0KCk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRTdGFy
dCgpCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBt
X2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5U3RhcnRPbkNvbnRl
eHQsIHRoaXMpKTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5RmluaXNoT25Db250ZXh0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5KQoreworICAgIGlmIChw
cm94eS0+Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkRmluaXNoKCk7Cit9
CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRGaW5pc2goKQoreworICAgIEFTU0VSVCghbV9j
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVh
dGVDYWxsYmFja1Rhc2soJm5vdGlmeUZpbmlzaE9uQ29udGV4dCwgdGhpcykpOworfQorCitzdGF0
aWMgdm9pZCBub3RpZnlGYWlsT25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxl
U3RyZWFtUHJveHkqIHByb3h5LCBFeGNlcHRpb25Db2RlIGVjKQoreworICAgIGlmIChwcm94eS0+
Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkRmFpbChlYyk7Cit9CisKK3Zv
aWQgRmlsZVN0cmVhbVByb3h5OjpkaWRGYWlsKEV4Y2VwdGlvbkNvZGUgZWMpCit7CisgICAgQVNT
RVJUKCFtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2NvbnRleHQtPnBvc3RU
YXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5RmFpbE9uQ29udGV4dCwgdGhpcywgZWMpKTsK
K30KKworc3RhdGljIHZvaWQgZGVyZWZQcm94eU9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSkKK3sKKyAgICBwcm94eS0+ZGVyZWYoKTsKK30K
Kwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmRpZFN0b3AoKQoreworICAgIG1fY29udGV4dC0+cG9z
dFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkZXJlZlByb3h5T25Db250ZXh0LCB0aGlzKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1dSSVRF
UikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuaCBiL1dlYkNvcmUv
aHRtbC9GaWxlU3RyZWFtUHJveHkuaAppbmRleCBlNjlkZTI5Li4zMWYxYjRkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmgKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVT
dHJlYW1Qcm94eS5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGaWxlU3RyZWFtUHJveHlfaAor
I2RlZmluZSBGaWxlU3RyZWFtUHJveHlfaAorCisjaWYgRU5BQkxFKEZJTEVfUkVBREVSKSB8fCBF
TkFCTEUoRklMRV9XUklURVIpCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVk
ZSAiRmlsZVN0cmVhbUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmxvYjsKK2NsYXNzIEZpbGVTdHJlYW07CitjbGFzcyBG
aWxlVGhyZWFkOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFN0cmluZzsK
KworLy8gQSBwcm94eSBtb2R1bGUgdGhhdCBjYWxscyBjb3JyZXNwb25kaW5nIEZpbGVTdHJlYW0g
bWV0aG9kcyBvbiB0aGUgZmlsZSB0aHJlYWQuICBOb3RlOiB5b3UgbXVzdCBjYWxsIGFib3J0KCkg
YmVmb3JlIGRlc3Ryb3lpbmcgYSBGaWxlU3RyZWFtUHJveHkgaW5zdGFuY2UsIGUuZy4gaW4gdGhl
IGRlc2N0cnVjdG9yIG9mIGFuIG9iamVjdCB0aGF0IGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBw
cm94eS4KK2NsYXNzIEZpbGVTdHJlYW1Qcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVTdHJl
YW1Qcm94eT4sIHB1YmxpYyBGaWxlU3RyZWFtQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGaWxlU3RyZWFtUHJveHk+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEZpbGVTdHJlYW1Qcm94eShjb250ZXh0LCBjbGllbnQpKTsKKyAgICB9
CisgICAgdmlydHVhbCB+RmlsZVN0cmVhbVByb3h5KCk7CisKKyAgICB2b2lkIG9wZW5Gb3JSZWFk
KEJsb2IqIGJsb2IpOworICAgIHZvaWQgb3BlbkZvcldyaXRlKGNvbnN0IFN0cmluZyYgcGF0aCk7
CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgcmVhZChjaGFyKiBidWZmZXIsIGludCBsZW5n
dGgpOworICAgIHZvaWQgd3JpdGUoQmxvYiogYmxvYiwgbG9uZyBsb25nIHBvc2l0aW9uLCBpbnQg
bGVuZ3RoKTsKKyAgICB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbik7CisKKyAgICAv
LyBBYm9ydCgpIGRlcmVmcyBpdHNlbGY7IHRoZSBjYWxsZXIgc2hvdWxkIG5vdCByZWN5Y2xlIHRo
ZSBpbnN0YW5jZSBhZnRlciBjYWxsaW5nIGFib3J0KCkuCisgICAgdm9pZCBhYm9ydCgpOworCisg
ICAgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0K
KworcHJpdmF0ZToKKyAgICBGaWxlU3RyZWFtUHJveHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IEZpbGVTdHJlYW1DbGllbnQqKTsKKworICAgIC8vIEZpbGVTdHJlYW1DbGllbnQgbWV0aG9kcy4K
KyAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0U2l6ZShsb25nIGxvbmcpOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWFkKGNvbnN0IGNoYXIqLCBpbnQpOworICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZShp
bnQpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
RmFpbChFeGNlcHRpb25Db2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkU3RvcCgpOworCisgICAgRmlsZVRocmVhZCogZmlsZVRocmVhZCgpOwor
ICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX2NvbnRleHQ7CisgICAgRmlsZVN0
cmVhbUNsaWVudCogbV9jbGllbnQ7CisgICAgUmVmUHRyPEZpbGVTdHJlYW0+IG1fc3RyZWFtOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfUkVB
REVSKSB8fCBFTkFCTEUoRklMRV9XUklURVIpCisKKyNlbmRpZiAvLyBGaWxlU3RyZWFtUHJveHlf
aApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWRUYXNrLmggYi9XZWJDb3JlL2h0
bWwvRmlsZVRocmVhZFRhc2suaAppbmRleCBlNjlkZTI5Li5mNGM1OWQ4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvRmlsZVRocmVhZFRhc2suaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVRocmVh
ZFRhc2suaApAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpbGVUaHJlYWRUYXNrX2gKKyNkZWZp
bmUgRmlsZVRocmVhZFRhc2tfaAorCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKKyNp
bmNsdWRlICJGaWxlVGhyZWFkLmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VHlwZVRyYWl0cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRyYWl0cyBmb3IgdGhl
IFRhc2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHMg
eworICAgIHR5cGVkZWYgY29uc3QgVCYgUGFyYW1UeXBlOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEZpbGVUaHJlYWRUYXNrVHJhaXRzPFQqPiB7CisgICAgdHlwZWRlZiBUKiBQ
YXJhbVR5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRocmVhZFRh
c2tUcmFpdHM8UGFzc1JlZlB0cjxUPiA+IHsKKyAgICB0eXBlZGVmIFBhc3NSZWZQdHI8VD4gUGFy
YW1UeXBlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZpbGVUaHJlYWRUYXNr
VHJhaXRzPFBhc3NPd25QdHI8VD4gPiB7CisgICAgdHlwZWRlZiBQYXNzT3duUHRyPFQ+IFBhcmFt
VHlwZTsKK307CisKK2NsYXNzIEZpbGVUaHJlYWRUYXNrMCA6IHB1YmxpYyBGaWxlVGhyZWFkOjpU
YXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKEZpbGVTdHJlYW06OipNZXRob2QpKCk7
CisgICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazAgRmlsZVRocmVhZFRhc2s7CisKKyAgICBzdGF0
aWMgUGFzc093blB0cjxGaWxlVGhyZWFkVGFzaz4gY3JlYXRlKEZpbGVTdHJlYW0qIHN0cmVhbSwg
TWV0aG9kIG1ldGhvZCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgRmlsZVRocmVhZFRhc2so
c3RyZWFtLCBtZXRob2QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGaWxlVGhyZWFkVGFzazAo
RmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kKQorICAgICAgICA6IEZpbGVUaHJlYWQ6
OlRhc2soc3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RyZWFt
KCkuKm1fbWV0aG9kKSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgorY2xhc3MgRmlsZVRo
cmVhZFRhc2sxIDogcHVibGljIEZpbGVUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVk
ZWYgdm9pZCAoRmlsZVN0cmVhbTo6Kk1ldGhvZCkoTVAxKTsKKyAgICB0eXBlZGVmIEZpbGVUaHJl
YWRUYXNrMTxQMSwgTVAxPiBGaWxlVGhyZWFkVGFzazsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEZp
bGVUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKworICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrPiBjcmVhdGUoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRo
b2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcg
RmlsZVRocmVhZFRhc2soc3RyZWFtLCBtZXRob2QsIHBhcmFtZXRlcjEpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBGaWxlVGhyZWFkVGFzazEoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0
aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKKyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVh
bSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBh
cmFtZXRlcjEpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygp
CisgICAgeworICAgICAgICAoKnN0cmVhbSgpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVy
MTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAy
LCB0eXBlbmFtZSBNUDI+CitjbGFzcyBGaWxlVGhyZWFkVGFzazIgOiBwdWJsaWMgRmlsZVRocmVh
ZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChGaWxlU3RyZWFtOjoqTWV0aG9k
KShNUDEsIE1QMik7CisgICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazI8UDEsIE1QMSwgUDIsIE1Q
Mj4gRmlsZVRocmVhZFRhc2s7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1Ry
YWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhy
ZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisKKyAgICBzdGF0aWMgUGFzc093
blB0cjxGaWxlVGhyZWFkVGFzaz4gY3JlYXRlKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1l
dGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCwgcGFyYW1ldGVyMSwg
cGFyYW1ldGVyMik7CisgICAgfQorCitwcml2YXRlOgorICAgIEZpbGVUaHJlYWRUYXNrMihGaWxl
U3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIg
cGFyYW1ldGVyMikKKyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVhbSkKKyAgICAgICAg
LCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisg
ICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0cmVhbSgpLiptX21l
dGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1l
dGVyMjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1l
IFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+CitjbGFzcyBGaWxl
VGhyZWFkVGFzazMgOiBwdWJsaWMgRmlsZVRocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiB2b2lkIChGaWxlU3RyZWFtOjoqTWV0aG9kKShNUDEsIE1QMiwgTVAzKTsKKyAgICB0eXBl
ZGVmIEZpbGVUaHJlYWRUYXNrMzxQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzPiBGaWxlVGhyZWFk
VGFzazsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFy
YW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRz
PFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRU
YXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKworICAgIHN0YXRpYyBQYXNzT3duUHRy
PEZpbGVUaHJlYWRUYXNrPiBjcmVhdGUoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9k
LCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhv
ZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMyk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEZpbGVUaHJlYWRUYXNrMyhGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2Qs
IFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMp
CisgICAgICAgIDogRmlsZVRocmVhZDo6VGFzayhzdHJlYW0pCisgICAgICAgICwgbV9tZXRob2Qo
bWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1f
cGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIz
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsK
KyAgICAgICAgKCpzdHJlYW0oKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIy
LCBtX3BhcmFtZXRlcjMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7
CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQMyBtX3Bh
cmFtZXRlcjM7Cit9OworCitQYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVU
aHJlYWRUYXNrKAorICAgIEZpbGVTdHJlYW0qIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChGaWxl
U3RyZWFtOjoqbWV0aG9kKSgpKQoreworICAgIHJldHVybiBGaWxlVGhyZWFkVGFzazA6OmNyZWF0
ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBQMSwgdHlwZW5hbWUgTVAxPgorUGFzc093blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBjcmVh
dGVGaWxlVGhyZWFkVGFzaygKKyAgICBGaWxlU3RyZWFtKiBjb25zdCBjYWxsZWUsCisgICAgdm9p
ZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoTVAxKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSkK
K3sKKyAgICByZXR1cm4gRmlsZVRocmVhZFRhc2sxPHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVy
PFAxPjo6VHlwZSwgTVAxPjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhv
ZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVu
YW1lIE1QMj4KK1Bhc3NPd25QdHI8RmlsZVRocmVhZDo6VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRh
c2soCisgICAgRmlsZVN0cmVhbSogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKEZpbGVTdHJlYW06
OiptZXRob2QpKE1QMSwgTVAyKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25z
dCBQMiYgcGFyYW1ldGVyMikKK3sKKyAgICByZXR1cm4gRmlsZVRocmVhZFRhc2syPHR5cGVuYW1l
IENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENv
cGllcjxQMj46OlR5cGUsIE1QMj46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBt
ZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwK
KyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1l
IE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMz4KK1Bhc3NPd25QdHI8RmlsZVRocmVhZDo6
VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCisgICAgRmlsZVN0cmVhbSogY29uc3QgY2FsbGVl
LAorICAgIHZvaWQgKEZpbGVTdHJlYW06OiptZXRob2QpKE1QMSwgTVAyLCBNUDMpLAorICAgIGNv
bnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0
IFAzJiBwYXJhbWV0ZXIzKQoreworICAgIHJldHVybiBGaWxlVGhyZWFkVGFzazM8dHlwZW5hbWUg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29w
aWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUs
IE1QMz46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAg
IENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NU
aHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENv
cGllcjxQMz46OmNvcHkocGFyYW1ldGVyMykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBGaWxlVGhyZWFkVGFza19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53009</attachid>
            <date>2010-04-09 16:03:21 -0700</date>
            <delta_ts>2010-04-09 17:29:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37218-20100409160320.patch</filename>
            <type>text/plain</type>
            <size>27126</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDliOGQxZi4uYTJlOGE5MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMS0wNC0wOSAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZpbGVTdHJlYW1Qcm94eSB0aGF0IGNhbGxzIEZp
bGVTdHJlYW0gbWV0aG9kcyBvbiBGaWxlVGhyZWFkIGZvciBGaWxlQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzIxOAorCisgICAgICAgIE5vIG5l
dyB0ZXN0czsgdGVzdHMgd2lsbCBiZSBhZGRlZCB3aGVuIHdlIGFkZCB1cHBlciBsYXllciBpbXBs
ZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlU3RyZWFtOjpzdG9wKToKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW0uaDoKKyAgICAg
ICAgKiBodG1sL0ZpbGVTdHJlYW1DbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJl
YW1DbGllbnQ6OmRpZFN0b3ApOgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbVByb3h5LmNwcDog
QWRkZWQKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW1Qcm94eS5oOiBBZGRlZAorICAgICAgICAq
IGh0bWwvRmlsZVRocmVhZFRhc2suaDogQWRkZWQKKwogMjAxMC0wMy0zMCAgRHVtaXRydSBEYW5p
bGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkg
R2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCmluZGV4IDVhMTY1ZTIuLjNjOTA1NTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTAzMiw4ICsx
MDMyLDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0u
Y3BwIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbUNsaWVudC5oIFwKKwlXZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcCBcCisJV2Vi
Q29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVRocmVhZC5j
cHAgXAogCVdlYkNvcmUvaHRtbC9GaWxlVGhyZWFkLmggXAorCVdlYkNvcmUvaHRtbC9GaWxlVGhy
ZWFkVGFzay5oIFwKIAlXZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcCBcCiAJV2ViQ29yZS9o
dG1sL0Zvcm1EYXRhTGlzdC5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3Bw
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggMzU2N2Y5ZS4uNzZlNGRmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE0MzMsOCArMTQzMywxMSBAQAogICAg
ICAgICAgICAgJ2h0bWwvRmlsZVN0cmVhbS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRmlsZVN0
cmVhbS5oJywKICAgICAgICAgICAgICdodG1sL0ZpbGVTdHJlYW1DbGllbnQuaCcsCisgICAgICAg
ICAgICAnaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwJywKKyAgICAgICAgICAgICdodG1sL0ZpbGVT
dHJlYW1Qcm94eS5oJywKICAgICAgICAgICAgICdodG1sL0ZpbGVUaHJlYWQuY3BwJywKICAgICAg
ICAgICAgICdodG1sL0ZpbGVUaHJlYWQuaCcsCisgICAgICAgICAgICAnaHRtbC9GaWxlVGhyZWFk
VGFzay5oJywKICAgICAgICAgICAgICdodG1sL0Zvcm1EYXRhTGlzdC5jcHAnLAogICAgICAgICAg
ICAgJ2h0bWwvRm9ybURhdGFMaXN0LmgnLAogICAgICAgICAgICAgJ2h0bWwvSFRNTEFsbENvbGxl
Y3Rpb24uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dl
YkNvcmUucHJvCmluZGV4IGU3YmI5ODMuLjc0MjViMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNjE1LDYgKzYxNSw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIGh0bWwvRmlsZS5jcHAgXAogICAgIGh0bWwvRmlsZUxpc3QuY3BwIFwK
ICAgICBodG1sL0ZpbGVTdHJlYW0uY3BwIFwKKyAgICBodG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAg
XAogICAgIGh0bWwvRmlsZVRocmVhZC5jcHAgXAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmNwcCBc
CiAgICAgaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAgXApAQCAtMTMyNiw3ICsxMzI3LDkgQEAg
SEVBREVSUyArPSBcCiAgICAgaHRtbC9GaWxlTGlzdC5oIFwKICAgICBodG1sL0ZpbGVTdHJlYW0u
aCBcCiAgICAgaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmggXAorICAgIGh0bWwvRmlsZVN0cmVhbVBy
b3h5LmggXAogICAgIGh0bWwvRmlsZVRocmVhZC5oIFwKKyAgICBodG1sL0ZpbGVUaHJlYWRUYXNr
LmggXAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmggXAogICAgIGh0bWwvSFRNTEFsbENvbGxlY3Rp
b24uaCBcCiAgICAgaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCmluZGV4IDlkZWFjY2YuLmE2NDYwYWUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzAyNDksNiArMzAyNDksMTQgQEAKIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGaWxlU3RyZWFt
UHJveHkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxGaWxlU3RyZWFtUHJveHkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVRocmVhZC5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzAyNTcsNiArMzAyNjUsMTAgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGaWxlVGhyZWFkVGFz
ay5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caHRtbFxGb3JtRGF0YUxpc3QuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWI3YWViMi4uYmQyODJlNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyMTQsNiAr
MjIxNCw5IEBACiAJCTg5NTI1M0Q3MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0Q0MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLzsgfTsKIAkJODk1MjUzRDgxMTZDNEM2
ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg5NTI1M0Q1MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmgg
Ki87IH07CiAJCTg5NTI1M0Q5MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENjEx
NkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oICovOyB9OworCQk4OTUyNTNEQzEx
NkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RBMTE2QzRFRjUwMENBQkYwMCAvKiBG
aWxlU3RyZWFtUHJveHkuY3BwICovOyB9OworCQk4OTUyNTNERDExNkM0RUY1MDBDQUJGMDAgLyog
RmlsZVN0cmVhbVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggKi87
IH07CisJCTg5NTI1M0RGMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREUxMTZDNEYw
NjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi87IH07CiAJCTkzMDJCMEJEMEQ3OUY4Mjkw
MEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAg
Ki87IH07CiAJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMw
MEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVCMjRDMDk4RjFC
NkIwMEMyODg1NSAvKiBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC03NjcwLDYgKzc2NzMsOSBAQAogCQk4OTUyNTNENDExNkM0QzY4MDBD
QUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGaWxlU3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODk1MjUz
RDUxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsZVN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
OTUyNTNENjExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlU3RyZWFtQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg5NTI1M0RBMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVN0cmVhbVBy
b3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk1MjUzREIxMTZDNEVGNTAw
Q0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWxlU3RyZWFtUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk1
MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVUaHJlYWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUdyb3VwLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlR3JvdXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjk1OSw2ICsxMjk2NSw5IEBACiAJCTkzRUVDMUVDMDlDMjg3
NzcwMEM1MTVEMSAvKiBodG1sICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk4OTUyNTNERTExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCAq
LywKKwkJCQk4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCAq
LywKKwkJCQk4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggKi8s
CiAJCQkJODk1MjUzRDQxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwICovLAogCQkJ
CTg5NTI1M0Q1MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmggKi8sCiAJCQkJODk1MjUz
RDYxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLywKQEAgLTE4ODI1LDYg
KzE4ODM0LDggQEAKIAkJCQlDNUQ0QUE3QTExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNz
TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTUyNTNEODExNkM0QzY4MDBDQUJGMDAgLyogRmls
ZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk1MjUzRDkxMTZDNEM2ODAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1DbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0REMTE2QzRFRjUw
MENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0RG
MTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0y
MTA0Niw2ICsyMTA1Nyw3IEBACiAJCQkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1RDRBQTc5MTE2QkFGQjYw
MDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODk1MjUz
RDcxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
ODk1MjUzREMxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBiL1dlYkNvcmUv
aHRtbC9GaWxlU3RyZWFtLmNwcAppbmRleCA1M2M5OTJjLi44NGEyOGQ2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0u
Y3BwCkBAIC01Niw2ICs1NiwxMyBAQCB2b2lkIEZpbGVTdHJlYW06OnN0YXJ0KCkKICAgICBtX2Ns
aWVudC0+ZGlkU3RhcnQoKTsKIH0KIAordm9pZCBGaWxlU3RyZWFtOjpzdG9wKCkKK3sKKyAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBjbG9zZSgpOworICAgIG1fY2xpZW50LT5kaWRT
dG9wKCk7Cit9CisKIHZvaWQgRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQoQmxvYiopCiB7CiAgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbS5oIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uaAppbmRleCBiYTdjMDU2Li5iZGE4ZmM3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5oCisrKyBiL1dlYkNvcmUvaHRt
bC9GaWxlU3RyZWFtLmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkZp
bGVTdHJlYW0oKTsKIAogICAgIHZvaWQgc3RhcnQoKTsKKyAgICB2b2lkIHN0b3AoKTsKIAogICAg
IHZvaWQgb3BlbkZvclJlYWQoQmxvYiopOwogICAgIHZvaWQgb3BlbkZvcldyaXRlKGNvbnN0IFN0
cmluZyYgcGF0aCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbUNsaWVudC5o
IGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaAppbmRleCA5ZDI0YmRmLi5lMWFlYzUz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbUNsaWVudC5oCisrKyBiL1dlYkNv
cmUvaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogCiAg
ICAgLy8gRm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZy4KICAgICB2aXJ0dWFsIHZvaWQgZGlk
U3RhcnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcCgpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBkaWRGaW5pc2goKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChFeGNlcHRpb25D
b2RlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0U2l6ZShsb25nIGxvbmcpIHsgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAgYi9XZWJDb3JlL2h0bWwv
RmlsZVN0cmVhbVByb3h5LmNwcAppbmRleCBlNjlkZTI5Li5mZmFlYTc4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbVByb3h5LmNwcApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKKworI2luY2x1ZGUg
IkZpbGVTdHJlYW1Qcm94eS5oIgorCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkZpbGVT
dHJlYW0uaCIKKyNpbmNsdWRlICJGaWxlVGhyZWFkLmgiCisjaW5jbHVkZSAiRmlsZVRocmVhZFRh
c2suaCIKKyNpbmNsdWRlICJHZW5lcmljV29ya2VyVGFzay5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ZpbGVTdHJlYW1Qcm94eTo6RmlsZVN0cmVhbVByb3h5KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKKyAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zdHJl
YW0oRmlsZVN0cmVhbTo6Y3JlYXRlKHRoaXMpKQoreworICAgIC8vIEhvbGRzIGFuIGV4dHJhIHJl
ZiBzbyB0aGF0IHRoZSBpbnN0YW5jZSB3aWxsIG5vdCBnZXQgZGVsZXRlZCB3aGlsZSB0aGVyZSBj
YW4gYmUgYW55IHRhc2tzIG9uIHRoZSBmaWxlIHRocmVhZC4KKyAgICByZWYoKTsKKyAgICBmaWxl
VGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAm
RmlsZVN0cmVhbTo6c3RhcnQpKTsKK30KKworRmlsZVN0cmVhbVByb3h5Ojp+RmlsZVN0cmVhbVBy
b3h5KCkKK3sKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JSZWFkKEJsb2IqIGJs
b2IpCit7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayht
X3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkLCBibG9iKSk7Cit9CisKK3Zv
aWQgRmlsZVN0cmVhbVByb3h5OjpvcGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBwYXRoKQorewor
ICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0u
Z2V0KCksICZGaWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUsIHBhdGgpKTsKK30KKwordm9pZCBGaWxl
U3RyZWFtUHJveHk6OmNsb3NlKCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0
ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6Y2xvc2UpKTsKK30K
Kwordm9pZCBGaWxlU3RyZWFtUHJveHk6OnJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQor
eworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJl
YW0uZ2V0KCksICZGaWxlU3RyZWFtOjpyZWFkLCBidWZmZXIsIGxlbmd0aCkpOworfQorCit2b2lk
IEZpbGVTdHJlYW1Qcm94eTo6d3JpdGUoQmxvYiogYmxvYiwgbG9uZyBsb25nIHBvc2l0aW9uLCBp
bnQgbGVuZ3RoKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVh
ZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjp3cml0ZSwgYmxvYiwgcG9zaXRpb24s
IGxlbmd0aCkpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6dHJ1bmNhdGUobG9uZyBsb25n
IHBvc2l0aW9uKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVh
ZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjp0cnVuY2F0ZSwgcG9zaXRpb24pKTsK
K30KKworRmlsZVRocmVhZCogRmlsZVN0cmVhbVByb3h5OjpmaWxlVGhyZWFkKCkKK3sKKyAgICBB
U1NFUlQobV9jb250ZXh0LT5maWxlVGhyZWFkKCkpOworICAgIHJldHVybiBtX2NvbnRleHQtPmZp
bGVUaHJlYWQoKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OnN0b3AoKQoreworICAgIGZp
bGVUaHJlYWQoKS0+dW5zY2hlZHVsZVRhc2tzKG1fc3RyZWFtLmdldCgpKTsKKyAgICBmaWxlVGhy
ZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmls
ZVN0cmVhbTo6c3RvcCkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlHZXRTaXplT25Db250ZXh0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5LCBsb25nIGxv
bmcgc2l6ZSkKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xp
ZW50KCktPmRpZEdldFNpemUoc2l6ZSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRH
ZXRTaXplKGxvbmcgbG9uZyBzaXplKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0LT5pc0NvbnRl
eHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2so
Jm5vdGlmeUdldFNpemVPbkNvbnRleHQsIHRoaXMsIHNpemUpKTsKK30KKworc3RhdGljIHZvaWQg
bm90aWZ5UmVhZE9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVBy
b3h5KiBwcm94eSwgY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVzUmVhZCkKK3sKKyAgICBpZiAo
cHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xpZW50KCktPmRpZFJlYWQoZGF0YSwg
Ynl0ZXNSZWFkKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmRpZFJlYWQoY29uc3QgY2hh
ciogZGF0YSwgaW50IGJ5dGVzUmVhZCkKK3sKKyAgICBBU1NFUlQoIW1fY29udGV4dC0+aXNDb250
ZXh0VGhyZWFkKCkpOworICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNr
KCZub3RpZnlSZWFkT25Db250ZXh0LCB0aGlzLCBkYXRhLCBieXRlc1JlYWQpKTsKK30KKworc3Rh
dGljIHZvaWQgbm90aWZ5V3JpdGVPbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZp
bGVTdHJlYW1Qcm94eSogcHJveHksIGludCBieXRlc1dyaXR0ZW4pCit7CisgICAgaWYgKHByb3h5
LT5jbGllbnQoKSkKKyAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRXcml0ZShieXRlc1dyaXR0
ZW4pOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlkV3JpdGUoaW50IGJ5dGVzV3JpdHRl
bikKK3sKKyAgICBBU1NFUlQoIW1fY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1f
Y29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlXcml0ZU9uQ29udGV4
dCwgdGhpcywgYnl0ZXNXcml0dGVuKSk7Cit9CisKK3ZvaWQgbm90aWZ5U3RhcnRPbkNvbnRleHQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHkpCit7CisgICAg
aWYgKHByb3h5LT5jbGllbnQoKSkKKyAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRTdGFydCgp
OworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlkU3RhcnQoKQoreworICAgIEFTU0VSVCgh
bV9jb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhj
cmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeVN0YXJ0T25Db250ZXh0LCB0aGlzKSk7Cit9CisKK3N0
YXRpYyB2b2lkIG5vdGlmeUZpbmlzaE9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
RmlsZVN0cmVhbVByb3h5KiBwcm94eSkKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAg
ICAgICBwcm94eS0+Y2xpZW50KCktPmRpZEZpbmlzaCgpOworfQorCit2b2lkIEZpbGVTdHJlYW1Q
cm94eTo6ZGlkRmluaXNoKCkKK3sKKyAgICBBU1NFUlQoIW1fY29udGV4dC0+aXNDb250ZXh0VGhy
ZWFkKCkpOworICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZub3Rp
ZnlGaW5pc2hPbkNvbnRleHQsIHRoaXMpKTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5RmFpbE9u
Q29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwg
RXhjZXB0aW9uQ29kZSBlYykKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBw
cm94eS0+Y2xpZW50KCktPmRpZEZhaWwoZWMpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6
ZGlkRmFpbChFeGNlcHRpb25Db2RlIGVjKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0LT5pc0Nv
bnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rh
c2soJm5vdGlmeUZhaWxPbkNvbnRleHQsIHRoaXMsIGVjKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRl
cmVmUHJveHlPbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94
eSogcHJveHkpCit7CisgICAgcHJveHktPmRlcmVmKCk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVBy
b3h5OjpkaWRTdG9wKCkKK3sKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNr
VGFzaygmZGVyZWZQcm94eU9uQ29udGV4dCwgdGhpcykpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9XUklURVIpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmggYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5
LmgKaW5kZXggZTY5ZGUyOS4uMDg4YWI5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVT
dHJlYW1Qcm94eS5oCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuaApAQCAtMCww
ICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRmlsZVN0cmVhbVByb3h5X2gKKyNkZWZpbmUgRmlsZVN0cmVhbVBy
b3h5X2gKKworI2lmIEVOQUJMRShGSUxFX1JFQURFUikgfHwgRU5BQkxFKEZJTEVfV1JJVEVSKQor
CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZpbGVTdHJlYW1DbGllbnQu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEJsb2I7CitjbGFzcyBGaWxlU3RyZWFtOworY2xhc3MgRmlsZVRocmVhZDsKK2NsYXNzIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTdHJpbmc7CisKKy8vIEEgcHJveHkgbW9kdWxl
IHRoYXQgY2FsbHMgY29ycmVzcG9uZGluZyBGaWxlU3RyZWFtIG1ldGhvZHMgb24gdGhlIGZpbGUg
dGhyZWFkLiAgTm90ZTogeW91IG11c3QgY2FsbCBzdG9wKCkgYmVmb3JlIGRlc3Ryb3lpbmcgYSBG
aWxlU3RyZWFtUHJveHkgaW5zdGFuY2UsIGUuZy4gaW4gdGhlIGRlc2N0cnVjdG9yIG9mIGFuIG9i
amVjdCB0aGF0IGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBwcm94eS4KK2NsYXNzIEZpbGVTdHJl
YW1Qcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVTdHJlYW1Qcm94eT4sIHB1YmxpYyBGaWxl
U3RyZWFtQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlU3RyZWFt
UHJveHk+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFt
Q2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGVT
dHJlYW1Qcm94eShjb250ZXh0LCBjbGllbnQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+RmlsZVN0
cmVhbVByb3h5KCk7CisKKyAgICB2b2lkIG9wZW5Gb3JSZWFkKEJsb2IqIGJsb2IpOworICAgIHZv
aWQgb3BlbkZvcldyaXRlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdm9pZCBjbG9zZSgpOwor
ICAgIHZvaWQgcmVhZChjaGFyKiBidWZmZXIsIGludCBsZW5ndGgpOworICAgIHZvaWQgd3JpdGUo
QmxvYiogYmxvYiwgbG9uZyBsb25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKTsKKyAgICB2b2lkIHRy
dW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbik7CisKKyAgICAvLyBTdG9wKCkgc3RvcHMgYW55IHBl
bmRpbmcgdGFza3MsIGNsb3NlIHRoZSBmaWxlIGFuZCBkZXJlZnMgaXRzZWxmOyB0aGUgY2FsbGVy
IHNob3VsZCBub3QgcmVjeWNsZSB0aGUgaW5zdGFuY2UgYWZ0ZXIgY2FsbGluZyBzdG9wKCkuCisg
ICAgdm9pZCBzdG9wKCk7CisKKyAgICBGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7
IHJldHVybiBtX2NsaWVudDsgfQorCitwcml2YXRlOgorICAgIEZpbGVTdHJlYW1Qcm94eShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbUNsaWVudCopOworCisgICAgLy8gRmlsZVN0
cmVhbUNsaWVudCBtZXRob2RzLgorICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRTaXplKGxvbmcgbG9u
Zyk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlYWQoY29uc3QgY2hhciosIGludCk7CisgICAgdmly
dHVhbCB2b2lkIGRpZFdyaXRlKGludCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKEV4Y2VwdGlvbkNvZGUpOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRTdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTdG9wKCk7CisKKyAgICBGaWxlVGhy
ZWFkKiBmaWxlVGhyZWFkKCk7CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1f
Y29udGV4dDsKKyAgICBGaWxlU3RyZWFtQ2xpZW50KiBtX2NsaWVudDsKKyAgICBSZWZQdHI8Rmls
ZVN0cmVhbT4gbV9zdHJlYW07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKKworI2VuZGlm
IC8vIEZpbGVTdHJlYW1Qcm94eV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVRocmVh
ZFRhc2suaCBiL1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oCmluZGV4IGU2OWRlMjkuLmY0
YzU5ZDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oCisrKyBiL1dl
YkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmls
ZVRocmVhZFRhc2tfaAorI2RlZmluZSBGaWxlVGhyZWFkVGFza19oCisKKyNpbmNsdWRlICJDcm9z
c1RocmVhZENvcGllci5oIgorI2luY2x1ZGUgIkZpbGVUaHJlYWQuaCIKKyNpbmNsdWRlIDxtZW1v
cnk+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gVHJhaXRzIGZvciB0aGUgVGFzay4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBG
aWxlVGhyZWFkVGFza1RyYWl0cyB7CisgICAgdHlwZWRlZiBjb25zdCBUJiBQYXJhbVR5cGU7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHM8VCo+
IHsKKyAgICB0eXBlZGVmIFQqIFBhcmFtVHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBGaWxlVGhyZWFkVGFza1RyYWl0czxQYXNzUmVmUHRyPFQ+ID4geworICAgIHR5cGVk
ZWYgUGFzc1JlZlB0cjxUPiBQYXJhbVR5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHM8UGFzc093blB0cjxUPiA+IHsKKyAgICB0eXBlZGVm
IFBhc3NPd25QdHI8VD4gUGFyYW1UeXBlOworfTsKKworY2xhc3MgRmlsZVRocmVhZFRhc2swIDog
cHVibGljIEZpbGVUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoRmls
ZVN0cmVhbTo6Kk1ldGhvZCkoKTsKKyAgICB0eXBlZGVmIEZpbGVUaHJlYWRUYXNrMCBGaWxlVGhy
ZWFkVGFzazsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrPiBjcmVhdGUo
RmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIEZpbGVUaHJlYWRUYXNrMChGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QpCisg
ICAgICAgIDogRmlsZVRocmVhZDo6VGFzayhzdHJlYW0pCisgICAgICAgICwgbV9tZXRob2QobWV0
aG9kKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAg
IHsKKyAgICAgICAgKCpzdHJlYW0oKS4qbV9tZXRob2QpKCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIE1ldGhvZCBtX21ldGhvZDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFt
ZSBNUDE+CitjbGFzcyBGaWxlVGhyZWFkVGFzazEgOiBwdWJsaWMgRmlsZVRocmVhZDo6VGFzayB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChGaWxlU3RyZWFtOjoqTWV0aG9kKShNUDEpOwor
ICAgIHR5cGVkZWYgRmlsZVRocmVhZFRhc2sxPFAxLCBNUDE+IEZpbGVUaHJlYWRUYXNrOworICAg
IHR5cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFy
YW0xOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRhc2s+IGNyZWF0ZShGaWxl
U3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCwgcGFyYW1l
dGVyMSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZpbGVUaHJlYWRUYXNrMShGaWxlU3RyZWFt
KiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQorICAgICAgICA6IEZp
bGVUaHJlYWQ6OlRhc2soc3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAg
ICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RyZWFtKCkuKm1fbWV0aG9k
KShtX3BhcmFtZXRlcjEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7
CisgICAgUDEgbV9wYXJhbWV0ZXIxOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVu
YW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KK2NsYXNzIEZpbGVUaHJlYWRUYXNr
MiA6IHB1YmxpYyBGaWxlVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQg
KEZpbGVTdHJlYW06OipNZXRob2QpKE1QMSwgTVAyKTsKKyAgICB0eXBlZGVmIEZpbGVUaHJlYWRU
YXNrMjxQMSwgTVAxLCBQMiwgTVAyPiBGaWxlVGhyZWFkVGFzazsKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBl
ZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsK
KworICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrPiBjcmVhdGUoRmlsZVN0cmVh
bSogc3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFt
ZXRlcjIpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0cmVhbSwg
bWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
RmlsZVRocmVhZFRhc2syKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0x
IHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQorICAgICAgICA6IEZpbGVUaHJlYWQ6OlRh
c2soc3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFt
ZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAg
ICAgICgqc3RyZWFtKCkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMik7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRl
cjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5
cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVu
YW1lIE1QMz4KK2NsYXNzIEZpbGVUaHJlYWRUYXNrMyA6IHB1YmxpYyBGaWxlVGhyZWFkOjpUYXNr
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKEZpbGVTdHJlYW06OipNZXRob2QpKE1QMSwg
TVAyLCBNUDMpOworICAgIHR5cGVkZWYgRmlsZVRocmVhZFRhc2szPFAxLCBNUDEsIFAyLCBNUDIs
IFAzLCBNUDM+IEZpbGVUaHJlYWRUYXNrOworICAgIHR5cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVh
ZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUg
RmlsZVRocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYg
dHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOworCisg
ICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRhc2s+IGNyZWF0ZShGaWxlU3RyZWFtKiBz
dHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVy
MiwgUGFyYW0zIHBhcmFtZXRlcjMpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJl
YWRUYXNrKHN0cmVhbSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIz
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmlsZVRocmVhZFRhc2szKEZpbGVTdHJlYW0qIHN0
cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIy
LCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVhbSkK
KyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFt
ZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgICAgICwgbV9w
YXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0cmVhbSgpLiptX21ldGhvZCkobV9wYXJh
bWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMyk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJh
bWV0ZXIyOworICAgIFAzIG1fcGFyYW1ldGVyMzsKK307CisKK1Bhc3NPd25QdHI8RmlsZVRocmVh
ZDo6VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCisgICAgRmlsZVN0cmVhbSogY29uc3QgY2Fs
bGVlLAorICAgIHZvaWQgKEZpbGVTdHJlYW06OiptZXRob2QpKCkpCit7CisgICAgcmV0dXJuIEZp
bGVUaHJlYWRUYXNrMDo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDE+CitQYXNzT3duUHRyPEZp
bGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAorICAgIEZpbGVTdHJlYW0qIGNv
bnN0IGNhbGxlZSwKKyAgICB2b2lkIChGaWxlU3RyZWFtOjoqbWV0aG9kKShNUDEpLAorICAgIGNv
bnN0IFAxJiBwYXJhbWV0ZXIxKQoreworICAgIHJldHVybiBGaWxlVGhyZWFkVGFzazE8dHlwZW5h
bWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDE+OjpjcmVhdGUoCisgICAgICAgIGNh
bGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNv
cHkocGFyYW1ldGVyMSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAx
LCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgorUGFzc093blB0cjxGaWxlVGhyZWFkOjpUYXNr
PiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKKyAgICBGaWxlU3RyZWFtKiBjb25zdCBjYWxsZWUsCisg
ICAgdm9pZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoTVAxLCBNUDIpLAorICAgIGNvbnN0IFAxJiBw
YXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyKQoreworICAgIHJldHVybiBGaWxl
VGhyZWFkVGFzazI8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5
cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyPjo6Y3JlYXRlKAorICAgICAg
ICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+
Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHko
cGFyYW1ldGVyMikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0
eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzPgorUGFz
c093blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKKyAgICBGaWxl
U3RyZWFtKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoTVAx
LCBNUDIsIE1QMyksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBh
cmFtZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMpCit7CisgICAgcmV0dXJuIEZpbGVU
aHJlYWRUYXNrMzx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzPjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAg
ICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRl
cjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisg
ICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZpbGVUaHJlYWRUYXNrX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53020</attachid>
            <date>2010-04-09 17:29:45 -0700</date>
            <delta_ts>2010-04-12 18:15:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37218-20100409172944.patch</filename>
            <type>text/plain</type>
            <size>27294</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDliOGQxZi4uYTJlOGE5MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMS0wNC0wOSAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZpbGVTdHJlYW1Qcm94eSB0aGF0IGNhbGxzIEZp
bGVTdHJlYW0gbWV0aG9kcyBvbiBGaWxlVGhyZWFkIGZvciBGaWxlQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzIxOAorCisgICAgICAgIE5vIG5l
dyB0ZXN0czsgdGVzdHMgd2lsbCBiZSBhZGRlZCB3aGVuIHdlIGFkZCB1cHBlciBsYXllciBpbXBs
ZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlU3RyZWFtOjpzdG9wKToKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW0uaDoKKyAgICAg
ICAgKiBodG1sL0ZpbGVTdHJlYW1DbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJl
YW1DbGllbnQ6OmRpZFN0b3ApOgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbVByb3h5LmNwcDog
QWRkZWQKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW1Qcm94eS5oOiBBZGRlZAorICAgICAgICAq
IGh0bWwvRmlsZVRocmVhZFRhc2suaDogQWRkZWQKKwogMjAxMC0wMy0zMCAgRHVtaXRydSBEYW5p
bGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkg
R2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCmluZGV4IDVhMTY1ZTIuLjNjOTA1NTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTAzMiw4ICsx
MDMyLDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0u
Y3BwIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbUNsaWVudC5oIFwKKwlXZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcCBcCisJV2Vi
Q29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVRocmVhZC5j
cHAgXAogCVdlYkNvcmUvaHRtbC9GaWxlVGhyZWFkLmggXAorCVdlYkNvcmUvaHRtbC9GaWxlVGhy
ZWFkVGFzay5oIFwKIAlXZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcCBcCiAJV2ViQ29yZS9o
dG1sL0Zvcm1EYXRhTGlzdC5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3Bw
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggMzU2N2Y5ZS4uNzZlNGRmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE0MzMsOCArMTQzMywxMSBAQAogICAg
ICAgICAgICAgJ2h0bWwvRmlsZVN0cmVhbS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRmlsZVN0
cmVhbS5oJywKICAgICAgICAgICAgICdodG1sL0ZpbGVTdHJlYW1DbGllbnQuaCcsCisgICAgICAg
ICAgICAnaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwJywKKyAgICAgICAgICAgICdodG1sL0ZpbGVT
dHJlYW1Qcm94eS5oJywKICAgICAgICAgICAgICdodG1sL0ZpbGVUaHJlYWQuY3BwJywKICAgICAg
ICAgICAgICdodG1sL0ZpbGVUaHJlYWQuaCcsCisgICAgICAgICAgICAnaHRtbC9GaWxlVGhyZWFk
VGFzay5oJywKICAgICAgICAgICAgICdodG1sL0Zvcm1EYXRhTGlzdC5jcHAnLAogICAgICAgICAg
ICAgJ2h0bWwvRm9ybURhdGFMaXN0LmgnLAogICAgICAgICAgICAgJ2h0bWwvSFRNTEFsbENvbGxl
Y3Rpb24uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dl
YkNvcmUucHJvCmluZGV4IGU3YmI5ODMuLjc0MjViMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNjE1LDYgKzYxNSw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIGh0bWwvRmlsZS5jcHAgXAogICAgIGh0bWwvRmlsZUxpc3QuY3BwIFwK
ICAgICBodG1sL0ZpbGVTdHJlYW0uY3BwIFwKKyAgICBodG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAg
XAogICAgIGh0bWwvRmlsZVRocmVhZC5jcHAgXAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmNwcCBc
CiAgICAgaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAgXApAQCAtMTMyNiw3ICsxMzI3LDkgQEAg
SEVBREVSUyArPSBcCiAgICAgaHRtbC9GaWxlTGlzdC5oIFwKICAgICBodG1sL0ZpbGVTdHJlYW0u
aCBcCiAgICAgaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmggXAorICAgIGh0bWwvRmlsZVN0cmVhbVBy
b3h5LmggXAogICAgIGh0bWwvRmlsZVRocmVhZC5oIFwKKyAgICBodG1sL0ZpbGVUaHJlYWRUYXNr
LmggXAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmggXAogICAgIGh0bWwvSFRNTEFsbENvbGxlY3Rp
b24uaCBcCiAgICAgaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCmluZGV4IDlkZWFjY2YuLmE2NDYwYWUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzAyNDksNiArMzAyNDksMTQgQEAKIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGaWxlU3RyZWFt
UHJveHkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxGaWxlU3RyZWFtUHJveHkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVRocmVhZC5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzAyNTcsNiArMzAyNjUsMTAgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGaWxlVGhyZWFkVGFz
ay5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caHRtbFxGb3JtRGF0YUxpc3QuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWI3YWViMi4uYmQyODJlNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyMTQsNiAr
MjIxNCw5IEBACiAJCTg5NTI1M0Q3MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0Q0MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLzsgfTsKIAkJODk1MjUzRDgxMTZDNEM2
ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg5NTI1M0Q1MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmgg
Ki87IH07CiAJCTg5NTI1M0Q5MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENjEx
NkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oICovOyB9OworCQk4OTUyNTNEQzEx
NkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RBMTE2QzRFRjUwMENBQkYwMCAvKiBG
aWxlU3RyZWFtUHJveHkuY3BwICovOyB9OworCQk4OTUyNTNERDExNkM0RUY1MDBDQUJGMDAgLyog
RmlsZVN0cmVhbVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggKi87
IH07CisJCTg5NTI1M0RGMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREUxMTZDNEYw
NjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi87IH07CiAJCTkzMDJCMEJEMEQ3OUY4Mjkw
MEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAg
Ki87IH07CiAJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMw
MEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVCMjRDMDk4RjFC
NkIwMEMyODg1NSAvKiBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC03NjcwLDYgKzc2NzMsOSBAQAogCQk4OTUyNTNENDExNkM0QzY4MDBD
QUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGaWxlU3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODk1MjUz
RDUxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsZVN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
OTUyNTNENjExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlU3RyZWFtQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg5NTI1M0RBMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVN0cmVhbVBy
b3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk1MjUzREIxMTZDNEVGNTAw
Q0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWxlU3RyZWFtUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk1
MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVUaHJlYWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUdyb3VwLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlR3JvdXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjk1OSw2ICsxMjk2NSw5IEBACiAJCTkzRUVDMUVDMDlDMjg3
NzcwMEM1MTVEMSAvKiBodG1sICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk4OTUyNTNERTExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCAq
LywKKwkJCQk4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCAq
LywKKwkJCQk4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggKi8s
CiAJCQkJODk1MjUzRDQxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwICovLAogCQkJ
CTg5NTI1M0Q1MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmggKi8sCiAJCQkJODk1MjUz
RDYxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLywKQEAgLTE4ODI1LDYg
KzE4ODM0LDggQEAKIAkJCQlDNUQ0QUE3QTExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNz
TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTUyNTNEODExNkM0QzY4MDBDQUJGMDAgLyogRmls
ZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk1MjUzRDkxMTZDNEM2ODAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1DbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0REMTE2QzRFRjUw
MENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0RG
MTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0y
MTA0Niw2ICsyMTA1Nyw3IEBACiAJCQkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1RDRBQTc5MTE2QkFGQjYw
MDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODk1MjUz
RDcxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
ODk1MjUzREMxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBiL1dlYkNvcmUv
aHRtbC9GaWxlU3RyZWFtLmNwcAppbmRleCA1M2M5OTJjLi44NGEyOGQ2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0u
Y3BwCkBAIC01Niw2ICs1NiwxMyBAQCB2b2lkIEZpbGVTdHJlYW06OnN0YXJ0KCkKICAgICBtX2Ns
aWVudC0+ZGlkU3RhcnQoKTsKIH0KIAordm9pZCBGaWxlU3RyZWFtOjpzdG9wKCkKK3sKKyAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBjbG9zZSgpOworICAgIG1fY2xpZW50LT5kaWRT
dG9wKCk7Cit9CisKIHZvaWQgRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQoQmxvYiopCiB7CiAgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbS5oIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uaAppbmRleCBiYTdjMDU2Li5iZGE4ZmM3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5oCisrKyBiL1dlYkNvcmUvaHRt
bC9GaWxlU3RyZWFtLmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkZp
bGVTdHJlYW0oKTsKIAogICAgIHZvaWQgc3RhcnQoKTsKKyAgICB2b2lkIHN0b3AoKTsKIAogICAg
IHZvaWQgb3BlbkZvclJlYWQoQmxvYiopOwogICAgIHZvaWQgb3BlbkZvcldyaXRlKGNvbnN0IFN0
cmluZyYgcGF0aCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbUNsaWVudC5o
IGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaAppbmRleCA5ZDI0YmRmLi5lMWFlYzUz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbUNsaWVudC5oCisrKyBiL1dlYkNv
cmUvaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogCiAg
ICAgLy8gRm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZy4KICAgICB2aXJ0dWFsIHZvaWQgZGlk
U3RhcnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcCgpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBkaWRGaW5pc2goKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChFeGNlcHRpb25D
b2RlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0U2l6ZShsb25nIGxvbmcpIHsgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAgYi9XZWJDb3JlL2h0bWwv
RmlsZVN0cmVhbVByb3h5LmNwcAppbmRleCBlNjlkZTI5Li5lMGVkZTY3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbVByb3h5LmNwcApAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKKworI2luY2x1ZGUg
IkZpbGVTdHJlYW1Qcm94eS5oIgorCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkZpbGVT
dHJlYW0uaCIKKyNpbmNsdWRlICJGaWxlVGhyZWFkLmgiCisjaW5jbHVkZSAiRmlsZVRocmVhZFRh
c2suaCIKKyNpbmNsdWRlICJHZW5lcmljV29ya2VyVGFzay5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ZpbGVTdHJlYW1Qcm94eTo6RmlsZVN0cmVhbVByb3h5KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKKyAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zdHJl
YW0oRmlsZVN0cmVhbTo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9ydW5uaW5nKGZhbHNlKQorewor
ICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0u
Z2V0KCksICZGaWxlU3RyZWFtOjpzdGFydCkpOworfQorCitGaWxlU3RyZWFtUHJveHk6On5GaWxl
U3RyZWFtUHJveHkoKQoreworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6b3BlbkZvclJlYWQo
QmxvYiogYmxvYikKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJl
YWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQsIGJsb2IpKTsK
K30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JXcml0ZShjb25zdCBTdHJpbmcmIHBh
dGgpCit7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayht
X3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06Om9wZW5Gb3JXcml0ZSwgcGF0aCkpOworfQorCit2
b2lkIEZpbGVTdHJlYW1Qcm94eTo6Y2xvc2UoKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRh
c2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjpjbG9z
ZSkpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6cmVhZChjaGFyKiBidWZmZXIsIGludCBs
ZW5ndGgpCit7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFz
ayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06OnJlYWQsIGJ1ZmZlciwgbGVuZ3RoKSk7Cit9
CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5Ojp3cml0ZShCbG9iKiBibG9iLCBsb25nIGxvbmcgcG9z
aXRpb24sIGludCBsZW5ndGgpCit7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVG
aWxlVGhyZWFkVGFzayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06OndyaXRlLCBibG9iLCBw
b3NpdGlvbiwgbGVuZ3RoKSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5Ojp0cnVuY2F0ZShs
b25nIGxvbmcgcG9zaXRpb24pCit7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVG
aWxlVGhyZWFkVGFzayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06OnRydW5jYXRlLCBwb3Np
dGlvbikpOworfQorCitGaWxlVGhyZWFkKiBGaWxlU3RyZWFtUHJveHk6OmZpbGVUaHJlYWQoKQor
eworICAgIEFTU0VSVChtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIW1f
cnVubmluZykgeworICAgICAgICAvLyBIb2xkcyBhbiBleHRyYSByZWYgc28gdGhhdCB0aGUgaW5z
dGFuY2Ugd2lsbCBub3QgZ2V0IGRlbGV0ZWQgd2hpbGUgdGhlcmUgY2FuIGJlIGFueSB0YXNrcyBv
biB0aGUgZmlsZSB0aHJlYWQuCisgICAgICAgIHJlZigpOworICAgICAgICBtX3J1bm5pbmcgPSB0
cnVlOworICAgIH0KKyAgICBBU1NFUlQobV9jb250ZXh0LT5maWxlVGhyZWFkKCkpOworICAgIHJl
dHVybiBtX2NvbnRleHQtPmZpbGVUaHJlYWQoKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6
OnN0b3AoKQoreworICAgIGlmICghbV9ydW5uaW5nKQorICAgICAgICByZXR1cm47CisgICAgZmls
ZVRocmVhZCgpLT51bnNjaGVkdWxlVGFza3MobV9zdHJlYW0uZ2V0KCkpOworICAgIGZpbGVUaHJl
YWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxl
U3RyZWFtOjpzdG9wKSk7CisgICAgbV9ydW5uaW5nID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lk
IG5vdGlmeUdldFNpemVPbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJl
YW1Qcm94eSogcHJveHksIGxvbmcgbG9uZyBzaXplKQoreworICAgIGlmIChwcm94eS0+Y2xpZW50
KCkpCisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkR2V0U2l6ZShzaXplKTsKK30KKwordm9p
ZCBGaWxlU3RyZWFtUHJveHk6OmRpZEdldFNpemUobG9uZyBsb25nIHNpemUpCit7CisgICAgQVNT
RVJUKCFtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2NvbnRleHQtPnBvc3RU
YXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5R2V0U2l6ZU9uQ29udGV4dCwgdGhpcywgc2l6
ZSkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlSZWFkT25Db250ZXh0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQg
Ynl0ZXNSZWFkKQoreworICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5j
bGllbnQoKS0+ZGlkUmVhZChkYXRhLCBieXRlc1JlYWQpOworfQorCit2b2lkIEZpbGVTdHJlYW1Q
cm94eTo6ZGlkUmVhZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFkKQoreworICAgIEFT
U0VSVCghbV9jb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0
VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeVJlYWRPbkNvbnRleHQsIHRoaXMsIGRhdGEs
IGJ5dGVzUmVhZCkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlXcml0ZU9uQ29udGV4dChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwgaW50IGJ5dGVzV3Jp
dHRlbikKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xpZW50
KCktPmRpZFdyaXRlKGJ5dGVzV3JpdHRlbik7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5Ojpk
aWRXcml0ZShpbnQgYnl0ZXNXcml0dGVuKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0LT5pc0Nv
bnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rh
c2soJm5vdGlmeVdyaXRlT25Db250ZXh0LCB0aGlzLCBieXRlc1dyaXR0ZW4pKTsKK30KKwordm9p
ZCBub3RpZnlTdGFydE9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVh
bVByb3h5KiBwcm94eSkKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94
eS0+Y2xpZW50KCktPmRpZFN0YXJ0KCk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRT
dGFydCgpCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAg
ICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5U3RhcnRPbkNv
bnRleHQsIHRoaXMpKTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5RmluaXNoT25Db250ZXh0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5KQoreworICAgIGlm
IChwcm94eS0+Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkRmluaXNoKCk7
Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRGaW5pc2goKQoreworICAgIEFTU0VSVCgh
bV9jb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhj
cmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeUZpbmlzaE9uQ29udGV4dCwgdGhpcykpOworfQorCitz
dGF0aWMgdm9pZCBub3RpZnlGYWlsT25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBG
aWxlU3RyZWFtUHJveHkqIHByb3h5LCBFeGNlcHRpb25Db2RlIGVjKQoreworICAgIGlmIChwcm94
eS0+Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkRmFpbChlYyk7Cit9CisK
K3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRGYWlsKEV4Y2VwdGlvbkNvZGUgZWMpCit7CisgICAg
QVNTRVJUKCFtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2NvbnRleHQtPnBv
c3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5RmFpbE9uQ29udGV4dCwgdGhpcywgZWMp
KTsKK30KKworc3RhdGljIHZvaWQgZGVyZWZQcm94eU9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSkKK3sKKyAgICBwcm94eS0+ZGVyZWYoKTsK
K30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmRpZFN0b3AoKQoreworICAgIG1fY29udGV4dC0+
cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkZXJlZlByb3h5T25Db250ZXh0LCB0aGlzKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1dS
SVRFUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuaCBiL1dlYkNv
cmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuaAppbmRleCBlNjlkZTI5Li41M2I5NGU2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmgKKysrIGIvV2ViQ29yZS9odG1sL0Zp
bGVTdHJlYW1Qcm94eS5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGaWxlU3RyZWFtUHJveHlf
aAorI2RlZmluZSBGaWxlU3RyZWFtUHJveHlfaAorCisjaWYgRU5BQkxFKEZJTEVfUkVBREVSKSB8
fCBFTkFCTEUoRklMRV9XUklURVIpCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiRmlsZVN0cmVhbUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmxvYjsKK2NsYXNzIEZpbGVTdHJlYW07CitjbGFz
cyBGaWxlVGhyZWFkOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFN0cmlu
ZzsKKworLy8gQSBwcm94eSBtb2R1bGUgdGhhdCBjYWxscyBjb3JyZXNwb25kaW5nIEZpbGVTdHJl
YW0gbWV0aG9kcyBvbiB0aGUgZmlsZSB0aHJlYWQuICBOb3RlOiB5b3UgbXVzdCBjYWxsIHN0b3Ao
KSBmaXJzdCBhbmQgdGhlbiByZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gZGVzdHJ1Y3QgdGhlIEZp
bGVTdHJlYW1Qcm94eSBpbnN0YW5jZS4KK2NsYXNzIEZpbGVTdHJlYW1Qcm94eSA6IHB1YmxpYyBS
ZWZDb3VudGVkPEZpbGVTdHJlYW1Qcm94eT4sIHB1YmxpYyBGaWxlU3RyZWFtQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlU3RyZWFtUHJveHk+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGVTdHJlYW1Qcm94eShjb250ZXh0
LCBjbGllbnQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+RmlsZVN0cmVhbVByb3h5KCk7CisKKyAg
ICB2b2lkIG9wZW5Gb3JSZWFkKEJsb2IqIGJsb2IpOworICAgIHZvaWQgb3BlbkZvcldyaXRlKGNv
bnN0IFN0cmluZyYgcGF0aCk7CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgcmVhZChjaGFy
KiBidWZmZXIsIGludCBsZW5ndGgpOworICAgIHZvaWQgd3JpdGUoQmxvYiogYmxvYiwgbG9uZyBs
b25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKTsKKyAgICB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBw
b3NpdGlvbik7CisKKyAgICAvLyBTdG9wcyB0aGUgcHJveHkgYW5kIHNjZWR1bGVzIGl0IHRvIGJl
IGRlc3RydWN0ZWQuICBBbGwgdGhlIHBlbmRpbmcgdGFza3Mgd2lsbCBiZSBhYm9ydGVkIGFuZCB0
aGUgZmlsZSBzdHJlYW0gd2lsbCBiZSBjbG9zZWQuCisgICAgdm9pZCBzdG9wKCk7CisKKyAgICBG
aWxlU3RyZWFtQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorCitw
cml2YXRlOgorICAgIEZpbGVTdHJlYW1Qcm94eShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmls
ZVN0cmVhbUNsaWVudCopOworCisgICAgLy8gRmlsZVN0cmVhbUNsaWVudCBtZXRob2RzLgorICAg
IHZpcnR1YWwgdm9pZCBkaWRHZXRTaXplKGxvbmcgbG9uZyk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlYWQoY29uc3QgY2hhciosIGludCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFdyaXRlKGludCk7
CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
KEV4Y2VwdGlvbkNvZGUpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydCgpOworICAgIHZpcnR1
YWwgdm9pZCBkaWRTdG9wKCk7CisKKyAgICBGaWxlVGhyZWFkKiBmaWxlVGhyZWFkKCk7CisgICAg
UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fY29udGV4dDsKKyAgICBGaWxlU3RyZWFt
Q2xpZW50KiBtX2NsaWVudDsKKyAgICBSZWZQdHI8RmlsZVN0cmVhbT4gbV9zdHJlYW07CisgICAg
Ym9vbCBtX3J1bm5pbmc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKKworI2VuZGlmIC8v
IEZpbGVTdHJlYW1Qcm94eV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVRocmVhZFRh
c2suaCBiL1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oCmluZGV4IGU2OWRlMjkuLmY0YzU5
ZDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oCisrKyBiL1dlYkNv
cmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmlsZVRo
cmVhZFRhc2tfaAorI2RlZmluZSBGaWxlVGhyZWFkVGFza19oCisKKyNpbmNsdWRlICJDcm9zc1Ro
cmVhZENvcGllci5oIgorI2luY2x1ZGUgIkZpbGVUaHJlYWQuaCIKKyNpbmNsdWRlIDxtZW1vcnk+
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gVHJhaXRzIGZvciB0aGUgVGFzay4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGaWxl
VGhyZWFkVGFza1RyYWl0cyB7CisgICAgdHlwZWRlZiBjb25zdCBUJiBQYXJhbVR5cGU7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHM8VCo+IHsK
KyAgICB0eXBlZGVmIFQqIFBhcmFtVHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBGaWxlVGhyZWFkVGFza1RyYWl0czxQYXNzUmVmUHRyPFQ+ID4geworICAgIHR5cGVkZWYg
UGFzc1JlZlB0cjxUPiBQYXJhbVR5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHM8UGFzc093blB0cjxUPiA+IHsKKyAgICB0eXBlZGVmIFBh
c3NPd25QdHI8VD4gUGFyYW1UeXBlOworfTsKKworY2xhc3MgRmlsZVRocmVhZFRhc2swIDogcHVi
bGljIEZpbGVUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoRmlsZVN0
cmVhbTo6Kk1ldGhvZCkoKTsKKyAgICB0eXBlZGVmIEZpbGVUaHJlYWRUYXNrMCBGaWxlVGhyZWFk
VGFzazsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrPiBjcmVhdGUoRmls
ZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IEZpbGVUaHJlYWRUYXNrMChGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QpCisgICAg
ICAgIDogRmlsZVRocmVhZDo6VGFzayhzdHJlYW0pCisgICAgICAgICwgbV9tZXRob2QobWV0aG9k
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsK
KyAgICAgICAgKCpzdHJlYW0oKS4qbV9tZXRob2QpKCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IE1ldGhvZCBtX21ldGhvZDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBN
UDE+CitjbGFzcyBGaWxlVGhyZWFkVGFzazEgOiBwdWJsaWMgRmlsZVRocmVhZDo6VGFzayB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChGaWxlU3RyZWFtOjoqTWV0aG9kKShNUDEpOworICAg
IHR5cGVkZWYgRmlsZVRocmVhZFRhc2sxPFAxLCBNUDE+IEZpbGVUaHJlYWRUYXNrOworICAgIHR5
cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0x
OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRhc2s+IGNyZWF0ZShGaWxlU3Ry
ZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCwgcGFyYW1ldGVy
MSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZpbGVUaHJlYWRUYXNrMShGaWxlU3RyZWFtKiBz
dHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQorICAgICAgICA6IEZpbGVU
aHJlYWQ6OlRhc2soc3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAg
LCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RyZWFtKCkuKm1fbWV0aG9kKSht
X3BhcmFtZXRlcjEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7Cisg
ICAgUDEgbV9wYXJhbWV0ZXIxOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1l
IE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KK2NsYXNzIEZpbGVUaHJlYWRUYXNrMiA6
IHB1YmxpYyBGaWxlVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKEZp
bGVTdHJlYW06OipNZXRob2QpKE1QMSwgTVAyKTsKKyAgICB0eXBlZGVmIEZpbGVUaHJlYWRUYXNr
MjxQMSwgTVAxLCBQMiwgTVAyPiBGaWxlVGhyZWFkVGFzazsKKyAgICB0eXBlZGVmIHR5cGVuYW1l
IEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrPiBjcmVhdGUoRmlsZVN0cmVhbSog
c3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRl
cjIpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0cmVhbSwgbWV0
aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmls
ZVRocmVhZFRhc2syKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBh
cmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQorICAgICAgICA6IEZpbGVUaHJlYWQ6OlRhc2so
c3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRl
cjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAg
ICgqc3RyZWFtKCkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMik7CisgICAg
fQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7
CisgICAgUDIgbV9wYXJhbWV0ZXIyOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVu
YW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1l
IE1QMz4KK2NsYXNzIEZpbGVUaHJlYWRUYXNrMyA6IHB1YmxpYyBGaWxlVGhyZWFkOjpUYXNrIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKEZpbGVTdHJlYW06OipNZXRob2QpKE1QMSwgTVAy
LCBNUDMpOworICAgIHR5cGVkZWYgRmlsZVRocmVhZFRhc2szPFAxLCBNUDEsIFAyLCBNUDIsIFAz
LCBNUDM+IEZpbGVUaHJlYWRUYXNrOworICAgIHR5cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRh
c2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUgRmls
ZVRocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOworCisgICAg
c3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRhc2s+IGNyZWF0ZShGaWxlU3RyZWFtKiBzdHJl
YW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwg
UGFyYW0zIHBhcmFtZXRlcjMpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRU
YXNrKHN0cmVhbSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgRmlsZVRocmVhZFRhc2szKEZpbGVTdHJlYW0qIHN0cmVh
bSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQ
YXJhbTMgcGFyYW1ldGVyMykKKyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVhbSkKKyAg
ICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRl
cjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgICAgICwgbV9wYXJh
bWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0cmVhbSgpLiptX21ldGhvZCkobV9wYXJhbWV0
ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMyk7CisgICAgfQorCitwcml2YXRlOgorICAg
IE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0
ZXIyOworICAgIFAzIG1fcGFyYW1ldGVyMzsKK307CisKK1Bhc3NPd25QdHI8RmlsZVRocmVhZDo6
VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCisgICAgRmlsZVN0cmVhbSogY29uc3QgY2FsbGVl
LAorICAgIHZvaWQgKEZpbGVTdHJlYW06OiptZXRob2QpKCkpCit7CisgICAgcmV0dXJuIEZpbGVU
aHJlYWRUYXNrMDo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDE+CitQYXNzT3duUHRyPEZpbGVU
aHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAorICAgIEZpbGVTdHJlYW0qIGNvbnN0
IGNhbGxlZSwKKyAgICB2b2lkIChGaWxlU3RyZWFtOjoqbWV0aG9kKShNUDEpLAorICAgIGNvbnN0
IFAxJiBwYXJhbWV0ZXIxKQoreworICAgIHJldHVybiBGaWxlVGhyZWFkVGFzazE8dHlwZW5hbWUg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDE+OjpjcmVhdGUoCisgICAgICAgIGNhbGxl
ZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHko
cGFyYW1ldGVyMSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0
eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgorUGFzc093blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBj
cmVhdGVGaWxlVGhyZWFkVGFzaygKKyAgICBGaWxlU3RyZWFtKiBjb25zdCBjYWxsZWUsCisgICAg
dm9pZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoTVAxLCBNUDIpLAorICAgIGNvbnN0IFAxJiBwYXJh
bWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyKQoreworICAgIHJldHVybiBGaWxlVGhy
ZWFkVGFzazI8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVu
YW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyPjo6Y3JlYXRlKAorICAgICAgICBj
YWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpj
b3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFy
YW1ldGVyMikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBl
bmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzPgorUGFzc093
blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKKyAgICBGaWxlU3Ry
ZWFtKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoTVAxLCBN
UDIsIE1QMyksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFt
ZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMpCit7CisgICAgcmV0dXJuIEZpbGVUaHJl
YWRUYXNrMzx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5h
bWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFk
Q29waWVyPFAzPjo6VHlwZSwgTVAzPjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAg
IG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEp
LAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisgICAg
ICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZpbGVUaHJlYWRUYXNrX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53207</attachid>
            <date>2010-04-12 18:15:29 -0700</date>
            <delta_ts>2010-04-12 18:43:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37218-20100412181528.patch</filename>
            <type>text/plain</type>
            <size>27359</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDliOGQxZi4uMTQ0Y2M4MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0wNC0xMiAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZpbGVTdHJlYW1Qcm94eSB0aGF0IGNhbGxzIEZp
bGVTdHJlYW0gbWV0aG9kcyBvbiBGaWxlVGhyZWFkIGZvciBGaWxlQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzIxOAorCisgICAgICAgIE5vIG5l
dyB0ZXN0czsgdGVzdHMgd2lsbCBiZSBhZGRlZCB3aGVuIHdlIGFkZCB1cHBlciBsYXllciBpbXBs
ZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlU3RyZWFtOjpzdG9wKToKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW0uaDoKKyAgICAg
ICAgKiBodG1sL0ZpbGVTdHJlYW1DbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJl
YW1DbGllbnQ6OmRpZFN0b3ApOgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbVByb3h5LmNwcDog
QWRkZWQKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW1Qcm94eS5oOiBBZGRlZAorICAgICAgICAq
IGh0bWwvRmlsZVRocmVhZFRhc2suaDogQWRkZWQKKwogMjAxMC0wMy0zMCAgRHVtaXRydSBEYW5p
bGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkg
R2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCmluZGV4IDVhMTY1ZTIuLjNjOTA1NTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTAzMiw4ICsx
MDMyLDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0u
Y3BwIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbUNsaWVudC5oIFwKKwlXZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcCBcCisJV2Vi
Q29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVRocmVhZC5j
cHAgXAogCVdlYkNvcmUvaHRtbC9GaWxlVGhyZWFkLmggXAorCVdlYkNvcmUvaHRtbC9GaWxlVGhy
ZWFkVGFzay5oIFwKIAlXZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcCBcCiAJV2ViQ29yZS9o
dG1sL0Zvcm1EYXRhTGlzdC5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3Bw
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggMzU2N2Y5ZS4uNzZlNGRmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE0MzMsOCArMTQzMywxMSBAQAogICAg
ICAgICAgICAgJ2h0bWwvRmlsZVN0cmVhbS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRmlsZVN0
cmVhbS5oJywKICAgICAgICAgICAgICdodG1sL0ZpbGVTdHJlYW1DbGllbnQuaCcsCisgICAgICAg
ICAgICAnaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwJywKKyAgICAgICAgICAgICdodG1sL0ZpbGVT
dHJlYW1Qcm94eS5oJywKICAgICAgICAgICAgICdodG1sL0ZpbGVUaHJlYWQuY3BwJywKICAgICAg
ICAgICAgICdodG1sL0ZpbGVUaHJlYWQuaCcsCisgICAgICAgICAgICAnaHRtbC9GaWxlVGhyZWFk
VGFzay5oJywKICAgICAgICAgICAgICdodG1sL0Zvcm1EYXRhTGlzdC5jcHAnLAogICAgICAgICAg
ICAgJ2h0bWwvRm9ybURhdGFMaXN0LmgnLAogICAgICAgICAgICAgJ2h0bWwvSFRNTEFsbENvbGxl
Y3Rpb24uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dl
YkNvcmUucHJvCmluZGV4IGU3YmI5ODMuLjc0MjViMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNjE1LDYgKzYxNSw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIGh0bWwvRmlsZS5jcHAgXAogICAgIGh0bWwvRmlsZUxpc3QuY3BwIFwK
ICAgICBodG1sL0ZpbGVTdHJlYW0uY3BwIFwKKyAgICBodG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAg
XAogICAgIGh0bWwvRmlsZVRocmVhZC5jcHAgXAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmNwcCBc
CiAgICAgaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAgXApAQCAtMTMyNiw3ICsxMzI3LDkgQEAg
SEVBREVSUyArPSBcCiAgICAgaHRtbC9GaWxlTGlzdC5oIFwKICAgICBodG1sL0ZpbGVTdHJlYW0u
aCBcCiAgICAgaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmggXAorICAgIGh0bWwvRmlsZVN0cmVhbVBy
b3h5LmggXAogICAgIGh0bWwvRmlsZVRocmVhZC5oIFwKKyAgICBodG1sL0ZpbGVUaHJlYWRUYXNr
LmggXAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmggXAogICAgIGh0bWwvSFRNTEFsbENvbGxlY3Rp
b24uaCBcCiAgICAgaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCmluZGV4IDlkZWFjY2YuLmE2NDYwYWUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzAyNDksNiArMzAyNDksMTQgQEAKIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGaWxlU3RyZWFt
UHJveHkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxGaWxlU3RyZWFtUHJveHkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVRocmVhZC5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzAyNTcsNiArMzAyNjUsMTAgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGaWxlVGhyZWFkVGFz
ay5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caHRtbFxGb3JtRGF0YUxpc3QuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWI3YWViMi4uYmQyODJlNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyMTQsNiAr
MjIxNCw5IEBACiAJCTg5NTI1M0Q3MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0Q0MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLzsgfTsKIAkJODk1MjUzRDgxMTZDNEM2
ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg5NTI1M0Q1MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmgg
Ki87IH07CiAJCTg5NTI1M0Q5MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENjEx
NkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oICovOyB9OworCQk4OTUyNTNEQzEx
NkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RBMTE2QzRFRjUwMENBQkYwMCAvKiBG
aWxlU3RyZWFtUHJveHkuY3BwICovOyB9OworCQk4OTUyNTNERDExNkM0RUY1MDBDQUJGMDAgLyog
RmlsZVN0cmVhbVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggKi87
IH07CisJCTg5NTI1M0RGMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREUxMTZDNEYw
NjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi87IH07CiAJCTkzMDJCMEJEMEQ3OUY4Mjkw
MEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAg
Ki87IH07CiAJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMw
MEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVCMjRDMDk4RjFC
NkIwMEMyODg1NSAvKiBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC03NjcwLDYgKzc2NzMsOSBAQAogCQk4OTUyNTNENDExNkM0QzY4MDBD
QUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGaWxlU3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODk1MjUz
RDUxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsZVN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
OTUyNTNENjExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlU3RyZWFtQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg5NTI1M0RBMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVN0cmVhbVBy
b3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk1MjUzREIxMTZDNEVGNTAw
Q0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWxlU3RyZWFtUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk1
MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVUaHJlYWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUdyb3VwLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlR3JvdXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjk1OSw2ICsxMjk2NSw5IEBACiAJCTkzRUVDMUVDMDlDMjg3
NzcwMEM1MTVEMSAvKiBodG1sICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk4OTUyNTNERTExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCAq
LywKKwkJCQk4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCAq
LywKKwkJCQk4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggKi8s
CiAJCQkJODk1MjUzRDQxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwICovLAogCQkJ
CTg5NTI1M0Q1MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmggKi8sCiAJCQkJODk1MjUz
RDYxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLywKQEAgLTE4ODI1LDYg
KzE4ODM0LDggQEAKIAkJCQlDNUQ0QUE3QTExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNz
TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTUyNTNEODExNkM0QzY4MDBDQUJGMDAgLyogRmls
ZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk1MjUzRDkxMTZDNEM2ODAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1DbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0REMTE2QzRFRjUw
MENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0RG
MTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0y
MTA0Niw2ICsyMTA1Nyw3IEBACiAJCQkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1RDRBQTc5MTE2QkFGQjYw
MDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODk1MjUz
RDcxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
ODk1MjUzREMxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBiL1dlYkNvcmUv
aHRtbC9GaWxlU3RyZWFtLmNwcAppbmRleCA1M2M5OTJjLi44NGEyOGQ2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0u
Y3BwCkBAIC01Niw2ICs1NiwxMyBAQCB2b2lkIEZpbGVTdHJlYW06OnN0YXJ0KCkKICAgICBtX2Ns
aWVudC0+ZGlkU3RhcnQoKTsKIH0KIAordm9pZCBGaWxlU3RyZWFtOjpzdG9wKCkKK3sKKyAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBjbG9zZSgpOworICAgIG1fY2xpZW50LT5kaWRT
dG9wKCk7Cit9CisKIHZvaWQgRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQoQmxvYiopCiB7CiAgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbS5oIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uaAppbmRleCBiYTdjMDU2Li5iZGE4ZmM3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5oCisrKyBiL1dlYkNvcmUvaHRt
bC9GaWxlU3RyZWFtLmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkZp
bGVTdHJlYW0oKTsKIAogICAgIHZvaWQgc3RhcnQoKTsKKyAgICB2b2lkIHN0b3AoKTsKIAogICAg
IHZvaWQgb3BlbkZvclJlYWQoQmxvYiopOwogICAgIHZvaWQgb3BlbkZvcldyaXRlKGNvbnN0IFN0
cmluZyYgcGF0aCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbUNsaWVudC5o
IGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaAppbmRleCA5ZDI0YmRmLi5lMWFlYzUz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbUNsaWVudC5oCisrKyBiL1dlYkNv
cmUvaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogCiAg
ICAgLy8gRm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZy4KICAgICB2aXJ0dWFsIHZvaWQgZGlk
U3RhcnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcCgpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBkaWRGaW5pc2goKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChFeGNlcHRpb25D
b2RlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0U2l6ZShsb25nIGxvbmcpIHsgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAgYi9XZWJDb3JlL2h0bWwv
RmlsZVN0cmVhbVByb3h5LmNwcAppbmRleCBlNjlkZTI5Li43NDA2M2QzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbVByb3h5LmNwcApAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKKworI2luY2x1ZGUg
IkZpbGVTdHJlYW1Qcm94eS5oIgorCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkZpbGVT
dHJlYW0uaCIKKyNpbmNsdWRlICJGaWxlVGhyZWFkLmgiCisjaW5jbHVkZSAiRmlsZVRocmVhZFRh
c2suaCIKKyNpbmNsdWRlICJHZW5lcmljV29ya2VyVGFzay5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ZpbGVTdHJlYW1Qcm94eTo6RmlsZVN0cmVhbVByb3h5KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKKyAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zdHJl
YW0oRmlsZVN0cmVhbTo6Y3JlYXRlKHRoaXMpKQoreworICAgIC8vIEhvbGRzIGFuIGV4dHJhIHJl
ZiBzbyB0aGF0IHRoZSBpbnN0YW5jZSB3aWxsIG5vdCBnZXQgZGVsZXRlZCB3aGlsZSB0aGVyZSBj
YW4gYmUgYW55IHRhc2tzIG9uIHRoZSBmaWxlIHRocmVhZC4KKyAgICByZWYoKTsKKyAgICBmaWxl
VGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAm
RmlsZVN0cmVhbTo6c3RhcnQpKTsKK30KKworRmlsZVN0cmVhbVByb3h5Ojp+RmlsZVN0cmVhbVBy
b3h5KCkKK3sKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JSZWFkKEJsb2IqIGJs
b2IpCit7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayht
X3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkLCBibG9iKSk7Cit9CisKK3Zv
aWQgRmlsZVN0cmVhbVByb3h5OjpvcGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBwYXRoKQorewor
ICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0u
Z2V0KCksICZGaWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUsIHBhdGgpKTsKK30KKwordm9pZCBGaWxl
U3RyZWFtUHJveHk6OmNsb3NlKCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0
ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6Y2xvc2UpKTsKK30K
Kwordm9pZCBGaWxlU3RyZWFtUHJveHk6OnJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQor
eworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJl
YW0uZ2V0KCksICZGaWxlU3RyZWFtOjpyZWFkLCBidWZmZXIsIGxlbmd0aCkpOworfQorCit2b2lk
IEZpbGVTdHJlYW1Qcm94eTo6d3JpdGUoQmxvYiogYmxvYiwgbG9uZyBsb25nIHBvc2l0aW9uLCBp
bnQgbGVuZ3RoKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVh
ZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjp3cml0ZSwgYmxvYiwgcG9zaXRpb24s
IGxlbmd0aCkpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6dHJ1bmNhdGUobG9uZyBsb25n
IHBvc2l0aW9uKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVh
ZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjp0cnVuY2F0ZSwgcG9zaXRpb24pKTsK
K30KKworRmlsZVRocmVhZCogRmlsZVN0cmVhbVByb3h5OjpmaWxlVGhyZWFkKCkKK3sKKyAgICBB
U1NFUlQobV9jb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fY29udGV4
dC0+ZmlsZVRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5maWxlVGhyZWFkKCk7Cit9
CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpzdG9wKCkKK3sKKyAgICAvLyBDbGVhciB0aGUgY2xp
ZW50IHNvIHRoYXQgd2Ugd29uJ3QgYmUgY2FsbGluZyBjYWxsYmFja3Mgb24gdGhlIGNsaWVudC4K
KyAgICBtX2NsaWVudCA9IDA7CisgICAgZmlsZVRocmVhZCgpLT51bnNjaGVkdWxlVGFza3MobV9z
dHJlYW0uZ2V0KCkpOworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVh
ZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjpzdG9wKSk7Cit9CisKK3N0YXRpYyB2
b2lkIG5vdGlmeUdldFNpemVPbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVT
dHJlYW1Qcm94eSogcHJveHksIGxvbmcgbG9uZyBzaXplKQoreworICAgIGlmIChwcm94eS0+Y2xp
ZW50KCkpCisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkR2V0U2l6ZShzaXplKTsKK30KKwor
dm9pZCBGaWxlU3RyZWFtUHJveHk6OmRpZEdldFNpemUobG9uZyBsb25nIHNpemUpCit7CisgICAg
QVNTRVJUKCFtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2NvbnRleHQtPnBv
c3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5R2V0U2l6ZU9uQ29udGV4dCwgdGhpcywg
c2l6ZSkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlSZWFkT25Db250ZXh0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5LCBjb25zdCBjaGFyKiBkYXRhLCBp
bnQgYnl0ZXNSZWFkKQoreworICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCisgICAgICAgIHByb3h5
LT5jbGllbnQoKS0+ZGlkUmVhZChkYXRhLCBieXRlc1JlYWQpOworfQorCit2b2lkIEZpbGVTdHJl
YW1Qcm94eTo6ZGlkUmVhZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFkKQoreworICAg
IEFTU0VSVCghbV9jb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5w
b3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeVJlYWRPbkNvbnRleHQsIHRoaXMsIGRh
dGEsIGJ5dGVzUmVhZCkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlXcml0ZU9uQ29udGV4dChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwgaW50IGJ5dGVz
V3JpdHRlbikKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xp
ZW50KCktPmRpZFdyaXRlKGJ5dGVzV3JpdHRlbik7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5
OjpkaWRXcml0ZShpbnQgYnl0ZXNXcml0dGVuKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0LT5p
c0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFj
a1Rhc2soJm5vdGlmeVdyaXRlT25Db250ZXh0LCB0aGlzLCBieXRlc1dyaXR0ZW4pKTsKK30KKwor
c3RhdGljIHZvaWQgbm90aWZ5U3RhcnRPbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IEZpbGVTdHJlYW1Qcm94eSogcHJveHkpCit7CisgICAgaWYgKHByb3h5LT5jbGllbnQoKSkKKyAg
ICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRTdGFydCgpOworfQorCit2b2lkIEZpbGVTdHJlYW1Q
cm94eTo6ZGlkU3RhcnQoKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0LT5pc0NvbnRleHRUaHJl
YWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlm
eVN0YXJ0T25Db250ZXh0LCB0aGlzKSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeUZpbmlzaE9u
Q29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSkK
K3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xpZW50KCktPmRp
ZEZpbmlzaCgpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlkRmluaXNoKCkKK3sKKyAg
ICBBU1NFUlQoIW1fY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1fY29udGV4dC0+
cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlGaW5pc2hPbkNvbnRleHQsIHRoaXMp
KTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5RmFpbE9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwgRXhjZXB0aW9uQ29kZSBlYykKK3sKKyAg
ICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xpZW50KCktPmRpZEZhaWwo
ZWMpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlkRmFpbChFeGNlcHRpb25Db2RlIGVj
KQoreworICAgIEFTU0VSVCghbV9jb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9j
b250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeUZhaWxPbkNvbnRleHQs
IHRoaXMsIGVjKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlcmVmUHJveHlPbkNvbnRleHQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHkpCit7CisgICAgQVNTRVJU
KHByb3h5LT5oYXNPbmVSZWYoKSk7CisgICAgcHJveHktPmRlcmVmKCk7Cit9CisKK3ZvaWQgRmls
ZVN0cmVhbVByb3h5OjpkaWRTdG9wKCkKK3sKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0
ZUNhbGxiYWNrVGFzaygmZGVyZWZQcm94eU9uQ29udGV4dCwgdGhpcykpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9XUklURVIpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmggYi9XZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbVByb3h5LmgKaW5kZXggZTY5ZGUyOS4uZGQ5MmQ1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0ZpbGVTdHJlYW1Qcm94eS5oCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHku
aApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmlsZVN0cmVhbVByb3h5X2gKKyNkZWZpbmUgRmls
ZVN0cmVhbVByb3h5X2gKKworI2lmIEVOQUJMRShGSUxFX1JFQURFUikgfHwgRU5BQkxFKEZJTEVf
V1JJVEVSKQorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZpbGVTdHJl
YW1DbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEJsb2I7CitjbGFzcyBGaWxlU3RyZWFtOworY2xhc3MgRmlsZVRocmVhZDsK
K2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTdHJpbmc7CisKKy8vIEEgcHJv
eHkgbW9kdWxlIHRoYXQgY2FsbHMgY29ycmVzcG9uZGluZyBGaWxlU3RyZWFtIG1ldGhvZHMgb24g
dGhlIGZpbGUgdGhyZWFkLiAgTm90ZTogeW91IG11c3QgY2FsbCBzdG9wKCkgZmlyc3QgYW5kIHRo
ZW4gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIHRvIGRlc3RydWN0IHRoZSBGaWxlU3RyZWFtUHJveHkg
aW5zdGFuY2UuCitjbGFzcyBGaWxlU3RyZWFtUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWxl
U3RyZWFtUHJveHk+LCBwdWJsaWMgRmlsZVN0cmVhbUNsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RmlsZVN0cmVhbVByb3h5PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlU3RyZWFtUHJveHkoY29udGV4dCwgY2xpZW50KSk7Cisg
ICAgfQorICAgIHZpcnR1YWwgfkZpbGVTdHJlYW1Qcm94eSgpOworCisgICAgdm9pZCBvcGVuRm9y
UmVhZChCbG9iKiBibG9iKTsKKyAgICB2b2lkIG9wZW5Gb3JXcml0ZShjb25zdCBTdHJpbmcmIHBh
dGgpOworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lkIHJlYWQoY2hhciogYnVmZmVyLCBpbnQg
bGVuZ3RoKTsKKyAgICB2b2lkIHdyaXRlKEJsb2IqIGJsb2IsIGxvbmcgbG9uZyBwb3NpdGlvbiwg
aW50IGxlbmd0aCk7CisgICAgdm9pZCB0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRpb24pOworCisg
ICAgLy8gU3RvcHMgdGhlIHByb3h5IGFuZCBzY2VkdWxlcyBpdCB0byBiZSBkZXN0cnVjdGVkLiAg
QWxsIHRoZSBwZW5kaW5nIHRhc2tzIHdpbGwgYmUgYWJvcnRlZCBhbmQgdGhlIGZpbGUgc3RyZWFt
IHdpbGwgYmUgY2xvc2VkLgorICAgIC8vIE5vdGU6IHRoZSBjYWxsZXIgc2hvdWxkIG5vdCByZWN5
Y2xlIHRoZSBpbnN0YW5jZSBhZnRlciBjYWxsaW5nIHN0b3AoKS4KKyAgICB2b2lkIHN0b3AoKTsK
KworICAgIEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50
OyB9CisKK3ByaXZhdGU6CisgICAgRmlsZVN0cmVhbVByb3h5KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBGaWxlU3RyZWFtQ2xpZW50Kik7CisKKyAgICAvLyBGaWxlU3RyZWFtQ2xpZW50IG1ldGhv
ZHMuCisgICAgdmlydHVhbCB2b2lkIGRpZEdldFNpemUobG9uZyBsb25nKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVhZChjb25zdCBjaGFyKiwgaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkV3Jp
dGUoaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoKCk7CisgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWwoRXhjZXB0aW9uQ29kZSk7CisgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0KCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFN0b3AoKTsKKworICAgIEZpbGVUaHJlYWQqIGZpbGVUaHJlYWQo
KTsKKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9jb250ZXh0OworICAgIEZp
bGVTdHJlYW1DbGllbnQqIG1fY2xpZW50OworICAgIFJlZlB0cjxGaWxlU3RyZWFtPiBtX3N0cmVh
bTsKKyAgICBib29sIG1fcnVubmluZzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShGSUxFX1JFQURFUikgfHwgRU5BQkxFKEZJTEVfV1JJVEVSKQorCisj
ZW5kaWYgLy8gRmlsZVN0cmVhbVByb3h5X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxl
VGhyZWFkVGFzay5oIGIvV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWRUYXNrLmgKaW5kZXggZTY5ZGUy
OS4uZjRjNTlkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWRUYXNrLmgKKysr
IGIvV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWRUYXNrLmgKQEAgLTAsMCArMSwyMzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBGaWxlVGhyZWFkVGFza19oCisjZGVmaW5lIEZpbGVUaHJlYWRUYXNrX2gKKworI2luY2x1ZGUg
IkNyb3NzVGhyZWFkQ29waWVyLmgiCisjaW5jbHVkZSAiRmlsZVRocmVhZC5oIgorI2luY2x1ZGUg
PG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBUcmFpdHMgZm9yIHRoZSBUYXNrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEZpbGVUaHJlYWRUYXNrVHJhaXRzIHsKKyAgICB0eXBlZGVmIGNvbnN0IFQmIFBhcmFtVHlw
ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGaWxlVGhyZWFkVGFza1RyYWl0
czxUKj4geworICAgIHR5cGVkZWYgVCogUGFyYW1UeXBlOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEZpbGVUaHJlYWRUYXNrVHJhaXRzPFBhc3NSZWZQdHI8VD4gPiB7CisgICAg
dHlwZWRlZiBQYXNzUmVmUHRyPFQ+IFBhcmFtVHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBGaWxlVGhyZWFkVGFza1RyYWl0czxQYXNzT3duUHRyPFQ+ID4geworICAgIHR5
cGVkZWYgUGFzc093blB0cjxUPiBQYXJhbVR5cGU7Cit9OworCitjbGFzcyBGaWxlVGhyZWFkVGFz
azAgOiBwdWJsaWMgRmlsZVRocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lk
IChGaWxlU3RyZWFtOjoqTWV0aG9kKSgpOworICAgIHR5cGVkZWYgRmlsZVRocmVhZFRhc2swIEZp
bGVUaHJlYWRUYXNrOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRhc2s+IGNy
ZWF0ZShGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0cmVhbSwgbWV0aG9kKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgRmlsZVRocmVhZFRhc2swKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhv
ZCkKKyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVhbSkKKyAgICAgICAgLCBtX21ldGhv
ZChtZXRob2QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygp
CisgICAgeworICAgICAgICAoKnN0cmVhbSgpLiptX21ldGhvZCkoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5
cGVuYW1lIE1QMT4KK2NsYXNzIEZpbGVUaHJlYWRUYXNrMSA6IHB1YmxpYyBGaWxlVGhyZWFkOjpU
YXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKEZpbGVTdHJlYW06OipNZXRob2QpKE1Q
MSk7CisgICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazE8UDEsIE1QMT4gRmlsZVRocmVhZFRhc2s7
CisgICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlw
ZSBQYXJhbTE7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlVGhyZWFkVGFzaz4gY3JlYXRl
KEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEpCisg
ICAgeworICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0cmVhbSwgbWV0aG9kLCBw
YXJhbWV0ZXIxKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmlsZVRocmVhZFRhc2sxKEZpbGVT
dHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEpCisgICAgICAg
IDogRmlsZVRocmVhZDo6VGFzayhzdHJlYW0pCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQor
ICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdHJlYW0oKS4qbV9t
ZXRob2QpKG1fcGFyYW1ldGVyMSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21l
dGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwg
dHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgorY2xhc3MgRmlsZVRocmVh
ZFRhc2syIDogcHVibGljIEZpbGVUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYg
dm9pZCAoRmlsZVN0cmVhbTo6Kk1ldGhvZCkoTVAxLCBNUDIpOworICAgIHR5cGVkZWYgRmlsZVRo
cmVhZFRhc2syPFAxLCBNUDEsIFAyLCBNUDI+IEZpbGVUaHJlYWRUYXNrOworICAgIHR5cGVkZWYg
dHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAg
IHR5cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFy
YW0yOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRhc2s+IGNyZWF0ZShGaWxl
U3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIg
cGFyYW1ldGVyMikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgRmlsZVRocmVhZFRhc2soc3Ry
ZWFtLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBGaWxlVGhyZWFkVGFzazIoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQ
YXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIpCisgICAgICAgIDogRmlsZVRocmVh
ZDo6VGFzayhzdHJlYW0pCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1f
cGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIy
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsK
KyAgICAgICAgKCpzdHJlYW0oKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIy
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFy
YW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQ
MSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywg
dHlwZW5hbWUgTVAzPgorY2xhc3MgRmlsZVRocmVhZFRhc2szIDogcHVibGljIEZpbGVUaHJlYWQ6
OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoRmlsZVN0cmVhbTo6Kk1ldGhvZCko
TVAxLCBNUDIsIE1QMyk7CisgICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazM8UDEsIE1QMSwgUDIs
IE1QMiwgUDMsIE1QMz4gRmlsZVRocmVhZFRhc2s7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxl
VGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisgICAgdHlw
ZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7
CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlVGhyZWFkVGFzaz4gY3JlYXRlKEZpbGVTdHJl
YW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJh
bWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgRmls
ZVRocmVhZFRhc2soc3RyZWFtLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFt
ZXRlcjMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGaWxlVGhyZWFkVGFzazMoRmlsZVN0cmVh
bSogc3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFt
ZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgICAgICA6IEZpbGVUaHJlYWQ6OlRhc2soc3Ry
ZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEo
cGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAg
LCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RyZWFtKCkuKm1fbWV0aG9kKSht
X3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBt
X3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJhbWV0ZXIzOworfTsKKworUGFzc093blB0cjxGaWxl
VGhyZWFkOjpUYXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKKyAgICBGaWxlU3RyZWFtKiBjb25z
dCBjYWxsZWUsCisgICAgdm9pZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoKSkKK3sKKyAgICByZXR1
cm4gRmlsZVRocmVhZFRhc2swOjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0
aG9kKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMT4KK1Bhc3NPd25Q
dHI8RmlsZVRocmVhZDo6VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCisgICAgRmlsZVN0cmVh
bSogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKEZpbGVTdHJlYW06OiptZXRob2QpKE1QMSksCisg
ICAgY29uc3QgUDEmIHBhcmFtZXRlcjEpCit7CisgICAgcmV0dXJuIEZpbGVUaHJlYWRUYXNrMTx0
eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMT46OmNyZWF0ZSgKKyAgICAg
ICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAx
Pjo6Y29weShwYXJhbWV0ZXIxKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFt
ZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+CitQYXNzT3duUHRyPEZpbGVUaHJlYWQ6
OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAorICAgIEZpbGVTdHJlYW0qIGNvbnN0IGNhbGxl
ZSwKKyAgICB2b2lkIChGaWxlU3RyZWFtOjoqbWV0aG9kKShNUDEsIE1QMiksCisgICAgY29uc3Qg
UDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIpCit7CisgICAgcmV0dXJu
IEZpbGVUaHJlYWRUYXNrMjx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1Q
MSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDI+OjpjcmVhdGUoCisg
ICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGll
cjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6
Y29weShwYXJhbWV0ZXIyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBN
UDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+
CitQYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAorICAg
IEZpbGVTdHJlYW0qIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChGaWxlU3RyZWFtOjoqbWV0aG9k
KShNUDEsIE1QMiwgTVAzKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQ
MiYgcGFyYW1ldGVyMiwKKyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMykKK3sKKyAgICByZXR1cm4g
RmlsZVRocmVhZFRhc2szPHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAx
LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDM+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwK
KyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFy
YW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIy
KSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRmlsZVRocmVhZFRhc2tfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53208</attachid>
            <date>2010-04-12 18:43:27 -0700</date>
            <delta_ts>2010-04-12 18:47:12 -0700</delta_ts>
            <desc>Rebased</desc>
            <filename>bug-37218-20100412184326.patch</filename>
            <type>text/plain</type>
            <size>27813</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTYwYTFkMS4uOWVhZTA3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMTUgKzEsMjUgQEAKLTIwMTAtMDQtMTIgIER1bWl0cnUgRGFu
aWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKzIwMTAtMDQtMTIgIEtpbnVrbyBZYXN1ZGEgIDxr
aW51a29AY2hyb21pdW0ub3JnPgogCi0gICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtv
di4KKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKLSAgICAgICAgVGhyb3dp
bmcgYSBTRUNVUklUWV9FUlIgd2hlbiBvcGVuRGF0YWJhc2UoKSBjYW5ub3Qgb3BlbiBhIGRhdGFi
YXNlCi0gICAgICAgIGZvciB3aGF0ZXZlciByZWFzb24sIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVj
LgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM5MTYK
KyAgICAgICAgSW1wbGVtZW50IEZpbGVTdHJlYW1Qcm94eSB0aGF0IGNhbGxzIEZpbGVTdHJlYW0g
bWV0aG9kcyBvbiBGaWxlVGhyZWFkIGZvciBGaWxlQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzIxOAogCi0gICAgICAgICogYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwOgotICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6Om9w
ZW5EYXRhYmFzZSk6Ci0gICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3Vz
dG9tLmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93OjpvcGVuRGF0YWJhc2VDYWxs
YmFjayk6CisgICAgICAgIE5vIG5ldyB0ZXN0czsgdGVzdHMgd2lsbCBiZSBhZGRlZCB3aGVuIHdl
IGFkZCB1cHBlciBsYXllciBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86Cisg
ICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3RyZWFtOjpzdG9wKToKKyAgICAgICAgKiBodG1s
L0ZpbGVTdHJlYW0uaDoKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW1DbGllbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVTdHJlYW1DbGllbnQ6OmRpZFN0b3ApOgorICAgICAgICAqIGh0bWwv
RmlsZVN0cmVhbVByb3h5LmNwcDogQWRkZWQKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW1Qcm94
eS5oOiBBZGRlZAorICAgICAgICAqIGh0bWwvRmlsZVRocmVhZFRhc2suaDogQWRkZWQKIAogMjAx
MC0wNC0xMiAgU3RldmUgRmFsa2VuYnVyZyAgPHNmYWxrZW5AYXBwbGUuY29tPgogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRl
eCA5YjI0YzNlLi5hOGIyMDNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEwMzIsOCArMTAzMiwxMSBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBcCiAJV2ViQ29yZS9o
dG1sL0ZpbGVTdHJlYW0uaCBcCiAJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaCBcCisJ
V2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAgXAorCVdlYkNvcmUvaHRtbC9GaWxlU3Ry
ZWFtUHJveHkuaCBcCiAJV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWQuY3BwIFwKIAlXZWJDb3JlL2h0
bWwvRmlsZVRocmVhZC5oIFwKKwlXZWJDb3JlL2h0bWwvRmlsZVRocmVhZFRhc2suaCBcCiAJV2Vi
Q29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogCVdlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3Qu
aCBcCiAJV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcCBcCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGViM2NjMjAu
LmQxZDBkNzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0xNDMzLDggKzE0MzMsMTEgQEAKICAgICAgICAgICAgICdodG1sL0Zp
bGVTdHJlYW0uY3BwJywKICAgICAgICAgICAgICdodG1sL0ZpbGVTdHJlYW0uaCcsCiAgICAgICAg
ICAgICAnaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgnLAorICAgICAgICAgICAgJ2h0bWwvRmlsZVN0
cmVhbVByb3h5LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9GaWxlU3RyZWFtUHJveHkuaCcsCiAg
ICAgICAgICAgICAnaHRtbC9GaWxlVGhyZWFkLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxl
VGhyZWFkLmgnLAorICAgICAgICAgICAgJ2h0bWwvRmlsZVRocmVhZFRhc2suaCcsCiAgICAgICAg
ICAgICAnaHRtbC9Gb3JtRGF0YUxpc3QuY3BwJywKICAgICAgICAgICAgICdodG1sL0Zvcm1EYXRh
TGlzdC5oJywKICAgICAgICAgICAgICdodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcCcsCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA3
OTg4MjczLi5hOGU1MzE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS5wcm8KQEAgLTYxNSw2ICs2MTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBo
dG1sL0ZpbGUuY3BwIFwKICAgICBodG1sL0ZpbGVMaXN0LmNwcCBcCiAgICAgaHRtbC9GaWxlU3Ry
ZWFtLmNwcCBcCisgICAgaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwIFwKICAgICBodG1sL0ZpbGVU
aHJlYWQuY3BwIFwKICAgICBodG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogICAgIGh0bWwvSFRNTEFs
bENvbGxlY3Rpb24uY3BwIFwKQEAgLTEzMjgsNyArMTMyOSw5IEBAIEhFQURFUlMgKz0gXAogICAg
IGh0bWwvRmlsZUxpc3QuaCBcCiAgICAgaHRtbC9GaWxlU3RyZWFtLmggXAogICAgIGh0bWwvRmls
ZVN0cmVhbUNsaWVudC5oIFwKKyAgICBodG1sL0ZpbGVTdHJlYW1Qcm94eS5oIFwKICAgICBodG1s
L0ZpbGVUaHJlYWQuaCBcCisgICAgaHRtbC9GaWxlVGhyZWFkVGFzay5oIFwKICAgICBodG1sL0Zv
cm1EYXRhTGlzdC5oIFwKICAgICBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmggXAogICAgIGh0bWwv
SFRNTEFuY2hvckVsZW1lbnQuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpp
bmRleCA5ZGVhY2NmLi5hNjQ2MGFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKQEAgLTMwMjQ5LDYgKzMwMjQ5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVN0cmVhbVByb3h5LmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmls
ZVN0cmVhbVByb3h5LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxodG1sXEZpbGVUaHJlYWQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
QEAgLTMwMjU3LDYgKzMwMjY1LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVRocmVhZFRhc2suaCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRm9ybURhdGFM
aXN0LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGE2NjY4YzUuLmM0ZDA4NTEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjE0LDYgKzIyMTQsOSBAQAogCQk4OTUy
NTNENzExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENDExNkM0QzY4MDBDQUJGMDAgLyog
RmlsZVN0cmVhbS5jcHAgKi87IH07CiAJCTg5NTI1M0Q4MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxl
U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
OTUyNTNENTExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oICovOyB9OwogCQk4OTUyNTNE
OTExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzRDYxMTZDNEM2ODAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1DbGllbnQuaCAqLzsgfTsKKwkJODk1MjUzREMxMTZDNEVGNTAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1Qcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNw
cCAqLzsgfTsKKwkJODk1MjUzREQxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREIx
MTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovOyB9OworCQk4OTUyNTNERjEx
NkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RFMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxl
VGhyZWFkVGFzay5oICovOyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdy
b3VwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
MDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAyQjBC
RjBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdy
b3VwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
OTMwNUIyNEQwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGlt
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
NzY2OSw2ICs3NjcyLDkgQEAKIAkJODk1MjUzRDQxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJl
YW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVN0cmVhbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1M0Q1MTE2QzRDNjgwMENBQkYw
MCAvKiBGaWxlU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVT
dHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODk1MjUzRDYxMTZDNEM2ODAw
Q0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmlsZVN0cmVhbUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTdHJlYW1Qcm94eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5NTI1M0RCMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3Ry
ZWFtUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVN0cmVhbVBy
b3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5NTI1M0RFMTE2QzRGMDYwMENB
QkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWxlVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAyQjBC
QzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTI5NjAsNiArMTI5NjYsOSBAQAogCQk5M0VFQzFFQzA5QzI4Nzc3MDBDNTE1RDEgLyogaHRt
bCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJODk1MjUz
REUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi8sCisJCQkJODk1MjUzREEx
MTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgKi8sCisJCQkJODk1MjUzREIx
MTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovLAogCQkJCTg5NTI1M0Q0MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLywKIAkJCQk4OTUyNTNENTExNkM0QzY4
MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oICovLAogCQkJCTg5NTI1M0Q2MTE2QzRDNjgwMENBQkYw
MCAvKiBGaWxlU3RyZWFtQ2xpZW50LmggKi8sCkBAIC0xODgyOSw2ICsxODgzOCw4IEBACiAJCQkJ
ODk1MjUzRDgxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uaCBpbiBIZWFkZXJzICovLAog
CQkJCTg5NTI1M0Q5MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1REM4N0VGMDExNzE2REYyMDAxQzBFNkQgLyogRW1wdHlQcm90b2NvbERl
ZmluaXRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQk4OTUyNTNERDExNkM0RUY1MDBDQUJGMDAg
LyogRmlsZVN0cmVhbVByb3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQk4OTUyNTNERjExNkM0RjA2
MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjEwNjEsNiAr
MjEwNzIsNyBAQAogCQkJCTI1NDJGNERBMTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUlu
ZGljYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNUQ0QUE3OTExNkJBRkI2MDA2OUNBOTMg
LyogR2x5cGhNZXRyaWNzTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5NTI1M0Q3MTE2QzRD
NjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg5NTI1M0RD
MTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAgYi9XZWJDb3JlL2h0bWwvRmls
ZVN0cmVhbS5jcHAKaW5kZXggNTNjOTkyYy4uODRhMjhkNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0ZpbGVTdHJlYW0uY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcApAQCAt
NTYsNiArNTYsMTMgQEAgdm9pZCBGaWxlU3RyZWFtOjpzdGFydCgpCiAgICAgbV9jbGllbnQtPmRp
ZFN0YXJ0KCk7CiB9CiAKK3ZvaWQgRmlsZVN0cmVhbTo6c3RvcCgpCit7CisgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CisgICAgY2xvc2UoKTsKKyAgICBtX2NsaWVudC0+ZGlkU3RvcCgpOwor
fQorCiB2b2lkIEZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKEJsb2IqKQogewogICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uaCBi
L1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmgKaW5kZXggYmE3YzA1Ni4uYmRhOGZjNyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbS5oCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5GaWxlU3RyZWFt
KCk7CiAKICAgICB2b2lkIHN0YXJ0KCk7CisgICAgdm9pZCBzdG9wKCk7CiAKICAgICB2b2lkIG9w
ZW5Gb3JSZWFkKEJsb2IqKTsKICAgICB2b2lkIG9wZW5Gb3JXcml0ZShjb25zdCBTdHJpbmcmIHBh
dGgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaCBiL1dlYkNv
cmUvaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgKaW5kZXggOWQyNGJkZi4uZTFhZWM1MyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaAorKysgYi9XZWJDb3JlL2h0bWwv
RmlsZVN0cmVhbUNsaWVudC5oCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEZv
ciBib3RoIHJlYWRpbmcgYW5kIHdyaXRpbmcuCiAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0KCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFN0b3AoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoRXhjZXB0aW9uQ29kZSkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGRpZEdldFNpemUobG9uZyBsb25nKSB7IH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJl
YW1Qcm94eS5jcHAKaW5kZXggZTY5ZGUyOS4uNzQwNjNkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94
eS5jcHAKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KEZJTEVfUkVBREVSKSB8fCBFTkFCTEUoRklMRV9XUklURVIpCisKKyNpbmNsdWRlICJGaWxlU3Ry
ZWFtUHJveHkuaCIKKworI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJGaWxlU3RyZWFtLmgi
CisjaW5jbHVkZSAiRmlsZVRocmVhZC5oIgorI2luY2x1ZGUgIkZpbGVUaHJlYWRUYXNrLmgiCisj
aW5jbHVkZSAiR2VuZXJpY1dvcmtlclRhc2suaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitGaWxlU3RyZWFtUHJveHk6OkZpbGVTdHJlYW1Qcm94eShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fc3RyZWFtKEZpbGVT
dHJlYW06OmNyZWF0ZSh0aGlzKSkKK3sKKyAgICAvLyBIb2xkcyBhbiBleHRyYSByZWYgc28gdGhh
dCB0aGUgaW5zdGFuY2Ugd2lsbCBub3QgZ2V0IGRlbGV0ZWQgd2hpbGUgdGhlcmUgY2FuIGJlIGFu
eSB0YXNrcyBvbiB0aGUgZmlsZSB0aHJlYWQuCisgICAgcmVmKCk7CisgICAgZmlsZVRocmVhZCgp
LT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJl
YW06OnN0YXJ0KSk7Cit9CisKK0ZpbGVTdHJlYW1Qcm94eTo6fkZpbGVTdHJlYW1Qcm94eSgpCit7
Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpvcGVuRm9yUmVhZChCbG9iKiBibG9iKQorewor
ICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0u
Z2V0KCksICZGaWxlU3RyZWFtOjpvcGVuRm9yUmVhZCwgYmxvYikpOworfQorCit2b2lkIEZpbGVT
dHJlYW1Qcm94eTo6b3BlbkZvcldyaXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBmaWxl
VGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAm
RmlsZVN0cmVhbTo6b3BlbkZvcldyaXRlLCBwYXRoKSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVBy
b3h5OjpjbG9zZSgpCit7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhy
ZWFkVGFzayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06OmNsb3NlKSk7Cit9CisKK3ZvaWQg
RmlsZVN0cmVhbVByb3h5OjpyZWFkKGNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKK3sKKyAgICBm
aWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgp
LCAmRmlsZVN0cmVhbTo6cmVhZCwgYnVmZmVyLCBsZW5ndGgpKTsKK30KKwordm9pZCBGaWxlU3Ry
ZWFtUHJveHk6OndyaXRlKEJsb2IqIGJsb2IsIGxvbmcgbG9uZyBwb3NpdGlvbiwgaW50IGxlbmd0
aCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1f
c3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6d3JpdGUsIGJsb2IsIHBvc2l0aW9uLCBsZW5ndGgp
KTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OnRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlv
bikKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1f
c3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6dHJ1bmNhdGUsIHBvc2l0aW9uKSk7Cit9CisKK0Zp
bGVUaHJlYWQqIEZpbGVTdHJlYW1Qcm94eTo6ZmlsZVRocmVhZCgpCit7CisgICAgQVNTRVJUKG1f
Y29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChtX2NvbnRleHQtPmZpbGVU
aHJlYWQoKSk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+ZmlsZVRocmVhZCgpOworfQorCit2b2lk
IEZpbGVTdHJlYW1Qcm94eTo6c3RvcCgpCit7CisgICAgLy8gQ2xlYXIgdGhlIGNsaWVudCBzbyB0
aGF0IHdlIHdvbid0IGJlIGNhbGxpbmcgY2FsbGJhY2tzIG9uIHRoZSBjbGllbnQuCisgICAgbV9j
bGllbnQgPSAwOworICAgIGZpbGVUaHJlYWQoKS0+dW5zY2hlZHVsZVRhc2tzKG1fc3RyZWFtLmdl
dCgpKTsKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1f
c3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6c3RvcCkpOworfQorCitzdGF0aWMgdm9pZCBub3Rp
ZnlHZXRTaXplT25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJv
eHkqIHByb3h5LCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQor
ICAgICAgICBwcm94eS0+Y2xpZW50KCktPmRpZEdldFNpemUoc2l6ZSk7Cit9CisKK3ZvaWQgRmls
ZVN0cmVhbVByb3h5OjpkaWRHZXRTaXplKGxvbmcgbG9uZyBzaXplKQoreworICAgIEFTU0VSVCgh
bV9jb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhj
cmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeUdldFNpemVPbkNvbnRleHQsIHRoaXMsIHNpemUpKTsK
K30KKworc3RhdGljIHZvaWQgbm90aWZ5UmVhZE9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwgY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVz
UmVhZCkKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xpZW50
KCktPmRpZFJlYWQoZGF0YSwgYnl0ZXNSZWFkKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6
OmRpZFJlYWQoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVzUmVhZCkKK3sKKyAgICBBU1NFUlQo
IW1fY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1fY29udGV4dC0+cG9zdFRhc2so
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlSZWFkT25Db250ZXh0LCB0aGlzLCBkYXRhLCBieXRl
c1JlYWQpKTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5V3JpdGVPbkNvbnRleHQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGludCBieXRlc1dyaXR0ZW4p
Cit7CisgICAgaWYgKHByb3h5LT5jbGllbnQoKSkKKyAgICAgICAgcHJveHktPmNsaWVudCgpLT5k
aWRXcml0ZShieXRlc1dyaXR0ZW4pOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlkV3Jp
dGUoaW50IGJ5dGVzV3JpdHRlbikKK3sKKyAgICBBU1NFUlQoIW1fY29udGV4dC0+aXNDb250ZXh0
VGhyZWFkKCkpOworICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZu
b3RpZnlXcml0ZU9uQ29udGV4dCwgdGhpcywgYnl0ZXNXcml0dGVuKSk7Cit9CisKK3N0YXRpYyB2
b2lkIG5vdGlmeVN0YXJ0T25Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3Ry
ZWFtUHJveHkqIHByb3h5KQoreworICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCisgICAgICAgIHBy
b3h5LT5jbGllbnQoKS0+ZGlkU3RhcnQoKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmRp
ZFN0YXJ0KCkKK3sKKyAgICBBU1NFUlQoIW1fY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwor
ICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlTdGFydE9u
Q29udGV4dCwgdGhpcykpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlGaW5pc2hPbkNvbnRleHQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHkpCit7CisgICAg
aWYgKHByb3h5LT5jbGllbnQoKSkKKyAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRGaW5pc2go
KTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmRpZEZpbmlzaCgpCit7CisgICAgQVNTRVJU
KCFtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5RmluaXNoT25Db250ZXh0LCB0aGlzKSk7Cit9CisK
K3N0YXRpYyB2b2lkIG5vdGlmeUZhaWxPbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IEZpbGVTdHJlYW1Qcm94eSogcHJveHksIEV4Y2VwdGlvbkNvZGUgZWMpCit7CisgICAgaWYgKHBy
b3h5LT5jbGllbnQoKSkKKyAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRGYWlsKGVjKTsKK30K
Kwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmRpZEZhaWwoRXhjZXB0aW9uQ29kZSBlYykKK3sKKyAg
ICBBU1NFUlQoIW1fY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1fY29udGV4dC0+
cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlGYWlsT25Db250ZXh0LCB0aGlzLCBl
YykpOworfQorCitzdGF0aWMgdm9pZCBkZXJlZlByb3h5T25Db250ZXh0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5KQoreworICAgIEFTU0VSVChwcm94eS0+
aGFzT25lUmVmKCkpOworICAgIHByb3h5LT5kZXJlZigpOworfQorCit2b2lkIEZpbGVTdHJlYW1Q
cm94eTo6ZGlkU3RvcCgpCit7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFj
a1Rhc2soJmRlcmVmUHJveHlPbkNvbnRleHQsIHRoaXMpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfV1JJVEVSKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5oIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94
eS5oCmluZGV4IGU2OWRlMjkuLmVlNDI2ZTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxl
U3RyZWFtUHJveHkuaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmgKQEAgLTAs
MCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEZpbGVTdHJlYW1Qcm94eV9oCisjZGVmaW5lIEZpbGVTdHJlYW1Q
cm94eV9oCisKKyNpZiBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikK
KworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGaWxlU3RyZWFtQ2xpZW50
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBCbG9iOworY2xhc3MgRmlsZVN0cmVhbTsKK2NsYXNzIEZpbGVUaHJlYWQ7CitjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgU3RyaW5nOworCisvLyBBIHByb3h5IG1vZHVs
ZSB0aGF0IGNhbGxzIGNvcnJlc3BvbmRpbmcgRmlsZVN0cmVhbSBtZXRob2RzIG9uIHRoZSBmaWxl
IHRocmVhZC4gIE5vdGU6IHlvdSBtdXN0IGNhbGwgc3RvcCgpIGZpcnN0IGFuZCB0aGVuIHJlbGVh
c2UgdGhlIHJlZmVyZW5jZSB0byBkZXN0cnVjdCB0aGUgRmlsZVN0cmVhbVByb3h5IGluc3RhbmNl
LgorY2xhc3MgRmlsZVN0cmVhbVByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVN0cmVhbVBy
b3h5PiwgcHVibGljIEZpbGVTdHJlYW1DbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZpbGVTdHJlYW1Qcm94eT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRmlsZVN0cmVhbVByb3h5KGNvbnRleHQsIGNsaWVudCkpOworICAgIH0KKyAg
ICB2aXJ0dWFsIH5GaWxlU3RyZWFtUHJveHkoKTsKKworICAgIHZvaWQgb3BlbkZvclJlYWQoQmxv
YiogYmxvYik7CisgICAgdm9pZCBvcGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAg
ICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCByZWFkKGNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCk7
CisgICAgdm9pZCB3cml0ZShCbG9iKiBibG9iLCBsb25nIGxvbmcgcG9zaXRpb24sIGludCBsZW5n
dGgpOworICAgIHZvaWQgdHJ1bmNhdGUobG9uZyBsb25nIHBvc2l0aW9uKTsKKworICAgIC8vIFN0
b3BzIHRoZSBwcm94eSBhbmQgc2NlZHVsZXMgaXQgdG8gYmUgZGVzdHJ1Y3RlZC4gIEFsbCB0aGUg
cGVuZGluZyB0YXNrcyB3aWxsIGJlIGFib3J0ZWQgYW5kIHRoZSBmaWxlIHN0cmVhbSB3aWxsIGJl
IGNsb3NlZC4KKyAgICAvLyBOb3RlOiB0aGUgY2FsbGVyIHNob3VsZCBkZXJlZiB0aGUgaW5zdGFu
Y2UgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyBzdG9wKCkuCisgICAgdm9pZCBzdG9wKCk7CisK
KyAgICBGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsg
fQorCitwcml2YXRlOgorICAgIEZpbGVTdHJlYW1Qcm94eShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgRmlsZVN0cmVhbUNsaWVudCopOworCisgICAgLy8gRmlsZVN0cmVhbUNsaWVudCBtZXRob2Rz
LgorICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRTaXplKGxvbmcgbG9uZyk7CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlYWQoY29uc3QgY2hhciosIGludCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFdyaXRl
KGludCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaCgpOworICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsKEV4Y2VwdGlvbkNvZGUpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydCgpOworICAg
IHZpcnR1YWwgdm9pZCBkaWRTdG9wKCk7CisKKyAgICBGaWxlVGhyZWFkKiBmaWxlVGhyZWFkKCk7
CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fY29udGV4dDsKKyAgICBGaWxl
U3RyZWFtQ2xpZW50KiBtX2NsaWVudDsKKyAgICBSZWZQdHI8RmlsZVN0cmVhbT4gbV9zdHJlYW07
CisgICAgYm9vbCBtX3J1bm5pbmc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKKworI2Vu
ZGlmIC8vIEZpbGVTdHJlYW1Qcm94eV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVRo
cmVhZFRhc2suaCBiL1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oCmluZGV4IGU2OWRlMjku
LmY0YzU5ZDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oCisrKyBi
L1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RmlsZVRocmVhZFRhc2tfaAorI2RlZmluZSBGaWxlVGhyZWFkVGFza19oCisKKyNpbmNsdWRlICJD
cm9zc1RocmVhZENvcGllci5oIgorI2luY2x1ZGUgIkZpbGVUaHJlYWQuaCIKKyNpbmNsdWRlIDxt
ZW1vcnk+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gVHJhaXRzIGZvciB0aGUgVGFzay4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBGaWxlVGhyZWFkVGFza1RyYWl0cyB7CisgICAgdHlwZWRlZiBjb25zdCBUJiBQYXJhbVR5cGU7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHM8
VCo+IHsKKyAgICB0eXBlZGVmIFQqIFBhcmFtVHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBGaWxlVGhyZWFkVGFza1RyYWl0czxQYXNzUmVmUHRyPFQ+ID4geworICAgIHR5
cGVkZWYgUGFzc1JlZlB0cjxUPiBQYXJhbVR5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHM8UGFzc093blB0cjxUPiA+IHsKKyAgICB0eXBl
ZGVmIFBhc3NPd25QdHI8VD4gUGFyYW1UeXBlOworfTsKKworY2xhc3MgRmlsZVRocmVhZFRhc2sw
IDogcHVibGljIEZpbGVUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAo
RmlsZVN0cmVhbTo6Kk1ldGhvZCkoKTsKKyAgICB0eXBlZGVmIEZpbGVUaHJlYWRUYXNrMCBGaWxl
VGhyZWFkVGFzazsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrPiBjcmVh
dGUoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEZpbGVUaHJlYWRUYXNrMChGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2Qp
CisgICAgICAgIDogRmlsZVRocmVhZDo6VGFzayhzdHJlYW0pCisgICAgICAgICwgbV9tZXRob2Qo
bWV0aG9kKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQor
ICAgIHsKKyAgICAgICAgKCpzdHJlYW0oKS4qbV9tZXRob2QpKCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIE1ldGhvZCBtX21ldGhvZDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBl
bmFtZSBNUDE+CitjbGFzcyBGaWxlVGhyZWFkVGFzazEgOiBwdWJsaWMgRmlsZVRocmVhZDo6VGFz
ayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChGaWxlU3RyZWFtOjoqTWV0aG9kKShNUDEp
OworICAgIHR5cGVkZWYgRmlsZVRocmVhZFRhc2sxPFAxLCBNUDE+IEZpbGVUaHJlYWRUYXNrOwor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUg
UGFyYW0xOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRhc2s+IGNyZWF0ZShG
aWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCwgcGFy
YW1ldGVyMSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZpbGVUaHJlYWRUYXNrMShGaWxlU3Ry
ZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQorICAgICAgICA6
IEZpbGVUaHJlYWQ6OlRhc2soc3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAg
ICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RyZWFtKCkuKm1fbWV0
aG9kKShtX3BhcmFtZXRlcjEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRo
b2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5
cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KK2NsYXNzIEZpbGVUaHJlYWRU
YXNrMiA6IHB1YmxpYyBGaWxlVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZv
aWQgKEZpbGVTdHJlYW06OipNZXRob2QpKE1QMSwgTVAyKTsKKyAgICB0eXBlZGVmIEZpbGVUaHJl
YWRUYXNrMjxQMSwgTVAxLCBQMiwgTVAyPiBGaWxlVGhyZWFkVGFzazsKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0
eXBlZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFt
MjsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrPiBjcmVhdGUoRmlsZVN0
cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBh
cmFtZXRlcjIpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0cmVh
bSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgRmlsZVRocmVhZFRhc2syKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFy
YW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQorICAgICAgICA6IEZpbGVUaHJlYWQ6
OlRhc2soc3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3Bh
cmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikK
KyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7Cisg
ICAgICAgICgqc3RyZWFtKCkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMik7
CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFt
ZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUDEs
IHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5
cGVuYW1lIE1QMz4KK2NsYXNzIEZpbGVUaHJlYWRUYXNrMyA6IHB1YmxpYyBGaWxlVGhyZWFkOjpU
YXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKEZpbGVTdHJlYW06OipNZXRob2QpKE1Q
MSwgTVAyLCBNUDMpOworICAgIHR5cGVkZWYgRmlsZVRocmVhZFRhc2szPFAxLCBNUDEsIFAyLCBN
UDIsIFAzLCBNUDM+IEZpbGVUaHJlYWRUYXNrOworICAgIHR5cGVkZWYgdHlwZW5hbWUgRmlsZVRo
cmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5h
bWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVk
ZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOwor
CisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRhc2s+IGNyZWF0ZShGaWxlU3RyZWFt
KiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1l
dGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEZpbGVU
aHJlYWRUYXNrKHN0cmVhbSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0
ZXIzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmlsZVRocmVhZFRhc2szKEZpbGVTdHJlYW0q
IHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0
ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVh
bSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBh
cmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgICAgICwg
bV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0cmVhbSgpLiptX21ldGhvZCkobV9w
YXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMyk7CisgICAgfQorCitwcml2YXRl
OgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAgUDIgbV9w
YXJhbWV0ZXIyOworICAgIFAzIG1fcGFyYW1ldGVyMzsKK307CisKK1Bhc3NPd25QdHI8RmlsZVRo
cmVhZDo6VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCisgICAgRmlsZVN0cmVhbSogY29uc3Qg
Y2FsbGVlLAorICAgIHZvaWQgKEZpbGVTdHJlYW06OiptZXRob2QpKCkpCit7CisgICAgcmV0dXJu
IEZpbGVUaHJlYWRUYXNrMDo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhv
ZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDE+CitQYXNzT3duUHRy
PEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAorICAgIEZpbGVTdHJlYW0q
IGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChGaWxlU3RyZWFtOjoqbWV0aG9kKShNUDEpLAorICAg
IGNvbnN0IFAxJiBwYXJhbWV0ZXIxKQoreworICAgIHJldHVybiBGaWxlVGhyZWFkVGFzazE8dHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDE+OjpjcmVhdGUoCisgICAgICAg
IGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46
OmNvcHkocGFyYW1ldGVyMSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUg
TVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgorUGFzc093blB0cjxGaWxlVGhyZWFkOjpU
YXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKKyAgICBGaWxlU3RyZWFtKiBjb25zdCBjYWxsZWUs
CisgICAgdm9pZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoTVAxLCBNUDIpLAorICAgIGNvbnN0IFAx
JiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyKQoreworICAgIHJldHVybiBG
aWxlVGhyZWFkVGFzazI8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEs
IHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyPjo6Y3JlYXRlKAorICAg
ICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNv
cHkocGFyYW1ldGVyMikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAx
LCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzPgor
UGFzc093blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKKyAgICBG
aWxlU3RyZWFtKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCko
TVAxLCBNUDIsIE1QMyksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDIm
IHBhcmFtZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMpCit7CisgICAgcmV0dXJuIEZp
bGVUaHJlYWRUYXNrMzx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3Nz
VGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzPjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisg
ICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFt
ZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiks
CisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZpbGVUaHJlYWRUYXNrX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53209</attachid>
            <date>2010-04-12 18:47:17 -0700</date>
            <delta_ts>2010-04-12 22:57:09 -0700</delta_ts>
            <desc>Fixed the mess in diff</desc>
            <filename>bug-37218-20100412184716.patch</filename>
            <type>text/plain</type>
            <size>27374</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTYwYTFkMS4uM2I4MTNlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0wNC0xMiAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZpbGVTdHJlYW1Qcm94eSB0aGF0IGNhbGxzIEZp
bGVTdHJlYW0gbWV0aG9kcyBvbiBGaWxlVGhyZWFkIGZvciBGaWxlQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzIxOAorCisgICAgICAgIE5vIG5l
dyB0ZXN0czsgdGVzdHMgd2lsbCBiZSBhZGRlZCB3aGVuIHdlIGFkZCB1cHBlciBsYXllciBpbXBs
ZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlU3RyZWFtOjpzdG9wKToKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW0uaDoKKyAgICAg
ICAgKiBodG1sL0ZpbGVTdHJlYW1DbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJl
YW1DbGllbnQ6OmRpZFN0b3ApOgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbVByb3h5LmNwcDog
QWRkZWQKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW1Qcm94eS5oOiBBZGRlZAorICAgICAgICAq
IGh0bWwvRmlsZVRocmVhZFRhc2suaDogQWRkZWQKKwogMjAxMC0wNC0xMiAgRHVtaXRydSBEYW5p
bGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkg
R2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCmluZGV4IDliMjRjM2UuLmE4YjIwM2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTAzMiw4ICsx
MDMyLDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0u
Y3BwIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVN0
cmVhbUNsaWVudC5oIFwKKwlXZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcCBcCisJV2Vi
Q29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVRocmVhZC5j
cHAgXAogCVdlYkNvcmUvaHRtbC9GaWxlVGhyZWFkLmggXAorCVdlYkNvcmUvaHRtbC9GaWxlVGhy
ZWFkVGFzay5oIFwKIAlXZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcCBcCiAJV2ViQ29yZS9o
dG1sL0Zvcm1EYXRhTGlzdC5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3Bw
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggZWIzY2MyMC4uZDFkMGQ3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE0MzMsOCArMTQzMywxMSBAQAogICAg
ICAgICAgICAgJ2h0bWwvRmlsZVN0cmVhbS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRmlsZVN0
cmVhbS5oJywKICAgICAgICAgICAgICdodG1sL0ZpbGVTdHJlYW1DbGllbnQuaCcsCisgICAgICAg
ICAgICAnaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwJywKKyAgICAgICAgICAgICdodG1sL0ZpbGVT
dHJlYW1Qcm94eS5oJywKICAgICAgICAgICAgICdodG1sL0ZpbGVUaHJlYWQuY3BwJywKICAgICAg
ICAgICAgICdodG1sL0ZpbGVUaHJlYWQuaCcsCisgICAgICAgICAgICAnaHRtbC9GaWxlVGhyZWFk
VGFzay5oJywKICAgICAgICAgICAgICdodG1sL0Zvcm1EYXRhTGlzdC5jcHAnLAogICAgICAgICAg
ICAgJ2h0bWwvRm9ybURhdGFMaXN0LmgnLAogICAgICAgICAgICAgJ2h0bWwvSFRNTEFsbENvbGxl
Y3Rpb24uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dl
YkNvcmUucHJvCmluZGV4IDc5ODgyNzMuLmE4ZTUzMTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNjE1LDYgKzYxNSw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIGh0bWwvRmlsZS5jcHAgXAogICAgIGh0bWwvRmlsZUxpc3QuY3BwIFwK
ICAgICBodG1sL0ZpbGVTdHJlYW0uY3BwIFwKKyAgICBodG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAg
XAogICAgIGh0bWwvRmlsZVRocmVhZC5jcHAgXAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmNwcCBc
CiAgICAgaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAgXApAQCAtMTMyOCw3ICsxMzI5LDkgQEAg
SEVBREVSUyArPSBcCiAgICAgaHRtbC9GaWxlTGlzdC5oIFwKICAgICBodG1sL0ZpbGVTdHJlYW0u
aCBcCiAgICAgaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmggXAorICAgIGh0bWwvRmlsZVN0cmVhbVBy
b3h5LmggXAogICAgIGh0bWwvRmlsZVRocmVhZC5oIFwKKyAgICBodG1sL0ZpbGVUaHJlYWRUYXNr
LmggXAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmggXAogICAgIGh0bWwvSFRNTEFsbENvbGxlY3Rp
b24uaCBcCiAgICAgaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCmluZGV4IDlkZWFjY2YuLmE2NDYwYWUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzAyNDksNiArMzAyNDksMTQgQEAKIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGaWxlU3RyZWFt
UHJveHkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxGaWxlU3RyZWFtUHJveHkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVRocmVhZC5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzAyNTcsNiArMzAyNjUsMTAgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGaWxlVGhyZWFkVGFz
ay5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caHRtbFxGb3JtRGF0YUxpc3QuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTY2NjhjNS4uYzRkMDg1MSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyMTQsNiAr
MjIxNCw5IEBACiAJCTg5NTI1M0Q3MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0Q0MTE2
QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLzsgfTsKIAkJODk1MjUzRDgxMTZDNEM2
ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg5NTI1M0Q1MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmgg
Ki87IH07CiAJCTg5NTI1M0Q5MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENjEx
NkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oICovOyB9OworCQk4OTUyNTNEQzEx
NkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RBMTE2QzRFRjUwMENBQkYwMCAvKiBG
aWxlU3RyZWFtUHJveHkuY3BwICovOyB9OworCQk4OTUyNTNERDExNkM0RUY1MDBDQUJGMDAgLyog
RmlsZVN0cmVhbVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggKi87
IH07CisJCTg5NTI1M0RGMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREUxMTZDNEYw
NjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi87IH07CiAJCTkzMDJCMEJEMEQ3OUY4Mjkw
MEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAg
Ki87IH07CiAJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMw
MEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVCMjRDMDk4RjFC
NkIwMEMyODg1NSAvKiBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC03NjY5LDYgKzc2NzIsOSBAQAogCQk4OTUyNTNENDExNkM0QzY4MDBD
QUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGaWxlU3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODk1MjUz
RDUxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsZVN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
OTUyNTNENjExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlU3RyZWFtQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg5NTI1M0RBMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVN0cmVhbVBy
b3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk1MjUzREIxMTZDNEVGNTAw
Q0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWxlU3RyZWFtUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk1
MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVUaHJlYWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUdyb3VwLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlR3JvdXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjk2MCw2ICsxMjk2Niw5IEBACiAJCTkzRUVDMUVDMDlDMjg3
NzcwMEM1MTVEMSAvKiBodG1sICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk4OTUyNTNERTExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCAq
LywKKwkJCQk4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCAq
LywKKwkJCQk4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggKi8s
CiAJCQkJODk1MjUzRDQxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwICovLAogCQkJ
CTg5NTI1M0Q1MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmggKi8sCiAJCQkJODk1MjUz
RDYxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLywKQEAgLTE4ODI5LDYg
KzE4ODM4LDggQEAKIAkJCQk4OTUyNTNEODExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODk1MjUzRDkxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJl
YW1DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVEQzg3RUYwMTE3MTZERjIwMDFDMEU2RCAv
KiBFbXB0eVByb3RvY29sRGVmaW5pdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5NTI1M0RE
MTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTg5NTI1M0RGMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0yMTA2MSw2ICsyMTA3Miw3IEBACiAJCQkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2
IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1RDRBQTc5
MTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODk1MjUzRDcxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJODk1MjUzREMxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBi
L1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcAppbmRleCA1M2M5OTJjLi44NGEyOGQ2IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Zp
bGVTdHJlYW0uY3BwCkBAIC01Niw2ICs1NiwxMyBAQCB2b2lkIEZpbGVTdHJlYW06OnN0YXJ0KCkK
ICAgICBtX2NsaWVudC0+ZGlkU3RhcnQoKTsKIH0KIAordm9pZCBGaWxlU3RyZWFtOjpzdG9wKCkK
K3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBjbG9zZSgpOworICAgIG1fY2xp
ZW50LT5kaWRTdG9wKCk7Cit9CisKIHZvaWQgRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQoQmxvYiop
CiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvRmlsZVN0cmVhbS5oIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uaAppbmRleCBiYTdjMDU2
Li5iZGE4ZmM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5oCisrKyBiL1dl
YkNvcmUvaHRtbC9GaWxlU3RyZWFtLmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgfkZpbGVTdHJlYW0oKTsKIAogICAgIHZvaWQgc3RhcnQoKTsKKyAgICB2b2lkIHN0b3Ao
KTsKIAogICAgIHZvaWQgb3BlbkZvclJlYWQoQmxvYiopOwogICAgIHZvaWQgb3BlbkZvcldyaXRl
KGNvbnN0IFN0cmluZyYgcGF0aCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVh
bUNsaWVudC5oIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1DbGllbnQuaAppbmRleCA5ZDI0YmRm
Li5lMWFlYzUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbUNsaWVudC5oCisr
KyBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtQ2xpZW50LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVi
bGljOgogCiAgICAgLy8gRm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZy4KICAgICB2aXJ0dWFs
IHZvaWQgZGlkU3RhcnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcCgpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBkaWRGaW5pc2goKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChF
eGNlcHRpb25Db2RlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0U2l6ZShsb25nIGxvbmcp
IHsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5jcHAgYi9XZWJD
b3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcAppbmRleCBlNjlkZTI5Li43NDA2M2QzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvRmlsZVN0cmVhbVByb3h5LmNwcApAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKKwor
I2luY2x1ZGUgIkZpbGVTdHJlYW1Qcm94eS5oIgorCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1
ZGUgIkZpbGVTdHJlYW0uaCIKKyNpbmNsdWRlICJGaWxlVGhyZWFkLmgiCisjaW5jbHVkZSAiRmls
ZVRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJHZW5lcmljV29ya2VyVGFzay5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpbGVTdHJlYW1Qcm94eTo6RmlsZVN0cmVhbVByb3h5
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1DbGllbnQqIGNsaWVu
dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAg
ICwgbV9zdHJlYW0oRmlsZVN0cmVhbTo6Y3JlYXRlKHRoaXMpKQoreworICAgIC8vIEhvbGRzIGFu
IGV4dHJhIHJlZiBzbyB0aGF0IHRoZSBpbnN0YW5jZSB3aWxsIG5vdCBnZXQgZGVsZXRlZCB3aGls
ZSB0aGVyZSBjYW4gYmUgYW55IHRhc2tzIG9uIHRoZSBmaWxlIHRocmVhZC4KKyAgICByZWYoKTsK
KyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFt
LmdldCgpLCAmRmlsZVN0cmVhbTo6c3RhcnQpKTsKK30KKworRmlsZVN0cmVhbVByb3h5Ojp+Rmls
ZVN0cmVhbVByb3h5KCkKK3sKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JSZWFk
KEJsb2IqIGJsb2IpCit7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhy
ZWFkVGFzayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkLCBibG9iKSk7
Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpvcGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBw
YXRoKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2so
bV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUsIHBhdGgpKTsKK30KKwor
dm9pZCBGaWxlU3RyZWFtUHJveHk6OmNsb3NlKCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RU
YXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6Y2xv
c2UpKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OnJlYWQoY2hhciogYnVmZmVyLCBpbnQg
bGVuZ3RoKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRh
c2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjpyZWFkLCBidWZmZXIsIGxlbmd0aCkpOwor
fQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6d3JpdGUoQmxvYiogYmxvYiwgbG9uZyBsb25nIHBv
c2l0aW9uLCBpbnQgbGVuZ3RoKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRl
RmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjp3cml0ZSwgYmxvYiwg
cG9zaXRpb24sIGxlbmd0aCkpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6dHJ1bmNhdGUo
bG9uZyBsb25nIHBvc2l0aW9uKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRl
RmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjp0cnVuY2F0ZSwgcG9z
aXRpb24pKTsKK30KKworRmlsZVRocmVhZCogRmlsZVN0cmVhbVByb3h5OjpmaWxlVGhyZWFkKCkK
K3sKKyAgICBBU1NFUlQobV9jb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgQVNTRVJU
KG1fY29udGV4dC0+ZmlsZVRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5maWxlVGhy
ZWFkKCk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpzdG9wKCkKK3sKKyAgICAvLyBDbGVh
ciB0aGUgY2xpZW50IHNvIHRoYXQgd2Ugd29uJ3QgYmUgY2FsbGluZyBjYWxsYmFja3Mgb24gdGhl
IGNsaWVudC4KKyAgICBtX2NsaWVudCA9IDA7CisgICAgZmlsZVRocmVhZCgpLT51bnNjaGVkdWxl
VGFza3MobV9zdHJlYW0uZ2V0KCkpOworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRl
RmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCksICZGaWxlU3RyZWFtOjpzdG9wKSk7Cit9CisK
K3N0YXRpYyB2b2lkIG5vdGlmeUdldFNpemVPbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGxvbmcgbG9uZyBzaXplKQoreworICAgIGlmIChw
cm94eS0+Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkR2V0U2l6ZShzaXpl
KTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmRpZEdldFNpemUobG9uZyBsb25nIHNpemUp
Cit7CisgICAgQVNTRVJUKCFtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2Nv
bnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5R2V0U2l6ZU9uQ29udGV4
dCwgdGhpcywgc2l6ZSkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlSZWFkT25Db250ZXh0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5LCBjb25zdCBjaGFy
KiBkYXRhLCBpbnQgYnl0ZXNSZWFkKQoreworICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCisgICAg
ICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkUmVhZChkYXRhLCBieXRlc1JlYWQpOworfQorCit2b2lk
IEZpbGVTdHJlYW1Qcm94eTo6ZGlkUmVhZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFk
KQoreworICAgIEFTU0VSVCghbV9jb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9j
b250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeVJlYWRPbkNvbnRleHQs
IHRoaXMsIGRhdGEsIGJ5dGVzUmVhZCkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlXcml0ZU9u
Q29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwg
aW50IGJ5dGVzV3JpdHRlbikKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBw
cm94eS0+Y2xpZW50KCktPmRpZFdyaXRlKGJ5dGVzV3JpdHRlbik7Cit9CisKK3ZvaWQgRmlsZVN0
cmVhbVByb3h5OjpkaWRXcml0ZShpbnQgYnl0ZXNXcml0dGVuKQoreworICAgIEFTU0VSVCghbV9j
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVh
dGVDYWxsYmFja1Rhc2soJm5vdGlmeVdyaXRlT25Db250ZXh0LCB0aGlzLCBieXRlc1dyaXR0ZW4p
KTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5U3RhcnRPbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHkpCit7CisgICAgaWYgKHByb3h5LT5jbGll
bnQoKSkKKyAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRTdGFydCgpOworfQorCit2b2lkIEZp
bGVTdHJlYW1Qcm94eTo6ZGlkU3RhcnQoKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0LT5pc0Nv
bnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rh
c2soJm5vdGlmeVN0YXJ0T25Db250ZXh0LCB0aGlzKSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlm
eUZpbmlzaE9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5
KiBwcm94eSkKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xp
ZW50KCktPmRpZEZpbmlzaCgpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlkRmluaXNo
KCkKK3sKKyAgICBBU1NFUlQoIW1fY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1f
Y29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlGaW5pc2hPbkNvbnRl
eHQsIHRoaXMpKTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5RmFpbE9uQ29udGV4dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwgRXhjZXB0aW9uQ29kZSBl
YykKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94eS0+Y2xpZW50KCkt
PmRpZEZhaWwoZWMpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6ZGlkRmFpbChFeGNlcHRp
b25Db2RlIGVjKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7
CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeUZhaWxP
bkNvbnRleHQsIHRoaXMsIGVjKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlcmVmUHJveHlPbkNvbnRl
eHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHkpCit7Cisg
ICAgQVNTRVJUKHByb3h5LT5oYXNPbmVSZWYoKSk7CisgICAgcHJveHktPmRlcmVmKCk7Cit9CisK
K3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpkaWRTdG9wKCkKK3sKKyAgICBtX2NvbnRleHQtPnBvc3RU
YXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGVyZWZQcm94eU9uQ29udGV4dCwgdGhpcykpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9XUklURVIp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmggYi9XZWJDb3JlL2h0
bWwvRmlsZVN0cmVhbVByb3h5LmgKaW5kZXggZTY5ZGUyOS4uZWU0MjZlNSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9odG1sL0ZpbGVTdHJlYW1Qcm94eS5oCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlU3Ry
ZWFtUHJveHkuaApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmlsZVN0cmVhbVByb3h5X2gKKyNk
ZWZpbmUgRmlsZVN0cmVhbVByb3h5X2gKKworI2lmIEVOQUJMRShGSUxFX1JFQURFUikgfHwgRU5B
QkxFKEZJTEVfV1JJVEVSKQorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUg
IkZpbGVTdHJlYW1DbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEJsb2I7CitjbGFzcyBGaWxlU3RyZWFtOworY2xhc3MgRmls
ZVRocmVhZDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTdHJpbmc7CisK
Ky8vIEEgcHJveHkgbW9kdWxlIHRoYXQgY2FsbHMgY29ycmVzcG9uZGluZyBGaWxlU3RyZWFtIG1l
dGhvZHMgb24gdGhlIGZpbGUgdGhyZWFkLiAgTm90ZTogeW91IG11c3QgY2FsbCBzdG9wKCkgZmly
c3QgYW5kIHRoZW4gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIHRvIGRlc3RydWN0IHRoZSBGaWxlU3Ry
ZWFtUHJveHkgaW5zdGFuY2UuCitjbGFzcyBGaWxlU3RyZWFtUHJveHkgOiBwdWJsaWMgUmVmQ291
bnRlZDxGaWxlU3RyZWFtUHJveHk+LCBwdWJsaWMgRmlsZVN0cmVhbUNsaWVudCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZVN0cmVhbVByb3h5PiBjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlU3RyZWFtUHJveHkoY29udGV4dCwgY2xp
ZW50KSk7CisgICAgfQorICAgIHZpcnR1YWwgfkZpbGVTdHJlYW1Qcm94eSgpOworCisgICAgdm9p
ZCBvcGVuRm9yUmVhZChCbG9iKiBibG9iKTsKKyAgICB2b2lkIG9wZW5Gb3JXcml0ZShjb25zdCBT
dHJpbmcmIHBhdGgpOworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lkIHJlYWQoY2hhciogYnVm
ZmVyLCBpbnQgbGVuZ3RoKTsKKyAgICB2b2lkIHdyaXRlKEJsb2IqIGJsb2IsIGxvbmcgbG9uZyBw
b3NpdGlvbiwgaW50IGxlbmd0aCk7CisgICAgdm9pZCB0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRp
b24pOworCisgICAgLy8gU3RvcHMgdGhlIHByb3h5IGFuZCBzY2VkdWxlcyBpdCB0byBiZSBkZXN0
cnVjdGVkLiAgQWxsIHRoZSBwZW5kaW5nIHRhc2tzIHdpbGwgYmUgYWJvcnRlZCBhbmQgdGhlIGZp
bGUgc3RyZWFtIHdpbGwgYmUgY2xvc2VkLgorICAgIC8vIE5vdGU6IHRoZSBjYWxsZXIgc2hvdWxk
IGRlcmVmIHRoZSBpbnN0YW5jZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHN0b3AoKS4KKyAg
ICB2b2lkIHN0b3AoKTsKKworICAgIEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2xpZW50OyB9CisKK3ByaXZhdGU6CisgICAgRmlsZVN0cmVhbVByb3h5KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtQ2xpZW50Kik7CisKKyAgICAvLyBGaWxlU3Ry
ZWFtQ2xpZW50IG1ldGhvZHMuCisgICAgdmlydHVhbCB2b2lkIGRpZEdldFNpemUobG9uZyBsb25n
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZChjb25zdCBjaGFyKiwgaW50KTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkV3JpdGUoaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoRXhjZXB0aW9uQ29kZSk7CisgICAgdmlydHVhbCB2b2lk
IGRpZFN0YXJ0KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFN0b3AoKTsKKworICAgIEZpbGVUaHJl
YWQqIGZpbGVUaHJlYWQoKTsKKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9j
b250ZXh0OworICAgIEZpbGVTdHJlYW1DbGllbnQqIG1fY2xpZW50OworICAgIFJlZlB0cjxGaWxl
U3RyZWFtPiBtX3N0cmVhbTsKKyAgICBib29sIG1fcnVubmluZzsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1JFQURFUikgfHwgRU5BQkxFKEZJ
TEVfV1JJVEVSKQorCisjZW5kaWYgLy8gRmlsZVN0cmVhbVByb3h5X2gKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oIGIvV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWRUYXNr
LmgKaW5kZXggZTY5ZGUyOS4uZjRjNTlkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVU
aHJlYWRUYXNrLmgKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWRUYXNrLmgKQEAgLTAsMCAr
MSwyMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBGaWxlVGhyZWFkVGFza19oCisjZGVmaW5lIEZpbGVUaHJlYWRUYXNr
X2gKKworI2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCisjaW5jbHVkZSAiRmlsZVRocmVh
ZC5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUcmFpdHMgZm9yIHRoZSBUYXNrLgordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEZpbGVUaHJlYWRUYXNrVHJhaXRzIHsKKyAgICB0eXBlZGVmIGNv
bnN0IFQmIFBhcmFtVHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGaWxl
VGhyZWFkVGFza1RyYWl0czxUKj4geworICAgIHR5cGVkZWYgVCogUGFyYW1UeXBlOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZpbGVUaHJlYWRUYXNrVHJhaXRzPFBhc3NSZWZQ
dHI8VD4gPiB7CisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPFQ+IFBhcmFtVHlwZTsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGaWxlVGhyZWFkVGFza1RyYWl0czxQYXNzT3duUHRy
PFQ+ID4geworICAgIHR5cGVkZWYgUGFzc093blB0cjxUPiBQYXJhbVR5cGU7Cit9OworCitjbGFz
cyBGaWxlVGhyZWFkVGFzazAgOiBwdWJsaWMgRmlsZVRocmVhZDo6VGFzayB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiB2b2lkIChGaWxlU3RyZWFtOjoqTWV0aG9kKSgpOworICAgIHR5cGVkZWYgRmls
ZVRocmVhZFRhc2swIEZpbGVUaHJlYWRUYXNrOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8Rmls
ZVRocmVhZFRhc2s+IGNyZWF0ZShGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QpCisg
ICAgeworICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0cmVhbSwgbWV0aG9kKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgRmlsZVRocmVhZFRhc2swKEZpbGVTdHJlYW0qIHN0cmVh
bSwgTWV0aG9kIG1ldGhvZCkKKyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVhbSkKKyAg
ICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0cmVhbSgpLiptX21ldGhvZCkoKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMT4KK2NsYXNzIEZpbGVUaHJlYWRUYXNrMSA6IHB1Ymxp
YyBGaWxlVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKEZpbGVTdHJl
YW06OipNZXRob2QpKE1QMSk7CisgICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazE8UDEsIE1QMT4g
RmlsZVRocmVhZFRhc2s7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0
czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlVGhy
ZWFkVGFzaz4gY3JlYXRlKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0x
IHBhcmFtZXRlcjEpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0
cmVhbSwgbWV0aG9kLCBwYXJhbWV0ZXIxKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmlsZVRo
cmVhZFRhc2sxKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFt
ZXRlcjEpCisgICAgICAgIDogRmlsZVRocmVhZDo6VGFzayhzdHJlYW0pCisgICAgICAgICwgbV9t
ZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAg
KCpzdHJlYW0oKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgor
Y2xhc3MgRmlsZVRocmVhZFRhc2syIDogcHVibGljIEZpbGVUaHJlYWQ6OlRhc2sgeworcHVibGlj
OgorICAgIHR5cGVkZWYgdm9pZCAoRmlsZVN0cmVhbTo6Kk1ldGhvZCkoTVAxLCBNUDIpOworICAg
IHR5cGVkZWYgRmlsZVRocmVhZFRhc2syPFAxLCBNUDEsIFAyLCBNUDI+IEZpbGVUaHJlYWRUYXNr
OworICAgIHR5cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5
cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUgRmlsZVRocmVhZFRhc2tUcmFpdHM8UDI+
OjpQYXJhbVR5cGUgUGFyYW0yOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRh
c2s+IGNyZWF0ZShGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJh
bWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgRmls
ZVRocmVhZFRhc2soc3RyZWFtLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBGaWxlVGhyZWFkVGFzazIoRmlsZVN0cmVhbSogc3RyZWFtLCBN
ZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIpCisgICAg
ICAgIDogRmlsZVRocmVhZDo6VGFzayhzdHJlYW0pCisgICAgICAgICwgbV9tZXRob2QobWV0aG9k
KQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1l
dGVyMihwYXJhbWV0ZXIyKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdHJlYW0oKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVy
MSwgbV9wYXJhbWV0ZXIyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9k
OworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAy
LCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzPgorY2xhc3MgRmlsZVRocmVhZFRhc2szIDogcHVi
bGljIEZpbGVUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoRmlsZVN0
cmVhbTo6Kk1ldGhvZCkoTVAxLCBNUDIsIE1QMyk7CisgICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFz
azM8UDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1QMz4gRmlsZVRocmVhZFRhc2s7CisgICAgdHlwZWRl
ZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7Cisg
ICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQ
YXJhbTI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMz46OlBh
cmFtVHlwZSBQYXJhbTM7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlVGhyZWFkVGFzaz4g
Y3JlYXRlKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRl
cjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICB7CisgICAgICAg
IHJldHVybiBuZXcgRmlsZVRocmVhZFRhc2soc3RyZWFtLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBh
cmFtZXRlcjIsIHBhcmFtZXRlcjMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGaWxlVGhyZWFk
VGFzazMoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVy
MSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgICAgICA6IEZpbGVU
aHJlYWQ6OlRhc2soc3RyZWFtKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAg
LCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1l
dGVyMikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RyZWFt
KCkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1l
dGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJhbWV0ZXIzOworfTsKKwor
UGFzc093blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKKyAgICBG
aWxlU3RyZWFtKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoRmlsZVN0cmVhbTo6Km1ldGhvZCko
KSkKK3sKKyAgICByZXR1cm4gRmlsZVRocmVhZFRhc2swOjpjcmVhdGUoCisgICAgICAgIGNhbGxl
ZSwKKyAgICAgICAgbWV0aG9kKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1l
IE1QMT4KK1Bhc3NPd25QdHI8RmlsZVRocmVhZDo6VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2so
CisgICAgRmlsZVN0cmVhbSogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKEZpbGVTdHJlYW06Oipt
ZXRob2QpKE1QMSksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEpCit7CisgICAgcmV0dXJuIEZp
bGVUaHJlYWRUYXNrMTx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMT46
OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3Nz
VGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+CitQYXNzT3du
UHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAorICAgIEZpbGVTdHJl
YW0qIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChGaWxlU3RyZWFtOjoqbWV0aG9kKShNUDEsIE1Q
MiksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIp
Cit7CisgICAgcmV0dXJuIEZpbGVUaHJlYWRUYXNrMjx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGll
cjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBN
UDI+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBD
cm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhy
ZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAz
LCB0eXBlbmFtZSBNUDM+CitQYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVU
aHJlYWRUYXNrKAorICAgIEZpbGVTdHJlYW0qIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChGaWxl
U3RyZWFtOjoqbWV0aG9kKShNUDEsIE1QMiwgTVAzKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVy
MSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVyMiwKKyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMykK
K3sKKyAgICByZXR1cm4gRmlsZVRocmVhZFRhc2szPHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVy
PFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1Q
MiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDM+OjpjcmVhdGUoCisg
ICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGll
cjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6
Y29weShwYXJhbWV0ZXIyKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBh
cmFtZXRlcjMpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRmls
ZVRocmVhZFRhc2tfaAo=
</data>
<flag name="review"
          id="36862"
          type_id="1"
          status="+"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>