<?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>204919</bug_id>
          
          <creation_ts>2019-12-05 14:26:40 -0800</creation_ts>
          <short_desc>The compiler thread should not adjust Identifier refCounts.</short_desc>
          <delta_ts>2019-12-07 10:57:39 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1596004</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-05 14:26:40 -0800</bug_when>
    <thetext>&lt;rdar://problem/57426861&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596027</commentid>
    <comment_count>1</comment_count>
      <attachid>384960</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-05 14:50:51 -0800</bug_when>
    <thetext>Created attachment 384960
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596038</commentid>
    <comment_count>2</comment_count>
      <attachid>384960</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-05 15:02:01 -0800</bug_when>
    <thetext>Comment on attachment 384960
proposed patch.

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

r- because of bug I noticed

&gt; Source/JavaScriptCore/bytecode/GetByStatus.h:98
&gt; +    using IdentifierKeepAlive = std::function&lt;void(Box&lt;Identifier&gt;)&gt;;

let&apos;s use WTF::SharedTask so that we don&apos;t repeatedly copy around the std::function struct. Instead, we just ref count it.

&gt; Source/JavaScriptCore/dfg/DFGPlan.h:121
&gt; +        m_identifiersKeptAliveForCleanUp.append(WTFMove(identifier));

let&apos;s add a branch here:
if (identifier)
    m_identifiersKeptAliveForCleanUp.append(WTFMove(identifier));

So we don&apos;t waste memory in the vector for null entries

&gt; Source/JavaScriptCore/dfg/DFGWorklist.cpp:418
&gt; +        m_cancelledPlans.clear();

I think this is wrong, unfortunately. Imagine we&apos;re in an API scenario (or web worker scenario). We have multiple VMs. We&apos;re now deleting Plans for other VMs. This will lead to the race happening still.

I suggest writing a function like:
deleteCancelledPlansForVM(VM&amp;)

And I&apos;ll suggest again what I suggested in person, which is to assert that we&apos;re holding the current VM lock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596429</commentid>
    <comment_count>3</comment_count>
      <attachid>385055</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-06 16:30:47 -0800</bug_when>
    <thetext>Created attachment 385055
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596441</commentid>
    <comment_count>4</comment_count>
      <attachid>385055</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-06 17:04:44 -0800</bug_when>
    <thetext>Comment on attachment 385055
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGPlan.cpp:712
&gt; +    // a cancelled plan needs to keep its m_vm pointer to let the mutator know ]

remove &quot;]&quot;

&gt; Source/JavaScriptCore/dfg/DFGPlan.cpp:717
&gt; +    // Similarly, plans may be cancelled from the GC thread. In that case, the
&gt; +    // treatment is same as the above except that the cancelled plan will be
&gt; +    // kept alive in the worklist&apos;s m_keptAliveCancelledPlansFromGCThread.

when the vector&apos;s are unified, this paragraph can be omitted

&gt; Source/JavaScriptCore/dfg/DFGPlan.cpp:723
&gt; +    // We rely on this all over the place to filter out Cancelled plans.

you should say what &quot;this&quot; is. Specifically, a bit comparison against VM pointer fails

&gt; Source/JavaScriptCore/dfg/DFGWorklist.cpp:99
&gt; +        bool isInMutator = m_plan-&gt;unnukedVM()-&gt;currentThreadIsHoldingAPILock();

let&apos;s remove this and just always add it to the vector based on what we talked about

&gt; Source/JavaScriptCore/dfg/DFGWorklist.cpp:311
&gt; +void removeCancelledPlans(VM&amp; vm, HashSet&lt;RefPtr&lt;Plan&gt;&gt;&amp; removedPlans, Vector&amp; cancelledPlans)

once we have one vector, let&apos;s just put this below

&gt; Source/JavaScriptCore/dfg/DFGWorklist.cpp:330
&gt; +    HashSet&lt;RefPtr&lt;Plan&gt;&gt; removedPlans;

once the function is moved in here, you can conditionalize this on !ASSERT_DISABLED

&gt; Source/JavaScriptCore/dfg/DFGWorklist.h:118
&gt; +    Vector&lt;RefPtr&lt;Plan&gt;, 4&gt; m_keptAliveCancelledPlansFromGCThread;
&gt; +    Vector&lt;RefPtr&lt;Plan&gt;, 4&gt; m_keptAliveCancelledPlansFromCompilerThread;

let&apos;s join these together and perhaps let&apos;s call it  something like &quot;m_cancelledPlansPendingDestruction&quot; or something like that</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596474</commentid>
    <comment_count>5</comment_count>
      <attachid>385074</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-06 18:27:09 -0800</bug_when>
    <thetext>Created attachment 385074
patch for landing.

Thanks for the review.  I&apos;ve applied the changes Saam requested, and also fixed a missing JSLock acquisition in Debugger::detach().  This was causing the inspector tests to fail.

Let&apos;s try this on the EWS now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596512</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-06 22:08:58 -0800</bug_when>
    <thetext>Landed in r253243: &lt;http://trac.webkit.org/r253243&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596594</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-07 10:57:39 -0800</bug_when>
    <thetext>+ Build fix landed in r253257: &lt;http://trac.webkit.org/r253257&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384960</attachid>
            <date>2019-12-05 14:50:51 -0800</date>
            <delta_ts>2019-12-06 16:30:47 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-204919.patch</filename>
            <type>text/plain</type>
            <size>21673</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTMxNzApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE5LTEyLTA1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBUaGUgY29tcGlsZXIgdGhyZWFkIHNob3VsZCBub3QgYWRqdXN0IElkZW50
aWZpZXIgcmVmQ291bnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA0OTE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NzQyNjg2MT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9jb21w
aWxlci10aHJlYWQtc2hvdWxkLW5vdC1yZWYtaWRlbnRpZmllcnMuanM6IEFkZGVkLgorCiAyMDE5
LTEyLTA0ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pT
Q10gQUkgc2hvdWxkIGNvbnZlcnQgSXNDZWxsV2l0aFR5cGUgdG8gY29uc3RhbnQgd2hlbiBTdHJ1
Y3R1cmUgc2V0IGlzIGZpbml0ZQpJbmRleDogSlNUZXN0cy9zdHJlc3MvY29tcGlsZXItdGhyZWFk
LXNob3VsZC1ub3QtcmVmLWlkZW50aWZpZXJzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3Ry
ZXNzL2NvbXBpbGVyLXRocmVhZC1zaG91bGQtbm90LXJlZi1pZGVudGlmaWVycy5qcwkobm9uZXhp
c3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9jb21waWxlci10aHJlYWQtc2hvdWxkLW5vdC1yZWYt
aWRlbnRpZmllcnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNSBAQAorLy9AIHNsb3ch
CisvL0AgcnVuRGVmYXVsdAorCitmb3IgKGxldCBqID0gMDsgaiA8IDUwMDsgaisrKSB7CisgICAg
cnVuU3RyaW5nKGAKKworbGV0IGEgPSBTeW1ib2woJ2EnKTsKK2xldCBvID0geyBbYV06IDEgfTsK
KworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgT2JqZWN0LmdldE93blBy
b3BlcnR5U3ltYm9scyhvKTsKKyAgICBvW2FdOworfQorYCk7Cit9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MzE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NiBAQAorMjAxOS0xMi0wNSAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIGNvbXBpbGVyIHRocmVh
ZCBzaG91bGQgbm90IGFkanVzdCBJZGVudGlmaWVyIHJlZkNvdW50cy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDkxOQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNTc0MjY4NjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgMS4gUHJldmlvdXNseSwgaW4gdGhlIGNvbXBpbGVyIHRocmVhZCwgd2Ugd291
bGQgZ2V0IGEgU3ltYm9sIHVpZCB2aWEKKyAgICAgICAgICAgU3ltYm9sOjpwcml2YXRlTmFtZSgp
LnVpZCgpLiAgU3ltYm9sOjpwcml2YXRlTmFtZSgpIHJldHVybnMgYSBjb3B5IG9mIGl0cworICAg
ICAgICAgICBQcml2YXRlTmFtZSwgd2hpY2ggaW4gdHVybiByZXN1bHRzIGluIHJlZidpbmcgdGhl
IHVuZGVybHlpbmcgU3ltYm9sSW1wbC4KKyAgICAgICAgICAgVGhpcyByZXN1bHRzIGluIGEgcmFj
ZSBiZXR3ZWVuIHRoZSBtdXRhdG9yIGFuZCBjb21waWxlciB0aHJlYWRzIHRvIGFkanVzdCB0aGUK
KyAgICAgICAgICAgU3ltYm9sSW1wbCdzIHJlZkNvdW50LCB3aGljaCBtYXkgcmVzdWx0IGluIGNv
cnJ1cHRpb24uCisKKyAgICAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGJ5IGFkZGluZyBT
eW1ib2w6OnVpZCgpIHdoaWNoIHJldHVybiB0aGUgdW5kZXJseWluZworICAgICAgICAgICBTeW1i
b2xJbXBsIHdpdGhvdXQgcmVmJ2luZyBpdC4KKworICAgICAgICAyLiBQcmV2aW91c2x5LCBpbiB0
aGUgY29tcGlsZXIgdGhyZWFkLCB3ZSBhbHNvIGNyZWF0ZSBCb3g8SWRlbnRpZmllcj4gdmlhIGl0
cworICAgICAgICAgICBjb3B5IGNvbnN0cnVjdG9yLiAgVGhlIG9yaWdpbmFsIEJveDxJZGVudGlm
aWVyPiBpcyBpbnN0YW50aWF0ZWQgaW4gdGhlIG11dGF0b3IuCisgICAgICAgICAgIFRoZSBCb3g8
SWRlbnRpZmllcj4gcmVmJ3MgaXRzIGludGVybmFsIERhdGEgd2hpY2ggaXMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQsCisgICAgICAgICAgIHdoaWNoIGlzIHJlZidlZCBieSBhbGwgQm94PElkZW50aWZp
ZXI+IGZvciB0aGUgc2FtZSB1bmRlcmx5aW5nIElkZW50aWZpZXIuCisgICAgICAgICAgIFRoaXMg
ZW5zdXJlcyB0aGF0IHRoZSBjb21waWxlciB0aHJlYWQgZG9lcyBub3QgcmVmIHRoZSBJZGVudGlm
aWVyLgorCisgICAgICAgICAgIEhvd2V2ZXIsIHdoZW4gdGhlIEJveDxJZGVudGlmaWVyPiBpcyBk
ZXN0cnVjdGVkLCBpdCB3aWxsIGFsc28gY2hlY2sgaWYgaXQgaG9sZHMKKyAgICAgICAgICAgdGhl
IGxhc3QgcmVmIHRvIGl0cyBpbnRlcm5hbCBEYXRhLiAgSWYgc28sIGl0IHdpbGwgZGVzdHJ1Y3Qg
aXRzIERhdGEsIGFuZCB0aGUKKyAgICAgICAgICAgSWRlbnRpZmllciB0aGF0IGl0IGVtYmVkcy4g
IFRoaXMgcmVzdWx0cyBpbiB0aGUgY29tcGlsZXIgdGhyZWFkIHRyeWluZyB0byBkZXJlZgorICAg
ICAgICAgICB0aGUgU3RyaW5nSW1wbCByZWZlcmVuY2VkIGJ5IHRoZSBJZGVudGlmaWVyIGluIGEg
cmFjZSBhZ2FpbnN0IHRoZSBtdXRhdG9yLgorCisgICAgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMg
dGhpcyBieSBlbnN1cmluZyB0aGF0IGZvciBhbnkgQm94PElkZW50aWZpZXI+IGluc3RhbmNlIHVz
ZWQKKyAgICAgICAgICAgYnkgdGhlIGNvbXBpbGVyIHRocmVhZCwgd2Ugd2lsbCByZWdpc3RlciBh
bm90aGVyIGluc3RhbmNlIGluIHRoZSBERkc6OlBsYW4KKyAgICAgICAgICAgbV9pZGVudGlmaWVy
c0tlcHRBbGl2ZUZvckNsZWFuVXAgbGlzdCwgYW5kIGxldCB0aGUgbXV0YXRvciBkZXN0cnVjdCB0
aGF0CisgICAgICAgICAgIEJveDxJZGVudGlmaWVyPiBsYXRlciBpbiB0aGUgbXV0YXRvci4gIFRo
aXMgZW5zdXJlcyB0aGF0IHRoZSBjb21waWxlciB0aHJlYWQKKyAgICAgICAgICAgd2lsbCBuZXZl
ciBzZWUgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIGEgQm94PElkZW50aWZpZXI+J3MgaW50ZXJuYWwg
RGF0YSBhbmQKKyAgICAgICAgICAgYXZvaWQgdGhlIHJhY2UuCisKKyAgICAgICAgMy4gVGhpcyBw
YXRjaCBhbHNvIGZpeGVzIHRoZSBERkc6OldvcmtsaXN0IGNvZGUgdG8gZW5zdXJlIHRoYXQgYSBE
Rkc6OlBsYW4gaXMKKyAgICAgICAgICAgYWx3YXlzIGRlc3RydWN0ZWQgaW4gdGhlIG11dGF0b3Is
IGV2ZW4gaWYgdGhlIFBsYW4gd2FzIGNhbmNlbGxlZC4KKworICAgICAgICAgICBUaGlzLCBpbiB0
dXJuLCBlbmFibGVzIHVzIHRvIGFzc2VydCB0aGF0IHRoZSBQbGFuIGlzIG5ldmVyIGRlc3RydWN0
ZWQgaW4gdGhlCisgICAgICAgICAgIGNvbXBpbGVyIHRocmVhZC4KKworICAgICAgICAqIGJ5dGVj
b2RlL0dldEJ5U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6OmNvbXB1dGVG
b3IpOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91
dEV4aXRTaXRlRmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmg6Cisg
ICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1Bo
YXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6UGxhbjo6flBsYW4pOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6UGxhbjo6a2VlcEFsaXZlSWRlbnRpZmllcik6CisgICAgICAgICogZGZn
L0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6cmVtb3ZlQWxs
UmVhZHlQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6cmVtb3ZlRGVh
ZFBsYW5zKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6cmVtb3ZlTm9uQ29tcGlsaW5n
UGxhbnNGb3JWTSk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0Lmg6CisgICAgICAgICogcnVu
dGltZS9TeW1ib2wuaDoKKwogMjAxOS0xMi0wNSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgY29tcHV0ZUlmVXNpbmdGdXp6ZXJBZ2VudCgpIGlzIGNhbGxlZCBiZWZv
cmUgcGFyc2luZyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyNTMxNjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1
dGVGcm9tTExJbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdldEJ5U3RhdHVzIEdldEJ5U3Rh
dHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1h
cCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlu
a1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMg
dHJhY2tJZGVudGlmaWVycykKK0dldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKENv
ZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4LCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVE
YXRhIGNhbGxFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlmaWVycywg
SWRlbnRpZmllcktlZXBBbGl2ZSBrZWVwQWxpdmUpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwogCkBAIC0xMjEsNyArMTIxLDcgQEAgR2V0
QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZQogCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJh
Y2soCi0gICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgbWFwLmdldChDb2RlT3JpZ2luKGJ5
dGVjb2RlSW5kZXgpKS5zdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJZGVudGlmaWVy
cyk7CisgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgbWFwLmdldChDb2RlT3JpZ2luKGJ5
dGVjb2RlSW5kZXgpKS5zdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJZGVudGlmaWVy
cywga2VlcEFsaXZlKTsKICAgICAKICAgICBpZiAoZGlkRXhpdCkKICAgICAgICAgcmV0dXJuIHJl
c3VsdC5zbG93VmVyc2lvbigpOwpAQCAtMTY3LDcgKzE2Nyw3IEBAIEdldEJ5U3RhdHVzOjpHZXRC
eVN0YXR1cyhjb25zdCBNb2R1bGVOYW0KIH0KIAogR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAotICAgIGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhp
dFNpdGVEYXRhLCBUcmFja0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMpCisgICAgY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNh
bGxFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlmaWVycywgSWRlbnRp
ZmllcktlZXBBbGl2ZSBrZWVwQWxpdmUpCiB7CiAgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkg
PSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShzdHViSW5mbyk7CiAgICAgaWYgKCFpc0lubGlu
ZWFibGUoc3VtbWFyeSkpCkBAIC0xODYsNiArMTg2LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0
dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRo
SW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVz
KEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgICAgIEJveDxJZGVu
dGlmaWVyPiBpZGVudGlmaWVyID0gc3R1YkluZm8tPmdldEJ5SWRTZWxmSWRlbnRpZmllcigpOwor
ICAgICAgICBrZWVwQWxpdmUoaWRlbnRpZmllcik7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQgPSBpZGVudGlmaWVyLT5pbXBsKCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7
CiAgICAgICAgIGlmICh0cmFja0lkZW50aWZpZXJzID09IFRyYWNrSWRlbnRpZmllcnM6Ok5vKQpA
QCAtMjEwLDYgKzIxMSw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1
YkkKICAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KDApOwog
ICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFj
Y2Vzc0Nhc2U6Ok1vZHVsZU5hbWVzcGFjZUxvYWQ6CisgICAgICAgICAgICAgICAga2VlcEFsaXZl
KGFjY2Vzcy5pZGVudGlmaWVyKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1
cyhhY2Nlc3MuYXM8TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZT4oKSk7CiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjkzLDggKzI5NSwxMiBAQCBHZXRC
eVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgICAgICAgICAgfSB9
CiAKICAgICAgICAgICAgICAgICBBU1NFUlQoKEFjY2Vzc0Nhc2U6Ok1pc3MgPT0gYWNjZXNzLnR5
cGUoKSB8fCBhY2Nlc3MuaXNDdXN0b20oKSkgPT0gKGFjY2Vzcy5vZmZzZXQoKSA9PSBpbnZhbGlk
T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKLSAgICAg
ICAgICAgICAgICAgICAgdHJhY2tJZGVudGlmaWVycyA9PSBUcmFja0lkZW50aWZpZXJzOjpZZXMg
PyBhY2Nlc3MuaWRlbnRpZmllcigpIDogQm94PElkZW50aWZpZXI+KG51bGxwdHIpLCBTdHJ1Y3R1
cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwKKyAgICAgICAgICAg
ICAgICBCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllcjsKKyAgICAgICAgICAgICAgICBpZiAodHJh
Y2tJZGVudGlmaWVycyA9PSBUcmFja0lkZW50aWZpZXJzOjpZZXMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWRlbnRpZmllciA9IGFjY2Vzcy5pZGVudGlmaWVyKCk7CisgICAgICAgICAgICAgICAg
ICAgIGtlZXBBbGl2ZShpZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudChpZGVudGlmaWVyLCBTdHJ1Y3R1cmVTZXQoc3Ry
dWN0dXJlKSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwKICAgICAgICAgICAgICAgICAgICAg
Y29tcGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwgV1RGTW92ZShjYWxsTGlua1N0YXR1cyks
CiAgICAgICAgICAgICAgICAgICAgIGludHJpbnNpY0Z1bmN0aW9uLAogICAgICAgICAgICAgICAg
ICAgICBjdXN0b21BY2Nlc3NvckdldHRlciwKQEAgLTMyOSw3ICszMzUsNyBAQCBHZXRCeVN0YXR1
cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAKIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKAogICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAm
IGJhc2VsaW5lTWFwLAotICAgIElDU3RhdHVzQ29udGV4dFN0YWNrJiBpY0NvbnRleHRTdGFjaywg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBUcmFja0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMp
CisgICAgSUNTdGF0dXNDb250ZXh0U3RhY2smIGljQ29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlmaWVycywgSWRlbnRpZmllcktl
ZXBBbGl2ZSBrZWVwQWxpdmUpCiB7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0g
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRl
RGF0YSBjYWxsRXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURh
dGEocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7CkBAIC0zNDQsNyArMzUwLDcgQEAgR2V0
QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgLy8gaW5s
aW5lZCBhbmQgbm90LWlubGluZWQuCiAgICAgICAgICAgICAgICAgR2V0QnlTdGF0dXMgYmFzZWxp
bmVSZXN1bHQgPSBjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2Nr
LCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgZGlkRXhpdCwKLSAgICAgICAgICAgICAgICAg
ICAgY2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJZGVudGlmaWVycyk7CisgICAgICAgICAgICAgICAg
ICAgIGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMsIGtlZXBBbGl2ZSk7CiAgICAg
ICAgICAgICAgICAgYmFzZWxpbmVSZXN1bHQubWVyZ2UocmVzdWx0KTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gYmFzZWxpbmVSZXN1bHQ7CiAgICAgICAgICAgICB9CkBAIC0zNTgsNyArMzY0LDcg
QEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb250ZXh0LT5vcHRpbWl6
ZWRDb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZv
clN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCi0gICAgICAgICAgICAgICAgICAgIGxv
Y2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIGNhbGxF
eGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMpOworICAgICAgICAgICAgICAgICAgICBsb2Nr
ZXIsIGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3RhdHVzLnN0dWJJbmZvLCBjYWxsRXhp
dFNpdGVEYXRhLCB0cmFja0lkZW50aWZpZXJzLCBrZWVwQWxpdmUpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1NldCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBi
bGVzcyhyZXN1bHQpOwpAQCAtMzY4LDcgKzM3NCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKAogICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMuZ2V0U3RhdHVz
KTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGb3IocHJvZmlsZWRCbG9jaywgYmFz
ZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNr
SWRlbnRpZmllcnMpOworICAgIHJldHVybiBjb21wdXRlRm9yKHByb2ZpbGVkQmxvY2ssIGJhc2Vs
aW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhLCB0cmFja0lk
ZW50aWZpZXJzLCBrZWVwQWxpdmUpOwogfQogCiBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29t
cHV0ZUZvcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShy
ZXZpc2lvbiAyNTMxNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlT
dGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsOCArOTAsMTQgQEAgcHVibGljOgogICAgICAg
ICAsIG1fd2FzU2VlbkluSklUKHdhc1NlZW5JbkpJVCkKICAgICB7CiAgICAgfQotICAgIAotICAg
IHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywg
SUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgZGZnQ29udGV4
dFN0YWNrLCBDb2RlT3JpZ2luLCBUcmFja0lkZW50aWZpZXJzKTsKKworICAgIC8vIElmIHdlIHVz
ZSBhIEJveDxJZGVudGlmaWVyPiBpbiB0aGUgY29tcGlsZXIgdGhyZWFkLCB3ZSBuZWVkIHRvIGtl
ZXAgdGhlCisgICAgLy8gSWRlbnRpZmllciBhbGl2ZSBhbmQgb25seSBkZXJlZiBpdCBpbiB0aGUg
bXV0YXRvciB0aHJlYWQgbGF0ZXIuIFRoaXMKKyAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIGNvbXBp
bGVyIHRocmVhZCBkb2Vzbid0IHJhY2UgYWdhaW5zdCB0aGUgbXV0YXRvciBpbgorICAgIC8vIGFk
anVzdGluZyB0aGUgSWRlbnRpZmllcidzIHJlZkNvdW50LgorICAgIHVzaW5nIElkZW50aWZpZXJL
ZWVwQWxpdmUgPSBzdGQ6OmZ1bmN0aW9uPHZvaWQoQm94PElkZW50aWZpZXI+KT47CisKKyAgICBz
dGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElD
U3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGRmZ0NvbnRleHRT
dGFjaywgQ29kZU9yaWdpbiwgVHJhY2tJZGVudGlmaWVycywgSWRlbnRpZmllcktlZXBBbGl2ZSk7
CiAgICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1dGVGb3IoY29uc3QgU3RydWN0dXJlU2V0Jiwg
VW5pcXVlZFN0cmluZ0ltcGwqKTsKIAogICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQpAQCAtMTI2LDcgKzEzMiw3IEBAIHB1YmxpYzoKICAgICBib29sIGZpbmFsaXpl
KFZNJik7IC8vIFJldHVybiB0cnVlIGlmIHRoaXMgZ2V0cyB0byBsaXZlLgogCiAgICAgYm9vbCBh
cHBlbmRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7Ci0gICAgCisKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAgIEJveDxJZGVudGlmaWVyPiBzaW5nbGVJZGVu
dGlmaWVyKCkgY29uc3Q7CkBAIC0xMzcsMTAgKzE0MywxMCBAQCBwcml2YXRlOgogI2lmIEVOQUJM
RShKSVQpCiAgICAgR2V0QnlTdGF0dXMoY29uc3QgTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZSYp
OwogICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNp
dGVGZWVkYmFjaygKLSAgICAgICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENhbGxMaW5rU3RhdHVzOjpFeGl0
U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMpOworICAgICAgICBjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ2Fs
bExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSwgVHJhY2tJZGVudGlmaWVycywgSWRlbnRpZmllcktl
ZXBBbGl2ZSk7CiAjZW5kaWYKICAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZyb21MTElu
dChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBUcmFja0lkZW50aWZpZXJzKTsKLSAgICBzdGF0
aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVj
b2RlSW5kZXgsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhLCBUcmFja0lk
ZW50aWZpZXJzKTsKKyAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sq
LCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6
RXhpdFNpdGVEYXRhLCBUcmFja0lkZW50aWZpZXJzLCBJZGVudGlmaWVyS2VlcEFsaXZlKTsKIAog
ICAgIHN0cnVjdCBNb2R1bGVOYW1lc3BhY2VEYXRhIHsKICAgICAgICAgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QqIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0IHsgbnVsbHB0ciB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkocmV2aXNpb24gMjUzMTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NzAwLDcgKzM3MDAsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY2hpbGRDb25zdGFudC5pc1N5bWJvbCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCZqc0Nhc3Q8U3ltYm9sKj4oY2hpbGRDb25zdGFudCktPnByaXZhdGVOYW1lKCkudWlk
KCkgPT0gdWlkKSB7CisgICAgICAgICAgICAgICAgaWYgKCZqc0Nhc3Q8U3ltYm9sKj4oY2hpbGRD
b25zdGFudCktPnVpZCgpID09IHVpZCkgewogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNl
dFNob3VsZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDI1MzE2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NzE2LDcgKzQ3MTYsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VHZXRCeUlkKGNv
bnN0IAogICAgIEdldEJ5U3RhdHVzIGdldEJ5U3RhdHVzID0gR2V0QnlTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKICAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywKLSAgICAg
ICAgY3VycmVudENvZGVPcmlnaW4oKSwgR2V0QnlTdGF0dXM6OlRyYWNrSWRlbnRpZmllcnM6Ok5v
KTsKKyAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgR2V0QnlTdGF0dXM6OlRyYWNrSWRlbnRp
ZmllcnM6Ok5vLAorICAgICAgICBbJl0gKEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyKSB7Cisg
ICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi5rZWVwQWxpdmVJZGVudGlmaWVyKFdURk1vdmUoaWRl
bnRpZmllcikpOworICAgICAgICB9KTsKIAogICAgIEFjY2Vzc1R5cGUgdHlwZSA9IEFjY2Vzc1R5
cGU6OkdldEJ5SWQ7CiAgICAgdW5zaWduZWQgb3Bjb2RlTGVuZ3RoID0gY3VycmVudEluc3RydWN0
aW9uLT5zaXplKCk7CkBAIC01NjI1LDcgKzU2MjgsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29k
ZS5tX2Jhc2UpOwogICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9w
cm9wZXJ0eSk7CiAgICAgICAgICAgICBib29sIHNob3VsZENvbXBpbGVBc0dldEJ5SWQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIEdldEJ5U3RhdHVzIGdldEJ5U3RhdHVzID0gR2V0QnlTdGF0dXM6OmNv
bXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNr
VG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29kZU9yaWdpbigp
LCBHZXRCeVN0YXR1czo6VHJhY2tJZGVudGlmaWVyczo6WWVzKTsKKyAgICAgICAgICAgIEdldEJ5
U3RhdHVzIGdldEJ5U3RhdHVzID0gR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBt
X2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29kZU9yaWdpbigpLCBHZXRCeVN0YXR1czo6VHJhY2tJ
ZGVudGlmaWVyczo6WWVzLAorICAgICAgICAgICAgICAgIFsmXSAoQm94PElkZW50aWZpZXI+IGlk
ZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4ua2VlcEFsaXZl
SWRlbnRpZmllcihXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICAgICAgICAgICAgICB9KTsKKwog
ICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IDA7CiAKICAgICAgICAgICAg
IGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJl
bnRJbmRleCwgQmFkSWRlbnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMjUzMTYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyOCw3ICszMjgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkQ29uc3RhbnQu
aXNTeW1ib2woKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sKiBzeW1ib2wgPSBq
c0Nhc3Q8U3ltYm9sKj4oY2hpbGRDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
b25zdGFudFVpZCA9ICZzeW1ib2wtPnByaXZhdGVOYW1lKCkudWlkKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdGFudFVpZCA9ICZzeW1ib2wtPnVpZCgpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHJldmlzaW9uIDI1MzE2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDcgQEAKICNpbmNsdWRl
ICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKICNp
bmNsdWRlICJWTUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKICNpZiBF
TkFCTEUoRlRMX0pJVCkKICNpbmNsdWRlICJGVExDYXBhYmlsaXRpZXMuaCIKQEAgLTE1NCw2ICsx
NTUsNyBAQCBQbGFuOjpQbGFuKENvZGVCbG9jayogcGFzc2VkQ29kZUJsb2NrLCBDCiAKIFBsYW46
On5QbGFuKCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsK
IH0KIAogYm9vbCBQbGFuOjpjb21wdXRlQ29tcGlsZVRpbWVzKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNTMxNjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBA
QAogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21waWxhdGlvbi5o
IgogI2luY2x1ZGUgIlJlY29yZGVkU3RhdHVzZXMuaCIKKyNpbmNsdWRlIDx3dGYvQm94Lmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50
ZWQuaD4KIApAQCAtMTE1LDYgKzExNiwxMSBAQCBwdWJsaWM6CiAgICAgRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrKiBjYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2suZ2V0KCk7
IH0KICAgICB2b2lkIHNldENhbGxiYWNrKFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+
JiYgY2FsbGJhY2spIHsgbV9jYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOyB9CiAKKyAgICB2
b2lkIGtlZXBBbGl2ZUlkZW50aWZpZXIoQm94PElkZW50aWZpZXI+IGlkZW50aWZpZXIpCisgICAg
eworICAgICAgICBtX2lkZW50aWZpZXJzS2VwdEFsaXZlRm9yQ2xlYW5VcC5hcHBlbmQoV1RGTW92
ZShpZGVudGlmaWVyKSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIGJvb2wgY29tcHV0ZUNvbXBp
bGVUaW1lcygpIGNvbnN0OwogICAgIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCkgY29uc3Q7CkBA
IC0xNjUsNiArMTcxLDcgQEAgcHJpdmF0ZToKICAgICBTdGFnZSBtX3N0YWdlOwogCiAgICAgUmVm
UHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gbV9jYWxsYmFjazsKKyAgICBWZWN0b3I8
Qm94PElkZW50aWZpZXI+LCAxNj4gbV9pZGVudGlmaWVyc0tlcHRBbGl2ZUZvckNsZWFuVXA7CiAK
ICAgICBNb25vdG9uaWNUaW1lIG1fdGltZUJlZm9yZUZUTDsKIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjUzMTYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMCw4ICsxMDAsMTAgQEAgcHJvdGVjdGVkOgogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2RhdGEubV9yaWdodFRvUnVuKTsKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIoKm1fd29ya2xpc3QubV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdl
KCkgPT0gUGxhbjo6Q2FuY2VsbGVkKQorICAgICAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSA9
PSBQbGFuOjpDYW5jZWxsZWQpIHsKKyAgICAgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fY2FuY2Vs
bGVkUGxhbnMuYXBwZW5kKFdURk1vdmUobV9wbGFuKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IFdvcmtSZXN1bHQ6OkNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9wbGFu
LT5ub3RpZnlDb21waWxpbmcoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTExMCw3ICsxMTIs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSdzIG5vIHdheSBmb3Ig
dGhlIEdDIHRvIGJlIHNhZmVwb2ludGluZyBzaW5jZSB3ZSBvd24gcmlnaHRUb1J1bi4KICAgICAg
ICAgaWYgKG1fcGxhbi0+dm0oKS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7Ci0gICAgICAgICAg
ICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BlZCBidXQgaGVyZSB3ZSBhcmUhICgxKVxuIik7CisgICAg
ICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BwZWQgYnV0IGhlcmUgd2UgYXJlISAoMSlcbiIp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQog
ICAgICAgICBtX3BsYW4tPmNvbXBpbGVJblRocmVhZCgmbV9kYXRhKTsKQEAgLTEyMyw4ICsxMjUs
MTAgQEAgcHJvdGVjdGVkOgogICAgICAgICAKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIoKm1fd29ya2xpc3QubV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX3BsYW4t
PnN0YWdlKCkgPT0gUGxhbjo6Q2FuY2VsbGVkKQorICAgICAgICAgICAgaWYgKG1fcGxhbi0+c3Rh
Z2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpIHsKKyAgICAgICAgICAgICAgICBtX3dvcmtsaXN0Lm1f
Y2FuY2VsbGVkUGxhbnMuYXBwZW5kKFdURk1vdmUobV9wbGFuKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgICAgICBtX3BsYW4tPm5vdGlmeVJlYWR5KCk7CiAgICAgICAgICAgICAKQEAgLTEz
Myw5ICsxMzcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiOiBDb21w
aWxlZCAiLCBtX3BsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgbV93b3JrbGlzdC5tX3JlYWR5UGxhbnMuYXBw
ZW5kKG1fcGxhbik7Ci0KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZtKCkt
PmhlYXAud29ybGRJc1N0b3BwZWQoKSk7CisgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fcmVhZHlQ
bGFucy5hcHBlbmQoV1RGTW92ZShtX3BsYW4pKTsKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9w
bGFuQ29tcGlsZWQubm90aWZ5QWxsKCk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zMDUsNiAr
MzA4LDEwIEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSgKIHsKICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9j
ayk7CisKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgbV9jYW5jZWxs
ZWRQbGFucy5jbGVhcigpOworCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlYWR5UGxh
bnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtX3JlYWR5UGxh
bnNbaV07CiAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKQEAgLTQwNyw2ICs0MTQsOCBA
QCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogICAgIHsKICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAgIEhhc2hTZXQ8Q29tcGlsYXRpb25L
ZXk+IGRlYWRQbGFuS2V5czsKKyAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkp
OworICAgICAgICBtX2NhbmNlbGxlZFBsYW5zLmNsZWFyKCk7CiAgICAgICAgIGZvciAoUGxhbk1h
cDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgp
OyArK2l0ZXIpIHsKICAgICAgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsK
ICAgICAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKQEAgLTQ1NSw2ICs0NjQsOCBAQCB2
b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogdm9pZCBXb3JrbGlzdDo6cmVt
b3ZlTm9uQ29tcGlsaW5nUGxhbnNGb3JWTShWTSYgdm0pCiB7CiAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoKm1fbG9jayk7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIG1f
Y2FuY2VsbGVkUGxhbnMuY2xlYXIoKTsKICAgICBIYXNoU2V0PENvbXBpbGF0aW9uS2V5PiBkZWFk
UGxhbktleXM7CiAgICAgVmVjdG9yPFJlZlB0cjxQbGFuPj4gZGVhZFBsYW5zOwogICAgIGZvciAo
YXV0byYgZW50cnkgOiBtX3BsYW5zKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCShyZXZpc2lvbiAyNTMxNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQCBwcml2
YXRlOgogICAgIC8vIFVzZWQgdG8gcXVpY2tseSBmaW5kIHdoaWNoIHBsYW5zIGhhdmUgYmVlbiBj
b21waWxlZCBhbmQgYXJlIHJlYWR5IHRvCiAgICAgLy8gYmUgY29tcGxldGVkLgogICAgIFZlY3Rv
cjxSZWZQdHI8UGxhbj4sIDE2PiBtX3JlYWR5UGxhbnM7CisgICAgVmVjdG9yPFJlZlB0cjxQbGFu
PiwgMTY+IG1fY2FuY2VsbGVkUGxhbnM7CiAgICAgUmVmPEF1dG9tYXRpY1RocmVhZENvbmRpdGlv
bj4gbV9wbGFuRW5xdWV1ZWQ7CiAgICAgQ29uZGl0aW9uIG1fcGxhbkNvbXBpbGVkOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2wuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2wuaAkocmV2aXNpb24gMjUzMTYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTeW1ib2wqIGNyZWF0ZVdpdGhE
ZXNjcmlwdGlvbihWTSYsIGNvbnN0IFN0cmluZyYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBTeW1ib2wqIGNyZWF0ZShWTSYsIFN5bWJvbEltcGwmIHVpZCk7CiAKKyAgICBTeW1ib2xJ
bXBsJiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGVOYW1lLnVpZCgpOyB9CiAgICAgUHJp
dmF0ZU5hbWUgcHJpdmF0ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGVOYW1lOyB9CiAg
ICAgU3RyaW5nIGRlc2NyaXB0aXZlU3RyaW5nKCkgY29uc3Q7CiAgICAgU3RyaW5nIGRlc2NyaXB0
aW9uKCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="400799"
          type_id="1"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385055</attachid>
            <date>2019-12-06 16:30:47 -0800</date>
            <delta_ts>2019-12-06 18:27:09 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-204919.patch</filename>
            <type>text/plain</type>
            <size>29631</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTMyMjkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE5LTEyLTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBUaGUgY29tcGlsZXIgdGhyZWFkIHNob3VsZCBub3QgYWRqdXN0IElkZW50
aWZpZXIgcmVmQ291bnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA0OTE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NzQyNjg2MT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9jb21w
aWxlci10aHJlYWQtc2hvdWxkLW5vdC1yZWYtaWRlbnRpZmllcnMuanM6IEFkZGVkLgorCiAyMDE5
LTEyLTA0ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pT
Q10gQUkgc2hvdWxkIGNvbnZlcnQgSXNDZWxsV2l0aFR5cGUgdG8gY29uc3RhbnQgd2hlbiBTdHJ1
Y3R1cmUgc2V0IGlzIGZpbml0ZQpJbmRleDogSlNUZXN0cy9zdHJlc3MvY29tcGlsZXItdGhyZWFk
LXNob3VsZC1ub3QtcmVmLWlkZW50aWZpZXJzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3Ry
ZXNzL2NvbXBpbGVyLXRocmVhZC1zaG91bGQtbm90LXJlZi1pZGVudGlmaWVycy5qcwkobm9uZXhp
c3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9jb21waWxlci10aHJlYWQtc2hvdWxkLW5vdC1yZWYt
aWRlbnRpZmllcnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNSBAQAorLy9AIHNsb3ch
CisvL0AgcnVuRGVmYXVsdAorCitmb3IgKGxldCBqID0gMDsgaiA8IDUwMDsgaisrKSB7CisgICAg
cnVuU3RyaW5nKGAKKworbGV0IGEgPSBTeW1ib2woJ2EnKTsKK2xldCBvID0geyBbYV06IDEgfTsK
KworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgT2JqZWN0LmdldE93blBy
b3BlcnR5U3ltYm9scyhvKTsKKyAgICBvW2FdOworfQorYCk7Cit9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MzE5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3NSBAQAorMjAxOS0xMi0wNiAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIGNvbXBpbGVyIHRocmVh
ZCBzaG91bGQgbm90IGFkanVzdCBJZGVudGlmaWVyIHJlZkNvdW50cy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDkxOQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNTc0MjY4NjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgMS4gUHJldmlvdXNseSwgaW4gdGhlIGNvbXBpbGVyIHRocmVhZCwgd2Ugd291
bGQgZ2V0IGEgU3ltYm9sIHVpZCB2aWEKKyAgICAgICAgICAgU3ltYm9sOjpwcml2YXRlTmFtZSgp
LnVpZCgpLiAgU3ltYm9sOjpwcml2YXRlTmFtZSgpIHJldHVybnMgYSBjb3B5IG9mIGl0cworICAg
ICAgICAgICBQcml2YXRlTmFtZSwgd2hpY2ggaW4gdHVybiByZXN1bHRzIGluIHJlZidpbmcgdGhl
IHVuZGVybHlpbmcgU3ltYm9sSW1wbC4KKyAgICAgICAgICAgVGhpcyByZXN1bHRzIGluIGEgcmFj
ZSBiZXR3ZWVuIHRoZSBtdXRhdG9yIGFuZCBjb21waWxlciB0aHJlYWRzIHRvIGFkanVzdCB0aGUK
KyAgICAgICAgICAgU3ltYm9sSW1wbCdzIHJlZkNvdW50LCB3aGljaCBtYXkgcmVzdWx0IGluIGNv
cnJ1cHRpb24uCisKKyAgICAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGJ5IGFkZGluZyBT
eW1ib2w6OnVpZCgpIHdoaWNoIHJldHVybiB0aGUgdW5kZXJseWluZworICAgICAgICAgICBTeW1i
b2xJbXBsIHdpdGhvdXQgcmVmJ2luZyBpdC4KKworICAgICAgICAyLiBQcmV2aW91c2x5LCBpbiB0
aGUgY29tcGlsZXIgdGhyZWFkLCB3ZSBhbHNvIGNyZWF0ZSBCb3g8SWRlbnRpZmllcj4gdmlhIGl0
cworICAgICAgICAgICBjb3B5IGNvbnN0cnVjdG9yLiAgVGhlIG9yaWdpbmFsIEJveDxJZGVudGlm
aWVyPiBpcyBpbnN0YW50aWF0ZWQgaW4gdGhlIG11dGF0b3IuCisgICAgICAgICAgIFRoZSBCb3g8
SWRlbnRpZmllcj4gcmVmcyBpdHMgaW50ZXJuYWwgRGF0YSwgd2hpY2ggaXMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQgYW5kCisgICAgICAgICAgIHNoYXJlZCBieSBhbGwgQm94PElkZW50aWZpZXI+IGZv
ciB0aGUgc2FtZSB1bmRlcmx5aW5nIElkZW50aWZpZXIuCisgICAgICAgICAgIFRoaXMgZW5zdXJl
cyB0aGF0IHRoZSBjb21waWxlciB0aHJlYWQgZG9lcyBub3QgcmVmIHRoZSB1bmRlcmx5aW5nIElk
ZW50aWZpZXIuCisKKyAgICAgICAgICAgSG93ZXZlciwgd2hlbiB0aGUgQm94PElkZW50aWZpZXI+
IGlzIGRlc3RydWN0ZWQsIGl0IHdpbGwgYWxzbyBjaGVjayBpZiBpdCBob2xkcworICAgICAgICAg
ICB0aGUgbGFzdCByZWYgdG8gaXRzIGludGVybmFsIERhdGEuICBJZiBzbywgaXQgd2lsbCBkZXN0
cnVjdCBpdHMgRGF0YSwgYW5kIHRoZQorICAgICAgICAgICBJZGVudGlmaWVyIHRoYXQgaXQgZW1i
ZWRzLiAgVGhpcyByZXN1bHRzIGluIHRoZSBjb21waWxlciB0aHJlYWQgdHJ5aW5nIHRvIGRlcmVm
CisgICAgICAgICAgIHRoZSBTdHJpbmdJbXBsIHJlZmVyZW5jZWQgYnkgdGhlIElkZW50aWZpZXIg
aW4gYSByYWNlIGFnYWluc3QgdGhlIG11dGF0b3IuCisKKyAgICAgICAgICAgVGhpcyBwYXRjaCBm
aXhlcyB0aGlzIGJ5IGVuc3VyaW5nIHRoYXQgZm9yIGFueSBCb3g8SWRlbnRpZmllcj4gaW5zdGFu
Y2UgdXNlZAorICAgICAgICAgICBieSB0aGUgY29tcGlsZXIgdGhyZWFkLCB3ZSB3aWxsIHJlZ2lz
dGVyIGFub3RoZXIgaW5zdGFuY2UgaW4gdGhlIERGRzo6UGxhbgorICAgICAgICAgICBtX2lkZW50
aWZpZXJzS2VwdEFsaXZlRm9yQ2xlYW5VcCBsaXN0LCBhbmQgbGV0IHRoZSBtdXRhdG9yIGRlc3Ry
dWN0IHRoYXQKKyAgICAgICAgICAgQm94PElkZW50aWZpZXI+IGxhdGVyIGluIHRoZSBtdXRhdG9y
LiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGNvbXBpbGVyIHRocmVhZAorICAgICAgICAgICB3aWxs
IG5ldmVyIHNlZSB0aGUgbGFzdCByZWZlcmVuY2UgdG8gYSBCb3g8SWRlbnRpZmllcj4ncyBpbnRl
cm5hbCBEYXRhIGFuZAorICAgICAgICAgICBhdm9pZCB0aGUgcmFjZS4KKworICAgICAgICAzLiBU
aGlzIHBhdGNoIGFsc28gZml4ZXMgdGhlIERGRzo6V29ya2xpc3QgY29kZSB0byBlbnN1cmUgdGhh
dCBhIERGRzo6UGxhbiBpcworICAgICAgICAgICBhbHdheXMgZGVzdHJ1Y3RlZCBpbiB0aGUgbXV0
YXRvciwgZXZlbiBpZiB0aGUgUGxhbiB3YXMgY2FuY2VsbGVkLgorCisgICAgICAgICAgIFRoaXMs
IGluIHR1cm4sIGVuYWJsZXMgdXMgdG8gYXNzZXJ0IHRoYXQgdGhlIFBsYW4gaXMgbmV2ZXIgZGVz
dHJ1Y3RlZCBpbiB0aGUKKyAgICAgICAgICAgY29tcGlsZXIgdGhyZWFkLgorCisgICAgICAgICog
Ynl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29t
cHV0ZUZvcik6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9X
aXRob3V0RXhpdFNpdGVGZWVkYmFjayk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMu
aDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhl
Y3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlR2V0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xk
aW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQbGFuOjp+UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6
Y29tcHV0ZUNvbXBpbGVUaW1lcyBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2Fu
Y2VsKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5oOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OnVubnVrZWRWTSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6a2VlcEFsaXZlSWRl
bnRpZmllcik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6bnVrZSk6CisgICAgICAgIChKU0M6
OkRGRzo6UGxhbjo6dW5udWtlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZXBvaW50LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OmNhbmNlbCk6CisgICAgICAgICogZGZnL0RGR1dv
cmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpyZW1vdmVDYW5jZWxsZWRQbGFucyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OmRlbGV0ZUNhbmNlbGxlZFBsYW5zRm9yVk0pOgor
ICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0pOgor
ICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMpOgorICAgICAgICAo
SlNDOjpERkc6OldvcmtsaXN0OjpyZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKToKKyAgICAg
ICAgKiBkZmcvREZHV29ya2xpc3QuaDoKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbC5oOgorCiAy
MDE5LTEyLTA1ICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUuY29tPgogCiAgICAgICAg
IFtXZWJBc3NlbWJseV0gRml4IExMSW50Q2FsbGVlJ3Mgb3duZXJzaGlwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI1
MzE5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1
czo6Y29tcHV0ZUZyb21MTEluCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotR2V0QnlTdGF0dXMg
R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1
c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQs
IENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSwgVHJhY2tJZGVu
dGlmaWVycyB0cmFja0lkZW50aWZpZXJzKQorR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1
dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpF
eGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSwgVHJhY2tJZGVudGlmaWVycyB0cmFja0lkZW50
aWZpZXJzLCBJZGVudGlmaWVyS2VlcEFsaXZlJiBrZWVwQWxpdmUpCiB7CiAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwogCkBAIC0xMjEsNyArMTIx
LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZQogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRT
aXRlRmVlZGJhY2soCi0gICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgbWFwLmdldChDb2Rl
T3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJ
ZGVudGlmaWVycyk7CisgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgbWFwLmdldChDb2Rl
T3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJ
ZGVudGlmaWVycywga2VlcEFsaXZlKTsKICAgICAKICAgICBpZiAoZGlkRXhpdCkKICAgICAgICAg
cmV0dXJuIHJlc3VsdC5zbG93VmVyc2lvbigpOwpAQCAtMTY3LDcgKzE2Nyw3IEBAIEdldEJ5U3Rh
dHVzOjpHZXRCeVN0YXR1cyhjb25zdCBNb2R1bGVOYW0KIH0KIAogR2V0QnlTdGF0dXMgR2V0QnlT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAotICAgIGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0
YSBjYWxsRXhpdFNpdGVEYXRhLCBUcmFja0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMpCisg
ICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDYWxsTGlua1N0YXR1czo6RXhpdFNp
dGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlmaWVy
cywgSWRlbnRpZmllcktlZXBBbGl2ZSYga2VlcEFsaXZlKQogewogICAgIFN0dWJJbmZvU3VtbWFy
eSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkoc3R1YkluZm8pOwogICAgIGlm
ICghaXNJbmxpbmVhYmxlKHN1bW1hcnkpKQpAQCAtMTg2LDYgKzE4Niw3IEBAIEdldEJ5U3RhdHVz
IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFr
ZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJldHVybiBH
ZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgICAg
ICBCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllciA9IHN0dWJJbmZvLT5nZXRCeUlkU2VsZklkZW50
aWZpZXIoKTsKKyAgICAgICAga2VlcEFsaXZlKGlkZW50aWZpZXIpOwogICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci0+aW1wbCgpOwogICAgICAgICBSRUxFQVNFX0FT
U0VSVCh1aWQpOwogICAgICAgICBpZiAodHJhY2tJZGVudGlmaWVycyA9PSBUcmFja0lkZW50aWZp
ZXJzOjpObykKQEAgLTIxMCw2ICsyMTEsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29t
cHV0ZUZvclN0dWJJCiAgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0
LT5hdCgwKTsKICAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBBY2Nlc3NDYXNlOjpNb2R1bGVOYW1lc3BhY2VMb2FkOgorICAgICAgICAgICAgICAg
IGtlZXBBbGl2ZShhY2Nlc3MuaWRlbnRpZmllcigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
R2V0QnlTdGF0dXMoYWNjZXNzLmFzPE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U+KCkpOwogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI5Myw4ICsyOTUs
MTIgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICAg
ICAgICAgIH0gfQogCiAgICAgICAgICAgICAgICAgQVNTRVJUKChBY2Nlc3NDYXNlOjpNaXNzID09
IGFjY2Vzcy50eXBlKCkgfHwgYWNjZXNzLmlzQ3VzdG9tKCkpID09IChhY2Nlc3Mub2Zmc2V0KCkg
PT0gaW52YWxpZE9mZnNldCkpOwotICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlh
bnQoCi0gICAgICAgICAgICAgICAgICAgIHRyYWNrSWRlbnRpZmllcnMgPT0gVHJhY2tJZGVudGlm
aWVyczo6WWVzID8gYWNjZXNzLmlkZW50aWZpZXIoKSA6IEJveDxJZGVudGlmaWVyPihudWxscHRy
KSwgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCisg
ICAgICAgICAgICAgICAgQm94PElkZW50aWZpZXI+IGlkZW50aWZpZXI7CisgICAgICAgICAgICAg
ICAgaWYgKHRyYWNrSWRlbnRpZmllcnMgPT0gVHJhY2tJZGVudGlmaWVyczo6WWVzKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBhY2Nlc3MuaWRlbnRpZmllcigpOworICAgICAg
ICAgICAgICAgICAgICBrZWVwQWxpdmUoaWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQoaWRlbnRpZmllciwgU3RydWN0
dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCiAgICAgICAgICAg
ICAgICAgICAgIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksIFdURk1vdmUoY2FsbExp
bmtTdGF0dXMpLAogICAgICAgICAgICAgICAgICAgICBpbnRyaW5zaWNGdW5jdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgY3VzdG9tQWNjZXNzb3JHZXR0ZXIsCkBAIC0zMjksNyArMzM1LDcgQEAg
R2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogCiBHZXRCeVN0YXR1cyBH
ZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElD
U3RhdHVzTWFwJiBiYXNlbGluZU1hcCwKLSAgICBJQ1N0YXR1c0NvbnRleHRTdGFjayYgaWNDb250
ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVHJhY2tJZGVudGlmaWVycyB0cmFja0lk
ZW50aWZpZXJzKQorICAgIElDU3RhdHVzQ29udGV4dFN0YWNrJiBpY0NvbnRleHRTdGFjaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBUcmFja0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMsIElk
ZW50aWZpZXJLZWVwQWxpdmUmIGtlZXBBbGl2ZSkKIHsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBDYWxsTGlua1N0YXR1
czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUV4aXRTaXRlRGF0YShwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKQEAgLTM0NCw3ICsz
NTAsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAg
ICAgICAvLyBpbmxpbmVkIGFuZCBub3QtaW5saW5lZC4KICAgICAgICAgICAgICAgICBHZXRCeVN0
YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgIHBy
b2ZpbGVkQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0LAotICAgICAg
ICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhLCB0cmFja0lkZW50aWZpZXJzKTsKKyAgICAg
ICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJZGVudGlmaWVycywga2VlcEFs
aXZlKTsKICAgICAgICAgICAgICAgICBiYXNlbGluZVJlc3VsdC5tZXJnZShyZXN1bHQpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZVJlc3VsdDsKICAgICAgICAgICAgIH0KQEAgLTM1
OCw3ICszNjQsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRl
eHQtPm9wdGltaXplZENvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICByZXN1bHQg
PSBjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjaygKLSAgICAgICAgICAg
ICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHVi
SW5mbywgY2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJZGVudGlmaWVycyk7CisgICAgICAgICAgICAg
ICAgICAgIGxvY2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1Yklu
Zm8sIGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMsIGtlZXBBbGl2ZSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7CkBAIC0zNjgsNyArMzc0LDcgQEAgR2V0QnlTdGF0dXMg
R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICByZXR1cm4gYmxlc3MoKnN0YXR1
cy5nZXRTdGF0dXMpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxl
ZEJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRl
RGF0YSwgdHJhY2tJZGVudGlmaWVycyk7CisgICAgcmV0dXJuIGNvbXB1dGVGb3IocHJvZmlsZWRC
bG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURh
dGEsIHRyYWNrSWRlbnRpZmllcnMsIGtlZXBBbGl2ZSk7CiB9CiAKIEdldEJ5U3RhdHVzIEdldEJ5
U3RhdHVzOjpjb21wdXRlRm9yKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3Rh
dHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
U3RhdHVzLmgJKHJldmlzaW9uIDI1MzE5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeVN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsOCArOTAsMTQgQEAgcHVi
bGljOgogICAgICAgICAsIG1fd2FzU2VlbkluSklUKHdhc1NlZW5JbkpJVCkKICAgICB7CiAgICAg
fQotICAgIAotICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFz
ZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFj
ayYgZGZnQ29udGV4dFN0YWNrLCBDb2RlT3JpZ2luLCBUcmFja0lkZW50aWZpZXJzKTsKKworICAg
IC8vIElmIHdlIHVzZSBhIEJveDxJZGVudGlmaWVyPiBpbiB0aGUgY29tcGlsZXIgdGhyZWFkLCB3
ZSBuZWVkIHRvIGtlZXAgdGhlCisgICAgLy8gSWRlbnRpZmllciBhbGl2ZSBhbmQgb25seSBkZXJl
ZiBpdCBpbiB0aGUgbXV0YXRvciB0aHJlYWQgbGF0ZXIuIFRoaXMKKyAgICAvLyBlbnN1cmVzIHRo
YXQgdGhlIGNvbXBpbGVyIHRocmVhZCBkb2Vzbid0IHJhY2UgYWdhaW5zdCB0aGUgbXV0YXRvciBp
bgorICAgIC8vIGFkanVzdGluZyB0aGUgSWRlbnRpZmllcidzIHJlZkNvdW50LgorICAgIHVzaW5n
IElkZW50aWZpZXJLZWVwQWxpdmUgPSBzdGQ6OmZ1bmN0aW9uPHZvaWQoQm94PElkZW50aWZpZXI+
KT47CisKKyAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2Vs
aW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2sm
IGRmZ0NvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwgVHJhY2tJZGVudGlmaWVycywgSWRlbnRpZmll
cktlZXBBbGl2ZSYpOwogICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRm9yKGNvbnN0IFN0
cnVjdHVyZVNldCYsIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAKICAgICBTdGF0ZSBzdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KQEAgLTEyNiw3ICsxMzIsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBmaW5hbGl6ZShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMgdG8gbGl2ZS4K
IAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwotICAgIAor
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKICAgICBCb3g8SWRlbnRpZmll
cj4gc2luZ2xlSWRlbnRpZmllcigpIGNvbnN0OwpAQCAtMTM3LDEwICsxNDMsMTAgQEAgcHJpdmF0
ZToKICNpZiBFTkFCTEUoSklUKQogICAgIEdldEJ5U3RhdHVzKGNvbnN0IE1vZHVsZU5hbWVzcGFj
ZUFjY2Vzc0Nhc2UmKTsKICAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZv
V2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCi0gICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDYWxsTGlu
a1N0YXR1czo6RXhpdFNpdGVEYXRhLCBUcmFja0lkZW50aWZpZXJzKTsKKyAgICAgICAgY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMs
IElkZW50aWZpZXJLZWVwQWxpdmUmKTsKICNlbmRpZgogICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBj
b21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIFRyYWNrSWRlbnRpZmll
cnMpOwotICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3Rh
dHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMpOworICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRl
Rm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcsIENh
bGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMsIElkZW50aWZpZXJL
ZWVwQWxpdmUmKTsKIAogICAgIHN0cnVjdCBNb2R1bGVOYW1lc3BhY2VEYXRhIHsKICAgICAgICAg
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0IHsgbnVsbHB0
ciB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjUzMTk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzAwLDcgKzM3MDAsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25zdGFudC5pc1N5bWJvbCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCZqc0Nhc3Q8U3ltYm9sKj4oY2hpbGRDb25zdGFudCktPnBy
aXZhdGVOYW1lKCkudWlkKCkgPT0gdWlkKSB7CisgICAgICAgICAgICAgICAgaWYgKCZqc0Nhc3Q8
U3ltYm9sKj4oY2hpbGRDb25zdGFudCktPnVpZCgpID09IHVpZCkgewogICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDI1MzE5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NzEzLDEwICs0NzEzLDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlR2V0QnlJZChjb25zdCAKICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFz
ZSk7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1f
aWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLm1fcHJvcGVydHldOwogICAgIAorICAgIEdldEJ5U3Rh
dHVzOjpJZGVudGlmaWVyS2VlcEFsaXZlIGtlZXBBbGl2ZSA9IFsmXSAoQm94PElkZW50aWZpZXI+
IGlkZW50aWZpZXIpIHsKKyAgICAgICAgbV9ncmFwaC5tX3BsYW4ua2VlcEFsaXZlSWRlbnRpZmll
cihXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICB9OwogICAgIEdldEJ5U3RhdHVzIGdldEJ5U3Rh
dHVzID0gR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jaywKICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1h
cCwgbV9pY0NvbnRleHRTdGFjaywKLSAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgR2V0QnlT
dGF0dXM6OlRyYWNrSWRlbnRpZmllcnM6Ok5vKTsKKyAgICAgICAgY3VycmVudENvZGVPcmlnaW4o
KSwgR2V0QnlTdGF0dXM6OlRyYWNrSWRlbnRpZmllcnM6Ok5vLCBrZWVwQWxpdmUpOwogCiAgICAg
QWNjZXNzVHlwZSB0eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKICAgICB1bnNpZ25lZCBvcGNv
ZGVMZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKQEAgLTU2MjUsNyArNTYyOCwx
MSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CiAgICAgICAgICAgICBOb2RlKiBw
cm9wZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKICAgICAgICAgICAgIGJvb2wgc2hv
dWxkQ29tcGlsZUFzR2V0QnlJZCA9IGZhbHNlOwotICAgICAgICAgICAgR2V0QnlTdGF0dXMgZ2V0
QnlTdGF0dXMgPSBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0
U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksIEdldEJ5U3RhdHVzOjpUcmFja0lkZW50aWZpZXJz
OjpZZXMpOworICAgICAgICAgICAgR2V0QnlTdGF0dXM6OklkZW50aWZpZXJLZWVwQWxpdmUga2Vl
cEFsaXZlID0gWyZdIChCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllcikgeworICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9wbGFuLmtlZXBBbGl2ZUlkZW50aWZpZXIoV1RGTW92ZShpZGVudGlmaWVy
KSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgR2V0QnlTdGF0dXMgZ2V0QnlTdGF0dXMg
PSBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssIGN1
cnJlbnRDb2RlT3JpZ2luKCksIEdldEJ5U3RhdHVzOjpUcmFja0lkZW50aWZpZXJzOjpZZXMsIGtl
ZXBBbGl2ZSk7CisKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSAwOwog
CiAgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9u
IDI1MzE5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNyArMzI4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChj
aGlsZENvbnN0YW50LmlzU3ltYm9sKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJv
bCogc3ltYm9sID0ganNDYXN0PFN5bWJvbCo+KGNoaWxkQ29uc3RhbnQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3RhbnRVaWQgPSAmc3ltYm9sLT5wcml2YXRlTmFtZSgpLnVpZCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRVaWQgPSAmc3ltYm9sLT51aWQoKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNTMxOTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3
IEBACiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlRyYWNrZWRSZWZl
cmVuY2VzLmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAjaW5jbHVkZSAiRlRMQ2FwYWJpbGl0aWVzLmgi
CkBAIC0xNTQsMTMgKzE1NSwxNCBAQCBQbGFuOjpQbGFuKENvZGVCbG9jayogcGFzc2VkQ29kZUJs
b2NrLCBDCiAKIFBsYW46On5QbGFuKCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVCh1bm51a2VkVk0o
KS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiB9CiAKIGJvb2wgUGxhbjo6Y29t
cHV0ZUNvbXBpbGVUaW1lcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJlcG9ydENvbXBpbGVUaW1l
cygpCiAgICAgICAgIHx8IE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkKLSAgICAg
ICAgfHwgKG1fdm0gJiYgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKTsKKyAgICAgICAgfHwg
dW5udWtlZFZNKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKIH0KIAogYm9vbCBQbGFuOjpyZXBv
cnRDb21waWxlVGltZXMoKSBjb25zdApAQCAtNjkzLDcgKzY5NSwzNCBAQCBib29sIFBsYW46Omlz
S25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKIAogdm9pZCBQbGFuOjpjYW5jZWwoKQogewotICAgIG1f
dm0gPSBudWxscHRyOworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhZ2UgIT0gQ2FuY2VsbGVkKTsK
KworICAgIC8vIFdoZW4gd2UgY2FuY2VsIGEgcGxhbiwgdGhlcmUncyBhIGNoYW5jZSB0aGF0IHRo
ZSBjb21waWxlciB0aHJlYWQgbWF5IGhhdmUKKyAgICAvLyBhbHJlYWR5IHJlZidlZCBpdCBhbmQg
aXMgd29ya2luZyBvbiBpdC4gVGhpcyByZXN1bHRzIGluIGEgcmFjZSB3aGVyZSB0aGUKKyAgICAv
LyBjb21waWxlciB0aHJlYWQgbWF5IGhvbGQgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwbGFu
LiBXZSByZXF1aXJlIHRoYXQKKyAgICAvLyB0aGUgcGxhbiBpcyBvbmx5IGRlc3RydWN0ZWQgb24g
dGhlIG11dGF0b3IgdGhyZWFkIGJlY2F1c2Ugd2UgcGlnZ3kgYmFjaworICAgIC8vIG9uIHRoZSBw
bGFuIHRvIGVuc3VyZSBjZXJ0YWluIG90aGVyIG9iamVjdHMgYXJlIG9ubHkgZGVzdHJ1Y3RlZCBv
biB0aGUKKyAgICAvLyBtdXRhdG9yIHRocmVhZC4gRm9yIGV4YW1wbGUsIHNlZSBQbGFuOjptX2lk
ZW50aWZpZXJzS2VwdEFsaXZlRm9yQ2xlYW5VcC4KKyAgICAvLworICAgIC8vIFRvIGVuc3VyZSB0
aGF0IHRoZSBwbGFuIGlzIGRlc3RydWN0ZWQgb24gdGhlIG11dGF0b3IgYW5kIG5vdCB0aGUgY29t
cGlsZXIKKyAgICAvLyB0aHJlYWQsIHRoZSBjb21waWxlciB0aHJlYWQgd2lsbCBlbnF1ZXVlIGFu
eSBjYW5jZWxsZWQgcGxhbiBpdCBzZWVzIGluCisgICAgLy8gdGhlIHdvcmtsaXN0J3MgbV9rZXB0
QWxpdmVDYW5jZWxsZWRQbGFuc0Zyb21Db21waWxlclRocmVhZC4gVGhlIG11dGF0b3IKKyAgICAv
LyB3aWxsIGxhdGVyIGRlbGV0ZSB0aGUgY2FuY2VsbGVkIHBsYW5zIGluIG1fY2FuY2VsbGVkUGxh
bnMuIEhvd2V2ZXIsIGEKKyAgICAvLyBtdXRhdG9yIHNob3VsZCBvbmx5IGRlbGV0ZSBjYW5jZWxs
ZWQgcGxhbnMgdGhhdCBiZWxvbmcgdG8gaXRzIFZNLiBIZW5jZSwKKyAgICAvLyBhIGNhbmNlbGxl
ZCBwbGFuIG5lZWRzIHRvIGtlZXAgaXRzIG1fdm0gcG9pbnRlciB0byBsZXQgdGhlIG11dGF0b3Ig
a25vdyBdCisgICAgLy8gd2hpY2ggVk0gaXQgYmVsb25ncyB0by4KKyAgICAvLworICAgIC8vIFNp
bWlsYXJseSwgcGxhbnMgbWF5IGJlIGNhbmNlbGxlZCBmcm9tIHRoZSBHQyB0aHJlYWQuIEluIHRo
YXQgY2FzZSwgdGhlCisgICAgLy8gdHJlYXRtZW50IGlzIHNhbWUgYXMgdGhlIGFib3ZlIGV4Y2Vw
dCB0aGF0IHRoZSBjYW5jZWxsZWQgcGxhbiB3aWxsIGJlCisgICAgLy8ga2VwdCBhbGl2ZSBpbiB0
aGUgd29ya2xpc3QncyBtX2tlcHRBbGl2ZUNhbmNlbGxlZFBsYW5zRnJvbUdDVGhyZWFkLgorICAg
IC8vCisgICAgLy8gUmVmOiBTZWUgV29ya2xpc3Q6OmRlbGV0ZUNhbmNlbGxlZFBsYW5zRm9yVk0o
KS4KKyAgICBBU1NFUlQobV92bSk7CisKKyAgICAvLyBOdWtlIHRoZSBWTSBwb2ludGVyIHNvIHRo
YXQgcG9pbnRlciBjaGVja3MgYWdhaW5zdCBpdCB3aWxsIGZhaWwuCisgICAgLy8gV2UgcmVseSBv
biB0aGlzIGFsbCBvdmVyIHRoZSBwbGFjZSB0byBmaWx0ZXIgb3V0IENhbmNlbGxlZCBwbGFucy4K
KyAgICBtX3ZtID0gbnVrZShtX3ZtKTsKKwogICAgIG1fY29kZUJsb2NrID0gbnVsbHB0cjsKICAg
ICBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBtX211c3RIYW5kbGVWYWx1
ZXMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lv
biAyNTMxOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1
ZGUgIlByb2ZpbGVyQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgi
CisjaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKQEAgLTgyLDYgKzgzLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgY2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkoKTsKIAogICAgIFZN
KiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KKyAgICBWTSogdW5udWtlZFZNKCkgY29uc3Qg
eyByZXR1cm4gdW5udWtlKG1fdm0pOyB9CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsg
cmV0dXJuIG1fY29kZUJsb2NrOyB9CiAKQEAgLTExNSw2ICsxMTcsMTIgQEAgcHVibGljOgogICAg
IERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayogY2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBt
X2NhbGxiYWNrLmdldCgpOyB9CiAgICAgdm9pZCBzZXRDYWxsYmFjayhSZWY8RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrPiYmIGNhbGxiYWNrKSB7IG1fY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKTsgfQogCisgICAgdm9pZCBrZWVwQWxpdmVJZGVudGlmaWVyKEJveDxJZGVudGlmaWVyPiBp
ZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIpCisgICAgICAgICAgICBt
X2lkZW50aWZpZXJzS2VwdEFsaXZlRm9yQ2xlYW5VcC5hcHBlbmQoV1RGTW92ZShpZGVudGlmaWVy
KSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpIGNv
bnN0OwogICAgIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCkgY29uc3Q7CkBAIC0xMjksNiArMTM3
LDE0IEBAIHByaXZhdGU6CiAgICAgLy8gV2FybmluZzogcHJldHR5IG11Y2ggYWxsIG9mIHRoZSBw
b2ludGVyIGZpZWxkcyBpbiB0aGlzIG9iamVjdCBnZXQgbnVsbGVkIGJ5IGNhbmNlbCgpLiBTbywg
aWYKICAgICAvLyB5b3UncmUgd3JpdGluZyBjb2RlIHRoYXQgaXMgY2FsbGFibGUgb24gdGhlIGNh
bmNlbCBwYXRoLCBiZSBzdXJlIHRvIG51bGwgY2hlY2sgZXZlcnl0aGluZyEKIAorI2lmIENQVShB
RERSRVNTNjQpCisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc19udWtlQml0ID0gMXVs
bCA8PCA2MzsKKyNlbHNlCisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc19udWtlQml0
ID0gMXVsbDsKKyNlbmRpZgorICAgIHN0YXRpYyBWTSogbnVrZShWTSogdm0pIHsgcmV0dXJuIGJp
dHdpc2VfY2FzdDxWTSo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtKSB8IHNfbnVrZUJpdCk7
IH0KKyAgICBzdGF0aWMgVk0qIHVubnVrZShWTSogdm0pIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxW
TSo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtKSAmIH5zX251a2VCaXQpOyB9CisKICAgICBD
b21waWxhdGlvbk1vZGUgbV9tb2RlOwogCiAgICAgVk0qIG1fdm07CkBAIC0xNjUsNiArMTgxLDcg
QEAgcHJpdmF0ZToKICAgICBTdGFnZSBtX3N0YWdlOwogCiAgICAgUmVmUHRyPERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjaz4gbV9jYWxsYmFjazsKKyAgICBWZWN0b3I8Qm94PElkZW50aWZpZXI+
LCAxNj4gbV9pZGVudGlmaWVyc0tlcHRBbGl2ZUZvckNsZWFuVXA7CiAKICAgICBNb25vdG9uaWNU
aW1lIG1fdGltZUJlZm9yZUZUTDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlcG9pbnQuY3BwCShyZXZpc2lvbiAyNTMxOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTMsNyArMTEz
LDcgQEAgdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCiAgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRD
YWxsQmVnaW4pOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxl
ZCk7IC8vIFdlIGNhbm5vdCBnZXQgY2FuY2VsbGVkIHR3aWNlIGJlY2F1c2Ugc3Vic2VxdWVudCBH
Q3Mgd2lsbCB0aGluayB0aGF0IHdlJ3JlIGFsaXZlIGFuZCB0aGV5IHdpbGwgbm90IGRvIGFueXRo
aW5nIHRvIHVzLgogICAgIAotICAgIG1fcGxhbi5jYW5jZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChtX3BsYW4uc3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpOwogICAgIG1fcmVzdWx0Lm1fZGlk
R2V0Q2FuY2VsbGVkID0gdHJ1ZTsKICAgICBtX3ZtID0gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNTMxOTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTYsMTIgKzk2LDE2IEBAIHByb3RlY3RlZDoKICAgICBXb3JrUmVzdWx0IHdvcmsoKSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgV29ya1Njb3BlIHdvcmtTY29wZSgqdGhpcyk7Ci0gICAg
ICAgIAorICAgICAgICBib29sIGlzSW5NdXRhdG9yID0gbV9wbGFuLT51bm51a2VkVk0oKS0+Y3Vy
cmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKTsKKwogICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2RhdGEubV9yaWdodFRvUnVuKTsKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fd29ya2xpc3QubV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnN0
YWdlKCkgPT0gUGxhbjo6Q2FuY2VsbGVkKQorICAgICAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2Uo
KSA9PSBQbGFuOjpDYW5jZWxsZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSW5NdXRhdG9y
KQorICAgICAgICAgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fa2VwdEFsaXZlQ2FuY2VsbGVkUGxh
bnNGcm9tQ29tcGlsZXJUaHJlYWQuYXBwZW5kKFdURk1vdmUobV9wbGFuKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgbV9wbGFuLT5ub3RpZnlDb21waWxpbmcoKTsKICAgICAgICAgfQogICAgICAgICAKQEAg
LTExMCw3ICsxMTQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSdz
IG5vIHdheSBmb3IgdGhlIEdDIHRvIGJlIHNhZmVwb2ludGluZyBzaW5jZSB3ZSBvd24gcmlnaHRU
b1J1bi4KICAgICAgICAgaWYgKG1fcGxhbi0+dm0oKS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BlZCBidXQgaGVyZSB3ZSBhcmUhICgx
KVxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BwZWQgYnV0IGhlcmUgd2Ug
YXJlISAoMSlcbiIpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgfQogICAgICAgICBtX3BsYW4tPmNvbXBpbGVJblRocmVhZCgmbV9kYXRhKTsKQEAg
LTEyMyw4ICsxMjcsMTEgQEAgcHJvdGVjdGVkOgogICAgICAgICAKICAgICAgICAgewogICAgICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fd29ya2xpc3QubV9sb2NrKTsKLSAgICAgICAgICAg
IGlmIChtX3BsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q2FuY2VsbGVkKQorICAgICAgICAgICAgaWYg
KG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWlzSW5NdXRhdG9yKQorICAgICAgICAgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fa2VwdEFs
aXZlQ2FuY2VsbGVkUGxhbnNGcm9tQ29tcGlsZXJUaHJlYWQuYXBwZW5kKFdURk1vdmUobV9wbGFu
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3BsYW4tPm5vdGlmeVJlYWR5KCk7
CiAgICAgICAgICAgICAKQEAgLTEzMyw5ICsxNDAsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiOiBDb21waWxlZCAiLCBtX3BsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91
c2x5XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgbV93b3Jr
bGlzdC5tX3JlYWR5UGxhbnMuYXBwZW5kKG1fcGxhbik7Ci0KICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX3BsYW4tPnZtKCktPmhlYXAud29ybGRJc1N0b3BwZWQoKSk7CisgICAgICAgICAg
ICBtX3dvcmtsaXN0Lm1fcmVhZHlQbGFucy5hcHBlbmQoV1RGTW92ZShtX3BsYW4pKTsKICAgICAg
ICAgICAgIG1fd29ya2xpc3QubV9wbGFuQ29tcGlsZWQubm90aWZ5QWxsKCk7CiAgICAgICAgIH0K
ICAgICAgICAgCkBAIC0zMDEsMTAgKzMwNyw0NiBAQCB2b2lkIFdvcmtsaXN0Ojp3YWl0VW50aWxB
bGxQbGFuc0ZvclZNQXJlCiAgICAgfQogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3I+Cit2
b2lkIHJlbW92ZUNhbmNlbGxlZFBsYW5zKFZNJiB2bSwgSGFzaFNldDxSZWZQdHI8UGxhbj4+JiBy
ZW1vdmVkUGxhbnMsIFZlY3RvciYgY2FuY2VsbGVkUGxhbnMpCit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjYW5jZWxsZWRQbGFucy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8
UGxhbj4gcGxhbiA9IGNhbmNlbGxlZFBsYW5zW2ldOworICAgICAgICBpZiAocGxhbi0+dW5udWtl
ZFZNKCkgIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhbmNlbGxlZFBs
YW5zW2ktLV0gPSBjYW5jZWxsZWRQbGFucy5sYXN0KCk7CisgICAgICAgIGNhbmNlbGxlZFBsYW5z
LnJlbW92ZUxhc3QoKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIHJlbW92ZWRQbGFu
cy5hZGQocGxhbik7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0ocmVtb3ZlZFBsYW5zKTsK
KyNlbmRpZgorICAgIH0KK30KKwordm9pZCBXb3JrbGlzdDo6ZGVsZXRlQ2FuY2VsbGVkUGxhbnNG
b3JWTShMb2NrSG9sZGVyJiwgVk0mIHZtKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIEhhc2hTZXQ8UmVmUHRyPFBsYW4+PiBy
ZW1vdmVkUGxhbnM7CisgICAgcmVtb3ZlQ2FuY2VsbGVkUGxhbnModm0sIHJlbW92ZWRQbGFucywg
bV9rZXB0QWxpdmVDYW5jZWxsZWRQbGFuc0Zyb21HQ1RocmVhZCk7CisgICAgcmVtb3ZlQ2FuY2Vs
bGVkUGxhbnModm0sIHJlbW92ZWRQbGFucywgbV9rZXB0QWxpdmVDYW5jZWxsZWRQbGFuc0Zyb21D
b21waWxlclRocmVhZCk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgd2hpbGUgKCFyZW1v
dmVkUGxhbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gcmVtb3Zl
ZFBsYW5zLnRha2VBbnkoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UoKSA9
PSBQbGFuOjpDYW5jZWxsZWQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChwbGFuLT5yZWZDb3Vu
dCgpID09IDEpOworICAgIH0KKyNlbmRpZgorfQorCiB2b2lkIFdvcmtsaXN0OjpyZW1vdmVBbGxS
ZWFkeVBsYW5zRm9yVk0oVk0mIHZtLCBWZWN0b3I8UmVmUHRyPFBsYW4+LCA4PiYgbXlSZWFkeVBs
YW5zKQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBMb2NrSG9sZGVyIGxv
Y2tlcigqbV9sb2NrKTsKKyAgICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxv
Y2soKSk7CisKKyAgICBkZWxldGVDYW5jZWxsZWRQbGFuc0ZvclZNKGxvY2tlciwgdm0pOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZWFkeVBsYW5zLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbV9yZWFkeVBsYW5zW2ldOwogICAgICAgICBpZiAocGxh
bi0+dm0oKSAhPSAmdm0pCkBAIC00MDcsNiArNDQ5LDggQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3Zl
RGVhZFBsYW5zKFZNJiB2bSkKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xv
Y2spOwogICAgICAgICBIYXNoU2V0PENvbXBpbGF0aW9uS2V5PiBkZWFkUGxhbktleXM7CisgICAg
ICAgIGJvb2wgaXNJbk11dGF0b3IgPSB2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygp
OworCiAgICAgICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4o
KTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIFBsYW4qIHBs
YW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2
bSkKQEAgLTQyMCw4ICs0NjQsMTIgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZN
JiB2bSkKICAgICAgICAgICAgIGRlYWRQbGFuS2V5cy5hZGQocGxhbi0+a2V5KCkpOwogICAgICAg
ICB9CiAgICAgICAgIGlmICghZGVhZFBsYW5LZXlzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
Zm9yIChIYXNoU2V0PENvbXBpbGF0aW9uS2V5Pjo6aXRlcmF0b3IgaXRlciA9IGRlYWRQbGFuS2V5
cy5iZWdpbigpOyBpdGVyICE9IGRlYWRQbGFuS2V5cy5lbmQoKTsgKytpdGVyKQotICAgICAgICAg
ICAgICAgIG1fcGxhbnMudGFrZSgqaXRlciktPmNhbmNlbCgpOworICAgICAgICAgICAgZm9yIChI
YXNoU2V0PENvbXBpbGF0aW9uS2V5Pjo6aXRlcmF0b3IgaXRlciA9IGRlYWRQbGFuS2V5cy5iZWdp
bigpOyBpdGVyICE9IGRlYWRQbGFuS2V5cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICAg
ICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtX3BsYW5zLnRha2UoKml0ZXIpOworICAgICAgICAgICAg
ICAgIHBsYW4tPmNhbmNlbCgpOworICAgICAgICAgICAgICAgIGlmICghaXNJbk11dGF0b3IpCisg
ICAgICAgICAgICAgICAgICAgIG1fa2VwdEFsaXZlQ2FuY2VsbGVkUGxhbnNGcm9tR0NUaHJlYWQu
YXBwZW5kKHBsYW4pOworICAgICAgICAgICAgfQogICAgICAgICAgICAgRGVxdWU8UmVmUHRyPFBs
YW4+PiBuZXdRdWV1ZTsKICAgICAgICAgICAgIHdoaWxlICghbV9xdWV1ZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1fcXVldWUudGFrZUZpcnN0KCk7
CkBAIC00NTcsNiArNTA1LDkgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlTm9uQ29tcGlsaW5nUGxh
bnNGbwogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgIEhhc2hTZXQ8Q29tcGls
YXRpb25LZXk+IGRlYWRQbGFuS2V5czsKICAgICBWZWN0b3I8UmVmUHRyPFBsYW4+PiBkZWFkUGxh
bnM7CisgICAgQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworCisg
ICAgZGVsZXRlQ2FuY2VsbGVkUGxhbnNGb3JWTShsb2NrZXIsIHZtKTsKICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogbV9wbGFucykgewogICAgICAgICBQbGFuKiBwbGFuID0gZW50cnkudmFsdWUuZ2V0
KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDI1MzE5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDYgKzkz
LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB0aHJlYWRGdW5jdGlvbih2b2lkKiBhcmd1
bWVudCk7CiAgICAgCiAgICAgdm9pZCByZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBWZWN0
b3I8UmVmUHRyPFBsYW4+LCA4PiYpOworICAgIHZvaWQgZGVsZXRlQ2FuY2VsbGVkUGxhbnNGb3JW
TShMb2NrSG9sZGVyJiwgVk0mKTsKIAogICAgIHZvaWQgZHVtcChjb25zdCBBYnN0cmFjdExvY2tl
ciYsIFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCkBAIC0xMTMsNiArMTE0LDggQEAgcHJpdmF0
ZToKICAgICAvLyBVc2VkIHRvIHF1aWNrbHkgZmluZCB3aGljaCBwbGFucyBoYXZlIGJlZW4gY29t
cGlsZWQgYW5kIGFyZSByZWFkeSB0bwogICAgIC8vIGJlIGNvbXBsZXRlZC4KICAgICBWZWN0b3I8
UmVmUHRyPFBsYW4+LCAxNj4gbV9yZWFkeVBsYW5zOworICAgIFZlY3RvcjxSZWZQdHI8UGxhbj4s
IDQ+IG1fa2VwdEFsaXZlQ2FuY2VsbGVkUGxhbnNGcm9tR0NUaHJlYWQ7CisgICAgVmVjdG9yPFJl
ZlB0cjxQbGFuPiwgND4gbV9rZXB0QWxpdmVDYW5jZWxsZWRQbGFuc0Zyb21Db21waWxlclRocmVh
ZDsKICAgICBSZWY8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3BsYW5FbnF1ZXVlZDsKICAg
ICBDb25kaXRpb24gbV9wbGFuQ29tcGlsZWQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbC5oCShyZXZpc2lvbiAyNTMxOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2wuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFN5bWJvbCogY3JlYXRlV2l0aERlc2NyaXB0aW9uKFZNJiwgY29uc3Qg
U3RyaW5nJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN5bWJvbCogY3JlYXRlKFZN
JiwgU3ltYm9sSW1wbCYgdWlkKTsKIAorICAgIFN5bWJvbEltcGwmIHVpZCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpdmF0ZU5hbWUudWlkKCk7IH0KICAgICBQcml2YXRlTmFtZSBwcml2YXRlTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJpdmF0ZU5hbWU7IH0KICAgICBTdHJpbmcgZGVzY3JpcHRpdmVT
dHJpbmcoKSBjb25zdDsKICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsK
</data>
<flag name="review"
          id="400908"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385074</attachid>
            <date>2019-12-06 18:27:09 -0800</date>
            <delta_ts>2019-12-06 18:27:09 -0800</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-204919.patch</filename>
            <type>text/plain</type>
            <size>29657</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTMyMjkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE5LTEyLTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBUaGUgY29tcGlsZXIgdGhyZWFkIHNob3VsZCBub3QgYWRqdXN0IElkZW50
aWZpZXIgcmVmQ291bnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA0OTE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NzQyNjg2MT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICAqIHN0cmVzcy9jb21waWxl
ci10aHJlYWQtc2hvdWxkLW5vdC1yZWYtaWRlbnRpZmllcnMuanM6IEFkZGVkLgorCiAyMDE5LTEy
LTA0ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10g
QUkgc2hvdWxkIGNvbnZlcnQgSXNDZWxsV2l0aFR5cGUgdG8gY29uc3RhbnQgd2hlbiBTdHJ1Y3R1
cmUgc2V0IGlzIGZpbml0ZQpJbmRleDogSlNUZXN0cy9zdHJlc3MvY29tcGlsZXItdGhyZWFkLXNo
b3VsZC1ub3QtcmVmLWlkZW50aWZpZXJzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNz
L2NvbXBpbGVyLXRocmVhZC1zaG91bGQtbm90LXJlZi1pZGVudGlmaWVycy5qcwkobm9uZXhpc3Rl
bnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9jb21waWxlci10aHJlYWQtc2hvdWxkLW5vdC1yZWYtaWRl
bnRpZmllcnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNSBAQAorLy9AIHNsb3chCisv
L0AgcnVuRGVmYXVsdAorCitmb3IgKGxldCBqID0gMDsgaiA8IDUwMDsgaisrKSB7CisgICAgcnVu
U3RyaW5nKGAKKworbGV0IGEgPSBTeW1ib2woJ2EnKTsKK2xldCBvID0geyBbYV06IDEgfTsKKwor
Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgT2JqZWN0LmdldE93blByb3Bl
cnR5U3ltYm9scyhvKTsKKyAgICBvW2FdOworfQorYCk7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI1MzIzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3NiBAQAorMjAxOS0xMi0wNiAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIGNvbXBpbGVyIHRocmVhZCBz
aG91bGQgbm90IGFkanVzdCBJZGVudGlmaWVyIHJlZkNvdW50cy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDkxOQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNTc0MjY4NjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAg
ICAgICAgMS4gUHJldmlvdXNseSwgaW4gdGhlIGNvbXBpbGVyIHRocmVhZCwgd2Ugd291bGQgZ2V0
IGEgU3ltYm9sIHVpZCB2aWEKKyAgICAgICAgICAgU3ltYm9sOjpwcml2YXRlTmFtZSgpLnVpZCgp
LiAgU3ltYm9sOjpwcml2YXRlTmFtZSgpIHJldHVybnMgYSBjb3B5IG9mIGl0cworICAgICAgICAg
ICBQcml2YXRlTmFtZSwgd2hpY2ggaW4gdHVybiByZXN1bHRzIGluIHJlZidpbmcgdGhlIHVuZGVy
bHlpbmcgU3ltYm9sSW1wbC4KKyAgICAgICAgICAgVGhpcyByZXN1bHRzIGluIGEgcmFjZSBiZXR3
ZWVuIHRoZSBtdXRhdG9yIGFuZCBjb21waWxlciB0aHJlYWRzIHRvIGFkanVzdCB0aGUKKyAgICAg
ICAgICAgU3ltYm9sSW1wbCdzIHJlZkNvdW50LCB3aGljaCBtYXkgcmVzdWx0IGluIGNvcnJ1cHRp
b24uCisKKyAgICAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGJ5IGFkZGluZyBTeW1ib2w6
OnVpZCgpIHdoaWNoIHJldHVybiB0aGUgdW5kZXJseWluZworICAgICAgICAgICBTeW1ib2xJbXBs
IHdpdGhvdXQgcmVmJ2luZyBpdC4KKworICAgICAgICAyLiBQcmV2aW91c2x5LCBpbiB0aGUgY29t
cGlsZXIgdGhyZWFkLCB3ZSBhbHNvIGNyZWF0ZSBCb3g8SWRlbnRpZmllcj4gdmlhIGl0cworICAg
ICAgICAgICBjb3B5IGNvbnN0cnVjdG9yLiAgVGhlIG9yaWdpbmFsIEJveDxJZGVudGlmaWVyPiBp
cyBpbnN0YW50aWF0ZWQgaW4gdGhlIG11dGF0b3IuCisgICAgICAgICAgIFRoZSBCb3g8SWRlbnRp
Zmllcj4gcmVmcyBpdHMgaW50ZXJuYWwgRGF0YSwgd2hpY2ggaXMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQgYW5kCisgICAgICAgICAgIHNoYXJlZCBieSBhbGwgQm94PElkZW50aWZpZXI+IGZvciB0aGUg
c2FtZSB1bmRlcmx5aW5nIElkZW50aWZpZXIuCisgICAgICAgICAgIFRoaXMgZW5zdXJlcyB0aGF0
IHRoZSBjb21waWxlciB0aHJlYWQgZG9lcyBub3QgcmVmIHRoZSB1bmRlcmx5aW5nIElkZW50aWZp
ZXIuCisKKyAgICAgICAgICAgSG93ZXZlciwgd2hlbiB0aGUgQm94PElkZW50aWZpZXI+IGlzIGRl
c3RydWN0ZWQsIGl0IHdpbGwgYWxzbyBjaGVjayBpZiBpdCBob2xkcworICAgICAgICAgICB0aGUg
bGFzdCByZWYgdG8gaXRzIGludGVybmFsIERhdGEuICBJZiBzbywgaXQgd2lsbCBkZXN0cnVjdCBp
dHMgRGF0YSwgYW5kIHRoZQorICAgICAgICAgICBJZGVudGlmaWVyIHRoYXQgaXQgZW1iZWRzLiAg
VGhpcyByZXN1bHRzIGluIHRoZSBjb21waWxlciB0aHJlYWQgdHJ5aW5nIHRvIGRlcmVmCisgICAg
ICAgICAgIHRoZSBTdHJpbmdJbXBsIHJlZmVyZW5jZWQgYnkgdGhlIElkZW50aWZpZXIgaW4gYSBy
YWNlIGFnYWluc3QgdGhlIG11dGF0b3IuCisKKyAgICAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyB0
aGlzIGJ5IGVuc3VyaW5nIHRoYXQgZm9yIGFueSBCb3g8SWRlbnRpZmllcj4gaW5zdGFuY2UgdXNl
ZAorICAgICAgICAgICBieSB0aGUgY29tcGlsZXIgdGhyZWFkLCB3ZSB3aWxsIHJlZ2lzdGVyIGFu
b3RoZXIgaW5zdGFuY2UgaW4gdGhlIERGRzo6UGxhbgorICAgICAgICAgICBtX2lkZW50aWZpZXJz
S2VwdEFsaXZlRm9yQ2xlYW5VcCBsaXN0LCBhbmQgbGV0IHRoZSBtdXRhdG9yIGRlc3RydWN0IHRo
YXQKKyAgICAgICAgICAgQm94PElkZW50aWZpZXI+IGxhdGVyIGluIHRoZSBtdXRhdG9yLiAgVGhp
cyBlbnN1cmVzIHRoYXQgdGhlIGNvbXBpbGVyIHRocmVhZAorICAgICAgICAgICB3aWxsIG5ldmVy
IHNlZSB0aGUgbGFzdCByZWZlcmVuY2UgdG8gYSBCb3g8SWRlbnRpZmllcj4ncyBpbnRlcm5hbCBE
YXRhIGFuZAorICAgICAgICAgICBhdm9pZCB0aGUgcmFjZS4KKworICAgICAgICAzLiBUaGlzIHBh
dGNoIGFsc28gZml4ZXMgdGhlIERGRzo6V29ya2xpc3QgY29kZSB0byBlbnN1cmUgdGhhdCBhIERG
Rzo6UGxhbiBpcworICAgICAgICAgICBhbHdheXMgZGVzdHJ1Y3RlZCBpbiB0aGUgbXV0YXRvciwg
ZXZlbiBpZiB0aGUgUGxhbiB3YXMgY2FuY2VsbGVkLgorCisgICAgICAgICAgIFRoaXMsIGluIHR1
cm4sIGVuYWJsZXMgdXMgdG8gYXNzZXJ0IHRoYXQgdGhlIFBsYW4gaXMgbmV2ZXIgZGVzdHJ1Y3Rl
ZCBpbiB0aGUKKyAgICAgICAgICAgY29tcGlsZXIgdGhyZWFkLgorCisgICAgICAgICogYnl0ZWNv
ZGUvR2V0QnlTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZv
cik6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0
RXhpdFNpdGVGZWVkYmFjayk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaDoKKyAg
ICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpk
ZXRhY2gpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VHZXRCeUlkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFu
dEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlBsYW46On5QbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
bGFuOjpjb21wdXRlQ29tcGlsZVRpbWVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
OjpjYW5jZWwpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6dW5udWtlZFZNIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjprZWVwQWxp
dmVJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpudWtlKToKKyAgICAgICAg
KEpTQzo6REZHOjpQbGFuOjp1bm51a2UpOgorICAgICAgICAqIGRmZy9ERkdTYWZlcG9pbnQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNhZmVwb2ludDo6Y2FuY2VsKToKKyAgICAgICAgKiBkZmcv
REZHV29ya2xpc3QuY3BwOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpkZWxldGVDYW5j
ZWxsZWRQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6cmVtb3ZlQWxs
UmVhZHlQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6cmVtb3ZlRGVh
ZFBsYW5zKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6cmVtb3ZlTm9uQ29tcGlsaW5n
UGxhbnNGb3JWTSk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0Lmg6CisgICAgICAgICogcnVu
dGltZS9TeW1ib2wuaDoKKwogMjAxOS0xMi0wNiAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVl
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjI1MzIxOC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNw
cAkocmV2aXNpb24gMjUzMTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIEdldEJ5U3Rh
dHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW4KICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1HZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRXhp
dEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVE
YXRhLCBUcmFja0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMpCitHZXRCeVN0YXR1cyBHZXRC
eVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFw
JiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2Fs
bExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhLCBUcmFja0lkZW50aWZp
ZXJzIHRyYWNrSWRlbnRpZmllcnMsIElkZW50aWZpZXJLZWVwQWxpdmUmIGtlZXBBbGl2ZSkKIHsK
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAK
QEAgLTEyMSw3ICsxMjEsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihD
b2RlCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1Yklu
Zm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjaygKLSAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2Nr
LCBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJbmZvLCBjYWxsRXhpdFNp
dGVEYXRhLCB0cmFja0lkZW50aWZpZXJzKTsKKyAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2Nr
LCBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJbmZvLCBjYWxsRXhpdFNp
dGVEYXRhLCB0cmFja0lkZW50aWZpZXJzLCBrZWVwQWxpdmUpOwogICAgIAogICAgIGlmIChkaWRF
eGl0KQogICAgICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7CkBAIC0xNjcsNyArMTY3
LDcgQEAgR2V0QnlTdGF0dXM6OkdldEJ5U3RhdHVzKGNvbnN0IE1vZHVsZU5hbQogfQogCiBHZXRC
eVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVl
ZGJhY2soCi0gICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayog
cHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDYWxsTGlua1N0YXR1
czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJ
ZGVudGlmaWVycykKKyAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENhbGxMaW5r
U3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSwgVHJhY2tJZGVudGlmaWVycyB0
cmFja0lkZW50aWZpZXJzLCBJZGVudGlmaWVyS2VlcEFsaXZlJiBrZWVwQWxpdmUpCiB7CiAgICAg
U3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShzdHVi
SW5mbyk7CiAgICAgaWYgKCFpc0lubGluZWFibGUoc3VtbWFyeSkpCkBAIC0xODYsNiArMTg2LDcg
QEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICBpZiAo
c3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAg
ICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHVi
SW5mbyk7CiAgICAgICAgIEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyID0gc3R1YkluZm8tPmdl
dEJ5SWRTZWxmSWRlbnRpZmllcigpOworICAgICAgICBrZWVwQWxpdmUoaWRlbnRpZmllcik7CiAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLT5pbXBsKCk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7CiAgICAgICAgIGlmICh0cmFja0lkZW50aWZpZXJzID09
IFRyYWNrSWRlbnRpZmllcnM6Ok5vKQpAQCAtMjEwLDYgKzIxMSw3IEBAIEdldEJ5U3RhdHVzIEdl
dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2Um
IGFjY2VzcyA9IGxpc3QtPmF0KDApOwogICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgp
KSB7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6Ok1vZHVsZU5hbWVzcGFjZUxvYWQ6Cisg
ICAgICAgICAgICAgICAga2VlcEFsaXZlKGFjY2Vzcy5pZGVudGlmaWVyKCkpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhhY2Nlc3MuYXM8TW9kdWxlTmFtZXNwYWNlQWNjZXNz
Q2FzZT4oKSk7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMjkzLDggKzI5NSwxMiBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0
dWJJCiAgICAgICAgICAgICAgICAgfSB9CiAKICAgICAgICAgICAgICAgICBBU1NFUlQoKEFjY2Vz
c0Nhc2U6Ok1pc3MgPT0gYWNjZXNzLnR5cGUoKSB8fCBhY2Nlc3MuaXNDdXN0b20oKSkgPT0gKGFj
Y2Vzcy5vZmZzZXQoKSA9PSBpbnZhbGlkT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgR2V0QnlJ
ZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgdHJhY2tJZGVudGlmaWVycyA9
PSBUcmFja0lkZW50aWZpZXJzOjpZZXMgPyBhY2Nlc3MuaWRlbnRpZmllcigpIDogQm94PElkZW50
aWZpZXI+KG51bGxwdHIpLCBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0YXR1
cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICBCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllcjsK
KyAgICAgICAgICAgICAgICBpZiAodHJhY2tJZGVudGlmaWVycyA9PSBUcmFja0lkZW50aWZpZXJz
OjpZZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGFjY2Vzcy5pZGVudGlm
aWVyKCk7CisgICAgICAgICAgICAgICAgICAgIGtlZXBBbGl2ZShpZGVudGlmaWVyKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudChpZGVu
dGlmaWVyLCBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQo
KSwKICAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwg
V1RGTW92ZShjYWxsTGlua1N0YXR1cyksCiAgICAgICAgICAgICAgICAgICAgIGludHJpbnNpY0Z1
bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICBjdXN0b21BY2Nlc3NvckdldHRlciwKQEAgLTMy
OSw3ICszMzUsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAK
IEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLAotICAgIElDU3RhdHVzQ29udGV4
dFN0YWNrJiBpY0NvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBUcmFja0lkZW50
aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMpCisgICAgSUNTdGF0dXNDb250ZXh0U3RhY2smIGljQ29u
dGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJ
ZGVudGlmaWVycywgSWRlbnRpZmllcktlZXBBbGl2ZSYga2VlcEFsaXZlKQogewogICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAg
IENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5r
U3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgp
OwpAQCAtMzQ0LDcgKzM1MCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9y
KAogICAgICAgICAgICAgICAgIC8vIGlubGluZWQgYW5kIG5vdC1pbmxpbmVkLgogICAgICAgICAg
ICAgICAgIEdldEJ5U3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigKICAgICAgICAg
ICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRp
ZEV4aXQsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRp
ZmllcnMpOworICAgICAgICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhLCB0cmFja0lkZW50
aWZpZXJzLCBrZWVwQWxpdmUpOwogICAgICAgICAgICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdl
KHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lUmVzdWx0OwogICAgICAg
ICAgICAgfQpAQCAtMzU4LDcgKzM2NCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21w
dXRlRm9yKAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNr
KAotICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9j
aywgc3RhdHVzLnN0dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhLCB0cmFja0lkZW50aWZpZXJzKTsK
KyAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ss
IHN0YXR1cy5zdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJZGVudGlmaWVycywga2Vl
cEFsaXZlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTZXQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsKQEAgLTM2OCw3ICszNzQsNyBA
QCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIHJldHVy
biBibGVzcygqc3RhdHVzLmdldFN0YXR1cyk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBjb21w
dXRlRm9yKHByb2ZpbGVkQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0
LCBjYWxsRXhpdFNpdGVEYXRhLCB0cmFja0lkZW50aWZpZXJzKTsKKyAgICByZXR1cm4gY29tcHV0
ZUZvcihwcm9maWxlZEJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgZGlkRXhpdCwg
Y2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJZGVudGlmaWVycywga2VlcEFsaXZlKTsKIH0KIAogR2V0
QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkocmV2aXNpb24gMjUzMTk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw4
ICs5MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV93YXNTZWVuSW5KSVQod2FzU2VlbkluSklU
KQogICAgIHsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1dGVGb3Io
Q29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3Rh
dHVzQ29udGV4dFN0YWNrJiBkZmdDb250ZXh0U3RhY2ssIENvZGVPcmlnaW4sIFRyYWNrSWRlbnRp
ZmllcnMpOworCisgICAgLy8gSWYgd2UgdXNlIGEgQm94PElkZW50aWZpZXI+IGluIHRoZSBjb21w
aWxlciB0aHJlYWQsIHdlIG5lZWQgdG8ga2VlcCB0aGUKKyAgICAvLyBJZGVudGlmaWVyIGFsaXZl
IGFuZCBvbmx5IGRlcmVmIGl0IGluIHRoZSBtdXRhdG9yIHRocmVhZCBsYXRlci4gVGhpcworICAg
IC8vIGVuc3VyZXMgdGhhdCB0aGUgY29tcGlsZXIgdGhyZWFkIGRvZXNuJ3QgcmFjZSBhZ2FpbnN0
IHRoZSBtdXRhdG9yIGluCisgICAgLy8gYWRqdXN0aW5nIHRoZSBJZGVudGlmaWVyJ3MgcmVmQ291
bnQuCisgICAgdXNpbmcgSWRlbnRpZmllcktlZXBBbGl2ZSA9IHN0ZDo6ZnVuY3Rpb248dm9pZChC
b3g8SWRlbnRpZmllcj4pPjsKKworICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRm9yKENv
ZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1
c0NvbnRleHRTdGFjayYgZGZnQ29udGV4dFN0YWNrLCBDb2RlT3JpZ2luLCBUcmFja0lkZW50aWZp
ZXJzLCBJZGVudGlmaWVyS2VlcEFsaXZlJik7CiAgICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1
dGVGb3IoY29uc3QgU3RydWN0dXJlU2V0JiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKIAogICAgIFN0
YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQpAQCAtMTI2LDcgKzEzMiw3IEBA
IHB1YmxpYzoKICAgICBib29sIGZpbmFsaXplKFZNJik7IC8vIFJldHVybiB0cnVlIGlmIHRoaXMg
Z2V0cyB0byBsaXZlLgogCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJp
YW50Jik7Ci0gICAgCisKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAg
IEJveDxJZGVudGlmaWVyPiBzaW5nbGVJZGVudGlmaWVyKCkgY29uc3Q7CkBAIC0xMzcsMTAgKzE0
MywxMCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShKSVQpCiAgICAgR2V0QnlTdGF0dXMoY29uc3Qg
TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZSYpOwogICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21w
dXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjaygKLSAgICAgICAgY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyosIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMpOwor
ICAgICAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSwgVHJh
Y2tJZGVudGlmaWVycywgSWRlbnRpZmllcktlZXBBbGl2ZSYpOwogI2VuZGlmCiAgICAgc3RhdGlj
IEdldEJ5U3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCwg
VHJhY2tJZGVudGlmaWVycyk7Ci0gICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29k
ZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4LCBFeGl0RmxhZywgQ2FsbExpbmtT
dGF0dXM6OkV4aXRTaXRlRGF0YSwgVHJhY2tJZGVudGlmaWVycyk7CisgICAgc3RhdGljIEdldEJ5
U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4
LCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSwgVHJhY2tJZGVudGlmaWVy
cywgSWRlbnRpZmllcktlZXBBbGl2ZSYpOwogCiAgICAgc3RydWN0IE1vZHVsZU5hbWVzcGFjZURh
dGEgewogICAgICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbV9tb2R1bGVOYW1lc3BhY2VP
YmplY3QgeyBudWxscHRyIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDI1MzE5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw2ICsxNzQsOCBA
QCB2b2lkIERlYnVnZ2VyOjpkZXRhY2goSlNHbG9iYWxPYmplY3QqIGdsCiAgICAgLy8gc2luY2Ug
dGhlcmUncyBubyBwb2ludCBpbiBzdGF5aW5nIHBhdXNlZCBvbmNlIGEgd2luZG93IGNsb3Nlcy4K
ICAgICAvLyBXZSBrbm93IHRoZXJlIGlzIGFuIGVudHJ5IHNjb3BlLCBvdGhlcndpc2UsIG1fY3Vy
cmVudENhbGxGcmFtZSB3b3VsZCBiZSBudWxsLgogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKwogICAgIGlmIChtX2lzUGF1c2Vk
ICYmIG1fY3VycmVudENhbGxGcmFtZSAmJiB2bS5lbnRyeVNjb3BlLT5nbG9iYWxPYmplY3QoKSA9
PSBnbG9iYWxPYmplY3QpIHsKICAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gbnVsbHB0cjsK
ICAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDI1MzE5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcwMCw3ICsz
NzAwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKGNoaWxkQ29uc3RhbnQuaXNTeW1ib2woKSkgewotICAgICAgICAgICAgICAgIGlmICgm
anNDYXN0PFN5bWJvbCo+KGNoaWxkQ29uc3RhbnQpLT5wcml2YXRlTmFtZSgpLnVpZCgpID09IHVp
ZCkgeworICAgICAgICAgICAgICAgIGlmICgmanNDYXN0PFN5bWJvbCo+KGNoaWxkQ29uc3RhbnQp
LT51aWQoKSA9PSB1aWQpIHsKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRTaG91bGRU
cnlDb25zdGFudEZvbGRpbmcodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyNTMxOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcxMywx
MCArNDcxMywxMyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUdldEJ5SWQoY29uc3QgCiAg
ICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOwogICAgIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29k
ZS5tX3Byb3BlcnR5XTsKICAgICAKKyAgICBHZXRCeVN0YXR1czo6SWRlbnRpZmllcktlZXBBbGl2
ZSBrZWVwQWxpdmUgPSBbJl0gKEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyKSB7CisgICAgICAg
IG1fZ3JhcGgubV9wbGFuLmtlZXBBbGl2ZUlkZW50aWZpZXIoV1RGTW92ZShpZGVudGlmaWVyKSk7
CisgICAgfTsKICAgICBHZXRCeVN0YXR1cyBnZXRCeVN0YXR1cyA9IEdldEJ5U3RhdHVzOjpjb21w
dXRlRm9yKAogICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCiAgICAg
ICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCi0g
ICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCksIEdldEJ5U3RhdHVzOjpUcmFja0lkZW50aWZpZXJz
OjpObyk7CisgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCksIEdldEJ5U3RhdHVzOjpUcmFja0lk
ZW50aWZpZXJzOjpObywga2VlcEFsaXZlKTsKIAogICAgIEFjY2Vzc1R5cGUgdHlwZSA9IEFjY2Vz
c1R5cGU6OkdldEJ5SWQ7CiAgICAgdW5zaWduZWQgb3Bjb2RlTGVuZ3RoID0gY3VycmVudEluc3Ry
dWN0aW9uLT5zaXplKCk7CkBAIC01NjI1LDcgKzU2MjgsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRl
Y29kZS5tX2Jhc2UpOwogICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSk7CiAgICAgICAgICAgICBib29sIHNob3VsZENvbXBpbGVBc0dldEJ5SWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIEdldEJ5U3RhdHVzIGdldEJ5U3RhdHVzID0gR2V0QnlTdGF0dXM6
OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0
YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29kZU9yaWdp
bigpLCBHZXRCeVN0YXR1czo6VHJhY2tJZGVudGlmaWVyczo6WWVzKTsKKyAgICAgICAgICAgIEdl
dEJ5U3RhdHVzOjpJZGVudGlmaWVyS2VlcEFsaXZlIGtlZXBBbGl2ZSA9IFsmXSAoQm94PElkZW50
aWZpZXI+IGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi5rZWVw
QWxpdmVJZGVudGlmaWVyKFdURk1vdmUoaWRlbnRpZmllcikpOworICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIEdldEJ5U3RhdHVzIGdldEJ5U3RhdHVzID0gR2V0QnlTdGF0dXM6OmNvbXB1dGVG
b3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5t
X2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29kZU9yaWdpbigpLCBHZXRC
eVN0YXR1czo6VHJhY2tJZGVudGlmaWVyczo6WWVzLCBrZWVwQWxpdmUpOworCiAgICAgICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gMDsKIAogICAgICAgICAgICAgaWYgKCFtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRJZGVudCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyNTMxOTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzI4LDcgKzMyOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25zdGFudC5pc1N5bWJvbCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2wqIHN5bWJvbCA9IGpzQ2FzdDxTeW1i
b2wqPihjaGlsZENvbnN0YW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50VWlk
ID0gJnN5bWJvbC0+cHJpdmF0ZU5hbWUoKS51aWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0YW50VWlkID0gJnN5bWJvbC0+dWlkKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAkocmV2aXNpb24gMjUzMTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQAogI2luY2x1ZGUgIlByb2ZpbGVy
RGF0YWJhc2UuaCIKICNpbmNsdWRlICJUcmFja2VkUmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIlZN
SW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogI2lmIEVOQUJMRShGVExf
SklUKQogI2luY2x1ZGUgIkZUTENhcGFiaWxpdGllcy5oIgpAQCAtMTU0LDEzICsxNTUsMTQgQEAg
UGxhbjo6UGxhbihDb2RlQmxvY2sqIHBhc3NlZENvZGVCbG9jaywgQwogCiBQbGFuOjp+UGxhbigp
CiB7CisgICAgUkVMRUFTRV9BU1NFUlQodW5udWtlZFZNKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdBUElMb2NrKCkpOwogfQogCiBib29sIFBsYW46OmNvbXB1dGVDb21waWxlVGltZXMoKSBjb25z
dAogewogICAgIHJldHVybiByZXBvcnRDb21waWxlVGltZXMoKQogICAgICAgICB8fCBPcHRpb25z
OjpyZXBvcnRUb3RhbENvbXBpbGVUaW1lcygpCi0gICAgICAgIHx8IChtX3ZtICYmIG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlcik7CisgICAgICAgIHx8IHVubnVrZWRWTSgpLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXI7CiB9CiAKIGJvb2wgUGxhbjo6cmVwb3J0Q29tcGlsZVRpbWVzKCkgY29uc3QK
QEAgLTY5Myw3ICs2OTUsMzAgQEAgYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQygp
CiAKIHZvaWQgUGxhbjo6Y2FuY2VsKCkKIHsKLSAgICBtX3ZtID0gbnVsbHB0cjsKKyAgICBSRUxF
QVNFX0FTU0VSVChtX3N0YWdlICE9IENhbmNlbGxlZCk7CisKKyAgICAvLyBXaGVuIHdlIGNhbmNl
bCBhIHBsYW4sIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgY29tcGlsZXIgdGhyZWFkIG1heSBo
YXZlCisgICAgLy8gYWxyZWFkeSByZWYnZWQgaXQgYW5kIGlzIHdvcmtpbmcgb24gaXQuIFRoaXMg
cmVzdWx0cyBpbiBhIHJhY2Ugd2hlcmUgdGhlCisgICAgLy8gY29tcGlsZXIgdGhyZWFkIG1heSBo
b2xkIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgcGxhbi4gV2UgcmVxdWlyZSB0aGF0CisgICAg
Ly8gdGhlIHBsYW4gaXMgb25seSBkZXN0cnVjdGVkIG9uIHRoZSBtdXRhdG9yIHRocmVhZCBiZWNh
dXNlIHdlIHBpZ2d5IGJhY2sKKyAgICAvLyBvbiB0aGUgcGxhbiB0byBlbnN1cmUgY2VydGFpbiBv
dGhlciBvYmplY3RzIGFyZSBvbmx5IGRlc3RydWN0ZWQgb24gdGhlCisgICAgLy8gbXV0YXRvciB0
aHJlYWQuIEZvciBleGFtcGxlLCBzZWUgUGxhbjo6bV9pZGVudGlmaWVyc0tlcHRBbGl2ZUZvckNs
ZWFuVXAuCisgICAgLy8KKyAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgcGxhbiBpcyBkZXN0cnVj
dGVkIG9uIHRoZSBtdXRhdG9yIGFuZCBub3QgdGhlIGNvbXBpbGVyCisgICAgLy8gdGhyZWFkLCB0
aGUgY29tcGlsZXIgdGhyZWFkIHdpbGwgZW5xdWV1ZSBhbnkgY2FuY2VsbGVkIHBsYW4gaXQgc2Vl
cyBpbgorICAgIC8vIHRoZSB3b3JrbGlzdCdzIG1fY2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1
Y3Rpb24uIFRoZSBtdXRhdG9yIHdpbGwgbGF0ZXIKKyAgICAvLyBkZWxldGUgdGhlIGNhbmNlbGxl
ZCBwbGFucyBpbiBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uLgorICAgIC8vIEhv
d2V2ZXIsIGEgbXV0YXRvciBzaG91bGQgb25seSBkZWxldGUgY2FuY2VsbGVkIHBsYW5zIHRoYXQg
YmVsb25nIHRvIGl0cworICAgIC8vIFZNLiBIZW5jZSwgYSBjYW5jZWxsZWQgcGxhbiBuZWVkcyB0
byBrZWVwIGl0cyBtX3ZtIHBvaW50ZXIgdG8gbGV0IHRoZQorICAgIC8vIG11dGF0b3Iga25vdyB3
aGljaCBWTSBpdCBiZWxvbmdzIHRvLgorICAgIC8vIFJlZjogU2VlIFdvcmtsaXN0OjpkZWxldGVD
YW5jZWxsZWRQbGFuc0ZvclZNKCkuCisgICAgQVNTRVJUKG1fdm0pOworCisgICAgLy8gTnVrZSB0
aGUgVk0gcG9pbnRlciBzbyB0aGF0IHBvaW50ZXIgY29tcGFyaXNvbnMgYWdhaW5zdCBpdCB3aWxs
IGZhaWwuCisgICAgLy8gV2UgcmVseSBvbiBWTSBwb2ludGVyIGNvbXBhcmlzb24gaW4gbWFueSBw
bGFjZXMgdG8gZmlsdGVyIG91dCBDYW5jZWxsZWQKKyAgICAvLyBwbGFucy4KKyAgICBtX3ZtID0g
bnVrZShtX3ZtKTsKKwogICAgIG1fY29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBtX3Byb2ZpbGVk
REZHQ29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBtX211c3RIYW5kbGVWYWx1ZXMuY2xlYXIoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNTMxOTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByb2ZpbGVy
Q29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCisjaW5jbHVkZSA8
d3RmL0JveC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CiAKQEAgLTgyLDYgKzgzLDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkoKTsKIAogICAgIFZNKiB2bSgpIGNvbnN0
IHsgcmV0dXJuIG1fdm07IH0KKyAgICBWTSogdW5udWtlZFZNKCkgY29uc3QgeyByZXR1cm4gdW5u
dWtlKG1fdm0pOyB9CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29k
ZUJsb2NrOyB9CiAKQEAgLTExNSw2ICsxMTcsMTIgQEAgcHVibGljOgogICAgIERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjayogY2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrLmdl
dCgpOyB9CiAgICAgdm9pZCBzZXRDYWxsYmFjayhSZWY8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrPiYmIGNhbGxiYWNrKSB7IG1fY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsgfQogCisg
ICAgdm9pZCBrZWVwQWxpdmVJZGVudGlmaWVyKEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyKQor
ICAgIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIpCisgICAgICAgICAgICBtX2lkZW50aWZpZXJz
S2VwdEFsaXZlRm9yQ2xlYW5VcC5hcHBlbmQoV1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAgfQor
CiBwcml2YXRlOgogICAgIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpIGNvbnN0OwogICAgIGJv
b2wgcmVwb3J0Q29tcGlsZVRpbWVzKCkgY29uc3Q7CkBAIC0xMjksNiArMTM3LDE0IEBAIHByaXZh
dGU6CiAgICAgLy8gV2FybmluZzogcHJldHR5IG11Y2ggYWxsIG9mIHRoZSBwb2ludGVyIGZpZWxk
cyBpbiB0aGlzIG9iamVjdCBnZXQgbnVsbGVkIGJ5IGNhbmNlbCgpLiBTbywgaWYKICAgICAvLyB5
b3UncmUgd3JpdGluZyBjb2RlIHRoYXQgaXMgY2FsbGFibGUgb24gdGhlIGNhbmNlbCBwYXRoLCBi
ZSBzdXJlIHRvIG51bGwgY2hlY2sgZXZlcnl0aGluZyEKIAorI2lmIENQVShBRERSRVNTNjQpCisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc19udWtlQml0ID0gMXVsbCA8PCA2MzsKKyNl
bHNlCisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc19udWtlQml0ID0gMXVsbDsKKyNl
bmRpZgorICAgIHN0YXRpYyBWTSogbnVrZShWTSogdm0pIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxW
TSo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtKSB8IHNfbnVrZUJpdCk7IH0KKyAgICBzdGF0
aWMgVk0qIHVubnVrZShWTSogdm0pIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxWTSo+KGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KHZtKSAmIH5zX251a2VCaXQpOyB9CisKICAgICBDb21waWxhdGlvbk1v
ZGUgbV9tb2RlOwogCiAgICAgVk0qIG1fdm07CkBAIC0xNjUsNiArMTgxLDcgQEAgcHJpdmF0ZToK
ICAgICBTdGFnZSBtX3N0YWdlOwogCiAgICAgUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjaz4gbV9jYWxsYmFjazsKKyAgICBWZWN0b3I8Qm94PElkZW50aWZpZXI+LCAxNj4gbV9pZGVu
dGlmaWVyc0tlcHRBbGl2ZUZvckNsZWFuVXA7CiAKICAgICBNb25vdG9uaWNUaW1lIG1fdGltZUJl
Zm9yZUZUTDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2lu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9p
bnQuY3BwCShyZXZpc2lvbiAyNTMxOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBT
YWZlcG9pbnQ6OmNhbmNlbCgpCiAgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwog
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCk7IC8vIFdlIGNh
bm5vdCBnZXQgY2FuY2VsbGVkIHR3aWNlIGJlY2F1c2Ugc3Vic2VxdWVudCBHQ3Mgd2lsbCB0aGlu
ayB0aGF0IHdlJ3JlIGFsaXZlIGFuZCB0aGV5IHdpbGwgbm90IGRvIGFueXRoaW5nIHRvIHVzLgog
ICAgIAotICAgIG1fcGxhbi5jYW5jZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3BsYW4uc3Rh
Z2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpOwogICAgIG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVk
ID0gdHJ1ZTsKICAgICBtX3ZtID0gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNTMxOTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsMTIg
Kzk2LDE0IEBAIHByb3RlY3RlZDoKICAgICBXb3JrUmVzdWx0IHdvcmsoKSBvdmVycmlkZQogICAg
IHsKICAgICAgICAgV29ya1Njb3BlIHdvcmtTY29wZSgqdGhpcyk7Ci0gICAgICAgIAorCiAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZGF0YS5tX3JpZ2h0VG9SdW4pOwogICAgICAgICB7CiAg
ICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV93b3JrbGlzdC5tX2xvY2spOwotICAgICAg
ICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpCisgICAgICAgICAg
ICBpZiAobV9wbGFuLT5zdGFnZSgpID09IFBsYW46OkNhbmNlbGxlZCkgeworICAgICAgICAgICAg
ICAgIG1fd29ya2xpc3QubV9jYW5jZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbi5hcHBlbmQo
V1RGTW92ZShtX3BsYW4pKTsKICAgICAgICAgICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29u
dGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX3BsYW4tPm5vdGlmeUNvbXBpbGlu
ZygpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTEwLDcgKzExMiw3IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgCiAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gd2F5IGZvciB0aGUgR0MgdG8gYmUgc2Fm
ZXBvaW50aW5nIHNpbmNlIHdlIG93biByaWdodFRvUnVuLgogICAgICAgICBpZiAobV9wbGFuLT52
bSgpLT5oZWFwLndvcmxkSXNTdG9wcGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIkhlYXAg
aXMgc3RvcGVkIGJ1dCBoZXJlIHdlIGFyZSEgKDEpXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2co
IkhlYXAgaXMgc3RvcHBlZCBidXQgaGVyZSB3ZSBhcmUhICgxKVxuIik7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIG1fcGxhbi0+
Y29tcGlsZUluVGhyZWFkKCZtX2RhdGEpOwpAQCAtMTIzLDggKzEyNSwxMCBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIAogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV93
b3JrbGlzdC5tX2xvY2spOwotICAgICAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFu
OjpDYW5jZWxsZWQpCisgICAgICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSgpID09IFBsYW46OkNh
bmNlbGxlZCkgeworICAgICAgICAgICAgICAgIG1fd29ya2xpc3QubV9jYW5jZWxsZWRQbGFuc1Bl
bmRpbmdEZXN0cnVjdGlvbi5hcHBlbmQoV1RGTW92ZShtX3BsYW4pKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1fcGxhbi0+bm90aWZ5UmVhZHkoKTsKICAgICAgICAgICAgIApAQCAt
MTMzLDkgKzEzNyw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgICAgICBkYXRhTG9nKCI6IENv
bXBpbGVkICIsIG1fcGxhbi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHlcbiIpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3dvcmtsaXN0Lm1fcmVhZHlQbGFucy5h
cHBlbmQobV9wbGFuKTsKLQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGxhbi0+dm0o
KS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKTsKKyAgICAgICAgICAgIG1fd29ya2xpc3QubV9yZWFk
eVBsYW5zLmFwcGVuZChXVEZNb3ZlKG1fcGxhbikpOwogICAgICAgICAgICAgbV93b3JrbGlzdC5t
X3BsYW5Db21waWxlZC5ub3RpZnlBbGwoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTMwMSwx
MCArMzA0LDQwIEBAIHZvaWQgV29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmUKICAg
ICB9CiB9CiAKK3ZvaWQgV29ya2xpc3Q6OmRlbGV0ZUNhbmNlbGxlZFBsYW5zRm9yVk0oTG9ja0hv
bGRlciYsIFZNJiB2bSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nQVBJTG9jaygpKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgSGFzaFNldDxSZWZQ
dHI8UGxhbj4+IHJlbW92ZWRQbGFuczsKKyNlbmRpZgorCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbV9jYW5jZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVj
dGlvbltpXTsKKyAgICAgICAgaWYgKHBsYW4tPnVubnVrZWRWTSgpICE9ICZ2bSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9u
W2ktLV0gPSBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uLmxhc3QoKTsKKyAgICAg
ICAgbV9jYW5jZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbi5yZW1vdmVMYXN0KCk7CisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgICAgICByZW1vdmVkUGxhbnMuYWRkKHBsYW4pOworI2VuZGlm
CisgICAgfQorCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHdoaWxlICghcmVtb3ZlZFBsYW5z
LmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IHJlbW92ZWRQbGFucy50
YWtlQW55KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlKCkgPT0gUGxhbjo6
Q2FuY2VsbGVkKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+cmVmQ291bnQoKSA9PSAx
KTsKKyAgICB9CisjZW5kaWYKK30KKwogdm9pZCBXb3JrbGlzdDo6cmVtb3ZlQWxsUmVhZHlQbGFu
c0ZvclZNKFZNJiB2bSwgVmVjdG9yPFJlZlB0cjxQbGFuPiwgOD4mIG15UmVhZHlQbGFucykKIHsK
ICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1f
bG9jayk7CisgICAgQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwor
CisgICAgZGVsZXRlQ2FuY2VsbGVkUGxhbnNGb3JWTShsb2NrZXIsIHZtKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fcmVhZHlQbGFucy5zaXplKCk7ICsraSkgewogICAgICAgICBSZWZQ
dHI8UGxhbj4gcGxhbiA9IG1fcmVhZHlQbGFuc1tpXTsKICAgICAgICAgaWYgKHBsYW4tPnZtKCkg
IT0gJnZtKQpAQCAtNDA3LDYgKzQ0MCw4IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFu
cyhWTSYgdm0pCiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAg
ICAgICAgSGFzaFNldDxDb21waWxhdGlvbktleT4gZGVhZFBsYW5LZXlzOworICAgICAgICBib29s
IGlzSW5NdXRhdG9yID0gdm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKTsKKwogICAg
ICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIg
IT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBQbGFuKiBwbGFuID0gaXRl
ci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCkBAIC00
MjAsOCArNDU1LDEyIEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAg
ICAgICAgICAgICBkZWFkUGxhbktleXMuYWRkKHBsYW4tPmtleSgpKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoIWRlYWRQbGFuS2V5cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGZvciAoSGFz
aFNldDxDb21waWxhdGlvbktleT46Oml0ZXJhdG9yIGl0ZXIgPSBkZWFkUGxhbktleXMuYmVnaW4o
KTsgaXRlciAhPSBkZWFkUGxhbktleXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBt
X3BsYW5zLnRha2UoKml0ZXIpLT5jYW5jZWwoKTsKKyAgICAgICAgICAgIGZvciAoSGFzaFNldDxD
b21waWxhdGlvbktleT46Oml0ZXJhdG9yIGl0ZXIgPSBkZWFkUGxhbktleXMuYmVnaW4oKTsgaXRl
ciAhPSBkZWFkUGxhbktleXMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgICAgIFJlZlB0
cjxQbGFuPiBwbGFuID0gbV9wbGFucy50YWtlKCppdGVyKTsKKyAgICAgICAgICAgICAgICBwbGFu
LT5jYW5jZWwoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSW5NdXRhdG9yKQorICAgICAgICAg
ICAgICAgICAgICBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uLmFwcGVuZChwbGFu
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIERlcXVlPFJlZlB0cjxQbGFuPj4gbmV3UXVl
dWU7CiAgICAgICAgICAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtX3F1ZXVlLnRha2VGaXJzdCgpOwpAQCAtNDU3LDYg
KzQ5Niw5IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm8KICAgICBM
b2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBIYXNoU2V0PENvbXBpbGF0aW9uS2V5PiBk
ZWFkUGxhbktleXM7CiAgICAgVmVjdG9yPFJlZlB0cjxQbGFuPj4gZGVhZFBsYW5zOworICAgIEFT
U0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKworICAgIGRlbGV0ZUNh
bmNlbGxlZFBsYW5zRm9yVk0obG9ja2VyLCB2bSk7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
cGxhbnMpIHsKICAgICAgICAgUGxhbiogcGxhbiA9IGVudHJ5LnZhbHVlLmdldCgpOwogICAgICAg
ICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCShyZXZpc2lvbiAyNTMxOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Myw2ICs5Myw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIHZvaWQgdGhyZWFkRnVuY3Rpb24odm9pZCogYXJndW1lbnQpOwogICAg
IAogICAgIHZvaWQgcmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgVmVjdG9yPFJlZlB0cjxQ
bGFuPiwgOD4mKTsKKyAgICB2b2lkIGRlbGV0ZUNhbmNlbGxlZFBsYW5zRm9yVk0oTG9ja0hvbGRl
ciYsIFZNJik7CiAKICAgICB2b2lkIGR1bXAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBQcmludFN0
cmVhbSYpIGNvbnN0OwogICAgIApAQCAtMTEzLDYgKzExNCw3IEBAIHByaXZhdGU6CiAgICAgLy8g
VXNlZCB0byBxdWlja2x5IGZpbmQgd2hpY2ggcGxhbnMgaGF2ZSBiZWVuIGNvbXBpbGVkIGFuZCBh
cmUgcmVhZHkgdG8KICAgICAvLyBiZSBjb21wbGV0ZWQuCiAgICAgVmVjdG9yPFJlZlB0cjxQbGFu
PiwgMTY+IG1fcmVhZHlQbGFuczsKKyAgICBWZWN0b3I8UmVmUHRyPFBsYW4+LCA0PiBtX2NhbmNl
bGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uOwogICAgIFJlZjxBdXRvbWF0aWNUaHJlYWRDb25k
aXRpb24+IG1fcGxhbkVucXVldWVkOwogICAgIENvbmRpdGlvbiBtX3BsYW5Db21waWxlZDsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sLmgJKHJldmlzaW9uIDI1MzE5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3ltYm9sKiBjcmVhdGVX
aXRoRGVzY3JpcHRpb24oVk0mLCBjb25zdCBTdHJpbmcmKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU3ltYm9sKiBjcmVhdGUoVk0mLCBTeW1ib2xJbXBsJiB1aWQpOwogCisgICAgU3lt
Ym9sSW1wbCYgdWlkKCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlTmFtZS51aWQoKTsgfQogICAg
IFByaXZhdGVOYW1lIHByaXZhdGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlTmFtZTsg
fQogICAgIFN0cmluZyBkZXNjcmlwdGl2ZVN0cmluZygpIGNvbnN0OwogICAgIFN0cmluZyBkZXNj
cmlwdGlvbigpIGNvbnN0Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>