<?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>72066</bug_id>
          
          <creation_ts>2011-11-10 15:24:18 -0800</creation_ts>
          <short_desc>IndexedDB: Close database connections, abort transactions, and terminate requests on stop()</short_desc>
          <delta_ts>2011-12-14 11:21:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>dgrogan</cc>
    
    <cc>hans</cc>
    
    <cc>jochen</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>500341</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-11-10 15:24:18 -0800</bug_when>
    <thetext>IndexedDB: Close database connection on script context destruction to unblock transaction queue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500342</commentid>
    <comment_count>1</comment_count>
      <attachid>114585</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-11-10 15:24:43 -0800</bug_when>
    <thetext>Created attachment 114585
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500347</commentid>
    <comment_count>2</comment_count>
      <attachid>114585</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-11-10 15:35:41 -0800</bug_when>
    <thetext>Comment on attachment 114585
Patch

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

Early feedback appreciated. I&apos;ll see if I can put together a layouttest that does triggers the condition, but I&apos;m not optimistic.

&gt; Source/WebCore/storage/IDBDatabase.cpp:59
&gt; +    , m_closePending(false)

Just a rename - the spec names the internal flag &quot;closePending&quot; with these semantics so we might as well do the same.

&gt; Source/WebCore/storage/IDBDatabase.cpp:177
&gt; +    m_backend-&gt;close(m_databaseCallbacks);

This is moved above the eventQueue work below, to allow for the early exit if the script context is gone.

&gt; Source/WebCore/storage/IDBDatabase.cpp:197
&gt; +

Guard against a callback coming through over IPC during document teardown

&gt; Source/WebCore/storage/IDBDatabase.cpp:218
&gt; +    ASSERT(scriptExecutionContext());

All callers should be checking.

&gt; Source/WebCore/storage/IDBDatabase.cpp:240
&gt; +}

This is the important bit - without this, the back end never gets told the connection is going away, and would never process pending open/setVersion/delete calls

&gt; Source/WebCore/storage/IDBFactory.cpp:53
&gt; +    : m_backend(factory)

Rename, for consistency.

&gt; Source/WebCore/storage/IDBObjectStore.cpp:47
&gt; +    : m_backend(idbObjectStore)

Rename, for consistency. This was the perpetually confusing one.

&gt; Source/WebCore/storage/IDBRequest.cpp:186
&gt;      m_errorCode = error-&gt;code();

Yet another case of defending against an IPC callback occurring during tear-down. Several more follow.

&gt; LayoutTests/storage/indexeddb/transaction-abort-expected.txt:6
&gt; +webkitIndexedDB.open(&apos;transaction-abort3&apos;)

Test naming conventions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500405</commentid>
    <comment_count>3</comment_count>
      <attachid>114585</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-11-10 16:29:36 -0800</bug_when>
    <thetext>Comment on attachment 114585
Patch

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

Thanks for fixing this.

&gt;&gt; Source/WebCore/storage/IDBDatabase.cpp:240
&gt;&gt; +}
&gt; 
&gt; This is the important bit - without this, the back end never gets told the connection is going away, and would never process pending open/setVersion/delete calls

Is there any advantage or disadvantage to putting close in ~IDBDatabase?  I don&apos;t know that either is better or worse, just wondering if you&apos;ve already figured it out.

&gt; Source/WebCore/storage/IDBRequest.cpp:211
&gt; +    if (!scriptExecutionContext())

I suspect that these checks don&apos;t matter much, as enqueueEvent does the same check, but I&apos;m fine with leaving them in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500432</commentid>
    <comment_count>4</comment_count>
      <attachid>114585</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-11-10 17:20:03 -0800</bug_when>
    <thetext>Comment on attachment 114585
Patch

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

&gt;&gt;&gt; Source/WebCore/storage/IDBDatabase.cpp:240
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; This is the important bit - without this, the back end never gets told the connection is going away, and would never process pending open/setVersion/delete calls
&gt; 
&gt; Is there any advantage or disadvantage to putting close in ~IDBDatabase?  I don&apos;t know that either is better or worse, just wondering if you&apos;ve already figured it out.

Hadn&apos;t thought about it, I&apos;ll compare. (I noticed when observing lifetimes that destructors in renderer processes often didn&apos;t run on shutdown, but that could have been how I was observing them.)

&gt;&gt; Source/WebCore/storage/IDBRequest.cpp:211
&gt;&gt; +    if (!scriptExecutionContext())
&gt; 
&gt; I suspect that these checks don&apos;t matter much, as enqueueEvent does the same check, but I&apos;m fine with leaving them in.

On further thought, I&apos;m going to back most of them out since they mutate state that is checked by assertions, which is good to keep. But I did notice...

&gt; Source/WebCore/storage/IDBRequest.cpp:246
&gt;  }

IDBRequest::onSuccess(PassRefPtr&lt;IDBTransactionBackendInterface&gt; prpBackend) which ALREADY had an early exit could be a source of problems. IPC is delivering a backend transaction pointer which is getting dropped on the floor by the early exit. I believe we&apos;ll want to call abort on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504046</commentid>
    <comment_count>5</comment_count>
      <attachid>115407</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-11-16 10:46:09 -0800</bug_when>
    <thetext>Created attachment 115407
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504057</commentid>
    <comment_count>6</comment_count>
      <attachid>115407</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-11-16 11:00:47 -0800</bug_when>
    <thetext>Comment on attachment 115407
Patch

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

&gt; Source/WebCore/dom/DocumentEventQueue.cpp:73
&gt; +bool DocumentEventQueue::enqueueEvent(PassRefPtr&lt;Event&gt; event)

IDBRequest would keep its own list of queued events, but if it was doing so after the EventQueue was closed these would be out of sync and later assertions would fail. Return a value here so callers can determine if the event actually was queued.

&gt; Source/WebCore/storage/IDBDatabase.cpp:59
&gt; +    , m_closePending(false)

Rename to match spec semantics.

&gt; Source/WebCore/storage/IDBDatabase.cpp:69
&gt; +    close();

Since objects aren&apos;t often collected until well after the document is stopped, this is probably not necessary.

&gt; Source/WebCore/storage/IDBDatabase.cpp:178
&gt; +    m_backend-&gt;close(m_databaseCallbacks);

Re-order so that internal close() calls still close the backend even if stopped.

&gt; Source/WebCore/storage/IDBFactory.cpp:53
&gt; +    : m_backend(factory)

Rename backend pointers, for consistency.

&gt; Source/WebCore/storage/IDBRequest.cpp:58
&gt; +    , m_stopped(false)

Track stopped (= document is stopped) vs. finished (the IDBRequest has been fulfilled)

&gt; Source/WebCore/storage/IDBRequest.cpp:244
&gt; +        backend-&gt;abort();

If the backend has created a transaction and told us about it but we&apos;re stopped (so can&apos;t process it), we turn around and immediately abort it.

&gt; Source/WebCore/storage/IDBTransaction.cpp:54
&gt; +    , m_stopped(false)

IDBTransaction likewise needs to distinguish between stopped (Document-centric) vs. finished (IDB-centric)

&gt; Source/WebCore/storage/IDBTransaction.cpp:190
&gt; +void IDBTransaction::stop()

This looks scary but the change is: contextDestroyed is called only when the whole document/context/shebang is being garbage collected, which is deferred for quite some time in practice. We MUST abort the backend immediately on stop(). Tracing through, ActiveDOMObjects are not destructed - the backend abort() loops back into the frontend (this) onAbort() which aborts the IDBRequests but they don&apos;t get destructed.

&gt; Source/WebCore/storage/IDBTransactionBackendImpl.cpp:133
&gt; +        m_callbacks-&gt;onAbort();

It&apos;s possible that the frontend (represented here by m_callbacks) was never actually hooked up because it died before the transaction creation completed. The abort() call here comes through via the browser&apos;s dispatch mechanism cleaning up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505418</commentid>
    <comment_count>7</comment_count>
      <attachid>115407</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-11-17 18:41:13 -0800</bug_when>
    <thetext>Comment on attachment 115407
Patch

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

LGTM

&gt; Source/WebCore/storage/IDBRequest.cpp:153
&gt;          ASSERT(m_readyState == DONE);

Was this getting hit when the m_stopped || !scriptExecutionContext() check was below?

&gt; Source/WebCore/storage/IDBTransaction.cpp:-161
&gt; -    ASSERT(!m_finished);

hilarious</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505434</commentid>
    <comment_count>8</comment_count>
      <attachid>115407</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-11-17 19:44:23 -0800</bug_when>
    <thetext>Comment on attachment 115407
Patch

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

&gt;&gt; Source/WebCore/storage/IDBRequest.cpp:153
&gt;&gt;          ASSERT(m_readyState == DONE);
&gt; 
&gt; Was this getting hit when the m_stopped || !scriptExecutionContext() check was below?

Yes, but only because of the new changes - when a stop() occurs while m_readyState is LOADING the new code puts the request into the EarlyDeath state. When the IDBTransaction that&apos;s the container for this IDBRequest gets its stop() call it will abort() this request, which would trigger the assert.

I considered adding additional states to handle &quot;death before loading&quot;, &quot;death before done&quot;, etc but EarlyDeath seemed close enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505724</commentid>
    <comment_count>9</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-11-18 06:07:08 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 115407 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115407&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/storage/IDBRequest.cpp:153
&gt; &gt;&gt;          ASSERT(m_readyState == DONE);
&gt; &gt; 
&gt; &gt; Was this getting hit when the m_stopped || !scriptExecutionContext() check was below?
&gt; 
&gt; Yes, but only because of the new changes - when a stop() occurs while m_readyState is LOADING the new code puts the request into the EarlyDeath state. When the IDBTransaction that&apos;s the container for this IDBRequest gets its stop() call it will abort() this request, which would trigger the assert.

Got it.

&gt; I considered adding additional states to handle &quot;death before loading&quot;, &quot;death before done&quot;, etc but EarlyDeath seemed close enough.

Agreed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505855</commentid>
    <comment_count>10</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-11-18 09:26:59 -0800</bug_when>
    <thetext>tony@ can you take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505915</commentid>
    <comment_count>11</comment_count>
      <attachid>115407</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-11-18 11:00:23 -0800</bug_when>
    <thetext>Comment on attachment 115407
Patch

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

OVERRIDE is new in webkit.  Now is as good a time as any to start using it.  r- since the cq will reject the ChangeLog anyway.

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

You need to remove the OOPS! or the cq won&apos;t land this.  Please add a test or explain why this isn&apos;t testable.

&gt; Source/WebCore/dom/DocumentEventQueue.h:55
&gt; +    virtual bool enqueueEvent(PassRefPtr&lt;Event&gt;);

Nit: Can you add OVERRIDE here?

&gt; Source/WebCore/storage/IDBDatabase.cpp:237
&gt; +

Nit: Did you mean to add this blank line?

&gt;&gt; Source/WebCore/storage/IDBRequest.cpp:58
&gt;&gt; +    , m_stopped(false)
&gt; 
&gt; Track stopped (= document is stopped) vs. finished (the IDBRequest has been fulfilled)

Nit: Can we name the variables to make this more clear?  E.g., m_documentStopped and m_requestFulfilled.

&gt; Source/WebCore/storage/IDBRequest.h:91
&gt;      virtual bool hasPendingActivity() const;
&gt; +    virtual void stop();

OVERRIDE

&gt; Source/WebCore/storage/IDBTransaction.h:85
&gt;      virtual bool hasPendingActivity() const;
&gt;      virtual bool canSuspend() const;
&gt; -    virtual void contextDestroyed();
&gt; +    virtual void stop();

OVERRIDE

&gt; Source/WebCore/workers/WorkerEventQueue.h:49
&gt; +    virtual bool enqueueEvent(PassRefPtr&lt;Event&gt;);

Nit: OVERRIDE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506218</commentid>
    <comment_count>12</comment_count>
      <attachid>115910</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-11-18 16:56:57 -0800</bug_when>
    <thetext>Created attachment 115910
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506226</commentid>
    <comment_count>13</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-11-18 17:10:28 -0800</bug_when>
    <thetext>I&apos;m still pondering testing possibilities here. With mock backends and execution contexts we should be able to push the sensitive objects (IDBDatabase, IDBTransaction, IDBRequest) through various stages and assert correct behavior in all cases. I&apos;ve filed https://bugs.webkit.org/show_bug.cgi?id=72777 to track this. We have some substantial refactoring planned in this area too which will change the division of labor between front and back-ends, and testability should be designed in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507217</commentid>
    <comment_count>14</comment_count>
      <attachid>115910</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-21 14:34:45 -0800</bug_when>
    <thetext>Comment on attachment 115910
Patch

Clearing flags on attachment: 115910

Committed r100959: &lt;http://trac.webkit.org/changeset/100959&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507218</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-21 14:34:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114585</attachid>
            <date>2011-11-10 15:24:43 -0800</date>
            <delta_ts>2011-11-16 10:46:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72066-20111110152442.patch</filename>
            <type>text/plain</type>
            <size>21137</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk2NzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxNjhmZGI5NDk1MzcwNjQ2
MzAwNjNkNWUyM2YxYmVkNmRkNjE0OTRiLi40YzUyYWY1ZDZkYWU0Nzc5ZjYzNzgzODIxNjdlYWQw
MmE1OGI2ZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMTEtMTAgIEpvc2h1
YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENsb3Nl
IGRhdGFiYXNlIGNvbm5lY3Rpb24gb24gc2NyaXB0IGNvbnRleHQgZGVzdHJ1Y3Rpb24gdG8gdW5i
bG9jayB0cmFuc2FjdGlvbiBxdWV1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzIwNjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2U6OklEQkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlOjp0cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6Y2xvc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9uVmVyc2lvbkNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZW5xdWV1ZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlOjpjb250ZXh0RGVzdHJveWVkKToKKyAgICAgICAgKiBzdG9yYWdlL0lE
QkRhdGFiYXNlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkZhY3Rvcnk6OklEQkZhY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5
OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKToK
KyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9i
amVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpJREJPYmpl
Y3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6bmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6a2V5UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjphZGQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpj
cmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKiBzdG9yYWdl
L0lEQk9iamVjdFN0b3JlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJSZXF1ZXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Om9uRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6
SURCUmVxdWVzdDo6b25TdWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Om9u
U3VjY2Vzc1dpdGhDb250aW51YXRpb24pOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQWJvcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUpOgorICAgICAgICAqIHN0
b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQpOgorCiAyMDExLTExLTA5ICBLZW50YXJv
IEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNYWtlIFtDYW5CZUNvbnN0
cnVjdGVkXSBJREwgcmVkdW5kYW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3Bw
CmluZGV4IDg2MWRjYThiNjI4MjNmMjRiOWE4MTJlZGJkYzE1ZWQ4YWU5OWUwZmIuLmYyNjU5NDQ2
YmQwNGVjYTM2ZjcxMGE4MDdlYmI0Y2M5NGUxMmU4NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2UuY3BwCkBAIC01Niw3ICs1Niw3IEBAIFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+
IElEQkRhdGFiYXNlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
CiBJREJEYXRhYmFzZTo6SURCRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCiAgICAg
OiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKICAgICAsIG1fYmFja2VuZChiYWNrZW5k
KQotICAgICwgbV9ub05ld1RyYW5zYWN0aW9ucyhmYWxzZSkKKyAgICAsIG1fY2xvc2VQZW5kaW5n
KGZhbHNlKQogICAgICwgbV9zdG9wcGVkKGZhbHNlKQogewogICAgIC8vIFdlIHBhc3MgYSByZWZl
cmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgpAQCAtMTQ5LDcg
KzE0OSw3IEBAIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFuc2Fj
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250CiAgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0g
ICAgaWYgKG1fbm9OZXdUcmFuc2FjdGlvbnMpIHsKKyAgICBpZiAobV9jbG9zZVBlbmRpbmcpIHsK
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xNzAsNyArMTcwLDEzIEBAIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250CiAKIHZvaWQgSURCRGF0YWJhc2U6OmNsb3NlKCkKIHsKLSAgICBpZiAobV9ub05l
d1RyYW5zYWN0aW9ucykKKyAgICBpZiAobV9jbG9zZVBlbmRpbmcpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY2xvc2VQZW5kaW5nID0gdHJ1ZTsKKyAgICBtX2JhY2tlbmQtPmNsb3NlKG1fZGF0
YWJhc2VDYWxsYmFja3MpOworCisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKQEAgLTE4MiwxMyArMTg4LDEzIEBAIHZvaWQg
SURCRGF0YWJhc2U6OmNsb3NlKCkKICAgICAgICAgYm9vbCByZW1vdmVkID0gZXZlbnRRdWV1ZS0+
Y2FuY2VsRXZlbnQobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSk7CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAgICAgfQotCi0gICAgbV9ub05ld1RyYW5zYWN0aW9u
cyA9IHRydWU7Ci0gICAgbV9iYWNrZW5kLT5jbG9zZShtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKIH0K
IAogdm9pZCBJREJEYXRhYmFzZTo6b25WZXJzaW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYgdmVyc2lv
bikKIHsKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKHZlcnNp
b24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKIH0KIApAQCAtMjA5LDYgKzIx
NSw3IEBAIHZvaWQgSURCRGF0YWJhc2U6Om9wZW4oKQogCiB2b2lkIElEQkRhdGFiYXNlOjplbnF1
ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiB7CisgICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSA9IHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhp
cyk7CiAgICAgZXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KGV2ZW50LmdldCgpKTsKQEAgLTIyNSw2
ICsyMzIsMTMgQEAgYm9vbCBJREJEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCkKICAgICByZXR1cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQu
Z2V0KCkpOwogfQogCisKK3ZvaWQgSURCRGF0YWJhc2U6OmNvbnRleHREZXN0cm95ZWQoKQorewor
ICAgIEFjdGl2ZURPTU9iamVjdDo6Y29udGV4dERlc3Ryb3llZCgpOworICAgIGNsb3NlKCk7Cit9
CisKIHZvaWQgSURCRGF0YWJhc2U6OnN0b3AoKQogewogICAgIC8vIFN0b3AgZmlyZXMgYXQgYSBk
ZXRlcm1pbmlzdGljIHRpbWUsIHNvIHdlIG5lZWQgdG8gY2FsbCBjbG9zZSBpbiBpdC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaAppbmRleCA1MjBlMDEzZjk5YTBhOGFkZmU1OWVmNzZi
ZTY2NzQ5ZmE0NTZmOGNhLi41NTFlN2I0OTMxMzM4MWI2NDEwNjlkZTMzMDc3ZDY2YzhmZDMxODU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5oCkBAIC03OSw2ICs3OSw3IEBAIHB1
YmxpYzoKIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdAogICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5k
aW5nQWN0aXZpdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgp
OwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKICAgICAvLyBFdmVudFRhcmdldApAQCAtMTA1
LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZT4gbV9iYWNrZW5kOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV92ZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb247CiAKLSAgICBib29sIG1fbm9OZXdUcmFuc2FjdGlvbnM7CisgICAgYm9v
bCBtX2Nsb3NlUGVuZGluZzsKICAgICBib29sIG1fc3RvcHBlZDsKIAogICAgIEV2ZW50VGFyZ2V0
RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3Bw
CmluZGV4IDA1OGM0ZDNlNWFlZDk2ZGQ3NWZlN2EyMzQzMTg1NTI5NjAyZTk3OTQuLmY1NGNmNzFl
YjM4NjBlMzBlOWMwMzMwNDc0YmM1MjgxYzc3ZTVjYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5LmNwcApAQCAtNTAsNyArNTAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJ
REJGYWN0b3J5OjpJREJGYWN0b3J5KElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5
KQotICAgIDogbV9mYWN0b3J5QmFja2VuZChmYWN0b3J5KQorICAgIDogbV9iYWNrZW5kKGZhY3Rv
cnkpCiB7CiAgICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUg
aXQgY2FuIGJlIGFkb3B0ZWQuCiAgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CkBAIC03
Myw3ICs3Myw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6Z2V0RGF0YWJh
c2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250CiAKICAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55OjpjcmVh
dGUodGhpcyksIDApOwogICAgIEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVu
dC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsKLSAgICBtX2ZhY3RvcnlCYWNrZW5k
LT5nZXREYXRhYmFzZU5hbWVzKHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBk
b2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkp
OworICAgIG1fYmFja2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhyZXF1ZXN0LCBkb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWRE
QkRhdGFiYXNlUGF0aCgpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApAQCAtOTUsNyArOTUs
NyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgUwogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlKHRoaXMp
LCAwKTsKICAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2Uo
KS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAgbV9mYWN0b3J5QmFja2VuZC0+b3Blbihu
YW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1l
KCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsKKyAgICBtX2JhY2tl
bmQtPm9wZW4obmFtZSwgcmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3Vt
ZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSk7CiAg
ICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKQEAgLTExNyw3ICsxMTcsNyBAQCBQYXNzUmVmUHRyPElE
QlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBJREJGYWN0b3J5OjpkZWxldGVEYXRhYmFzZShTY3JpcHRF
eGVjdXRpb25DbwogCiAgICAgUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55OjpjcmVh
dGVOdWxsKCksICIiKTsKICAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1l
bnQtPnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAgbV9mYWN0b3J5QmFja2Vu
ZC0+ZGVsZXRlRGF0YWJhc2UobmFtZSwgcmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBh
dGgoKSk7CisgICAgbV9iYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCByZXF1ZXN0LCBkb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3Mt
PmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAppbmRleCA0MTczNjJhMjU0ZTgwOWJhOTRmYmZlZTdj
MTM2YjYxZmJiMzVlMDg4Li40NjExY2I2YzRmZTgzOTkwYjQ3MjRhNDNiZjA5YzlhNWE5NWQ4ODhk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaApAQCAtNjYsNyArNjYsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIElEQkZhY3RvcnkoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uq
KTsKIAotICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gbV9mYWN0b3J5QmFj
a2VuZDsKKyAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJP
YmplY3RTdG9yZS5jcHAKaW5kZXggYWY0NWVkNGIxZGMwN2IwMjkxM2RlYzc5MTA4NTkwODk0MzYy
YzMzNS4uMTI0YTAyM2ZmN2E5YmYyZWRiMzQzOTYwYTJlYTI4MzNmY2NlZTU0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTQ0LDEwICs0NCwxMCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGVmYXVsdERp
cmVjdGlvbiA9IElEQkN1cnNvcjo6TkVYVDsKIAogSURCT2JqZWN0U3RvcmU6OklEQk9iamVjdFN0
b3JlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBpZGJPYmplY3RT
dG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIDogbV9vYmplY3RTdG9yZShp
ZGJPYmplY3RTdG9yZSkKKyAgICA6IG1fYmFja2VuZChpZGJPYmplY3RTdG9yZSkKICAgICAsIG1f
dHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmUpOwor
ICAgIEFTU0VSVChtX2JhY2tlbmQpOwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKICAgICAv
LyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRv
cHRlZC4KICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKQEAgLTU1LDE3ICs1NSwxNyBA
QCBJREJPYmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IGlkYk9iagogCiBTdHJpbmcgSURCT2JqZWN0U3RvcmU6Om5hbWUo
KSBjb25zdAogewotICAgIHJldHVybiBtX29iamVjdFN0b3JlLT5uYW1lKCk7CisgICAgcmV0dXJu
IG1fYmFja2VuZC0+bmFtZSgpOwogfQogCiBTdHJpbmcgSURCT2JqZWN0U3RvcmU6OmtleVBhdGgo
KSBjb25zdAogewotICAgIHJldHVybiBtX29iamVjdFN0b3JlLT5rZXlQYXRoKCk7CisgICAgcmV0
dXJuIG1fYmFja2VuZC0+a2V5UGF0aCgpOwogfQogCiBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9vYmpl
Y3RTdG9yZS0+aW5kZXhOYW1lcygpOworICAgIHJldHVybiBtX2JhY2tlbmQtPmluZGV4TmFtZXMo
KTsKIH0KIAogSURCVHJhbnNhY3Rpb24qIElEQk9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbigpIGNv
bnN0CkBAIC04MSw3ICs4MSw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzCiAgICAgfQogCiAg
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fb2Jq
ZWN0U3RvcmUtPmdldChrZXksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMp
OworICAgIG1fYmFja2VuZC0+Z2V0KGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2Vu
ZCgpLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRo
KCk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtOTcsNyArOTcsNyBAQCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzcwogICAgIH0KIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVx
dWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9u
LmdldCgpKTsKLSAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPbmx5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNr
ZW5kKCksIGVjKTsKKyAgICBtX2JhY2tlbmQtPnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9ubHksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tl
bmQoKSwgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0
aCgpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTExMyw3ICsxMTMsNyBAQCBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzcwogICAgIH0KIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURC
UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0
aW9uLmdldCgpKTsKLSAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPclVwZGF0ZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlv
bi0+YmFja2VuZCgpLCBlYyk7CisgICAgbV9iYWNrZW5kLT5wdXQodmFsdWUsIGtleSwgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPclVwZGF0ZSwgcmVxdWVzdCwgbV90cmFuc2Fj
dGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3QtPm1h
cmtFYXJseURlYXRoKCk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTI5LDcgKzEyOSw3IEBAIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvCiAgICAgfQogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fb2JqZWN0U3RvcmUtPmRlbGV0ZUZ1bmN0aW9u
KGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgbV9iYWNr
ZW5kLT5kZWxldGVGdW5jdGlvbihrZXksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQo
KSwgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgp
OwogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MCw3ICsxNDAsNyBAQCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjbwogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
UmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
SURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fb2JqZWN0
U3RvcmUtPmNsZWFyKHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAg
IG1fYmFja2VuZC0+Y2xlYXIocmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7
CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMTU4LDcgKzE1OCw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElE
Qk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
CiAgICAgYm9vbCB1bmlxdWUgPSBmYWxzZTsKICAgICBvcHRpb25zLmdldCgidW5pcXVlIiwgdW5p
cXVlKTsKIAotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gbV9v
YmplY3RTdG9yZS0+Y3JlYXRlSW5kZXgobmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtX3RyYW5zYWN0
aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
PiBpbmRleCA9IG1fYmFja2VuZC0+Y3JlYXRlSW5kZXgobmFtZSwga2V5UGF0aCwgdW5pcXVlLCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBBU1NFUlQoIWluZGV4ICE9ICFlYyk7
IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBl
eGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCiAgICAgaWYgKCFpbmRleCkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0xNjcsNyArMTY3LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2Jq
ZWN0U3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW4KIAog
UGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZElu
dGVyZmFjZT4gaW5kZXggPSBtX29iamVjdFN0b3JlLT5pbmRleChuYW1lLCBlYyk7CisgICAgUmVm
UHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBtX2JhY2tlbmQtPmluZGV4KG5h
bWUsIGVjKTsKICAgICBBU1NFUlQoIWluZGV4ICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBnZXQg
YW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZp
Y2UgdmVyc2EuCiAgICAgaWYgKCFpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzYsNyAr
MTc2LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0
IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMKIAogdm9pZCBJREJPYmplY3RTdG9yZTo6
ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAg
ICBtX29iamVjdFN0b3JlLT5kZWxldGVJbmRleChuYW1lLCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5k
KCksIGVjKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZUluZGV4KG5hbWUsIG1fdHJhbnNhY3Rpb24t
PmJhY2tlbmQoKSwgZWMpOwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIEV4Y2VwdGlv
bkNvZGUmIGVjKQpAQCAtMTg5LDcgKzE4OSw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4CiAK
ICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250
ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgcmVx
dWVzdC0+c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9y
ZUN1cnNvcik7Ci0gICAgbV9vYmplY3RTdG9yZS0+b3BlbkN1cnNvcihyYW5nZSwgZGlyZWN0aW9u
LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBtX2JhY2tlbmQt
Pm9wZW5DdXJzb3IocmFuZ2UsIGRpcmVjdGlvbiwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFj
a2VuZCgpLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURl
YXRoKCk7CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RT
dG9yZS5oCmluZGV4IDE0NjU4YWRjNmJhYmJmZTJjNGM2ZjZjZjU0OWIyNTMxNmRjNWFiMzQuLjli
NWFhNmIyZDNmNTM3MzFiYzYxNjU5Yjk2NTZjMzYzNDliY2YyNmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQk9iamVjdFN0b3JlLmgKQEAgLTgzLDcgKzgzLDcgQEAgcHJpdmF0ZToKICAgICBJ
REJPYmplY3RTdG9yZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4s
IElEQlRyYW5zYWN0aW9uKik7CiAgICAgdm9pZCByZW1vdmVUcmFuc2FjdGlvbkZyb21QZW5kaW5n
TGlzdCgpOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gbV9v
YmplY3RTdG9yZTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBt
X2JhY2tlbmQ7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKaW5kZXggY2NkMWI0MGIxZDZhNGY1
NzJhYjJkNWU5ZWMzMmU2NzY3NmZlNWJiMS4uNzk4ZDc3NTY0NzNhMjM0MTAyNTYzZDY1YjNjY2Nj
NzgwNjZkNTc2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCkBAIC0xODAs
NiArMTgwLDkgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJz
b3I+IGN1cnNvcikKIHZvaWQgSURCUmVxdWVzdDo6b25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+IGVycm9yKQogewogICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1l
c3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9lcnJvckNvZGUgPSBlcnJvci0+Y29k
ZSgpOwogICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3ItPm1lc3NhZ2UoKTsKICAgICBtX2N1cnNv
ci5jbGVhcigpOwpAQCAtMTk0LDYgKzE5Nyw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50PiBj
cmVhdGVTdWNjZXNzRXZlbnQoKQogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxET01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KQogewogICAgIEFTU0VSVCghbV9lcnJvckNv
ZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKKyAgICBpZiAoIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9yZXN1bHQg
PSBJREJBbnk6OmNyZWF0ZShkb21TdHJpbmdMaXN0KTsKICAgICBlbnF1ZXVlRXZlbnQoY3JlYXRl
U3VjY2Vzc0V2ZW50KCkpOwogfQpAQCAtMjAyLDYgKzIwOCw4IEBAIHZvaWQgSURCUmVxdWVzdDo6
b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkK
IHsKICAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYm
ICFtX3Jlc3VsdCk7CiAgICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSk7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNv
cjsKICAgICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Oklu
ZGV4S2V5Q3Vyc29yKQpAQCAtMjE3LDYgKzIyNSw5IEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNj
ZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKIHZvaWQg
SURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlPiBiYWNrZW5kKQogewogICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3Nh
Z2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRh
YmFzZSA9IElEQkRhdGFiYXNlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBiYWNr
ZW5kKTsKICAgICBpZGJEYXRhYmFzZS0+b3BlbigpOwogCkBAIC0yMjcsNiArMjM4LDkgQEAgdm9p
ZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2U+IGJhY2tlbmQpCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElE
QktleT4gaWRiS2V5KQogewogICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3Nh
Z2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShp
ZGJLZXkpOwogICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7CiB9CkBAIC0y
NTUsNiArMjY5LDkgQEAgdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHBycEJhY2tlbmQKIHZvaWQgSURCUmVxdWVzdDo6
b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2Ny
aXB0VmFsdWUpCiB7CiAgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5p
c051bGwoKSAmJiAhbV9yZXN1bHQpOworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKHNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSk7CiAgICAgbV9jdXJzb3IuY2xlYXIoKTsKICAgICBlbnF1ZXVlRXZl
bnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwpAQCAtMjY0LDYgKzI4MSw4IEBAIHZvaWQgSURCUmVx
dWVzdDo6b25TdWNjZXNzV2l0aENvbnRpbnVhdGlvbigpCiB7CiAgICAgQVNTRVJUKCFtX2Vycm9y
Q29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQpOwogICAgIEFTU0VS
VChtX2N1cnNvcik7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAg
IHJldHVybjsKIAogICAgIHNldFJlc3VsdEN1cnNvcihtX2N1cnNvciwgbV9jdXJzb3JUeXBlKTsK
ICAgICBtX2N1cnNvci5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0
aW9uLmNwcAppbmRleCA5YTVkNjcyOGNhMmEzNWViODdhNjYyZTk1MjA1NWEzYmEwODMyOGI3Li41
OGU3ZTk0YTJjYjNkNTQ2ZDZmMGZkNTBmNDA3ZjE3YzNmMzA1ODVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtMTI0LDYgKzEyNCw5IEBAIHZvaWQgSURC
VHJhbnNhY3Rpb246Om9uQWJvcnQoKQogICAgIGlmIChtX21vZGUgPT0gSURCVHJhbnNhY3Rpb246
OlZFUlNJT05fQ0hBTkdFKQogICAgICAgICBtX2RhdGFiYXNlLT5jbGVhclZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbih0aGlzKTsKIAorICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuYWJvcnRFdmVudCwgdHJ1ZSwgZmFsc2UpKTsKIH0KIApAQCAtMTMyLDYgKzEzNSw5IEBA
IHZvaWQgSURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUoKQogICAgIGlmIChtX21vZGUgPT0gSURC
VHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKQogICAgICAgICBtX2RhdGFiYXNlLT5jbGVhclZl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbih0aGlzKTsKIAorICAgIGlmICghc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
Y3BwCmluZGV4IDhhMTIyNjRhYzc2MDkzYTEyMWI5ZGRiYzMxODNmYjA5MTYxOGUwYzIuLmI3ZWQw
MDc4NWE2OTIxN2RkZDZjNjQyYTJmZjhhYjU3MjcxZDVjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtMTgzLDYg
KzE4Myw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKICAgICAv
LyBhbGl2ZSB3aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRob2QuCiAgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHNlbGYodGhpcyk7CiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVu
bmluZyk7CisgICAgQVNTRVJUKG1fdGFza1F1ZXVlLmlzRW1wdHkoKSk7CiAKICAgICBtX3N0YXRl
ID0gRmluaXNoZWQ7CiAgICAgY2xvc2VPcGVuQ3Vyc29ycygpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGViYzdmNTE5MmNj
ZWQ5OGI3NjhmNmUzMWY4Y2ZiZWFkZTk4ZGZmZjQuLmE3ZTljNjkxZDhjNmNjYTU2OTQxYTE4ZDdh
YWRlMjA4ZDJhMzE3NGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0xMS0xMCAgSm9zaHVh
IEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogQ2xvc2Ug
ZGF0YWJhc2UgY29ubmVjdGlvbiBvbiBzY3JpcHQgY29udGV4dCBkZXN0cnVjdGlvbiB0byB1bmJs
b2NrIHRyYW5zYWN0aW9uIHF1ZXVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MjA2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYWJvcnQtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWFib3J0Lmh0
bWw6CisKIDIwMTEtMTEtMDkgIFl1dGEgS2l0YW11cmEgIDx5dXRha0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW0Nocm9taXVtXSBVbnJldmlld2VkLCByZW1vdmUgaW5jb3JyZWN0IHBpeGVsIGlt
YWdlIGZvciByZWxhdGl2ZS1zaXplZC1kb2N1bWVudC1zY3JvbGxiYXJzLnN2Zy4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWFib3J0LWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWFib3J0
LWV4cGVjdGVkLnR4dAppbmRleCBiMjA4OWUwOTM5MjEyN2IwYTQzODViODczMDQ1YmRhNWIxYmQ0
MjQxLi4wYWRjNDhiZWM2ODkxZGMxZTlhOGQ3OGE0NzMwMjgxYjdmNDgwYTY3IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1hYm9ydC1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYWJv
cnQtZXhwZWN0ZWQudHh0CkBAIC0zLDcgKzMsNyBAQCBUZXN0IHRyYW5zYWN0aW9uIGFib3J0cyBz
ZW5kIHRoZSBwcm9wZXIgb25hYm9ydCBtZXNzYWdlcy4uCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCiAKIAotd2Via2l0SW5kZXhlZERCLm9wZW4oJ25hbWUnKQord2Via2l0SW5kZXhlZERCLm9w
ZW4oJ3RyYW5zYWN0aW9uLWFib3J0MycpCiBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKIGRiLnNl
dFZlcnNpb24oJ25ldyB2ZXJzaW9uJykKIHNldFZlcnNpb25TdWNjZXNzKCk6CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1hYm9ydC5odG1sIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYWJvcnQuaHRtbAppbmRl
eCAxYjRhNTYzNTY0ZGM1ZjdjMjM4ZWQ2ZDZiODEyMDgxM2VhYzFmMDY5Li5kNjZjNzVjOWYzN2Zm
ZjYyMjM5NjlhMzBjODMyMDcyMDkwOWRhMGQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1hYm9ydC5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWFib3J0Lmh0bWwKQEAgLTE0LDcgKzE0LDcgQEAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKIAogZnVuY3Rpb24gdGVzdCgpCiB7Ci0g
ICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coIndlYmtpdEluZGV4ZWREQi5vcGVuKCduYW1lJykiKTsK
KyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygid2Via2l0SW5kZXhlZERCLm9wZW4oJ3RyYW5zYWN0
aW9uLWFib3J0MycpIik7CiAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBzZXRWZXJzaW9uOwogICAg
IHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115407</attachid>
            <date>2011-11-16 10:46:09 -0800</date>
            <delta_ts>2011-11-18 16:56:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72066-20111116104608.patch</filename>
            <type>text/plain</type>
            <size>29033</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk5NTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNzM4YjJkY2YyYTMyM2Ex
OGJjY2E2NGU5MzljYTZhOWYwZDRlNDkwLi5jNTU1Y2JhZjhhODViMjQyZWFjMTJjMTIyNzA3ZjFi
OTU3Mzk3ZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTEtMTEtMTYgIEpvc2h1
YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENsb3Nl
IGRhdGFiYXNlIGNvbm5lY3Rpb24gb24gc2NyaXB0IGNvbnRleHQgZGVzdHJ1Y3Rpb24gdG8gdW5i
bG9jayB0cmFuc2FjdGlvbiBxdWV1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzIwNjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGRvbS9Eb2N1
bWVudEV2ZW50UXVldWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRFdmVudFF1ZXVl
OjplbnF1ZXVlRXZlbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudEV2ZW50UXVldWUuaDoKKyAg
ICAgICAgKiBkb20vRXZlbnRRdWV1ZS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OklEQkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjp+SURCRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6b25WZXJzaW9uQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjplbnF1ZXVlRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnN0b3ApOgorICAgICAgICAqIHN0b3JhZ2UvSURC
RGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCRmFjdG9yeTo6SURCRmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJG
YWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6
Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UpOgor
ICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OklEQk9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpuYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjprZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmFkZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNy
ZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6SURCUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJSZXF1ZXN0OjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1
Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25TdWNjZXNzV2l0aENvbnRp
bnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzdG9wKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQlJlcXVlc3Qu
aDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
Om9uQWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246OmVucXVldWVFdmVudCk6CisgICAgICAgICogc3RvcmFnZS9JREJUcmFu
c2FjdGlvbi5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQpOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQpOgorICAgICAgICAqIHdvcmtlcnMvV29y
a2VyRXZlbnRRdWV1ZS5oOgorCiAyMDExLTExLTExICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtjaHJvbWl1bV0gbGlzdCBk
ZWRpY2F0ZWQgd29ya2VycyBpbiBjYXNlIGluc3BlY3RvciBvcGVuZWQgcG9zdC13b3JrZXIgY3Jl
YXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuY3BwCmluZGV4IDdl
ZGYyNGY4OGE2NjQ1YmU2ZGI5MmJjNmRjNTRiMTgyNDc3YzA5YzUuLjMxMDIzZTI4ZDMxMWVkYzFm
ODEyNDA4NzNhODgyN2YzMzFlOGJhZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudEV2ZW50UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2
ZW50UXVldWUuY3BwCkBAIC03MCwxMCArNzAsMTAgQEAgRG9jdW1lbnRFdmVudFF1ZXVlOjp+RG9j
dW1lbnRFdmVudFF1ZXVlKCkKIHsKIH0KIAotdm9pZCBEb2N1bWVudEV2ZW50UXVldWU6OmVucXVl
dWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgRG9jdW1lbnRFdmVudFF1ZXVl
OjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiB7CiAgICAgaWYgKG1faXND
bG9zZWQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQVNT
RVJUKGV2ZW50LT50YXJnZXQoKSk7CiAgICAgYm9vbCB3YXNBZGRlZCA9IG1fcXVldWVkRXZlbnRz
LmFkZChldmVudCkuc2Vjb25kOwpAQCAtODEsNiArODEsOCBAQCB2b2lkIERvY3VtZW50RXZlbnRR
dWV1ZTo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIAogICAgIGlm
ICghbV9wZW5kaW5nRXZlbnRUaW1lci0+aXNBY3RpdmUoKSkKICAgICAgICAgbV9wZW5kaW5nRXZl
bnRUaW1lci0+c3RhcnRPbmVTaG90KDApOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQg
RG9jdW1lbnRFdmVudFF1ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KFBhc3NSZWZQ
dHI8Tm9kZT4gdGFyZ2V0LCBTY3JvbGxFdmVudFRhcmdldFR5cGUgdGFyZ2V0VHlwZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuaAppbmRleCBhOGQzYmZiODRmNjM1MTNhMjA5
ZTAxY2ZlZTViZjk1OTJjNjM3YWY5Li4yYzc0Nzk1MzU1MTFhNDhlM2EwMzMwOGFlODI2NmM4Mzcx
MzY3MjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5oCkBAIC01Miw3
ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Eb2N1bWVudEV2ZW50UXVldWUoKTsKIAog
ICAgIC8vIEV2ZW50UXVldWUKLSAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+KTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuY2VsRXZlbnQoRXZlbnQqKTsKICAgICB2aXJ0dWFs
IHZvaWQgY2xvc2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVl
dWUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmgKaW5kZXggMmQyNmJlMmM3YWI1
MDVjMDcxMjQxMDM4YmQ4NWMyMDNhZWNhMzhjYy4uNTZjZTE1MzIwNTZhZDUxZGMxOTk1Y2EzOTQ5
MjMwNWNlOGNhZGMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5oCkBAIC0zOCw3ICszOCw3IEBA
IGNsYXNzIEV2ZW50OwogY2xhc3MgRXZlbnRRdWV1ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
RXZlbnRRdWV1ZSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNhbmNlbEV2ZW50KEV2ZW50KikgPSAwOwog
ICAgIC8vIFRoZSBhY2N1bXVsYXRlZCBhbmQgYWxsIHRoZSBmdXR1cmUgZXZlbnRzIHdpbGwgYmUg
ZGlzY2FyZGVkLCBubyBldmVudHMgd2lsbCBiZSBkaXNwYXRjaGVkIGFueW1vcmUuCiAgICAgdmly
dHVhbCB2b2lkIGNsb3NlKCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNw
cAppbmRleCA4NjFkY2E4YjYyODIzZjI0YjlhODEyZWRiZGMxNWVkOGFlOTllMGZiLi42YTYwZDE3
MjBkYzExYjlhOTVjN2Y0NTJjYzZhM2Y4ZmFiNmVkZjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlLmNwcApAQCAtNTYsNyArNTYsNyBAQCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
PiBJREJEYXRhYmFzZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
cwogSURCRGF0YWJhc2U6OklEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQogICAg
IDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCiAgICAgLCBtX2JhY2tlbmQoYmFja2Vu
ZCkKLSAgICAsIG1fbm9OZXdUcmFuc2FjdGlvbnMoZmFsc2UpCisgICAgLCBtX2Nsb3NlUGVuZGlu
ZyhmYWxzZSkKICAgICAsIG1fc3RvcHBlZChmYWxzZSkKIHsKICAgICAvLyBXZSBwYXNzIGEgcmVm
ZXJlbmNlIG9mIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRlZC4KQEAgLTY2LDYg
KzY2LDcgQEAgSURCRGF0YWJhc2U6OklEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2UKIAogSURCRGF0YWJhc2U6On5JREJEYXRh
YmFzZSgpCiB7CisgICAgY2xvc2UoKTsKICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzLT51bnJlZ2lz
dGVyRGF0YWJhc2UodGhpcyk7CiB9CiAKQEAgLTE0OSw3ICsxNTAsNyBAQCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udAogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5U
X0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmIChtX25vTmV3VHJhbnNhY3Rp
b25zKSB7CisgICAgaWYgKG1fY2xvc2VQZW5kaW5nKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpA
QCAtMTcwLDcgKzE3MSwxMyBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFz
ZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udAogCiB2b2lkIElEQkRh
dGFiYXNlOjpjbG9zZSgpCiB7Ci0gICAgaWYgKG1fbm9OZXdUcmFuc2FjdGlvbnMpCisgICAgaWYg
KG1fY2xvc2VQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nsb3NlUGVuZGluZyA9
IHRydWU7CisgICAgbV9iYWNrZW5kLT5jbG9zZShtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKKworICAg
IGlmIChtX3N0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+ZXZlbnRRdWV1ZSgpOwpAQCAtMTgyLDEzICsxODksMTMgQEAgdm9pZCBJREJEYXRhYmFz
ZTo6Y2xvc2UoKQogICAgICAgICBib29sIHJlbW92ZWQgPSBldmVudFF1ZXVlLT5jYW5jZWxFdmVu
dChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1v
dmVkLCByZW1vdmVkKTsKICAgICB9Ci0KLSAgICBtX25vTmV3VHJhbnNhY3Rpb25zID0gdHJ1ZTsK
LSAgICBtX2JhY2tlbmQtPmNsb3NlKG1fZGF0YWJhc2VDYWxsYmFja3MpOwogfQogCiB2b2lkIElE
QkRhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogeworICAg
IGlmIChtX3N0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKHZl
cnNpb24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKIH0KIApAQCAtMjA5LDYg
KzIxNiw4IEBAIHZvaWQgSURCRGF0YWJhc2U6Om9wZW4oKQogCiB2b2lkIElEQkRhdGFiYXNlOjpl
bnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiB7CisgICAgQVNTRVJUKCFtX3N0
b3BwZWQpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIEV2ZW50
UXVldWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUo
KTsKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwogICAgIGV2ZW50UXVldWUtPmVucXVldWVF
dmVudChldmVudC5nZXQoKSk7CkBAIC0yMjUsOCArMjM0LDEwIEBAIGJvb2wgSURCRGF0YWJhc2U6
OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgcmV0dXJuIEV2ZW50
VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKIH0KIAorCiB2b2lkIElEQkRhdGFi
YXNlOjpzdG9wKCkKIHsKKyAgICBBY3RpdmVET01PYmplY3Q6OnN0b3AoKTsKICAgICAvLyBTdG9w
IGZpcmVzIGF0IGEgZGV0ZXJtaW5pc3RpYyB0aW1lLCBzbyB3ZSBuZWVkIHRvIGNhbGwgY2xvc2Ug
aW4gaXQuCiAgICAgY2xvc2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5oCmlu
ZGV4IDUyMGUwMTNmOTlhMGE4YWRmZTU5ZWY3NmJlNjY3NDlmYTQ1NmY4Y2EuLmEzMjZiMjQ2MGQz
MDNjY2Y5YjlkZTI0YWZmM2QyMTE1ZDA2MzFkYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlLmgKQEAgLTEwNSw3ICsxMDUsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOwogCi0gICAgYm9vbCBtX25vTmV3VHJhbnNh
Y3Rpb25zOworICAgIGJvb2wgbV9jbG9zZVBlbmRpbmc7CiAgICAgYm9vbCBtX3N0b3BwZWQ7CiAK
ICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5LmNwcAppbmRleCAwNThjNGQzZTVhZWQ5NmRkNzVmZTdhMjM0MzE4NTUyOTYw
MmU5Nzk0Li5mNTRjZjcxZWIzODYwZTMwZTljMDMzMDQ3NGJjNTI4MWM3N2U1Y2FjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogSURCRmFjdG9yeTo6SURCRmFjdG9yeShJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZSogZmFjdG9yeSkKLSAgICA6IG1fZmFjdG9yeUJhY2tlbmQoZmFjdG9yeSkKKyAgICA6
IG1fYmFja2VuZChmYWN0b3J5KQogewogICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhp
cyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgogICAgIHJlbGF4QWRvcHRpb25SZXF1
aXJlbWVudCgpOwpAQCAtNzMsNyArNzMsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZh
Y3Rvcnk6OmdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udAogCiAg
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoZG9jdW1l
bnQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKICAgICBHcm91cFNldHRpbmdzKiBncm91cFNl
dHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAg
bV9mYWN0b3J5QmFja2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhyZXF1ZXN0LCBkb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWRE
QkRhdGFiYXNlUGF0aCgpKTsKKyAgICBtX2JhY2tlbmQtPmdldERhdGFiYXNlTmFtZXMocmVxdWVz
dCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNl
dHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9
CiAKQEAgLTk1LDcgKzk1LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5Ojpv
cGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFMKIAogICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJREJB
bnk6OmNyZWF0ZSh0aGlzKSwgMCk7CiAgICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9
IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOwotICAgIG1fZmFjdG9y
eUJhY2tlbmQtPm9wZW4obmFtZSwgcmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCks
IGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgo
KSk7CisgICAgbV9iYWNrZW5kLT5vcGVuKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0
eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0
YWJhc2VQYXRoKCkpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCkBAIC0xMTcsNyArMTE3LDcg
QEAgUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCRmFjdG9yeTo6ZGVsZXRl
RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ28KIAogICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdl
UmVxdWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoZG9jdW1l
bnQsIElEQkFueTo6Y3JlYXRlTnVsbCgpLCAiIik7CiAgICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBT
ZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOwotICAg
IG1fZmFjdG9yeUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5k
ZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIG1fYmFja2VuZC0+ZGVsZXRlRGF0YWJhc2UobmFt
ZSwgcmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgp
LCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSk7CiAgICAgcmV0dXJuIHJl
cXVlc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKaW5kZXggNDE3MzYyYTI1
NGU4MDliYTk0ZmJmZWU3YzEzNmI2MWZiYjM1ZTA4OC4uNDYxMWNiNmM0ZmU4Mzk5MGI0NzI0YTQz
YmYwOWM5YTVhOTVkODg4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKQEAgLTY2
LDcgKzY2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5KElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlKik7CiAKLSAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2U+IG1fZmFjdG9yeUJhY2tlbmQ7CisgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlPiBtX2JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGFmNDVlZDRiMWRjMDdiMDI5MTNk
ZWM3OTEwODU5MDg5NDM2MmMzMzUuLjEyNGEwMjNmZjdhOWJmMmVkYjM0Mzk2MGEyZWEyODMzZmNj
ZWU1NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC00
NCwxMCArNDQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHNob3J0IGRlZmF1bHREaXJlY3Rpb24gPSBJREJDdXJzb3I6Ok5FWFQ7CiAKIElEQk9iamVjdFN0
b3JlOjpJREJPYmplY3RTdG9yZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZT4gaWRiT2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLSAgICA6
IG1fb2JqZWN0U3RvcmUoaWRiT2JqZWN0U3RvcmUpCisgICAgOiBtX2JhY2tlbmQoaWRiT2JqZWN0
U3RvcmUpCiAgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogewotICAgIEFTU0VSVCht
X29iamVjdFN0b3JlKTsKKyAgICBBU1NFUlQobV9iYWNrZW5kKTsKICAgICBBU1NFUlQobV90cmFu
c2FjdGlvbik7CiAgICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZv
cmUgaXQgY2FuIGJlIGFkb3B0ZWQuCiAgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CkBA
IC01NSwxNyArNTUsMTcgQEAgSURCT2JqZWN0U3RvcmU6OklEQk9iamVjdFN0b3JlKFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBpZGJPYmoKIAogU3RyaW5nIElEQk9i
amVjdFN0b3JlOjpuYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTdG9yZS0+bmFt
ZSgpOworICAgIHJldHVybiBtX2JhY2tlbmQtPm5hbWUoKTsKIH0KIAogU3RyaW5nIElEQk9iamVj
dFN0b3JlOjprZXlQYXRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTdG9yZS0+a2V5
UGF0aCgpOworICAgIHJldHVybiBtX2JhY2tlbmQtPmtleVBhdGgoKTsKIH0KIAogUGFzc1JlZlB0
cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fb2JqZWN0U3RvcmUtPmluZGV4TmFtZXMoKTsKKyAgICByZXR1cm4gbV9iYWNr
ZW5kLT5pbmRleE5hbWVzKCk7CiB9CiAKIElEQlRyYW5zYWN0aW9uKiBJREJPYmplY3RTdG9yZTo6
dHJhbnNhY3Rpb24oKSBjb25zdApAQCAtODEsNyArODEsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzcwogICAgIH0KIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVz
dDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdl
dCgpKTsKLSAgICBtX29iamVjdFN0b3JlLT5nZXQoa2V5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9u
LT5iYWNrZW5kKCksIGVjKTsKKyAgICBtX2JhY2tlbmQtPmdldChrZXksIHJlcXVlc3QsIG1fdHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICByZXF1ZXN0
LT5tYXJrRWFybHlEZWF0aCgpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTk3LDcgKzk3LDcgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3MKICAgICB9CiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlz
KSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBr
ZXksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSwgcmVxdWVzdCwgbV90
cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgbV9iYWNrZW5kLT5wdXQodmFsdWUsIGtl
eSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPbmx5LCByZXF1ZXN0LCBtX3Ry
YW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgcmVxdWVz
dC0+bWFya0Vhcmx5RGVhdGgoKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTMsNyArMTEzLDcg
QEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3MKICAgICB9CiAKICAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVl
LCBrZXksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT3JVcGRhdGUsIHJlcXVl
c3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIG1fYmFja2VuZC0+cHV0KHZh
bHVlLCBrZXksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT3JVcGRhdGUsIHJl
cXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewogICAg
ICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTEy
OSw3ICsxMjksNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxl
dGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjbwogICAgIH0KIAogICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFu
eTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX29iamVjdFN0b3Jl
LT5kZWxldGVGdW5jdGlvbihrZXksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOworICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rpb24oa2V5LCByZXF1ZXN0LCBtX3RyYW5z
YWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgcmVxdWVzdC0+
bWFya0Vhcmx5RGVhdGgoKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNDAsNyArMTQwLDcgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY28KIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OmNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6
Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKLSAgICBtX29iamVjdFN0b3JlLT5jbGVhcihyZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNr
ZW5kKCksIGVjKTsKKyAgICBtX2JhY2tlbmQtPmNsZWFyKHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24t
PmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICByZXF1ZXN0LT5tYXJrRWFy
bHlEZWF0aCgpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTE1OCw3ICsxNTgsNyBAQCBQYXNzUmVm
UHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbgogICAgIGJvb2wgdW5pcXVlID0gZmFsc2U7CiAgICAgb3B0aW9ucy5n
ZXQoInVuaXF1ZSIsIHVuaXF1ZSk7CiAKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlPiBpbmRleCA9IG1fb2JqZWN0U3RvcmUtPmNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIHVu
aXF1ZSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBtX2JhY2tlbmQtPmNyZWF0ZUluZGV4KG5hbWUsIGtl
eVBhdGgsIHVuaXF1ZSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgQVNTRVJU
KCFpbmRleCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBzaG91bGQg
aGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgogICAgIGlmICgh
aW5kZXgpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTY3LDcgKzE2Nyw3IEBAIFBhc3NSZWZQdHI8
SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluCiAKIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjppbmRl
eChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gbV9vYmplY3RTdG9yZS0+aW5kZXgobmFt
ZSwgZWMpOworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gbV9i
YWNrZW5kLT5pbmRleChuYW1lLCBlYyk7CiAgICAgQVNTRVJUKCFpbmRleCAhPSAhZWMpOyAvLyBJ
ZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0
aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgogICAgIGlmICghaW5kZXgpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMTc2LDcgKzE3Niw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0
b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjCiAKIHZvaWQg
SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7Ci0gICAgbV9vYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgobmFtZSwgbV90cmFu
c2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgbV9iYWNrZW5kLT5kZWxldGVJbmRleChuYW1l
LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKIH0KIAogUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGly
ZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTE4OSw3ICsxODksNyBAQCBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleAogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1
ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24u
Z2V0KCkpOwogICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUoSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3IpOwotICAgIG1fb2JqZWN0U3RvcmUtPm9wZW5DdXJzb3Io
cmFuZ2UsIGRpcmVjdGlvbiwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7
CisgICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKHJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1f
dHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICByZXF1
ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmUuaAppbmRleCAxNDY1OGFkYzZiYWJiZmUyYzRjNmY2Y2Y1NDli
MjUzMTZkYzVhYjM0Li45YjVhYTZiMmQzZjUzNzMxYmM2MTY1OWI5NjU2YzM2MzQ5YmNmMjZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5oCkBAIC04Myw3ICs4Myw3IEBA
IHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U+LCBJREJUcmFuc2FjdGlvbiopOwogICAgIHZvaWQgcmVtb3ZlVHJhbnNh
Y3Rpb25Gcm9tUGVuZGluZ0xpc3QoKTsKIAotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90
cmFuc2FjdGlvbjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
UmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCmluZGV4
IGNjZDFiNDBiMWQ2YTRmNTcyYWIyZDVlOWVjMzJlNjc2NzZmZTViYjEuLjliOWZlZjc0MTE3YTky
YzU4MDMxYjZhZTJhNmU3NWRjMzFiMTcyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1
ZXN0LmNwcApAQCAtNTUsNiArNTUsNyBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyYwogICAgICwg
bV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKICAgICAsIG1fcmVhZHlTdGF0ZShMT0FESU5HKQog
ICAgICwgbV9maW5pc2hlZChmYWxzZSkKKyAgICAsIG1fc3RvcHBlZChmYWxzZSkKICAgICAsIG1f
Y3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSkK
ICAgICAsIG1fY3Vyc29yKDApCiB7CkBAIC0xNDUsMTIgKzE0NiwxMyBAQCBJREJBbnkqIElEQlJl
cXVlc3Q6OnNvdXJjZSgpCiAKIHZvaWQgSURCUmVxdWVzdDo6YWJvcnQoKQogeworICAgIGlmICht
X3N0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBMT0FESU5HKSB7CiAgICAgICAgIEFTU0VSVChtX3Jl
YWR5U3RhdGUgPT0gRE9ORSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKIAogICAgIEV2ZW50UXVldWUq
IGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsK
QEAgLTIwMiw3ICsyMDQsNiBAQCB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRy
PElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCiB7CiAgICAgQVNTRVJUKCFtX2Vy
cm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQpOwogICAgIEFT
U0VSVChtX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW52YWxpZEN1
cnNvclR5cGUpOwotCiAgICAgUmVmUHRyPElEQkN1cnNvcj4gY3Vyc29yOwogICAgIGlmIChtX2N1
cnNvclR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpCiAg
ICAgICAgIGN1cnNvciA9IElEQkN1cnNvcjo6Y3JlYXRlKGJhY2tlbmQsIHRoaXMsIG1fc291cmNl
LmdldCgpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKQEAgLTIxNyw2ICsyMTgsOSBAQCB2b2lkIElE
QlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+
IGJhY2tlbmQpCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKIHsKICAgICBBU1NFUlQoIW1fZXJyb3JDb2Rl
ICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7CisgICAgaWYgKG1fc3Rv
cHBlZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRh
YmFzZSA9IElEQkRhdGFiYXNlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBiYWNr
ZW5kKTsKICAgICBpZGJEYXRhYmFzZS0+b3BlbigpOwogCkBAIC0yMzQsMTAgKzIzOCwxMyBAQCB2
b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4gaWRiS2V5KQogdm9p
ZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IHBycEJhY2tlbmQpCiB7CiAgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vy
cm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9yZXN1bHQpOwotICAgIGlmICghc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKQorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IGJhY2tlbmQgPSBwcnBCYWNrZW5kOworCisgICAgaWYgKG1fc3RvcHBlZCB8fCAhc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKSB7CisgICAgICAgIGJhY2tlbmQtPmFib3J0KCk7CiAgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiBiYWNrZW5kID0gcHJwQmFja2VuZDsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGZyb250
ZW5kID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGJh
Y2tlbmQsIG1fc291cmNlLT5pZGJEYXRhYmFzZSgpLmdldCgpKTsKICAgICBiYWNrZW5kLT5zZXRD
YWxsYmFja3MoZnJvbnRlbmQuZ2V0KCkpOwogICAgIG1fdHJhbnNhY3Rpb24gPSBmcm9udGVuZDsK
QEAgLTI2NCw3ICsyNzEsNiBAQCB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhDb250aW51
YXRpb24oKQogewogICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNO
dWxsKCkgJiYgIW1fcmVzdWx0KTsKICAgICBBU1NFUlQobV9jdXJzb3IpOwotCiAgICAgc2V0UmVz
dWx0Q3Vyc29yKG1fY3Vyc29yLCBtX2N1cnNvclR5cGUpOwogICAgIG1fY3Vyc29yLmNsZWFyKCk7
CiAgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKQEAgLTI3OCw2ICsyODQs
MTcgQEAgYm9vbCBJREJSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogICAgIHJl
dHVybiAhbV9maW5pc2hlZCB8fCBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgp
OwogfQogCit2b2lkIElEQlJlcXVlc3Q6OnN0b3AoKQoreworICAgIEFjdGl2ZURPTU9iamVjdDo6
c3RvcCgpOworICAgIGlmIChtX3N0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3Rv
cHBlZCA9IHRydWU7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBMT0FESU5HKQorICAgICAgICBt
YXJrRWFybHlEZWF0aCgpOworfQorCiB2b2lkIElEQlJlcXVlc3Q6Om9uQmxvY2tlZCgpCiB7CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yOTYsNiArMzEzLDcgQEAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogSURCUmVxdWVzdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CiBi
b29sIElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiB7
CiAgICAgQVNTRVJUKCFtX2ZpbmlzaGVkKTsKKyAgICBBU1NFUlQoIW1fc3RvcHBlZCk7CiAgICAg
QVNTRVJUKG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpKTsKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKICAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpID09IHRoaXMpOwpAQCAt
MzQ1LDE0ICszNjMsMTcgQEAgdm9pZCBJREJSZXF1ZXN0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZl
bnRIYW5kbGVyKCkKIHZvaWQgSURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQogewogICAgIEFTU0VSVCghbV9maW5pc2hlZCk7Ci0gICAgQVNTRVJUKG1fcmVh
ZHlTdGF0ZSA8IERPTkUpOwotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorCisg
ICAgaWYgKG1fc3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlIDwgRE9ORSk7CisKICAgICBFdmVudFF1
ZXVlKiBldmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7
CiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBldmVudFF1ZXVlLT5lbnF1ZXVlRXZl
bnQoZXZlbnQuZ2V0KCkpOwotICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKKwor
ICAgIGlmIChldmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoZXZlbnQuZ2V0KCkpKQorICAgICAgICBt
X2VucXVldWVkRXZlbnRzLmFwcGVuZChldmVudCk7CiB9CiAKIEV2ZW50VGFyZ2V0RGF0YSogSURC
UmVxdWVzdDo6ZXZlbnRUYXJnZXREYXRhKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmgK
aW5kZXggNDZmZThjZjBmMTlkNWRmNWNiZGI4N2Y0NzMxZGIxZDVjMzQzNjEzZS4uOWNkNjVmYTAx
YjI1MWNlYTBlOTgxMTUyYzJlM2EyMzJhNjc3N2Y1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJS
ZXF1ZXN0LmgKQEAgLTg4LDYgKzg4LDcgQEAgcHVibGljOgogCiAgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0CiAgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzdG9wKCk7CiAKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CkBAIC0xMjAsNiArMTIxLDcg
QEAgcHJpdmF0ZToKIAogICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAgIGJvb2wgbV9m
aW5pc2hlZDsgLy8gSXMgaXQgcG9zc2libGUgdGhhdCB3ZSdsbCBmaXJlIGFueSBtb3JlIGV2ZW50
cz8gSWYgbm90LCB3ZSdyZSBmaW5pc2hlZC4KKyAgICBib29sIG1fc3RvcHBlZDsKICAgICBWZWN0
b3I8UmVmUHRyPEV2ZW50PiA+IG1fZW5xdWV1ZWRFdmVudHM7CiAKICAgICAvLyBPbmx5IHVzZWQg
aWYgdGhlIHJlc3VsdCB0eXBlIHdpbGwgYmUgYSBjdXJzb3IuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDlhNWQ2NzI4Y2EyYTM1ZWI4N2E2NjJlOTUyMDU1
YTNiYTA4MzI4YjcuLjllY2EzZWI4ODFkYjMyY2NhY2ZkMTI5MTNiMmEzYTRiNTgxMzkyODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCkBAIC01MSw2ICs1MSw3
IEBAIElEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRyCiAgICAgLCBtX2RhdGFiYXNlKGRiKQogICAgICwg
bV9tb2RlKG1fYmFja2VuZC0+bW9kZSgpKQogICAgICwgbV9maW5pc2hlZChmYWxzZSkKKyAgICAs
IG1fc3RvcHBlZChmYWxzZSkKIHsKICAgICBBU1NFUlQobV9iYWNrZW5kKTsKICAgICBJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yOjphZGRQZW5kaW5nVHJhbnNhY3Rpb24obV9iYWNrZW5kLmdl
dCgpKTsKQEAgLTk3LDYgKzk4LDggQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJh
bnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXAKIAogdm9pZCBJ
REJUcmFuc2FjdGlvbjo6YWJvcnQoKQogeworICAgIGlmIChtX2ZpbmlzaGVkKQorICAgICAgICBy
ZXR1cm47CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBzZWxmUmVmID0gdGhpczsKICAgICBp
ZiAobV9iYWNrZW5kKQogICAgICAgICBtX2JhY2tlbmQtPmFib3J0KCk7CkBAIC0xMTUsNiArMTE4
LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6dW5yZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCog
cmVxdWVzdCkKIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6b25BYm9ydCgpCiB7CisgICAgQVNTRVJU
KCFtX2ZpbmlzaGVkKTsKICAgICB3aGlsZSAoIW1fY2hpbGRSZXF1ZXN0cy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgSURCUmVxdWVzdCogcmVxdWVzdCA9ICptX2NoaWxkUmVxdWVzdHMuYmVnaW4oKTsK
ICAgICAgICAgbV9jaGlsZFJlcXVlc3RzLnJlbW92ZShyZXF1ZXN0KTsKQEAgLTEyNCwxNCArMTI4
LDIxIEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Om9uQWJvcnQoKQogICAgIGlmIChtX21vZGUgPT0g
SURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKQogICAgICAgICBtX2RhdGFiYXNlLT5jbGVh
clZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbih0aGlzKTsKIAorICAgIGlmIChtX3N0b3BwZWQgfHwg
IXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZW5xdWV1
ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQsIHRydWUsIGZhbHNl
KSk7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUoKQogeworICAgIEFTU0VS
VCghbV9maW5pc2hlZCk7CiAgICAgaWYgKG1fbW9kZSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lP
Tl9DSEFOR0UpCiAgICAgICAgIG1fZGF0YWJhc2UtPmNsZWFyVmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uKHRoaXMpOwogCisgICAgaWYgKG1fc3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiB9CiAKQEAgLTE1OCw3
ICsxNjksNiBAQCBib29sIElEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50KQogICAgIEFTU0VSVCghbV9maW5pc2hlZCk7CiAgICAgQVNTRVJUKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0aGlz
KTsKLSAgICBBU1NFUlQoIW1fZmluaXNoZWQpOwogICAgIG1fZmluaXNoZWQgPSB0cnVlOwogCiAg
ICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4gPiB0YXJnZXRzOwpAQCAtMTc3LDIzICsxODcs
MTggQEAgYm9vbCBJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVuZCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fZmluaXNoZWQ7CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb246OmNvbnRleHREZXN0cm95ZWQo
KQordm9pZCBJREJUcmFuc2FjdGlvbjo6c3RvcCgpCiB7Ci0gICAgQWN0aXZlRE9NT2JqZWN0Ojpj
b250ZXh0RGVzdHJveWVkKCk7Ci0KLSAgICAvLyBNdXN0IGhhcHBlbiBpbiBjb250ZXh0RGVzdHJv
eWVkIHNpbmNlIGl0IGNhbiByZXN1bHQgaW4gQWN0aXZlRE9NT2JqZWN0cyBiZWluZyBkZXN0cnVj
dGVkCi0gICAgLy8gKGFuZCBjb250ZXh0RGVzdHJveWVkIGlzIHRoZSBvbmx5IG9uZSByZXNpbGll
bnQgYWdhaW5zdCB0aGlzKS4KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHNlbGZSZWYgPSB0
aGlzOwotICAgIGlmIChtX2JhY2tlbmQpCi0gICAgICAgIG1fYmFja2VuZC0+YWJvcnQoKTsKKyAg
ICBBY3RpdmVET01PYmplY3Q6OnN0b3AoKTsKKyAgICBtX3N0b3BwZWQgPSB0cnVlOwogCi0gICAg
bV9maW5pc2hlZCA9IHRydWU7CisgICAgYWJvcnQoKTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlv
bjo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewogICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoIW1fZmluaXNoZWQsICJBIGZpbmlzaGVkIHRyYW5zYWN0aW9uIHRyaWVkIHRv
IGVucXVldWUgYW4gZXZlbnQgb2YgdHlwZSAlcy4iLCBldmVudC0+dHlwZSgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgIGlm
IChtX3N0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+ZXZlbnRRdWV1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJU
cmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oCmlu
ZGV4IGJlNjk1YzVhZTY5NGUyMmE5ZjkzMTcxOWQxOGI2OTc2MTU5OTI2ODQuLmE1NDhkZWY0YTk3
NzQwNTA2OTQxMGYzNzhlOTIzNWNiOTNjMWMzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlRyYW5zYWN0aW9uLmgKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgIC8vIEFjdGl2ZURP
TU9iamVjdAogICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjb250
ZXh0RGVzdHJveWVkKCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAogICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291
bnRlZDxJREJUcmFuc2FjdGlvbkNhbGxiYWNrcz46OmRlcmVmOwpAQCAtMTAyLDYgKzEwMiw3IEBA
IHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBtX2RhdGFiYXNlOwogICAgIHVuc2ln
bmVkIHNob3J0IG1fbW9kZTsKICAgICBib29sIG1fZmluaXNoZWQ7IC8vIElzIGl0IHBvc3NpYmxl
IHRoYXQgd2UnbGwgZmlyZSBhbnkgbW9yZSBldmVudHMgb3IgYWxsb3cgYW55IG5ldyB0cmFuc2Fj
dGlvbnM/IElmIG5vdCwgd2UncmUgZmluaXNoZWQuCisgICAgYm9vbCBtX3N0b3BwZWQ7CiAKICAg
ICBMaXN0SGFzaFNldDxJREJSZXF1ZXN0Kj4gbV9jaGlsZFJlcXVlc3RzOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRl
eCA4YTEyMjY0YWM3NjA5M2ExMjFiOWRkYmMzMTgzZmIwOTE2MThlMGMyLi5iNDUyNjAwMzFkYzc0
MmFmZTFmNzRiNmUwOTU4YzAxNzU2ZTA0OGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKQEAgLTEyOSw3ICsxMjksOCBA
QCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KCkKICAgICAgICAgdGFzay0+
cGVyZm9ybVRhc2soMCk7CiAgICAgfQogCi0gICAgbV9jYWxsYmFja3MtPm9uQWJvcnQoKTsKKyAg
ICBpZiAobV9jYWxsYmFja3MpCisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KCk7CiAgICAg
bV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlv
bih0aGlzKTsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3Io
KS0+aXNBY3RpdmUodGhpcykpOwogICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQo
dGhpcyk7CkBAIC0xODMsNiArMTg0LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Ojpjb21taXQoKQogICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KICAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gc2VsZih0aGlzKTsKICAgICBBU1NF
UlQobV9zdGF0ZSA9PSBSdW5uaW5nKTsKKyAgICBBU1NFUlQobV90YXNrUXVldWUuaXNFbXB0eSgp
KTsKIAogICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKICAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcAppbmRleCA4YTNlYzAx
MWJlODk3YmUyNThmNmQ4MzUxYmNlYmMwOWFhMjcyYmYwLi5mNTFkMmRjNTNiMzhmNzVkZmE5Nzc0
YTcxYmUzYmEwZTE0MGNkOTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckV2ZW50UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZl
bnRRdWV1ZS5jcHAKQEAgLTk1LDE0ICs5NSwxNSBAQCB2b2lkIFdvcmtlckV2ZW50UXVldWU6OnJl
bW92ZUV2ZW50KEV2ZW50KiBldmVudCkKICAgICBtX2V2ZW50VGFza01hcC5yZW1vdmUoZXZlbnQp
OwogfQogCi12b2lkIFdvcmtlckV2ZW50UXVldWU6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBwcnBFdmVudCkKK2Jvb2wgV29ya2VyRXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogewogICAgIGlmIChtX2lzQ2xvc2VkKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0g
cHJwRXZlbnQ7CiAgICAgT3duUHRyPEV2ZW50RGlzcGF0Y2hlclRhc2s+IHRhc2sgPSBFdmVudERp
c3BhdGNoZXJUYXNrOjpjcmVhdGUoZXZlbnQsIHRoaXMpOwogICAgIG1fZXZlbnRUYXNrTWFwLmFk
ZChldmVudC5yZWxlYXNlKCksIHRhc2suZ2V0KCkpOwogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+cG9zdFRhc2sodGFzay5yZWxlYXNlKCkpOworICAgIHJldHVybiB0cnVlOwogfQogCiBi
b29sIFdvcmtlckV2ZW50UXVldWU6OmNhbmNlbEV2ZW50KEV2ZW50KiBldmVudCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5oIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmgKaW5kZXggN2JkMmE5YjQwN2ZiYzYwODBk
MjMzMWNjNGRlZmRmNTMyOGEwMDcwZC4uZTdmY2JiMjk3NzY4MGVmOWM3ZjM5NjA2NzlmMjUwNmZj
ODc3ZjUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1
ZXVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmgKQEAg
LTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfldvcmtlckV2ZW50UXVldWUoKTsK
IAogICAgIC8vIEV2ZW50UXVldWUKLSAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+KTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+KTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuY2VsRXZlbnQoRXZlbnQqKTsKICAgICB2aXJ0
dWFsIHZvaWQgY2xvc2UoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115910</attachid>
            <date>2011-11-18 16:56:57 -0800</date>
            <delta_ts>2011-11-21 14:34:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72066-20111118165656.patch</filename>
            <type>text/plain</type>
            <size>33999</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjdjNDU4YjczMTM0MWI1
MWE0OTZjMzIxOTNiY2UzNTQ3MzUxMTJkZi4uMTNhNTgzNWRhNjVmZWE1ZTAzMmYyNzA1MTJhOWY1
YTBmOTgyYjRkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDExLTExLTE4ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBDbG9z
ZSBkYXRhYmFzZSBjb25uZWN0aW9ucywgYWJvcnQgdHJhbnNhY3Rpb25zLCBhbmQgdGVybWluYXRl
IHJlcXVlc3RzIG9uIHN0b3AoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzIwNjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHM7IGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgb24gZG9j
dW1lbnQgbmF2aWdhdGUvc2NyaXB0IGNvbnRleHQgc3RvcC4KKworICAgICAgICAqIGRvbS9Eb2N1
bWVudEV2ZW50UXVldWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRFdmVudFF1ZXVl
OjplbnF1ZXVlRXZlbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudEV2ZW50UXVldWUuaDoKKyAg
ICAgICAgKiBkb20vRXZlbnRRdWV1ZS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OklEQkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjp+SURCRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6b25WZXJzaW9uQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjplbnF1ZXVlRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnN0b3ApOgorICAgICAgICAqIHN0b3JhZ2UvSURC
RGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCRmFjdG9yeTo6SURCRmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJG
YWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6
Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UpOgor
ICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OklEQk9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpuYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjprZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmFkZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNy
ZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6SURCUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJSZXF1ZXN0OjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1
Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25TdWNjZXNzV2l0aENvbnRp
bnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzdG9wKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQlJlcXVlc3Qu
aDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
Om9uQWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246OmVucXVldWVFdmVudCk6CisgICAgICAgICogc3RvcmFnZS9JREJUcmFu
c2FjdGlvbi5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQpOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQpOgorICAgICAgICAqIHdvcmtlcnMvV29y
a2VyRXZlbnRRdWV1ZS5oOgorCiAyMDExLTExLTE4ICBNaWhuZWEgT3ZpZGVuaWUgIDxtaWhuZWFA
YWRvYmUuY29tPgogCiAgICAgICAgIEZpeCBjb21waWxhdGlvbiB3YXJuaW5nIGluIENvbXBsZXhU
ZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRFdmVudFF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50
UXVldWUuY3BwCmluZGV4IDdlZGYyNGY4OGE2NjQ1YmU2ZGI5MmJjNmRjNTRiMTgyNDc3YzA5YzUu
LjMxMDIzZTI4ZDMxMWVkYzFmODEyNDA4NzNhODgyN2YzMzFlOGJhZGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuY3BwCkBAIC03MCwxMCArNzAsMTAgQEAgRG9jdW1l
bnRFdmVudFF1ZXVlOjp+RG9jdW1lbnRFdmVudFF1ZXVlKCkKIHsKIH0KIAotdm9pZCBEb2N1bWVu
dEV2ZW50UXVldWU6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wg
RG9jdW1lbnRFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
CiB7CiAgICAgaWYgKG1faXNDbG9zZWQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7CiAgICAgYm9vbCB3YXNBZGRl
ZCA9IG1fcXVldWVkRXZlbnRzLmFkZChldmVudCkuc2Vjb25kOwpAQCAtODEsNiArODEsOCBAQCB2
b2lkIERvY3VtZW50RXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQogICAgIAogICAgIGlmICghbV9wZW5kaW5nRXZlbnRUaW1lci0+aXNBY3RpdmUoKSkKICAg
ICAgICAgbV9wZW5kaW5nRXZlbnRUaW1lci0+c3RhcnRPbmVTaG90KDApOworCisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgRG9jdW1lbnRFdmVudFF1ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNj
cm9sbEV2ZW50KFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBTY3JvbGxFdmVudFRhcmdldFR5cGUg
dGFyZ2V0VHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50
UXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuaAppbmRleCBh
OGQzYmZiODRmNjM1MTNhMjA5ZTAxY2ZlZTViZjk1OTJjNjM3YWY5Li4xZjdlMGRkOTZkNTg3Mjdj
MzY0MjMxOGQ3NDBlZTI0MDhiMmNjN2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRFdmVudFF1ZXVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZl
bnRRdWV1ZS5oCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Eb2N1bWVu
dEV2ZW50UXVldWUoKTsKIAogICAgIC8vIEV2ZW50UXVldWUKLSAgICB2aXJ0dWFsIHZvaWQgZW5x
dWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuY2VsRXZl
bnQoRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wg
ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJv
b2wgY2FuY2VsRXZlbnQoRXZlbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2Uo
KSBPVkVSUklERTsKIAogICAgIHZvaWQgZW5xdWV1ZU9yRGlzcGF0Y2hTY3JvbGxFdmVudChQYXNz
UmVmUHRyPE5vZGU+LCBTY3JvbGxFdmVudFRhcmdldFR5cGUpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVl
dWUuaAppbmRleCAyZDI2YmUyYzdhYjUwNWMwNzEyNDEwMzhiZDg1YzIwM2FlY2EzOGNjLi41NmNl
MTUzMjA1NmFkNTFkYzE5OTVjYTM5NDkyMzA1Y2U4Y2FkYzNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1
ZXVlLmgKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudFF1ZXVlIHsK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5FdmVudFF1ZXVlKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBl
bnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
Y2VsRXZlbnQoRXZlbnQqKSA9IDA7CiAgICAgLy8gVGhlIGFjY3VtdWxhdGVkIGFuZCBhbGwgdGhl
IGZ1dHVyZSBldmVudHMgd2lsbCBiZSBkaXNjYXJkZWQsIG5vIGV2ZW50cyB3aWxsIGJlIGRpc3Bh
dGNoZWQgYW55bW9yZS4KICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCmluZGV4IDg2MWRjYThiNjI4MjNmMjRiOWE4MTJlZGJk
YzE1ZWQ4YWU5OWUwZmIuLjE5MWE0NWNkZTYwZmE4MDMwMjIxMTVmNzE0ZTA0NzUwMzBiOTc0NDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCkBAIC01Niw4ICs1Niw4IEBA
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IElEQkRhdGFiYXNlOjpjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzCiBJREJEYXRhYmFzZTo6SURCRGF0YWJhc2UoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U+IGJhY2tlbmQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykK
ICAgICAsIG1fYmFja2VuZChiYWNrZW5kKQotICAgICwgbV9ub05ld1RyYW5zYWN0aW9ucyhmYWxz
ZSkKLSAgICAsIG1fc3RvcHBlZChmYWxzZSkKKyAgICAsIG1fY2xvc2VQZW5kaW5nKGZhbHNlKQor
ICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKIHsKICAgICAvLyBXZSBwYXNzIGEgcmVmZXJl
bmNlIG9mIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRlZC4KICAgICByZWxheEFk
b3B0aW9uUmVxdWlyZW1lbnQoKTsKQEAgLTY2LDYgKzY2LDcgQEAgSURCRGF0YWJhc2U6OklEQkRh
dGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2UKIAogSURCRGF0YWJhc2U6On5JREJEYXRhYmFzZSgpCiB7CisgICAgY2xvc2UoKTsKICAg
ICBtX2RhdGFiYXNlQ2FsbGJhY2tzLT51bnJlZ2lzdGVyRGF0YWJhc2UodGhpcyk7CiB9CiAKQEAg
LTE0OSw3ICsxNTAsNyBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6
dHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udAogICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQotICAgIGlmIChtX25vTmV3VHJhbnNhY3Rpb25zKSB7CisgICAgaWYgKG1fY2xvc2VQZW5k
aW5nKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VS
UjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTcwLDcgKzE3MSwxMyBAQCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udAogCiB2b2lkIElEQkRhdGFiYXNlOjpjbG9zZSgpCiB7Ci0gICAgaWYg
KG1fbm9OZXdUcmFuc2FjdGlvbnMpCisgICAgaWYgKG1fY2xvc2VQZW5kaW5nKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2Nsb3NlUGVuZGluZyA9IHRydWU7CisgICAgbV9iYWNrZW5kLT5jbG9z
ZShtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKKworICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEV2ZW50UXVl
dWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsK
QEAgLTE4MiwxMyArMTg5LDEzIEBAIHZvaWQgSURCRGF0YWJhc2U6OmNsb3NlKCkKICAgICAgICAg
Ym9vbCByZW1vdmVkID0gZXZlbnRRdWV1ZS0+Y2FuY2VsRXZlbnQobV9lbnF1ZXVlZEV2ZW50c1tp
XS5nZXQoKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAgICAg
fQotCi0gICAgbV9ub05ld1RyYW5zYWN0aW9ucyA9IHRydWU7Ci0gICAgbV9iYWNrZW5kLT5jbG9z
ZShtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZTo6b25WZXJzaW9u
Q2hhbmdlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKKyAgICBpZiAobV9jb250ZXh0U3RvcHBl
ZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBl
bnF1ZXVlRXZlbnQoSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUodmVyc2lvbiwgZXZlbnRO
YW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCkpOwogfQogCkBAIC0xOTksNyArMjA2LDcgQEAgYm9v
bCBJREJEYXRhYmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAgICAvLyAgICAgICAg
Z2V0IGEgaGFuZGxlIHRvIHVzIG9yIGFueSBkZXJpdmF0aXZlIHRyYW5zYWN0aW9uL3JlcXVlc3Qg
b2JqZWN0IGFuZCBhbnkKICAgICAvLyAgICAgICAgb2YgdGhvc2UgaGF2ZSBldmVudCBsaXN0ZW5l
cnMuIFRoaXMgaXMgaW4gb3JkZXIgdG8gaGFuZGxlIHVzZXIgZ2VuZXJhdGVkCiAgICAgLy8gICAg
ICAgIGV2ZW50cyBwcm9wZXJseS4KLSAgICByZXR1cm4gIW1fc3RvcHBlZCB8fCBBY3RpdmVET01P
YmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOworICAgIHJldHVybiAhbV9jb250ZXh0U3RvcHBl
ZCB8fCBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOwogfQogCiB2b2lkIElE
QkRhdGFiYXNlOjpvcGVuKCkKQEAgLTIwOSw2ICsyMTYsOCBAQCB2b2lkIElEQkRhdGFiYXNlOjpv
cGVuKCkKIAogdm9pZCBJREJEYXRhYmFzZTo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
IGV2ZW50KQogeworICAgIEFTU0VSVCghbV9jb250ZXh0U3RvcHBlZCk7CisgICAgQVNTRVJUKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwogICAgIGV2ZW50LT5zZXRUYXJn
ZXQodGhpcyk7CiAgICAgZXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KGV2ZW50LmdldCgpKTsKQEAg
LTIyNywxMCArMjM2LDExIEBAIGJvb2wgSURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4gZXZlbnQpCiAKIHZvaWQgSURCRGF0YWJhc2U6OnN0b3AoKQogeworICAgIEFj
dGl2ZURPTU9iamVjdDo6c3RvcCgpOwogICAgIC8vIFN0b3AgZmlyZXMgYXQgYSBkZXRlcm1pbmlz
dGljIHRpbWUsIHNvIHdlIG5lZWQgdG8gY2FsbCBjbG9zZSBpbiBpdC4KICAgICBjbG9zZSgpOwog
Ci0gICAgbV9zdG9wcGVkID0gdHJ1ZTsKKyAgICBtX2NvbnRleHRTdG9wcGVkID0gdHJ1ZTsKIH0K
IAogY29uc3QgQXRvbWljU3RyaW5nJiBJREJEYXRhYmFzZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmgKaW5kZXggNTIwZTAxM2Y5OWEwYThhZGZl
NTllZjc2YmU2Njc0OWZhNDU2ZjhjYS4uZjhhZWYyMjU5OWIxYTU2NGNjODhhNjcwZDJjNjI0Nzdh
NTU0NTc0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaApAQCAtNzgsOCArNzgs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uVmVyc2lvbkNoYW5nZShjb25zdCBTdHJp
bmcmIHJlcXVlc3RlZFZlcnNpb24pOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0Ci0gICAgdmly
dHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBz
dG9wKCk7CisgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgT1ZFUlJJREU7CiAKICAgICAvLyBFdmVudFRh
cmdldAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29u
c3Q7CkBAIC0xMDUsOCArMTA1LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBt
X3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKIAotICAgIGJvb2wgbV9ub05ld1RyYW5zYWN0aW9u
czsKLSAgICBib29sIG1fc3RvcHBlZDsKKyAgICBib29sIG1fY2xvc2VQZW5kaW5nOworICAgIGJv
b2wgbV9jb250ZXh0U3RvcHBlZDsKIAogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0
RGF0YTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKaW5kZXggMDU4YzRkM2U1
YWVkOTZkZDc1ZmU3YTIzNDMxODU1Mjk2MDJlOTc5NC4uZjU0Y2Y3MWViMzg2MGUzMGU5YzAzMzA0
NzRiYzUyODFjNzdlNWNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCkBA
IC01MCw3ICs1MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIElEQkZhY3Rvcnk6OklEQkZh
Y3RvcnkoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnkpCi0gICAgOiBtX2ZhY3Rv
cnlCYWNrZW5kKGZhY3RvcnkpCisgICAgOiBtX2JhY2tlbmQoZmFjdG9yeSkKIHsKICAgICAvLyBX
ZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRl
ZC4KICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKQEAgLTczLDcgKzczLDcgQEAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnQKIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0g
SURCUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7CiAg
ICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3Vw
KCkuZ3JvdXBTZXR0aW5ncygpOwotICAgIG1fZmFjdG9yeUJhY2tlbmQtPmdldERhdGFiYXNlTmFt
ZXMocmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgp
LCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSk7CisgICAgbV9iYWNrZW5k
LT5nZXREYXRhYmFzZU5hbWVzKHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBk
b2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkp
OwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCkBAIC05NSw3ICs5NSw3IEBAIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBTCiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOwogICAgIEdyb3Vw
U2V0dGluZ3MqIGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3Vw
U2V0dGluZ3MoKTsKLSAgICBtX2ZhY3RvcnlCYWNrZW5kLT5vcGVuKG5hbWUsIHJlcXVlc3QsIGRv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5n
cy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIG1fYmFja2VuZC0+b3BlbihuYW1lLCBy
ZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdy
b3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsKICAgICByZXR1cm4gcmVxdWVz
dDsKIH0KIApAQCAtMTE3LDcgKzExNyw3IEBAIFBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJl
cXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvCiAKICAg
ICBSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IHJlcXVlc3QgPSBJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJREJBbnk6OmNyZWF0ZU51bGwoKSwgIiIpOwog
ICAgIEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91
cCgpLmdyb3VwU2V0dGluZ3MoKTsKLSAgICBtX2ZhY3RvcnlCYWNrZW5kLT5kZWxldGVEYXRhYmFz
ZShuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZy
YW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsKKyAgICBtX2Jh
Y2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9y
aWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJh
c2VQYXRoKCkpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeS5oCmluZGV4IDQxNzM2MmEyNTRlODA5YmE5NGZiZmVlN2MxMzZiNjFmYmIzNWUwODgu
LjQ2MTFjYjZjNGZlODM5OTBiNDcyNGE0M2JmMDljOWE1YTk1ZDg4OGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRmFjdG9yeS5oCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSURCRmFjdG9yeShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSopOwogCi0gICAgUmVmUHRy
PElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2ZhY3RvcnlCYWNrZW5kOworICAgIFJlZlB0
cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmpl
Y3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcApp
bmRleCBhZjQ1ZWQ0YjFkYzA3YjAyOTEzZGVjNzkxMDg1OTA4OTQzNjJjMzM1Li4xMjRhMDIzZmY3
YTliZjJlZGIzNDM5NjBhMmVhMjgzM2ZjY2VlNTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQk9iamVjdFN0b3JlLmNwcApAQCAtNDQsMTAgKzQ0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZWZhdWx0RGlyZWN0aW9uID0gSURCQ3Vy
c29yOjpORVhUOwogCiBJREJPYmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGlkYk9iamVjdFN0b3JlLCBJREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24pCi0gICAgOiBtX29iamVjdFN0b3JlKGlkYk9iamVjdFN0b3JlKQor
ICAgIDogbV9iYWNrZW5kKGlkYk9iamVjdFN0b3JlKQogICAgICwgbV90cmFuc2FjdGlvbih0cmFu
c2FjdGlvbikKIHsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZSk7CisgICAgQVNTRVJUKG1fYmFj
a2VuZCk7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOwogICAgIC8vIFdlIHBhc3MgYSByZWZl
cmVuY2UgdG8gdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgogICAgIHJlbGF4
QWRvcHRpb25SZXF1aXJlbWVudCgpOwpAQCAtNTUsMTcgKzU1LDE3IEBAIElEQk9iamVjdFN0b3Jl
OjpJREJPYmplY3RTdG9yZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZT4gaWRiT2JqCiAKIFN0cmluZyBJREJPYmplY3RTdG9yZTo6bmFtZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fb2JqZWN0U3RvcmUtPm5hbWUoKTsKKyAgICByZXR1cm4gbV9iYWNrZW5kLT5uYW1l
KCk7CiB9CiAKIFN0cmluZyBJREJPYmplY3RTdG9yZTo6a2V5UGF0aCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fb2JqZWN0U3RvcmUtPmtleVBhdGgoKTsKKyAgICByZXR1cm4gbV9iYWNrZW5kLT5r
ZXlQYXRoKCk7CiB9CiAKIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6
OmluZGV4TmFtZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX29iamVjdFN0b3JlLT5pbmRleE5h
bWVzKCk7CisgICAgcmV0dXJuIG1fYmFja2VuZC0+aW5kZXhOYW1lcygpOwogfQogCiBJREJUcmFu
c2FjdGlvbiogSURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uKCkgY29uc3QKQEAgLTgxLDcgKzgx
LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3MKICAgICB9CiAKICAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9vYmplY3RTdG9yZS0+Z2V0KGtl
eSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgbV9iYWNrZW5k
LT5nZXQoa2V5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBp
ZiAoZWMpIHsKICAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKICAgICAgICAgcmV0
dXJuIDA7CkBAIC05Nyw3ICs5Nyw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzCiAgICAgfQog
CiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29u
dGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1f
b2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U6OkFkZE9ubHksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAg
IG1fYmFja2VuZC0+cHV0KHZhbHVlLCBrZXksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTo6QWRkT25seSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAg
aWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTEzLDcgKzExMyw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2Jq
ZWN0U3RvcmU6OnB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzCiAgICAg
fQogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAg
IG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U6OkFkZE9yVXBkYXRlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVj
KTsKKyAgICBtX2JhY2tlbmQtPnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OkFkZE9yVXBkYXRlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCks
IGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMjksNyArMTI5LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY28KICAgICB9CiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5n
ZXQoKSk7Ci0gICAgbV9vYmplY3RTdG9yZS0+ZGVsZXRlRnVuY3Rpb24oa2V5LCByZXF1ZXN0LCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZUZ1bmN0
aW9uKGtleSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYg
KGVjKSB7CiAgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CiAgICAgICAgIHJldHVy
biAwOwpAQCAtMTQwLDcgKzE0MCw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvCiBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjbGVhcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9vYmplY3RTdG9yZS0+Y2xlYXIocmVx
dWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgbV9iYWNrZW5kLT5jbGVh
cihyZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoZWMpIHsK
ICAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0xNTgsNyArMTU4LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmNy
ZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW4KICAgICBib29sIHVuaXF1
ZSA9IGZhbHNlOwogICAgIG9wdGlvbnMuZ2V0KCJ1bmlxdWUiLCB1bmlxdWUpOwogCi0gICAgUmVm
UHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBtX29iamVjdFN0b3JlLT5jcmVh
dGVJbmRleChuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gbV9iYWNr
ZW5kLT5jcmVhdGVJbmRleChuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG1fdHJhbnNhY3Rpb24tPmJh
Y2tlbmQoKSwgZWMpOwogICAgIEFTU0VSVCghaW5kZXggIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0
IGdldCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBB
bmQgdmljZSB2ZXJzYS4KICAgICBpZiAoIWluZGV4KQogICAgICAgICByZXR1cm4gMDsKQEAgLTE2
Nyw3ICsxNjcsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRl
SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbgogCiBQYXNzUmVmUHRyPElEQklu
ZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9
IG1fb2JqZWN0U3RvcmUtPmluZGV4KG5hbWUsIGVjKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1fYmFja2VuZC0+aW5kZXgobmFtZSwgZWMpOwogICAgIEFT
U0VSVCghaW5kZXggIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBhbiBpbmRleCwgd2Ugc2hv
dWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBBbmQgdmljZSB2ZXJzYS4KICAgICBp
ZiAoIWluZGV4KQogICAgICAgICByZXR1cm4gMDsKQEAgLTE3Niw3ICsxNzYsNyBAQCBQYXNzUmVm
UHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYwogCiB2b2lkIElEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleChjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1fb2JqZWN0U3RvcmUt
PmRlbGV0ZUluZGV4KG5hbWUsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIG1f
YmFja2VuZC0+ZGVsZXRlSW5kZXgobmFtZSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7
CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3Io
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
cmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0x
ODksNyArMTg5LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXgKIAogICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3Jl
YXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICByZXF1ZXN0LT5zZXRDdXJzb3JU
eXBlKElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Ok9iamVjdFN0b3JlQ3Vyc29yKTsKLSAgICBt
X29iamVjdFN0b3JlLT5vcGVuQ3Vyc29yKHJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1fdHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIG1fYmFja2VuZC0+b3BlbkN1cnNvcihyYW5n
ZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAg
ICBpZiAoZWMpIHsKICAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKICAgICAgICAg
cmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0
b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgKaW5kZXggMTQ2
NThhZGM2YmFiYmZlMmM0YzZmNmNmNTQ5YjI1MzE2ZGM1YWIzNC4uOWI1YWE2YjJkM2Y1MzczMWJj
NjE2NTliOTY1NmMzNjM0OWJjZjI2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJPYmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0
U3RvcmUuaApAQCAtODMsNyArODMsNyBAQCBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlKFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiwgSURCVHJhbnNhY3Rpb24q
KTsKICAgICB2b2lkIHJlbW92ZVRyYW5zYWN0aW9uRnJvbVBlbmRpbmdMaXN0KCk7CiAKLSAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBtX29iamVjdFN0b3JlOworICAg
IFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKICAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJSZXF1ZXN0LmNwcAppbmRleCBjY2QxYjQwYjFkNmE0ZjU3MmFiMmQ1ZTllYzMyZTY3
Njc2ZmU1YmIxLi4zMDk2ZDdmZjBkMGQ5YWU0NWM0YTY3MzliNTVhZDVhNTg3YTlhOTUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKQEAgLTU0LDcgKzU0LDggQEAgSURCUmVx
dWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPElEQkFueT4gc291cmMKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fdHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24pCiAgICAgLCBtX3JlYWR5U3RhdGUoTE9BRElORykKLSAgICAsIG1f
ZmluaXNoZWQoZmFsc2UpCisgICAgLCBtX3JlcXVlc3RGaW5pc2hlZChmYWxzZSkKKyAgICAsIG1f
Y29udGV4dFN0b3BwZWQoZmFsc2UpCiAgICAgLCBtX2N1cnNvclR5cGUoSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6SW52YWxpZEN1cnNvclR5cGUpCiAgICAgLCBtX2N1cnNvcigwKQogewpAQCAt
MTIyLDcgKzEyMyw3IEBAIHZvaWQgSURCUmVxdWVzdDo6bWFya0Vhcmx5RGVhdGgoKQogCiBib29s
IElEQlJlcXVlc3Q6OnJlc2V0UmVhZHlTdGF0ZShJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24p
CiB7Ci0gICAgQVNTRVJUKCFtX2ZpbmlzaGVkKTsKKyAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlz
aGVkKTsKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBBU1NFUlQo
dHJhbnNhY3Rpb24gPT0gbV90cmFuc2FjdGlvbik7CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBE
T05FKQpAQCAtMTQ1LDEyICsxNDYsMTMgQEAgSURCQW55KiBJREJSZXF1ZXN0Ojpzb3VyY2UoKQog
CiB2b2lkIElEQlJlcXVlc3Q6OmFib3J0KCkKIHsKKyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8
fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAo
bV9yZWFkeVN0YXRlICE9IExPQURJTkcpIHsKICAgICAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9
PSBET05FKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgRXZlbnRRdWV1ZSogZXZlbnRRdWV1
ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgewpAQCAtMjAyLDcg
KzIwNCw2IEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKIHsKICAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYm
IG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7CiAgICAgQVNTRVJUKG1fY3Vy
c29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSk7
Ci0KICAgICBSZWZQdHI8SURCQ3Vyc29yPiBjdXJzb3I7CiAgICAgaWYgKG1fY3Vyc29yVHlwZSA9
PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikKICAgICAgICAgY3Vy
c29yID0gSURCQ3Vyc29yOjpjcmVhdGUoYmFja2VuZCwgdGhpcywgbV9zb3VyY2UuZ2V0KCksIG1f
dHJhbnNhY3Rpb24uZ2V0KCkpOwpAQCAtMjE3LDYgKzIxOCw5IEBAIHZvaWQgSURCUmVxdWVzdDo6
b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkK
IHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlPiBiYWNrZW5kKQogewogICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJv
ck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKKyAgICBpZiAobV9jb250ZXh0U3RvcHBl
ZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBS
ZWZQdHI8SURCRGF0YWJhc2U+IGlkYkRhdGFiYXNlID0gSURCRGF0YWJhc2U6OmNyZWF0ZShzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCksIGJhY2tlbmQpOwogICAgIGlkYkRhdGFiYXNlLT5vcGVuKCk7
CiAKQEAgLTIzNCwxMCArMjM4LDEzIEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NS
ZWZQdHI8SURCS2V5PiBpZGJLZXkpCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gcHJwQmFja2VuZCkKIHsKICAgICBB
U1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3Vs
dCk7Ci0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCA9IHBycEJhY2tlbmQ7CisKKyAgICBp
ZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7CisgICAg
ICAgIGJhY2tlbmQtPmFib3J0KCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kID0gcHJwQmFja2VuZDsK
ICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGZyb250ZW5kID0gSURCVHJhbnNhY3Rpb246OmNy
ZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGJhY2tlbmQsIG1fc291cmNlLT5pZGJEYXRh
YmFzZSgpLmdldCgpKTsKICAgICBiYWNrZW5kLT5zZXRDYWxsYmFja3MoZnJvbnRlbmQuZ2V0KCkp
OwogICAgIG1fdHJhbnNhY3Rpb24gPSBmcm9udGVuZDsKQEAgLTI2NCw3ICsyNzEsNiBAQCB2b2lk
IElEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24oKQogewogICAgIEFTU0VSVCgh
bV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKICAg
ICBBU1NFUlQobV9jdXJzb3IpOwotCiAgICAgc2V0UmVzdWx0Q3Vyc29yKG1fY3Vyc29yLCBtX2N1
cnNvclR5cGUpOwogICAgIG1fY3Vyc29yLmNsZWFyKCk7CiAgICAgZW5xdWV1ZUV2ZW50KGNyZWF0
ZVN1Y2Nlc3NFdmVudCgpKTsKQEAgLTI3NSw3ICsyODEsMTggQEAgYm9vbCBJREJSZXF1ZXN0Ojpo
YXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogICAgIC8vIEZJWE1FOiBJbiBhbiBpZGVhbCB3b3Js
ZCwgd2Ugc2hvdWxkIHJldHVybiB0cnVlIGFzIGxvbmcgYXMgYW55b25lIGhhcyBhIG9yIGNhbgog
ICAgIC8vICAgICAgICBnZXQgYSBoYW5kbGUgdG8gdXMgYW5kIHdlIGhhdmUgZXZlbnQgbGlzdGVu
ZXJzLiBUaGlzIGlzIG9yZGVyIHRvIGhhbmRsZQogICAgIC8vICAgICAgICB1c2VyIGdlbmVyYXRl
ZCBldmVudHMgcHJvcGVybHkuCi0gICAgcmV0dXJuICFtX2ZpbmlzaGVkIHx8IEFjdGl2ZURPTU9i
amVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7CisgICAgcmV0dXJuICFtX3JlcXVlc3RGaW5pc2hl
ZCB8fCBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOworfQorCit2b2lkIElE
QlJlcXVlc3Q6OnN0b3AoKQoreworICAgIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpOworICAgIGlm
IChtX2NvbnRleHRTdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHRTdG9w
cGVkID0gdHJ1ZTsKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IExPQURJTkcpCisgICAgICAgIG1h
cmtFYXJseURlYXRoKCk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25CbG9ja2VkKCkKQEAgLTI5
NSw3ICszMTIsOCBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBJREJSZXF1ZXN0OjpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QKIAogYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewotICAgIEFTU0VSVCghbV9maW5pc2hlZCk7Cisg
ICAgQVNTRVJUKCFtX3JlcXVlc3RGaW5pc2hlZCk7CisgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9w
cGVkKTsKICAgICBBU1NFUlQobV9lbnF1ZXVlZEV2ZW50cy5zaXplKCkpOwogICAgIEFTU0VSVChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0g
dGhpcyk7CkBAIC0zMjUsNyArMzQzLDcgQEAgYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAgLy8gSWYgdGhlIHJlc3VsdCB3YXMgb2Yg
dHlwZSBJREJDdXJzb3IsIG9yIGEgb25CbG9ja2VkIGV2ZW50LCB0aGVuIHdlJ2xsIGZpcmUgYWdh
aW4uCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCAm
JiBtX3Jlc3VsdCAmJiBtX3Jlc3VsdC0+dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29yVHlwZSAm
JiBtX3Jlc3VsdC0+dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZSkKLSAg
ICAgICAgbV9maW5pc2hlZCA9IHRydWU7CisgICAgICAgIG1fcmVxdWVzdEZpbmlzaGVkID0gdHJ1
ZTsKIAogICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7CiAgICAgICAgIC8vIElmIGFuIGVycm9yIGV2
ZW50IGFuZCB0aGUgZGVmYXVsdCB3YXNuJ3QgcHJldmVudGVkLi4uCkBAIC0zNDQsMTUgKzM2Miwx
OCBAQCB2b2lkIElEQlJlcXVlc3Q6OnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKQog
CiB2b2lkIElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkK
IHsKLSAgICBBU1NFUlQoIW1fZmluaXNoZWQpOwotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPCBE
T05FKTsKLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICBBU1NFUlQoIW1f
cmVxdWVzdEZpbmlzaGVkKTsKKworICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIEFTU0VSVChtX3JlYWR5
U3RhdGUgPCBET05FKTsKKwogICAgIEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMp
OwotICAgIGV2ZW50UXVldWUtPmVucXVldWVFdmVudChldmVudC5nZXQoKSk7Ci0gICAgbV9lbnF1
ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOworCisgICAgaWYgKGV2ZW50UXVldWUtPmVucXVldWVF
dmVudChldmVudC5nZXQoKSkpCisgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50
KTsKIH0KIAogRXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0OjpldmVudFRhcmdldERhdGEoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaAppbmRleCA0NmZlOGNmMGYxOWQ1ZGY1Y2JkYjg3
ZjQ3MzFkYjFkNWMzNDM2MTNlLi4xNTM1NTNjMTZjYmM3ZmNkNjQzM2FiNzFjM2MzNWZhNzg1MzBk
NDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaApAQCAtODcsNyArODcsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpOwogCiAgICAgLy8gQWN0aXZlRE9N
T2JqZWN0Ci0gICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURFOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OwpAQCAtMTE5
LDcgKzEyMCw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5z
YWN0aW9uOwogCiAgICAgUmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7Ci0gICAgYm9vbCBtX2Zpbmlz
aGVkOyAvLyBJcyBpdCBwb3NzaWJsZSB0aGF0IHdlJ2xsIGZpcmUgYW55IG1vcmUgZXZlbnRzPyBJ
ZiBub3QsIHdlJ3JlIGZpbmlzaGVkLgorICAgIGJvb2wgbV9yZXF1ZXN0RmluaXNoZWQ7IC8vIElz
IGl0IHBvc3NpYmxlIHRoYXQgd2UnbGwgZmlyZSBhbnkgbW9yZSBldmVudHM/IElmIG5vdCwgd2Un
cmUgZmluaXNoZWQuCisgICAgYm9vbCBtX2NvbnRleHRTdG9wcGVkOwogICAgIFZlY3RvcjxSZWZQ
dHI8RXZlbnQ+ID4gbV9lbnF1ZXVlZEV2ZW50czsKIAogICAgIC8vIE9ubHkgdXNlZCBpZiB0aGUg
cmVzdWx0IHR5cGUgd2lsbCBiZSBhIGN1cnNvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJU
cmFuc2FjdGlvbi5jcHAKaW5kZXggOWE1ZDY3MjhjYTJhMzVlYjg3YTY2MmU5NTIwNTVhM2JhMDgz
MjhiNy4uYTFkNDFlNjRmODJiYTVjOGEwOGY2ZTk0MWVjYTM5MTQ0Nzk3NTYwZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTUwLDcgKzUwLDggQEAgSURC
VHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8SURCVHIKICAgICAsIG1fYmFja2VuZChiYWNrZW5kKQogICAgICwgbV9k
YXRhYmFzZShkYikKICAgICAsIG1fbW9kZShtX2JhY2tlbmQtPm1vZGUoKSkKLSAgICAsIG1fZmlu
aXNoZWQoZmFsc2UpCisgICAgLCBtX3RyYW5zYWN0aW9uRmluaXNoZWQoZmFsc2UpCisgICAgLCBt
X2NvbnRleHRTdG9wcGVkKGZhbHNlKQogewogICAgIEFTU0VSVChtX2JhY2tlbmQpOwogICAgIElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmFkZFBlbmRpbmdUcmFuc2FjdGlvbihtX2JhY2tl
bmQuZ2V0KCkpOwpAQCAtNjcsNyArNjgsNyBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIElEQlRyYW5zYWN0aW9uOjpiYWNrZW5kKCkgY29uc3QKIAogYm9vbCBJREJUcmFuc2FjdGlv
bjo6ZmluaXNoZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZpbmlzaGVkOworICAgIHJldHVy
biBtX3RyYW5zYWN0aW9uRmluaXNoZWQ7CiB9CiAKIHVuc2lnbmVkIHNob3J0IElEQlRyYW5zYWN0
aW9uOjptb2RlKCkgY29uc3QKQEAgLTgyLDcgKzgzLDcgQEAgSURCRGF0YWJhc2UqIElEQlRyYW5z
YWN0aW9uOjpkYigpIGNvbnN0CiAKIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5z
YWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewotICAgIGlmIChtX2ZpbmlzaGVkKSB7CisgICAgaWYgKG1fdHJhbnNhY3Rpb25GaW5pc2hl
ZCkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTk3LDYgKzk4LDggQEAgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXAKIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6YWJvcnQoKQogeworICAgIGlmICht
X3RyYW5zYWN0aW9uRmluaXNoZWQpCisgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IHNlbGZSZWYgPSB0aGlzOwogICAgIGlmIChtX2JhY2tlbmQpCiAgICAgICAgIG1f
YmFja2VuZC0+YWJvcnQoKTsKQEAgLTExNSw2ICsxMTgsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9u
Ojp1bnJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0KiByZXF1ZXN0KQogCiB2b2lkIElEQlRyYW5z
YWN0aW9uOjpvbkFib3J0KCkKIHsKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25GaW5pc2hlZCk7
CiAgICAgd2hpbGUgKCFtX2NoaWxkUmVxdWVzdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIElEQlJl
cXVlc3QqIHJlcXVlc3QgPSAqbV9jaGlsZFJlcXVlc3RzLmJlZ2luKCk7CiAgICAgICAgIG1fY2hp
bGRSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdCk7CkBAIC0xMjQsMTQgKzEyOCwyMSBAQCB2b2lkIElE
QlRyYW5zYWN0aW9uOjpvbkFib3J0KCkKICAgICBpZiAobV9tb2RlID09IElEQlRyYW5zYWN0aW9u
OjpWRVJTSU9OX0NIQU5HRSkKICAgICAgICAgbV9kYXRhYmFzZS0+Y2xlYXJWZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24odGhpcyk7CiAKKyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBlbnF1ZXVlRXZlbnQo
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWJvcnRFdmVudCwgdHJ1ZSwgZmFsc2UpKTsKIH0K
IAogdm9pZCBJREJUcmFuc2FjdGlvbjo6b25Db21wbGV0ZSgpCiB7CisgICAgQVNTRVJUKCFtX3Ry
YW5zYWN0aW9uRmluaXNoZWQpOwogICAgIGlmIChtX21vZGUgPT0gSURCVHJhbnNhY3Rpb246OlZF
UlNJT05fQ0hBTkdFKQogICAgICAgICBtX2RhdGFiYXNlLT5jbGVhclZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbih0aGlzKTsKIAorICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGVucXVldWVFdmVudChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0K
IApAQCAtMTQwLDcgKzE1MSw3IEBAIGJvb2wgSURCVHJhbnNhY3Rpb246Omhhc1BlbmRpbmdBY3Rp
dml0eSgpIGNvbnN0CiAgICAgLy8gRklYTUU6IEluIGFuIGlkZWFsIHdvcmxkLCB3ZSBzaG91bGQg
cmV0dXJuIHRydWUgYXMgbG9uZyBhcyBhbnlvbmUgaGFzIGEgb3IgY2FuCiAgICAgLy8gICAgICAg
IGdldCBhIGhhbmRsZSB0byB1cyBvciBhbnkgY2hpbGQgcmVxdWVzdCBvYmplY3QgYW5kIGFueSBv
ZiB0aG9zZSBoYXZlCiAgICAgLy8gICAgICAgIGV2ZW50IGxpc3RlbmVycy4gVGhpcyBpcyAgaW4g
b3JkZXIgdG8gaGFuZGxlIHVzZXIgZ2VuZXJhdGVkIGV2ZW50cyBwcm9wZXJseS4KLSAgICByZXR1
cm4gIW1fZmluaXNoZWQgfHwgQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKTsK
KyAgICByZXR1cm4gIW1fdHJhbnNhY3Rpb25GaW5pc2hlZCB8fCBBY3RpdmVET01PYmplY3Q6Omhh
c1BlbmRpbmdBY3Rpdml0eSgpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIElEQlRyYW5zYWN0
aW9uOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKQEAgLTE1NSwxMSArMTY2LDEwIEBAIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIElEQlRyYW5zYWN0aW9uOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QKIAogYm9vbCBJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCkKIHsKLSAgICBBU1NFUlQoIW1fZmluaXNoZWQpOworICAgIEFTU0VSVCghbV90
cmFuc2FjdGlvbkZpbmlzaGVkKTsKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKICAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpID09IHRoaXMpOwotICAgIEFTU0VSVCghbV9m
aW5pc2hlZCk7Ci0gICAgbV9maW5pc2hlZCA9IHRydWU7CisgICAgbV90cmFuc2FjdGlvbkZpbmlz
aGVkID0gdHJ1ZTsKIAogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsK
ICAgICB0YXJnZXRzLmFwcGVuZCh0aGlzKTsKQEAgLTE3NCwyNiArMTg0LDIxIEBAIGJvb2wgSURC
VHJhbnNhY3Rpb246OmNhblN1c3BlbmQoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUZWNobmlj
YWxseSB3ZSBjYW4gc3VzcGVuZCBiZWZvcmUgdGhlIGZpcnN0IHJlcXVlc3QgaXMgc2NoZWR1bGUK
ICAgICAvLyAgICAgICAgYW5kIGFmdGVyIHRoZSBjb21wbGV0ZS9hYm9ydCBldmVudCBpcyBlbnF1
ZXVlZC4KLSAgICByZXR1cm4gbV9maW5pc2hlZDsKKyAgICByZXR1cm4gbV90cmFuc2FjdGlvbkZp
bmlzaGVkOwogfQogCi12b2lkIElEQlRyYW5zYWN0aW9uOjpjb250ZXh0RGVzdHJveWVkKCkKK3Zv
aWQgSURCVHJhbnNhY3Rpb246OnN0b3AoKQogewotICAgIEFjdGl2ZURPTU9iamVjdDo6Y29udGV4
dERlc3Ryb3llZCgpOwotCi0gICAgLy8gTXVzdCBoYXBwZW4gaW4gY29udGV4dERlc3Ryb3llZCBz
aW5jZSBpdCBjYW4gcmVzdWx0IGluIEFjdGl2ZURPTU9iamVjdHMgYmVpbmcgZGVzdHJ1Y3RlZAot
ICAgIC8vIChhbmQgY29udGV4dERlc3Ryb3llZCBpcyB0aGUgb25seSBvbmUgcmVzaWxpZW50IGFn
YWluc3QgdGhpcykuCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBzZWxmUmVmID0gdGhpczsK
LSAgICBpZiAobV9iYWNrZW5kKQotICAgICAgICBtX2JhY2tlbmQtPmFib3J0KCk7CisgICAgQWN0
aXZlRE9NT2JqZWN0OjpzdG9wKCk7CisgICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7CiAKLSAg
ICBtX2ZpbmlzaGVkID0gdHJ1ZTsKKyAgICBhYm9ydCgpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0
aW9uOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiB7Ci0gICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSghbV9maW5pc2hlZCwgIkEgZmluaXNoZWQgdHJhbnNhY3Rpb24gdHJpZWQg
dG8gZW5xdWV1ZSBhbiBldmVudCBvZiB0eXBlICVzLiIsIGV2ZW50LT50eXBlKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghbV90cmFuc2FjdGlvbkZpbmlzaGVkLCAiQSBmaW5pc2hlZCB0
cmFuc2FjdGlvbiB0cmllZCB0byBlbnF1ZXVlIGFuIGV2ZW50IG9mIHR5cGUgJXMuIiwgZXZlbnQt
PnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9jb250ZXh0U3RvcHBl
ZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBF
dmVudFF1ZXVlKiBldmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1
ZXVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgKaW5kZXggYmU2OTVj
NWFlNjk0ZTIyYTlmOTMxNzE5ZDE4YjY5NzYxNTk5MjY4NC4uY2VjNDZkNmJhNjllMWQ5N2Y5NTBl
N2ZjYjQ4YWQzODFhMjFhZjBjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b24uaApAQCAtODAsOSArODAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gRXZlbnRU
YXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsgfQogCiAgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0Ci0gICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRleHRE
ZXN0cm95ZWQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURFOwogCiAgICAgdXNpbmcgUmVmQ291bnRl
ZDxJREJUcmFuc2FjdGlvbkNhbGxiYWNrcz46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPElE
QlRyYW5zYWN0aW9uQ2FsbGJhY2tzPjo6ZGVyZWY7CkBAIC0xMDEsNyArMTAxLDggQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7
CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBtX2RhdGFiYXNlOwogICAgIHVuc2lnbmVkIHNob3J0
IG1fbW9kZTsKLSAgICBib29sIG1fZmluaXNoZWQ7IC8vIElzIGl0IHBvc3NpYmxlIHRoYXQgd2Un
bGwgZmlyZSBhbnkgbW9yZSBldmVudHMgb3IgYWxsb3cgYW55IG5ldyB0cmFuc2FjdGlvbnM/IElm
IG5vdCwgd2UncmUgZmluaXNoZWQuCisgICAgYm9vbCBtX3RyYW5zYWN0aW9uRmluaXNoZWQ7IC8v
IElzIGl0IHBvc3NpYmxlIHRoYXQgd2UnbGwgZmlyZSBhbnkgbW9yZSBldmVudHMgb3IgYWxsb3cg
YW55IG5ldyByZXF1ZXN0cz8gSWYgbm90LCB3ZSdyZSBmaW5pc2hlZC4KKyAgICBib29sIG1fY29u
dGV4dFN0b3BwZWQ7CiAKICAgICBMaXN0SGFzaFNldDxJREJSZXF1ZXN0Kj4gbV9jaGlsZFJlcXVl
c3RzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmNwcAppbmRleCA4YTEyMjY0YWM3NjA5M2ExMjFiOWRkYmMzMTgzZmIwOTE2MThl
MGMyLi5iNDUyNjAwMzFkYzc0MmFmZTFmNzRiNmUwOTU4YzAxNzU2ZTA0OGE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAK
QEAgLTEyOSw3ICsxMjksOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0
KCkKICAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soMCk7CiAgICAgfQogCi0gICAgbV9jYWxsYmFj
a3MtPm9uQWJvcnQoKTsKKyAgICBpZiAobV9jYWxsYmFja3MpCisgICAgICAgIG1fY2FsbGJhY2tz
LT5vbkFib3J0KCk7CiAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5k
aWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoKS0+aXNBY3RpdmUodGhpcykpOwogICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CkBAIC0xODMsNiArMTg0LDcgQEAgdm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQogICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGlu
ZyB0aGlzIG1ldGhvZC4KICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gc2Vs
Zih0aGlzKTsKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBSdW5uaW5nKTsKKyAgICBBU1NFUlQobV90
YXNrUXVldWUuaXNFbXB0eSgpKTsKIAogICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKICAgICBjbG9z
ZU9wZW5DdXJzb3JzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckV2ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVl
LmNwcAppbmRleCA4YTNlYzAxMWJlODk3YmUyNThmNmQ4MzUxYmNlYmMwOWFhMjcyYmYwLi5mNTFk
MmRjNTNiMzhmNzVkZmE5Nzc0YTcxYmUzYmEwZTE0MGNkOTliIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKQEAgLTk1LDE0ICs5NSwxNSBAQCB2b2lkIFdv
cmtlckV2ZW50UXVldWU6OnJlbW92ZUV2ZW50KEV2ZW50KiBldmVudCkKICAgICBtX2V2ZW50VGFz
a01hcC5yZW1vdmUoZXZlbnQpOwogfQogCi12b2lkIFdvcmtlckV2ZW50UXVldWU6OmVucXVldWVF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK2Jvb2wgV29ya2VyRXZlbnRRdWV1ZTo6
ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogewogICAgIGlmIChtX2lz
Q2xvc2VkKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBSZWZQ
dHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CiAgICAgT3duUHRyPEV2ZW50RGlzcGF0Y2hlclRh
c2s+IHRhc2sgPSBFdmVudERpc3BhdGNoZXJUYXNrOjpjcmVhdGUoZXZlbnQsIHRoaXMpOwogICAg
IG1fZXZlbnRUYXNrTWFwLmFkZChldmVudC5yZWxlYXNlKCksIHRhc2suZ2V0KCkpOwogICAgIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2sodGFzay5yZWxlYXNlKCkpOworICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIFdvcmtlckV2ZW50UXVldWU6OmNhbmNlbEV2ZW50KEV2ZW50
KiBldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRR
dWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmgKaW5kZXgg
NDY3MzRkNzJmNjQxNjFiODA0NWE1YTQzNWQ3NGVjZWEyNGM0OGQ1NS4uMmIwZjFmYmNiZTIxYWVh
ZGNlZTQ5NTEzMTBjNWNkOWY5NmNkY2I3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJFdmVudFF1ZXVlLmgKQEAgLTQ2LDkgKzQ2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfldv
cmtlckV2ZW50UXVldWUoKTsKIAogICAgIC8vIEV2ZW50UXVldWUKLSAgICB2aXJ0dWFsIHZvaWQg
ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuY2Vs
RXZlbnQoRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKKyAgICB2aXJ0dWFsIGJv
b2wgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGJvb2wgY2FuY2VsRXZlbnQoRXZlbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xv
c2UoKSBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBXb3JrZXJFdmVudFF1ZXVl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>