<?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>204492</bug_id>
          
          <creation_ts>2019-11-21 22:49:13 -0800</creation_ts>
          <short_desc>There should be one MicrotaskQueue per EventLoop</short_desc>
          <delta_ts>2019-12-08 15:27:28 -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>DOM</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>
          <dependson>204978</dependson>
          <blocked>204042</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1592668</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-21 22:49:13 -0800</bug_when>
    <thetext>HTML5 spec mandates that we should have one microtask queue per similar origin documents.
This leads to bugs like https://bugs.webkit.org/show_bug.cgi?id=199565.

In addition, MutationObserver&apos;s compound microtask queue must be per similar origin windows,
and Custom Element&apos;s backup queue must be per micro per similar origin windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592669</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-21 22:49:35 -0800</bug_when>
    <thetext>&lt;rdar://problem/57420645&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596168</commentid>
    <comment_count>2</comment_count>
      <attachid>384990</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-05 21:28:23 -0800</bug_when>
    <thetext>Created attachment 384990
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596169</commentid>
    <comment_count>3</comment_count>
      <attachid>384991</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-05 22:51:21 -0800</bug_when>
    <thetext>Created attachment 384991
WIP2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596439</commentid>
    <comment_count>4</comment_count>
      <attachid>385059</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-06 16:42:59 -0800</bug_when>
    <thetext>Created attachment 385059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596477</commentid>
    <comment_count>5</comment_count>
      <attachid>385059</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-06 18:33:13 -0800</bug_when>
    <thetext>Comment on attachment 385059
Patch

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

&gt; Source/WebCore/dom/CustomElementReactionQueue.h:48
&gt; +class ElementQueue {

This name seems a little too generic now that it is not a nested class. Can we make more specific?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596478</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-06 18:35:07 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #5)
&gt; Comment on attachment 385059 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=385059&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/CustomElementReactionQueue.h:48
&gt; &gt; +class ElementQueue {
&gt; 
&gt; This name seems a little too generic now that it is not a nested class. Can
&gt; we make more specific?

That&apos;s what HTML5 spec uses:
https://html.spec.whatwg.org/multipage/custom-elements.html#element-queue

But we can rename it to CustomElementQueue if anything. Perhaps adding a spec URL there might help clarify the purpose of this class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596519</commentid>
    <comment_count>7</comment_count>
      <attachid>385059</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-06 23:35:48 -0800</bug_when>
    <thetext>Comment on attachment 385059
Patch

Ah, we have a bug in the way event loop is selected for unique origins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596643</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-07 16:54:07 -0800</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #6)
&gt; (In reply to Sam Weinig from comment #5)
&gt; &gt; Comment on attachment 385059 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=385059&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/CustomElementReactionQueue.h:48
&gt; &gt; &gt; +class ElementQueue {
&gt; &gt; 
&gt; &gt; This name seems a little too generic now that it is not a nested class. Can
&gt; &gt; we make more specific?
&gt; 
&gt; That&apos;s what HTML5 spec uses:
&gt; https://html.spec.whatwg.org/multipage/custom-elements.html#element-queue
&gt; 
&gt; But we can rename it to CustomElementQueue if anything. Perhaps adding a
&gt; spec URL there might help clarify the purpose of this class?

Added URL and rename end it to CustomElementQueue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596646</commentid>
    <comment_count>9</comment_count>
      <attachid>385110</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-07 18:51:43 -0800</bug_when>
    <thetext>Created attachment 385110
updated for trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596650</commentid>
    <comment_count>10</comment_count>
      <attachid>385112</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-07 19:07:19 -0800</bug_when>
    <thetext>Created attachment 385112
updated for trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596662</commentid>
    <comment_count>11</comment_count>
      <attachid>385112</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-08 00:24:53 -0800</bug_when>
    <thetext>Comment on attachment 385112
updated for trunk

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

&gt; LayoutTests/ChangeLog:1
&gt; -2019-12-07  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
&gt; +2019-12-08  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;

Stray ChangeLog change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596663</commentid>
    <comment_count>12</comment_count>
      <attachid>385112</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-08 00:32:43 -0800</bug_when>
    <thetext>Comment on attachment 385112
updated for trunk

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

&gt; Source/WebCore/dom/WindowEventLoop.h:51
&gt; +    Vector&lt;GCReachableRef&lt;HTMLSlotElement&gt;&gt;&amp; signalSlotList() { return m_signalSlotList; }
&gt; +    HashSet&lt;RefPtr&lt;MutationObserver&gt;&gt;&amp; activeMutationObservers() { return m_activeObservers; }
&gt; +    HashSet&lt;RefPtr&lt;MutationObserver&gt;&gt;&amp; suspendedMutationObservers() { return m_suspendedObservers; }

It is bit sad these need to be exposed as public and mutable. I wonder this code could be factored so that more of the mutations would be internal to WindowEventLoop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596664</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-08 00:39:37 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #12)
&gt; Comment on attachment 385112 [details]
&gt; updated for trunk
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=385112&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/WindowEventLoop.h:51
&gt; &gt; +    Vector&lt;GCReachableRef&lt;HTMLSlotElement&gt;&gt;&amp; signalSlotList() { return m_signalSlotList; }
&gt; &gt; +    HashSet&lt;RefPtr&lt;MutationObserver&gt;&gt;&amp; activeMutationObservers() { return m_activeObservers; }
&gt; &gt; +    HashSet&lt;RefPtr&lt;MutationObserver&gt;&gt;&amp; suspendedMutationObservers() { return m_suspendedObservers; }
&gt; 
&gt; It is bit sad these need to be exposed as public and mutable. I wonder this
&gt; code could be factored so that more of the mutations would be internal to
&gt; WindowEventLoop?

You mean the whole mutation observer notification code? If we did that, we’d have to make more of mutation observer code public. We rely on inlining, etc... so that’s not so great. I’ve also considered making WindowEventLoop supplementable or creating a new class like SimilarOrginWindowData or strict specific to mutation observers but they didn’t seem to make the encapsulation any more strict / cleaner :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596665</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-08 00:42:11 -0800</bug_when>
    <thetext>I think we should probably go ahead with this simple approach for now, and think about a way to refactor it better once we’re done with the event loop work and Yusuke’s work to introduce JSC side optimization for microtasks is done. There are just too many moving pieces to come up with a clean abstraction at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596674</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-08 05:50:14 -0800</bug_when>
    <thetext>Yeah,it is fine. Was just wondering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596732</commentid>
    <comment_count>16</comment_count>
      <attachid>385112</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-08 15:26:53 -0800</bug_when>
    <thetext>Comment on attachment 385112
updated for trunk

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

&gt;&gt; LayoutTests/ChangeLog:1
&gt;&gt; +2019-12-08  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
&gt; 
&gt; Stray ChangeLog change.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596733</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-08 15:27:28 -0800</bug_when>
    <thetext>Committed r253279: &lt;https://trac.webkit.org/changeset/253279&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384990</attachid>
            <date>2019-12-05 21:28:23 -0800</date>
            <delta_ts>2019-12-05 22:51:21 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>wip204492.patch</filename>
            <type>text/plain</type>
            <size>18090</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1
ZXVlLmNwcAkocmV2aXNpb24gMjUzMjAwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVs
ZW1lbnRSZWFjdGlvblF1ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTQ3VzdG9tRWxlbWVudEludGVyZmFj
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIldpbmRvd0V2ZW50TG9v
cC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9IZWFwLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBA
IC0yMzgsNyArMjM5LDcgQEAKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlOjpFbGVtZW50UXVldWU6OmFkZChFbGVtZW50JiBlbGVtZW50KQoraW5saW5l
IHZvaWQgRWxlbWVudFF1ZXVlOjphZGQoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBBU1NFUlQo
IW1faW52b2tpbmcpOwogICAgIC8vIEZJWE1FOiBBdm9pZCBpbnNlcnRpbmcgdGhlIHNhbWUgZWxl
bWVudCBtdWx0aXBsZSB0aW1lcy4KQEAgLTI0NSw3ICsyNDYsNyBAQAogICAgIG1fZWxlbWVudHMu
YXBwZW5kKGVsZW1lbnQpOwogfQogCi1pbmxpbmUgdm9pZCBDdXN0b21FbGVtZW50UmVhY3Rpb25R
dWV1ZTo6RWxlbWVudFF1ZXVlOjppbnZva2VBbGwoKQoraW5saW5lIHZvaWQgRWxlbWVudFF1ZXVl
OjppbnZva2VBbGwoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2ludm9raW5nKTsKICAgICBT
ZXRGb3JTY29wZTxib29sPiBpbnZva2luZyhtX2ludm9raW5nLCB0cnVlKTsKQEAgLTI2Miw3ICsy
NjMsNyBAQAogICAgIG1fZWxlbWVudHMuY2xlYXIoKTsKIH0KIAotaW5saW5lIHZvaWQgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uUXVldWU6OkVsZW1lbnRRdWV1ZTo6cHJvY2Vzc1F1ZXVlKEpTQzo6SlNH
bG9iYWxPYmplY3QqIHN0YXRlKQoraW5saW5lIHZvaWQgRWxlbWVudFF1ZXVlOjpwcm9jZXNzUXVl
dWUoSlNDOjpKU0dsb2JhbE9iamVjdCogc3RhdGUpCiB7CiAgICAgaWYgKCFzdGF0ZSkgewogICAg
ICAgICBpbnZva2VBbGwoKTsKQEAgLTI5Myw4ICsyOTQsNyBAQAogewogICAgIEFTU0VSVChlbGVt
ZW50LnJlYWN0aW9uUXVldWUoKSk7CiAgICAgaWYgKCFDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFj
azo6c19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrKSB7Ci0gICAgICAgIGF1dG8mIHF1ZXVlID0gZW5z
dXJlQmFja3VwUXVldWUoZWxlbWVudC5kb2N1bWVudCgpKTsKLSAgICAgICAgcXVldWUuYWRkKGVs
ZW1lbnQpOworICAgICAgICBlbGVtZW50LmRvY3VtZW50KCkud2luZG93RXZlbnRMb29wKCkuYmFj
a3VwRWxlbWVudFF1ZXVlKCkuYWRkKGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0zMTgsMzAgKzMxOCw0IEBACiAgICAgbV9xdWV1ZSA9IG51bGxwdHI7CiB9CiAKLXN0YXRp
YyBib29sIHNfcHJvY2Vzc2luZ0JhY2t1cEVsZW1lbnRRdWV1ZSA9IGZhbHNlOwotCi0vLyBGSVhN
RTogQmFja3VwUXVldWUgbXVzdCBiZSBwZXIgZXZlbnQgbG9vcC4KLUN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlOjpFbGVtZW50UXVldWUmIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnN1
cmVCYWNrdXBRdWV1ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgaWYgKCFzX3Byb2Nlc3Np
bmdCYWNrdXBFbGVtZW50UXVldWUpIHsKLSAgICAgICAgc19wcm9jZXNzaW5nQmFja3VwRWxlbWVu
dFF1ZXVlID0gdHJ1ZTsKLSAgICAgICAgZG9jdW1lbnQuZXZlbnRMb29wKCkucXVldWVNaWNyb3Rh
c2soW10gewotICAgICAgICAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OnByb2Nlc3NC
YWNrdXBRdWV1ZSgpOwotICAgICAgICB9KTsKLSAgICB9Ci0gICAgcmV0dXJuIGJhY2t1cEVsZW1l
bnRRdWV1ZSgpOwogfQotCi12b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpwcm9jZXNz
QmFja3VwUXVldWUoKQotewotICAgIGJhY2t1cEVsZW1lbnRRdWV1ZSgpLnByb2Nlc3NRdWV1ZShu
dWxscHRyKTsKLSAgICBzX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUgPSBmYWxzZTsKLX0K
LQotQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OkVsZW1lbnRRdWV1ZSYgQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWU6OmJhY2t1cEVsZW1lbnRRdWV1ZSgpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEVsZW1lbnRRdWV1ZT4gcXVldWU7Ci0gICAgcmV0dXJuIHF1ZXVlLmdldCgpOwot
fQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0
aW9uUXVldWUuaAkocmV2aXNpb24gMjUzMjAwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3Rv
bUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDIyIEBA
CiBjbGFzcyBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U7CiBjbGFzcyBRdWFsaWZpZWROYW1lOwog
CitjbGFzcyBFbGVtZW50UXVldWUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEVsZW1lbnRRdWV1ZSk7CitwdWJsaWM6CisgICAgRWxlbWVu
dFF1ZXVlKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCBhZGQoRWxlbWVudCYpOworICAgIHZvaWQg
cHJvY2Vzc1F1ZXVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGludm9rZUFsbCgpOworCisgICAgVmVjdG9yPEdDUmVhY2hhYmxlUmVmPEVsZW1lbnQ+PiBtX2Vs
ZW1lbnRzOworICAgIGJvb2wgbV9pbnZva2luZyB7IGZhbHNlIH07Cit9OworCiBjbGFzcyBDdXN0
b21FbGVtZW50UmVhY3Rpb25RdWV1ZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUpOwpAQCAt
NjQsMjQgKzgwLDggQEAKICAgICB2b2lkIGludm9rZUFsbChFbGVtZW50Jik7CiAgICAgdm9pZCBj
bGVhcigpOwogCi0gICAgc3RhdGljIHZvaWQgcHJvY2Vzc0JhY2t1cFF1ZXVlKCk7Ci0KLSAgICBj
bGFzcyBFbGVtZW50UXVldWUgewotICAgIHB1YmxpYzoKLSAgICAgICAgdm9pZCBhZGQoRWxlbWVu
dCYpOwotICAgICAgICB2b2lkIHByb2Nlc3NRdWV1ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGludm9rZUFsbCgpOwotCi0gICAgICAgIFZlY3Rv
cjxHQ1JlYWNoYWJsZVJlZjxFbGVtZW50Pj4gbV9lbGVtZW50czsKLSAgICAgICAgYm9vbCBtX2lu
dm9raW5nIHsgZmFsc2UgfTsKLSAgICB9OwotCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGVu
cXVldWVFbGVtZW50T25BcHByb3ByaWF0ZUVsZW1lbnRRdWV1ZShFbGVtZW50Jik7Ci0gICAgc3Rh
dGljIEVsZW1lbnRRdWV1ZSYgZW5zdXJlQmFja3VwUXVldWUoRG9jdW1lbnQmKTsKLSAgICBzdGF0
aWMgRWxlbWVudFF1ZXVlJiBiYWNrdXBFbGVtZW50UXVldWUoKTsKIAogICAgIFJlZjxKU0N1c3Rv
bUVsZW1lbnRJbnRlcmZhY2U+IG1faW50ZXJmYWNlOwogICAgIFZlY3RvcjxDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZUl0ZW0+IG1faXRlbXM7CkBAIC0xNTgsNyArMTU4LDcgQEAKIHByaXZhdGU6
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9jZXNzUXVldWUoSlNDOjpKU0dsb2JhbE9iamVj
dCopOwogCi0gICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OkVsZW1lbnRRdWV1ZSogbV9x
dWV1ZSB7IG51bGxwdHIgfTsgLy8gVXNlIHJhdyBwb2ludGVyIHRvIGF2b2lkIGdlbmVyYXRpbmcg
ZGVsZXRlIGluIHRoZSBkZXN0cnVjdG9yLgorICAgIEVsZW1lbnRRdWV1ZSogbV9xdWV1ZSB7IG51
bGxwdHIgfTsgLy8gVXNlIHJhdyBwb2ludGVyIHRvIGF2b2lkIGdlbmVyYXRpbmcgZGVsZXRlIGlu
IHRoZSBkZXN0cnVjdG9yLgogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKiBtX3ByZXZp
b3VzUHJvY2Vzc2luZ1N0YWNrOwogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIG1fc3RhdGU7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjUzMjAwKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI2Myw4ICs2MjYz
LDcgQEAKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmIChVTkxJS0VMWSgh
bV9kb2N1bWVudFRhc2tHcm91cCkpIHsKLSAgICAgICAgbV9ldmVudExvb3AgPSBXaW5kb3dFdmVu
dExvb3A6OmVuc3VyZUZvclJlZ2lzdHJhYmxlRG9tYWluKFJlZ2lzdHJhYmxlRG9tYWluIHsgc2Vj
dXJpdHlPcmlnaW4oKS5kYXRhKCkgfSk7Ci0gICAgICAgIG1fZG9jdW1lbnRUYXNrR3JvdXAgPSBt
YWtlVW5pcXVlPEV2ZW50TG9vcFRhc2tHcm91cD4oKm1fZXZlbnRMb29wKTsKKyAgICAgICAgbV9k
b2N1bWVudFRhc2tHcm91cCA9IG1ha2VVbmlxdWU8RXZlbnRMb29wVGFza0dyb3VwPih3aW5kb3dF
dmVudExvb3AoKSk7CiAgICAgICAgIGlmIChhY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCgpKQog
ICAgICAgICAgICAgbV9kb2N1bWVudFRhc2tHcm91cC0+c3RvcEFuZERpc2NhcmRBbGxUYXNrcygp
OwogICAgICAgICBlbHNlIGlmIChhY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkpCkBAIC02
MjczLDYgKzYyNzIsMTQgQEAKICAgICByZXR1cm4gKm1fZG9jdW1lbnRUYXNrR3JvdXA7CiB9CiAK
K1dpbmRvd0V2ZW50TG9vcCYgRG9jdW1lbnQ6OndpbmRvd0V2ZW50TG9vcCgpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoVU5MSUtFTFkoIW1fZXZlbnRMb29wKSkKKyAg
ICAgICAgbV9ldmVudExvb3AgPSBXaW5kb3dFdmVudExvb3A6OmVuc3VyZUZvclJlZ2lzdHJhYmxl
RG9tYWluKFJlZ2lzdHJhYmxlRG9tYWluIHsgc2VjdXJpdHlPcmlnaW4oKS5kYXRhKCkgfSk7Cisg
ICAgcmV0dXJuICptX2V2ZW50TG9vcDsKK30KKwogdm9pZCBEb2N1bWVudDo6c3VzcGVuZFNjaGVk
dWxlZFRhc2tzKFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogewogICAgIGlmIChtX3NjaGVk
dWxlZFRhc2tzQXJlU3VzcGVuZGVkKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNp
b24gMjUzMjAwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNjcsNiArMTA2Nyw3IEBACiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwb3N0VGFz
ayhUYXNrJiYpIGZpbmFsOyAvLyBFeGVjdXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3MgdGhyZWFk
IGFzeW5jaHJvbm91c2x5LgogCiAgICAgRXZlbnRMb29wVGFza0dyb3VwJiBldmVudExvb3AoKSBm
aW5hbDsKKyAgICBXaW5kb3dFdmVudExvb3AmIHdpbmRvd0V2ZW50TG9vcCgpOwogCiAgICAgU2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyKiBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7
IHJldHVybiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQogICAgIHZvaWQg
c3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAkocmV2aXNpb24gMjUzMjAwKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgogCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFdmVudExvb3AuaCIKICNpbmNsdWRlICJHQ1JlYWNo
YWJsZVJlZi5oIgogI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oIgpAQCAtNDEsNiArNDAsNyBAQAogI2luY2x1ZGUgIk11dGF0
aW9uQ2FsbGJhY2suaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmgi
CiAjaW5jbHVkZSAiTXV0YXRpb25SZWNvcmQuaCIKKyNpbmNsdWRlICJXaW5kb3dFdmVudExvb3Au
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtMTM3LDQwICsxMzcsNiBAQAogICAg
IG1fcmVnaXN0cmF0aW9ucy5yZW1vdmUoJnJlZ2lzdHJhdGlvbik7CiB9CiAKLXR5cGVkZWYgSGFz
aFNldDxSZWZQdHI8TXV0YXRpb25PYnNlcnZlcj4+IE11dGF0aW9uT2JzZXJ2ZXJTZXQ7Ci0KLXN0
YXRpYyBNdXRhdGlvbk9ic2VydmVyU2V0JiBhY3RpdmVNdXRhdGlvbk9ic2VydmVycygpCi17Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE11dGF0aW9uT2JzZXJ2ZXJTZXQ+IGFjdGl2ZU9ic2Vy
dmVyczsKLSAgICByZXR1cm4gYWN0aXZlT2JzZXJ2ZXJzOwotfQotCi1zdGF0aWMgTXV0YXRpb25P
YnNlcnZlclNldCYgc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxNdXRhdGlvbk9ic2VydmVyU2V0PiBzdXNwZW5kZWRPYnNlcnZlcnM7Ci0g
ICAgcmV0dXJuIHN1c3BlbmRlZE9ic2VydmVyczsKLX0KLQotLy8gaHR0cHM6Ly9kb20uc3BlYy53
aGF0d2cub3JnLyNzaWduYWwtc2xvdC1saXN0Ci1zdGF0aWMgVmVjdG9yPEdDUmVhY2hhYmxlUmVm
PEhUTUxTbG90RWxlbWVudD4+JiBzaWduYWxTbG90TGlzdCgpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFZlY3RvcjxHQ1JlYWNoYWJsZVJlZjxIVE1MU2xvdEVsZW1lbnQ+Pj4gbGlzdDsK
LSAgICByZXR1cm4gbGlzdDsKLX0KLQotLy8gVGhpcyBzdGF0ZSBtdXN0IGJlIHBlciBldmVudCBs
b29wLgotc3RhdGljIGJvb2wgbXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrUXVldWVk
RmxhZyA9IGZhbHNlOwotCi12b2lkIE11dGF0aW9uT2JzZXJ2ZXI6OnF1ZXVlTXV0YXRpb25PYnNl
cnZlckNvbXBvdW5kTWljcm90YXNrKERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBpZiAobXV0
YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrUXVldWVkRmxhZykKLSAgICAgICAgcmV0dXJu
OwotICAgIG11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFza1F1ZXVlZEZsYWcgPSB0cnVl
OwotICAgIGRvY3VtZW50LmV2ZW50TG9vcCgpLnF1ZXVlTWljcm90YXNrKFtdIHsKLSAgICAgICAg
bm90aWZ5TXV0YXRpb25PYnNlcnZlcnMoKTsKLSAgICB9KTsKLX0KLQogdm9pZCBNdXRhdGlvbk9i
c2VydmVyOjplbnF1ZXVlTXV0YXRpb25SZWNvcmQoUmVmPE11dGF0aW9uUmVjb3JkPiYmIG11dGF0
aW9uKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0xNzksMjYgKzE0NSwyOCBA
QAogCiAgICAgbV9wZW5kaW5nVGFyZ2V0cy5hZGQoKm11dGF0aW9uLT50YXJnZXQoKSk7CiAgICAg
bV9yZWNvcmRzLmFwcGVuZChXVEZNb3ZlKG11dGF0aW9uKSk7Ci0gICAgYWN0aXZlTXV0YXRpb25P
YnNlcnZlcnMoKS5hZGQodGhpcyk7CiAKLSAgICBxdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3Vu
ZE1pY3JvdGFzayhkb2N1bWVudC5nZXQoKSk7CisgICAgYXV0byBldmVudExvb3AgPSBtYWtlUmVm
KGRvY3VtZW50LT53aW5kb3dFdmVudExvb3AoKSk7CisgICAgZXZlbnRMb29wLT5hY3RpdmVNdXRh
dGlvbk9ic2VydmVycygpLmFkZCh0aGlzKTsKKyAgICBldmVudExvb3AtPnF1ZXVlTXV0YXRpb25P
YnNlcnZlckNvbXBvdW5kTWljcm90YXNrKCk7CiB9CiAKIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6
ZW5xdWV1ZVNsb3RDaGFuZ2VFdmVudChIVE1MU2xvdEVsZW1lbnQmIHNsb3QpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoc2lnbmFsU2xvdExpc3QoKS5maW5kTWF0
Y2hpbmcoWyZzbG90XShhdXRvJiBlbnRyeSkgeyByZXR1cm4gZW50cnkucHRyKCkgPT0gJnNsb3Q7
IH0pID09IG5vdEZvdW5kKTsKLSAgICBzaWduYWxTbG90TGlzdCgpLmFwcGVuZChzbG90KTsKKyAg
ICBhdXRvIGV2ZW50TG9vcCA9IG1ha2VSZWYoc2xvdC5kb2N1bWVudCgpLndpbmRvd0V2ZW50TG9v
cCgpKTsKKyAgICBhdXRvJiBsaXN0ID0gZXZlbnRMb29wLT5zaWduYWxTbG90TGlzdCgpOworICAg
IEFTU0VSVChsaXN0LmZpbmRNYXRjaGluZyhbJnNsb3RdKGF1dG8mIGVudHJ5KSB7IHJldHVybiBl
bnRyeS5wdHIoKSA9PSAmc2xvdDsgfSkgPT0gbm90Rm91bmQpOworICAgIGxpc3QuYXBwZW5kKHNs
b3QpOwogCi0gICAgcXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2soc2xvdC5k
b2N1bWVudCgpKTsKKyAgICBldmVudExvb3AtPnF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5k
TWljcm90YXNrKCk7CiB9CiAKIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6c2V0SGFzVHJhbnNpZW50
UmVnaXN0cmF0aW9uKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKHRoaXMpOwotCi0gICAg
cXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2soZG9jdW1lbnQpOworICAgIGF1
dG8gZXZlbnRMb29wID0gbWFrZVJlZihkb2N1bWVudC53aW5kb3dFdmVudExvb3AoKSk7CisgICAg
ZXZlbnRMb29wLT5hY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFkZCh0aGlzKTsKKyAgICBldmVu
dExvb3AtPnF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrKCk7CiB9CiAKIEhh
c2hTZXQ8Tm9kZSo+IE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmVkTm9kZXMoKSBjb25zdApAQCAt
MjUxLDMyICsyMTksMjMgQEAKICAgICB9CiB9CiAKLXZvaWQgTXV0YXRpb25PYnNlcnZlcjo6bm90
aWZ5TXV0YXRpb25PYnNlcnZlcnMoKQorLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNu
b3RpZnktbXV0YXRpb24tb2JzZXJ2ZXJzCit2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6Om5vdGlmeU11
dGF0aW9uT2JzZXJ2ZXJzKFdpbmRvd0V2ZW50TG9vcCYgZXZlbnRMb29wKQogewotICAgIC8vIGh0
dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jbm90aWZ5LW11dGF0aW9uLW9ic2VydmVycwotICAg
IC8vIDEuIFVuc2V0IG11dGF0aW9uIG9ic2VydmVyIGNvbXBvdW5kIG1pY3JvdGFzayBxdWV1ZWQg
ZmxhZy4KLSAgICBtdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2tRdWV1ZWRGbGFnID0g
ZmFsc2U7Ci0KLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBib29sIGRl
bGl2ZXJ5SW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgIGlmIChkZWxpdmVyeUluUHJvZ3Jlc3MpCi0g
ICAgICAgIHJldHVybjsKLSAgICBkZWxpdmVyeUluUHJvZ3Jlc3MgPSB0cnVlOwotCi0gICAgaWYg
KCFzdXNwZW5kZWRNdXRhdGlvbk9ic2VydmVycygpLmlzRW1wdHkoKSkgewotICAgICAgICBmb3Ig
KGF1dG8mIG9ic2VydmVyIDogY29weVRvVmVjdG9yKHN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJz
KCkpKSB7CisgICAgaWYgKCFldmVudExvb3Auc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IGNvcHlUb1ZlY3Rvcihl
dmVudExvb3Auc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKSkpIHsKICAgICAgICAgICAgIGlm
ICghb2JzZXJ2ZXItPmNhbkRlbGl2ZXIoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICAgICAgc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5yZW1vdmUob2JzZXJ2ZXIp
OwotICAgICAgICAgICAgYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQob2JzZXJ2ZXIpOwor
ICAgICAgICAgICAgZXZlbnRMb29wLnN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkucmVtb3Zl
KG9ic2VydmVyKTsKKyAgICAgICAgICAgIGV2ZW50TG9vcC5hY3RpdmVNdXRhdGlvbk9ic2VydmVy
cygpLmFkZChvYnNlcnZlcik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB3aGlsZSAoIWFjdGl2
ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuaXNFbXB0eSgpIHx8ICFzaWduYWxTbG90TGlzdCgpLmlzRW1w
dHkoKSkgeworICAgIHdoaWxlICghZXZlbnRMb29wLmFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCku
aXNFbXB0eSgpIHx8ICFldmVudExvb3Auc2lnbmFsU2xvdExpc3QoKS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgLy8gMi4gTGV0IG5vdGlmeSBsaXN0IGJlIGEgY29weSBvZiB1bml0IG9mIHJlbGF0ZWQg
c2ltaWxhci1vcmlnaW4gYnJvd3NpbmcgY29udGV4dHMnIGxpc3Qgb2YgTXV0YXRpb25PYnNlcnZl
ciBvYmplY3RzLgotICAgICAgICBhdXRvIG5vdGlmeUxpc3QgPSBjb3B5VG9WZWN0b3IoYWN0aXZl
TXV0YXRpb25PYnNlcnZlcnMoKSk7Ci0gICAgICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCku
Y2xlYXIoKTsKKyAgICAgICAgYXV0byBub3RpZnlMaXN0ID0gY29weVRvVmVjdG9yKGV2ZW50TG9v
cC5hY3RpdmVNdXRhdGlvbk9ic2VydmVycygpKTsKKyAgICAgICAgZXZlbnRMb29wLmFjdGl2ZU11
dGF0aW9uT2JzZXJ2ZXJzKCkuY2xlYXIoKTsKICAgICAgICAgc3RkOjpzb3J0KG5vdGlmeUxpc3Qu
YmVnaW4oKSwgbm90aWZ5TGlzdC5lbmQoKSwgW10oYXV0byYgbGhzLCBhdXRvJiByaHMpIHsKICAg
ICAgICAgICAgIHJldHVybiBsaHMtPm1fcHJpb3JpdHkgPCByaHMtPm1fcHJpb3JpdHk7CiAgICAg
ICAgIH0pOwpAQCAtMjg0LDggKzI0Myw4IEBACiAgICAgICAgIC8vIDMuIExldCBzaWduYWxMaXN0
IGJlIGEgY29weSBvZiB1bml0IG9mIHJlbGF0ZWQgc2ltaWxhci1vcmlnaW4gYnJvd3NpbmcgY29u
dGV4dHMnIHNpZ25hbCBzbG90IGxpc3QuCiAgICAgICAgIC8vIDQuIEVtcHR5IHVuaXQgb2YgcmVs
YXRlZCBzaW1pbGFyLW9yaWdpbiBicm93c2luZyBjb250ZXh0cycgc2lnbmFsIHNsb3QgbGlzdC4K
ICAgICAgICAgVmVjdG9yPEdDUmVhY2hhYmxlUmVmPEhUTUxTbG90RWxlbWVudD4+IHNsb3RMaXN0
OwotICAgICAgICBpZiAoIXNpZ25hbFNsb3RMaXN0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBzbG90TGlzdC5zd2FwKHNpZ25hbFNsb3RMaXN0KCkpOworICAgICAgICBpZiAoIWV2ZW50TG9v
cC5zaWduYWxTbG90TGlzdCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgc2xvdExpc3Quc3dh
cChldmVudExvb3Auc2lnbmFsU2xvdExpc3QoKSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHNs
b3QgOiBzbG90TGlzdCkKICAgICAgICAgICAgICAgICBzbG90LT5kaWRSZW1vdmVGcm9tU2lnbmFs
U2xvdExpc3QoKTsKICAgICAgICAgfQpAQCAtMjk1LDcgKzI1NCw3IEBACiAgICAgICAgICAgICBp
ZiAob2JzZXJ2ZXItPmNhbkRlbGl2ZXIoKSkKICAgICAgICAgICAgICAgICBvYnNlcnZlci0+ZGVs
aXZlcigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN1c3BlbmRlZE11dGF0
aW9uT2JzZXJ2ZXJzKCkuYWRkKG9ic2VydmVyKTsKKyAgICAgICAgICAgICAgICBldmVudExvb3Au
c3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQob2JzZXJ2ZXIpOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gNi4gRm9yIGVhY2ggc2xvdCBzbG90IGluIHNpZ25hbExpc3QsIGluIG9yZGVy
LCBmaXJlIGFuIGV2ZW50IG5hbWVkIHNsb3RjaGFuZ2UsIHdpdGggaXRzIGJ1YmJsZXMgYXR0cmli
dXRlIHNldCB0byB0cnVlLCBhdCBzbG90LgpAQCAtMzAyLDggKzI2MSw2IEBACiAgICAgICAgIGZv
ciAoYXV0byYgc2xvdCA6IHNsb3RMaXN0KQogICAgICAgICAgICAgc2xvdC0+ZGlzcGF0Y2hTbG90
Q2hhbmdlRXZlbnQoKTsKICAgICB9Ci0KLSAgICBkZWxpdmVyeUluUHJvZ3Jlc3MgPSBmYWxzZTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011
dGF0aW9uT2JzZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25PYnNlcnZlci5oCShyZXZpc2lvbiAyNTMyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25PYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiBjbGFzcyBN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOwogY2xhc3MgTXV0YXRpb25SZWNvcmQ7CiBjbGFz
cyBOb2RlOworY2xhc3MgV2luZG93RXZlbnRMb29wOwogCiB1c2luZyBNdXRhdGlvbk9ic2VydmVy
T3B0aW9ucyA9IHVuc2lnbmVkIGNoYXI7CiB1c2luZyBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0
aW9ucyA9IHVuc2lnbmVkIGNoYXI7CkBAIC0xMDYsMTIgKzEwNywxMiBAQAogCiAgICAgc3RhdGlj
IHZvaWQgZW5xdWV1ZVNsb3RDaGFuZ2VFdmVudChIVE1MU2xvdEVsZW1lbnQmKTsKIAorICAgIHN0
YXRpYyB2b2lkIG5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJzKFdpbmRvd0V2ZW50TG9vcCYpOworCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IE11dGF0aW9uT2JzZXJ2ZXIoUmVmPE11dGF0aW9uQ2FsbGJh
Y2s+JiYpOwogICAgIHZvaWQgZGVsaXZlcigpOwogCi0gICAgc3RhdGljIHZvaWQgcXVldWVNdXRh
dGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2soRG9jdW1lbnQmKTsKLSAgICBzdGF0aWMgdm9p
ZCBub3RpZnlNdXRhdGlvbk9ic2VydmVycygpOwogICAgIHN0YXRpYyBib29sIHZhbGlkYXRlT3B0
aW9ucyhNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyk7CiAKICAgICBSZWY8TXV0YXRpb25DYWxsYmFj
az4gbV9jYWxsYmFjazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3Au
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuY3Bw
CShyZXZpc2lvbiAyNTMyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29w
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsMTEgQEAKICNpbmNsdWRlICJXaW5kb3dF
dmVudExvb3AuaCIKIAogI2luY2x1ZGUgIkNvbW1vblZNLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhU
TUxTbG90RWxlbWVudC5oIgogI2luY2x1ZGUgIk1pY3JvdGFza3MuaCIKKyNpbmNsdWRlICJNdXRh
dGlvbk9ic2VydmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTMsNiArNTYsNyBA
QAogaW5saW5lIFdpbmRvd0V2ZW50TG9vcDo6V2luZG93RXZlbnRMb29wKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pCiAgICAgOiBtX2RvbWFpbihkb21haW4pCiAgICAgLCBtX3RpbWVy
KCp0aGlzLCAmV2luZG93RXZlbnRMb29wOjpydW4pCisgICAgLCBtX3BlcnBldHVhbFRhc2tHcm91
cEZvclNpbWlsYXJPcmlnaW5XaW5kb3dBZ2VudHMoKnRoaXMpCiB7CiB9CiAKQEAgLTc0LDkgKzc4
LDQ0IEBACiAKIE1pY3JvdGFza1F1ZXVlJiBXaW5kb3dFdmVudExvb3A6Om1pY3JvdGFza1F1ZXVl
KCkKIHsKLSAgICAvLyBNaWNyb3Rhc2tRdWV1ZSBtdXN0IGJlIG9uZSBwZXIgZXZlbnQgbG9vcC4K
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWljcm90YXNrUXVldWU+IHF1ZXVlKGNvbW1vblZN
KCkpOwotICAgIHJldHVybiBxdWV1ZTsKKyAgICBpZiAoIW1fbWljcm90YXNrUXVldWUpCisgICAg
ICAgIG1fbWljcm90YXNrUXVldWUgPSBtYWtlVW5pcXVlPE1pY3JvdGFza1F1ZXVlPihjb21tb25W
TSgpKTsKKyAgICByZXR1cm4gKm1fbWljcm90YXNrUXVldWU7CiB9CiAKK3ZvaWQgV2luZG93RXZl
bnRMb29wOjpxdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzaygpCit7CisgICAg
aWYgKG1fbXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrUXVldWVkRmxhZykKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fbXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrUXVldWVk
RmxhZyA9IHRydWU7CisgICAgbV9wZXJwZXR1YWxUYXNrR3JvdXBGb3JTaW1pbGFyT3JpZ2luV2lu
ZG93QWdlbnRzLnF1ZXVlTWljcm90YXNrKFt0aGlzXSB7CisgICAgICAgIC8vIFdlIGNhbid0IG1h
a2UgYSBSZWYgdG8gV2luZG93RXZlbnRMb29wIGluIHRoZSBsYW1iZGEgY2FwdHVyZSBhcyB0aGF0
IHdvdWxkIHJlc3VsdCBpbiBhIHJlZmVyZW5jZSBjeWNsZSAmIGxlYWsuCisgICAgICAgIGF1dG8g
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOworICAgICAgICBtX211dGF0aW9uT2JzZXJ2
ZXJDb21wb3VuZE1pY3JvdGFza1F1ZXVlZEZsYWcgPSBmYWxzZTsKKworICAgICAgICAvLyBGSVhN
RTogVGhpcyBjaGVjayBkb2Vzbid0IGV4aXN0IGluIHRoZSBzcGVjLgorICAgICAgICBpZiAobV9k
ZWxpdmVyaW5nTXV0YXRpb25SZWNvcmRzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBt
X2RlbGl2ZXJpbmdNdXRhdGlvblJlY29yZHMgPSB0cnVlOworICAgICAgICBNdXRhdGlvbk9ic2Vy
dmVyOjpub3RpZnlNdXRhdGlvbk9ic2VydmVycygqdGhpcyk7CisgICAgICAgIG1fZGVsaXZlcmlu
Z011dGF0aW9uUmVjb3JkcyA9IGZhbHNlOworICAgIH0pOworfQorCitFbGVtZW50UXVldWUmIFdp
bmRvd0V2ZW50TG9vcDo6YmFja3VwRWxlbWVudFF1ZXVlKCkKK3sKKyAgICBpZiAoIW1fcHJvY2Vz
c2luZ0JhY2t1cEVsZW1lbnRRdWV1ZSkgeworICAgICAgICBtX3Byb2Nlc3NpbmdCYWNrdXBFbGVt
ZW50UXVldWUgPSB0cnVlOworICAgICAgICBtX3BlcnBldHVhbFRhc2tHcm91cEZvclNpbWlsYXJP
cmlnaW5XaW5kb3dBZ2VudHMucXVldWVNaWNyb3Rhc2soW3RoaXNdIHsKKyAgICAgICAgICAgIC8v
IFdlIGNhbid0IG1ha2UgYSBSZWYgdG8gV2luZG93RXZlbnRMb29wIGluIHRoZSBsYW1iZGEgY2Fw
dHVyZSBhcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIHJlZmVyZW5jZSBjeWNsZSAmIGxlYWsuCisg
ICAgICAgICAgICBtX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUgPSBmYWxzZTsKKyAgICAg
ICAgICAgIEFTU0VSVChtX2VsZW1lbnRRdWV1ZSk7CisgICAgICAgICAgICBtX2VsZW1lbnRRdWV1
ZS0+cHJvY2Vzc1F1ZXVlKG51bGxwdHIpOworICAgICAgICB9KTsKKyAgICB9CisgICAgaWYgKCFt
X2VsZW1lbnRRdWV1ZSkKKyAgICAgICAgbV9lbGVtZW50UXVldWUgPSBtYWtlVW5pcXVlPEVsZW1l
bnRRdWV1ZT4oKTsKKyAgICByZXR1cm4gKm1fZWxlbWVudFF1ZXVlOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29wLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5oCShyZXZp
c2lvbiAyNTMyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29wLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50SWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgorI2luY2x1ZGUgIkdDUmVhY2hhYmxlUmVm
LmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21haW4uaCIKICNpbmNsdWRlICJUaW1lci5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0zNCw2ICszNSw5IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIERvY3VtZW50OworY2xhc3MgRWxlbWVudFF1ZXVlOworY2xhc3MgSFRN
TFNsb3RFbGVtZW50OworY2xhc3MgTXV0YXRpb25PYnNlcnZlcjsKIAogLy8gaHR0cHM6Ly9odG1s
LnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3dpbmRvdy1ldmVudC1s
b29wCiBjbGFzcyBXaW5kb3dFdmVudExvb3AgZmluYWwgOiBwdWJsaWMgRXZlbnRMb29wIHsKQEAg
LTQyLDYgKzQ2LDEzIEBACiAKICAgICB2aXJ0dWFsIH5XaW5kb3dFdmVudExvb3AoKTsKIAorICAg
IHZvaWQgcXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2soKTsKKyAgICBWZWN0
b3I8R0NSZWFjaGFibGVSZWY8SFRNTFNsb3RFbGVtZW50Pj4mIHNpZ25hbFNsb3RMaXN0KCkgeyBy
ZXR1cm4gbV9zaWduYWxTbG90TGlzdDsgfQorICAgIEhhc2hTZXQ8UmVmUHRyPE11dGF0aW9uT2Jz
ZXJ2ZXI+PiYgYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKSB7IHJldHVybiBtX2FjdGl2ZU9ic2Vy
dmVyczsgfQorICAgIEhhc2hTZXQ8UmVmUHRyPE11dGF0aW9uT2JzZXJ2ZXI+PiYgc3VzcGVuZGVk
TXV0YXRpb25PYnNlcnZlcnMoKSB7IHJldHVybiBtX3N1c3BlbmRlZE9ic2VydmVyczsgfQorCisg
ICAgRWxlbWVudFF1ZXVlJiBiYWNrdXBFbGVtZW50UXVldWUoKTsKKwogcHJpdmF0ZToKICAgICBX
aW5kb3dFdmVudExvb3AoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKIApAQCAtNTEsNiArNjIs
MjEgQEAKIAogICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1fZG9tYWluOwogICAgIFRpbWVyIG1fdGlt
ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1pY3JvdGFza1F1ZXVlPiBtX21pY3JvdGFza1F1ZXVl
OworCisgICAgLy8gRWFjaCB0YXNrIHNjaGVkdWxlZCBpbiBldmVudCBsb29wIGlzIGFzc29jaWF0
ZWQgd2l0aCBhIGRvY3VtZW50IHNvIHRoYXQgaXQgY2FuIGJlIHN1c3BlbmVkIG9yIHN0b3BwZWQK
KyAgICAvLyB3aGVuIHRoZSBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHN1c3BlbmVkIG9yIHN0b3Bw
ZWQuIFRoaXMgdGFzayBncm91cCBpcyB1c2VkIHRvIHNjaGVkdWxlIGEgdGFzaworICAgIC8vIHdo
aWNoIGlzIG5vdCBzY2hlZHVsZWQgdG8gYSBzcGVjaWZpYyBkb2N1bWVudCwgYW5kIHNob3VsZCBv
bmx5IGJlIHVzZWQgd2hlbiBpdCdzIGFic29sdXRlbHkgcmVxdWlyZWQuCisgICAgRXZlbnRMb29w
VGFza0dyb3VwIG1fcGVycGV0dWFsVGFza0dyb3VwRm9yU2ltaWxhck9yaWdpbldpbmRvd0FnZW50
czsKKworICAgIGJvb2wgbV9tdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2tRdWV1ZWRG
bGFnIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZGVsaXZlcmluZ011dGF0aW9uUmVjb3JkcyB7IGZh
bHNlIH07IC8vIEZJWE1FOiBUaGlzIGZsYWcgZG9lc24ndCBleGlzdCBpbiB0aGUgc3BlYy4KKyAg
ICBWZWN0b3I8R0NSZWFjaGFibGVSZWY8SFRNTFNsb3RFbGVtZW50Pj4gbV9zaWduYWxTbG90TGlz
dDsgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNzaWduYWwtc2xvdC1saXN0CisgICAg
SGFzaFNldDxSZWZQdHI8TXV0YXRpb25PYnNlcnZlcj4+IG1fYWN0aXZlT2JzZXJ2ZXJzOworICAg
IEhhc2hTZXQ8UmVmUHRyPE11dGF0aW9uT2JzZXJ2ZXI+PiBtX3N1c3BlbmRlZE9ic2VydmVyczsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxFbGVtZW50UXVldWU+IG1fZWxlbWVudFF1ZXVlOworICAg
IGJvb2wgbV9wcm9jZXNzaW5nQmFja3VwRWxlbWVudFF1ZXVlIHsgZmFsc2UgfTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384991</attachid>
            <date>2019-12-05 22:51:21 -0800</date>
            <delta_ts>2019-12-06 16:42:56 -0800</delta_ts>
            <desc>WIP2</desc>
            <filename>wip204492b.patch</filename>
            <type>text/plain</type>
            <size>18303</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1
ZXVlLmNwcAkocmV2aXNpb24gMjUzMjAwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVs
ZW1lbnRSZWFjdGlvblF1ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTQ3VzdG9tRWxlbWVudEludGVyZmFj
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIldpbmRvd0V2ZW50TG9v
cC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9IZWFwLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBA
IC0yMzgsNyArMjM5LDcgQEAKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlOjpFbGVtZW50UXVldWU6OmFkZChFbGVtZW50JiBlbGVtZW50KQoraW5saW5l
IHZvaWQgRWxlbWVudFF1ZXVlOjphZGQoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBBU1NFUlQo
IW1faW52b2tpbmcpOwogICAgIC8vIEZJWE1FOiBBdm9pZCBpbnNlcnRpbmcgdGhlIHNhbWUgZWxl
bWVudCBtdWx0aXBsZSB0aW1lcy4KQEAgLTI0NSw3ICsyNDYsNyBAQAogICAgIG1fZWxlbWVudHMu
YXBwZW5kKGVsZW1lbnQpOwogfQogCi1pbmxpbmUgdm9pZCBDdXN0b21FbGVtZW50UmVhY3Rpb25R
dWV1ZTo6RWxlbWVudFF1ZXVlOjppbnZva2VBbGwoKQoraW5saW5lIHZvaWQgRWxlbWVudFF1ZXVl
OjppbnZva2VBbGwoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2ludm9raW5nKTsKICAgICBT
ZXRGb3JTY29wZTxib29sPiBpbnZva2luZyhtX2ludm9raW5nLCB0cnVlKTsKQEAgLTI2Miw3ICsy
NjMsNyBAQAogICAgIG1fZWxlbWVudHMuY2xlYXIoKTsKIH0KIAotaW5saW5lIHZvaWQgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uUXVldWU6OkVsZW1lbnRRdWV1ZTo6cHJvY2Vzc1F1ZXVlKEpTQzo6SlNH
bG9iYWxPYmplY3QqIHN0YXRlKQoraW5saW5lIHZvaWQgRWxlbWVudFF1ZXVlOjpwcm9jZXNzUXVl
dWUoSlNDOjpKU0dsb2JhbE9iamVjdCogc3RhdGUpCiB7CiAgICAgaWYgKCFzdGF0ZSkgewogICAg
ICAgICBpbnZva2VBbGwoKTsKQEAgLTI5Myw4ICsyOTQsNyBAQAogewogICAgIEFTU0VSVChlbGVt
ZW50LnJlYWN0aW9uUXVldWUoKSk7CiAgICAgaWYgKCFDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFj
azo6c19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrKSB7Ci0gICAgICAgIGF1dG8mIHF1ZXVlID0gZW5z
dXJlQmFja3VwUXVldWUoZWxlbWVudC5kb2N1bWVudCgpKTsKLSAgICAgICAgcXVldWUuYWRkKGVs
ZW1lbnQpOworICAgICAgICBlbGVtZW50LmRvY3VtZW50KCkud2luZG93RXZlbnRMb29wKCkuYmFj
a3VwRWxlbWVudFF1ZXVlKCkuYWRkKGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0zMTgsMzAgKzMxOCw5IEBACiAgICAgbV9xdWV1ZSA9IG51bGxwdHI7CiB9CiAKLXN0YXRp
YyBib29sIHNfcHJvY2Vzc2luZ0JhY2t1cEVsZW1lbnRRdWV1ZSA9IGZhbHNlOwotCi0vLyBGSVhN
RTogQmFja3VwUXVldWUgbXVzdCBiZSBwZXIgZXZlbnQgbG9vcC4KLUN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlOjpFbGVtZW50UXVldWUmIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnN1
cmVCYWNrdXBRdWV1ZShEb2N1bWVudCYgZG9jdW1lbnQpCit2b2lkIEN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlOjpwcm9jZXNzQmFja3VwUXVldWUoRWxlbWVudFF1ZXVlJiBiYWNrdXBFbGVtZW50
UXVldWUpCiB7Ci0gICAgaWYgKCFzX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUpIHsKLSAg
ICAgICAgc19wcm9jZXNzaW5nQmFja3VwRWxlbWVudFF1ZXVlID0gdHJ1ZTsKLSAgICAgICAgZG9j
dW1lbnQuZXZlbnRMb29wKCkucXVldWVNaWNyb3Rhc2soW10gewotICAgICAgICAgICAgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uUXVldWU6OnByb2Nlc3NCYWNrdXBRdWV1ZSgpOwotICAgICAgICB9KTsK
LSAgICB9Ci0gICAgcmV0dXJuIGJhY2t1cEVsZW1lbnRRdWV1ZSgpOworICAgIGJhY2t1cEVsZW1l
bnRRdWV1ZS5wcm9jZXNzUXVldWUobnVsbHB0cik7CiB9CiAKLXZvaWQgQ3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWU6OnByb2Nlc3NCYWNrdXBRdWV1ZSgpCi17Ci0gICAgYmFja3VwRWxlbWVudFF1
ZXVlKCkucHJvY2Vzc1F1ZXVlKG51bGxwdHIpOwotICAgIHNfcHJvY2Vzc2luZ0JhY2t1cEVsZW1l
bnRRdWV1ZSA9IGZhbHNlOwogfQotCi1DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6RWxlbWVu
dFF1ZXVlJiBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6YmFja3VwRWxlbWVudFF1ZXVlKCkK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RWxlbWVudFF1ZXVlPiBxdWV1ZTsKLSAgICBy
ZXR1cm4gcXVldWUuZ2V0KCk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0
b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCShyZXZpc2lvbiAyNTMyMDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNiArNDUsMjIgQEAKIGNsYXNzIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTsKIGNs
YXNzIFF1YWxpZmllZE5hbWU7CiAKK2NsYXNzIEVsZW1lbnRRdWV1ZSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRWxlbWVudFF1ZXVlKTsK
K3B1YmxpYzoKKyAgICBFbGVtZW50UXVldWUoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGFkZChF
bGVtZW50Jik7CisgICAgdm9pZCBwcm9jZXNzUXVldWUoSlNDOjpKU0dsb2JhbE9iamVjdCopOwor
Citwcml2YXRlOgorICAgIHZvaWQgaW52b2tlQWxsKCk7CisKKyAgICBWZWN0b3I8R0NSZWFjaGFi
bGVSZWY8RWxlbWVudD4+IG1fZWxlbWVudHM7CisgICAgYm9vbCBtX2ludm9raW5nIHsgZmFsc2Ug
fTsKK307CisKIGNsYXNzIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZSk7CkBAIC02NCwyNCArODAsMTAgQEAKICAgICB2b2lkIGludm9rZUFsbChF
bGVtZW50Jik7CiAgICAgdm9pZCBjbGVhcigpOwogCi0gICAgc3RhdGljIHZvaWQgcHJvY2Vzc0Jh
Y2t1cFF1ZXVlKCk7CisgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0JhY2t1cFF1ZXVlKEVsZW1lbnRR
dWV1ZSYpOwogCi0gICAgY2xhc3MgRWxlbWVudFF1ZXVlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHZvaWQgYWRkKEVsZW1lbnQmKTsKLSAgICAgICAgdm9pZCBwcm9jZXNzUXVldWUoSlNDOjpKU0ds
b2JhbE9iamVjdCopOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBpbnZva2VBbGwoKTsK
LQotICAgICAgICBWZWN0b3I8R0NSZWFjaGFibGVSZWY8RWxlbWVudD4+IG1fZWxlbWVudHM7Ci0g
ICAgICAgIGJvb2wgbV9pbnZva2luZyB7IGZhbHNlIH07Ci0gICAgfTsKLQogcHJpdmF0ZToKICAg
ICBzdGF0aWMgdm9pZCBlbnF1ZXVlRWxlbWVudE9uQXBwcm9wcmlhdGVFbGVtZW50UXVldWUoRWxl
bWVudCYpOwotICAgIHN0YXRpYyBFbGVtZW50UXVldWUmIGVuc3VyZUJhY2t1cFF1ZXVlKERvY3Vt
ZW50Jik7Ci0gICAgc3RhdGljIEVsZW1lbnRRdWV1ZSYgYmFja3VwRWxlbWVudFF1ZXVlKCk7CiAK
ICAgICBSZWY8SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlPiBtX2ludGVyZmFjZTsKICAgICBWZWN0
b3I8Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtPiBtX2l0ZW1zOwpAQCAtMTU4LDcgKzE2
MCw3IEBACiBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJvY2Vzc1F1ZXVlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKIAotICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpF
bGVtZW50UXVldWUqIG1fcXVldWUgeyBudWxscHRyIH07IC8vIFVzZSByYXcgcG9pbnRlciB0byBh
dm9pZCBnZW5lcmF0aW5nIGRlbGV0ZSBpbiB0aGUgZGVzdHJ1Y3Rvci4KKyAgICBFbGVtZW50UXVl
dWUqIG1fcXVldWUgeyBudWxscHRyIH07IC8vIFVzZSByYXcgcG9pbnRlciB0byBhdm9pZCBnZW5l
cmF0aW5nIGRlbGV0ZSBpbiB0aGUgZGVzdHJ1Y3Rvci4KICAgICBDdXN0b21FbGVtZW50UmVhY3Rp
b25TdGFjayogbV9wcmV2aW91c1Byb2Nlc3NpbmdTdGFjazsKICAgICBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBtX3N0YXRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDI1
MzIwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyNjMsOCArNjI2Myw3IEBACiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIW1fZG9jdW1lbnRUYXNrR3JvdXApKSB7Ci0gICAgICAgIG1fZXZlbnRM
b29wID0gV2luZG93RXZlbnRMb29wOjplbnN1cmVGb3JSZWdpc3RyYWJsZURvbWFpbihSZWdpc3Ry
YWJsZURvbWFpbiB7IHNlY3VyaXR5T3JpZ2luKCkuZGF0YSgpIH0pOwotICAgICAgICBtX2RvY3Vt
ZW50VGFza0dyb3VwID0gbWFrZVVuaXF1ZTxFdmVudExvb3BUYXNrR3JvdXA+KCptX2V2ZW50TG9v
cCk7CisgICAgICAgIG1fZG9jdW1lbnRUYXNrR3JvdXAgPSBtYWtlVW5pcXVlPEV2ZW50TG9vcFRh
c2tHcm91cD4od2luZG93RXZlbnRMb29wKCkpOwogICAgICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0
c0FyZVN0b3BwZWQoKSkKICAgICAgICAgICAgIG1fZG9jdW1lbnRUYXNrR3JvdXAtPnN0b3BBbmRE
aXNjYXJkQWxsVGFza3MoKTsKICAgICAgICAgZWxzZSBpZiAoYWN0aXZlRE9NT2JqZWN0c0FyZVN1
c3BlbmRlZCgpKQpAQCAtNjI3Myw2ICs2MjcyLDE0IEBACiAgICAgcmV0dXJuICptX2RvY3VtZW50
VGFza0dyb3VwOwogfQogCitXaW5kb3dFdmVudExvb3AmIERvY3VtZW50Ojp3aW5kb3dFdmVudExv
b3AoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKFVOTElLRUxZKCFt
X2V2ZW50TG9vcCkpCisgICAgICAgIG1fZXZlbnRMb29wID0gV2luZG93RXZlbnRMb29wOjplbnN1
cmVGb3JSZWdpc3RyYWJsZURvbWFpbihSZWdpc3RyYWJsZURvbWFpbiB7IHNlY3VyaXR5T3JpZ2lu
KCkuZGF0YSgpIH0pOworICAgIHJldHVybiAqbV9ldmVudExvb3A7Cit9CisKIHZvaWQgRG9jdW1l
bnQ6OnN1c3BlbmRTY2hlZHVsZWRUYXNrcyhSZWFzb25Gb3JTdXNwZW5zaW9uIHJlYXNvbikKIHsK
ICAgICBpZiAobV9zY2hlZHVsZWRUYXNrc0FyZVN1c3BlbmRlZCkgewpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHJldmlzaW9uIDI1MzIwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY3LDYgKzEwNjcsNyBAQAogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcG9zdFRhc2soVGFzayYmKSBmaW5hbDsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sgb24g
Y29udGV4dCdzIHRocmVhZCBhc3luY2hyb25vdXNseS4KIAogICAgIEV2ZW50TG9vcFRhc2tHcm91
cCYgZXZlbnRMb29wKCkgZmluYWw7CisgICAgV2luZG93RXZlbnRMb29wJiB3aW5kb3dFdmVudExv
b3AoKTsKIAogICAgIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciogc2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyKCkgeyByZXR1cm4gbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuZ2V0
KCk7IH0KICAgICB2b2lkIHN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFj
a3MoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAJKHJldmlz
aW9uIDI1MzIwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2
ZXIuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRMb29wLmgiCiAj
aW5jbHVkZSAiR0NSZWFjaGFibGVSZWYuaCIKICNpbmNsdWRlICJIVE1MU2xvdEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKQEAgLTQxLDYgKzQwLDcgQEAK
ICNpbmNsdWRlICJNdXRhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJhdGlvbi5oIgogI2luY2x1ZGUgIk11dGF0aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAi
V2luZG93RXZlbnRMb29wLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTEzNyw0
MCArMTM3LDYgQEAKICAgICBtX3JlZ2lzdHJhdGlvbnMucmVtb3ZlKCZyZWdpc3RyYXRpb24pOwog
fQogCi10eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPE11dGF0aW9uT2JzZXJ2ZXI+PiBNdXRhdGlvbk9i
c2VydmVyU2V0OwotCi1zdGF0aWMgTXV0YXRpb25PYnNlcnZlclNldCYgYWN0aXZlTXV0YXRpb25P
YnNlcnZlcnMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNdXRhdGlvbk9ic2VydmVy
U2V0PiBhY3RpdmVPYnNlcnZlcnM7Ci0gICAgcmV0dXJuIGFjdGl2ZU9ic2VydmVyczsKLX0KLQot
c3RhdGljIE11dGF0aW9uT2JzZXJ2ZXJTZXQmIHN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0YXRpb25PYnNlcnZlclNldD4gc3VzcGVu
ZGVkT2JzZXJ2ZXJzOwotICAgIHJldHVybiBzdXNwZW5kZWRPYnNlcnZlcnM7Ci19Ci0KLS8vIGh0
dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jc2lnbmFsLXNsb3QtbGlzdAotc3RhdGljIFZlY3Rv
cjxHQ1JlYWNoYWJsZVJlZjxIVE1MU2xvdEVsZW1lbnQ+PiYgc2lnbmFsU2xvdExpc3QoKQotewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8R0NSZWFjaGFibGVSZWY8SFRNTFNsb3RF
bGVtZW50Pj4+IGxpc3Q7Ci0gICAgcmV0dXJuIGxpc3Q7Ci19Ci0KLS8vIFRoaXMgc3RhdGUgbXVz
dCBiZSBwZXIgZXZlbnQgbG9vcC4KLXN0YXRpYyBib29sIG11dGF0aW9uT2JzZXJ2ZXJDb21wb3Vu
ZE1pY3JvdGFza1F1ZXVlZEZsYWcgPSBmYWxzZTsKLQotdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpx
dWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzayhEb2N1bWVudCYgZG9jdW1lbnQp
Ci17Ci0gICAgaWYgKG11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFza1F1ZXVlZEZsYWcp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2tR
dWV1ZWRGbGFnID0gdHJ1ZTsKLSAgICBkb2N1bWVudC5ldmVudExvb3AoKS5xdWV1ZU1pY3JvdGFz
ayhbXSB7Ci0gICAgICAgIG5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJzKCk7Ci0gICAgfSk7Ci19Ci0K
IHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFJlZjxNdXRhdGlv
blJlY29yZD4mJiBtdXRhdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAt
MTc5LDI2ICsxNDUsMjggQEAKIAogICAgIG1fcGVuZGluZ1RhcmdldHMuYWRkKCptdXRhdGlvbi0+
dGFyZ2V0KCkpOwogICAgIG1fcmVjb3Jkcy5hcHBlbmQoV1RGTW92ZShtdXRhdGlvbikpOwotICAg
IGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKHRoaXMpOwogCi0gICAgcXVldWVNdXRhdGlv
bk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2soZG9jdW1lbnQuZ2V0KCkpOworICAgIGF1dG8gZXZl
bnRMb29wID0gbWFrZVJlZihkb2N1bWVudC0+d2luZG93RXZlbnRMb29wKCkpOworICAgIGV2ZW50
TG9vcC0+YWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQodGhpcyk7CisgICAgZXZlbnRMb29w
LT5xdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzaygpOwogfQogCiB2b2lkIE11
dGF0aW9uT2JzZXJ2ZXI6OmVucXVldWVTbG90Q2hhbmdlRXZlbnQoSFRNTFNsb3RFbGVtZW50JiBz
bG90KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKHNpZ25hbFNs
b3RMaXN0KCkuZmluZE1hdGNoaW5nKFsmc2xvdF0oYXV0byYgZW50cnkpIHsgcmV0dXJuIGVudHJ5
LnB0cigpID09ICZzbG90OyB9KSA9PSBub3RGb3VuZCk7Ci0gICAgc2lnbmFsU2xvdExpc3QoKS5h
cHBlbmQoc2xvdCk7CisgICAgYXV0byBldmVudExvb3AgPSBtYWtlUmVmKHNsb3QuZG9jdW1lbnQo
KS53aW5kb3dFdmVudExvb3AoKSk7CisgICAgYXV0byYgbGlzdCA9IGV2ZW50TG9vcC0+c2lnbmFs
U2xvdExpc3QoKTsKKyAgICBBU1NFUlQobGlzdC5maW5kTWF0Y2hpbmcoWyZzbG90XShhdXRvJiBl
bnRyeSkgeyByZXR1cm4gZW50cnkucHRyKCkgPT0gJnNsb3Q7IH0pID09IG5vdEZvdW5kKTsKKyAg
ICBsaXN0LmFwcGVuZChzbG90KTsKIAotICAgIHF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5k
TWljcm90YXNrKHNsb3QuZG9jdW1lbnQoKSk7CisgICAgZXZlbnRMb29wLT5xdWV1ZU11dGF0aW9u
T2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzaygpOwogfQogCiB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6
OnNldEhhc1RyYW5zaWVudFJlZ2lzdHJhdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBhY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFk
ZCh0aGlzKTsKLQotICAgIHF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrKGRv
Y3VtZW50KTsKKyAgICBhdXRvIGV2ZW50TG9vcCA9IG1ha2VSZWYoZG9jdW1lbnQud2luZG93RXZl
bnRMb29wKCkpOworICAgIGV2ZW50TG9vcC0+YWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQo
dGhpcyk7CisgICAgZXZlbnRMb29wLT5xdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3Jv
dGFzaygpOwogfQogCiBIYXNoU2V0PE5vZGUqPiBNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlZE5v
ZGVzKCkgY29uc3QKQEAgLTI1MSwzMiArMjE5LDIzIEBACiAgICAgfQogfQogCi12b2lkIE11dGF0
aW9uT2JzZXJ2ZXI6Om5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJzKCkKKy8vIGh0dHBzOi8vZG9tLnNw
ZWMud2hhdHdnLm9yZy8jbm90aWZ5LW11dGF0aW9uLW9ic2VydmVycwordm9pZCBNdXRhdGlvbk9i
c2VydmVyOjpub3RpZnlNdXRhdGlvbk9ic2VydmVycyhXaW5kb3dFdmVudExvb3AmIGV2ZW50TG9v
cCkKIHsKLSAgICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI25vdGlmeS1tdXRhdGlv
bi1vYnNlcnZlcnMKLSAgICAvLyAxLiBVbnNldCBtdXRhdGlvbiBvYnNlcnZlciBjb21wb3VuZCBt
aWNyb3Rhc2sgcXVldWVkIGZsYWcuCi0gICAgbXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90
YXNrUXVldWVkRmxhZyA9IGZhbHNlOwotCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBzdGF0aWMgYm9vbCBkZWxpdmVyeUluUHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICBpZiAoZGVsaXZl
cnlJblByb2dyZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgZGVsaXZlcnlJblByb2dyZXNzID0g
dHJ1ZTsKLQotICAgIGlmICghc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IGNvcHlUb1ZlY3RvcihzdXNwZW5kZWRN
dXRhdGlvbk9ic2VydmVycygpKSkgeworICAgIGlmICghZXZlbnRMb29wLnN1c3BlbmRlZE11dGF0
aW9uT2JzZXJ2ZXJzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIg
OiBjb3B5VG9WZWN0b3IoZXZlbnRMb29wLnN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkpKSB7
CiAgICAgICAgICAgICBpZiAoIW9ic2VydmVyLT5jYW5EZWxpdmVyKCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgICAgIHN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCku
cmVtb3ZlKG9ic2VydmVyKTsKLSAgICAgICAgICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCku
YWRkKG9ic2VydmVyKTsKKyAgICAgICAgICAgIGV2ZW50TG9vcC5zdXNwZW5kZWRNdXRhdGlvbk9i
c2VydmVycygpLnJlbW92ZShvYnNlcnZlcik7CisgICAgICAgICAgICBldmVudExvb3AuYWN0aXZl
TXV0YXRpb25PYnNlcnZlcnMoKS5hZGQob2JzZXJ2ZXIpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgd2hpbGUgKCFhY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmlzRW1wdHkoKSB8fCAhc2lnbmFs
U2xvdExpc3QoKS5pc0VtcHR5KCkpIHsKKyAgICB3aGlsZSAoIWV2ZW50TG9vcC5hY3RpdmVNdXRh
dGlvbk9ic2VydmVycygpLmlzRW1wdHkoKSB8fCAhZXZlbnRMb29wLnNpZ25hbFNsb3RMaXN0KCku
aXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIDIuIExldCBub3RpZnkgbGlzdCBiZSBhIGNvcHkgb2Yg
dW5pdCBvZiByZWxhdGVkIHNpbWlsYXItb3JpZ2luIGJyb3dzaW5nIGNvbnRleHRzJyBsaXN0IG9m
IE11dGF0aW9uT2JzZXJ2ZXIgb2JqZWN0cy4KLSAgICAgICAgYXV0byBub3RpZnlMaXN0ID0gY29w
eVRvVmVjdG9yKGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkpOwotICAgICAgICBhY3RpdmVNdXRh
dGlvbk9ic2VydmVycygpLmNsZWFyKCk7CisgICAgICAgIGF1dG8gbm90aWZ5TGlzdCA9IGNvcHlU
b1ZlY3RvcihldmVudExvb3AuYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKSk7CisgICAgICAgIGV2
ZW50TG9vcC5hY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmNsZWFyKCk7CiAgICAgICAgIHN0ZDo6
c29ydChub3RpZnlMaXN0LmJlZ2luKCksIG5vdGlmeUxpc3QuZW5kKCksIFtdKGF1dG8mIGxocywg
YXV0byYgcmhzKSB7CiAgICAgICAgICAgICByZXR1cm4gbGhzLT5tX3ByaW9yaXR5IDwgcmhzLT5t
X3ByaW9yaXR5OwogICAgICAgICB9KTsKQEAgLTI4NCw4ICsyNDMsOCBAQAogICAgICAgICAvLyAz
LiBMZXQgc2lnbmFsTGlzdCBiZSBhIGNvcHkgb2YgdW5pdCBvZiByZWxhdGVkIHNpbWlsYXItb3Jp
Z2luIGJyb3dzaW5nIGNvbnRleHRzJyBzaWduYWwgc2xvdCBsaXN0LgogICAgICAgICAvLyA0LiBF
bXB0eSB1bml0IG9mIHJlbGF0ZWQgc2ltaWxhci1vcmlnaW4gYnJvd3NpbmcgY29udGV4dHMnIHNp
Z25hbCBzbG90IGxpc3QuCiAgICAgICAgIFZlY3RvcjxHQ1JlYWNoYWJsZVJlZjxIVE1MU2xvdEVs
ZW1lbnQ+PiBzbG90TGlzdDsKLSAgICAgICAgaWYgKCFzaWduYWxTbG90TGlzdCgpLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgc2xvdExpc3Quc3dhcChzaWduYWxTbG90TGlzdCgpKTsKKyAgICAg
ICAgaWYgKCFldmVudExvb3Auc2lnbmFsU2xvdExpc3QoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIHNsb3RMaXN0LnN3YXAoZXZlbnRMb29wLnNpZ25hbFNsb3RMaXN0KCkpOwogICAgICAgICAg
ICAgZm9yIChhdXRvJiBzbG90IDogc2xvdExpc3QpCiAgICAgICAgICAgICAgICAgc2xvdC0+ZGlk
UmVtb3ZlRnJvbVNpZ25hbFNsb3RMaXN0KCk7CiAgICAgICAgIH0KQEAgLTI5NSw3ICsyNTQsNyBA
QAogICAgICAgICAgICAgaWYgKG9ic2VydmVyLT5jYW5EZWxpdmVyKCkpCiAgICAgICAgICAgICAg
ICAgb2JzZXJ2ZXItPmRlbGl2ZXIoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBzdXNwZW5kZWRNdXRhdGlvbk9ic2VydmVycygpLmFkZChvYnNlcnZlcik7CisgICAgICAgICAg
ICAgICAgZXZlbnRMb29wLnN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKG9ic2VydmVy
KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIDYuIEZvciBlYWNoIHNsb3Qgc2xvdCBpbiBzaWdu
YWxMaXN0LCBpbiBvcmRlciwgZmlyZSBhbiBldmVudCBuYW1lZCBzbG90Y2hhbmdlLCB3aXRoIGl0
cyBidWJibGVzIGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZSwgYXQgc2xvdC4KQEAgLTMwMiw4ICsyNjEs
NiBAQAogICAgICAgICBmb3IgKGF1dG8mIHNsb3QgOiBzbG90TGlzdCkKICAgICAgICAgICAgIHNs
b3QtPmRpc3BhdGNoU2xvdENoYW5nZUV2ZW50KCk7CiAgICAgfQotCi0gICAgZGVsaXZlcnlJblBy
b2dyZXNzID0gZmFsc2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuaAkocmV2aXNpb24gMjUzMjAwKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiAr
NDYsNyBAQAogY2xhc3MgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjsKIGNsYXNzIE11dGF0
aW9uUmVjb3JkOwogY2xhc3MgTm9kZTsKK2NsYXNzIFdpbmRvd0V2ZW50TG9vcDsKIAogdXNpbmcg
TXV0YXRpb25PYnNlcnZlck9wdGlvbnMgPSB1bnNpZ25lZCBjaGFyOwogdXNpbmcgTXV0YXRpb25S
ZWNvcmREZWxpdmVyeU9wdGlvbnMgPSB1bnNpZ25lZCBjaGFyOwpAQCAtMTA2LDEyICsxMDcsMTIg
QEAKIAogICAgIHN0YXRpYyB2b2lkIGVucXVldWVTbG90Q2hhbmdlRXZlbnQoSFRNTFNsb3RFbGVt
ZW50Jik7CiAKKyAgICBzdGF0aWMgdm9pZCBub3RpZnlNdXRhdGlvbk9ic2VydmVycyhXaW5kb3dF
dmVudExvb3AmKTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBNdXRhdGlvbk9ic2VydmVyKFJl
ZjxNdXRhdGlvbkNhbGxiYWNrPiYmKTsKICAgICB2b2lkIGRlbGl2ZXIoKTsKIAotICAgIHN0YXRp
YyB2b2lkIHF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrKERvY3VtZW50Jik7
Ci0gICAgc3RhdGljIHZvaWQgbm90aWZ5TXV0YXRpb25PYnNlcnZlcnMoKTsKICAgICBzdGF0aWMg
Ym9vbCB2YWxpZGF0ZU9wdGlvbnMoTXV0YXRpb25PYnNlcnZlck9wdGlvbnMpOwogCiAgICAgUmVm
PE11dGF0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
V2luZG93RXZlbnRMb29wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2lu
ZG93RXZlbnRMb29wLmNwcAkocmV2aXNpb24gMjUzMjAwKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1dpbmRvd0V2ZW50TG9vcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDExIEBACiAj
aW5jbHVkZSAiV2luZG93RXZlbnRMb29wLmgiCiAKICNpbmNsdWRlICJDb21tb25WTS5oIgorI2lu
Y2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MU2xvdEVsZW1lbnQuaCIKICNpbmNsdWRlICJNaWNyb3Rhc2tzLmgi
CisjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTUzLDYgKzU2LDcgQEAKIGlubGluZSBXaW5kb3dFdmVudExvb3A6OldpbmRvd0V2ZW50TG9v
cChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQogICAgIDogbV9kb21haW4oZG9tYWlu
KQogICAgICwgbV90aW1lcigqdGhpcywgJldpbmRvd0V2ZW50TG9vcDo6cnVuKQorICAgICwgbV9w
ZXJwZXR1YWxUYXNrR3JvdXBGb3JTaW1pbGFyT3JpZ2luV2luZG93QWdlbnRzKCp0aGlzKQogewog
fQogCkBAIC03NCw5ICs3OCw0NCBAQAogCiBNaWNyb3Rhc2tRdWV1ZSYgV2luZG93RXZlbnRMb29w
OjptaWNyb3Rhc2tRdWV1ZSgpCiB7Ci0gICAgLy8gTWljcm90YXNrUXVldWUgbXVzdCBiZSBvbmUg
cGVyIGV2ZW50IGxvb3AuCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1pY3JvdGFza1F1ZXVl
PiBxdWV1ZShjb21tb25WTSgpKTsKLSAgICByZXR1cm4gcXVldWU7CisgICAgaWYgKCFtX21pY3Jv
dGFza1F1ZXVlKQorICAgICAgICBtX21pY3JvdGFza1F1ZXVlID0gbWFrZVVuaXF1ZTxNaWNyb3Rh
c2tRdWV1ZT4oY29tbW9uVk0oKSk7CisgICAgcmV0dXJuICptX21pY3JvdGFza1F1ZXVlOwogfQog
Cit2b2lkIFdpbmRvd0V2ZW50TG9vcDo6cXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNy
b3Rhc2soKQoreworICAgIGlmIChtX211dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFza1F1
ZXVlZEZsYWcpCisgICAgICAgIHJldHVybjsKKyAgICBtX211dGF0aW9uT2JzZXJ2ZXJDb21wb3Vu
ZE1pY3JvdGFza1F1ZXVlZEZsYWcgPSB0cnVlOworICAgIG1fcGVycGV0dWFsVGFza0dyb3VwRm9y
U2ltaWxhck9yaWdpbldpbmRvd0FnZW50cy5xdWV1ZU1pY3JvdGFzayhbdGhpc10geworICAgICAg
ICAvLyBXZSBjYW4ndCBtYWtlIGEgUmVmIHRvIFdpbmRvd0V2ZW50TG9vcCBpbiB0aGUgbGFtYmRh
IGNhcHR1cmUgYXMgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSByZWZlcmVuY2UgY3ljbGUgJiBsZWFr
LgorICAgICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKKyAgICAgICAg
bV9tdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2tRdWV1ZWRGbGFnID0gZmFsc2U7CisK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgZG9lc24ndCBleGlzdCBpbiB0aGUgc3BlYy4K
KyAgICAgICAgaWYgKG1fZGVsaXZlcmluZ011dGF0aW9uUmVjb3JkcykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbV9kZWxpdmVyaW5nTXV0YXRpb25SZWNvcmRzID0gdHJ1ZTsKKyAgICAg
ICAgTXV0YXRpb25PYnNlcnZlcjo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnMoKnRoaXMpOworICAg
ICAgICBtX2RlbGl2ZXJpbmdNdXRhdGlvblJlY29yZHMgPSBmYWxzZTsKKyAgICB9KTsKK30KKwor
RWxlbWVudFF1ZXVlJiBXaW5kb3dFdmVudExvb3A6OmJhY2t1cEVsZW1lbnRRdWV1ZSgpCit7Cisg
ICAgaWYgKCFtX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUpIHsKKyAgICAgICAgbV9wcm9j
ZXNzaW5nQmFja3VwRWxlbWVudFF1ZXVlID0gdHJ1ZTsKKyAgICAgICAgbV9wZXJwZXR1YWxUYXNr
R3JvdXBGb3JTaW1pbGFyT3JpZ2luV2luZG93QWdlbnRzLnF1ZXVlTWljcm90YXNrKFt0aGlzXSB7
CisgICAgICAgICAgICAvLyBXZSBjYW4ndCBtYWtlIGEgUmVmIHRvIFdpbmRvd0V2ZW50TG9vcCBp
biB0aGUgbGFtYmRhIGNhcHR1cmUgYXMgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSByZWZlcmVuY2Ug
Y3ljbGUgJiBsZWFrLgorICAgICAgICAgICAgbV9wcm9jZXNzaW5nQmFja3VwRWxlbWVudFF1ZXVl
ID0gZmFsc2U7CisgICAgICAgICAgICBBU1NFUlQobV9lbGVtZW50UXVldWUpOworICAgICAgICAg
ICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OnByb2Nlc3NCYWNrdXBRdWV1ZSgqbV9lbGVt
ZW50UXVldWUpOworICAgICAgICB9KTsKKyAgICB9CisgICAgaWYgKCFtX2VsZW1lbnRRdWV1ZSkK
KyAgICAgICAgbV9lbGVtZW50UXVldWUgPSBtYWtlVW5pcXVlPEVsZW1lbnRRdWV1ZT4oKTsKKyAg
ICByZXR1cm4gKm1fZWxlbWVudFF1ZXVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29wLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5oCShyZXZpc2lvbiAyNTMyMDApCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29wLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50SWRlbnRpZmllci5oIgogI2luY2x1
ZGUgIkV2ZW50TG9vcC5oIgorI2luY2x1ZGUgIkdDUmVhY2hhYmxlUmVmLmgiCiAjaW5jbHVkZSAi
UmVnaXN0cmFibGVEb21haW4uaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CkBAIC0zNCw2ICszNSw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IERvY3VtZW50OworY2xhc3MgRWxlbWVudFF1ZXVlOworY2xhc3MgSFRNTFNsb3RFbGVtZW50Owor
Y2xhc3MgTXV0YXRpb25PYnNlcnZlcjsKIAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9y
Zy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3dpbmRvdy1ldmVudC1sb29wCiBjbGFzcyBXaW5k
b3dFdmVudExvb3AgZmluYWwgOiBwdWJsaWMgRXZlbnRMb29wIHsKQEAgLTQyLDYgKzQ2LDEzIEBA
CiAKICAgICB2aXJ0dWFsIH5XaW5kb3dFdmVudExvb3AoKTsKIAorICAgIHZvaWQgcXVldWVNdXRh
dGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2soKTsKKyAgICBWZWN0b3I8R0NSZWFjaGFibGVS
ZWY8SFRNTFNsb3RFbGVtZW50Pj4mIHNpZ25hbFNsb3RMaXN0KCkgeyByZXR1cm4gbV9zaWduYWxT
bG90TGlzdDsgfQorICAgIEhhc2hTZXQ8UmVmUHRyPE11dGF0aW9uT2JzZXJ2ZXI+PiYgYWN0aXZl
TXV0YXRpb25PYnNlcnZlcnMoKSB7IHJldHVybiBtX2FjdGl2ZU9ic2VydmVyczsgfQorICAgIEhh
c2hTZXQ8UmVmUHRyPE11dGF0aW9uT2JzZXJ2ZXI+PiYgc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZl
cnMoKSB7IHJldHVybiBtX3N1c3BlbmRlZE9ic2VydmVyczsgfQorCisgICAgRWxlbWVudFF1ZXVl
JiBiYWNrdXBFbGVtZW50UXVldWUoKTsKKwogcHJpdmF0ZToKICAgICBXaW5kb3dFdmVudExvb3Ao
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKIApAQCAtNTEsNiArNjIsMjEgQEAKIAogICAgIFJl
Z2lzdHJhYmxlRG9tYWluIG1fZG9tYWluOwogICAgIFRpbWVyIG1fdGltZXI7CisgICAgc3RkOjp1
bmlxdWVfcHRyPE1pY3JvdGFza1F1ZXVlPiBtX21pY3JvdGFza1F1ZXVlOworCisgICAgLy8gRWFj
aCB0YXNrIHNjaGVkdWxlZCBpbiBldmVudCBsb29wIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRvY3Vt
ZW50IHNvIHRoYXQgaXQgY2FuIGJlIHN1c3BlbmVkIG9yIHN0b3BwZWQKKyAgICAvLyB3aGVuIHRo
ZSBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHN1c3BlbmVkIG9yIHN0b3BwZWQuIFRoaXMgdGFzayBn
cm91cCBpcyB1c2VkIHRvIHNjaGVkdWxlIGEgdGFzaworICAgIC8vIHdoaWNoIGlzIG5vdCBzY2hl
ZHVsZWQgdG8gYSBzcGVjaWZpYyBkb2N1bWVudCwgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hl
biBpdCdzIGFic29sdXRlbHkgcmVxdWlyZWQuCisgICAgRXZlbnRMb29wVGFza0dyb3VwIG1fcGVy
cGV0dWFsVGFza0dyb3VwRm9yU2ltaWxhck9yaWdpbldpbmRvd0FnZW50czsKKworICAgIGJvb2wg
bV9tdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2tRdWV1ZWRGbGFnIHsgZmFsc2UgfTsK
KyAgICBib29sIG1fZGVsaXZlcmluZ011dGF0aW9uUmVjb3JkcyB7IGZhbHNlIH07IC8vIEZJWE1F
OiBUaGlzIGZsYWcgZG9lc24ndCBleGlzdCBpbiB0aGUgc3BlYy4KKyAgICBWZWN0b3I8R0NSZWFj
aGFibGVSZWY8SFRNTFNsb3RFbGVtZW50Pj4gbV9zaWduYWxTbG90TGlzdDsgLy8gaHR0cHM6Ly9k
b20uc3BlYy53aGF0d2cub3JnLyNzaWduYWwtc2xvdC1saXN0CisgICAgSGFzaFNldDxSZWZQdHI8
TXV0YXRpb25PYnNlcnZlcj4+IG1fYWN0aXZlT2JzZXJ2ZXJzOworICAgIEhhc2hTZXQ8UmVmUHRy
PE11dGF0aW9uT2JzZXJ2ZXI+PiBtX3N1c3BlbmRlZE9ic2VydmVyczsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxFbGVtZW50UXVldWU+IG1fZWxlbWVudFF1ZXVlOworICAgIGJvb2wgbV9wcm9jZXNz
aW5nQmFja3VwRWxlbWVudFF1ZXVlIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385059</attachid>
            <date>2019-12-06 16:42:59 -0800</date>
            <delta_ts>2019-12-07 16:54:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204492-20191206164258.patch</filename>
            <type>text/plain</type>
            <size>25235</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MzIzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE5LTEyLTA2ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFRoZXJlIHNob3VsZCBiZSBvbmUg
TWljcm90YXNrUXVldWUgcGVyIEV2ZW50TG9vcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NDkyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NzQy
MDY0NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIG1ha2VzIG1pY3JvdGFzayBxdWV1ZSBhbmQgdGhlIG1pY3JvdGFza3MgZm9yIG11
dGF0aW9uIG9ic2VydmVycyBhbmQgY3VzdG9tIGVsZW1lbnRzCisgICAgICAgIHNwZWNpZmljIHRv
IGVhY2ggZXZlbnQgbG9vcCBzbyB0aGF0IG9ubHkgc2ltaWxhciBvcmlnaW4gd2luZG93cyBzaGFy
ZSB0aGUgc2FtZSBtaWNyb3Rhc2sgcXVldWUKKyAgICAgICAgYW5kIG11dGF0aW9uIG9ic2VydmVy
J3MgY29tcG91bmQgbWljcm90YXNrIG9yIGN1c3RvbSBlbGVtZW50J3MgYmFja3VwIGVsZW1lbnQg
cXVldWUuCisKKyAgICAgICAgQXMgYSByZXN1bHQsIHdlIGNhbiByZW1vdmUgdGhlIHdvcmthcm91
bmQgd2UgYWRkZWQgaW4gcjI0NzIyMi4KKworICAgICAgICBCZWNhdXNlIG1pY3JvdGFza3MgZm9y
IG11dGF0aW9uIG9ic2VydmVycyBhbmQgY3VzdG9tIGVsZW1lbnRzIGFyZSBzaGFyZWQgYWNyb3Nz
IHNpbWlsYXIgb3JpZ2luCisgICAgICAgIHdpbmRvdyBhZ2VudHMsIHdlIGNhbid0IHVzZSBhbnkg
b25lIGRvY3VtZW50J3MgdGFzayBncm91cCB0byBzY2hlZHVsZSB0aGVzZS4gSW5zdGVhZCwgd2Ug
Y3JlYXRlCisgICAgICAgIGEgbmV3ICJwZXJwZXR1YWwiIHRhc2sgZ3JvdXAgaW4gV2luZG93RXZl
bnRMb29wIHdoaWNoIGlzIG5ldmVyIHN1c3BlbmRlZCBvciBzdG9wcGVkLiBJdCdzIHRoZQorICAg
ICAgICByZXNwb25zaWJpbGl0eSBvZiBtdXRhdGlvbiBvYnNlcnZlciBhbmQgY3VzdG9tIGVsZW1l
bnRzJyBjb2RlIHRvIGRlYWwgd2l0aCBzdXNwZW5lZCBvciBzdG9wcGVkCisgICAgICAgIGRvY3Vt
ZW50cyBhcyBpdCBoYXMgYmVlbiB0aGUgY2FzZS4KKworICAgICAgICBTZWUgYWxzbzogaHR0cHM6
Ly9kb20uc3BlYy53aGF0d2cub3JnLyNxdWV1ZS1hLW11dGF0aW9uLW9ic2VydmVyLWNvbXBvdW5k
LW1pY3JvdGFzaworICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9y
Zy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjYmFja3VwLWVsZW1lbnQtcXVldWUKKwor
ICAgICAgICBUZXN0OiBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtZG9lcy1ub3QtZmlyZS1wcm9t
aXNlcy13aGlsZS1zYW5pdGl6aW5nLXdlYi1jb250ZW50Lmh0bWwKKworICAgICAgICAqIGRvbS9D
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
UXVldWU6OmFkZCk6IE1vdmVkIG91dCBvZiBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnRRdWV1ZTo6aW52b2tlQWxsKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50UXVldWU6OnByb2Nlc3NRdWV1ZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVFbGVtZW50T25BcHBy
b3ByaWF0ZUVsZW1lbnRRdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZTo6cHJvY2Vzc0JhY2t1cFF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3Rv
bUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnN1cmVCYWNrdXBRdWV1ZSk6IERlbGV0ZWQuIE1vdmVk
IHRvIFdpbmRvd0V2ZW50TG9vcC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlOjpiYWNrdXBFbGVtZW50UXVldWUpOiBEaXR0by4KKyAgICAgICAgKiBkb20vQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRRdWV1
ZSk6IE1vdmVkIG91dCBvZiBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSB0byBmb3J3YXJkIGRl
Y2xhcmUgaW4gRXZlbnRMb29wLmguCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpmaW5pc2hlZFBhcnNpbmcpOiBSZW1vdmVkIHRoZSB3b3Jr
YXJvdW5kIGFkZGVkIGluIHIyNDcyMjIuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZXZl
bnRMb29wKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aW5kb3dFdmVudExvb3ApOiBB
ZGRlZC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vTXV0YXRpb25P
YnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjphY3RpdmVNdXRhdGlvbk9ic2VydmVycyk6
IERlbGV0ZWQuIE1vdmVkIHRvIFdpbmRvd0V2ZW50TG9vcC4KKyAgICAgICAgKFdlYkNvcmU6OnN1
c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpzaWdu
YWxTbG90TGlzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6
cXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2spOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXI6OmVucXVldWVNdXRhdGlvblJlY29yZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjplbnF1ZXVlU2xvdENoYW5nZUV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXI6OnNldEhhc1RyYW5zaWVudFJlZ2lz
dHJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpub3RpZnlNdXRh
dGlvbk9ic2VydmVycyk6IE5vdyB0YWtlcyBXaW5kb3dFdmVudExvb3Agc2luY2UgdmFyaW91cwor
ICAgICAgICBsaXN0cyBhbmQgaGFzaCBtYXBzIGFyZSBzcGVjaWZpYyB0byBlYWNoIFdpbmRvd0V2
ZW50TG9vcC4KKyAgICAgICAgKiBkb20vTXV0YXRpb25PYnNlcnZlci5oOgorICAgICAgICAqIGRv
bS9XaW5kb3dFdmVudExvb3AuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RXZlbnRMb29w
OjpXaW5kb3dFdmVudExvb3ApOiBDcmVhdGUgbV9wZXJwZXR1YWxUYXNrR3JvdXBGb3JTaW1pbGFy
T3JpZ2luV2luZG93QWdlbnRzLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RXZlbnRMb29wOjpt
aWNyb3Rhc2tRdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dFdmVudExvb3A6OnF1ZXVl
TXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrKToKKyAgICAgICAgKFdlYkNvcmU6Oldp
bmRvd0V2ZW50TG9vcDo6YmFja3VwRWxlbWVudFF1ZXVlKToKKyAgICAgICAgKiBkb20vV2luZG93
RXZlbnRMb29wLmg6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlUGFnZUZvclNhbml0aXppbmdXZWJDb250ZW50KTogUmVtb3ZlZCB0aGUgd29y
a2Fyb3VuZCBhZGRlZCBpbiByMjQ3MjIyLgorICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZTo6c2V0SXNGb3JTYW5pdGl6aW5nV2ViQ29udGVudCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6aXNGb3JTYW5pdGl6aW5nV2ViQ29udGVudCBjb25zdCk6
IERpdHRvLgorCiAyMDE5LTEyLTA2ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNv
bT4KIAogICAgICAgICBbaU9TXSBDYWxscyB0byBkZXZpY2Ugb3JpZW50YXRpb24gQVBJIHNob3Vs
ZCBiZSBkb25lIGluIHRoZSBVSSBwcm9jZXNzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uUXVldWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHAJKHJldmlzaW9uIDI1MzIwMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKKyNpbmNsdWRlICJXaW5kb3dFdmVudExvb3AuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9DYXRjaFNjb3BlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcC5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtMjM4LDE0ICsyMzksMTQgQEAgdm9pZCBDdXN0
b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6aW52b2tlQQogICAgIH0KIH0KIAotaW5saW5lIHZvaWQg
Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OkVsZW1lbnRRdWV1ZTo6YWRkKEVsZW1lbnQmIGVs
ZW1lbnQpCitpbmxpbmUgdm9pZCBFbGVtZW50UXVldWU6OmFkZChFbGVtZW50JiBlbGVtZW50KQog
ewogICAgIEFTU0VSVCghbV9pbnZva2luZyk7CiAgICAgLy8gRklYTUU6IEF2b2lkIGluc2VydGlu
ZyB0aGUgc2FtZSBlbGVtZW50IG11bHRpcGxlIHRpbWVzLgogICAgIG1fZWxlbWVudHMuYXBwZW5k
KGVsZW1lbnQpOwogfQogCi1pbmxpbmUgdm9pZCBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6
RWxlbWVudFF1ZXVlOjppbnZva2VBbGwoKQoraW5saW5lIHZvaWQgRWxlbWVudFF1ZXVlOjppbnZv
a2VBbGwoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2ludm9raW5nKTsKICAgICBTZXRGb3JT
Y29wZTxib29sPiBpbnZva2luZyhtX2ludm9raW5nLCB0cnVlKTsKQEAgLTI2Miw3ICsyNjMsNyBA
QCBpbmxpbmUgdm9pZCBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6CiAgICAgbV9lbGVtZW50
cy5jbGVhcigpOwogfQogCi1pbmxpbmUgdm9pZCBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6
RWxlbWVudFF1ZXVlOjpwcm9jZXNzUXVldWUoSlNDOjpKU0dsb2JhbE9iamVjdCogc3RhdGUpCitp
bmxpbmUgdm9pZCBFbGVtZW50UXVldWU6OnByb2Nlc3NRdWV1ZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiBzdGF0ZSkKIHsKICAgICBpZiAoIXN0YXRlKSB7CiAgICAgICAgIGludm9rZUFsbCgpOwpAQCAt
MjkzLDggKzI5NCw3IEBAIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWUK
IHsKICAgICBBU1NFUlQoZWxlbWVudC5yZWFjdGlvblF1ZXVlKCkpOwogICAgIGlmICghQ3VzdG9t
RWxlbWVudFJlYWN0aW9uU3RhY2s6OnNfY3VycmVudFByb2Nlc3NpbmdTdGFjaykgewotICAgICAg
ICBhdXRvJiBxdWV1ZSA9IGVuc3VyZUJhY2t1cFF1ZXVlKGVsZW1lbnQuZG9jdW1lbnQoKSk7Ci0g
ICAgICAgIHF1ZXVlLmFkZChlbGVtZW50KTsKKyAgICAgICAgZWxlbWVudC5kb2N1bWVudCgpLndp
bmRvd0V2ZW50TG9vcCgpLmJhY2t1cEVsZW1lbnRRdWV1ZSgpLmFkZChlbGVtZW50KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzE4LDMwICszMTgsOSBAQCB2b2lkIEN1c3RvbUVsZW1l
bnRSZWFjdGlvblN0YWNrOjpwcm9jZXNzCiAgICAgbV9xdWV1ZSA9IG51bGxwdHI7CiB9CiAKLXN0
YXRpYyBib29sIHNfcHJvY2Vzc2luZ0JhY2t1cEVsZW1lbnRRdWV1ZSA9IGZhbHNlOwotCi0vLyBG
SVhNRTogQmFja3VwUXVldWUgbXVzdCBiZSBwZXIgZXZlbnQgbG9vcC4KLUN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlOjpFbGVtZW50UXVldWUmIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpl
bnN1cmVCYWNrdXBRdWV1ZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgaWYgKCFzX3Byb2Nl
c3NpbmdCYWNrdXBFbGVtZW50UXVldWUpIHsKLSAgICAgICAgc19wcm9jZXNzaW5nQmFja3VwRWxl
bWVudFF1ZXVlID0gdHJ1ZTsKLSAgICAgICAgZG9jdW1lbnQuZXZlbnRMb29wKCkucXVldWVNaWNy
b3Rhc2soW10gewotICAgICAgICAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OnByb2Nl
c3NCYWNrdXBRdWV1ZSgpOwotICAgICAgICB9KTsKLSAgICB9Ci0gICAgcmV0dXJuIGJhY2t1cEVs
ZW1lbnRRdWV1ZSgpOwotfQotCi12b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpwcm9j
ZXNzQmFja3VwUXVldWUoKQotewotICAgIGJhY2t1cEVsZW1lbnRRdWV1ZSgpLnByb2Nlc3NRdWV1
ZShudWxscHRyKTsKLSAgICBzX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUgPSBmYWxzZTsK
LX0KLQotQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OkVsZW1lbnRRdWV1ZSYgQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWU6OmJhY2t1cEVsZW1lbnRRdWV1ZSgpCit2b2lkIEN1c3RvbUVsZW1l
bnRSZWFjdGlvblF1ZXVlOjpwcm9jZXNzQmFja3VwUXVldWUoRWxlbWVudFF1ZXVlJiBiYWNrdXBF
bGVtZW50UXVldWUpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEVsZW1lbnRRdWV1ZT4g
cXVldWU7Ci0gICAgcmV0dXJuIHF1ZXVlLmdldCgpOworICAgIGJhY2t1cEVsZW1lbnRRdWV1ZS5w
cm9jZXNzUXVldWUobnVsbHB0cik7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9D
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCShyZXZpc2lvbiAyNTMyMDApCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNiArNDUsMjIgQEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIEpTQ3VzdG9tRWxl
bWVudEludGVyZmFjZTsKIGNsYXNzIFF1YWxpZmllZE5hbWU7CiAKK2NsYXNzIEVsZW1lbnRRdWV1
ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRWxlbWVudFF1ZXVlKTsKK3B1YmxpYzoKKyAgICBFbGVtZW50UXVldWUoKSA9IGRlZmF1bHQ7
CisKKyAgICB2b2lkIGFkZChFbGVtZW50Jik7CisgICAgdm9pZCBwcm9jZXNzUXVldWUoSlNDOjpK
U0dsb2JhbE9iamVjdCopOworCitwcml2YXRlOgorICAgIHZvaWQgaW52b2tlQWxsKCk7CisKKyAg
ICBWZWN0b3I8R0NSZWFjaGFibGVSZWY8RWxlbWVudD4+IG1fZWxlbWVudHM7CisgICAgYm9vbCBt
X2ludm9raW5nIHsgZmFsc2UgfTsKK307CisKIGNsYXNzIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1
ZXVlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSk7CkBAIC02NCwyNCArODAsMTAgQEAgcHVi
bGljOgogICAgIHZvaWQgaW52b2tlQWxsKEVsZW1lbnQmKTsKICAgICB2b2lkIGNsZWFyKCk7CiAK
LSAgICBzdGF0aWMgdm9pZCBwcm9jZXNzQmFja3VwUXVldWUoKTsKLQotICAgIGNsYXNzIEVsZW1l
bnRRdWV1ZSB7Ci0gICAgcHVibGljOgotICAgICAgICB2b2lkIGFkZChFbGVtZW50Jik7Ci0gICAg
ICAgIHZvaWQgcHJvY2Vzc1F1ZXVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIHZvaWQgaW52b2tlQWxsKCk7Ci0KLSAgICAgICAgVmVjdG9yPEdDUmVhY2hh
YmxlUmVmPEVsZW1lbnQ+PiBtX2VsZW1lbnRzOwotICAgICAgICBib29sIG1faW52b2tpbmcgeyBm
YWxzZSB9OwotICAgIH07CisgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0JhY2t1cFF1ZXVlKEVsZW1l
bnRRdWV1ZSYpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGVucXVldWVFbGVtZW50T25B
cHByb3ByaWF0ZUVsZW1lbnRRdWV1ZShFbGVtZW50Jik7Ci0gICAgc3RhdGljIEVsZW1lbnRRdWV1
ZSYgZW5zdXJlQmFja3VwUXVldWUoRG9jdW1lbnQmKTsKLSAgICBzdGF0aWMgRWxlbWVudFF1ZXVl
JiBiYWNrdXBFbGVtZW50UXVldWUoKTsKIAogICAgIFJlZjxKU0N1c3RvbUVsZW1lbnRJbnRlcmZh
Y2U+IG1faW50ZXJmYWNlOwogICAgIFZlY3RvcjxDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0
ZW0+IG1faXRlbXM7CkBAIC0xNTgsNyArMTYwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHByb2Nlc3NRdWV1ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAK
LSAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6RWxlbWVudFF1ZXVlKiBtX3F1ZXVlIHsg
bnVsbHB0ciB9OyAvLyBVc2UgcmF3IHBvaW50ZXIgdG8gYXZvaWQgZ2VuZXJhdGluZyBkZWxldGUg
aW4gdGhlIGRlc3RydWN0b3IuCisgICAgRWxlbWVudFF1ZXVlKiBtX3F1ZXVlIHsgbnVsbHB0ciB9
OyAvLyBVc2UgcmF3IHBvaW50ZXIgdG8gYXZvaWQgZ2VuZXJhdGluZyBkZWxldGUgaW4gdGhlIGRl
c3RydWN0b3IuCiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sqIG1fcHJldmlvdXNQcm9j
ZXNzaW5nU3RhY2s7CiAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbV9zdGF0ZTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNTMyMDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODAzLDExICs1ODAzLDggQEAg
dm9pZCBEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5nKCkKICAgICBpZiAoIW1fZG9jdW1lbnRUaW1p
bmcuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQpCiAgICAgICAgIG1fZG9jdW1lbnRUaW1pbmcu
ZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAotICAg
IGlmICghcGFnZSgpIHx8ICFwYWdlKCktPmlzRm9yU2FuaXRpemluZ1dlYkNvbnRlbnQoKSkgewot
ICAgICAgICAvLyBGSVhNRTogU2NoZWR1bGUgYSB0YXNrIHRvIGZpcmUgRE9NQ29udGVudExvYWRl
ZCBldmVudCBpbnN0ZWFkLiBTZWUgd2Via2l0Lm9yZy9iLzgyOTMxCi0gICAgICAgIGV2ZW50TG9v
cCgpLnBlcmZvcm1NaWNyb3Rhc2tDaGVja3BvaW50KCk7Ci0gICAgfQotCisgICAgLy8gRklYTUU6
IFNjaGVkdWxlIGEgdGFzayB0byBmaXJlIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgaW5zdGVhZC4g
U2VlIHdlYmtpdC5vcmcvYi84MjkzMQorICAgIGV2ZW50TG9vcCgpLnBlcmZvcm1NaWNyb3Rhc2tD
aGVja3BvaW50KCk7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5ET01Db250ZW50TG9hZGVkRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6OlllcywgRXZlbnQ6Oklz
Q2FuY2VsYWJsZTo6Tm8pKTsKIAogICAgIGlmICghbV9kb2N1bWVudFRpbWluZy5kb21Db250ZW50
TG9hZGVkRXZlbnRFbmQpCkBAIC02MjYzLDggKzYyNjAsNyBAQCBFdmVudExvb3BUYXNrR3JvdXAm
IERvY3VtZW50OjpldmVudExvb3AoCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIW1fZG9jdW1lbnRUYXNrR3JvdXApKSB7Ci0gICAgICAgIG1fZXZlbnRM
b29wID0gV2luZG93RXZlbnRMb29wOjplbnN1cmVGb3JSZWdpc3RyYWJsZURvbWFpbihSZWdpc3Ry
YWJsZURvbWFpbiB7IHNlY3VyaXR5T3JpZ2luKCkuZGF0YSgpIH0pOwotICAgICAgICBtX2RvY3Vt
ZW50VGFza0dyb3VwID0gbWFrZVVuaXF1ZTxFdmVudExvb3BUYXNrR3JvdXA+KCptX2V2ZW50TG9v
cCk7CisgICAgICAgIG1fZG9jdW1lbnRUYXNrR3JvdXAgPSBtYWtlVW5pcXVlPEV2ZW50TG9vcFRh
c2tHcm91cD4od2luZG93RXZlbnRMb29wKCkpOwogICAgICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0
c0FyZVN0b3BwZWQoKSkKICAgICAgICAgICAgIG1fZG9jdW1lbnRUYXNrR3JvdXAtPnN0b3BBbmRE
aXNjYXJkQWxsVGFza3MoKTsKICAgICAgICAgZWxzZSBpZiAoYWN0aXZlRE9NT2JqZWN0c0FyZVN1
c3BlbmRlZCgpKQpAQCAtNjI3Myw2ICs2MjY5LDE0IEBAIEV2ZW50TG9vcFRhc2tHcm91cCYgRG9j
dW1lbnQ6OmV2ZW50TG9vcCgKICAgICByZXR1cm4gKm1fZG9jdW1lbnRUYXNrR3JvdXA7CiB9CiAK
K1dpbmRvd0V2ZW50TG9vcCYgRG9jdW1lbnQ6OndpbmRvd0V2ZW50TG9vcCgpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoVU5MSUtFTFkoIW1fZXZlbnRMb29wKSkKKyAg
ICAgICAgbV9ldmVudExvb3AgPSBXaW5kb3dFdmVudExvb3A6OmVuc3VyZUZvclJlZ2lzdHJhYmxl
RG9tYWluKFJlZ2lzdHJhYmxlRG9tYWluIHsgc2VjdXJpdHlPcmlnaW4oKS5kYXRhKCkgfSk7Cisg
ICAgcmV0dXJuICptX2V2ZW50TG9vcDsKK30KKwogdm9pZCBEb2N1bWVudDo6c3VzcGVuZFNjaGVk
dWxlZFRhc2tzKFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogewogICAgIGlmIChtX3NjaGVk
dWxlZFRhc2tzQXJlU3VzcGVuZGVkKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNp
b24gMjUzMjAwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNjcsNiArMTA2Nyw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHBvc3RUYXNrKFRhc2smJikgZmluYWw7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRleHQn
cyB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCiAKICAgICBFdmVudExvb3BUYXNrR3JvdXAmIGV2ZW50
TG9vcCgpIGZpbmFsOworICAgIFdpbmRvd0V2ZW50TG9vcCYgd2luZG93RXZlbnRMb29wKCk7CiAK
ICAgICBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIqIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlcigpIHsgcmV0dXJuIG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmdldCgpOyB9CiAg
ICAgdm9pZCBzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tzKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCShyZXZpc2lvbiAyNTMy
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDEzICszNCwxMyBAQAogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIK
IAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRMb29wLmgiCiAjaW5jbHVk
ZSAiR0NSZWFjaGFibGVSZWYuaCIKICNpbmNsdWRlICJIVE1MU2xvdEVsZW1lbnQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJNdXRhdGlvbkNhbGxi
YWNrLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5oIgogI2luY2x1
ZGUgIk11dGF0aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAiV2luZG93RXZlbnRMb29wLmgiCiAjaW5j
bHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTEzNyw0MCArMTM3LDYgQEAgdm9pZCBNdXRhdGlv
bk9ic2VydmVyOjpvYnNlcnZhdGlvbkVuZGVkKAogICAgIG1fcmVnaXN0cmF0aW9ucy5yZW1vdmUo
JnJlZ2lzdHJhdGlvbik7CiB9CiAKLXR5cGVkZWYgSGFzaFNldDxSZWZQdHI8TXV0YXRpb25PYnNl
cnZlcj4+IE11dGF0aW9uT2JzZXJ2ZXJTZXQ7Ci0KLXN0YXRpYyBNdXRhdGlvbk9ic2VydmVyU2V0
JiBhY3RpdmVNdXRhdGlvbk9ic2VydmVycygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PE11dGF0aW9uT2JzZXJ2ZXJTZXQ+IGFjdGl2ZU9ic2VydmVyczsKLSAgICByZXR1cm4gYWN0aXZl
T2JzZXJ2ZXJzOwotfQotCi1zdGF0aWMgTXV0YXRpb25PYnNlcnZlclNldCYgc3VzcGVuZGVkTXV0
YXRpb25PYnNlcnZlcnMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNdXRhdGlvbk9i
c2VydmVyU2V0PiBzdXNwZW5kZWRPYnNlcnZlcnM7Ci0gICAgcmV0dXJuIHN1c3BlbmRlZE9ic2Vy
dmVyczsKLX0KLQotLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNzaWduYWwtc2xvdC1s
aXN0Ci1zdGF0aWMgVmVjdG9yPEdDUmVhY2hhYmxlUmVmPEhUTUxTbG90RWxlbWVudD4+JiBzaWdu
YWxTbG90TGlzdCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxHQ1JlYWNo
YWJsZVJlZjxIVE1MU2xvdEVsZW1lbnQ+Pj4gbGlzdDsKLSAgICByZXR1cm4gbGlzdDsKLX0KLQot
Ly8gVGhpcyBzdGF0ZSBtdXN0IGJlIHBlciBldmVudCBsb29wLgotc3RhdGljIGJvb2wgbXV0YXRp
b25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrUXVldWVkRmxhZyA9IGZhbHNlOwotCi12b2lkIE11
dGF0aW9uT2JzZXJ2ZXI6OnF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrKERv
Y3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBpZiAobXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWlj
cm90YXNrUXVldWVkRmxhZykKLSAgICAgICAgcmV0dXJuOwotICAgIG11dGF0aW9uT2JzZXJ2ZXJD
b21wb3VuZE1pY3JvdGFza1F1ZXVlZEZsYWcgPSB0cnVlOwotICAgIGRvY3VtZW50LmV2ZW50TG9v
cCgpLnF1ZXVlTWljcm90YXNrKFtdIHsKLSAgICAgICAgbm90aWZ5TXV0YXRpb25PYnNlcnZlcnMo
KTsKLSAgICB9KTsKLX0KLQogdm9pZCBNdXRhdGlvbk9ic2VydmVyOjplbnF1ZXVlTXV0YXRpb25S
ZWNvcmQoUmVmPE11dGF0aW9uUmVjb3JkPiYmIG11dGF0aW9uKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CkBAIC0xNzksMjYgKzE0NSwyOCBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6
OmVucXVldWVNdXRhdGlvblJlCiAKICAgICBtX3BlbmRpbmdUYXJnZXRzLmFkZCgqbXV0YXRpb24t
PnRhcmdldCgpKTsKICAgICBtX3JlY29yZHMuYXBwZW5kKFdURk1vdmUobXV0YXRpb24pKTsKLSAg
ICBhY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFkZCh0aGlzKTsKIAotICAgIHF1ZXVlTXV0YXRp
b25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrKGRvY3VtZW50LmdldCgpKTsKKyAgICBhdXRvIGV2
ZW50TG9vcCA9IG1ha2VSZWYoZG9jdW1lbnQtPndpbmRvd0V2ZW50TG9vcCgpKTsKKyAgICBldmVu
dExvb3AtPmFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKHRoaXMpOworICAgIGV2ZW50TG9v
cC0+cXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2soKTsKIH0KIAogdm9pZCBN
dXRhdGlvbk9ic2VydmVyOjplbnF1ZXVlU2xvdENoYW5nZUV2ZW50KEhUTUxTbG90RWxlbWVudCYg
c2xvdCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChzaWduYWxT
bG90TGlzdCgpLmZpbmRNYXRjaGluZyhbJnNsb3RdKGF1dG8mIGVudHJ5KSB7IHJldHVybiBlbnRy
eS5wdHIoKSA9PSAmc2xvdDsgfSkgPT0gbm90Rm91bmQpOwotICAgIHNpZ25hbFNsb3RMaXN0KCku
YXBwZW5kKHNsb3QpOworICAgIGF1dG8gZXZlbnRMb29wID0gbWFrZVJlZihzbG90LmRvY3VtZW50
KCkud2luZG93RXZlbnRMb29wKCkpOworICAgIGF1dG8mIGxpc3QgPSBldmVudExvb3AtPnNpZ25h
bFNsb3RMaXN0KCk7CisgICAgQVNTRVJUKGxpc3QuZmluZE1hdGNoaW5nKFsmc2xvdF0oYXV0byYg
ZW50cnkpIHsgcmV0dXJuIGVudHJ5LnB0cigpID09ICZzbG90OyB9KSA9PSBub3RGb3VuZCk7Cisg
ICAgbGlzdC5hcHBlbmQoc2xvdCk7CiAKLSAgICBxdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3Vu
ZE1pY3JvdGFzayhzbG90LmRvY3VtZW50KCkpOworICAgIGV2ZW50TG9vcC0+cXVldWVNdXRhdGlv
bk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2soKTsKIH0KIAogdm9pZCBNdXRhdGlvbk9ic2VydmVy
OjpzZXRIYXNUcmFuc2llbnRSZWdpc3RyYXRpb24oRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5h
ZGQodGhpcyk7Ci0KLSAgICBxdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzayhk
b2N1bWVudCk7CisgICAgYXV0byBldmVudExvb3AgPSBtYWtlUmVmKGRvY3VtZW50LndpbmRvd0V2
ZW50TG9vcCgpKTsKKyAgICBldmVudExvb3AtPmFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRk
KHRoaXMpOworICAgIGV2ZW50TG9vcC0+cXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNy
b3Rhc2soKTsKIH0KIAogSGFzaFNldDxOb2RlKj4gTXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZWRO
b2RlcygpIGNvbnN0CkBAIC0yNTEsMzIgKzIxOSwyMyBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6
OmRlbGl2ZXIoKQogICAgIH0KIH0KIAotdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpub3RpZnlNdXRh
dGlvbk9ic2VydmVycygpCisvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI25vdGlmeS1t
dXRhdGlvbi1vYnNlcnZlcnMKK3ZvaWQgTXV0YXRpb25PYnNlcnZlcjo6bm90aWZ5TXV0YXRpb25P
YnNlcnZlcnMoV2luZG93RXZlbnRMb29wJiBldmVudExvb3ApCiB7Ci0gICAgLy8gaHR0cHM6Ly9k
b20uc3BlYy53aGF0d2cub3JnLyNub3RpZnktbXV0YXRpb24tb2JzZXJ2ZXJzCi0gICAgLy8gMS4g
VW5zZXQgbXV0YXRpb24gb2JzZXJ2ZXIgY29tcG91bmQgbWljcm90YXNrIHF1ZXVlZCBmbGFnLgot
ICAgIG11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFza1F1ZXVlZEZsYWcgPSBmYWxzZTsK
LQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIGJvb2wgZGVsaXZlcnlJ
blByb2dyZXNzID0gZmFsc2U7Ci0gICAgaWYgKGRlbGl2ZXJ5SW5Qcm9ncmVzcykKLSAgICAgICAg
cmV0dXJuOwotICAgIGRlbGl2ZXJ5SW5Qcm9ncmVzcyA9IHRydWU7Ci0KLSAgICBpZiAoIXN1c3Bl
bmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYg
b2JzZXJ2ZXIgOiBjb3B5VG9WZWN0b3Ioc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKSkpIHsK
KyAgICBpZiAoIWV2ZW50TG9vcC5zdXNwZW5kZWRNdXRhdGlvbk9ic2VydmVycygpLmlzRW1wdHko
KSkgeworICAgICAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogY29weVRvVmVjdG9yKGV2ZW50TG9v
cC5zdXNwZW5kZWRNdXRhdGlvbk9ic2VydmVycygpKSkgewogICAgICAgICAgICAgaWYgKCFvYnNl
cnZlci0+Y2FuRGVsaXZlcigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICBzdXNwZW5kZWRNdXRhdGlvbk9ic2VydmVycygpLnJlbW92ZShvYnNlcnZlcik7Ci0gICAg
ICAgICAgICBhY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFkZChvYnNlcnZlcik7CisgICAgICAg
ICAgICBldmVudExvb3Auc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5yZW1vdmUob2JzZXJ2
ZXIpOworICAgICAgICAgICAgZXZlbnRMb29wLmFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRk
KG9ic2VydmVyKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHdoaWxlICghYWN0aXZlTXV0YXRp
b25PYnNlcnZlcnMoKS5pc0VtcHR5KCkgfHwgIXNpZ25hbFNsb3RMaXN0KCkuaXNFbXB0eSgpKSB7
CisgICAgd2hpbGUgKCFldmVudExvb3AuYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5pc0VtcHR5
KCkgfHwgIWV2ZW50TG9vcC5zaWduYWxTbG90TGlzdCgpLmlzRW1wdHkoKSkgewogICAgICAgICAv
LyAyLiBMZXQgbm90aWZ5IGxpc3QgYmUgYSBjb3B5IG9mIHVuaXQgb2YgcmVsYXRlZCBzaW1pbGFy
LW9yaWdpbiBicm93c2luZyBjb250ZXh0cycgbGlzdCBvZiBNdXRhdGlvbk9ic2VydmVyIG9iamVj
dHMuCi0gICAgICAgIGF1dG8gbm90aWZ5TGlzdCA9IGNvcHlUb1ZlY3RvcihhY3RpdmVNdXRhdGlv
bk9ic2VydmVycygpKTsKLSAgICAgICAgYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5jbGVhcigp
OworICAgICAgICBhdXRvIG5vdGlmeUxpc3QgPSBjb3B5VG9WZWN0b3IoZXZlbnRMb29wLmFjdGl2
ZU11dGF0aW9uT2JzZXJ2ZXJzKCkpOworICAgICAgICBldmVudExvb3AuYWN0aXZlTXV0YXRpb25P
YnNlcnZlcnMoKS5jbGVhcigpOwogICAgICAgICBzdGQ6OnNvcnQobm90aWZ5TGlzdC5iZWdpbigp
LCBub3RpZnlMaXN0LmVuZCgpLCBbXShhdXRvJiBsaHMsIGF1dG8mIHJocykgewogICAgICAgICAg
ICAgcmV0dXJuIGxocy0+bV9wcmlvcml0eSA8IHJocy0+bV9wcmlvcml0eTsKICAgICAgICAgfSk7
CkBAIC0yODQsOCArMjQzLDggQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpub3RpZnlNdXRhdGlv
bk9icwogICAgICAgICAvLyAzLiBMZXQgc2lnbmFsTGlzdCBiZSBhIGNvcHkgb2YgdW5pdCBvZiBy
ZWxhdGVkIHNpbWlsYXItb3JpZ2luIGJyb3dzaW5nIGNvbnRleHRzJyBzaWduYWwgc2xvdCBsaXN0
LgogICAgICAgICAvLyA0LiBFbXB0eSB1bml0IG9mIHJlbGF0ZWQgc2ltaWxhci1vcmlnaW4gYnJv
d3NpbmcgY29udGV4dHMnIHNpZ25hbCBzbG90IGxpc3QuCiAgICAgICAgIFZlY3RvcjxHQ1JlYWNo
YWJsZVJlZjxIVE1MU2xvdEVsZW1lbnQ+PiBzbG90TGlzdDsKLSAgICAgICAgaWYgKCFzaWduYWxT
bG90TGlzdCgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgc2xvdExpc3Quc3dhcChzaWduYWxT
bG90TGlzdCgpKTsKKyAgICAgICAgaWYgKCFldmVudExvb3Auc2lnbmFsU2xvdExpc3QoKS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIHNsb3RMaXN0LnN3YXAoZXZlbnRMb29wLnNpZ25hbFNsb3RM
aXN0KCkpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBzbG90IDogc2xvdExpc3QpCiAgICAgICAg
ICAgICAgICAgc2xvdC0+ZGlkUmVtb3ZlRnJvbVNpZ25hbFNsb3RMaXN0KCk7CiAgICAgICAgIH0K
QEAgLTI5NSwxNSArMjU0LDEzIEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6bm90aWZ5TXV0YXRp
b25PYnMKICAgICAgICAgICAgIGlmIChvYnNlcnZlci0+Y2FuRGVsaXZlcigpKQogICAgICAgICAg
ICAgICAgIG9ic2VydmVyLT5kZWxpdmVyKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQob2JzZXJ2ZXIpOworICAgICAg
ICAgICAgICAgIGV2ZW50TG9vcC5zdXNwZW5kZWRNdXRhdGlvbk9ic2VydmVycygpLmFkZChvYnNl
cnZlcik7CiAgICAgICAgIH0KIAogICAgICAgICAvLyA2LiBGb3IgZWFjaCBzbG90IHNsb3QgaW4g
c2lnbmFsTGlzdCwgaW4gb3JkZXIsIGZpcmUgYW4gZXZlbnQgbmFtZWQgc2xvdGNoYW5nZSwgd2l0
aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUgc2V0IHRvIHRydWUsIGF0IHNsb3QuCiAgICAgICAgIGZv
ciAoYXV0byYgc2xvdCA6IHNsb3RMaXN0KQogICAgICAgICAgICAgc2xvdC0+ZGlzcGF0Y2hTbG90
Q2hhbmdlRXZlbnQoKTsKICAgICB9Ci0KLSAgICBkZWxpdmVyeUluUHJvZ3Jlc3MgPSBmYWxzZTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011
dGF0aW9uT2JzZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25PYnNlcnZlci5oCShyZXZpc2lvbiAyNTMyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25PYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIE11
dGF0aW9uQ2FsbGJhY2s7CiBjbGFzcyBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOwogY2xh
c3MgTXV0YXRpb25SZWNvcmQ7CiBjbGFzcyBOb2RlOworY2xhc3MgV2luZG93RXZlbnRMb29wOwog
CiB1c2luZyBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyA9IHVuc2lnbmVkIGNoYXI7CiB1c2luZyBN
dXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucyA9IHVuc2lnbmVkIGNoYXI7CkBAIC0xMDYsMTIg
KzEwNywxMiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBlbnF1ZXVlU2xvdENoYW5nZUV2
ZW50KEhUTUxTbG90RWxlbWVudCYpOwogCisgICAgc3RhdGljIHZvaWQgbm90aWZ5TXV0YXRpb25P
YnNlcnZlcnMoV2luZG93RXZlbnRMb29wJik7CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTXV0
YXRpb25PYnNlcnZlcihSZWY8TXV0YXRpb25DYWxsYmFjaz4mJik7CiAgICAgdm9pZCBkZWxpdmVy
KCk7CiAKLSAgICBzdGF0aWMgdm9pZCBxdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3Jv
dGFzayhEb2N1bWVudCYpOwotICAgIHN0YXRpYyB2b2lkIG5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJz
KCk7CiAgICAgc3RhdGljIGJvb2wgdmFsaWRhdGVPcHRpb25zKE11dGF0aW9uT2JzZXJ2ZXJPcHRp
b25zKTsKIAogICAgIFJlZjxNdXRhdGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5jcHAJKHJldmlzaW9uIDI1MzIwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw4ICsyNywxMSBAQAogI2luY2x1ZGUgIldpbmRvd0V2ZW50TG9vcC5oIgogCiAjaW5jbHVkZSAi
Q29tbW9uVk0uaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiTWljcm90YXNrcy5oIgorI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC01Myw2ICs1Niw3IEBAIFJlZjxXaW5kb3dFdmVudExvb3A+IFdp
bmRvd0V2ZW50TG9vcDo6ZW4KIGlubGluZSBXaW5kb3dFdmVudExvb3A6OldpbmRvd0V2ZW50TG9v
cChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQogICAgIDogbV9kb21haW4oZG9tYWlu
KQogICAgICwgbV90aW1lcigqdGhpcywgJldpbmRvd0V2ZW50TG9vcDo6cnVuKQorICAgICwgbV9w
ZXJwZXR1YWxUYXNrR3JvdXBGb3JTaW1pbGFyT3JpZ2luV2luZG93QWdlbnRzKCp0aGlzKQogewog
fQogCkBAIC03NCw5ICs3OCw0NCBAQCBib29sIFdpbmRvd0V2ZW50TG9vcDo6aXNDb250ZXh0VGhy
ZWFkKCkgCiAKIE1pY3JvdGFza1F1ZXVlJiBXaW5kb3dFdmVudExvb3A6Om1pY3JvdGFza1F1ZXVl
KCkKIHsKLSAgICAvLyBNaWNyb3Rhc2tRdWV1ZSBtdXN0IGJlIG9uZSBwZXIgZXZlbnQgbG9vcC4K
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWljcm90YXNrUXVldWU+IHF1ZXVlKGNvbW1vblZN
KCkpOwotICAgIHJldHVybiBxdWV1ZTsKKyAgICBpZiAoIW1fbWljcm90YXNrUXVldWUpCisgICAg
ICAgIG1fbWljcm90YXNrUXVldWUgPSBtYWtlVW5pcXVlPE1pY3JvdGFza1F1ZXVlPihjb21tb25W
TSgpKTsKKyAgICByZXR1cm4gKm1fbWljcm90YXNrUXVldWU7Cit9CisKK3ZvaWQgV2luZG93RXZl
bnRMb29wOjpxdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzaygpCit7CisgICAg
aWYgKG1fbXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrUXVldWVkRmxhZykKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fbXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrUXVldWVk
RmxhZyA9IHRydWU7CisgICAgbV9wZXJwZXR1YWxUYXNrR3JvdXBGb3JTaW1pbGFyT3JpZ2luV2lu
ZG93QWdlbnRzLnF1ZXVlTWljcm90YXNrKFt0aGlzXSB7CisgICAgICAgIC8vIFdlIGNhbid0IG1h
a2UgYSBSZWYgdG8gV2luZG93RXZlbnRMb29wIGluIHRoZSBsYW1iZGEgY2FwdHVyZSBhcyB0aGF0
IHdvdWxkIHJlc3VsdCBpbiBhIHJlZmVyZW5jZSBjeWNsZSAmIGxlYWsuCisgICAgICAgIGF1dG8g
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOworICAgICAgICBtX211dGF0aW9uT2JzZXJ2
ZXJDb21wb3VuZE1pY3JvdGFza1F1ZXVlZEZsYWcgPSBmYWxzZTsKKworICAgICAgICAvLyBGSVhN
RTogVGhpcyBjaGVjayBkb2Vzbid0IGV4aXN0IGluIHRoZSBzcGVjLgorICAgICAgICBpZiAobV9k
ZWxpdmVyaW5nTXV0YXRpb25SZWNvcmRzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBt
X2RlbGl2ZXJpbmdNdXRhdGlvblJlY29yZHMgPSB0cnVlOworICAgICAgICBNdXRhdGlvbk9ic2Vy
dmVyOjpub3RpZnlNdXRhdGlvbk9ic2VydmVycygqdGhpcyk7CisgICAgICAgIG1fZGVsaXZlcmlu
Z011dGF0aW9uUmVjb3JkcyA9IGZhbHNlOworICAgIH0pOworfQorCitFbGVtZW50UXVldWUmIFdp
bmRvd0V2ZW50TG9vcDo6YmFja3VwRWxlbWVudFF1ZXVlKCkKK3sKKyAgICBpZiAoIW1fcHJvY2Vz
c2luZ0JhY2t1cEVsZW1lbnRRdWV1ZSkgeworICAgICAgICBtX3Byb2Nlc3NpbmdCYWNrdXBFbGVt
ZW50UXVldWUgPSB0cnVlOworICAgICAgICBtX3BlcnBldHVhbFRhc2tHcm91cEZvclNpbWlsYXJP
cmlnaW5XaW5kb3dBZ2VudHMucXVldWVNaWNyb3Rhc2soW3RoaXNdIHsKKyAgICAgICAgICAgIC8v
IFdlIGNhbid0IG1ha2UgYSBSZWYgdG8gV2luZG93RXZlbnRMb29wIGluIHRoZSBsYW1iZGEgY2Fw
dHVyZSBhcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIHJlZmVyZW5jZSBjeWNsZSAmIGxlYWsuCisg
ICAgICAgICAgICBtX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUgPSBmYWxzZTsKKyAgICAg
ICAgICAgIEFTU0VSVChtX2VsZW1lbnRRdWV1ZSk7CisgICAgICAgICAgICBDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZTo6cHJvY2Vzc0JhY2t1cFF1ZXVlKCptX2VsZW1lbnRRdWV1ZSk7CisgICAg
ICAgIH0pOworICAgIH0KKyAgICBpZiAoIW1fZWxlbWVudFF1ZXVlKQorICAgICAgICBtX2VsZW1l
bnRRdWV1ZSA9IG1ha2VVbmlxdWU8RWxlbWVudFF1ZXVlPigpOworICAgIHJldHVybiAqbV9lbGVt
ZW50UXVldWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9XaW5kb3dFdmVudExvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vV2luZG93RXZlbnRMb29wLmgJKHJldmlzaW9uIDI1MzIwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9XaW5kb3dFdmVudExvb3AuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSAiRG9jdW1lbnRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiRXZlbnRMb29wLmgi
CisjaW5jbHVkZSAiR0NSZWFjaGFibGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFp
bi5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTM0
LDYgKzM1LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CitjbGFz
cyBFbGVtZW50UXVldWU7CitjbGFzcyBIVE1MU2xvdEVsZW1lbnQ7CitjbGFzcyBNdXRhdGlvbk9i
c2VydmVyOwogCiAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJh
cHBhcGlzLmh0bWwjd2luZG93LWV2ZW50LWxvb3AKIGNsYXNzIFdpbmRvd0V2ZW50TG9vcCBmaW5h
bCA6IHB1YmxpYyBFdmVudExvb3AgewpAQCAtNDIsNiArNDYsMTMgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB+V2luZG93RXZlbnRMb29wKCk7CiAKKyAgICB2b2lkIHF1ZXVlTXV0YXRpb25PYnNl
cnZlckNvbXBvdW5kTWljcm90YXNrKCk7CisgICAgVmVjdG9yPEdDUmVhY2hhYmxlUmVmPEhUTUxT
bG90RWxlbWVudD4+JiBzaWduYWxTbG90TGlzdCgpIHsgcmV0dXJuIG1fc2lnbmFsU2xvdExpc3Q7
IH0KKyAgICBIYXNoU2V0PFJlZlB0cjxNdXRhdGlvbk9ic2VydmVyPj4mIGFjdGl2ZU11dGF0aW9u
T2JzZXJ2ZXJzKCkgeyByZXR1cm4gbV9hY3RpdmVPYnNlcnZlcnM7IH0KKyAgICBIYXNoU2V0PFJl
ZlB0cjxNdXRhdGlvbk9ic2VydmVyPj4mIHN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkgeyBy
ZXR1cm4gbV9zdXNwZW5kZWRPYnNlcnZlcnM7IH0KKworICAgIEVsZW1lbnRRdWV1ZSYgYmFja3Vw
RWxlbWVudFF1ZXVlKCk7CisKIHByaXZhdGU6CiAgICAgV2luZG93RXZlbnRMb29wKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJik7CiAKQEAgLTUxLDYgKzYyLDIxIEBAIHByaXZhdGU6CiAKICAgICBS
ZWdpc3RyYWJsZURvbWFpbiBtX2RvbWFpbjsKICAgICBUaW1lciBtX3RpbWVyOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxNaWNyb3Rhc2tRdWV1ZT4gbV9taWNyb3Rhc2tRdWV1ZTsKKworICAgIC8vIEVh
Y2ggdGFzayBzY2hlZHVsZWQgaW4gZXZlbnQgbG9vcCBpcyBhc3NvY2lhdGVkIHdpdGggYSBkb2N1
bWVudCBzbyB0aGF0IGl0IGNhbiBiZSBzdXNwZW5lZCBvciBzdG9wcGVkCisgICAgLy8gd2hlbiB0
aGUgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyBzdXNwZW5lZCBvciBzdG9wcGVkLiBUaGlzIHRhc2sg
Z3JvdXAgaXMgdXNlZCB0byBzY2hlZHVsZSBhIHRhc2sKKyAgICAvLyB3aGljaCBpcyBub3Qgc2No
ZWR1bGVkIHRvIGEgc3BlY2lmaWMgZG9jdW1lbnQsIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIHdo
ZW4gaXQncyBhYnNvbHV0ZWx5IHJlcXVpcmVkLgorICAgIEV2ZW50TG9vcFRhc2tHcm91cCBtX3Bl
cnBldHVhbFRhc2tHcm91cEZvclNpbWlsYXJPcmlnaW5XaW5kb3dBZ2VudHM7CisKKyAgICBib29s
IG1fbXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrUXVldWVkRmxhZyB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2RlbGl2ZXJpbmdNdXRhdGlvblJlY29yZHMgeyBmYWxzZSB9OyAvLyBGSVhN
RTogVGhpcyBmbGFnIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHNwZWMuCisgICAgVmVjdG9yPEdDUmVh
Y2hhYmxlUmVmPEhUTUxTbG90RWxlbWVudD4+IG1fc2lnbmFsU2xvdExpc3Q7IC8vIGh0dHBzOi8v
ZG9tLnNwZWMud2hhdHdnLm9yZy8jc2lnbmFsLXNsb3QtbGlzdAorICAgIEhhc2hTZXQ8UmVmUHRy
PE11dGF0aW9uT2JzZXJ2ZXI+PiBtX2FjdGl2ZU9ic2VydmVyczsKKyAgICBIYXNoU2V0PFJlZlB0
cjxNdXRhdGlvbk9ic2VydmVyPj4gbV9zdXNwZW5kZWRPYnNlcnZlcnM7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8RWxlbWVudFF1ZXVlPiBtX2VsZW1lbnRRdWV1ZTsKKyAgICBib29sIG1fcHJvY2Vz
c2luZ0JhY2t1cEVsZW1lbnRRdWV1ZSB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAyNTMyMDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3OSw3ICsxNzksNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFnZT4gY3JlYXRlUGFnZUZvclNhbml0
CiAgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IHBhZ2VDb25maWd1cmF0aW9uV2l0aEVtcHR5
Q2xpZW50cyhQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKICAgICAKICAgICBh
dXRvIHBhZ2UgPSBtYWtlVW5pcXVlPFBhZ2U+KFdURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24pKTsK
LSAgICBwYWdlLT5zZXRJc0ZvclNhbml0aXppbmdXZWJDb250ZW50KCk7CiAgICAgcGFnZS0+c2V0
dGluZ3MoKS5zZXRNZWRpYUVuYWJsZWQoZmFsc2UpOwogICAgIHBhZ2UtPnNldHRpbmdzKCkuc2V0
U2NyaXB0RW5hYmxlZChmYWxzZSk7CiAgICAgcGFnZS0+c2V0dGluZ3MoKS5zZXRQbHVnaW5zRW5h
YmxlZChmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gMjUzMjAwKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1MSw5ICs2NTEsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldoZWVsRXZlbnRUZXN0TW9uaXRvcigpIHsgbV93aGVl
bEV2ZW50VGVzdE1vbml0b3IgPSBudWxscHRyOyB9CiAgICAgYm9vbCBpc01vbml0b3JpbmdXaGVl
bEV2ZW50cygpIGNvbnN0IHsgcmV0dXJuICEhbV93aGVlbEV2ZW50VGVzdE1vbml0b3I7IH0KIAot
ICAgIHZvaWQgc2V0SXNGb3JTYW5pdGl6aW5nV2ViQ29udGVudCgpIHsgbV9pc0ZvclNhbml0aXpp
bmdXZWJDb250ZW50ID0gdHJ1ZTsgfQotICAgIGJvb2wgaXNGb3JTYW5pdGl6aW5nV2ViQ29udGVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb3JTYW5pdGl6aW5nV2ViQ29udGVudDsgfQotCiAjaWYg
RU5BQkxFKFZJREVPKQogICAgIGJvb2wgYWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNr
KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2s7IH0K
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5
YmFjayhib29sKTsKQEAgLTk5NCw4ICs5OTEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tZWRp
YVBsYXliYWNrSXNTdXNwZW5kZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9tZWRpYUJ1ZmZlcmlu
Z0lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faW5VcGRhdGVSZW5kZXJpbmcgeyBm
YWxzZSB9OwotCi0gICAgYm9vbCBtX2lzRm9yU2FuaXRpemluZ1dlYkNvbnRlbnQgeyBmYWxzZSB9
OwogfTsKIAogaW5saW5lIFBhZ2VHcm91cCYgUGFnZTo6Z3JvdXAoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385110</attachid>
            <date>2019-12-07 18:51:43 -0800</date>
            <delta_ts>2019-12-07 19:07:17 -0800</delta_ts>
            <desc>updated for trunk</desc>
            <filename>bug-204492-20191207185141.patch</filename>
            <type>text/plain</type>
            <size>26341</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MzI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE5LTEyLTA4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFRoZXJlIHNob3VsZCBiZSBvbmUg
TWljcm90YXNrUXVldWUgcGVyIEV2ZW50TG9vcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NDkyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NzQy
MDY0NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIG1ha2VzIG1pY3JvdGFzayBxdWV1ZSBhbmQgdGhlIG1pY3JvdGFza3MgZm9yIG11
dGF0aW9uIG9ic2VydmVycyBhbmQgY3VzdG9tIGVsZW1lbnRzCisgICAgICAgIHNwZWNpZmljIHRv
IGVhY2ggZXZlbnQgbG9vcCBzbyB0aGF0IG9ubHkgc2ltaWxhciBvcmlnaW4gd2luZG93cyBzaGFy
ZSB0aGUgc2FtZSBtaWNyb3Rhc2sgcXVldWUKKyAgICAgICAgYW5kIG11dGF0aW9uIG9ic2VydmVy
J3MgY29tcG91bmQgbWljcm90YXNrIG9yIGN1c3RvbSBlbGVtZW50J3MgYmFja3VwIGVsZW1lbnQg
cXVldWUuCisKKyAgICAgICAgQXMgYSByZXN1bHQsIHdlIGNhbiByZW1vdmUgdGhlIHdvcmthcm91
bmQgd2UgYWRkZWQgaW4gcjI0NzIyMi4KKworICAgICAgICBCZWNhdXNlIG1pY3JvdGFza3MgZm9y
IG11dGF0aW9uIG9ic2VydmVycyBhbmQgY3VzdG9tIGVsZW1lbnRzIGFyZSBzaGFyZWQgYWNyb3Nz
IHNpbWlsYXIgb3JpZ2luCisgICAgICAgIHdpbmRvdyBhZ2VudHMsIHdlIGNhbid0IHVzZSBhbnkg
b25lIGRvY3VtZW50J3MgdGFzayBncm91cCB0byBzY2hlZHVsZSB0aGVzZS4gSW5zdGVhZCwgd2Ug
Y3JlYXRlCisgICAgICAgIGEgbmV3ICJwZXJwZXR1YWwiIHRhc2sgZ3JvdXAgaW4gV2luZG93RXZl
bnRMb29wIHdoaWNoIGlzIG5ldmVyIHN1c3BlbmRlZCBvciBzdG9wcGVkLiBJdCdzIHRoZQorICAg
ICAgICByZXNwb25zaWJpbGl0eSBvZiBtdXRhdGlvbiBvYnNlcnZlciBhbmQgY3VzdG9tIGVsZW1l
bnRzJyBjb2RlIHRvIGRlYWwgd2l0aCBzdXNwZW5lZCBvciBzdG9wcGVkCisgICAgICAgIGRvY3Vt
ZW50cyBhcyBpdCBoYXMgYmVlbiB0aGUgY2FzZS4KKworICAgICAgICBTZWUgYWxzbzogaHR0cHM6
Ly9kb20uc3BlYy53aGF0d2cub3JnLyNxdWV1ZS1hLW11dGF0aW9uLW9ic2VydmVyLWNvbXBvdW5k
LW1pY3JvdGFzaworICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9y
Zy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjYmFja3VwLWVsZW1lbnQtcXVldWUKKwor
ICAgICAgICBUZXN0OiBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtZG9lcy1ub3QtZmlyZS1wcm9t
aXNlcy13aGlsZS1zYW5pdGl6aW5nLXdlYi1jb250ZW50Lmh0bWwKKworICAgICAgICAqIGRvbS9D
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21F
bGVtZW50UXVldWU6OmFkZCk6IFJlbmFtZWQgZnJvbSBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1
ZTo6RWxlbWVudFF1ZXVlIHRvCisgICAgICAgIGFsbG93IGZvcndhcmQgZGVjbGFyYXRpb24gaW4g
RXZlbnRMb29wLmguCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UXVldWU6Omludm9r
ZUFsbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFF1ZXVlOjpwcm9j
ZXNzUXVldWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlOjplbnF1ZXVlRWxlbWVudE9uQXBwcm9wcmlhdGVFbGVtZW50UXVldWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OnByb2Nlc3NCYWNrdXBRdWV1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6ZW5zdXJl
QmFja3VwUXVldWUpOiBEZWxldGVkLiBNb3ZlZCB0byBXaW5kb3dFdmVudExvb3AuCisgICAgICAg
IChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6YmFja3VwRWxlbWVudFF1ZXVl
KTogRGl0dG8uCisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UXVldWUpOiBSZW5hbWVkIGZyb20gQ3VzdG9t
RWxlbWVudFJlYWN0aW9uUXVldWU6OkVsZW1lbnRRdWV1ZSB0byBhbGxvdworICAgICAgICBmb3J3
YXJkIGRlY2xhcmF0aW9uIGluIEV2ZW50TG9vcC5oLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5nKTogUmVtb3Zl
ZCB0aGUgd29ya2Fyb3VuZCBhZGRlZCBpbiByMjQ3MjIyLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmV2ZW50TG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2luZG93RXZl
bnRMb29wKTogQWRkZWQuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9t
L011dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWN0aXZlTXV0YXRpb25P
YnNlcnZlcnMpOiBEZWxldGVkLiBNb3ZlZCB0byBXaW5kb3dFdmVudExvb3AuCisgICAgICAgIChX
ZWJDb3JlOjpzdXNwZW5kZWRNdXRhdGlvbk9ic2VydmVycyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6c2lnbmFsU2xvdExpc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9u
T2JzZXJ2ZXI6OnF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjplbnF1ZXVlTXV0YXRpb25SZWNv
cmQpOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZVNsb3RDaGFu
Z2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpzZXRIYXNUcmFu
c2llbnRSZWdpc3RyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6
bm90aWZ5TXV0YXRpb25PYnNlcnZlcnMpOiBOb3cgdGFrZXMgV2luZG93RXZlbnRMb29wIHNpbmNl
IHZhcmlvdXMKKyAgICAgICAgbGlzdHMgYW5kIGhhc2ggbWFwcyBhcmUgc3BlY2lmaWMgdG8gZWFj
aCBXaW5kb3dFdmVudExvb3AuCisgICAgICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXIuaDoKKyAg
ICAgICAgKiBkb20vV2luZG93RXZlbnRMb29wLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpbmRv
d0V2ZW50TG9vcDo6V2luZG93RXZlbnRMb29wKTogQ3JlYXRlIG1fcGVycGV0dWFsVGFza0dyb3Vw
Rm9yU2ltaWxhck9yaWdpbldpbmRvd0FnZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0V2
ZW50TG9vcDo6bWljcm90YXNrUXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RXZlbnRM
b29wOjpxdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpXaW5kb3dFdmVudExvb3A6OmJhY2t1cEVsZW1lbnRRdWV1ZSk6CisgICAgICAgICog
ZG9tL1dpbmRvd0V2ZW50TG9vcC5oOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBhZ2VGb3JTYW5pdGl6aW5nV2ViQ29udGVudCk6IFJlbW92
ZWQgdGhlIHdvcmthcm91bmQgYWRkZWQgaW4gcjI0NzIyMi4KKyAgICAgICAgKiBwYWdlL1BhZ2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldElzRm9yU2FuaXRpemluZ1dlYkNvbnRlbnQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmlzRm9yU2FuaXRpemluZ1dlYkNvbnRl
bnQgY29uc3QpOiBEaXR0by4KKwogMjAxOS0xMi0wNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBVbmlxdWUgb3JpZ2luJ3Mgd2luZG93IG11c3QgZ2V0IGl0cyBv
d24gZXZlbnQgbG9vcApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWUuY3BwCShyZXZpc2lvbiAyNTMyNjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNDdXN0b21F
bGVtZW50SW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAi
V2luZG93RXZlbnRMb29wLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ2F0Y2hTY29wZS5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KQEAgLTIzOCwxNCArMjM5LDE0IEBAIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0
aW9uUXVldWU6Omludm9rZUEKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlOjpFbGVtZW50UXVldWU6OmFkZChFbGVtZW50JiBlbGVtZW50KQoraW5saW5l
IHZvaWQgQ3VzdG9tRWxlbWVudFF1ZXVlOjphZGQoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBB
U1NFUlQoIW1faW52b2tpbmcpOwogICAgIC8vIEZJWE1FOiBBdm9pZCBpbnNlcnRpbmcgdGhlIHNh
bWUgZWxlbWVudCBtdWx0aXBsZSB0aW1lcy4KICAgICBtX2VsZW1lbnRzLmFwcGVuZChlbGVtZW50
KTsKIH0KIAotaW5saW5lIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OkVsZW1lbnRR
dWV1ZTo6aW52b2tlQWxsKCkKK2lubGluZSB2b2lkIEN1c3RvbUVsZW1lbnRRdWV1ZTo6aW52b2tl
QWxsKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9pbnZva2luZyk7CiAgICAgU2V0Rm9yU2Nv
cGU8Ym9vbD4gaW52b2tpbmcobV9pbnZva2luZywgdHJ1ZSk7CkBAIC0yNjIsNyArMjYzLDcgQEAg
aW5saW5lIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OgogICAgIG1fZWxlbWVudHMu
Y2xlYXIoKTsKIH0KIAotaW5saW5lIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OkVs
ZW1lbnRRdWV1ZTo6cHJvY2Vzc1F1ZXVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIHN0YXRlKQoraW5s
aW5lIHZvaWQgQ3VzdG9tRWxlbWVudFF1ZXVlOjpwcm9jZXNzUXVldWUoSlNDOjpKU0dsb2JhbE9i
amVjdCogc3RhdGUpCiB7CiAgICAgaWYgKCFzdGF0ZSkgewogICAgICAgICBpbnZva2VBbGwoKTsK
QEAgLTI5MywxNCArMjk0LDEzIEBAIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVu
cXVldWUKIHsKICAgICBBU1NFUlQoZWxlbWVudC5yZWFjdGlvblF1ZXVlKCkpOwogICAgIGlmICgh
Q3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OnNfY3VycmVudFByb2Nlc3NpbmdTdGFjaykgewot
ICAgICAgICBhdXRvJiBxdWV1ZSA9IGVuc3VyZUJhY2t1cFF1ZXVlKGVsZW1lbnQuZG9jdW1lbnQo
KSk7Ci0gICAgICAgIHF1ZXVlLmFkZChlbGVtZW50KTsKKyAgICAgICAgZWxlbWVudC5kb2N1bWVu
dCgpLndpbmRvd0V2ZW50TG9vcCgpLmJhY2t1cEVsZW1lbnRRdWV1ZSgpLmFkZChlbGVtZW50KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8qJiBxdWV1ZSA9IEN1c3RvbUVsZW1l
bnRSZWFjdGlvblN0YWNrOjpzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2stPm1fcXVldWU7CiAgICAg
aWYgKCFxdWV1ZSkgLy8gV2UgdXNlIGEgcmF3IHBvaW50ZXIgdG8gYXZvaWQgZ2VuZWFyaW5nIGNv
ZGUgdG8gZGVsZXRlIGl0IGluIH5DdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjay4KLSAgICAgICAg
cXVldWUgPSBuZXcgRWxlbWVudFF1ZXVlOworICAgICAgICBxdWV1ZSA9IG5ldyBDdXN0b21FbGVt
ZW50UXVldWU7CiAgICAgcXVldWUtPmFkZChlbGVtZW50KTsKIH0KIApAQCAtMzE4LDMwICszMTgs
OSBAQCB2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjpwcm9jZXNzCiAgICAgbV9xdWV1
ZSA9IG51bGxwdHI7CiB9CiAKLXN0YXRpYyBib29sIHNfcHJvY2Vzc2luZ0JhY2t1cEVsZW1lbnRR
dWV1ZSA9IGZhbHNlOwotCi0vLyBGSVhNRTogQmFja3VwUXVldWUgbXVzdCBiZSBwZXIgZXZlbnQg
bG9vcC4KLUN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpFbGVtZW50UXVldWUmIEN1c3RvbUVs
ZW1lbnRSZWFjdGlvblF1ZXVlOjplbnN1cmVCYWNrdXBRdWV1ZShEb2N1bWVudCYgZG9jdW1lbnQp
Ci17Ci0gICAgaWYgKCFzX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUpIHsKLSAgICAgICAg
c19wcm9jZXNzaW5nQmFja3VwRWxlbWVudFF1ZXVlID0gdHJ1ZTsKLSAgICAgICAgZG9jdW1lbnQu
ZXZlbnRMb29wKCkucXVldWVNaWNyb3Rhc2soW10gewotICAgICAgICAgICAgQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWU6OnByb2Nlc3NCYWNrdXBRdWV1ZSgpOwotICAgICAgICB9KTsKLSAgICB9
Ci0gICAgcmV0dXJuIGJhY2t1cEVsZW1lbnRRdWV1ZSgpOwotfQotCi12b2lkIEN1c3RvbUVsZW1l
bnRSZWFjdGlvblF1ZXVlOjpwcm9jZXNzQmFja3VwUXVldWUoKQotewotICAgIGJhY2t1cEVsZW1l
bnRRdWV1ZSgpLnByb2Nlc3NRdWV1ZShudWxscHRyKTsKLSAgICBzX3Byb2Nlc3NpbmdCYWNrdXBF
bGVtZW50UXVldWUgPSBmYWxzZTsKLX0KLQotQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OkVs
ZW1lbnRRdWV1ZSYgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmJhY2t1cEVsZW1lbnRRdWV1
ZSgpCit2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpwcm9jZXNzQmFja3VwUXVldWUo
Q3VzdG9tRWxlbWVudFF1ZXVlJiBiYWNrdXBFbGVtZW50UXVldWUpCiB7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEVsZW1lbnRRdWV1ZT4gcXVldWU7Ci0gICAgcmV0dXJuIHF1ZXVlLmdldCgp
OworICAgIGJhY2t1cEVsZW1lbnRRdWV1ZS5wcm9jZXNzUXVldWUobnVsbHB0cik7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1
ZS5oCShyZXZpc2lvbiAyNTMyNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMjMgQEAgY2xhc3Mg
RWxlbWVudDsKIGNsYXNzIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTsKIGNsYXNzIFF1YWxpZmll
ZE5hbWU7CiAKKy8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3Rv
bS1lbGVtZW50cy5odG1sI2VsZW1lbnQtcXVldWUKK2NsYXNzIEN1c3RvbUVsZW1lbnRRdWV1ZSB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q3VzdG9tRWxlbWVudFF1ZXVlKTsKK3B1YmxpYzoKKyAgICBDdXN0b21FbGVtZW50UXVldWUoKSA9
IGRlZmF1bHQ7CisKKyAgICB2b2lkIGFkZChFbGVtZW50Jik7CisgICAgdm9pZCBwcm9jZXNzUXVl
dWUoSlNDOjpKU0dsb2JhbE9iamVjdCopOworCitwcml2YXRlOgorICAgIHZvaWQgaW52b2tlQWxs
KCk7CisKKyAgICBWZWN0b3I8R0NSZWFjaGFibGVSZWY8RWxlbWVudD4+IG1fZWxlbWVudHM7Cisg
ICAgYm9vbCBtX2ludm9raW5nIHsgZmFsc2UgfTsKK307CisKIGNsYXNzIEN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSk7CkBAIC02NCwyNCArODEs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgaW52b2tlQWxsKEVsZW1lbnQmKTsKICAgICB2b2lkIGNs
ZWFyKCk7CiAKLSAgICBzdGF0aWMgdm9pZCBwcm9jZXNzQmFja3VwUXVldWUoKTsKLQotICAgIGNs
YXNzIEVsZW1lbnRRdWV1ZSB7Ci0gICAgcHVibGljOgotICAgICAgICB2b2lkIGFkZChFbGVtZW50
Jik7Ci0gICAgICAgIHZvaWQgcHJvY2Vzc1F1ZXVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgaW52b2tlQWxsKCk7Ci0KLSAgICAgICAgVmVjdG9y
PEdDUmVhY2hhYmxlUmVmPEVsZW1lbnQ+PiBtX2VsZW1lbnRzOwotICAgICAgICBib29sIG1faW52
b2tpbmcgeyBmYWxzZSB9OwotICAgIH07CisgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0JhY2t1cFF1
ZXVlKEN1c3RvbUVsZW1lbnRRdWV1ZSYpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGVu
cXVldWVFbGVtZW50T25BcHByb3ByaWF0ZUVsZW1lbnRRdWV1ZShFbGVtZW50Jik7Ci0gICAgc3Rh
dGljIEVsZW1lbnRRdWV1ZSYgZW5zdXJlQmFja3VwUXVldWUoRG9jdW1lbnQmKTsKLSAgICBzdGF0
aWMgRWxlbWVudFF1ZXVlJiBiYWNrdXBFbGVtZW50UXVldWUoKTsKIAogICAgIFJlZjxKU0N1c3Rv
bUVsZW1lbnRJbnRlcmZhY2U+IG1faW50ZXJmYWNlOwogICAgIFZlY3RvcjxDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZUl0ZW0+IG1faXRlbXM7CkBAIC0xNTgsNyArMTYxLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByb2Nlc3NRdWV1ZShKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7CiAKLSAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6RWxlbWVudFF1
ZXVlKiBtX3F1ZXVlIHsgbnVsbHB0ciB9OyAvLyBVc2UgcmF3IHBvaW50ZXIgdG8gYXZvaWQgZ2Vu
ZXJhdGluZyBkZWxldGUgaW4gdGhlIGRlc3RydWN0b3IuCisgICAgQ3VzdG9tRWxlbWVudFF1ZXVl
KiBtX3F1ZXVlIHsgbnVsbHB0ciB9OyAvLyBVc2UgcmF3IHBvaW50ZXIgdG8gYXZvaWQgZ2VuZXJh
dGluZyBkZWxldGUgaW4gdGhlIGRlc3RydWN0b3IuCiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9u
U3RhY2sqIG1fcHJldmlvdXNQcm9jZXNzaW5nU3RhY2s7CiAgICAgSlNDOjpKU0dsb2JhbE9iamVj
dCogbV9zdGF0ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNTMy
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01ODAzLDExICs1ODAzLDggQEAgdm9pZCBEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5nKCkKICAg
ICBpZiAoIW1fZG9jdW1lbnRUaW1pbmcuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQpCiAgICAg
ICAgIG1fZG9jdW1lbnRUaW1pbmcuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgPSBNb25vdG9u
aWNUaW1lOjpub3coKTsKIAotICAgIGlmICghcGFnZSgpIHx8ICFwYWdlKCktPmlzRm9yU2FuaXRp
emluZ1dlYkNvbnRlbnQoKSkgewotICAgICAgICAvLyBGSVhNRTogU2NoZWR1bGUgYSB0YXNrIHRv
IGZpcmUgRE9NQ29udGVudExvYWRlZCBldmVudCBpbnN0ZWFkLiBTZWUgd2Via2l0Lm9yZy9iLzgy
OTMxCi0gICAgICAgIGV2ZW50TG9vcCgpLnBlcmZvcm1NaWNyb3Rhc2tDaGVja3BvaW50KCk7Ci0g
ICAgfQotCisgICAgLy8gRklYTUU6IFNjaGVkdWxlIGEgdGFzayB0byBmaXJlIERPTUNvbnRlbnRM
b2FkZWQgZXZlbnQgaW5zdGVhZC4gU2VlIHdlYmtpdC5vcmcvYi84MjkzMQorICAgIGV2ZW50TG9v
cCgpLnBlcmZvcm1NaWNyb3Rhc2tDaGVja3BvaW50KCk7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Db250ZW50TG9hZGVkRXZlbnQsIEV2ZW50OjpDYW5C
dWJibGU6OlllcywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKIAogICAgIGlmICghbV9kb2N1
bWVudFRpbWluZy5kb21Db250ZW50TG9hZGVkRXZlbnRFbmQpCkBAIC02MjYzLDkgKzYyNjAsNyBA
QCBFdmVudExvb3BUYXNrR3JvdXAmIERvY3VtZW50OjpldmVudExvb3AoCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIW1fZG9jdW1lbnRUYXNrR3JvdXAp
KSB7Ci0gICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dl
YmFwcGFwaXMuaHRtbCNvYnRhaW4tYWdlbnQtY2x1c3Rlci1rZXkKLSAgICAgICAgbV9ldmVudExv
b3AgPSBXaW5kb3dFdmVudExvb3A6OmV2ZW50TG9vcEZvclNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5
T3JpZ2luKCkpOwotICAgICAgICBtX2RvY3VtZW50VGFza0dyb3VwID0gbWFrZVVuaXF1ZTxFdmVu
dExvb3BUYXNrR3JvdXA+KCptX2V2ZW50TG9vcCk7CisgICAgICAgIG1fZG9jdW1lbnRUYXNrR3Jv
dXAgPSBtYWtlVW5pcXVlPEV2ZW50TG9vcFRhc2tHcm91cD4od2luZG93RXZlbnRMb29wKCkpOwog
ICAgICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkKICAgICAgICAgICAgIG1f
ZG9jdW1lbnRUYXNrR3JvdXAtPnN0b3BBbmREaXNjYXJkQWxsVGFza3MoKTsKICAgICAgICAgZWxz
ZSBpZiAoYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKQpAQCAtNjI3NCw2ICs2MjY5LDE0
IEBAIEV2ZW50TG9vcFRhc2tHcm91cCYgRG9jdW1lbnQ6OmV2ZW50TG9vcCgKICAgICByZXR1cm4g
Km1fZG9jdW1lbnRUYXNrR3JvdXA7CiB9CiAKK1dpbmRvd0V2ZW50TG9vcCYgRG9jdW1lbnQ6Ondp
bmRvd0V2ZW50TG9vcCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAo
VU5MSUtFTFkoIW1fZXZlbnRMb29wKSkKKyAgICAgICAgbV9ldmVudExvb3AgPSBXaW5kb3dFdmVu
dExvb3A6OmV2ZW50TG9vcEZvclNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKCkpOworICAg
IHJldHVybiAqbV9ldmVudExvb3A7Cit9CisKIHZvaWQgRG9jdW1lbnQ6OnN1c3BlbmRTY2hlZHVs
ZWRUYXNrcyhSZWFzb25Gb3JTdXNwZW5zaW9uIHJlYXNvbikKIHsKICAgICBpZiAobV9zY2hlZHVs
ZWRUYXNrc0FyZVN1c3BlbmRlZCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9u
IDI1MzI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDY3LDYgKzEwNjcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBw
b3N0VGFzayhUYXNrJiYpIGZpbmFsOyAvLyBFeGVjdXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3Mg
dGhyZWFkIGFzeW5jaHJvbm91c2x5LgogCiAgICAgRXZlbnRMb29wVGFza0dyb3VwJiBldmVudExv
b3AoKSBmaW5hbDsKKyAgICBXaW5kb3dFdmVudExvb3AmIHdpbmRvd0V2ZW50TG9vcCgpOwogCiAg
ICAgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKiBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xs
ZXIoKSB7IHJldHVybiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQogICAg
IHZvaWQgc3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAkocmV2aXNpb24gMjUzMjY1
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCwxMyArMzQsMTMgQEAKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgogI2luY2x1ZGUg
IkdDUmVhY2hhYmxlUmVmLmgiCiAjaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25DYWxsYmFj
ay5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCIKICNpbmNsdWRl
ICJNdXRhdGlvblJlY29yZC5oIgorI2luY2x1ZGUgIldpbmRvd0V2ZW50TG9vcC5oIgogI2luY2x1
ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC0xMzcsNDAgKzEzNyw2IEBAIHZvaWQgTXV0YXRpb25P
YnNlcnZlcjo6b2JzZXJ2YXRpb25FbmRlZCgKICAgICBtX3JlZ2lzdHJhdGlvbnMucmVtb3ZlKCZy
ZWdpc3RyYXRpb24pOwogfQogCi10eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPE11dGF0aW9uT2JzZXJ2
ZXI+PiBNdXRhdGlvbk9ic2VydmVyU2V0OwotCi1zdGF0aWMgTXV0YXRpb25PYnNlcnZlclNldCYg
YWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxN
dXRhdGlvbk9ic2VydmVyU2V0PiBhY3RpdmVPYnNlcnZlcnM7Ci0gICAgcmV0dXJuIGFjdGl2ZU9i
c2VydmVyczsKLX0KLQotc3RhdGljIE11dGF0aW9uT2JzZXJ2ZXJTZXQmIHN1c3BlbmRlZE11dGF0
aW9uT2JzZXJ2ZXJzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0YXRpb25PYnNl
cnZlclNldD4gc3VzcGVuZGVkT2JzZXJ2ZXJzOwotICAgIHJldHVybiBzdXNwZW5kZWRPYnNlcnZl
cnM7Ci19Ci0KLS8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jc2lnbmFsLXNsb3QtbGlz
dAotc3RhdGljIFZlY3RvcjxHQ1JlYWNoYWJsZVJlZjxIVE1MU2xvdEVsZW1lbnQ+PiYgc2lnbmFs
U2xvdExpc3QoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8R0NSZWFjaGFi
bGVSZWY8SFRNTFNsb3RFbGVtZW50Pj4+IGxpc3Q7Ci0gICAgcmV0dXJuIGxpc3Q7Ci19Ci0KLS8v
IFRoaXMgc3RhdGUgbXVzdCBiZSBwZXIgZXZlbnQgbG9vcC4KLXN0YXRpYyBib29sIG11dGF0aW9u
T2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFza1F1ZXVlZEZsYWcgPSBmYWxzZTsKLQotdm9pZCBNdXRh
dGlvbk9ic2VydmVyOjpxdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzayhEb2N1
bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgaWYgKG11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3Jv
dGFza1F1ZXVlZEZsYWcpCi0gICAgICAgIHJldHVybjsKLSAgICBtdXRhdGlvbk9ic2VydmVyQ29t
cG91bmRNaWNyb3Rhc2tRdWV1ZWRGbGFnID0gdHJ1ZTsKLSAgICBkb2N1bWVudC5ldmVudExvb3Ao
KS5xdWV1ZU1pY3JvdGFzayhbXSB7Ci0gICAgICAgIG5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJzKCk7
Ci0gICAgfSk7Ci19Ci0KIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZU11dGF0aW9uUmVj
b3JkKFJlZjxNdXRhdGlvblJlY29yZD4mJiBtdXRhdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwpAQCAtMTc5LDI2ICsxNDUsMjggQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpl
bnF1ZXVlTXV0YXRpb25SZQogCiAgICAgbV9wZW5kaW5nVGFyZ2V0cy5hZGQoKm11dGF0aW9uLT50
YXJnZXQoKSk7CiAgICAgbV9yZWNvcmRzLmFwcGVuZChXVEZNb3ZlKG11dGF0aW9uKSk7Ci0gICAg
YWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQodGhpcyk7CiAKLSAgICBxdWV1ZU11dGF0aW9u
T2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzayhkb2N1bWVudC5nZXQoKSk7CisgICAgYXV0byBldmVu
dExvb3AgPSBtYWtlUmVmKGRvY3VtZW50LT53aW5kb3dFdmVudExvb3AoKSk7CisgICAgZXZlbnRM
b29wLT5hY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFkZCh0aGlzKTsKKyAgICBldmVudExvb3At
PnF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrKCk7CiB9CiAKIHZvaWQgTXV0
YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZVNsb3RDaGFuZ2VFdmVudChIVE1MU2xvdEVsZW1lbnQmIHNs
b3QpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoc2lnbmFsU2xv
dExpc3QoKS5maW5kTWF0Y2hpbmcoWyZzbG90XShhdXRvJiBlbnRyeSkgeyByZXR1cm4gZW50cnku
cHRyKCkgPT0gJnNsb3Q7IH0pID09IG5vdEZvdW5kKTsKLSAgICBzaWduYWxTbG90TGlzdCgpLmFw
cGVuZChzbG90KTsKKyAgICBhdXRvIGV2ZW50TG9vcCA9IG1ha2VSZWYoc2xvdC5kb2N1bWVudCgp
LndpbmRvd0V2ZW50TG9vcCgpKTsKKyAgICBhdXRvJiBsaXN0ID0gZXZlbnRMb29wLT5zaWduYWxT
bG90TGlzdCgpOworICAgIEFTU0VSVChsaXN0LmZpbmRNYXRjaGluZyhbJnNsb3RdKGF1dG8mIGVu
dHJ5KSB7IHJldHVybiBlbnRyeS5wdHIoKSA9PSAmc2xvdDsgfSkgPT0gbm90Rm91bmQpOworICAg
IGxpc3QuYXBwZW5kKHNsb3QpOwogCi0gICAgcXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRN
aWNyb3Rhc2soc2xvdC5kb2N1bWVudCgpKTsKKyAgICBldmVudExvb3AtPnF1ZXVlTXV0YXRpb25P
YnNlcnZlckNvbXBvdW5kTWljcm90YXNrKCk7CiB9CiAKIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6
c2V0SGFzVHJhbnNpZW50UmVnaXN0cmF0aW9uKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRk
KHRoaXMpOwotCi0gICAgcXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2soZG9j
dW1lbnQpOworICAgIGF1dG8gZXZlbnRMb29wID0gbWFrZVJlZihkb2N1bWVudC53aW5kb3dFdmVu
dExvb3AoKSk7CisgICAgZXZlbnRMb29wLT5hY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFkZCh0
aGlzKTsKKyAgICBldmVudExvb3AtPnF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90
YXNrKCk7CiB9CiAKIEhhc2hTZXQ8Tm9kZSo+IE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmVkTm9k
ZXMoKSBjb25zdApAQCAtMjUxLDMyICsyMTksMjMgQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpk
ZWxpdmVyKCkKICAgICB9CiB9CiAKLXZvaWQgTXV0YXRpb25PYnNlcnZlcjo6bm90aWZ5TXV0YXRp
b25PYnNlcnZlcnMoKQorLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNub3RpZnktbXV0
YXRpb24tb2JzZXJ2ZXJzCit2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6Om5vdGlmeU11dGF0aW9uT2Jz
ZXJ2ZXJzKFdpbmRvd0V2ZW50TG9vcCYgZXZlbnRMb29wKQogewotICAgIC8vIGh0dHBzOi8vZG9t
LnNwZWMud2hhdHdnLm9yZy8jbm90aWZ5LW11dGF0aW9uLW9ic2VydmVycwotICAgIC8vIDEuIFVu
c2V0IG11dGF0aW9uIG9ic2VydmVyIGNvbXBvdW5kIG1pY3JvdGFzayBxdWV1ZWQgZmxhZy4KLSAg
ICBtdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2tRdWV1ZWRGbGFnID0gZmFsc2U7Ci0K
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBib29sIGRlbGl2ZXJ5SW5Q
cm9ncmVzcyA9IGZhbHNlOwotICAgIGlmIChkZWxpdmVyeUluUHJvZ3Jlc3MpCi0gICAgICAgIHJl
dHVybjsKLSAgICBkZWxpdmVyeUluUHJvZ3Jlc3MgPSB0cnVlOwotCi0gICAgaWYgKCFzdXNwZW5k
ZWRNdXRhdGlvbk9ic2VydmVycygpLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8mIG9i
c2VydmVyIDogY29weVRvVmVjdG9yKHN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkpKSB7Cisg
ICAgaWYgKCFldmVudExvb3Auc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IGNvcHlUb1ZlY3RvcihldmVudExvb3Au
c3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKSkpIHsKICAgICAgICAgICAgIGlmICghb2JzZXJ2
ZXItPmNhbkRlbGl2ZXIoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAg
ICAgc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5yZW1vdmUob2JzZXJ2ZXIpOwotICAgICAg
ICAgICAgYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQob2JzZXJ2ZXIpOworICAgICAgICAg
ICAgZXZlbnRMb29wLnN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkucmVtb3ZlKG9ic2VydmVy
KTsKKyAgICAgICAgICAgIGV2ZW50TG9vcC5hY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFkZChv
YnNlcnZlcik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB3aGlsZSAoIWFjdGl2ZU11dGF0aW9u
T2JzZXJ2ZXJzKCkuaXNFbXB0eSgpIHx8ICFzaWduYWxTbG90TGlzdCgpLmlzRW1wdHkoKSkgewor
ICAgIHdoaWxlICghZXZlbnRMb29wLmFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuaXNFbXB0eSgp
IHx8ICFldmVudExvb3Auc2lnbmFsU2xvdExpc3QoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8g
Mi4gTGV0IG5vdGlmeSBsaXN0IGJlIGEgY29weSBvZiB1bml0IG9mIHJlbGF0ZWQgc2ltaWxhci1v
cmlnaW4gYnJvd3NpbmcgY29udGV4dHMnIGxpc3Qgb2YgTXV0YXRpb25PYnNlcnZlciBvYmplY3Rz
LgotICAgICAgICBhdXRvIG5vdGlmeUxpc3QgPSBjb3B5VG9WZWN0b3IoYWN0aXZlTXV0YXRpb25P
YnNlcnZlcnMoKSk7Ci0gICAgICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuY2xlYXIoKTsK
KyAgICAgICAgYXV0byBub3RpZnlMaXN0ID0gY29weVRvVmVjdG9yKGV2ZW50TG9vcC5hY3RpdmVN
dXRhdGlvbk9ic2VydmVycygpKTsKKyAgICAgICAgZXZlbnRMb29wLmFjdGl2ZU11dGF0aW9uT2Jz
ZXJ2ZXJzKCkuY2xlYXIoKTsKICAgICAgICAgc3RkOjpzb3J0KG5vdGlmeUxpc3QuYmVnaW4oKSwg
bm90aWZ5TGlzdC5lbmQoKSwgW10oYXV0byYgbGhzLCBhdXRvJiByaHMpIHsKICAgICAgICAgICAg
IHJldHVybiBsaHMtPm1fcHJpb3JpdHkgPCByaHMtPm1fcHJpb3JpdHk7CiAgICAgICAgIH0pOwpA
QCAtMjg0LDggKzI0Myw4IEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6bm90aWZ5TXV0YXRpb25P
YnMKICAgICAgICAgLy8gMy4gTGV0IHNpZ25hbExpc3QgYmUgYSBjb3B5IG9mIHVuaXQgb2YgcmVs
YXRlZCBzaW1pbGFyLW9yaWdpbiBicm93c2luZyBjb250ZXh0cycgc2lnbmFsIHNsb3QgbGlzdC4K
ICAgICAgICAgLy8gNC4gRW1wdHkgdW5pdCBvZiByZWxhdGVkIHNpbWlsYXItb3JpZ2luIGJyb3dz
aW5nIGNvbnRleHRzJyBzaWduYWwgc2xvdCBsaXN0LgogICAgICAgICBWZWN0b3I8R0NSZWFjaGFi
bGVSZWY8SFRNTFNsb3RFbGVtZW50Pj4gc2xvdExpc3Q7Ci0gICAgICAgIGlmICghc2lnbmFsU2xv
dExpc3QoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHNsb3RMaXN0LnN3YXAoc2lnbmFsU2xv
dExpc3QoKSk7CisgICAgICAgIGlmICghZXZlbnRMb29wLnNpZ25hbFNsb3RMaXN0KCkuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBzbG90TGlzdC5zd2FwKGV2ZW50TG9vcC5zaWduYWxTbG90TGlz
dCgpKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgc2xvdCA6IHNsb3RMaXN0KQogICAgICAgICAg
ICAgICAgIHNsb3QtPmRpZFJlbW92ZUZyb21TaWduYWxTbG90TGlzdCgpOwogICAgICAgICB9CkBA
IC0yOTUsMTUgKzI1NCwxMyBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6Om5vdGlmeU11dGF0aW9u
T2JzCiAgICAgICAgICAgICBpZiAob2JzZXJ2ZXItPmNhbkRlbGl2ZXIoKSkKICAgICAgICAgICAg
ICAgICBvYnNlcnZlci0+ZGVsaXZlcigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKG9ic2VydmVyKTsKKyAgICAgICAg
ICAgICAgICBldmVudExvb3Auc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQob2JzZXJ2
ZXIpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gNi4gRm9yIGVhY2ggc2xvdCBzbG90IGluIHNp
Z25hbExpc3QsIGluIG9yZGVyLCBmaXJlIGFuIGV2ZW50IG5hbWVkIHNsb3RjaGFuZ2UsIHdpdGgg
aXRzIGJ1YmJsZXMgYXR0cmlidXRlIHNldCB0byB0cnVlLCBhdCBzbG90LgogICAgICAgICBmb3Ig
KGF1dG8mIHNsb3QgOiBzbG90TGlzdCkKICAgICAgICAgICAgIHNsb3QtPmRpc3BhdGNoU2xvdENo
YW5nZUV2ZW50KCk7CiAgICAgfQotCi0gICAgZGVsaXZlcnlJblByb2dyZXNzID0gZmFsc2U7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvbk9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
T2JzZXJ2ZXIuaAkocmV2aXNpb24gMjUzMjY1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0
aW9uT2JzZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBNdXRh
dGlvbkNhbGxiYWNrOwogY2xhc3MgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjsKIGNsYXNz
IE11dGF0aW9uUmVjb3JkOwogY2xhc3MgTm9kZTsKK2NsYXNzIFdpbmRvd0V2ZW50TG9vcDsKIAog
dXNpbmcgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgPSB1bnNpZ25lZCBjaGFyOwogdXNpbmcgTXV0
YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnMgPSB1bnNpZ25lZCBjaGFyOwpAQCAtMTA2LDEyICsx
MDcsMTIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZW5xdWV1ZVNsb3RDaGFuZ2VFdmVu
dChIVE1MU2xvdEVsZW1lbnQmKTsKIAorICAgIHN0YXRpYyB2b2lkIG5vdGlmeU11dGF0aW9uT2Jz
ZXJ2ZXJzKFdpbmRvd0V2ZW50TG9vcCYpOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE11dGF0
aW9uT2JzZXJ2ZXIoUmVmPE11dGF0aW9uQ2FsbGJhY2s+JiYpOwogICAgIHZvaWQgZGVsaXZlcigp
OwogCi0gICAgc3RhdGljIHZvaWQgcXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rh
c2soRG9jdW1lbnQmKTsKLSAgICBzdGF0aWMgdm9pZCBub3RpZnlNdXRhdGlvbk9ic2VydmVycygp
OwogICAgIHN0YXRpYyBib29sIHZhbGlkYXRlT3B0aW9ucyhNdXRhdGlvbk9ic2VydmVyT3B0aW9u
cyk7CiAKICAgICBSZWY8TXV0YXRpb25DYWxsYmFjaz4gbV9jYWxsYmFjazsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuY3BwCShyZXZpc2lvbiAyNTMyNjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
OCArMjcsMTEgQEAKICNpbmNsdWRlICJXaW5kb3dFdmVudExvb3AuaCIKIAogI2luY2x1ZGUgIkNv
bW1vblZNLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgogI2luY2x1ZGUg
Ik1pY3JvdGFza3MuaCIKKyNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNzksNiArODIsNyBAQCBpbmxpbmUgUmVmPFdpbmRvd0V2ZW50TG9v
cD4gV2luZG93RXZlbnRMCiBpbmxpbmUgV2luZG93RXZlbnRMb29wOjpXaW5kb3dFdmVudExvb3Ao
Y29uc3QgU3RyaW5nJiBhZ2VudENsdXN0ZXJLZXkpCiAgICAgOiBtX2FnZW50Q2x1c3RlcktleShh
Z2VudENsdXN0ZXJLZXkpCiAgICAgLCBtX3RpbWVyKCp0aGlzLCAmV2luZG93RXZlbnRMb29wOjpy
dW4pCisgICAgLCBtX3BlcnBldHVhbFRhc2tHcm91cEZvclNpbWlsYXJPcmlnaW5XaW5kb3dBZ2Vu
dHMoKnRoaXMpCiB7CiB9CiAKQEAgLTEwMiw5ICsxMDYsNDQgQEAgYm9vbCBXaW5kb3dFdmVudExv
b3A6OmlzQ29udGV4dFRocmVhZCgpIAogCiBNaWNyb3Rhc2tRdWV1ZSYgV2luZG93RXZlbnRMb29w
OjptaWNyb3Rhc2tRdWV1ZSgpCiB7Ci0gICAgLy8gTWljcm90YXNrUXVldWUgbXVzdCBiZSBvbmUg
cGVyIGV2ZW50IGxvb3AuCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1pY3JvdGFza1F1ZXVl
PiBxdWV1ZShjb21tb25WTSgpKTsKLSAgICByZXR1cm4gcXVldWU7CisgICAgaWYgKCFtX21pY3Jv
dGFza1F1ZXVlKQorICAgICAgICBtX21pY3JvdGFza1F1ZXVlID0gbWFrZVVuaXF1ZTxNaWNyb3Rh
c2tRdWV1ZT4oY29tbW9uVk0oKSk7CisgICAgcmV0dXJuICptX21pY3JvdGFza1F1ZXVlOworfQor
Cit2b2lkIFdpbmRvd0V2ZW50TG9vcDo6cXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNy
b3Rhc2soKQoreworICAgIGlmIChtX211dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFza1F1
ZXVlZEZsYWcpCisgICAgICAgIHJldHVybjsKKyAgICBtX211dGF0aW9uT2JzZXJ2ZXJDb21wb3Vu
ZE1pY3JvdGFza1F1ZXVlZEZsYWcgPSB0cnVlOworICAgIG1fcGVycGV0dWFsVGFza0dyb3VwRm9y
U2ltaWxhck9yaWdpbldpbmRvd0FnZW50cy5xdWV1ZU1pY3JvdGFzayhbdGhpc10geworICAgICAg
ICAvLyBXZSBjYW4ndCBtYWtlIGEgUmVmIHRvIFdpbmRvd0V2ZW50TG9vcCBpbiB0aGUgbGFtYmRh
IGNhcHR1cmUgYXMgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSByZWZlcmVuY2UgY3ljbGUgJiBsZWFr
LgorICAgICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKKyAgICAgICAg
bV9tdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2tRdWV1ZWRGbGFnID0gZmFsc2U7CisK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgZG9lc24ndCBleGlzdCBpbiB0aGUgc3BlYy4K
KyAgICAgICAgaWYgKG1fZGVsaXZlcmluZ011dGF0aW9uUmVjb3JkcykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbV9kZWxpdmVyaW5nTXV0YXRpb25SZWNvcmRzID0gdHJ1ZTsKKyAgICAg
ICAgTXV0YXRpb25PYnNlcnZlcjo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnMoKnRoaXMpOworICAg
ICAgICBtX2RlbGl2ZXJpbmdNdXRhdGlvblJlY29yZHMgPSBmYWxzZTsKKyAgICB9KTsKK30KKwor
Q3VzdG9tRWxlbWVudFF1ZXVlJiBXaW5kb3dFdmVudExvb3A6OmJhY2t1cEVsZW1lbnRRdWV1ZSgp
Cit7CisgICAgaWYgKCFtX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUpIHsKKyAgICAgICAg
bV9wcm9jZXNzaW5nQmFja3VwRWxlbWVudFF1ZXVlID0gdHJ1ZTsKKyAgICAgICAgbV9wZXJwZXR1
YWxUYXNrR3JvdXBGb3JTaW1pbGFyT3JpZ2luV2luZG93QWdlbnRzLnF1ZXVlTWljcm90YXNrKFt0
aGlzXSB7CisgICAgICAgICAgICAvLyBXZSBjYW4ndCBtYWtlIGEgUmVmIHRvIFdpbmRvd0V2ZW50
TG9vcCBpbiB0aGUgbGFtYmRhIGNhcHR1cmUgYXMgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSByZWZl
cmVuY2UgY3ljbGUgJiBsZWFrLgorICAgICAgICAgICAgbV9wcm9jZXNzaW5nQmFja3VwRWxlbWVu
dFF1ZXVlID0gZmFsc2U7CisgICAgICAgICAgICBBU1NFUlQobV9jdXN0b21FbGVtZW50UXVldWUp
OworICAgICAgICAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OnByb2Nlc3NCYWNrdXBR
dWV1ZSgqbV9jdXN0b21FbGVtZW50UXVldWUpOworICAgICAgICB9KTsKKyAgICB9CisgICAgaWYg
KCFtX2N1c3RvbUVsZW1lbnRRdWV1ZSkKKyAgICAgICAgbV9jdXN0b21FbGVtZW50UXVldWUgPSBt
YWtlVW5pcXVlPEN1c3RvbUVsZW1lbnRRdWV1ZT4oKTsKKyAgICByZXR1cm4gKm1fY3VzdG9tRWxl
bWVudFF1ZXVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vV2luZG93RXZlbnRMb29wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1dpbmRvd0V2ZW50TG9vcC5oCShyZXZpc2lvbiAyNTMyNjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vV2luZG93RXZlbnRMb29wLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE1ICsyNSwxOCBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkRvY3VtZW50SWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgIkV2ZW50TG9vcC5oIgorI2luY2x1ZGUgIkdDUmVhY2hhYmxlUmVmLmgiCiAjaW5jbHVk
ZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEN1c3RvbUVsZW1l
bnRRdWV1ZTsKIGNsYXNzIERvY3VtZW50OworY2xhc3MgSFRNTFNsb3RFbGVtZW50OworY2xhc3Mg
TXV0YXRpb25PYnNlcnZlcjsKIAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0
aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3dpbmRvdy1ldmVudC1sb29wCiBjbGFzcyBXaW5kb3dFdmVu
dExvb3AgZmluYWwgOiBwdWJsaWMgRXZlbnRMb29wIHsKQEAgLTQyLDYgKzQ1LDEzIEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgfldpbmRvd0V2ZW50TG9vcCgpOwogCisgICAgdm9pZCBxdWV1ZU11
dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzaygpOworICAgIFZlY3RvcjxHQ1JlYWNoYWJs
ZVJlZjxIVE1MU2xvdEVsZW1lbnQ+PiYgc2lnbmFsU2xvdExpc3QoKSB7IHJldHVybiBtX3NpZ25h
bFNsb3RMaXN0OyB9CisgICAgSGFzaFNldDxSZWZQdHI8TXV0YXRpb25PYnNlcnZlcj4+JiBhY3Rp
dmVNdXRhdGlvbk9ic2VydmVycygpIHsgcmV0dXJuIG1fYWN0aXZlT2JzZXJ2ZXJzOyB9CisgICAg
SGFzaFNldDxSZWZQdHI8TXV0YXRpb25PYnNlcnZlcj4+JiBzdXNwZW5kZWRNdXRhdGlvbk9ic2Vy
dmVycygpIHsgcmV0dXJuIG1fc3VzcGVuZGVkT2JzZXJ2ZXJzOyB9CisKKyAgICBDdXN0b21FbGVt
ZW50UXVldWUmIGJhY2t1cEVsZW1lbnRRdWV1ZSgpOworCiBwcml2YXRlOgogICAgIHN0YXRpYyBS
ZWY8V2luZG93RXZlbnRMb29wPiBjcmVhdGUoY29uc3QgU3RyaW5nJik7CiAgICAgV2luZG93RXZl
bnRMb29wKGNvbnN0IFN0cmluZyYpOwpAQCAtNTIsNiArNjIsMjEgQEAgcHJpdmF0ZToKIAogICAg
IFN0cmluZyBtX2FnZW50Q2x1c3RlcktleTsKICAgICBUaW1lciBtX3RpbWVyOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxNaWNyb3Rhc2tRdWV1ZT4gbV9taWNyb3Rhc2tRdWV1ZTsKKworICAgIC8vIEVh
Y2ggdGFzayBzY2hlZHVsZWQgaW4gZXZlbnQgbG9vcCBpcyBhc3NvY2lhdGVkIHdpdGggYSBkb2N1
bWVudCBzbyB0aGF0IGl0IGNhbiBiZSBzdXNwZW5lZCBvciBzdG9wcGVkCisgICAgLy8gd2hlbiB0
aGUgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyBzdXNwZW5lZCBvciBzdG9wcGVkLiBUaGlzIHRhc2sg
Z3JvdXAgaXMgdXNlZCB0byBzY2hlZHVsZSBhIHRhc2sKKyAgICAvLyB3aGljaCBpcyBub3Qgc2No
ZWR1bGVkIHRvIGEgc3BlY2lmaWMgZG9jdW1lbnQsIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIHdo
ZW4gaXQncyBhYnNvbHV0ZWx5IHJlcXVpcmVkLgorICAgIEV2ZW50TG9vcFRhc2tHcm91cCBtX3Bl
cnBldHVhbFRhc2tHcm91cEZvclNpbWlsYXJPcmlnaW5XaW5kb3dBZ2VudHM7CisKKyAgICBib29s
IG1fbXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrUXVldWVkRmxhZyB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2RlbGl2ZXJpbmdNdXRhdGlvblJlY29yZHMgeyBmYWxzZSB9OyAvLyBGSVhN
RTogVGhpcyBmbGFnIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHNwZWMuCisgICAgVmVjdG9yPEdDUmVh
Y2hhYmxlUmVmPEhUTUxTbG90RWxlbWVudD4+IG1fc2lnbmFsU2xvdExpc3Q7IC8vIGh0dHBzOi8v
ZG9tLnNwZWMud2hhdHdnLm9yZy8jc2lnbmFsLXNsb3QtbGlzdAorICAgIEhhc2hTZXQ8UmVmUHRy
PE11dGF0aW9uT2JzZXJ2ZXI+PiBtX2FjdGl2ZU9ic2VydmVyczsKKyAgICBIYXNoU2V0PFJlZlB0
cjxNdXRhdGlvbk9ic2VydmVyPj4gbV9zdXNwZW5kZWRPYnNlcnZlcnM7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q3VzdG9tRWxlbWVudFF1ZXVlPiBtX2N1c3RvbUVsZW1lbnRRdWV1ZTsKKyAgICBi
b29sIG1fcHJvY2Vzc2luZ0JhY2t1cEVsZW1lbnRRdWV1ZSB7IGZhbHNlIH07CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZp
c2lvbiAyNTMyNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3OSw3ICsxNzksNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFnZT4gY3JlYXRl
UGFnZUZvclNhbml0CiAgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IHBhZ2VDb25maWd1cmF0
aW9uV2l0aEVtcHR5Q2xpZW50cyhQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsK
ICAgICAKICAgICBhdXRvIHBhZ2UgPSBtYWtlVW5pcXVlPFBhZ2U+KFdURk1vdmUocGFnZUNvbmZp
Z3VyYXRpb24pKTsKLSAgICBwYWdlLT5zZXRJc0ZvclNhbml0aXppbmdXZWJDb250ZW50KCk7CiAg
ICAgcGFnZS0+c2V0dGluZ3MoKS5zZXRNZWRpYUVuYWJsZWQoZmFsc2UpOwogICAgIHBhZ2UtPnNl
dHRpbmdzKCkuc2V0U2NyaXB0RW5hYmxlZChmYWxzZSk7CiAgICAgcGFnZS0+c2V0dGluZ3MoKS5z
ZXRQbHVnaW5zRW5hYmxlZChmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gMjUz
MjY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1
OSw5ICs2NTksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldoZWVsRXZlbnRUZXN0TW9uaXRv
cigpIHsgbV93aGVlbEV2ZW50VGVzdE1vbml0b3IgPSBudWxscHRyOyB9CiAgICAgYm9vbCBpc01v
bml0b3JpbmdXaGVlbEV2ZW50cygpIGNvbnN0IHsgcmV0dXJuICEhbV93aGVlbEV2ZW50VGVzdE1v
bml0b3I7IH0KIAotICAgIHZvaWQgc2V0SXNGb3JTYW5pdGl6aW5nV2ViQ29udGVudCgpIHsgbV9p
c0ZvclNhbml0aXppbmdXZWJDb250ZW50ID0gdHJ1ZTsgfQotICAgIGJvb2wgaXNGb3JTYW5pdGl6
aW5nV2ViQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb3JTYW5pdGl6aW5nV2ViQ29udGVu
dDsgfQotCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGJvb2wgYWxsb3dzTWVkaWFEb2N1bWVudElu
bGluZVBsYXliYWNrKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5l
UGxheWJhY2s7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFsbG93c01lZGlhRG9jdW1l
bnRJbmxpbmVQbGF5YmFjayhib29sKTsKQEAgLTEwMTEsOCArMTAwOCw2IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX21lZGlhUGxheWJhY2tJc1N1c3BlbmRlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X21lZGlhQnVmZmVyaW5nSXNTdXNwZW5kZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pblVwZGF0
ZVJlbmRlcmluZyB7IGZhbHNlIH07Ci0KLSAgICBib29sIG1faXNGb3JTYW5pdGl6aW5nV2ViQ29u
dGVudCB7IGZhbHNlIH07CiB9OwogCiBpbmxpbmUgUGFnZUdyb3VwJiBQYWdlOjpncm91cCgpCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNTMyNjUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0yMDE5LTEyLTA3ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorMjAxOS0xMi0wOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBVbmlxdWUgb3JpZ2luJ3Mgd2luZG93IG11c3QgZ2V0IGl0cyBvd24gZXZl
bnQgbG9vcAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA0OTc4Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385112</attachid>
            <date>2019-12-07 19:07:19 -0800</date>
            <delta_ts>2019-12-08 00:24:31 -0800</delta_ts>
            <desc>updated for trunk</desc>
            <filename>bug-204492-20191207190717.patch</filename>
            <type>text/plain</type>
            <size>26391</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MzI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE5LTEyLTA4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFRoZXJlIHNob3VsZCBiZSBvbmUg
TWljcm90YXNrUXVldWUgcGVyIEV2ZW50TG9vcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NDkyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NzQy
MDY0NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIG1ha2VzIG1pY3JvdGFzayBxdWV1ZSBhbmQgdGhlIG1pY3JvdGFza3MgZm9yIG11
dGF0aW9uIG9ic2VydmVycyBhbmQgY3VzdG9tIGVsZW1lbnRzCisgICAgICAgIHNwZWNpZmljIHRv
IGVhY2ggZXZlbnQgbG9vcCBzbyB0aGF0IG9ubHkgc2ltaWxhciBvcmlnaW4gd2luZG93cyBzaGFy
ZSB0aGUgc2FtZSBtaWNyb3Rhc2sgcXVldWUKKyAgICAgICAgYW5kIG11dGF0aW9uIG9ic2VydmVy
J3MgY29tcG91bmQgbWljcm90YXNrIG9yIGN1c3RvbSBlbGVtZW50J3MgYmFja3VwIGVsZW1lbnQg
cXVldWUuCisKKyAgICAgICAgQXMgYSByZXN1bHQsIHdlIGNhbiByZW1vdmUgdGhlIHdvcmthcm91
bmQgd2UgYWRkZWQgaW4gcjI0NzIyMi4KKworICAgICAgICBCZWNhdXNlIG1pY3JvdGFza3MgZm9y
IG11dGF0aW9uIG9ic2VydmVycyBhbmQgY3VzdG9tIGVsZW1lbnRzIGFyZSBzaGFyZWQgYWNyb3Nz
IHNpbWlsYXIgb3JpZ2luCisgICAgICAgIHdpbmRvdyBhZ2VudHMsIHdlIGNhbid0IHVzZSBhbnkg
b25lIGRvY3VtZW50J3MgdGFzayBncm91cCB0byBzY2hlZHVsZSB0aGVzZS4gSW5zdGVhZCwgd2Ug
Y3JlYXRlCisgICAgICAgIGEgbmV3ICJwZXJwZXR1YWwiIHRhc2sgZ3JvdXAgaW4gV2luZG93RXZl
bnRMb29wIHdoaWNoIGlzIG5ldmVyIHN1c3BlbmRlZCBvciBzdG9wcGVkLiBJdCdzIHRoZQorICAg
ICAgICByZXNwb25zaWJpbGl0eSBvZiBtdXRhdGlvbiBvYnNlcnZlciBhbmQgY3VzdG9tIGVsZW1l
bnRzJyBjb2RlIHRvIGRlYWwgd2l0aCBzdXNwZW5lZCBvciBzdG9wcGVkCisgICAgICAgIGRvY3Vt
ZW50cyBhcyBpdCBoYXMgYmVlbiB0aGUgY2FzZS4KKworICAgICAgICBTZWUgYWxzbzogaHR0cHM6
Ly9kb20uc3BlYy53aGF0d2cub3JnLyNxdWV1ZS1hLW11dGF0aW9uLW9ic2VydmVyLWNvbXBvdW5k
LW1pY3JvdGFzaworICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9y
Zy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjYmFja3VwLWVsZW1lbnQtcXVldWUKKwor
ICAgICAgICBUZXN0OiBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtZG9lcy1ub3QtZmlyZS1wcm9t
aXNlcy13aGlsZS1zYW5pdGl6aW5nLXdlYi1jb250ZW50Lmh0bWwKKworICAgICAgICAqIGRvbS9D
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21F
bGVtZW50UXVldWU6OmFkZCk6IFJlbmFtZWQgZnJvbSBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1
ZTo6RWxlbWVudFF1ZXVlIHRvCisgICAgICAgIGFsbG93IGZvcndhcmQgZGVjbGFyYXRpb24gaW4g
RXZlbnRMb29wLmguCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UXVldWU6Omludm9r
ZUFsbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFF1ZXVlOjpwcm9j
ZXNzUXVldWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlOjplbnF1ZXVlRWxlbWVudE9uQXBwcm9wcmlhdGVFbGVtZW50UXVldWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OnByb2Nlc3NCYWNrdXBRdWV1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6ZW5zdXJl
QmFja3VwUXVldWUpOiBEZWxldGVkLiBNb3ZlZCB0byBXaW5kb3dFdmVudExvb3AuCisgICAgICAg
IChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6YmFja3VwRWxlbWVudFF1ZXVl
KTogRGl0dG8uCisgICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UXVldWUpOiBSZW5hbWVkIGZyb20gQ3VzdG9t
RWxlbWVudFJlYWN0aW9uUXVldWU6OkVsZW1lbnRRdWV1ZSB0byBhbGxvdworICAgICAgICBmb3J3
YXJkIGRlY2xhcmF0aW9uIGluIEV2ZW50TG9vcC5oLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5nKTogUmVtb3Zl
ZCB0aGUgd29ya2Fyb3VuZCBhZGRlZCBpbiByMjQ3MjIyLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmV2ZW50TG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2luZG93RXZl
bnRMb29wKTogQWRkZWQuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9t
L011dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWN0aXZlTXV0YXRpb25P
YnNlcnZlcnMpOiBEZWxldGVkLiBNb3ZlZCB0byBXaW5kb3dFdmVudExvb3AuCisgICAgICAgIChX
ZWJDb3JlOjpzdXNwZW5kZWRNdXRhdGlvbk9ic2VydmVycyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6c2lnbmFsU2xvdExpc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9u
T2JzZXJ2ZXI6OnF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjplbnF1ZXVlTXV0YXRpb25SZWNv
cmQpOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZVNsb3RDaGFu
Z2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpzZXRIYXNUcmFu
c2llbnRSZWdpc3RyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6
bm90aWZ5TXV0YXRpb25PYnNlcnZlcnMpOiBOb3cgdGFrZXMgV2luZG93RXZlbnRMb29wIHNpbmNl
IHZhcmlvdXMKKyAgICAgICAgbGlzdHMgYW5kIGhhc2ggbWFwcyBhcmUgc3BlY2lmaWMgdG8gZWFj
aCBXaW5kb3dFdmVudExvb3AuCisgICAgICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXIuaDoKKyAg
ICAgICAgKiBkb20vV2luZG93RXZlbnRMb29wLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpbmRv
d0V2ZW50TG9vcDo6V2luZG93RXZlbnRMb29wKTogQ3JlYXRlIG1fcGVycGV0dWFsVGFza0dyb3Vw
Rm9yU2ltaWxhck9yaWdpbldpbmRvd0FnZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0V2
ZW50TG9vcDo6bWljcm90YXNrUXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RXZlbnRM
b29wOjpxdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpXaW5kb3dFdmVudExvb3A6OmJhY2t1cEVsZW1lbnRRdWV1ZSk6CisgICAgICAgICog
ZG9tL1dpbmRvd0V2ZW50TG9vcC5oOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBhZ2VGb3JTYW5pdGl6aW5nV2ViQ29udGVudCk6IFJlbW92
ZWQgdGhlIHdvcmthcm91bmQgYWRkZWQgaW4gcjI0NzIyMi4KKyAgICAgICAgKiBwYWdlL1BhZ2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldElzRm9yU2FuaXRpemluZ1dlYkNvbnRlbnQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmlzRm9yU2FuaXRpemluZ1dlYkNvbnRl
bnQgY29uc3QpOiBEaXR0by4KKwogMjAxOS0xMi0wNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBVbmlxdWUgb3JpZ2luJ3Mgd2luZG93IG11c3QgZ2V0IGl0cyBv
d24gZXZlbnQgbG9vcApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWUuY3BwCShyZXZpc2lvbiAyNTMyNjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNDdXN0b21F
bGVtZW50SW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAi
V2luZG93RXZlbnRMb29wLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ2F0Y2hTY29wZS5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KQEAgLTIzOCwxNCArMjM5LDE0IEBAIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0
aW9uUXVldWU6Omludm9rZUEKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlOjpFbGVtZW50UXVldWU6OmFkZChFbGVtZW50JiBlbGVtZW50KQoraW5saW5l
IHZvaWQgQ3VzdG9tRWxlbWVudFF1ZXVlOjphZGQoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBB
U1NFUlQoIW1faW52b2tpbmcpOwogICAgIC8vIEZJWE1FOiBBdm9pZCBpbnNlcnRpbmcgdGhlIHNh
bWUgZWxlbWVudCBtdWx0aXBsZSB0aW1lcy4KICAgICBtX2VsZW1lbnRzLmFwcGVuZChlbGVtZW50
KTsKIH0KIAotaW5saW5lIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OkVsZW1lbnRR
dWV1ZTo6aW52b2tlQWxsKCkKK2lubGluZSB2b2lkIEN1c3RvbUVsZW1lbnRRdWV1ZTo6aW52b2tl
QWxsKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9pbnZva2luZyk7CiAgICAgU2V0Rm9yU2Nv
cGU8Ym9vbD4gaW52b2tpbmcobV9pbnZva2luZywgdHJ1ZSk7CkBAIC0yNjIsNyArMjYzLDcgQEAg
aW5saW5lIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OgogICAgIG1fZWxlbWVudHMu
Y2xlYXIoKTsKIH0KIAotaW5saW5lIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OkVs
ZW1lbnRRdWV1ZTo6cHJvY2Vzc1F1ZXVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIHN0YXRlKQoraW5s
aW5lIHZvaWQgQ3VzdG9tRWxlbWVudFF1ZXVlOjpwcm9jZXNzUXVldWUoSlNDOjpKU0dsb2JhbE9i
amVjdCogc3RhdGUpCiB7CiAgICAgaWYgKCFzdGF0ZSkgewogICAgICAgICBpbnZva2VBbGwoKTsK
QEAgLTI5MywxNCArMjk0LDEzIEBAIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVu
cXVldWUKIHsKICAgICBBU1NFUlQoZWxlbWVudC5yZWFjdGlvblF1ZXVlKCkpOwogICAgIGlmICgh
Q3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OnNfY3VycmVudFByb2Nlc3NpbmdTdGFjaykgewot
ICAgICAgICBhdXRvJiBxdWV1ZSA9IGVuc3VyZUJhY2t1cFF1ZXVlKGVsZW1lbnQuZG9jdW1lbnQo
KSk7Ci0gICAgICAgIHF1ZXVlLmFkZChlbGVtZW50KTsKKyAgICAgICAgZWxlbWVudC5kb2N1bWVu
dCgpLndpbmRvd0V2ZW50TG9vcCgpLmJhY2t1cEVsZW1lbnRRdWV1ZSgpLmFkZChlbGVtZW50KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8qJiBxdWV1ZSA9IEN1c3RvbUVsZW1l
bnRSZWFjdGlvblN0YWNrOjpzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2stPm1fcXVldWU7CiAgICAg
aWYgKCFxdWV1ZSkgLy8gV2UgdXNlIGEgcmF3IHBvaW50ZXIgdG8gYXZvaWQgZ2VuZWFyaW5nIGNv
ZGUgdG8gZGVsZXRlIGl0IGluIH5DdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjay4KLSAgICAgICAg
cXVldWUgPSBuZXcgRWxlbWVudFF1ZXVlOworICAgICAgICBxdWV1ZSA9IG5ldyBDdXN0b21FbGVt
ZW50UXVldWU7CiAgICAgcXVldWUtPmFkZChlbGVtZW50KTsKIH0KIApAQCAtMzE4LDMwICszMTgs
OSBAQCB2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjpwcm9jZXNzCiAgICAgbV9xdWV1
ZSA9IG51bGxwdHI7CiB9CiAKLXN0YXRpYyBib29sIHNfcHJvY2Vzc2luZ0JhY2t1cEVsZW1lbnRR
dWV1ZSA9IGZhbHNlOwotCi0vLyBGSVhNRTogQmFja3VwUXVldWUgbXVzdCBiZSBwZXIgZXZlbnQg
bG9vcC4KLUN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpFbGVtZW50UXVldWUmIEN1c3RvbUVs
ZW1lbnRSZWFjdGlvblF1ZXVlOjplbnN1cmVCYWNrdXBRdWV1ZShEb2N1bWVudCYgZG9jdW1lbnQp
Ci17Ci0gICAgaWYgKCFzX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUpIHsKLSAgICAgICAg
c19wcm9jZXNzaW5nQmFja3VwRWxlbWVudFF1ZXVlID0gdHJ1ZTsKLSAgICAgICAgZG9jdW1lbnQu
ZXZlbnRMb29wKCkucXVldWVNaWNyb3Rhc2soW10gewotICAgICAgICAgICAgQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWU6OnByb2Nlc3NCYWNrdXBRdWV1ZSgpOwotICAgICAgICB9KTsKLSAgICB9
Ci0gICAgcmV0dXJuIGJhY2t1cEVsZW1lbnRRdWV1ZSgpOwotfQotCi12b2lkIEN1c3RvbUVsZW1l
bnRSZWFjdGlvblF1ZXVlOjpwcm9jZXNzQmFja3VwUXVldWUoKQotewotICAgIGJhY2t1cEVsZW1l
bnRRdWV1ZSgpLnByb2Nlc3NRdWV1ZShudWxscHRyKTsKLSAgICBzX3Byb2Nlc3NpbmdCYWNrdXBF
bGVtZW50UXVldWUgPSBmYWxzZTsKLX0KLQotQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OkVs
ZW1lbnRRdWV1ZSYgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmJhY2t1cEVsZW1lbnRRdWV1
ZSgpCit2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpwcm9jZXNzQmFja3VwUXVldWUo
Q3VzdG9tRWxlbWVudFF1ZXVlJiBiYWNrdXBFbGVtZW50UXVldWUpCiB7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEVsZW1lbnRRdWV1ZT4gcXVldWU7Ci0gICAgcmV0dXJuIHF1ZXVlLmdldCgp
OworICAgIGJhY2t1cEVsZW1lbnRRdWV1ZS5wcm9jZXNzUXVldWUobnVsbHB0cik7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1
ZS5oCShyZXZpc2lvbiAyNTMyNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMjMgQEAgY2xhc3Mg
RWxlbWVudDsKIGNsYXNzIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTsKIGNsYXNzIFF1YWxpZmll
ZE5hbWU7CiAKKy8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3Rv
bS1lbGVtZW50cy5odG1sI2VsZW1lbnQtcXVldWUKK2NsYXNzIEN1c3RvbUVsZW1lbnRRdWV1ZSB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q3VzdG9tRWxlbWVudFF1ZXVlKTsKK3B1YmxpYzoKKyAgICBDdXN0b21FbGVtZW50UXVldWUoKSA9
IGRlZmF1bHQ7CisKKyAgICB2b2lkIGFkZChFbGVtZW50Jik7CisgICAgdm9pZCBwcm9jZXNzUXVl
dWUoSlNDOjpKU0dsb2JhbE9iamVjdCopOworCitwcml2YXRlOgorICAgIHZvaWQgaW52b2tlQWxs
KCk7CisKKyAgICBWZWN0b3I8R0NSZWFjaGFibGVSZWY8RWxlbWVudD4+IG1fZWxlbWVudHM7Cisg
ICAgYm9vbCBtX2ludm9raW5nIHsgZmFsc2UgfTsKK307CisKIGNsYXNzIEN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSk7CkBAIC02NCwyNCArODEs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgaW52b2tlQWxsKEVsZW1lbnQmKTsKICAgICB2b2lkIGNs
ZWFyKCk7CiAKLSAgICBzdGF0aWMgdm9pZCBwcm9jZXNzQmFja3VwUXVldWUoKTsKLQotICAgIGNs
YXNzIEVsZW1lbnRRdWV1ZSB7Ci0gICAgcHVibGljOgotICAgICAgICB2b2lkIGFkZChFbGVtZW50
Jik7Ci0gICAgICAgIHZvaWQgcHJvY2Vzc1F1ZXVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgaW52b2tlQWxsKCk7Ci0KLSAgICAgICAgVmVjdG9y
PEdDUmVhY2hhYmxlUmVmPEVsZW1lbnQ+PiBtX2VsZW1lbnRzOwotICAgICAgICBib29sIG1faW52
b2tpbmcgeyBmYWxzZSB9OwotICAgIH07CisgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0JhY2t1cFF1
ZXVlKEN1c3RvbUVsZW1lbnRRdWV1ZSYpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGVu
cXVldWVFbGVtZW50T25BcHByb3ByaWF0ZUVsZW1lbnRRdWV1ZShFbGVtZW50Jik7Ci0gICAgc3Rh
dGljIEVsZW1lbnRRdWV1ZSYgZW5zdXJlQmFja3VwUXVldWUoRG9jdW1lbnQmKTsKLSAgICBzdGF0
aWMgRWxlbWVudFF1ZXVlJiBiYWNrdXBFbGVtZW50UXVldWUoKTsKIAogICAgIFJlZjxKU0N1c3Rv
bUVsZW1lbnRJbnRlcmZhY2U+IG1faW50ZXJmYWNlOwogICAgIFZlY3RvcjxDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZUl0ZW0+IG1faXRlbXM7CkBAIC0xNTgsNyArMTYxLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByb2Nlc3NRdWV1ZShKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7CiAKLSAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6RWxlbWVudFF1
ZXVlKiBtX3F1ZXVlIHsgbnVsbHB0ciB9OyAvLyBVc2UgcmF3IHBvaW50ZXIgdG8gYXZvaWQgZ2Vu
ZXJhdGluZyBkZWxldGUgaW4gdGhlIGRlc3RydWN0b3IuCisgICAgQ3VzdG9tRWxlbWVudFF1ZXVl
KiBtX3F1ZXVlIHsgbnVsbHB0ciB9OyAvLyBVc2UgcmF3IHBvaW50ZXIgdG8gYXZvaWQgZ2VuZXJh
dGluZyBkZWxldGUgaW4gdGhlIGRlc3RydWN0b3IuCiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9u
U3RhY2sqIG1fcHJldmlvdXNQcm9jZXNzaW5nU3RhY2s7CiAgICAgSlNDOjpKU0dsb2JhbE9iamVj
dCogbV9zdGF0ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNTMy
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01ODAzLDExICs1ODAzLDggQEAgdm9pZCBEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5nKCkKICAg
ICBpZiAoIW1fZG9jdW1lbnRUaW1pbmcuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQpCiAgICAg
ICAgIG1fZG9jdW1lbnRUaW1pbmcuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgPSBNb25vdG9u
aWNUaW1lOjpub3coKTsKIAotICAgIGlmICghcGFnZSgpIHx8ICFwYWdlKCktPmlzRm9yU2FuaXRp
emluZ1dlYkNvbnRlbnQoKSkgewotICAgICAgICAvLyBGSVhNRTogU2NoZWR1bGUgYSB0YXNrIHRv
IGZpcmUgRE9NQ29udGVudExvYWRlZCBldmVudCBpbnN0ZWFkLiBTZWUgd2Via2l0Lm9yZy9iLzgy
OTMxCi0gICAgICAgIGV2ZW50TG9vcCgpLnBlcmZvcm1NaWNyb3Rhc2tDaGVja3BvaW50KCk7Ci0g
ICAgfQotCisgICAgLy8gRklYTUU6IFNjaGVkdWxlIGEgdGFzayB0byBmaXJlIERPTUNvbnRlbnRM
b2FkZWQgZXZlbnQgaW5zdGVhZC4gU2VlIHdlYmtpdC5vcmcvYi84MjkzMQorICAgIGV2ZW50TG9v
cCgpLnBlcmZvcm1NaWNyb3Rhc2tDaGVja3BvaW50KCk7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Db250ZW50TG9hZGVkRXZlbnQsIEV2ZW50OjpDYW5C
dWJibGU6OlllcywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKIAogICAgIGlmICghbV9kb2N1
bWVudFRpbWluZy5kb21Db250ZW50TG9hZGVkRXZlbnRFbmQpCkBAIC02MjYzLDkgKzYyNjAsNyBA
QCBFdmVudExvb3BUYXNrR3JvdXAmIERvY3VtZW50OjpldmVudExvb3AoCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIW1fZG9jdW1lbnRUYXNrR3JvdXAp
KSB7Ci0gICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dl
YmFwcGFwaXMuaHRtbCNvYnRhaW4tYWdlbnQtY2x1c3Rlci1rZXkKLSAgICAgICAgbV9ldmVudExv
b3AgPSBXaW5kb3dFdmVudExvb3A6OmV2ZW50TG9vcEZvclNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5
T3JpZ2luKCkpOwotICAgICAgICBtX2RvY3VtZW50VGFza0dyb3VwID0gbWFrZVVuaXF1ZTxFdmVu
dExvb3BUYXNrR3JvdXA+KCptX2V2ZW50TG9vcCk7CisgICAgICAgIG1fZG9jdW1lbnRUYXNrR3Jv
dXAgPSBtYWtlVW5pcXVlPEV2ZW50TG9vcFRhc2tHcm91cD4od2luZG93RXZlbnRMb29wKCkpOwog
ICAgICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkKICAgICAgICAgICAgIG1f
ZG9jdW1lbnRUYXNrR3JvdXAtPnN0b3BBbmREaXNjYXJkQWxsVGFza3MoKTsKICAgICAgICAgZWxz
ZSBpZiAoYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKQpAQCAtNjI3NCw2ICs2MjY5LDE0
IEBAIEV2ZW50TG9vcFRhc2tHcm91cCYgRG9jdW1lbnQ6OmV2ZW50TG9vcCgKICAgICByZXR1cm4g
Km1fZG9jdW1lbnRUYXNrR3JvdXA7CiB9CiAKK1dpbmRvd0V2ZW50TG9vcCYgRG9jdW1lbnQ6Ondp
bmRvd0V2ZW50TG9vcCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAo
VU5MSUtFTFkoIW1fZXZlbnRMb29wKSkKKyAgICAgICAgbV9ldmVudExvb3AgPSBXaW5kb3dFdmVu
dExvb3A6OmV2ZW50TG9vcEZvclNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKCkpOworICAg
IHJldHVybiAqbV9ldmVudExvb3A7Cit9CisKIHZvaWQgRG9jdW1lbnQ6OnN1c3BlbmRTY2hlZHVs
ZWRUYXNrcyhSZWFzb25Gb3JTdXNwZW5zaW9uIHJlYXNvbikKIHsKICAgICBpZiAobV9zY2hlZHVs
ZWRUYXNrc0FyZVN1c3BlbmRlZCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9u
IDI1MzI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDY3LDYgKzEwNjcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBw
b3N0VGFzayhUYXNrJiYpIGZpbmFsOyAvLyBFeGVjdXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3Mg
dGhyZWFkIGFzeW5jaHJvbm91c2x5LgogCiAgICAgRXZlbnRMb29wVGFza0dyb3VwJiBldmVudExv
b3AoKSBmaW5hbDsKKyAgICBXaW5kb3dFdmVudExvb3AmIHdpbmRvd0V2ZW50TG9vcCgpOwogCiAg
ICAgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKiBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xs
ZXIoKSB7IHJldHVybiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQogICAg
IHZvaWQgc3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAkocmV2aXNpb24gMjUzMjY1
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCwxMyArMzQsMTMgQEAKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgogI2luY2x1ZGUg
IkdDUmVhY2hhYmxlUmVmLmgiCiAjaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25DYWxsYmFj
ay5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCIKICNpbmNsdWRl
ICJNdXRhdGlvblJlY29yZC5oIgorI2luY2x1ZGUgIldpbmRvd0V2ZW50TG9vcC5oIgogI2luY2x1
ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC0xMzcsNDAgKzEzNyw2IEBAIHZvaWQgTXV0YXRpb25P
YnNlcnZlcjo6b2JzZXJ2YXRpb25FbmRlZCgKICAgICBtX3JlZ2lzdHJhdGlvbnMucmVtb3ZlKCZy
ZWdpc3RyYXRpb24pOwogfQogCi10eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPE11dGF0aW9uT2JzZXJ2
ZXI+PiBNdXRhdGlvbk9ic2VydmVyU2V0OwotCi1zdGF0aWMgTXV0YXRpb25PYnNlcnZlclNldCYg
YWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxN
dXRhdGlvbk9ic2VydmVyU2V0PiBhY3RpdmVPYnNlcnZlcnM7Ci0gICAgcmV0dXJuIGFjdGl2ZU9i
c2VydmVyczsKLX0KLQotc3RhdGljIE11dGF0aW9uT2JzZXJ2ZXJTZXQmIHN1c3BlbmRlZE11dGF0
aW9uT2JzZXJ2ZXJzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0YXRpb25PYnNl
cnZlclNldD4gc3VzcGVuZGVkT2JzZXJ2ZXJzOwotICAgIHJldHVybiBzdXNwZW5kZWRPYnNlcnZl
cnM7Ci19Ci0KLS8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jc2lnbmFsLXNsb3QtbGlz
dAotc3RhdGljIFZlY3RvcjxHQ1JlYWNoYWJsZVJlZjxIVE1MU2xvdEVsZW1lbnQ+PiYgc2lnbmFs
U2xvdExpc3QoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8R0NSZWFjaGFi
bGVSZWY8SFRNTFNsb3RFbGVtZW50Pj4+IGxpc3Q7Ci0gICAgcmV0dXJuIGxpc3Q7Ci19Ci0KLS8v
IFRoaXMgc3RhdGUgbXVzdCBiZSBwZXIgZXZlbnQgbG9vcC4KLXN0YXRpYyBib29sIG11dGF0aW9u
T2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFza1F1ZXVlZEZsYWcgPSBmYWxzZTsKLQotdm9pZCBNdXRh
dGlvbk9ic2VydmVyOjpxdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzayhEb2N1
bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgaWYgKG11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3Jv
dGFza1F1ZXVlZEZsYWcpCi0gICAgICAgIHJldHVybjsKLSAgICBtdXRhdGlvbk9ic2VydmVyQ29t
cG91bmRNaWNyb3Rhc2tRdWV1ZWRGbGFnID0gdHJ1ZTsKLSAgICBkb2N1bWVudC5ldmVudExvb3Ao
KS5xdWV1ZU1pY3JvdGFzayhbXSB7Ci0gICAgICAgIG5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJzKCk7
Ci0gICAgfSk7Ci19Ci0KIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZU11dGF0aW9uUmVj
b3JkKFJlZjxNdXRhdGlvblJlY29yZD4mJiBtdXRhdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwpAQCAtMTc5LDI2ICsxNDUsMjggQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpl
bnF1ZXVlTXV0YXRpb25SZQogCiAgICAgbV9wZW5kaW5nVGFyZ2V0cy5hZGQoKm11dGF0aW9uLT50
YXJnZXQoKSk7CiAgICAgbV9yZWNvcmRzLmFwcGVuZChXVEZNb3ZlKG11dGF0aW9uKSk7Ci0gICAg
YWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQodGhpcyk7CiAKLSAgICBxdWV1ZU11dGF0aW9u
T2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzayhkb2N1bWVudC5nZXQoKSk7CisgICAgYXV0byBldmVu
dExvb3AgPSBtYWtlUmVmKGRvY3VtZW50LT53aW5kb3dFdmVudExvb3AoKSk7CisgICAgZXZlbnRM
b29wLT5hY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFkZCh0aGlzKTsKKyAgICBldmVudExvb3At
PnF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90YXNrKCk7CiB9CiAKIHZvaWQgTXV0
YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZVNsb3RDaGFuZ2VFdmVudChIVE1MU2xvdEVsZW1lbnQmIHNs
b3QpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoc2lnbmFsU2xv
dExpc3QoKS5maW5kTWF0Y2hpbmcoWyZzbG90XShhdXRvJiBlbnRyeSkgeyByZXR1cm4gZW50cnku
cHRyKCkgPT0gJnNsb3Q7IH0pID09IG5vdEZvdW5kKTsKLSAgICBzaWduYWxTbG90TGlzdCgpLmFw
cGVuZChzbG90KTsKKyAgICBhdXRvIGV2ZW50TG9vcCA9IG1ha2VSZWYoc2xvdC5kb2N1bWVudCgp
LndpbmRvd0V2ZW50TG9vcCgpKTsKKyAgICBhdXRvJiBsaXN0ID0gZXZlbnRMb29wLT5zaWduYWxT
bG90TGlzdCgpOworICAgIEFTU0VSVChsaXN0LmZpbmRNYXRjaGluZyhbJnNsb3RdKGF1dG8mIGVu
dHJ5KSB7IHJldHVybiBlbnRyeS5wdHIoKSA9PSAmc2xvdDsgfSkgPT0gbm90Rm91bmQpOworICAg
IGxpc3QuYXBwZW5kKHNsb3QpOwogCi0gICAgcXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRN
aWNyb3Rhc2soc2xvdC5kb2N1bWVudCgpKTsKKyAgICBldmVudExvb3AtPnF1ZXVlTXV0YXRpb25P
YnNlcnZlckNvbXBvdW5kTWljcm90YXNrKCk7CiB9CiAKIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6
c2V0SGFzVHJhbnNpZW50UmVnaXN0cmF0aW9uKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRk
KHRoaXMpOwotCi0gICAgcXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2soZG9j
dW1lbnQpOworICAgIGF1dG8gZXZlbnRMb29wID0gbWFrZVJlZihkb2N1bWVudC53aW5kb3dFdmVu
dExvb3AoKSk7CisgICAgZXZlbnRMb29wLT5hY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFkZCh0
aGlzKTsKKyAgICBldmVudExvb3AtPnF1ZXVlTXV0YXRpb25PYnNlcnZlckNvbXBvdW5kTWljcm90
YXNrKCk7CiB9CiAKIEhhc2hTZXQ8Tm9kZSo+IE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmVkTm9k
ZXMoKSBjb25zdApAQCAtMjUxLDMyICsyMTksMjMgQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpk
ZWxpdmVyKCkKICAgICB9CiB9CiAKLXZvaWQgTXV0YXRpb25PYnNlcnZlcjo6bm90aWZ5TXV0YXRp
b25PYnNlcnZlcnMoKQorLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNub3RpZnktbXV0
YXRpb24tb2JzZXJ2ZXJzCit2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6Om5vdGlmeU11dGF0aW9uT2Jz
ZXJ2ZXJzKFdpbmRvd0V2ZW50TG9vcCYgZXZlbnRMb29wKQogewotICAgIC8vIGh0dHBzOi8vZG9t
LnNwZWMud2hhdHdnLm9yZy8jbm90aWZ5LW11dGF0aW9uLW9ic2VydmVycwotICAgIC8vIDEuIFVu
c2V0IG11dGF0aW9uIG9ic2VydmVyIGNvbXBvdW5kIG1pY3JvdGFzayBxdWV1ZWQgZmxhZy4KLSAg
ICBtdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2tRdWV1ZWRGbGFnID0gZmFsc2U7Ci0K
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBib29sIGRlbGl2ZXJ5SW5Q
cm9ncmVzcyA9IGZhbHNlOwotICAgIGlmIChkZWxpdmVyeUluUHJvZ3Jlc3MpCi0gICAgICAgIHJl
dHVybjsKLSAgICBkZWxpdmVyeUluUHJvZ3Jlc3MgPSB0cnVlOwotCi0gICAgaWYgKCFzdXNwZW5k
ZWRNdXRhdGlvbk9ic2VydmVycygpLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8mIG9i
c2VydmVyIDogY29weVRvVmVjdG9yKHN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkpKSB7Cisg
ICAgaWYgKCFldmVudExvb3Auc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IGNvcHlUb1ZlY3RvcihldmVudExvb3Au
c3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKSkpIHsKICAgICAgICAgICAgIGlmICghb2JzZXJ2
ZXItPmNhbkRlbGl2ZXIoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAg
ICAgc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5yZW1vdmUob2JzZXJ2ZXIpOwotICAgICAg
ICAgICAgYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQob2JzZXJ2ZXIpOworICAgICAgICAg
ICAgZXZlbnRMb29wLnN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkucmVtb3ZlKG9ic2VydmVy
KTsKKyAgICAgICAgICAgIGV2ZW50TG9vcC5hY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFkZChv
YnNlcnZlcik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB3aGlsZSAoIWFjdGl2ZU11dGF0aW9u
T2JzZXJ2ZXJzKCkuaXNFbXB0eSgpIHx8ICFzaWduYWxTbG90TGlzdCgpLmlzRW1wdHkoKSkgewor
ICAgIHdoaWxlICghZXZlbnRMb29wLmFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuaXNFbXB0eSgp
IHx8ICFldmVudExvb3Auc2lnbmFsU2xvdExpc3QoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8g
Mi4gTGV0IG5vdGlmeSBsaXN0IGJlIGEgY29weSBvZiB1bml0IG9mIHJlbGF0ZWQgc2ltaWxhci1v
cmlnaW4gYnJvd3NpbmcgY29udGV4dHMnIGxpc3Qgb2YgTXV0YXRpb25PYnNlcnZlciBvYmplY3Rz
LgotICAgICAgICBhdXRvIG5vdGlmeUxpc3QgPSBjb3B5VG9WZWN0b3IoYWN0aXZlTXV0YXRpb25P
YnNlcnZlcnMoKSk7Ci0gICAgICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuY2xlYXIoKTsK
KyAgICAgICAgYXV0byBub3RpZnlMaXN0ID0gY29weVRvVmVjdG9yKGV2ZW50TG9vcC5hY3RpdmVN
dXRhdGlvbk9ic2VydmVycygpKTsKKyAgICAgICAgZXZlbnRMb29wLmFjdGl2ZU11dGF0aW9uT2Jz
ZXJ2ZXJzKCkuY2xlYXIoKTsKICAgICAgICAgc3RkOjpzb3J0KG5vdGlmeUxpc3QuYmVnaW4oKSwg
bm90aWZ5TGlzdC5lbmQoKSwgW10oYXV0byYgbGhzLCBhdXRvJiByaHMpIHsKICAgICAgICAgICAg
IHJldHVybiBsaHMtPm1fcHJpb3JpdHkgPCByaHMtPm1fcHJpb3JpdHk7CiAgICAgICAgIH0pOwpA
QCAtMjg0LDggKzI0Myw4IEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6bm90aWZ5TXV0YXRpb25P
YnMKICAgICAgICAgLy8gMy4gTGV0IHNpZ25hbExpc3QgYmUgYSBjb3B5IG9mIHVuaXQgb2YgcmVs
YXRlZCBzaW1pbGFyLW9yaWdpbiBicm93c2luZyBjb250ZXh0cycgc2lnbmFsIHNsb3QgbGlzdC4K
ICAgICAgICAgLy8gNC4gRW1wdHkgdW5pdCBvZiByZWxhdGVkIHNpbWlsYXItb3JpZ2luIGJyb3dz
aW5nIGNvbnRleHRzJyBzaWduYWwgc2xvdCBsaXN0LgogICAgICAgICBWZWN0b3I8R0NSZWFjaGFi
bGVSZWY8SFRNTFNsb3RFbGVtZW50Pj4gc2xvdExpc3Q7Ci0gICAgICAgIGlmICghc2lnbmFsU2xv
dExpc3QoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHNsb3RMaXN0LnN3YXAoc2lnbmFsU2xv
dExpc3QoKSk7CisgICAgICAgIGlmICghZXZlbnRMb29wLnNpZ25hbFNsb3RMaXN0KCkuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBzbG90TGlzdC5zd2FwKGV2ZW50TG9vcC5zaWduYWxTbG90TGlz
dCgpKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgc2xvdCA6IHNsb3RMaXN0KQogICAgICAgICAg
ICAgICAgIHNsb3QtPmRpZFJlbW92ZUZyb21TaWduYWxTbG90TGlzdCgpOwogICAgICAgICB9CkBA
IC0yOTUsMTUgKzI1NCwxMyBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6Om5vdGlmeU11dGF0aW9u
T2JzCiAgICAgICAgICAgICBpZiAob2JzZXJ2ZXItPmNhbkRlbGl2ZXIoKSkKICAgICAgICAgICAg
ICAgICBvYnNlcnZlci0+ZGVsaXZlcigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKG9ic2VydmVyKTsKKyAgICAgICAg
ICAgICAgICBldmVudExvb3Auc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQob2JzZXJ2
ZXIpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gNi4gRm9yIGVhY2ggc2xvdCBzbG90IGluIHNp
Z25hbExpc3QsIGluIG9yZGVyLCBmaXJlIGFuIGV2ZW50IG5hbWVkIHNsb3RjaGFuZ2UsIHdpdGgg
aXRzIGJ1YmJsZXMgYXR0cmlidXRlIHNldCB0byB0cnVlLCBhdCBzbG90LgogICAgICAgICBmb3Ig
KGF1dG8mIHNsb3QgOiBzbG90TGlzdCkKICAgICAgICAgICAgIHNsb3QtPmRpc3BhdGNoU2xvdENo
YW5nZUV2ZW50KCk7CiAgICAgfQotCi0gICAgZGVsaXZlcnlJblByb2dyZXNzID0gZmFsc2U7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvbk9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
T2JzZXJ2ZXIuaAkocmV2aXNpb24gMjUzMjY1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0
aW9uT2JzZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBNdXRh
dGlvbkNhbGxiYWNrOwogY2xhc3MgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjsKIGNsYXNz
IE11dGF0aW9uUmVjb3JkOwogY2xhc3MgTm9kZTsKK2NsYXNzIFdpbmRvd0V2ZW50TG9vcDsKIAog
dXNpbmcgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgPSB1bnNpZ25lZCBjaGFyOwogdXNpbmcgTXV0
YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnMgPSB1bnNpZ25lZCBjaGFyOwpAQCAtMTA2LDEyICsx
MDcsMTIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZW5xdWV1ZVNsb3RDaGFuZ2VFdmVu
dChIVE1MU2xvdEVsZW1lbnQmKTsKIAorICAgIHN0YXRpYyB2b2lkIG5vdGlmeU11dGF0aW9uT2Jz
ZXJ2ZXJzKFdpbmRvd0V2ZW50TG9vcCYpOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE11dGF0
aW9uT2JzZXJ2ZXIoUmVmPE11dGF0aW9uQ2FsbGJhY2s+JiYpOwogICAgIHZvaWQgZGVsaXZlcigp
OwogCi0gICAgc3RhdGljIHZvaWQgcXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rh
c2soRG9jdW1lbnQmKTsKLSAgICBzdGF0aWMgdm9pZCBub3RpZnlNdXRhdGlvbk9ic2VydmVycygp
OwogICAgIHN0YXRpYyBib29sIHZhbGlkYXRlT3B0aW9ucyhNdXRhdGlvbk9ic2VydmVyT3B0aW9u
cyk7CiAKICAgICBSZWY8TXV0YXRpb25DYWxsYmFjaz4gbV9jYWxsYmFjazsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuY3BwCShyZXZpc2lvbiAyNTMyNjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
OCArMjcsMTEgQEAKICNpbmNsdWRlICJXaW5kb3dFdmVudExvb3AuaCIKIAogI2luY2x1ZGUgIkNv
bW1vblZNLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgogI2luY2x1ZGUg
Ik1pY3JvdGFza3MuaCIKKyNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNzksNiArODIsNyBAQCBpbmxpbmUgUmVmPFdpbmRvd0V2ZW50TG9v
cD4gV2luZG93RXZlbnRMCiBpbmxpbmUgV2luZG93RXZlbnRMb29wOjpXaW5kb3dFdmVudExvb3Ao
Y29uc3QgU3RyaW5nJiBhZ2VudENsdXN0ZXJLZXkpCiAgICAgOiBtX2FnZW50Q2x1c3RlcktleShh
Z2VudENsdXN0ZXJLZXkpCiAgICAgLCBtX3RpbWVyKCp0aGlzLCAmV2luZG93RXZlbnRMb29wOjpy
dW4pCisgICAgLCBtX3BlcnBldHVhbFRhc2tHcm91cEZvclNpbWlsYXJPcmlnaW5XaW5kb3dBZ2Vu
dHMoKnRoaXMpCiB7CiB9CiAKQEAgLTEwMiw5ICsxMDYsNDUgQEAgYm9vbCBXaW5kb3dFdmVudExv
b3A6OmlzQ29udGV4dFRocmVhZCgpIAogCiBNaWNyb3Rhc2tRdWV1ZSYgV2luZG93RXZlbnRMb29w
OjptaWNyb3Rhc2tRdWV1ZSgpCiB7Ci0gICAgLy8gTWljcm90YXNrUXVldWUgbXVzdCBiZSBvbmUg
cGVyIGV2ZW50IGxvb3AuCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1pY3JvdGFza1F1ZXVl
PiBxdWV1ZShjb21tb25WTSgpKTsKLSAgICByZXR1cm4gcXVldWU7CisgICAgaWYgKCFtX21pY3Jv
dGFza1F1ZXVlKQorICAgICAgICBtX21pY3JvdGFza1F1ZXVlID0gbWFrZVVuaXF1ZTxNaWNyb3Rh
c2tRdWV1ZT4oY29tbW9uVk0oKSk7CisgICAgcmV0dXJuICptX21pY3JvdGFza1F1ZXVlOworfQor
Cit2b2lkIFdpbmRvd0V2ZW50TG9vcDo6cXVldWVNdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNy
b3Rhc2soKQoreworICAgIGlmIChtX211dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFza1F1
ZXVlZEZsYWcpCisgICAgICAgIHJldHVybjsKKyAgICBtX211dGF0aW9uT2JzZXJ2ZXJDb21wb3Vu
ZE1pY3JvdGFza1F1ZXVlZEZsYWcgPSB0cnVlOworICAgIG1fcGVycGV0dWFsVGFza0dyb3VwRm9y
U2ltaWxhck9yaWdpbldpbmRvd0FnZW50cy5xdWV1ZU1pY3JvdGFzayhbdGhpc10geworICAgICAg
ICAvLyBXZSBjYW4ndCBtYWtlIGEgUmVmIHRvIFdpbmRvd0V2ZW50TG9vcCBpbiB0aGUgbGFtYmRh
IGNhcHR1cmUgYXMgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSByZWZlcmVuY2UgY3ljbGUgJiBsZWFr
LgorICAgICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKKyAgICAgICAg
bV9tdXRhdGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2tRdWV1ZWRGbGFnID0gZmFsc2U7CisK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgZG9lc24ndCBleGlzdCBpbiB0aGUgc3BlYy4K
KyAgICAgICAgaWYgKG1fZGVsaXZlcmluZ011dGF0aW9uUmVjb3JkcykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbV9kZWxpdmVyaW5nTXV0YXRpb25SZWNvcmRzID0gdHJ1ZTsKKyAgICAg
ICAgTXV0YXRpb25PYnNlcnZlcjo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnMoKnRoaXMpOworICAg
ICAgICBtX2RlbGl2ZXJpbmdNdXRhdGlvblJlY29yZHMgPSBmYWxzZTsKKyAgICB9KTsKK30KKwor
Q3VzdG9tRWxlbWVudFF1ZXVlJiBXaW5kb3dFdmVudExvb3A6OmJhY2t1cEVsZW1lbnRRdWV1ZSgp
Cit7CisgICAgaWYgKCFtX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUpIHsKKyAgICAgICAg
bV9wcm9jZXNzaW5nQmFja3VwRWxlbWVudFF1ZXVlID0gdHJ1ZTsKKyAgICAgICAgbV9wZXJwZXR1
YWxUYXNrR3JvdXBGb3JTaW1pbGFyT3JpZ2luV2luZG93QWdlbnRzLnF1ZXVlTWljcm90YXNrKFt0
aGlzXSB7CisgICAgICAgICAgICAvLyBXZSBjYW4ndCBtYWtlIGEgUmVmIHRvIFdpbmRvd0V2ZW50
TG9vcCBpbiB0aGUgbGFtYmRhIGNhcHR1cmUgYXMgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSByZWZl
cmVuY2UgY3ljbGUgJiBsZWFrLgorICAgICAgICAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyk7CisgICAgICAgICAgICBtX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUg
PSBmYWxzZTsKKyAgICAgICAgICAgIEFTU0VSVChtX2N1c3RvbUVsZW1lbnRRdWV1ZSk7CisgICAg
ICAgICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6cHJvY2Vzc0JhY2t1cFF1ZXVlKCpt
X2N1c3RvbUVsZW1lbnRRdWV1ZSk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBpZiAoIW1fY3Vz
dG9tRWxlbWVudFF1ZXVlKQorICAgICAgICBtX2N1c3RvbUVsZW1lbnRRdWV1ZSA9IG1ha2VVbmlx
dWU8Q3VzdG9tRWxlbWVudFF1ZXVlPigpOworICAgIHJldHVybiAqbV9jdXN0b21FbGVtZW50UXVl
dWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9XaW5kb3dFdmVudExvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2lu
ZG93RXZlbnRMb29wLmgJKHJldmlzaW9uIDI1MzI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9X
aW5kb3dFdmVudExvb3AuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTUgKzI1LDE4IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRG9jdW1lbnRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAi
RXZlbnRMb29wLmgiCisjaW5jbHVkZSAiR0NSZWFjaGFibGVSZWYuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ3VzdG9tRWxlbWVudFF1ZXVl
OwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBIVE1MU2xvdEVsZW1lbnQ7CitjbGFzcyBNdXRhdGlv
bk9ic2VydmVyOwogCiAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93
ZWJhcHBhcGlzLmh0bWwjd2luZG93LWV2ZW50LWxvb3AKIGNsYXNzIFdpbmRvd0V2ZW50TG9vcCBm
aW5hbCA6IHB1YmxpYyBFdmVudExvb3AgewpAQCAtNDIsNiArNDUsMTMgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB+V2luZG93RXZlbnRMb29wKCk7CiAKKyAgICB2b2lkIHF1ZXVlTXV0YXRpb25P
YnNlcnZlckNvbXBvdW5kTWljcm90YXNrKCk7CisgICAgVmVjdG9yPEdDUmVhY2hhYmxlUmVmPEhU
TUxTbG90RWxlbWVudD4+JiBzaWduYWxTbG90TGlzdCgpIHsgcmV0dXJuIG1fc2lnbmFsU2xvdExp
c3Q7IH0KKyAgICBIYXNoU2V0PFJlZlB0cjxNdXRhdGlvbk9ic2VydmVyPj4mIGFjdGl2ZU11dGF0
aW9uT2JzZXJ2ZXJzKCkgeyByZXR1cm4gbV9hY3RpdmVPYnNlcnZlcnM7IH0KKyAgICBIYXNoU2V0
PFJlZlB0cjxNdXRhdGlvbk9ic2VydmVyPj4mIHN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkg
eyByZXR1cm4gbV9zdXNwZW5kZWRPYnNlcnZlcnM7IH0KKworICAgIEN1c3RvbUVsZW1lbnRRdWV1
ZSYgYmFja3VwRWxlbWVudFF1ZXVlKCk7CisKIHByaXZhdGU6CiAgICAgc3RhdGljIFJlZjxXaW5k
b3dFdmVudExvb3A+IGNyZWF0ZShjb25zdCBTdHJpbmcmKTsKICAgICBXaW5kb3dFdmVudExvb3Ao
Y29uc3QgU3RyaW5nJik7CkBAIC01Miw2ICs2MiwyMSBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5n
IG1fYWdlbnRDbHVzdGVyS2V5OwogICAgIFRpbWVyIG1fdGltZXI7CisgICAgc3RkOjp1bmlxdWVf
cHRyPE1pY3JvdGFza1F1ZXVlPiBtX21pY3JvdGFza1F1ZXVlOworCisgICAgLy8gRWFjaCB0YXNr
IHNjaGVkdWxlZCBpbiBldmVudCBsb29wIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRvY3VtZW50IHNv
IHRoYXQgaXQgY2FuIGJlIHN1c3BlbmVkIG9yIHN0b3BwZWQKKyAgICAvLyB3aGVuIHRoZSBhc3Nv
Y2lhdGVkIGRvY3VtZW50IGlzIHN1c3BlbmVkIG9yIHN0b3BwZWQuIFRoaXMgdGFzayBncm91cCBp
cyB1c2VkIHRvIHNjaGVkdWxlIGEgdGFzaworICAgIC8vIHdoaWNoIGlzIG5vdCBzY2hlZHVsZWQg
dG8gYSBzcGVjaWZpYyBkb2N1bWVudCwgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCdz
IGFic29sdXRlbHkgcmVxdWlyZWQuCisgICAgRXZlbnRMb29wVGFza0dyb3VwIG1fcGVycGV0dWFs
VGFza0dyb3VwRm9yU2ltaWxhck9yaWdpbldpbmRvd0FnZW50czsKKworICAgIGJvb2wgbV9tdXRh
dGlvbk9ic2VydmVyQ29tcG91bmRNaWNyb3Rhc2tRdWV1ZWRGbGFnIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1fZGVsaXZlcmluZ011dGF0aW9uUmVjb3JkcyB7IGZhbHNlIH07IC8vIEZJWE1FOiBUaGlz
IGZsYWcgZG9lc24ndCBleGlzdCBpbiB0aGUgc3BlYy4KKyAgICBWZWN0b3I8R0NSZWFjaGFibGVS
ZWY8SFRNTFNsb3RFbGVtZW50Pj4gbV9zaWduYWxTbG90TGlzdDsgLy8gaHR0cHM6Ly9kb20uc3Bl
Yy53aGF0d2cub3JnLyNzaWduYWwtc2xvdC1saXN0CisgICAgSGFzaFNldDxSZWZQdHI8TXV0YXRp
b25PYnNlcnZlcj4+IG1fYWN0aXZlT2JzZXJ2ZXJzOworICAgIEhhc2hTZXQ8UmVmUHRyPE11dGF0
aW9uT2JzZXJ2ZXI+PiBtX3N1c3BlbmRlZE9ic2VydmVyczsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDdXN0b21FbGVtZW50UXVldWU+IG1fY3VzdG9tRWxlbWVudFF1ZXVlOworICAgIGJvb2wgbV9w
cm9jZXNzaW5nQmFja3VwRWxlbWVudFF1ZXVlIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDI1
MzI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc5LDcgKzE3OSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYWdlPiBjcmVhdGVQYWdlRm9y
U2FuaXQKICAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gcGFnZUNvbmZpZ3VyYXRpb25XaXRo
RW1wdHlDbGllbnRzKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwogICAgIAog
ICAgIGF1dG8gcGFnZSA9IG1ha2VVbmlxdWU8UGFnZT4oV1RGTW92ZShwYWdlQ29uZmlndXJhdGlv
bikpOwotICAgIHBhZ2UtPnNldElzRm9yU2FuaXRpemluZ1dlYkNvbnRlbnQoKTsKICAgICBwYWdl
LT5zZXR0aW5ncygpLnNldE1lZGlhRW5hYmxlZChmYWxzZSk7CiAgICAgcGFnZS0+c2V0dGluZ3Mo
KS5zZXRTY3JpcHRFbmFibGVkKGZhbHNlKTsKICAgICBwYWdlLT5zZXR0aW5ncygpLnNldFBsdWdp
bnNFbmFibGVkKGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiAyNTMyNjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjU5LDkgKzY1
OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyV2hlZWxFdmVudFRlc3RNb25pdG9yKCkgeyBt
X3doZWVsRXZlbnRUZXN0TW9uaXRvciA9IG51bGxwdHI7IH0KICAgICBib29sIGlzTW9uaXRvcmlu
Z1doZWVsRXZlbnRzKCkgY29uc3QgeyByZXR1cm4gISFtX3doZWVsRXZlbnRUZXN0TW9uaXRvcjsg
fQogCi0gICAgdm9pZCBzZXRJc0ZvclNhbml0aXppbmdXZWJDb250ZW50KCkgeyBtX2lzRm9yU2Fu
aXRpemluZ1dlYkNvbnRlbnQgPSB0cnVlOyB9Ci0gICAgYm9vbCBpc0ZvclNhbml0aXppbmdXZWJD
b250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc0ZvclNhbml0aXppbmdXZWJDb250ZW50OyB9Ci0K
ICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBhbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxh
eWJhY2soKSBjb25zdCB7IHJldHVybiBtX2FsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFj
azsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGlu
ZVBsYXliYWNrKGJvb2wpOwpAQCAtMTAxMSw4ICsxMDA4LDYgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fbWVkaWFQbGF5YmFja0lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fbWVkaWFC
dWZmZXJpbmdJc1N1c3BlbmRlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2luVXBkYXRlUmVuZGVy
aW5nIHsgZmFsc2UgfTsKLQotICAgIGJvb2wgbV9pc0ZvclNhbml0aXppbmdXZWJDb250ZW50IHsg
ZmFsc2UgfTsKIH07CiAKIGlubGluZSBQYWdlR3JvdXAmIFBhZ2U6Omdyb3VwKCkKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI1MzI2NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSw0ICsxLDQgQEAKLTIwMTktMTItMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CisyMDE5LTEyLTA4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFVuaXF1ZSBvcmlnaW4ncyB3aW5kb3cgbXVzdCBnZXQgaXRzIG93biBldmVudCBsb29w
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NzgK
</data>
<flag name="review"
          id="400959"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>