<?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>142579</bug_id>
          
          <creation_ts>2015-03-11 06:41:22 -0700</creation_ts>
          <short_desc>Simple line layout: Split fragments on renderer boundary on the fly.</short_desc>
          <delta_ts>2015-03-18 07:48:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>142812</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1076305</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-03-11 06:41:22 -0700</bug_when>
    <thetext>This is in transition to remove FlowContents::segmentForPosition dependency. -which is required to support &lt;br&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076417</commentid>
    <comment_count>1</comment_count>
      <attachid>248444</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-03-11 13:20:14 -0700</bug_when>
    <thetext>Created attachment 248444
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077052</commentid>
    <comment_count>2</comment_count>
      <attachid>248615</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-03-13 16:04:31 -0700</bug_when>
    <thetext>Created attachment 248615
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077058</commentid>
    <comment_count>3</comment_count>
      <attachid>248615</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-13 16:35:05 -0700</bug_when>
    <thetext>Comment on attachment 248615
Patch

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

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:254
&gt; +        // Check if this fragment is a continuaiton of a text. Is such cases, this fragment is considred to be the first on the line

spelling &apos;considred&apos;

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:263
&gt;      void appendFragment(const TextFragmentIterator::TextFragment&amp; fragment, Layout::RunVector&amp; runs)

Maybe rename to indicate this also creates runs.

&gt; Source/WebCore/rendering/SimpleLineLayoutTextFragmentIterator.h:108
&gt; +    FlowContents::Iterator m_flowContentsIterator;

This could use a name that describes its purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077086</commentid>
    <comment_count>4</comment_count>
      <attachid>248615</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-13 18:26:48 -0700</bug_when>
    <thetext>Comment on attachment 248615
Patch

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

&gt; Source/WebCore/rendering/SimpleLineLayoutTextFragmentIterator.cpp:65
&gt; +    if (m_position == (*m_flowContentsIterator).end)

You should probably add operator-&gt; to FlowContents::Iterator. These are pretty awkward. Something like 

if (m_position == m_currentSegment-&gt;end)

would read better.

&gt; Source/WebCore/rendering/SimpleLineLayoutTextFragmentIterator.h:64
&gt; +        bool isCollapsable() const { return m_isCollapsable; }

&quot;collapsible&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077087</commentid>
    <comment_count>5</comment_count>
      <attachid>248615</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-13 18:29:10 -0700</bug_when>
    <thetext>Comment on attachment 248615
Patch

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

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:326
&gt; +    void revert(unsigned length, float width, Layout::RunVector&amp; runs)

As you mentioned model based on commits might be nicer in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077104</commentid>
    <comment_count>6</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-03-13 19:34:28 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 248615 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248615&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/SimpleLineLayout.cpp:326
&gt; &gt; +    void revert(unsigned length, float width, Layout::RunVector&amp; runs)
&gt; 
&gt; As you mentioned model based on commits might be nicer in the future.

Actually I think I should do it as part of this patch. It greatly reduces complexity both at LineState::removeLastNonWhitespace() and at LineState::isFirstFragment().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077744</commentid>
    <comment_count>7</comment_count>
      <attachid>248803</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-03-16 21:16:03 -0700</bug_when>
    <thetext>Created attachment 248803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077917</commentid>
    <comment_count>8</comment_count>
      <attachid>248803</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-17 11:28:05 -0700</bug_when>
    <thetext>Comment on attachment 248803
Patch

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

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:338
&gt; +    TextFragmentIterator::TextFragment revertUncommitted(Layout::RunVector&amp; runs)
&gt;      {
&gt; -        ASSERT(runs.size());
&gt; -        Run&amp; lastRun = runs.last();
&gt; -        lastRun.logicalRight -= m_trailingWhitespaceWidth;
&gt; -        lastRun.end -= m_trailingWhitespaceLength;
&gt; -        if (lastRun.start == lastRun.end)
&gt; -            runs.removeLast();
&gt; +        ASSERT(m_fragments.size());
&gt; +        unsigned revertLength = 0;
&gt; +        float revertWidth = 0;
&gt; +        while (m_fragments.size()) {
&gt; +            const auto&amp; current = m_fragments.last();
&gt; +            if (current == m_lastComitted)
&gt; +                break;
&gt; +            revertLength += current.end() - current.start();
&gt; +            revertWidth += current.width();
&gt; +            m_fragments.removeLast();
&gt; +        }
&gt; +        m_runsWidth -= revertWidth;
&gt; +        if (revertLength)
&gt; +            revertRuns(runs, revertLength, revertWidth);
&gt; +        return m_lastComitted;
&gt; +    }

It is bit strange that there is concept of &quot;uncommitting&quot; but there is no commit() function. This also does a lot of work whereas you would usually expect rollback to do almost nothing while commit() does all the work.

It is also unclear why some places use term &quot;revert&quot; and others &quot;uncommit&quot;. Is there some difference?

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:468
&gt; +    do {

while(true)

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:476
&gt; +        nextFragment = textFragmentIterator.nextTextFragment();
&gt; +    } while (true);

how do we know there is always nextFragment?

&gt; Source/WebCore/rendering/SimpleLineLayoutFlowContents.h:59
&gt; +        Iterator operator+(unsigned value) const;

This seems to be only used in one place with +1. Maybe that case cold be handled by

auto nextSegment = segment;
++ nextSegment;

&gt; Source/WebCore/rendering/SimpleLineLayoutTextFragmentIterator.cpp:160
&gt; +            const auto nextSegment = m_currentSegment + 1;

See the comment in the iterator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077935</commentid>
    <comment_count>9</comment_count>
      <attachid>248861</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-03-17 12:32:08 -0700</bug_when>
    <thetext>Created attachment 248861
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077936</commentid>
    <comment_count>10</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-03-17 12:34:42 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 248803 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248803&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/SimpleLineLayout.cpp:338
&gt; &gt; +    TextFragmentIterator::TextFragment revertUncommitted(Layout::RunVector&amp; runs)
&gt; &gt;      {
&gt; &gt; -        ASSERT(runs.size());
&gt; &gt; -        Run&amp; lastRun = runs.last();
&gt; &gt; -        lastRun.logicalRight -= m_trailingWhitespaceWidth;
&gt; &gt; -        lastRun.end -= m_trailingWhitespaceLength;
&gt; &gt; -        if (lastRun.start == lastRun.end)
&gt; &gt; -            runs.removeLast();
&gt; &gt; +        ASSERT(m_fragments.size());
&gt; &gt; +        unsigned revertLength = 0;
&gt; &gt; +        float revertWidth = 0;
&gt; &gt; +        while (m_fragments.size()) {
&gt; &gt; +            const auto&amp; current = m_fragments.last();
&gt; &gt; +            if (current == m_lastComitted)
&gt; &gt; +                break;
&gt; &gt; +            revertLength += current.end() - current.start();
&gt; &gt; +            revertWidth += current.width();
&gt; &gt; +            m_fragments.removeLast();
&gt; &gt; +        }
&gt; &gt; +        m_runsWidth -= revertWidth;
&gt; &gt; +        if (revertLength)
&gt; &gt; +            revertRuns(runs, revertLength, revertWidth);
&gt; &gt; +        return m_lastComitted;
&gt; &gt; +    }
&gt; 
&gt; It is bit strange that there is concept of &quot;uncommitting&quot; but there is no
&gt; commit() function. This also does a lot of work whereas you would usually
&gt; expect rollback to do almost nothing while commit() does all the work.
&gt; 
&gt; It is also unclear why some places use term &quot;revert&quot; and others &quot;uncommit&quot;.
&gt; Is there some difference?
I misused the committed/uncommitted terms. Changed to &quot;last complete fragment&quot;.   

&gt; 
&gt; &gt; Source/WebCore/rendering/SimpleLineLayout.cpp:468
&gt; &gt; +    do {
&gt; 
&gt; while(true)
&gt; 
&gt; &gt; Source/WebCore/rendering/SimpleLineLayout.cpp:476
&gt; &gt; +        nextFragment = textFragmentIterator.nextTextFragment();
&gt; &gt; +    } while (true);
&gt; 
&gt; how do we know there is always nextFragment?
There&apos;s always a &apos;content-end&apos; fragment.

&gt; 
&gt; &gt; Source/WebCore/rendering/SimpleLineLayoutFlowContents.h:59
&gt; &gt; +        Iterator operator+(unsigned value) const;
&gt; 
&gt; This seems to be only used in one place with +1. Maybe that case cold be
&gt; handled by
&gt; 
&gt; auto nextSegment = segment;
&gt; ++ nextSegment;
&gt; 
&gt; &gt; Source/WebCore/rendering/SimpleLineLayoutTextFragmentIterator.cpp:160
&gt; &gt; +            const auto nextSegment = m_currentSegment + 1;
&gt; 
&gt; See the comment in the iterator.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077937</commentid>
    <comment_count>11</comment_count>
      <attachid>248861</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-17 12:36:30 -0700</bug_when>
    <thetext>Comment on attachment 248861
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077988</commentid>
    <comment_count>12</comment_count>
      <attachid>248861</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-17 15:21:07 -0700</bug_when>
    <thetext>Comment on attachment 248861
Patch

Clearing flags on attachment: 248861

Committed r181667: &lt;http://trac.webkit.org/changeset/181667&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077989</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-17 15:21:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078119</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-03-17 22:59:44 -0700</bug_when>
    <thetext>This caused ASan violations in SimpleLineLayout::revertRuns on multiple tests. Will e-mail Zalan a link to detailed results, and will roll out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078121</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-17 23:05:58 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 142812</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078186</commentid>
    <comment_count>16</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-03-18 07:48:41 -0700</bug_when>
    <thetext>Committed r181692: &lt;http://trac.webkit.org/changeset/181692&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248444</attachid>
            <date>2015-03-11 13:20:14 -0700</date>
            <delta_ts>2015-03-13 15:00:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142579-20150311131948.patch</filename>
            <type>text/plain</type>
            <size>16217</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGRmYTgyNjUxYzNjZjg4
MTdlZmFmZDU4M2JjOGQ3OTk1NGUwMjcyNy4uYjhhMzUxNzUwYmUyOWZlYTczYmYyMjZmMDM3ZThi
ZGMzNjg2NjY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE1LTAzLTExICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBSZW1vdmUgVGV4dEZyYWdtZW50SXRlcmF0b3I6OmNoYXJhY3RlckF0IGRlcGVuZGVuY3kuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1NzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGlu
IHRyYW5zaXRpb24gdG8gcmVtb3ZlIEZsb3dDb250ZW50czo6c2VnbWVudEZvclBvc2l0aW9uIGRl
cGVuZGVuY3kuIC13aGljaAorICAgICAgICBpcyByZXF1aXJlZCB0byBzdGFydCBzdXBwb3J0aW5n
IDxicj4gZWxlbWVudC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisg
ICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVy
YXRvcjo6VGV4dEZyYWdtZW50SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGlu
ZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6Om5leHRUZXh0RnJhZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6Om5leHRC
cmVha2FibGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpU
ZXh0RnJhZ21lbnRJdGVyYXRvcjo6bmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVyYXRvcjo6dGV4dFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0
ZXJhdG9yOjpza2lwVG9OZXh0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGlu
ZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OnJ1bldpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6Om5leHRCcmVha2FibGVQb3NpdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpuZXh0Tm9uV2hpdGVzcGFjZVBvc2l0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRG
cmFnbWVudEl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpU
ZXh0RnJhZ21lbnRJdGVyYXRvcjo6aXNMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OmNoYXJhY3RlckF0KTogRGVsZXRl
ZC4KKwogMjAxNS0wMy0xMCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFNpbXBsZSBsaW5lIGxheW91dDogTWVyZ2UgVGV4dEZyYWdtZW50SXRlcmF0b3I6OmZpbmRO
ZXh0QnJlYWthYmxlUG9zaXRpb24oKSBhbmQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OmZpbmROZXh0
Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3Bw
CmluZGV4IDg3MTczMTk5ZmZhZGYwMWYzZGQyNjMyODk0ZjQxZmM0ZmZiN2Y2NzIuLjZmYmZjNmIx
MDg1M2JhZmY2NjdlMzNhMDk1NjFjMTU2NWZjZTZhZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50
SXRlcmF0b3IuY3BwCkBAIC00OCw3ICs0OCw4IEBAIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHls
ZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogCiBUZXh0RnJhZ21lbnRJdGVyYXRv
cjo6VGV4dEZyYWdtZW50SXRlcmF0b3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQogICAg
IDogbV9mbG93Q29udGVudHMoZmxvdykKLSAgICAsIG1fbGluZUJyZWFrSXRlcmF0b3IoKCptX2Zs
b3dDb250ZW50cy5iZWdpbigpKS50ZXh0LCBmbG93LnN0eWxlKCkubG9jYWxlKCkpCisgICAgLCBt
X2Zsb3dDb250ZW50c0l0ZXJhdG9yKG1fZmxvd0NvbnRlbnRzLmJlZ2luKCkpCisgICAgLCBtX2xp
bmVCcmVha0l0ZXJhdG9yKCgqbV9mbG93Q29udGVudHNJdGVyYXRvcikudGV4dCwgZmxvdy5zdHls
ZSgpLmxvY2FsZSgpKQogICAgICwgbV9zdHlsZShmbG93LnN0eWxlKCkpCiB7CiB9CkBAIC02NCwy
MyArNjUsNTcgQEAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBUZXh0RnJhZ21l
bnRJdGVyYXRvcjo6bmV4dFRleHRGcmFnbWVudChmbG9hdAogICAgICAgICByZXR1cm4gVGV4dEZy
YWdtZW50KG1fcG9zaXRpb24sIG1fcG9zaXRpb24sIDAsIFRleHRGcmFnbWVudDo6Q29udGVudEVu
ZCk7CiAgICAgaWYgKGlzTGluZUJyZWFrKG1fcG9zaXRpb24pKSB7CiAgICAgICAgIFRleHRGcmFn
bWVudCBmcmFnbWVudChtX3Bvc2l0aW9uLCBtX3Bvc2l0aW9uICsgMSwgMCwgVGV4dEZyYWdtZW50
OjpMaW5lQnJlYWspOwotICAgICAgICArK21fcG9zaXRpb247CisgICAgICAgIGlmICgrK21fcG9z
aXRpb24gPT0gKCptX2Zsb3dDb250ZW50c0l0ZXJhdG9yKS5lbmQpCisgICAgICAgICAgICArK21f
Zmxvd0NvbnRlbnRzSXRlcmF0b3I7CiAgICAgICAgIHJldHVybiBmcmFnbWVudDsKICAgICB9Cisg
ICAgZmxvYXQgd2lkdGggPSAwOwogICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBtX3Bvc2l0
aW9uOwotICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc2tpcFRvTmV4dFBvc2l0aW9uKFBvc2l0
aW9uVHlwZTo6Tm9uV2hpdGVzcGFjZSwgc3RhcnRQb3NpdGlvbik7CisgICAgdW5zaWduZWQgZW5k
UG9zaXRpb24gPSBza2lwVG9OZXh0UG9zaXRpb24oUG9zaXRpb25UeXBlOjpOb25XaGl0ZXNwYWNl
LCBzdGFydFBvc2l0aW9uLCB3aWR0aCwgeFBvc2l0aW9uKTsKICAgICBBU1NFUlQoc3RhcnRQb3Np
dGlvbiA8PSBlbmRQb3NpdGlvbik7CiAgICAgaWYgKGVuZFBvc2l0aW9uID4gc3RhcnRQb3NpdGlv
bikgewogICAgICAgICBib29sIG11bHRpcGxlV2hpdGVzcGFjZSA9IHN0YXJ0UG9zaXRpb24gKyAx
IDwgZW5kUG9zaXRpb247CiAgICAgICAgIGJvb2wgaXNDb2xsYXBzZWQgPSBtdWx0aXBsZVdoaXRl
c3BhY2UgJiYgbV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2U7CiAgICAgICAgIGJvb2wgaXNCcmVh
a2FibGUgPSAhaXNDb2xsYXBzZWQgJiYgbXVsdGlwbGVXaGl0ZXNwYWNlOwotICAgICAgICBmbG9h
dCB3aWR0aCA9IGlzQ29sbGFwc2VkID8gbV9zdHlsZS5zcGFjZVdpZHRoIDogdGV4dFdpZHRoKHN0
YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB4UG9zaXRpb24pOwogICAgICAgICBtX3Bvc2l0aW9u
ID0gZW5kUG9zaXRpb247CiAgICAgICAgIHJldHVybiBUZXh0RnJhZ21lbnQoc3RhcnRQb3NpdGlv
biwgZW5kUG9zaXRpb24sIHdpZHRoLCBUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UsIGlzQ29sbGFw
c2VkLCBpc0JyZWFrYWJsZSk7CiAgICAgfQotICAgIGVuZFBvc2l0aW9uID0gc2tpcFRvTmV4dFBv
c2l0aW9uKFBvc2l0aW9uVHlwZTo6QnJlYWthYmxlLCBzdGFydFBvc2l0aW9uICsgMSk7CisgICAg
ZW5kUG9zaXRpb24gPSBza2lwVG9OZXh0UG9zaXRpb24oUG9zaXRpb25UeXBlOjpCcmVha2FibGUs
IHN0YXJ0UG9zaXRpb24sIHdpZHRoLCB4UG9zaXRpb24pOwogICAgIG1fcG9zaXRpb24gPSBlbmRQ
b3NpdGlvbjsKLSAgICByZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0
aW9uLCB0ZXh0V2lkdGgoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHhQb3NpdGlvbiksIFRl
eHRGcmFnbWVudDo6Tm9uV2hpdGVzcGFjZSwgZmFsc2UsIG1fc3R5bGUuYnJlYWtXb3JkT25PdmVy
Zmxvdyk7CisgICAgcmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlv
biwgd2lkdGgsIFRleHRGcmFnbWVudDo6Tm9uV2hpdGVzcGFjZSwgZmFsc2UsIG1fc3R5bGUuYnJl
YWtXb3JkT25PdmVyZmxvdyk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PgordW5zaWduZWQgVGV4dEZyYWdtZW50SXRlcmF0b3I6Om5leHRCcmVha2FibGVQb3NpdGlvbihj
b25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIHNlZ21lbnQsIHVuc2lnbmVkIHN0YXJ0UG9zaXRp
b24pCit7CisgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24gPCBzZWdtZW50LmVuZCk7CisgICAgaWYg
KHNlZ21lbnQudGV4dC5pbXBsKCkgIT0gbV9saW5lQnJlYWtJdGVyYXRvci5zdHJpbmcoKS5pbXBs
KCkpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBjdXJyZW50VGV4dCA9IG1fbGluZUJyZWFrSXRl
cmF0b3Iuc3RyaW5nKCk7CisgICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSBjdXJyZW50VGV4
dC5sZW5ndGgoKTsKKyAgICAgICAgVUNoYXIgbGFzdENoYXJhY3RlciA9IHRleHRMZW5ndGggPiAw
ID8gY3VycmVudFRleHRbdGV4dExlbmd0aCAtIDFdIDogMDsKKyAgICAgICAgVUNoYXIgc2Vjb25k
VG9MYXN0Q2hhcmFjdGVyID0gdGV4dExlbmd0aCA+IDEgPyBjdXJyZW50VGV4dFt0ZXh0TGVuZ3Ro
IC0gMl0gOiAwOworICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnNldFByaW9yQ29udGV4dChs
YXN0Q2hhcmFjdGVyLCBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIpOworICAgICAgICBtX2xpbmVCcmVh
a0l0ZXJhdG9yLnJlc2V0U3RyaW5nQW5kUmVsZWFzZUl0ZXJhdG9yKHNlZ21lbnQudGV4dCwgbV9z
dHlsZS5sb2NhbGUsIExpbmVCcmVha0l0ZXJhdG9yTW9kZVVBWDE0KTsKKyAgICB9CisgICAgY29u
c3QgYXV0byogY2hhcmFjdGVycyA9IHNlZ21lbnQudGV4dC5jaGFyYWN0ZXJzPENoYXJhY3RlclR5
cGU+KCk7CisgICAgdW5zaWduZWQgc2VnbWVudExlbmd0aCA9IHNlZ21lbnQuZW5kIC0gc2VnbWVu
dC5zdGFydDsKKyAgICB1bnNpZ25lZCBzZWdtZW50UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uIC0g
c2VnbWVudC5zdGFydDsKKyAgICByZXR1cm4gc2VnbWVudC5zdGFydCArIG5leHRCcmVha2FibGVQ
b3NpdGlvbk5vbkxvb3NlbHk8Q2hhcmFjdGVyVHlwZSwgTkJTUEJlaGF2aW9yOjpJZ25vcmVOQlNQ
PihtX2xpbmVCcmVha0l0ZXJhdG9yLCBjaGFyYWN0ZXJzLCBzZWdtZW50TGVuZ3RoLCBzZWdtZW50
UG9zaXRpb24pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3Vuc2ln
bmVkIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpuZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKGNvbnN0
IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2VnbWVudCwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbikK
K3sKKyAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8IHNlZ21lbnQuZW5kKTsKKyAgICBjb25zdCBh
dXRvKiB0ZXh0ID0gc2VnbWVudC50ZXh0LmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsKKyAg
ICB1bnNpZ25lZCBwb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247CisgICAgZm9yICg7IHBvc2l0aW9u
IDwgc2VnbWVudC5lbmQ7ICsrcG9zaXRpb24pIHsKKyAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSB0
ZXh0W3Bvc2l0aW9uIC0gc2VnbWVudC5zdGFydF07CisgICAgICAgIGJvb2wgaXNXaGl0ZXNwYWNl
ID0gY2hhcmFjdGVyID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JyB8fCAoIW1fc3R5bGUucHJl
c2VydmVOZXdsaW5lICYmIGNoYXJhY3RlciA9PSAnXG4nKTsKKyAgICAgICAgaWYgKCFpc1doaXRl
c3BhY2UpCisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CisgICAgfQorICAgIHJldHVybiBw
b3NpdGlvbjsKIH0KIAogZmxvYXQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OnRleHRXaWR0aCh1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdApAQCAtOTUsOCAr
MTMwLDcgQEAgZmxvYXQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OnRleHRXaWR0aCh1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW8KICAgICB1bnNpZ25lZCBmcmFnbWVudEVu
ZCA9IDA7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgZnJhZ21lbnRFbmQgPSBzdGQ6Om1p
bih0bywgc2VnbWVudC0+ZW5kKTsKLSAgICAgICAgdGV4dFdpZHRoICs9IHNlZ21lbnQtPnRleHQu
aXM4Qml0KCkgPyBydW5XaWR0aDxMQ2hhcj4oc2VnbWVudC0+dGV4dCwgZnJvbSAtIHNlZ21lbnQt
PnN0YXJ0LCBmcmFnbWVudEVuZCAtIHNlZ21lbnQtPnN0YXJ0LCB4UG9zaXRpb24gKyB0ZXh0V2lk
dGgpIDoKLSAgICAgICAgICAgIHJ1bldpZHRoPFVDaGFyPihzZWdtZW50LT50ZXh0LCBmcm9tIC0g
c2VnbWVudC0+c3RhcnQsIGZyYWdtZW50RW5kIC0gc2VnbWVudC0+c3RhcnQsIHhQb3NpdGlvbiAr
IHRleHRXaWR0aCk7CisgICAgICAgIHRleHRXaWR0aCArPSBzZWdtZW50LT50ZXh0LmlzOEJpdCgp
ID8gcnVuV2lkdGg8TENoYXI+KCpzZWdtZW50LCBmcm9tLCBmcmFnbWVudEVuZCwgeFBvc2l0aW9u
ICsgdGV4dFdpZHRoKSA6IHJ1bldpZHRoPFVDaGFyPigqc2VnbWVudCwgZnJvbSwgZnJhZ21lbnRF
bmQsIHhQb3NpdGlvbiArIHRleHRXaWR0aCk7CiAgICAgICAgIGlmIChmcmFnbWVudEVuZCA9PSB0
bykKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBmcm9tID0gZnJhZ21lbnRFbmQ7CkBAIC0x
MDYsNjkgKzE0MCw2NCBAQCBmbG9hdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6dGV4dFdpZHRoKHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpbwogICAgIHJldHVybiB0ZXh0
V2lkdGg7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIHVu
c2lnbmVkIG5leHRCcmVha2FibGVQb3NpdGlvbihMYXp5TGluZUJyZWFrSXRlcmF0b3ImIGxpbmVC
cmVha0l0ZXJhdG9yLCBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIHNlZ21lbnQsIHVuc2ln
bmVkIHN0YXJ0UG9zaXRpb24pCi17Ci0gICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbk5v
bkxvb3NlbHk8Q2hhcmFjdGVyVHlwZSwgTkJTUEJlaGF2aW9yOjpJZ25vcmVOQlNQPihsaW5lQnJl
YWtJdGVyYXRvciwgc2VnbWVudC50ZXh0LmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSwgc2Vn
bWVudC5lbmQgLSBzZWdtZW50LnN0YXJ0LCBzdGFydFBvc2l0aW9uKTsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgdW5zaWduZWQgbmV4dE5vbldoaXRlc3Bh
Y2VQb3NpdGlvbihjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIHNlZ21lbnQsIHVuc2lnbmVk
IHN0YXJ0UG9zaXRpb24sIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUp
Ci17Ci0gICAgY29uc3QgYXV0byogdGV4dCA9IHNlZ21lbnQudGV4dC5jaGFyYWN0ZXJzPENoYXJh
Y3RlclR5cGU+KCk7Ci0gICAgdW5zaWduZWQgcG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOwotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHNlZ21lbnQuZW5kIC0gc2VnbWVudC5zdGFydDsKLSAgICBmb3Ig
KDsgcG9zaXRpb24gPCBsZW5ndGg7ICsrcG9zaXRpb24pIHsKLSAgICAgICAgYXV0byBjaGFyYWN0
ZXIgPSB0ZXh0W3Bvc2l0aW9uXTsKLSAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UgPSBjaGFyYWN0
ZXIgPT0gJyAnIHx8IGNoYXJhY3RlciA9PSAnXHQnIHx8ICghc3R5bGUucHJlc2VydmVOZXdsaW5l
ICYmIGNoYXJhY3RlciA9PSAnXG4nKTsKLSAgICAgICAgaWYgKCFpc1doaXRlc3BhY2UpCi0gICAg
ICAgICAgICByZXR1cm4gcG9zaXRpb247Ci0gICAgfQotICAgIHJldHVybiBwb3NpdGlvbjsKLX0K
LQotdW5zaWduZWQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OnNraXBUb05leHRQb3NpdGlvbihQb3Np
dGlvblR5cGUgcG9zaXRpb25UeXBlLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKSBjb25zdAordW5z
aWduZWQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OnNraXBUb05leHRQb3NpdGlvbihQb3NpdGlvblR5
cGUgcG9zaXRpb25UeXBlLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCBmbG9hdCYgd2lkdGgsIGZs
b2F0IHhQb3NpdGlvbikKIHsKKyAgICB3aWR0aCA9IDA7CiAgICAgaWYgKGlzRW5kKHN0YXJ0UG9z
aXRpb24pKQogICAgICAgICByZXR1cm4gc3RhcnRQb3NpdGlvbjsKIAogICAgIHVuc2lnbmVkIGN1
cnJlbnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247Ci0gICAgRmxvd0NvbnRlbnRzOjpJdGVyYXRv
ciBpdChtX2Zsb3dDb250ZW50cywgbV9mbG93Q29udGVudHMuc2VnbWVudEluZGV4Rm9yUG9zaXRp
b24oY3VycmVudFBvc2l0aW9uKSk7Ci0gICAgZm9yIChhdXRvIGVuZCA9IG1fZmxvd0NvbnRlbnRz
LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgYXV0byYgc2VnbWVudCA9ICppdDsK
LSAgICAgICAgdW5zaWduZWQgY3VycmVudFBvc2l0b25SZWxhdGl2ZVRvU2VnbWVudCA9IGN1cnJl
bnRQb3NpdGlvbiAtIHNlZ21lbnQuc3RhcnQ7Ci0gICAgICAgIHVuc2lnbmVkIG5leHRQb3NpdGlv
blJlbGF0aXZlVG9TZWdtZW50ID0gMDsKLSAgICAgICAgaWYgKHBvc2l0aW9uVHlwZSA9PSBOb25X
aGl0ZXNwYWNlKSB7Ci0gICAgICAgICAgICBuZXh0UG9zaXRpb25SZWxhdGl2ZVRvU2VnbWVudCA9
IHNlZ21lbnQudGV4dC5pczhCaXQoKSA/IG5leHROb25XaGl0ZXNwYWNlUG9zaXRpb248TENoYXI+
KHNlZ21lbnQsIGN1cnJlbnRQb3NpdG9uUmVsYXRpdmVUb1NlZ21lbnQsIG1fc3R5bGUpIDoKLSAg
ICAgICAgICAgICAgICBuZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uPFVDaGFyPihzZWdtZW50LCBj
dXJyZW50UG9zaXRvblJlbGF0aXZlVG9TZWdtZW50LCBtX3N0eWxlKTsKLSAgICAgICAgfSBlbHNl
IGlmIChwb3NpdGlvblR5cGUgPT0gQnJlYWthYmxlKSB7Ci0gICAgICAgICAgICBpZiAoc2VnbWVu
dC50ZXh0LmltcGwoKSAhPSBtX2xpbmVCcmVha0l0ZXJhdG9yLnN0cmluZygpLmltcGwoKSkgewot
ICAgICAgICAgICAgICAgIFVDaGFyIGxhc3RDaGFyYWN0ZXIgPSBzZWdtZW50LnN0YXJ0ID4gMCA/
IGNoYXJhY3RlckF0KHNlZ21lbnQuc3RhcnQgLSAxKSA6IDA7Ci0gICAgICAgICAgICAgICAgVUNo
YXIgc2Vjb25kVG9MYXN0Q2hhcmFjdGVyID0gc2VnbWVudC5zdGFydCA+IDEgPyBjaGFyYWN0ZXJB
dChzZWdtZW50LnN0YXJ0IC0gMikgOiAwOwotICAgICAgICAgICAgICAgIG1fbGluZUJyZWFrSXRl
cmF0b3Iuc2V0UHJpb3JDb250ZXh0KGxhc3RDaGFyYWN0ZXIsIHNlY29uZFRvTGFzdENoYXJhY3Rl
cik7Ci0gICAgICAgICAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5yZXNldFN0cmluZ0FuZFJl
bGVhc2VJdGVyYXRvcihzZWdtZW50LnRleHQsIG1fc3R5bGUubG9jYWxlLCBMaW5lQnJlYWtJdGVy
YXRvck1vZGVVQVgxNCk7CisgICAgYXV0byBlbmQgPSBtX2Zsb3dDb250ZW50cy5lbmQoKTsKKyAg
ICBib29sIG5leHRCcmVha2FibGVQb3NpdGlvbk1pZ2h0TmVlZEFkanVzdG1lbnQgPSB0cnVlOwor
ICAgIC8vIENvbGxhcHNlZCB3aGl0ZXNwYWNlIGhhcyBjb25zdGFudCB3aWR0aC4gRG8gbm90IG1l
YXN1cmUgaXQuCisgICAgYm9vbCBtZWFzdXJlVGV4dCA9IHBvc2l0aW9uVHlwZSAhPSBOb25XaGl0
ZXNwYWNlIHx8ICFtX3N0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZTsKKyAgICB3aGlsZSAobV9mbG93
Q29udGVudHNJdGVyYXRvciAhPSBlbmQpIHsKKyAgICAgICAgYXV0byYgc2VnbWVudCA9ICptX2Zs
b3dDb250ZW50c0l0ZXJhdG9yOworICAgICAgICB1bnNpZ25lZCBuZXh0UG9zaXRpb24gPSBjdXJy
ZW50UG9zaXRpb247CisKKyAgICAgICAgaWYgKHBvc2l0aW9uVHlwZSA9PSBOb25XaGl0ZXNwYWNl
KQorICAgICAgICAgICAgbmV4dFBvc2l0aW9uID0gc2VnbWVudC50ZXh0LmlzOEJpdCgpID8gbmV4
dE5vbldoaXRlc3BhY2VQb3NpdGlvbjxMQ2hhcj4oc2VnbWVudCwgY3VycmVudFBvc2l0aW9uKSA6
IG5leHROb25XaGl0ZXNwYWNlUG9zaXRpb248VUNoYXI+KHNlZ21lbnQsIGN1cnJlbnRQb3NpdGlv
bik7CisgICAgICAgIGVsc2UgaWYgKHBvc2l0aW9uVHlwZSA9PSBCcmVha2FibGUpIHsKKyAgICAg
ICAgICAgIC8vIG5leHRCcmVha2FibGVQb3NpdGlvbiByZXR1cm5zIHRoZSBzYW1lIHBvc2l0aW9u
IGZvciBjZXJ0YWluIGNoYXJhY3RlcnMgc3VjaCBhcyBoeXBoZW5zLiBDYWxsIG5leHQgYWdhaW4g
d2l0aCBtb2RpZmllZCBwb3NpdGlvbiB1bmxlc3MgaXQncyB0aGUgZW5kIG9mIHRoZSBzZWdtZW50
LgorICAgICAgICAgICAgbmV4dFBvc2l0aW9uID0gc2VnbWVudC50ZXh0LmlzOEJpdCgpID8gbmV4
dEJyZWFrYWJsZVBvc2l0aW9uPExDaGFyPihzZWdtZW50LCBjdXJyZW50UG9zaXRpb24pIDogbmV4
dEJyZWFrYWJsZVBvc2l0aW9uPFVDaGFyPihzZWdtZW50LCBjdXJyZW50UG9zaXRpb24pOworICAg
ICAgICAgICAgaWYgKG5leHRQb3NpdGlvbiA9PSBjdXJyZW50UG9zaXRpb24gJiYgbmV4dEJyZWFr
YWJsZVBvc2l0aW9uTWlnaHROZWVkQWRqdXN0bWVudCkgeworICAgICAgICAgICAgICAgIGlmICgr
K25leHRQb3NpdGlvbiA8IHNlZ21lbnQuZW5kKQorICAgICAgICAgICAgICAgICAgICBuZXh0UG9z
aXRpb24gPSBzZWdtZW50LnRleHQuaXM4Qml0KCkgPyBuZXh0QnJlYWthYmxlUG9zaXRpb248TENo
YXI+KHNlZ21lbnQsIGN1cnJlbnRQb3NpdGlvbiArIDEpIDogbmV4dEJyZWFrYWJsZVBvc2l0aW9u
PFVDaGFyPihzZWdtZW50LCBjdXJyZW50UG9zaXRpb24gKyAxKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIG5leHRQb3NpdGlvblJlbGF0aXZlVG9TZWdtZW50ID0gc2VnbWVudC50ZXh0Lmlz
OEJpdCgpID8gbmV4dEJyZWFrYWJsZVBvc2l0aW9uPExDaGFyPihtX2xpbmVCcmVha0l0ZXJhdG9y
LCBzZWdtZW50LCBjdXJyZW50UG9zaXRvblJlbGF0aXZlVG9TZWdtZW50KSA6Ci0gICAgICAgICAg
ICAgICAgbmV4dEJyZWFrYWJsZVBvc2l0aW9uPFVDaGFyPihtX2xpbmVCcmVha0l0ZXJhdG9yLCBz
ZWdtZW50LCBjdXJyZW50UG9zaXRvblJlbGF0aXZlVG9TZWdtZW50KTsKKyAgICAgICAgICAgIG5l
eHRCcmVha2FibGVQb3NpdGlvbk1pZ2h0TmVlZEFkanVzdG1lbnQgPSBmYWxzZTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgY3VycmVu
dFBvc2l0aW9uID0gc2VnbWVudC5zdGFydCArIG5leHRQb3NpdGlvblJlbGF0aXZlVG9TZWdtZW50
OworICAgICAgICBpZiAobmV4dFBvc2l0aW9uID09IGN1cnJlbnRQb3NpdGlvbikKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBpZiAobWVhc3VyZVRleHQpIHsKKyAgICAgICAgICAgIGZsb2F0
IHRleHRXaWR0aCA9IHNlZ21lbnQudGV4dC5pczhCaXQoKSA/IHJ1bldpZHRoPExDaGFyPihzZWdt
ZW50LCBjdXJyZW50UG9zaXRpb24sIG5leHRQb3NpdGlvbiwgeFBvc2l0aW9uKSA6IHJ1bldpZHRo
PFVDaGFyPihzZWdtZW50LCBjdXJyZW50UG9zaXRpb24sIG5leHRQb3NpdGlvbiwgeFBvc2l0aW9u
KTsKKyAgICAgICAgICAgIHhQb3NpdGlvbiArPSB0ZXh0V2lkdGg7CisgICAgICAgICAgICB3aWR0
aCArPSB0ZXh0V2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudFBvc2l0aW9uID0gbmV4
dFBvc2l0aW9uOworICAgICAgICAvLyBTa2lwIHRvIHRoZSBuZXh0IHNlZ21lbnQ/CiAgICAgICAg
IGlmIChjdXJyZW50UG9zaXRpb24gPCBzZWdtZW50LmVuZCkKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICArK21fZmxvd0NvbnRlbnRzSXRlcmF0b3I7CiAgICAgfQorICAgIEFTU0VSVChzdGFy
dFBvc2l0aW9uIDw9IGN1cnJlbnRQb3NpdGlvbik7CisgICAgaWYgKCFtZWFzdXJlVGV4dCAmJiBz
dGFydFBvc2l0aW9uIDwgY3VycmVudFBvc2l0aW9uKQorICAgICAgICB3aWR0aCA9IG1fc3R5bGUu
c3BhY2VXaWR0aDsKICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9uOwogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWZsb2F0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpydW5X
aWR0aChjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9h
dCB4UG9zaXRpb24pIGNvbnN0CitmbG9hdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6cnVuV2lkdGgo
Y29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBzZWdtZW50LCB1bnNpZ25lZCBzdGFydFBvc2l0
aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbiwgZmxvYXQgeFBvc2l0aW9uKSBjb25zdAogewotICAg
IEFTU0VSVChmcm9tIDw9IHRvKTsKLSAgICBpZiAoZnJvbSA9PSB0bykKKyAgICBBU1NFUlQoc3Rh
cnRQb3NpdGlvbiA8PSBlbmRQb3NpdGlvbik7CisgICAgaWYgKHN0YXJ0UG9zaXRpb24gPT0gZW5k
UG9zaXRpb24pCiAgICAgICAgIHJldHVybiAwOwotICAgIGJvb2wgbWVhc3VyZVdpdGhFbmRTcGFj
ZSA9IG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlICYmIHRvIDwgdGV4dC5sZW5ndGgoKSAmJiB0
ZXh0W3RvXSA9PSAnICc7CisgICAgdW5zaWduZWQgc2VnbWVudEZyb20gPSBzdGFydFBvc2l0aW9u
IC0gc2VnbWVudC5zdGFydDsKKyAgICB1bnNpZ25lZCBzZWdtZW50VG8gPSBlbmRQb3NpdGlvbiAt
IHNlZ21lbnQuc3RhcnQ7CisgICAgYm9vbCBtZWFzdXJlV2l0aEVuZFNwYWNlID0gbV9zdHlsZS5j
b2xsYXBzZVdoaXRlc3BhY2UgJiYgc2VnbWVudFRvIDwgc2VnbWVudC50ZXh0Lmxlbmd0aCgpICYm
IHNlZ21lbnQudGV4dFtzZWdtZW50VG9dID09ICcgJzsKICAgICBpZiAobWVhc3VyZVdpdGhFbmRT
cGFjZSkKLSAgICAgICAgKyt0bzsKLSAgICBUZXh0UnVuIHJ1bih0ZXh0LmNoYXJhY3RlcnM8Q2hh
cmFjdGVyVHlwZT4oKSArIGZyb20sIHRvIC0gZnJvbSk7CisgICAgICAgICsrc2VnbWVudFRvOwor
ICAgIFRleHRSdW4gcnVuKHNlZ21lbnQudGV4dC5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkg
KyBzZWdtZW50RnJvbSwgc2VnbWVudFRvIC0gc2VnbWVudEZyb20pOwogICAgIHJ1bi5zZXRYUG9z
KHhQb3NpdGlvbik7CiAgICAgcnVuLnNldFRhYlNpemUoISFtX3N0eWxlLnRhYldpZHRoLCBtX3N0
eWxlLnRhYldpZHRoKTsKICAgICBmbG9hdCB3aWR0aCA9IG1fc3R5bGUuZm9udC53aWR0aChydW4p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRU
ZXh0RnJhZ21lbnRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oCmluZGV4IGM4YzFlYjQzM2RhNTQxYTBkZTBl
YjQwNTM4YjljZThjZTU5NGIwMGMuLmNiZGUzOTMyNTNiZWNmOWI3Yzg4ZDc4YmExMjg4MjM4ZTY3
MTVhMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmgKQEAgLTcyLDcgKzcyLDcgQEAg
cHVibGljOgogICAgICAgICBib29sIG1faXNCcmVha2FibGUgeyBmYWxzZSB9OwogICAgIH07CiAg
ICAgVGV4dEZyYWdtZW50IG5leHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uID0gMCk7Ci0g
ICAgZmxvYXQgdGV4dFdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9z
aXRpb24pIGNvbnN0OworICAgIGZsb2F0IHRleHRXaWR0aCh1bnNpZ25lZCBzdGFydFBvc2l0aW9u
LCB1bnNpZ25lZCBlbmRQb3NpdGlvbiwgZmxvYXQgeFBvc2l0aW9uKSBjb25zdDsKIAogICAgIHN0
cnVjdCBTdHlsZSB7CiAgICAgICAgIGV4cGxpY2l0IFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJik7
CkBAIC05MywxNCArOTMsMTYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGVudW0gUG9zaXRp
b25UeXBlIHsgQnJlYWthYmxlLCBOb25XaGl0ZXNwYWNlIH07Ci0gICAgdW5zaWduZWQgc2tpcFRv
TmV4dFBvc2l0aW9uKFBvc2l0aW9uVHlwZSwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbikgY29uc3Q7
Ci0gICAgVUNoYXIgY2hhcmFjdGVyQXQodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIHVu
c2lnbmVkIHNraXBUb05leHRQb3NpdGlvbihQb3NpdGlvblR5cGUsIHVuc2lnbmVkIHN0YXJ0UG9z
aXRpb24sIGZsb2F0JiB3aWR0aCwgZmxvYXQgeFBvc2l0aW9uKTsKICAgICBib29sIGlzTGluZUJy
ZWFrKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKICAgICBib29sIGlzRW5kKHVuc2lnbmVkIHBv
c2l0aW9uKSBjb25zdDsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gZmxv
YXQgcnVuV2lkdGgoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZs
b2F0IHhQb3NpdGlvbikgY29uc3Q7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHVuc2lnbmVkIG5leHRCcmVha2FibGVQb3NpdGlvbihjb25zdCBGbG93Q29udGVudHM6OlNl
Z21lbnQmLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gdW5zaWduZWQgbmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihjb25zdCBG
bG93Q29udGVudHM6OlNlZ21lbnQmLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKTsKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gZmxvYXQgcnVuV2lkdGgoY29uc3QgRmxvd0Nv
bnRlbnRzOjpTZWdtZW50JiwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9z
aXRpb24sIGZsb2F0IHhQb3NpdGlvbikgY29uc3Q7CiAKICAgICBGbG93Q29udGVudHMgbV9mbG93
Q29udGVudHM7Ci0gICAgbXV0YWJsZSBMYXp5TGluZUJyZWFrSXRlcmF0b3IgbV9saW5lQnJlYWtJ
dGVyYXRvcjsKKyAgICBGbG93Q29udGVudHM6Okl0ZXJhdG9yIG1fZmxvd0NvbnRlbnRzSXRlcmF0
b3I7CisgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIG1fbGluZUJyZWFrSXRlcmF0b3I7CiAgICAg
Y29uc3QgU3R5bGUgbV9zdHlsZTsKICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIHsgMCB9OwogfTsK
QEAgLTEyNywxNyArMTI5LDEyIEBAIGlubGluZSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZy
YWdtZW50IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OnNwCiAgICAgcmV0dXJu
IG5ld0ZyYWdtZW50OwogfQogCi1pbmxpbmUgVUNoYXIgVGV4dEZyYWdtZW50SXRlcmF0b3I6OmNo
YXJhY3RlckF0KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAotewotICAgIGF1dG8mIHNlZ21lbnQg
PSBtX2Zsb3dDb250ZW50cy5zZWdtZW50Rm9yUG9zaXRpb24ocG9zaXRpb24pOwotICAgIHJldHVy
biBzZWdtZW50LnRleHRbcG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0XTsKLX0KLQogaW5saW5lIGJv
b2wgVGV4dEZyYWdtZW50SXRlcmF0b3I6OmlzTGluZUJyZWFrKHVuc2lnbmVkIHBvc2l0aW9uKSBj
b25zdAogewotICAgIGlmIChpc0VuZChwb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gbV9zdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVyQXQocG9zaXRp
b24pID09ICdcbic7CisgICAgQVNTRVJUKCFpc0VuZChwb3NpdGlvbikpOworICAgIGF1dG8mIHNl
Z21lbnQgPSAqbV9mbG93Q29udGVudHNJdGVyYXRvcjsKKyAgICBBU1NFUlQoc2VnbWVudC5zdGFy
dCA8PSBwb3NpdGlvbiAmJiBwb3NpdGlvbiA8IHNlZ21lbnQuZW5kKTsKKyAgICByZXR1cm4gbV9z
dHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYgc2VnbWVudC50ZXh0W3Bvc2l0aW9uIC0gc2VnbWVudC5z
dGFydF0gPT0gJ1xuJzsKIH0KIAogaW5saW5lIGJvb2wgVGV4dEZyYWdtZW50SXRlcmF0b3I6Omlz
RW5kKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248615</attachid>
            <date>2015-03-13 16:04:31 -0700</date>
            <delta_ts>2015-03-16 21:15:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142579-20150313160404.patch</filename>
            <type>text/plain</type>
            <size>35617</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGRmYTgyNjUxYzNjZjg4
MTdlZmFmZDU4M2JjOGQ3OTk1NGUwMjcyNy4uNGVjZmU2ZDI2ODllNjM5MzlhMmU3MjQ2NDM4NWEy
NTkwNDEyNjNmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE1LTAzLTExICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBTcGxpdCBmcmFnbWVudHMgb24gcmVuZGVyZXIgYm91bmRhcnkgb24gdGhlIGZseS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50SXRl
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50
SXRlcmF0b3I6Om5leHRUZXh0RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGlu
ZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6Om5leHRCcmVha2FibGVQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVyYXRvcjo6
bmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5l
TGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVyYXRvcjo6dGV4dFdpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpza2lwVG9OZXh0UG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50
SXRlcmF0b3I6OnJ1bldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6
Om5leHRCcmVha2FibGVQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpuZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVyYXRvcjo6
aXNMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZy
YWdtZW50SXRlcmF0b3I6OmNoYXJhY3RlckF0KTogRGVsZXRlZC4KKwogMjAxNS0wMy0xMCAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsZSBsaW5lIGxheW91
dDogTWVyZ2UgVGV4dEZyYWdtZW50SXRlcmF0b3I6OmZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24o
KSBhbmQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OmZpbmROZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9u
KCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKaW5k
ZXggOTY5YWI0YTI4NDg0MDY1YTM2MTc0OWI1YjMyYWNjZDBlMDNlNjU3Yi4uMWZiOWUyOTAxNjQ2
NGM5ZDM3MTUyNGJhOTljOWVjYWRhNjAyNDA2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcApAQCAtMjM0LDYgKzIzNCw3IEBAIHN0YXRpYyBmbG9h
dCBjb21wdXRlTGluZUxlZnQoRVRleHRBbGlnbiB0ZXh0QWxpZ24sIGZsb2F0IGF2YWlsYWJsZVdp
ZHRoLCBmbG9hdCBjCiBjbGFzcyBMaW5lU3RhdGUgewogcHVibGljOgogICAgIHZvaWQgc2V0QXZh
aWxhYmxlV2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9hdmFpbGFibGVXaWR0aCA9IHdpZHRoOyB9Cisg
ICAgdm9pZCBzZXRDb2xsYXBlZFdoaXRlc3BhY2VXaWR0aChmbG9hdCB3aWR0aCkgeyBtX2NvbGxh
cHNlZFdoaXRlc3BhY2VXaWR0aCA9IHdpZHRoOyB9CiAgICAgdm9pZCBzZXRMb2dpY2FsTGVmdE9m
ZnNldChmbG9hdCBvZmZzZXQpIHsgbV9sb2dpY2FsTGVmdE9mZnNldCA9IG9mZnNldDsgfQogICAg
IHZvaWQgc2V0T3ZlcmZsb3dlZEZyYWdtZW50KGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQmIGZyYWdtZW50KSB7IG1fb3ZlcmZsb3dlZEZyYWdtZW50ID0gZnJhZ21lbnQ7
IH0KIApAQCAtMjQxLDI1ICsyNDIsNTIgQEAgcHVibGljOgogICAgIGZsb2F0IGxvZ2ljYWxMZWZ0
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsTGVmdE9mZnNldDsgfQogICAgIGNvbnN0
IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIG92ZXJmbG93ZWRGcmFnbWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3dlZEZyYWdtZW50OyB9CiAgICAgYm9vbCBoYXNUcmFp
bGluZ1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0
aDsgfQorICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgbGFzdEZyYWdtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudHMubGFzdCgpOyB9CiAgICAgYm9vbCBpc1doaXRl
c3BhY2VPbmx5KCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCAmJiBt
X3J1bnNXaWR0aCA9PSBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoOyB9CiAgICAgYm9vbCBmaXRz
KGZsb2F0IGV4dHJhKSBjb25zdCB7IHJldHVybiBtX2F2YWlsYWJsZVdpZHRoID49IG1fcnVuc1dp
ZHRoICsgZXh0cmE7IH0KICAgICBib29sIGZpcnN0Q2hhcmFjdGVyRml0cygpIGNvbnN0IHsgcmV0
dXJuIG1fZmlyc3RDaGFyYWN0ZXJGaXRzOyB9CiAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX3J1bnNXaWR0aDsgfQorICAgIGJvb2wgaXNGaXJzdEZyYWdtZW50KGNvbnN0IFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKCFtX3J1bnNXaWR0aCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAvLyBDaGVjayBpZiB0aGlzIGZyYWdtZW50IGlzIGEgY29udGludWFpdG9uIG9mIGEgdGV4dC4g
SXMgc3VjaCBjYXNlcywgdGhpcyBmcmFnbWVudCBpcyBjb25zaWRyZWQgdG8gYmUgdGhlIGZpcnN0
IG9uIHRoZSBsaW5lCisgICAgICAgIC8vIGV2ZW4gaWYgdGhlcmUgYXJlIGFscmVhZHkgZnJhZ21l
bnRzIG9uIHRoaXMgbGluZS4KKyAgICAgICAgZm9yIChpbnQgaSA9IG1fZnJhZ21lbnRzLnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBpZiAoIW1fZnJhZ21lbnRzW2ldLmlz
TGFzdEluUmVuZGVyZXIoKSB8fCBtX2ZyYWdtZW50c1tpXS50eXBlKCkgIT0gZnJhZ21lbnQudHlw
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICB2b2lkIGFwcGVuZEZyYWdtZW50KGNvbnN0IFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBMYXlvdXQ6OlJ1blZlY3Rv
ciYgcnVucykKICAgICB7CiAgICAgICAgIC8vIEFkanVzdCBlbmQgcG9zaXRpb24gd2hpbGUgY29s
bGFwc2luZy4KICAgICAgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBmcmFnbWVudC5pc0NvbGxh
cHNlZCgpID8gZnJhZ21lbnQuc3RhcnQoKSArIDEgOiBmcmFnbWVudC5lbmQoKTsKLQotICAgICAg
ICBpZiAobV9jcmVhdGVOZXdSdW4pCisgICAgICAgIC8vIE5ldyBsaW5lIG5lZWRzIG5ldyBydW4u
CisgICAgICAgIGlmICghbV9ydW5zV2lkdGgpCiAgICAgICAgICAgICBydW5zLmFwcGVuZChSdW4o
ZnJhZ21lbnQuc3RhcnQoKSwgZW5kUG9zaXRpb24sIG1fcnVuc1dpZHRoLCBtX3J1bnNXaWR0aCAr
IGZyYWdtZW50LndpZHRoKCksIGZhbHNlKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
QVNTRVJUKHJ1bnMuc2l6ZSgpKTsKLSAgICAgICAgICAgIFJ1biYgbGFzdFJ1biA9IHJ1bnMubGFz
dCgpOwotICAgICAgICAgICAgbGFzdFJ1bi5lbmQgPSBlbmRQb3NpdGlvbjsKLSAgICAgICAgICAg
IGxhc3RSdW4ubG9naWNhbFJpZ2h0ID0gbV9ydW5zV2lkdGggKyBmcmFnbWVudC53aWR0aCgpOwor
ICAgICAgICAgICAgY29uc3QgYXV0byYgbGFzdEZyYWdtZW50ID0gbV9mcmFnbWVudHMubGFzdCgp
OworICAgICAgICAgICAgLy8gQ29sbGFwc2UgbmVpZ2hib3VyaW5nIHdoaXRlc3BhY2UsIGlmIHRo
ZXkgYXJlIGFjcm9zcyBtdWx0aXBsZSByZW5kZXJlcnMgYW5kIGFyZSBub3QgY29sbGFwc2VkIHll
dC4KKyAgICAgICAgICAgIGlmIChsYXN0RnJhZ21lbnQuaXNDb2xsYXBzYWJsZSgpICYmIGZyYWdt
ZW50LmlzQ29sbGFwc2FibGUoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChsYXN0RnJhZ21l
bnQuaXNMYXN0SW5SZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWxhc3RGcmFnbWVu
dC5pc0NvbGxhcHNlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIExpbmUgd2lkdGggbmVl
ZHMgdG8gYmUgcmVzZXQgc28gdGhhdCBub3cgaXQgdGFrZXMgY29sbGFwc2luZyBpbnRvIGNvbnNp
ZGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIG1fcnVuc1dpZHRoIC09IChsYXN0RnJhZ21l
bnQud2lkdGgoKSAtIG1fY29sbGFwc2VkV2hpdGVzcGFjZVdpZHRoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpcyBjb2xsYXBzZWQgY29tcGxl
dGVseS4gTm8gcnVuIGlzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAobGFzdEZyYWdtZW50LmlzTGFzdEluUmVuZGVyZXIoKSB8
fCBsYXN0RnJhZ21lbnQuaXNDb2xsYXBzZWQoKSkKKyAgICAgICAgICAgICAgICBydW5zLmFwcGVu
ZChSdW4oZnJhZ21lbnQuc3RhcnQoKSwgZW5kUG9zaXRpb24sIG1fcnVuc1dpZHRoLCBtX3J1bnNX
aWR0aCArIGZyYWdtZW50LndpZHRoKCksIGZhbHNlKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBSdW4mIGxhc3RSdW4gPSBydW5zLmxhc3QoKTsKKyAgICAgICAgICAgICAg
ICBsYXN0UnVuLmVuZCA9IGVuZFBvc2l0aW9uOworICAgICAgICAgICAgICAgIGxhc3RSdW4ubG9n
aWNhbFJpZ2h0ICs9IGZyYWdtZW50LndpZHRoKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgbV9jcmVhdGVOZXdSdW4gPSBmcmFnbWVudC5pc0NvbGxhcHNlZCgpOworICAgICAg
ICBtX2ZyYWdtZW50cy5hcHBlbmQoZnJhZ21lbnQpOwogICAgICAgICBtX3J1bnNXaWR0aCArPSBm
cmFnbWVudC53aWR0aCgpOwogCiAgICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0gVGV4dEZy
YWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkgewpAQCAtMjc0LDE4ICsz
MDIsNTMgQEAgcHVibGljOgogICAgICAgICAgICAgbV9maXJzdENoYXJhY3RlckZpdHMgPSBmcmFn
bWVudC5zdGFydCgpICsgMSA+IGVuZFBvc2l0aW9uIHx8IG1fcnVuc1dpZHRoIDw9IG1fYXZhaWxh
YmxlV2lkdGg7CiAgICAgfQogCi0gICAgdm9pZCByZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UoTGF5
b3V0OjpSdW5WZWN0b3ImIHJ1bnMpCisgICAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFn
bWVudCByZW1vdmVMYXN0Tm9uV2hpdGVzcGFjZShMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2ZyYWdtZW50cy5zaXplKCkpOworICAgICAgICBBU1NFUlQo
bGFzdEZyYWdtZW50KCkudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQ6Ok5vbldoaXRlc3BhY2UpOworCisgICAgICAgIHVuc2lnbmVkIHJldmVydExlbmd0aCA9IDA7
CisgICAgICAgIGZsb2F0IHJldmVydFdpZHRoID0gMDsKKyAgICAgICAgVGV4dEZyYWdtZW50SXRl
cmF0b3I6OlRleHRGcmFnbWVudCBsYXN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50ID0gbV9mcmFnbWVu
dHMubGFzdCgpOworICAgICAgICB3aGlsZSAobV9mcmFnbWVudHMuc2l6ZSgpKSB7CisgICAgICAg
ICAgICBjb25zdCBhdXRvJiBsYXN0ID0gbV9mcmFnbWVudHMubGFzdCgpOworICAgICAgICAgICAg
aWYgKGxhc3QudHlwZSgpICE9IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6Ok5v
bldoaXRlc3BhY2UgfHwgIWxhc3QuaXNMYXN0SW5SZW5kZXJlcigpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgcmV2ZXJ0TGVuZ3RoICs9IGxhc3QuZW5kKCkgLSBsYXN0LnN0
YXJ0KCk7CisgICAgICAgICAgICByZXZlcnRXaWR0aCArPSBsYXN0LndpZHRoKCk7CisgICAgICAg
ICAgICBsYXN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50ID0gbV9mcmFnbWVudHMudGFrZUxhc3QoKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAocmV2ZXJ0TGVuZ3RoKQorICAgICAgICAgICAgcmV2ZXJ0
KHJldmVydExlbmd0aCwgcmV2ZXJ0V2lkdGgsIHJ1bnMpOworICAgICAgICByZXR1cm4gbGFzdE5v
bldoaXRlc3BhY2VGcmFnbWVudDsKKyAgICB9CisKKyAgICB2b2lkIHJldmVydCh1bnNpZ25lZCBs
ZW5ndGgsIGZsb2F0IHdpZHRoLCBMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykKICAgICB7CiAgICAg
ICAgIEFTU0VSVChydW5zLnNpemUoKSk7Ci0gICAgICAgIFJ1biYgbGFzdFJ1biA9IHJ1bnMubGFz
dCgpOwotICAgICAgICBsYXN0UnVuLmxvZ2ljYWxSaWdodCAtPSBtX3RyYWlsaW5nV2hpdGVzcGFj
ZVdpZHRoOwotICAgICAgICBsYXN0UnVuLmVuZCAtPSBtX3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0
aDsKLSAgICAgICAgaWYgKGxhc3RSdW4uc3RhcnQgPT0gbGFzdFJ1bi5lbmQpCisgICAgICAgIG1f
cnVuc1dpZHRoIC09IHdpZHRoOworICAgICAgICB3aGlsZSAobGVuZ3RoKSB7CisgICAgICAgICAg
ICBSdW4mIGxhc3RSdW4gPSBydW5zLmxhc3QoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxhc3RS
dW5MZW5ndGggPSBsYXN0UnVuLmVuZCAtIGxhc3RSdW4uc3RhcnQ7CisgICAgICAgICAgICBpZiAo
bGFzdFJ1bkxlbmd0aCA+IGxlbmd0aCkgeworICAgICAgICAgICAgICAgIGxhc3RSdW4ubG9naWNh
bFJpZ2h0IC09IHdpZHRoOworICAgICAgICAgICAgICAgIGxhc3RSdW4uZW5kIC09IGxlbmd0aDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJ1bnMu
cmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgbGVuZ3RoIC09IGxhc3RSdW5MZW5ndGg7CisgICAg
ICAgICAgICB3aWR0aCAtPSAobGFzdFJ1bi5sb2dpY2FsUmlnaHQgLSBsYXN0UnVuLmxvZ2ljYWxM
ZWZ0KTsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICBtX3J1bnNXaWR0aCAtPSBtX3RyYWls
aW5nV2hpdGVzcGFjZVdpZHRoOwotICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoID0g
MDsKKyAgICB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShMYXlvdXQ6OlJ1blZlY3RvciYg
cnVucykKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBzeW5jIG1fZnJhZ21lbnQsIGJ1dCBpdCdz
IG9rIGZvciBub3cgYXMgd2UgZG9uJ3QgdXNlIG1fZnJhZ21lbnQgYW55bW9yZSBhZnRlciByZW1v
dmVUcmFpbGluZ1doaXRlc3BhY2UuCisgICAgICAgIGlmICghbV90cmFpbGluZ1doaXRlc3BhY2VM
ZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJldmVydChtX3RyYWlsaW5nV2hp
dGVzcGFjZUxlbmd0aCwgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCwgcnVucyk7CiAgICAgICAg
IG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoID0gMDsKKyAgICAgICAgbV90cmFpbGluZ1doaXRl
c3BhY2VXaWR0aCA9IDA7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMjkzLDEyICszNTYsMTMgQEAg
cHJpdmF0ZToKICAgICBmbG9hdCBtX2xvZ2ljYWxMZWZ0T2Zmc2V0IHsgMCB9OwogICAgIFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgbV9vdmVyZmxvd2VkRnJhZ21lbnQ7CiAgICAg
ZmxvYXQgbV9ydW5zV2lkdGggeyAwIH07Ci0gICAgYm9vbCBtX2NyZWF0ZU5ld1J1biB7IHRydWUg
fTsKICAgICBmbG9hdCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9OyAvLyBVc2UgdGhp
cyB0byByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aXRob3V0IHJlLW1lc3VyaW5nIHRoZSB0
ZXh0LgogICAgIHVuc2lnbmVkIG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoIHsgMCB9OworICAg
IGZsb2F0IG1fY29sbGFwc2VkV2hpdGVzcGFjZVdpZHRoIHsgMCB9OwogICAgIC8vIEhhdmluZyBv
bmUgY2hhcmFjdGVyIG9uIHRoZSBsaW5lIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gaXQgYWN0
dWFsbHkgZml0cy4KICAgICAvLyBGaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpcnN0IGZyYWdtZW50
IG1pZ2h0IGJlIGZvcmNlZCBvbiB0byB0aGUgY3VycmVudCBsaW5lIGV2ZW4gaWYgaXQgZG9lcyBu
b3QgZml0LgogICAgIGJvb2wgbV9maXJzdENoYXJhY3RlckZpdHMgeyBmYWxzZSB9OworICAgIFZl
Y3RvcjxUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50PiBtX2ZyYWdtZW50czsKIH07
CiAKIGNsYXNzIEZyYWdtZW50Rm9yd2FyZEl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8
c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgdW5zaWduZWQ+IHsKQEAgLTM4OSwxNCArNDUzLDE3
IEBAIHN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0RnJhZ21l
bnQoVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRlCiAgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgd2Ug
bmVlZCB0byBza2lwIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UuCi0gICAgaWYgKHN0eWxlLmNvbGxh
cHNlV2hpdGVzcGFjZSAmJiBmaXJzdEZyYWdtZW50LnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVy
YXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKQotICAgICAgICBmaXJzdEZyYWdtZW50ID0g
dGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOworICAgIGlmIChzdHlsZS5j
b2xsYXBzZVdoaXRlc3BhY2UpIHsKKyAgICAgICAgd2hpbGUgKGZpcnN0RnJhZ21lbnQudHlwZSgp
ID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpCisgICAg
ICAgICAgICBmaXJzdEZyYWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFn
bWVudCgpOworICAgIH0KICAgICByZXR1cm4gZmlyc3RGcmFnbWVudDsKIH0KIAogc3RhdGljIGJv
b2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZp
b3VzTGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0
ZXh0RnJhZ21lbnRJdGVyYXRvcikKIHsKICAgICBjb25zdCBhdXRvJiBzdHlsZSA9IHRleHRGcmFn
bWVudEl0ZXJhdG9yLnN0eWxlKCk7CisgICAgbGluZS5zZXRDb2xsYXBlZFdoaXRlc3BhY2VXaWR0
aChzdHlsZS5zcGFjZVdpZHRoKTsKICAgICBib29sIGxpbmVDYW5CZVdyYXBwZWQgPSBzdHlsZS53
cmFwTGluZXMgfHwgc3R5bGUuYnJlYWtXb3JkT25PdmVyZmxvdzsKICAgICBhdXRvIGZyYWdtZW50
ID0gZmlyc3RGcmFnbWVudCh0ZXh0RnJhZ21lbnRJdGVyYXRvciwgcHJldmlvdXNMaW5lKTsKICAg
ICB3aGlsZSAoZnJhZ21lbnQudHlwZSgpICE9IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQ6OkNvbnRlbnRFbmQpIHsKQEAgLTQxMywzMCArNDgwLDQ4IEBAIHN0YXRpYyBib29sIGNy
ZWF0ZUxpbmVSdW5zKExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xp
bmUsIExheW91CiAgICAgICAgICAgICAvLyAyLiBXaGl0ZXNwYWNlIGNvbGxhcHNlIG9mZjogd2hp
dGVzcGFjZSBpcyB3cmFwcGVkLgogICAgICAgICAgICAgLy8gMy4gRmlyc3QsIG5vbi13aGl0ZXNw
YWNlIGZyYWdtZW50IGlzIGVpdGhlciB3cmFwcGVkIG9yIGtlcHQgb24gdGhlIGxpbmUuIChkZXBl
bmRzIG9uIG92ZXJmbG93LXdyYXApCiAgICAgICAgICAgICAvLyA0LiBOb24td2hpdGVzcGFjZSBm
cmFnbWVudCB3aGVuIHRoZXJlJ3MgYWxyZWFkeSBhbm90aGVyIGZyYWdtZW50IG9uIHRoZSBsaW5l
IGdldHMgcHVzaGVkIHRvIHRoZSBuZXh0IGxpbmUuCi0gICAgICAgICAgICBib29sIGVtcHR5TGlu
ZSA9ICFsaW5lLndpZHRoKCk7CisgICAgICAgICAgICBib29sIGlzRmlyc3RGcmFnbWVudCA9IGxp
bmUuaXNGaXJzdEZyYWdtZW50KGZyYWdtZW50KTsKICAgICAgICAgICAgIC8vIFdoaXRlc3BhY2Ug
ZnJhZ21lbnQuCiAgICAgICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpIHsKICAgICAgICAgICAgICAgICBp
ZiAoIXN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBT
cGxpdCB0aGUgZnJhZ21lbnQ7IChtb2RpZmllZClmcmFnbWVudCBzdGF5cyBvbiB0aGlzIGxpbmUs
IG92ZXJmbG93ZWRGcmFnbWVudCBpcyBwdXNoZWQgdG8gbmV4dCBsaW5lLgotICAgICAgICAgICAg
ICAgICAgICBsaW5lLnNldE92ZXJmbG93ZWRGcmFnbWVudChzcGxpdEZyYWdtZW50VG9GaXRMaW5l
KGZyYWdtZW50LCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgLSBsaW5lLndpZHRoKCksIGVtcHR5TGlu
ZSwgdGV4dEZyYWdtZW50SXRlcmF0b3IpKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5zZXRP
dmVyZmxvd2VkRnJhZ21lbnQoc3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudCwgbGluZS5h
dmFpbGFibGVXaWR0aCgpIC0gbGluZS53aWR0aCgpLCBpc0ZpcnN0RnJhZ21lbnQsIHRleHRGcmFn
bWVudEl0ZXJhdG9yKSk7CiAgICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnQo
ZnJhZ21lbnQsIHJ1bnMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBX
aGVuIHdoaXRlc3BhY2UgY29sbGFwc2UgaXMgb24sIHdoaXRlc3BhY2UgdGhhdCBkb2Vzbid0IGZp
dCBpcyBzaW1wbHkgc2tpcHBlZC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIC8vIE5vbi13aGl0ZXNwYWNlIGZyYWdtZW50LiAoIXN0eWxlLndyYXBM
aW5lczogYnVnMTM4MTAyKHByZXNlcnZlIGV4aXN0aW5nIGJlaGF2aW9yKQotICAgICAgICAgICAg
aWYgKChlbXB0eUxpbmUgJiYgc3R5bGUuYnJlYWtXb3JkT25PdmVyZmxvdykgfHwgIXN0eWxlLndy
YXBMaW5lcykgeworICAgICAgICAgICAgaWYgKChpc0ZpcnN0RnJhZ21lbnQgJiYgc3R5bGUuYnJl
YWtXb3JkT25PdmVyZmxvdykgfHwgIXN0eWxlLndyYXBMaW5lcykgewogICAgICAgICAgICAgICAg
IC8vIFNwbGl0IHRoZSBmcmFnbWVudDsgKG1vZGlmaWVkKWZyYWdtZW50IHN0YXlzIG9uIHRoaXMg
bGluZSwgb3ZlcmZsb3dlZEZyYWdtZW50IGlzIHB1c2hlZCB0byBuZXh0IGxpbmUuCi0gICAgICAg
ICAgICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQoc3BsaXRGcmFnbWVudFRvRml0TGlu
ZShmcmFnbWVudCwgbGluZS5hdmFpbGFibGVXaWR0aCgpIC0gbGluZS53aWR0aCgpLCBlbXB0eUxp
bmUsIHRleHRGcmFnbWVudEl0ZXJhdG9yKSk7CisgICAgICAgICAgICAgICAgbGluZS5zZXRPdmVy
Zmxvd2VkRnJhZ21lbnQoc3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudCwgbGluZS5hdmFp
bGFibGVXaWR0aCgpIC0gbGluZS53aWR0aCgpLCBpc0ZpcnN0RnJhZ21lbnQsIHRleHRGcmFnbWVu
dEl0ZXJhdG9yKSk7CiAgICAgICAgICAgICAgICAgbGluZS5hcHBlbmRGcmFnbWVudChmcmFnbWVu
dCwgcnVucyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAvLyBOb24tYnJlYWthYmxlIG5vbi13aGl0ZXNwYWNlIGZpcnN0IGZyYWdtZW50LiBBZGQg
aXQgdG8gdGhlIGN1cnJlbnQgbGluZS4gLWl0IG92ZXJmbG93cyB0aG91Z2guCi0gICAgICAgICAg
ICBpZiAoZW1wdHlMaW5lKSB7CisgICAgICAgICAgICBBU1NFUlQoZnJhZ21lbnQudHlwZSgpID09
IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UpOworICAg
ICAgICAgICAgaWYgKGlzRmlyc3RGcmFnbWVudCkgewogICAgICAgICAgICAgICAgIGxpbmUuYXBw
ZW5kRnJhZ21lbnQoZnJhZ21lbnQsIHJ1bnMpOworICAgICAgICAgICAgICAgIC8vIENoZWNrIGlm
IHRoZXJlIGFyZSBtb3JlIGZyYWdtZW50cyB0byBhZGQgdG8gdGhlIGN1cnJlbnQgbGluZS4gRnJh
Z21lbnRzIG9uIHJlbmRlcmVyIGJvdW5kYXJ5IGNvdWxkIG92ZXJsYXAgbXVsdGlwbGUgcmVuZGVy
ZXJzLgorICAgICAgICAgICAgICAgIGlmICghZnJhZ21lbnQuaXNMYXN0SW5SZW5kZXJlcigpKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBhdXRvIG5leHRGcmFn
bWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsKKyAgICAgICAg
ICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0RnJhZ21lbnQudHlwZSgp
ICE9IGZyYWdtZW50LnR5cGUoKSB8fCAhbmV4dEZyYWdtZW50LmlzTGFzdEluUmVuZGVyZXIoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBsaW5l
LmFwcGVuZEZyYWdtZW50KG5leHRGcmFnbWVudCwgcnVucyk7CisgICAgICAgICAgICAgICAgICAg
IG5leHRGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsK
KyAgICAgICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKKyAgICAgICAgICAgICAgICBsaW5lLnNl
dE92ZXJmbG93ZWRGcmFnbWVudChuZXh0RnJhZ21lbnQpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gTm9uLWJyZWFrYWJsZSBub24td2hpdGVz
cGFjZSBmcmFnbWVudCB3aGVuIHRoZXJlJ3MgYWxyZWFkeSBjb250ZW50IG9uIHRoZSBsaW5lLiBQ
dXNoIGl0IHRvIHRoZSBuZXh0IGxpbmUuCisgICAgICAgICAgICBpZiAobGluZS5sYXN0RnJhZ21l
bnQoKS50eXBlKCkgPT0gZnJhZ21lbnQudHlwZSgpICYmIGxpbmUubGFzdEZyYWdtZW50KCkuaXNM
YXN0SW5SZW5kZXJlcigpKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBmcmFn
bWVudCBpcyBhIGNvbnRpbnVhdGlvbiBvZiBhIHByZXZpb3VzIHNlZ21lbnQuIEluIHN1Y2ggY2Fz
ZXMsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZW0gYWxsLgorICAgICAgICAgICAgICAgIGNvbnN0IGF1
dG8mIGN1cnJlbnRGcmFnbWVudCA9IGxpbmUucmVtb3ZlTGFzdE5vbldoaXRlc3BhY2UocnVucyk7
CisgICAgICAgICAgICAgICAgdGV4dEZyYWdtZW50SXRlcmF0b3IucmV2ZXJ0VG9GcmFnbWVudChj
dXJyZW50RnJhZ21lbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQoZnJhZ21lbnQpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQ0NCw3ICs1MjksNyBAQCBzdGF0aWMgYm9vbCBj
cmVhdGVMaW5lUnVucyhMaW5lU3RhdGUmIGxpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNM
aW5lLCBMYXlvdQogICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHRleHQgZnJhZ21lbnQuCiAgICAg
ICAgIGZyYWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudChsaW5l
LndpZHRoKCkpOwogICAgIH0KLSAgICByZXR1cm4gZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQgJiYgbGluZS5vdmVyZmxvd2Vk
RnJhZ21lbnQoKS5pc0VtcHR5KCk7CisgICAgcmV0dXJuIChmcmFnbWVudC50eXBlKCkgPT0gVGV4
dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29udGVudEVuZCAmJiBsaW5lLm92ZXJm
bG93ZWRGcmFnbWVudCgpLmlzRW1wdHkoKSkgfHwgbGluZS5vdmVyZmxvd2VkRnJhZ21lbnQoKS50
eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29udGVudEVuZDsK
IH0KIAogc3RhdGljIHZvaWQgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhMaW5lU3RhdGUm
IGxpbmUsIExheW91dDo6UnVuVmVjdG9yJiBydW5zLCB1bnNpZ25lZCBwcmV2aW91c1J1bkNvdW50
LCB1bnNpZ25lZCYgbGluZUNvdW50LCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZy
YWdtZW50SXRlcmF0b3IpCkBAIC00NjYsMjggKzU1MSw2IEBAIHN0YXRpYyB2b2lkIGNsb3NlTGlu
ZUVuZGluZ0FuZEFkanVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYg
cnVuCiAgICAgKytsaW5lQ291bnQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNwbGl0UnVuc0F0UmVuZGVy
ZXJCb3VuZGFyeShMYXlvdXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMsIGNvbnN0IFRleHRGcmFnbWVu
dEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRvcikKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHByb2JhYmx5IHNwbGl0IGR1cmluZyBydW4gY29uc3RydWN0aW9uIGluc3RlYWQgb2YgYXMg
YSBzZXBhcmF0ZSBwYXNzLgotICAgIGlmIChsaW5lUnVucy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICB1bnNpZ25lZCBydW5JbmRleCA9IDA7Ci0gICAgZG8gewotICAgICAgICBjb25z
dCBSdW4mIHJ1biA9IGxpbmVSdW5zLmF0KHJ1bkluZGV4KTsKLSAgICAgICAgQVNTRVJUKHJ1bi5z
dGFydCAhPSBydW4uZW5kKTsKLSAgICAgICAgYXV0byYgc3RhcnRTZWdtZW50ID0gdGV4dEZyYWdt
ZW50SXRlcmF0b3Iuc2VnbWVudEZvclBvc2l0aW9uKHJ1bi5zdGFydCk7Ci0gICAgICAgIGlmIChy
dW4uZW5kIDw9IHN0YXJ0U2VnbWVudC5lbmQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgLy8gVGhpcyBydW4gb3ZlcmxhcHMgbXVsdGlwbGUgcmVuZGVyZXJzLiBTcGxpdCBpdCB1cC4K
LSAgICAgICAgLy8gU3BsaXQgcnVuIGF0IHRoZSByZW5kZXJlcidzIGJvdW5kYXJ5IGFuZCBjcmVh
dGUgYSBuZXcgcnVuIGZvciB0aGUgbGVmdCBzaWRlLCB3aGlsZSB1c2UgdGhlIGN1cnJlbnQgcnVu
IGFzIHRoZSByaWdodCBzaWRlLgotICAgICAgICBmbG9hdCBsb2dpY2FsUmlnaHRPZkxlZnRSdW4g
PSBydW4ubG9naWNhbExlZnQgKyB0ZXh0RnJhZ21lbnRJdGVyYXRvci50ZXh0V2lkdGgocnVuLnN0
YXJ0LCBzdGFydFNlZ21lbnQuZW5kLCBydW4ubG9naWNhbExlZnQpOwotICAgICAgICBsaW5lUnVu
cy5pbnNlcnQocnVuSW5kZXgsIFJ1bihydW4uc3RhcnQsIHN0YXJ0U2VnbWVudC5lbmQsIHJ1bi5s
b2dpY2FsTGVmdCwgbG9naWNhbFJpZ2h0T2ZMZWZ0UnVuLCBmYWxzZSkpOwotICAgICAgICBSdW4m
IHJpZ2h0U2lkZVJ1biA9IGxpbmVSdW5zLmF0KHJ1bkluZGV4ICsgMSk7Ci0gICAgICAgIHJpZ2h0
U2lkZVJ1bi5zdGFydCA9IHN0YXJ0U2VnbWVudC5lbmQ7Ci0gICAgICAgIHJpZ2h0U2lkZVJ1bi5s
b2dpY2FsTGVmdCA9IGxvZ2ljYWxSaWdodE9mTGVmdFJ1bjsKLSAgICB9IHdoaWxlICgrK3J1bklu
ZGV4IDwgbGluZVJ1bnMuc2l6ZSgpKTsKLX0KLQogc3RhdGljIHZvaWQgY3JlYXRlVGV4dFJ1bnMo
TGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIFJlbmRlckJsb2NrRmxvdyYgZmxvdywgdW5zaWduZWQm
IGxpbmVDb3VudCkKIHsKICAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUgPSBm
bG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKQEAgLTUwNSw5ICs1NjgsNiBAQCBzdGF0aWMg
dm9pZCBjcmVhdGVUZXh0UnVucyhMYXlvdXQ6OlJ1blZlY3RvciYgcnVucywgUmVuZGVyQmxvY2tG
bG93JiBmbG93LCB1bnNpZwogICAgICAgICBpc0VuZE9mQ29udGVudCA9IGNyZWF0ZUxpbmVSdW5z
KGxpbmUsIHByZXZpb3VzTGluZSwgcnVucywgdGV4dEZyYWdtZW50SXRlcmF0b3IpOwogICAgICAg
ICBjbG9zZUxpbmVFbmRpbmdBbmRBZGp1c3RSdW5zKGxpbmUsIHJ1bnMsIHByZXZpb3VzUnVuQ291
bnQsIGxpbmVDb3VudCwgdGV4dEZyYWdtZW50SXRlcmF0b3IpOwogICAgIH0gd2hpbGUgKCFpc0Vu
ZE9mQ29udGVudCk7Ci0KLSAgICBpZiAoZmxvdy5maXJzdENoaWxkKCkgIT0gZmxvdy5sYXN0Q2hp
bGQoKSkKLSAgICAgICAgc3BsaXRSdW5zQXRSZW5kZXJlckJvdW5kYXJ5KHJ1bnMsIHRleHRGcmFn
bWVudEl0ZXJhdG9yKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPExheW91dD4gY3JlYXRlKFJlbmRl
ckJsb2NrRmxvdyYgZmxvdykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oCmluZGV4IDFmYzM0NzlkMmU3YTc2ZjYxMTll
OTM3MjM5ZDk4ZWQ0YmU0OGIxZjAuLmY4ZjRiM2Q5OTg5ZTliMjY2Zjc4NWZmNWI3MmJiNmUzMjU2
NjE0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0Rmxvd0NvbnRlbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXRGbG93Q29udGVudHMuaApAQCAtNTUsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgICAg
IH0KIAogICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpOworICAgICAgICBJdGVyYXRvciYg
b3BlcmF0b3ItLSgpOwogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90
aGVyKSBjb25zdDsKICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhl
cikgY29uc3Q7CiAgICAgICAgIGNvbnN0IFNlZ21lbnQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuIG1fZmxvd0NvbnRlbnRzLm1fc2VnbWVudHNbbV9zZWdtZW50SW5kZXhdOyB9CkBAIC02Nyw4
ICs2OCw2IEBAIHB1YmxpYzoKICAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIEl0
ZXJhdG9yKCp0aGlzLCAwKTsgfQogICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIEl0
ZXJhdG9yKCp0aGlzLCBtX3NlZ21lbnRzLnNpemUoKSk7IH0KIAotICAgIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VnbWVudHMubGFzdCgpLmVuZDsgfTsKLQogICAgIHVuc2ln
bmVkIHNlZ21lbnRJbmRleEZvclBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKIAog
cHJpdmF0ZToKQEAgLTg1LDYgKzg0LDEyIEBAIGlubGluZSBGbG93Q29udGVudHM6Okl0ZXJhdG9y
JiBGbG93Q29udGVudHM6Okl0ZXJhdG9yOjpvcGVyYXRvcisrKCkKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKK2lubGluZSBGbG93Q29udGVudHM6Okl0ZXJhdG9yJiBGbG93Q29udGVudHM6Okl0ZXJh
dG9yOjpvcGVyYXRvci0tKCkKK3sKKyAgICAtLW1fc2VnbWVudEluZGV4OworICAgIHJldHVybiAq
dGhpczsKK30KKwogaW5saW5lIGJvb2wgRmxvd0NvbnRlbnRzOjpJdGVyYXRvcjo6b3BlcmF0b3I9
PShjb25zdCBGbG93Q29udGVudHM6Okl0ZXJhdG9yJiBvdGhlcikgY29uc3QKIHsKICAgICByZXR1
cm4gbV9zZWdtZW50SW5kZXggPT0gb3RoZXIubV9zZWdtZW50SW5kZXg7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJh
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZy
YWdtZW50SXRlcmF0b3IuY3BwCmluZGV4IDg3MTczMTk5ZmZhZGYwMWYzZGQyNjMyODk0ZjQxZmM0
ZmZiN2Y2NzIuLmI2NTdmOWViMTYyNzg2NzA1YTJhN2E3OGY4ZmQzZDFiM2QzNDdjZmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdt
ZW50SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwCkBAIC00OCw3ICs0OCw4IEBAIFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpTdHlsZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogCiBU
ZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50SXRlcmF0b3IoY29uc3QgUmVuZGVyQmxv
Y2tGbG93JiBmbG93KQogICAgIDogbV9mbG93Q29udGVudHMoZmxvdykKLSAgICAsIG1fbGluZUJy
ZWFrSXRlcmF0b3IoKCptX2Zsb3dDb250ZW50cy5iZWdpbigpKS50ZXh0LCBmbG93LnN0eWxlKCku
bG9jYWxlKCkpCisgICAgLCBtX2Zsb3dDb250ZW50c0l0ZXJhdG9yKG1fZmxvd0NvbnRlbnRzLmJl
Z2luKCkpCisgICAgLCBtX2xpbmVCcmVha0l0ZXJhdG9yKCgqbV9mbG93Q29udGVudHNJdGVyYXRv
cikudGV4dCwgZmxvdy5zdHlsZSgpLmxvY2FsZSgpKQogICAgICwgbV9zdHlsZShmbG93LnN0eWxl
KCkpCiB7CiB9CkBAIC02MCwxMTUgKzYxLDEyOSBAQCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4
dEZyYWdtZW50IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpuZXh0VGV4dEZyYWdtZW50KGZsb2F0CiAg
ICAgLy8gMi4gd2hpdGVzcGFjZSAoY29sbGFzcGVkLCBub24tY29sbGFwc2VkIG11bHRpIG9yIHNp
bmdsZSkgb3IKICAgICAvLyAzLiBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgogICAgIC8vIDQu
IGVtcHR5LCBpbmRpY2F0aW5nIGNvbnRlbnQgZW5kLgotICAgIGlmIChpc0VuZChtX3Bvc2l0aW9u
KSkKLSAgICAgICAgcmV0dXJuIFRleHRGcmFnbWVudChtX3Bvc2l0aW9uLCBtX3Bvc2l0aW9uLCAw
LCBUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQpOworICAgIEFTU0VSVChtX2Zsb3dDb250ZW50c0l0
ZXJhdG9yICE9IG1fZmxvd0NvbnRlbnRzLmVuZCgpKTsKKyAgICBpZiAobV9wb3NpdGlvbiA9PSAo
Km1fZmxvd0NvbnRlbnRzSXRlcmF0b3IpLmVuZCkKKyAgICAgICAgKyttX2Zsb3dDb250ZW50c0l0
ZXJhdG9yOworICAgIC8vIElzIGl0IGNvbnRlbnQgZW5kPworICAgIGlmIChtX2Zsb3dDb250ZW50
c0l0ZXJhdG9yID09IG1fZmxvd0NvbnRlbnRzLmVuZCgpKQorICAgICAgICByZXR1cm4gVGV4dEZy
YWdtZW50KG1fcG9zaXRpb24sIG1fcG9zaXRpb24sIDAsIFRleHRGcmFnbWVudDo6Q29udGVudEVu
ZCwgZmFsc2UpOworICAgIHVuc2lnbmVkIHNlZ21lbnRFbmRQb3NpdGlvbiA9ICgqbV9mbG93Q29u
dGVudHNJdGVyYXRvcikuZW5kOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBtX3Bvc2l0
aW9uOwogICAgIGlmIChpc0xpbmVCcmVhayhtX3Bvc2l0aW9uKSkgewotICAgICAgICBUZXh0RnJh
Z21lbnQgZnJhZ21lbnQobV9wb3NpdGlvbiwgbV9wb3NpdGlvbiArIDEsIDAsIFRleHRGcmFnbWVu
dDo6TGluZUJyZWFrKTsKLSAgICAgICAgKyttX3Bvc2l0aW9uOwotICAgICAgICByZXR1cm4gZnJh
Z21lbnQ7CisgICAgICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gKyttX3Bvc2l0aW9uOworICAg
ICAgICByZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCAwLCBU
ZXh0RnJhZ21lbnQ6OkxpbmVCcmVhaywgZW5kUG9zaXRpb24gPT0gc2VnbWVudEVuZFBvc2l0aW9u
KTsKICAgICB9Ci0gICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IG1fcG9zaXRpb247Ci0gICAg
dW5zaWduZWQgZW5kUG9zaXRpb24gPSBza2lwVG9OZXh0UG9zaXRpb24oUG9zaXRpb25UeXBlOjpO
b25XaGl0ZXNwYWNlLCBzdGFydFBvc2l0aW9uKTsKKyAgICBmbG9hdCB3aWR0aCA9IDA7CisgICAg
dW5zaWduZWQgZW5kUG9zaXRpb24gPSBza2lwVG9OZXh0UG9zaXRpb24oUG9zaXRpb25UeXBlOjpO
b25XaGl0ZXNwYWNlLCBzdGFydFBvc2l0aW9uLCB3aWR0aCwgeFBvc2l0aW9uKTsKICAgICBBU1NF
UlQoc3RhcnRQb3NpdGlvbiA8PSBlbmRQb3NpdGlvbik7Ci0gICAgaWYgKGVuZFBvc2l0aW9uID4g
c3RhcnRQb3NpdGlvbikgeworICAgIGlmIChzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pIHsK
ICAgICAgICAgYm9vbCBtdWx0aXBsZVdoaXRlc3BhY2UgPSBzdGFydFBvc2l0aW9uICsgMSA8IGVu
ZFBvc2l0aW9uOwogICAgICAgICBib29sIGlzQ29sbGFwc2VkID0gbXVsdGlwbGVXaGl0ZXNwYWNl
ICYmIG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlOwogICAgICAgICBib29sIGlzQnJlYWthYmxl
ID0gIWlzQ29sbGFwc2VkICYmIG11bHRpcGxlV2hpdGVzcGFjZTsKLSAgICAgICAgZmxvYXQgd2lk
dGggPSBpc0NvbGxhcHNlZCA/IG1fc3R5bGUuc3BhY2VXaWR0aCA6IHRleHRXaWR0aChzdGFydFBv
c2l0aW9uLCBlbmRQb3NpdGlvbiwgeFBvc2l0aW9uKTsKICAgICAgICAgbV9wb3NpdGlvbiA9IGVu
ZFBvc2l0aW9uOwotICAgICAgICByZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uLCB3aWR0aCwgVGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlLCBpc0NvbGxhcHNlZCwg
aXNCcmVha2FibGUpOworICAgICAgICByZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uLCB3aWR0aCwgVGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlLCBlbmRQb3NpdGlv
biA9PSBzZWdtZW50RW5kUG9zaXRpb24sIGlzQ29sbGFwc2VkLCBtX3N0eWxlLmNvbGxhcHNlV2hp
dGVzcGFjZSwgaXNCcmVha2FibGUpOwogICAgIH0KLSAgICBlbmRQb3NpdGlvbiA9IHNraXBUb05l
eHRQb3NpdGlvbihQb3NpdGlvblR5cGU6OkJyZWFrYWJsZSwgc3RhcnRQb3NpdGlvbiArIDEpOwor
ICAgIGVuZFBvc2l0aW9uID0gc2tpcFRvTmV4dFBvc2l0aW9uKFBvc2l0aW9uVHlwZTo6QnJlYWth
YmxlLCBzdGFydFBvc2l0aW9uLCB3aWR0aCwgeFBvc2l0aW9uKTsKICAgICBtX3Bvc2l0aW9uID0g
ZW5kUG9zaXRpb247Ci0gICAgcmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBlbmRQ
b3NpdGlvbiwgdGV4dFdpZHRoKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB4UG9zaXRpb24p
LCBUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UsIGZhbHNlLCBtX3N0eWxlLmJyZWFrV29yZE9u
T3ZlcmZsb3cpOworICAgIHJldHVybiBUZXh0RnJhZ21lbnQoc3RhcnRQb3NpdGlvbiwgZW5kUG9z
aXRpb24sIHdpZHRoLCBUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UsIGVuZFBvc2l0aW9uID09
IHNlZ21lbnRFbmRQb3NpdGlvbiwgZmFsc2UsIGZhbHNlLCBtX3N0eWxlLmJyZWFrV29yZE9uT3Zl
cmZsb3cpOwogfQogCi1mbG9hdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6dGV4dFdpZHRoKHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0Cit2b2lkIFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpyZXZlcnRUb0ZyYWdtZW50KGNvbnN0IFRleHRGcmFnbWVudCYgZnJh
Z21lbnQpCiB7Ci0gICAgY29uc3QgYXV0byYgZnJvbVNlZ21lbnQgPSBtX2Zsb3dDb250ZW50cy5z
ZWdtZW50Rm9yUG9zaXRpb24oZnJvbSk7Ci0gICAgQVNTRVJUKGlzPFJlbmRlclRleHQ+KGZyb21T
ZWdtZW50LnJlbmRlcmVyKSk7Ci0gICAgaWYgKChtX3N0eWxlLmZvbnQuaXNGaXhlZFBpdGNoKCkg
JiYgZnJvbVNlZ21lbnQuZW5kID49IHRvKSB8fCAoZnJvbSA9PSBmcm9tU2VnbWVudC5zdGFydCAm
JiB0byA9PSBmcm9tU2VnbWVudC5lbmQpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
VGV4dD4oZnJvbVNlZ21lbnQucmVuZGVyZXIpLndpZHRoKGZyb20gLSBmcm9tU2VnbWVudC5zdGFy
dCwgdG8gLSBmcm9tLCBtX3N0eWxlLmZvbnQsIHhQb3NpdGlvbiwgbnVsbHB0ciwgbnVsbHB0cik7
Ci0KLSAgICBjb25zdCBhdXRvKiBzZWdtZW50ID0gJmZyb21TZWdtZW50OwotICAgIGZsb2F0IHRl
eHRXaWR0aCA9IDA7Ci0gICAgdW5zaWduZWQgZnJhZ21lbnRFbmQgPSAwOwotICAgIHdoaWxlICh0
cnVlKSB7Ci0gICAgICAgIGZyYWdtZW50RW5kID0gc3RkOjptaW4odG8sIHNlZ21lbnQtPmVuZCk7
Ci0gICAgICAgIHRleHRXaWR0aCArPSBzZWdtZW50LT50ZXh0LmlzOEJpdCgpID8gcnVuV2lkdGg8
TENoYXI+KHNlZ21lbnQtPnRleHQsIGZyb20gLSBzZWdtZW50LT5zdGFydCwgZnJhZ21lbnRFbmQg
LSBzZWdtZW50LT5zdGFydCwgeFBvc2l0aW9uICsgdGV4dFdpZHRoKSA6Ci0gICAgICAgICAgICBy
dW5XaWR0aDxVQ2hhcj4oc2VnbWVudC0+dGV4dCwgZnJvbSAtIHNlZ21lbnQtPnN0YXJ0LCBmcmFn
bWVudEVuZCAtIHNlZ21lbnQtPnN0YXJ0LCB4UG9zaXRpb24gKyB0ZXh0V2lkdGgpOwotICAgICAg
ICBpZiAoZnJhZ21lbnRFbmQgPT0gdG8pCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZnJv
bSA9IGZyYWdtZW50RW5kOwotICAgICAgICBzZWdtZW50ID0gJm1fZmxvd0NvbnRlbnRzLnNlZ21l
bnRGb3JQb3NpdGlvbihmcmFnbWVudEVuZCk7Ci0gICAgfTsKLQotICAgIHJldHVybiB0ZXh0V2lk
dGg7CisgICAgQVNTRVJUKG1fcG9zaXRpb24gPj0gZnJhZ21lbnQuZW5kKCkpOworICAgIEFTU0VS
VChmcmFnbWVudC5zdGFydCgpID49IDApOworICAgIC8vIFJldmVydCBzZWdtZW50IGZpcnN0Lgor
ICAgIHdoaWxlICgoKm1fZmxvd0NvbnRlbnRzSXRlcmF0b3IpLnN0YXJ0ID4gZnJhZ21lbnQuc3Rh
cnQoKSkKKyAgICAgICAgLS1tX2Zsb3dDb250ZW50c0l0ZXJhdG9yOworICAgIC8vIFRPRE86IEl0
IHJldmVydHMgdG8gdGhlIGxhc3QgZnJhZ21lbnQgb24gdGhlIHNhbWUgcG9zaXRpb24sIGJ1dCB0
aGF0J3Mgb2sgZm9yIG5vdyBhcyB3ZSBkb24ndCBuZWVkIHRvCisgICAgLy8gZGlmZmVyZW50aWF0
ZSBtdWx0aXBsZSByZW5kZXJlcnMgb24gdGhlIHNhbWUgcG9zaXRpb24uCisgICAgbV9wb3NpdGlv
biA9IGZyYWdtZW50LnN0YXJ0KCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotc3RhdGljIHVuc2lnbmVkIG5leHRCcmVha2FibGVQb3NpdGlvbihMYXp5TGluZUJyZWFr
SXRlcmF0b3ImIGxpbmVCcmVha0l0ZXJhdG9yLCBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQm
IHNlZ21lbnQsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24pCit1bnNpZ25lZCBUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVu
dCYgc2VnbWVudCwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbikKIHsKLSAgICByZXR1cm4gbmV4dEJy
ZWFrYWJsZVBvc2l0aW9uTm9uTG9vc2VseTxDaGFyYWN0ZXJUeXBlLCBOQlNQQmVoYXZpb3I6Okln
bm9yZU5CU1A+KGxpbmVCcmVha0l0ZXJhdG9yLCBzZWdtZW50LnRleHQuY2hhcmFjdGVyczxDaGFy
YWN0ZXJUeXBlPigpLCBzZWdtZW50LmVuZCAtIHNlZ21lbnQuc3RhcnQsIHN0YXJ0UG9zaXRpb24p
OworICAgIEFTU0VSVChzdGFydFBvc2l0aW9uIDwgc2VnbWVudC5lbmQpOworICAgIGlmIChzZWdt
ZW50LnRleHQuaW1wbCgpICE9IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5nKCkuaW1wbCgpKSB7
CisgICAgICAgIGNvbnN0IFN0cmluZyYgY3VycmVudFRleHQgPSBtX2xpbmVCcmVha0l0ZXJhdG9y
LnN0cmluZygpOworICAgICAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gY3VycmVudFRleHQubGVu
Z3RoKCk7CisgICAgICAgIFVDaGFyIGxhc3RDaGFyYWN0ZXIgPSB0ZXh0TGVuZ3RoID4gMCA/IGN1
cnJlbnRUZXh0W3RleHRMZW5ndGggLSAxXSA6IDA7CisgICAgICAgIFVDaGFyIHNlY29uZFRvTGFz
dENoYXJhY3RlciA9IHRleHRMZW5ndGggPiAxID8gY3VycmVudFRleHRbdGV4dExlbmd0aCAtIDJd
IDogMDsKKyAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5zZXRQcmlvckNvbnRleHQobGFzdENo
YXJhY3Rlciwgc2Vjb25kVG9MYXN0Q2hhcmFjdGVyKTsKKyAgICAgICAgbV9saW5lQnJlYWtJdGVy
YXRvci5yZXNldFN0cmluZ0FuZFJlbGVhc2VJdGVyYXRvcihzZWdtZW50LnRleHQsIG1fc3R5bGUu
bG9jYWxlLCBMaW5lQnJlYWtJdGVyYXRvck1vZGVVQVgxNCk7CisgICAgfQorICAgIGNvbnN0IGF1
dG8qIGNoYXJhY3RlcnMgPSBzZWdtZW50LnRleHQuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigp
OworICAgIHVuc2lnbmVkIHNlZ21lbnRMZW5ndGggPSBzZWdtZW50LmVuZCAtIHNlZ21lbnQuc3Rh
cnQ7CisgICAgdW5zaWduZWQgc2VnbWVudFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiAtIHNlZ21l
bnQuc3RhcnQ7CisgICAgcmV0dXJuIHNlZ21lbnQuc3RhcnQgKyBuZXh0QnJlYWthYmxlUG9zaXRp
b25Ob25Mb29zZWx5PENoYXJhY3RlclR5cGUsIE5CU1BCZWhhdmlvcjo6SWdub3JlTkJTUD4obV9s
aW5lQnJlYWtJdGVyYXRvciwgY2hhcmFjdGVycywgc2VnbWVudExlbmd0aCwgc2VnbWVudFBvc2l0
aW9uKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgdW5z
aWduZWQgbmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihjb25zdCBGbG93Q29udGVudHM6OlNlZ21l
bnQmIHNlZ21lbnQsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIGNvbnN0IFRleHRGcmFnbWVudEl0
ZXJhdG9yOjpTdHlsZSYgc3R5bGUpCit1bnNpZ25lZCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6bmV4
dE5vbldoaXRlc3BhY2VQb3NpdGlvbihjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIHNlZ21l
bnQsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24pCiB7CisgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24g
PCBzZWdtZW50LmVuZCk7CiAgICAgY29uc3QgYXV0byogdGV4dCA9IHNlZ21lbnQudGV4dC5jaGFy
YWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7CiAgICAgdW5zaWduZWQgcG9zaXRpb24gPSBzdGFydFBv
c2l0aW9uOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHNlZ21lbnQuZW5kIC0gc2VnbWVudC5zdGFy
dDsKLSAgICBmb3IgKDsgcG9zaXRpb24gPCBsZW5ndGg7ICsrcG9zaXRpb24pIHsKLSAgICAgICAg
YXV0byBjaGFyYWN0ZXIgPSB0ZXh0W3Bvc2l0aW9uXTsKLSAgICAgICAgYm9vbCBpc1doaXRlc3Bh
Y2UgPSBjaGFyYWN0ZXIgPT0gJyAnIHx8IGNoYXJhY3RlciA9PSAnXHQnIHx8ICghc3R5bGUucHJl
c2VydmVOZXdsaW5lICYmIGNoYXJhY3RlciA9PSAnXG4nKTsKKyAgICBmb3IgKDsgcG9zaXRpb24g
PCBzZWdtZW50LmVuZDsgKytwb3NpdGlvbikgeworICAgICAgICBhdXRvIGNoYXJhY3RlciA9IHRl
eHRbcG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0XTsKKyAgICAgICAgYm9vbCBpc1doaXRlc3BhY2Ug
PSBjaGFyYWN0ZXIgPT0gJyAnIHx8IGNoYXJhY3RlciA9PSAnXHQnIHx8ICghbV9zdHlsZS5wcmVz
ZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVyID09ICdcbicpOwogICAgICAgICBpZiAoIWlzV2hpdGVz
cGFjZSkKICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICB9CiAgICAgcmV0dXJuIHBv
c2l0aW9uOwogfQogCi11bnNpZ25lZCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6c2tpcFRvTmV4dFBv
c2l0aW9uKFBvc2l0aW9uVHlwZSBwb3NpdGlvblR5cGUsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24p
IGNvbnN0CitmbG9hdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6dGV4dFdpZHRoKHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKGlzRW5k
KHN0YXJ0UG9zaXRpb24pKQotICAgICAgICByZXR1cm4gc3RhcnRQb3NpdGlvbjsKKyAgICBhdXRv
JiBzZWdtZW50ID0gKm1fZmxvd0NvbnRlbnRzSXRlcmF0b3I7CisgICAgQVNTRVJUKHNlZ21lbnQu
c3RhcnQgPD0gZnJvbSAmJiBmcm9tIDw9IHNlZ21lbnQuZW5kICYmIHNlZ21lbnQuc3RhcnQgPD0g
dG8gJiYgdG8gPD0gc2VnbWVudC5lbmQpOworICAgIEFTU0VSVChpczxSZW5kZXJUZXh0PihzZWdt
ZW50LnJlbmRlcmVyKSk7CisgICAgaWYgKG1fc3R5bGUuZm9udC5pc0ZpeGVkUGl0Y2goKSB8fCAo
ZnJvbSA9PSBzZWdtZW50LnN0YXJ0ICYmIHRvID09IHNlZ21lbnQuZW5kKSkKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+KHNlZ21lbnQucmVuZGVyZXIpLndpZHRoKGZyb20gLSBz
ZWdtZW50LnN0YXJ0LCB0byAtIGZyb20sIG1fc3R5bGUuZm9udCwgeFBvc2l0aW9uLCBudWxscHRy
LCBudWxscHRyKTsKKyAgICByZXR1cm4gc2VnbWVudC50ZXh0LmlzOEJpdCgpID8gcnVuV2lkdGg8
TENoYXI+KHNlZ21lbnQsIGZyb20sIHRvLCB4UG9zaXRpb24pIDogcnVuV2lkdGg8VUNoYXI+KHNl
Z21lbnQsIGZyb20sIHRvLCB4UG9zaXRpb24pOworfQogCit1bnNpZ25lZCBUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6c2tpcFRvTmV4dFBvc2l0aW9uKFBvc2l0aW9uVHlwZSBwb3NpdGlvblR5cGUsIHVu
c2lnbmVkIHN0YXJ0UG9zaXRpb24sIGZsb2F0JiB3aWR0aCwgZmxvYXQgeFBvc2l0aW9uKQorewor
ICAgIGNvbnN0IGF1dG8mIHNlZ21lbnQgPSAqbV9mbG93Q29udGVudHNJdGVyYXRvcjsKICAgICB1
bnNpZ25lZCBjdXJyZW50UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOwotICAgIEZsb3dDb250ZW50
czo6SXRlcmF0b3IgaXQobV9mbG93Q29udGVudHMsIG1fZmxvd0NvbnRlbnRzLnNlZ21lbnRJbmRl
eEZvclBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbikpOwotICAgIGZvciAoYXV0byBlbmQgPSBtX2Zs
b3dDb250ZW50cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGF1dG8mIHNlZ21l
bnQgPSAqaXQ7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRQb3NpdG9uUmVsYXRpdmVUb1NlZ21l
bnQgPSBjdXJyZW50UG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0OwotICAgICAgICB1bnNpZ25lZCBu
ZXh0UG9zaXRpb25SZWxhdGl2ZVRvU2VnbWVudCA9IDA7Ci0gICAgICAgIGlmIChwb3NpdGlvblR5
cGUgPT0gTm9uV2hpdGVzcGFjZSkgewotICAgICAgICAgICAgbmV4dFBvc2l0aW9uUmVsYXRpdmVU
b1NlZ21lbnQgPSBzZWdtZW50LnRleHQuaXM4Qml0KCkgPyBuZXh0Tm9uV2hpdGVzcGFjZVBvc2l0
aW9uPExDaGFyPihzZWdtZW50LCBjdXJyZW50UG9zaXRvblJlbGF0aXZlVG9TZWdtZW50LCBtX3N0
eWxlKSA6Ci0gICAgICAgICAgICAgICAgbmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbjxVQ2hhcj4o
c2VnbWVudCwgY3VycmVudFBvc2l0b25SZWxhdGl2ZVRvU2VnbWVudCwgbV9zdHlsZSk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAocG9zaXRpb25UeXBlID09IEJyZWFrYWJsZSkgewotICAgICAgICAgICAg
aWYgKHNlZ21lbnQudGV4dC5pbXBsKCkgIT0gbV9saW5lQnJlYWtJdGVyYXRvci5zdHJpbmcoKS5p
bXBsKCkpIHsKLSAgICAgICAgICAgICAgICBVQ2hhciBsYXN0Q2hhcmFjdGVyID0gc2VnbWVudC5z
dGFydCA+IDAgPyBjaGFyYWN0ZXJBdChzZWdtZW50LnN0YXJ0IC0gMSkgOiAwOwotICAgICAgICAg
ICAgICAgIFVDaGFyIHNlY29uZFRvTGFzdENoYXJhY3RlciA9IHNlZ21lbnQuc3RhcnQgPiAxID8g
Y2hhcmFjdGVyQXQoc2VnbWVudC5zdGFydCAtIDIpIDogMDsKLSAgICAgICAgICAgICAgICBtX2xp
bmVCcmVha0l0ZXJhdG9yLnNldFByaW9yQ29udGV4dChsYXN0Q2hhcmFjdGVyLCBzZWNvbmRUb0xh
c3RDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3IucmVzZXRT
dHJpbmdBbmRSZWxlYXNlSXRlcmF0b3Ioc2VnbWVudC50ZXh0LCBtX3N0eWxlLmxvY2FsZSwgTGlu
ZUJyZWFrSXRlcmF0b3JNb2RlVUFYMTQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbmV4
dFBvc2l0aW9uUmVsYXRpdmVUb1NlZ21lbnQgPSBzZWdtZW50LnRleHQuaXM4Qml0KCkgPyBuZXh0
QnJlYWthYmxlUG9zaXRpb248TENoYXI+KG1fbGluZUJyZWFrSXRlcmF0b3IsIHNlZ21lbnQsIGN1
cnJlbnRQb3NpdG9uUmVsYXRpdmVUb1NlZ21lbnQpIDoKLSAgICAgICAgICAgICAgICBuZXh0QnJl
YWthYmxlUG9zaXRpb248VUNoYXI+KG1fbGluZUJyZWFrSXRlcmF0b3IsIHNlZ21lbnQsIGN1cnJl
bnRQb3NpdG9uUmVsYXRpdmVUb1NlZ21lbnQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBzZWdtZW50
LnN0YXJ0ICsgbmV4dFBvc2l0aW9uUmVsYXRpdmVUb1NlZ21lbnQ7Ci0gICAgICAgIGlmIChjdXJy
ZW50UG9zaXRpb24gPCBzZWdtZW50LmVuZCkKLSAgICAgICAgICAgIGJyZWFrOworICAgIHVuc2ln
bmVkIG5leHRQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKKyAgICAvLyBDb2xsYXBzZWQgd2hp
dGVzcGFjZSBoYXMgY29uc3RhbnQgd2lkdGguIERvIG5vdCBtZWFzdXJlIGl0LgorICAgIGlmIChw
b3NpdGlvblR5cGUgPT0gTm9uV2hpdGVzcGFjZSkKKyAgICAgICAgbmV4dFBvc2l0aW9uID0gc2Vn
bWVudC50ZXh0LmlzOEJpdCgpID8gbmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbjxMQ2hhcj4oc2Vn
bWVudCwgY3VycmVudFBvc2l0aW9uKSA6IG5leHROb25XaGl0ZXNwYWNlUG9zaXRpb248VUNoYXI+
KHNlZ21lbnQsIGN1cnJlbnRQb3NpdGlvbik7CisgICAgZWxzZSBpZiAocG9zaXRpb25UeXBlID09
IEJyZWFrYWJsZSkgeworICAgICAgICAvLyBuZXh0QnJlYWthYmxlUG9zaXRpb24gcmV0dXJucyB0
aGUgc2FtZSBwb3NpdGlvbiBmb3IgY2VydGFpbiBjaGFyYWN0ZXJzIHN1Y2ggYXMgaHlwaGVucy4g
Q2FsbCBuZXh0IGFnYWluIHdpdGggbW9kaWZpZWQgcG9zaXRpb24gdW5sZXNzIGl0J3MgdGhlIGVu
ZCBvZiB0aGUgc2VnbWVudC4KKyAgICAgICAgbmV4dFBvc2l0aW9uID0gc2VnbWVudC50ZXh0Lmlz
OEJpdCgpID8gbmV4dEJyZWFrYWJsZVBvc2l0aW9uPExDaGFyPihzZWdtZW50LCBjdXJyZW50UG9z
aXRpb24pIDogbmV4dEJyZWFrYWJsZVBvc2l0aW9uPFVDaGFyPihzZWdtZW50LCBjdXJyZW50UG9z
aXRpb24pOworICAgICAgICBpZiAobmV4dFBvc2l0aW9uID09IGN1cnJlbnRQb3NpdGlvbikgewor
ICAgICAgICAgICAgaWYgKCsrbmV4dFBvc2l0aW9uIDwgc2VnbWVudC5lbmQpCisgICAgICAgICAg
ICAgICAgbmV4dFBvc2l0aW9uID0gc2VnbWVudC50ZXh0LmlzOEJpdCgpID8gbmV4dEJyZWFrYWJs
ZVBvc2l0aW9uPExDaGFyPihzZWdtZW50LCBjdXJyZW50UG9zaXRpb24gKyAxKSA6IG5leHRCcmVh
a2FibGVQb3NpdGlvbjxVQ2hhcj4oc2VnbWVudCwgY3VycmVudFBvc2l0aW9uICsgMSk7CisgICAg
ICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKKyAgICB3aWR0aCA9IDA7
CisgICAgaWYgKG5leHRQb3NpdGlvbiA9PSBjdXJyZW50UG9zaXRpb24pCisgICAgICAgIHJldHVy
biBjdXJyZW50UG9zaXRpb247CisgICAgYm9vbCBtZWFzdXJlVGV4dCA9IHBvc2l0aW9uVHlwZSAh
PSBOb25XaGl0ZXNwYWNlIHx8ICFtX3N0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZTsKKyAgICBpZiAo
bWVhc3VyZVRleHQpIHsKKyAgICAgICAgZmxvYXQgdGV4dFdpZHRoID0gdGhpcy0+dGV4dFdpZHRo
KGN1cnJlbnRQb3NpdGlvbiwgbmV4dFBvc2l0aW9uLCB4UG9zaXRpb24pOworICAgICAgICB4UG9z
aXRpb24gKz0gdGV4dFdpZHRoOworICAgICAgICB3aWR0aCArPSB0ZXh0V2lkdGg7CisgICAgfSBl
bHNlIGlmIChzdGFydFBvc2l0aW9uIDwgbmV4dFBvc2l0aW9uKQorICAgICAgICB3aWR0aCA9IG1f
c3R5bGUuc3BhY2VXaWR0aDsKKyAgICByZXR1cm4gbmV4dFBvc2l0aW9uOwogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWZsb2F0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpy
dW5XaWR0aChjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBm
bG9hdCB4UG9zaXRpb24pIGNvbnN0CitmbG9hdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6cnVuV2lk
dGgoY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBzZWdtZW50LCB1bnNpZ25lZCBzdGFydFBv
c2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbiwgZmxvYXQgeFBvc2l0aW9uKSBjb25zdAogewot
ICAgIEFTU0VSVChmcm9tIDw9IHRvKTsKLSAgICBpZiAoZnJvbSA9PSB0bykKKyAgICBBU1NFUlQo
c3RhcnRQb3NpdGlvbiA8PSBlbmRQb3NpdGlvbik7CisgICAgaWYgKHN0YXJ0UG9zaXRpb24gPT0g
ZW5kUG9zaXRpb24pCiAgICAgICAgIHJldHVybiAwOwotICAgIGJvb2wgbWVhc3VyZVdpdGhFbmRT
cGFjZSA9IG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlICYmIHRvIDwgdGV4dC5sZW5ndGgoKSAm
JiB0ZXh0W3RvXSA9PSAnICc7CisgICAgdW5zaWduZWQgc2VnbWVudEZyb20gPSBzdGFydFBvc2l0
aW9uIC0gc2VnbWVudC5zdGFydDsKKyAgICB1bnNpZ25lZCBzZWdtZW50VG8gPSBlbmRQb3NpdGlv
biAtIHNlZ21lbnQuc3RhcnQ7CisgICAgYm9vbCBtZWFzdXJlV2l0aEVuZFNwYWNlID0gbV9zdHls
ZS5jb2xsYXBzZVdoaXRlc3BhY2UgJiYgc2VnbWVudFRvIDwgc2VnbWVudC50ZXh0Lmxlbmd0aCgp
ICYmIHNlZ21lbnQudGV4dFtzZWdtZW50VG9dID09ICcgJzsKICAgICBpZiAobWVhc3VyZVdpdGhF
bmRTcGFjZSkKLSAgICAgICAgKyt0bzsKLSAgICBUZXh0UnVuIHJ1bih0ZXh0LmNoYXJhY3RlcnM8
Q2hhcmFjdGVyVHlwZT4oKSArIGZyb20sIHRvIC0gZnJvbSk7CisgICAgICAgICsrc2VnbWVudFRv
OworICAgIFRleHRSdW4gcnVuKHNlZ21lbnQudGV4dC5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+
KCkgKyBzZWdtZW50RnJvbSwgc2VnbWVudFRvIC0gc2VnbWVudEZyb20pOwogICAgIHJ1bi5zZXRY
UG9zKHhQb3NpdGlvbik7CiAgICAgcnVuLnNldFRhYlNpemUoISFtX3N0eWxlLnRhYldpZHRoLCBt
X3N0eWxlLnRhYldpZHRoKTsKICAgICBmbG9hdCB3aWR0aCA9IG1fc3R5bGUuZm9udC53aWR0aChy
dW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oCmluZGV4IGM4YzFlYjQzM2RhNTQxYTBk
ZTBlYjQwNTM4YjljZThjZTU5NGIwMGMuLjRhZjExNDk3ZTYwM2FhNmQ5OGRhYTgzZWRjM2IzZTMx
YWU0MzExNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmgKQEAgLTQzLDEyICs0Mywx
NCBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFR5cGUgeyBDb250ZW50RW5k
LCBMaW5lQnJlYWssIFdoaXRlc3BhY2UsIE5vbldoaXRlc3BhY2UgfTsKICAgICAgICAgVGV4dEZy
YWdtZW50KCkgPSBkZWZhdWx0OwotICAgICAgICBUZXh0RnJhZ21lbnQodW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkIGVuZCwgZmxvYXQgd2lkdGgsIFR5cGUgdHlwZSwgYm9vbCBpc0NvbGxhcHNlZCA9
IGZhbHNlLCBib29sIGlzQnJlYWthYmxlID0gZmFsc2UpCisgICAgICAgIFRleHRGcmFnbWVudCh1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9hdCB3aWR0aCwgVHlwZSB0eXBlLCBib29s
IGlzTGFzdEluUmVuZGVyZXIsIGJvb2wgaXNDb2xsYXBzZWQgPSBmYWxzZSwgYm9vbCBpc0NvbGxh
cHNhYmxlID0gZmFsc2UsIGJvb2wgaXNCcmVha2FibGUgPSBmYWxzZSkKICAgICAgICAgICAgIDog
bV9zdGFydChzdGFydCkKICAgICAgICAgICAgICwgbV9lbmQoZW5kKQotICAgICAgICAgICAgLCBt
X3R5cGUodHlwZSkKICAgICAgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgICAgICwg
bV90eXBlKHR5cGUpCisgICAgICAgICAgICAsIG1faXNMYXN0SW5SZW5kZXJlcihpc0xhc3RJblJl
bmRlcmVyKQogICAgICAgICAgICAgLCBtX2lzQ29sbGFwc2VkKGlzQ29sbGFwc2VkKQorICAgICAg
ICAgICAgLCBtX2lzQ29sbGFwc2FibGUoaXNDb2xsYXBzYWJsZSkKICAgICAgICAgICAgICwgbV9p
c0JyZWFrYWJsZShpc0JyZWFrYWJsZSkKICAgICAgICAgewogICAgICAgICB9CkBAIC01Nyw3ICs1
OSw5IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9l
bmQ7IH0KICAgICAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CiAg
ICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgICAgICBib29s
IGlzTGFzdEluUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2lzTGFzdEluUmVuZGVyZXI7IH0K
ICAgICAgICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xsYXBzZWQ7
IH0KKyAgICAgICAgYm9vbCBpc0NvbGxhcHNhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxh
cHNhYmxlOyB9CiAgICAgICAgIGJvb2wgaXNCcmVha2FibGUoKSBjb25zdCB7IHJldHVybiBtX2lz
QnJlYWthYmxlOyB9CiAKICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gc3Rh
cnQoKSA9PSBlbmQoKTsgfQpAQCAtNjYsMTMgKzcwLDE2IEBAIHB1YmxpYzoKICAgICBwcml2YXRl
OgogICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0IHsgMCB9OwogICAgICAgICB1bnNpZ25lZCBtX2Vu
ZCB7IDAgfTsKLSAgICAgICAgVHlwZSBtX3R5cGUgeyBOb25XaGl0ZXNwYWNlIH07CiAgICAgICAg
IGZsb2F0IG1fd2lkdGggeyAwIH07CisgICAgICAgIFR5cGUgbV90eXBlIHsgTm9uV2hpdGVzcGFj
ZSB9OworICAgICAgICBib29sIG1faXNMYXN0SW5SZW5kZXJlciB7IGZhbHNlIH07CiAgICAgICAg
IGJvb2wgbV9pc0NvbGxhcHNlZCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9pc0NvbGxhcHNh
YmxlIHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBtX2lzQnJlYWthYmxlIHsgZmFsc2UgfTsKICAg
ICB9OwogICAgIFRleHRGcmFnbWVudCBuZXh0VGV4dEZyYWdtZW50KGZsb2F0IHhQb3NpdGlvbiA9
IDApOwotICAgIGZsb2F0IHRleHRXaWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxv
YXQgeFBvc2l0aW9uKSBjb25zdDsKKyAgICB2b2lkIHJldmVydFRvRnJhZ21lbnQoY29uc3QgVGV4
dEZyYWdtZW50Jik7CisgICAgZmxvYXQgdGV4dFdpZHRoKHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24s
IHVuc2lnbmVkIGVuZFBvc2l0aW9uLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0OwogCiAgICAgc3Ry
dWN0IFN0eWxlIHsKICAgICAgICAgZXhwbGljaXQgU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmKTsK
QEAgLTg4LDE5ICs5NSwxOCBAQCBwdWJsaWM6CiAgICAgICAgIEF0b21pY1N0cmluZyBsb2NhbGU7
CiAgICAgfTsKICAgICBjb25zdCBTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxl
OyB9Ci0gICAgLy8gRklYTUU6IHJlbW92ZSBzcGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkoKQot
ICAgIGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2VnbWVudEZvclBvc2l0aW9uKHVuc2ln
bmVkIHBvc2l0aW9uKSBjb25zdCB7IHJldHVybiBtX2Zsb3dDb250ZW50cy5zZWdtZW50Rm9yUG9z
aXRpb24ocG9zaXRpb24pOyB9OwogCiBwcml2YXRlOgogICAgIGVudW0gUG9zaXRpb25UeXBlIHsg
QnJlYWthYmxlLCBOb25XaGl0ZXNwYWNlIH07Ci0gICAgdW5zaWduZWQgc2tpcFRvTmV4dFBvc2l0
aW9uKFBvc2l0aW9uVHlwZSwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbikgY29uc3Q7Ci0gICAgVUNo
YXIgY2hhcmFjdGVyQXQodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIHVuc2lnbmVkIHNr
aXBUb05leHRQb3NpdGlvbihQb3NpdGlvblR5cGUsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIGZs
b2F0JiB3aWR0aCwgZmxvYXQgeFBvc2l0aW9uKTsKICAgICBib29sIGlzTGluZUJyZWFrKHVuc2ln
bmVkIHBvc2l0aW9uKSBjb25zdDsKLSAgICBib29sIGlzRW5kKHVuc2lnbmVkIHBvc2l0aW9uKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gZmxvYXQgcnVuV2lk
dGgoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3Np
dGlvbikgY29uc3Q7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHVuc2ln
bmVkIG5leHRCcmVha2FibGVQb3NpdGlvbihjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmLCB1
bnNpZ25lZCBzdGFydFBvc2l0aW9uKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gdW5zaWduZWQgbmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihjb25zdCBGbG93Q29udGVu
dHM6OlNlZ21lbnQmLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKTsKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gZmxvYXQgcnVuV2lkdGgoY29uc3QgRmxvd0NvbnRlbnRzOjpT
ZWdtZW50JiwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24sIGZs
b2F0IHhQb3NpdGlvbikgY29uc3Q7CiAKICAgICBGbG93Q29udGVudHMgbV9mbG93Q29udGVudHM7
Ci0gICAgbXV0YWJsZSBMYXp5TGluZUJyZWFrSXRlcmF0b3IgbV9saW5lQnJlYWtJdGVyYXRvcjsK
KyAgICBGbG93Q29udGVudHM6Okl0ZXJhdG9yIG1fZmxvd0NvbnRlbnRzSXRlcmF0b3I7CisgICAg
TGF6eUxpbmVCcmVha0l0ZXJhdG9yIG1fbGluZUJyZWFrSXRlcmF0b3I7CiAgICAgY29uc3QgU3R5
bGUgbV9zdHlsZTsKICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIHsgMCB9OwogfTsKQEAgLTEyNywy
MiArMTMzLDExIEBAIGlubGluZSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IFRl
eHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OnNwCiAgICAgcmV0dXJuIG5ld0ZyYWdt
ZW50OwogfQogCi1pbmxpbmUgVUNoYXIgVGV4dEZyYWdtZW50SXRlcmF0b3I6OmNoYXJhY3RlckF0
KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAotewotICAgIGF1dG8mIHNlZ21lbnQgPSBtX2Zsb3dD
b250ZW50cy5zZWdtZW50Rm9yUG9zaXRpb24ocG9zaXRpb24pOwotICAgIHJldHVybiBzZWdtZW50
LnRleHRbcG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0XTsKLX0KLQogaW5saW5lIGJvb2wgVGV4dEZy
YWdtZW50SXRlcmF0b3I6OmlzTGluZUJyZWFrKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAogewot
ICAgIGlmIChpc0VuZChwb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gbV9zdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVyQXQocG9zaXRpb24pID09ICdc
bic7Ci19Ci0KLWlubGluZSBib29sIFRleHRGcmFnbWVudEl0ZXJhdG9yOjppc0VuZCh1bnNpZ25l
ZCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICByZXR1cm4gcG9zaXRpb24gPj0gbV9mbG93Q29udGVu
dHMubGVuZ3RoKCk7CisgICAgYXV0byYgc2VnbWVudCA9ICptX2Zsb3dDb250ZW50c0l0ZXJhdG9y
OworICAgIEFTU0VSVChzZWdtZW50LnN0YXJ0IDw9IHBvc2l0aW9uICYmIHBvc2l0aW9uIDwgc2Vn
bWVudC5lbmQpOworICAgIHJldHVybiBtX3N0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBzZWdtZW50
LnRleHRbcG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0XSA9PSAnXG4nOwogfQogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248803</attachid>
            <date>2015-03-16 21:16:03 -0700</date>
            <delta_ts>2015-03-17 12:32:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142579-20150316211533.patch</filename>
            <type>text/plain</type>
            <size>46721</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGRmYTgyNjUxYzNjZjg4
MTdlZmFmZDU4M2JjOGQ3OTk1NGUwMjcyNy4uYTIxMmMyYzg1OGVkY2UyMzc4NWY2MjMzMDBmZmMz
MDI5NDNiOWE5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE1LTAzLTE2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBTcGxpdCBmcmFnbWVudHMgb24gcmVuZGVyZXIgYm91bmRhcnkgb24gdGhlIGZseS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZyYWdtZW50IHNwbGl0
dGluZyBhdCByZW5kZXJlcnMnIGJvdW5kYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgaXMgbm8g
bG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgVGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQgVGV4dEZyYWdt
ZW50SXRlcmF0b3I6Om5leHRUZXh0RnJhZ21lbnQoKSBkb2VzIG5vdCBjb25jYXRlbmF0ZQorICAg
ICAgICBmcmFnbWVudHMgYWNyb3NzIHJlbmRlcmVyIGJvdW5kYXJ5LgorCisgICAgICAgIFRlc3Q6
IGZhc3QvdGV4dC9zaW1wbGUtbGluZS13aXRoLW11bHRpcGxlLXJlbmRlcmVycy5odG1sCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0OjpyZXZlcnRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVk
ZWQpOiBDaGVjayBpZiBmcmFnbWVudHMgbmVlZCBhIG5ldyBydW4gYW5kCisgICAgICAgIHdoZXRo
ZXIgbmVpZ2hib3JpbmcgZnJhZ21lbnRzIG5lZWQgY29sbGFwc2luZy4KKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6cmV2ZXJ0VW5jb21taXR0ZWQpOiBSZXZl
cnQgZnJhZ21lbnRzIG92ZXIgbXVsdGlwbGUgcmVuZGVyZXJzIGlmIHRoZXkgZm9ybQorICAgICAg
ICBhIGZyYWdtZW50IGNvbnRpbnVhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OkxpbmVTdGF0ZTo6cmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmZvcmNlRnJhZ21lbnRUb0xpbmUpOiBFbnN1cmUgdGhh
dCBpZiBhIGZyYWdtZW50IGhhcyBjb250aW51YXRpb24gYWNyb3NzIG11bHRpcGxlIHJlbmRlcmVy
cywKKyAgICAgICAgdGhleSBhbGwgZ2V0IGFkZGVkIHRvIHRoZSBjdXJyZW50IGxpbmUuCisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjcmVhdGVMaW5lUnVucyk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmFwcGVuZEZyYWdtZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZyYWdtZW50Rm9y
d2FyZEl0ZXJhdG9yOjpGcmFnbWVudEZvcndhcmRJdGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGcmFnbWVudEZvcndhcmRJdGVyYXRvcjo6b3Bl
cmF0b3IrKyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpG
cmFnbWVudEZvcndhcmRJdGVyYXRvcjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGcmFnbWVudEZvcndhcmRJdGVyYXRvcjo6b3BlcmF0
b3IqKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmJlZ2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmVuZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmVXcmFwKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnJlbW92ZVRyYWlsaW5n
V2hpdGVzcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0
Ojp1cGRhdGVMaW5lQ29uc3RyYWlucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpzcGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y3JlYXRlVGV4dFJ1bnMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dDo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5o
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzOjpJdGVy
YXRvcjo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZs
b3dDb250ZW50czo6SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHM6Okl0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwYWludEZsb3cpOiBVbnJlbGF0ZWQgZml4IG9uIG5v
bi1jb2xsYXBzZWQgdGFiIHBvc2l0aW9uLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudEl0ZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9y
OjpuZXh0VGV4dEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6
OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpyZXZlcnRUb0ZyYWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjp0ZXh0V2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6
OnNraXBUb05leHRQb3NpdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxh
eW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6VGV4dEZyYWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9y
OjpUZXh0RnJhZ21lbnQ6Om92ZXJsYXBzVG9OZXh0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6
aXNDb2xsYXBzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0
RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjppc0xpbmVCcmVh
ayk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVy
YXRvcjo6VGV4dEZyYWdtZW50OjpzcGxpdCk6IERlbGV0ZWQuCisKIDIwMTUtMDMtMTAgIFphbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1wbGUgbGluZSBsYXlvdXQ6
IE1lcmdlIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpmaW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uKCkg
YW5kIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpmaW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbigp
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCmluZGV4
IDk2OWFiNGEyODQ4NDA2NWEzNjE3NDliNWIzMmFjY2QwZTAzZTY1N2IuLmM0OWZjZWM0NDI4Y2Mz
M2I0MTIwZWM4NTYyMTdlM2RlMjQzMDhjYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dC5jcHAKQEAgLTIzMSw5ICsyMzEsMjcgQEAgc3RhdGljIGZsb2F0
IGNvbXB1dGVMaW5lTGVmdChFVGV4dEFsaWduIHRleHRBbGlnbiwgZmxvYXQgYXZhaWxhYmxlV2lk
dGgsIGZsb2F0IGMKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcmV2ZXJ0UnVucyhM
YXlvdXQ6OlJ1blZlY3RvciYgcnVucywgdW5zaWduZWQgbGVuZ3RoLCBmbG9hdCB3aWR0aCkKK3sK
KyAgICBBU1NFUlQocnVucy5zaXplKCkpOworICAgIHdoaWxlIChsZW5ndGgpIHsKKyAgICAgICAg
UnVuJiBsYXN0UnVuID0gcnVucy5sYXN0KCk7CisgICAgICAgIHVuc2lnbmVkIGxhc3RSdW5MZW5n
dGggPSBsYXN0UnVuLmVuZCAtIGxhc3RSdW4uc3RhcnQ7CisgICAgICAgIGlmIChsYXN0UnVuTGVu
Z3RoID4gbGVuZ3RoKSB7CisgICAgICAgICAgICBsYXN0UnVuLmxvZ2ljYWxSaWdodCAtPSB3aWR0
aDsKKyAgICAgICAgICAgIGxhc3RSdW4uZW5kIC09IGxlbmd0aDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIHJ1bnMucmVtb3ZlTGFzdCgpOworICAgICAgICBsZW5ndGgg
LT0gbGFzdFJ1bkxlbmd0aDsKKyAgICAgICAgd2lkdGggLT0gKGxhc3RSdW4ubG9naWNhbFJpZ2h0
IC0gbGFzdFJ1bi5sb2dpY2FsTGVmdCk7CisgICAgfQorfQorCiBjbGFzcyBMaW5lU3RhdGUgewog
cHVibGljOgogICAgIHZvaWQgc2V0QXZhaWxhYmxlV2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9hdmFp
bGFibGVXaWR0aCA9IHdpZHRoOyB9CisgICAgdm9pZCBzZXRDb2xsYXBlZFdoaXRlc3BhY2VXaWR0
aChmbG9hdCB3aWR0aCkgeyBtX2NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aCA9IHdpZHRoOyB9CiAg
ICAgdm9pZCBzZXRMb2dpY2FsTGVmdE9mZnNldChmbG9hdCBvZmZzZXQpIHsgbV9sb2dpY2FsTGVm
dE9mZnNldCA9IG9mZnNldDsgfQogICAgIHZvaWQgc2V0T3ZlcmZsb3dlZEZyYWdtZW50KGNvbnN0
IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSB7IG1fb3ZlcmZs
b3dlZEZyYWdtZW50ID0gZnJhZ21lbnQ7IH0KIApAQCAtMjQxLDI1ICsyNTksNTEgQEAgcHVibGlj
OgogICAgIGZsb2F0IGxvZ2ljYWxMZWZ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2Fs
TGVmdE9mZnNldDsgfQogICAgIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQmIG92ZXJmbG93ZWRGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3dlZEZyYWdt
ZW50OyB9CiAgICAgYm9vbCBoYXNUcmFpbGluZ1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBt
X3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aDsgfQorICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQgbGFzdEZyYWdtZW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudHMubGFz
dCgpOyB9CiAgICAgYm9vbCBpc1doaXRlc3BhY2VPbmx5KCkgY29uc3QgeyByZXR1cm4gbV90cmFp
bGluZ1doaXRlc3BhY2VXaWR0aCAmJiBtX3J1bnNXaWR0aCA9PSBtX3RyYWlsaW5nV2hpdGVzcGFj
ZVdpZHRoOyB9CiAgICAgYm9vbCBmaXRzKGZsb2F0IGV4dHJhKSBjb25zdCB7IHJldHVybiBtX2F2
YWlsYWJsZVdpZHRoID49IG1fcnVuc1dpZHRoICsgZXh0cmE7IH0KICAgICBib29sIGZpcnN0Q2hh
cmFjdGVyRml0cygpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGFyYWN0ZXJGaXRzOyB9CiAgICAg
ZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3J1bnNXaWR0aDsgfQorICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fZnJhZ21lbnRzLnNpemUoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIW1fbGFzdENvbWl0dGVkLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1fZnJhZ21l
bnRzLmxhc3QoKS5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCk7CisgICAgfQogCi0gICAgdm9pZCBh
cHBlbmRGcmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBm
cmFnbWVudCwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMpCisgICAgdm9pZCBhcHBlbmRGcmFnbWVu
dEFuZENyZWF0ZVJ1bklmTmVlZGVkKGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQmIGZyYWdtZW50LCBMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykKICAgICB7CiAgICAgICAg
IC8vIEFkanVzdCBlbmQgcG9zaXRpb24gd2hpbGUgY29sbGFwc2luZy4KICAgICAgICAgdW5zaWdu
ZWQgZW5kUG9zaXRpb24gPSBmcmFnbWVudC5pc0NvbGxhcHNlZCgpID8gZnJhZ21lbnQuc3RhcnQo
KSArIDEgOiBmcmFnbWVudC5lbmQoKTsKLQotICAgICAgICBpZiAobV9jcmVhdGVOZXdSdW4pCisg
ICAgICAgIC8vIE5ldyBsaW5lIG5lZWRzIG5ldyBydW4uCisgICAgICAgIGlmICghbV9ydW5zV2lk
dGgpCiAgICAgICAgICAgICBydW5zLmFwcGVuZChSdW4oZnJhZ21lbnQuc3RhcnQoKSwgZW5kUG9z
aXRpb24sIG1fcnVuc1dpZHRoLCBtX3J1bnNXaWR0aCArIGZyYWdtZW50LndpZHRoKCksIGZhbHNl
KSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHJ1bnMuc2l6ZSgpKTsKLSAg
ICAgICAgICAgIFJ1biYgbGFzdFJ1biA9IHJ1bnMubGFzdCgpOwotICAgICAgICAgICAgbGFzdFJ1
bi5lbmQgPSBlbmRQb3NpdGlvbjsKLSAgICAgICAgICAgIGxhc3RSdW4ubG9naWNhbFJpZ2h0ID0g
bV9ydW5zV2lkdGggKyBmcmFnbWVudC53aWR0aCgpOworICAgICAgICAgICAgY29uc3QgYXV0byYg
bGFzdEZyYWdtZW50ID0gbV9mcmFnbWVudHMubGFzdCgpOworICAgICAgICAgICAgLy8gUmVzZXQg
dW5jb21taXR0ZWQgZnJhZ21lbnQgd2hlbiB0aGUgcHJldmlvdXMgZnJhZ21lbnQgaXMgYWxsIHNl
dCAoaW5jbHVkaW5nIG11bHRpcGxlIHBhcnRzIGFjcm9zcyByZW5kZXJlcnMpCisgICAgICAgICAg
ICBpZiAoKGxhc3RGcmFnbWVudC50eXBlKCkgIT0gZnJhZ21lbnQudHlwZSgpKSB8fCAhbGFzdEZy
YWdtZW50Lm92ZXJsYXBzVG9OZXh0UmVuZGVyZXIoKSkKKyAgICAgICAgICAgICAgICBtX2xhc3RD
b21pdHRlZCA9IGxhc3RGcmFnbWVudDsKKyAgICAgICAgICAgIC8vIENvbGxhcHNlIG5laWdoYm91
cmluZyB3aGl0ZXNwYWNlLCBpZiB0aGV5IGFyZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyZXJzIGFu
ZCBhcmUgbm90IGNvbGxhcHNlZCB5ZXQuCisgICAgICAgICAgICBpZiAobGFzdEZyYWdtZW50Lmlz
Q29sbGFwc2libGUoKSAmJiBmcmFnbWVudC5pc0NvbGxhcHNpYmxlKCkpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQobGFzdEZyYWdtZW50LmlzTGFzdEluUmVuZGVyZXIoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFsYXN0RnJhZ21lbnQuaXNDb2xsYXBzZWQoKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBMaW5lIHdpZHRoIG5lZWRzIHRvIGJlIHJlc2V0IHNvIHRoYXQgbm93IGl0IHRha2Vz
IGNvbGxhcHNpbmcgaW50byBjb25zaWRlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBtX3J1
bnNXaWR0aCAtPSAobGFzdEZyYWdtZW50LndpZHRoKCkgLSBtX2NvbGxhcHNlZFdoaXRlc3BhY2VX
aWR0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFRoaXMgZnJhZ21l
bnQgaXMgY29sbGFwc2VkIGNvbXBsZXRlbHkuIE5vIHJ1biBpcyBuZWVkZWQuCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxhc3RGcmFnbWVu
dC5pc0xhc3RJblJlbmRlcmVyKCkgfHwgbGFzdEZyYWdtZW50LmlzQ29sbGFwc2VkKCkpCisgICAg
ICAgICAgICAgICAgcnVucy5hcHBlbmQoUnVuKGZyYWdtZW50LnN0YXJ0KCksIGVuZFBvc2l0aW9u
LCBtX3J1bnNXaWR0aCwgbV9ydW5zV2lkdGggKyBmcmFnbWVudC53aWR0aCgpLCBmYWxzZSkpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUnVuJiBsYXN0UnVuID0gcnVucy5s
YXN0KCk7CisgICAgICAgICAgICAgICAgbGFzdFJ1bi5lbmQgPSBlbmRQb3NpdGlvbjsKKyAgICAg
ICAgICAgICAgICBsYXN0UnVuLmxvZ2ljYWxSaWdodCArPSBmcmFnbWVudC53aWR0aCgpOworICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG1fY3JlYXRlTmV3UnVuID0gZnJhZ21lbnQu
aXNDb2xsYXBzZWQoKTsKKyAgICAgICAgbV9mcmFnbWVudHMuYXBwZW5kKGZyYWdtZW50KTsKICAg
ICAgICAgbV9ydW5zV2lkdGggKz0gZnJhZ21lbnQud2lkdGgoKTsKIAogICAgICAgICBpZiAoZnJh
Z21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRl
c3BhY2UpIHsKQEAgLTI3NCwxOCArMzE4LDM0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZmly
c3RDaGFyYWN0ZXJGaXRzID0gZnJhZ21lbnQuc3RhcnQoKSArIDEgPiBlbmRQb3NpdGlvbiB8fCBt
X3J1bnNXaWR0aCA8PSBtX2F2YWlsYWJsZVdpZHRoOwogICAgIH0KIAotICAgIHZvaWQgcmVtb3Zl
VHJhaWxpbmdXaGl0ZXNwYWNlKExheW91dDo6UnVuVmVjdG9yJiBydW5zKQorICAgIFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgcmV2ZXJ0VW5jb21taXR0ZWQoTGF5b3V0OjpSdW5W
ZWN0b3ImIHJ1bnMpCiAgICAgewotICAgICAgICBBU1NFUlQocnVucy5zaXplKCkpOwotICAgICAg
ICBSdW4mIGxhc3RSdW4gPSBydW5zLmxhc3QoKTsKLSAgICAgICAgbGFzdFJ1bi5sb2dpY2FsUmln
aHQgLT0gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsKLSAgICAgICAgbGFzdFJ1bi5lbmQgLT0g
bV90cmFpbGluZ1doaXRlc3BhY2VMZW5ndGg7Ci0gICAgICAgIGlmIChsYXN0UnVuLnN0YXJ0ID09
IGxhc3RSdW4uZW5kKQotICAgICAgICAgICAgcnVucy5yZW1vdmVMYXN0KCk7CisgICAgICAgIEFT
U0VSVChtX2ZyYWdtZW50cy5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCByZXZlcnRMZW5ndGgg
PSAwOworICAgICAgICBmbG9hdCByZXZlcnRXaWR0aCA9IDA7CisgICAgICAgIHdoaWxlIChtX2Zy
YWdtZW50cy5zaXplKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGN1cnJlbnQgPSBtX2Zy
YWdtZW50cy5sYXN0KCk7CisgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBtX2xhc3RDb21pdHRl
ZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldmVydExlbmd0aCArPSBj
dXJyZW50LmVuZCgpIC0gY3VycmVudC5zdGFydCgpOworICAgICAgICAgICAgcmV2ZXJ0V2lkdGgg
Kz0gY3VycmVudC53aWR0aCgpOworICAgICAgICAgICAgbV9mcmFnbWVudHMucmVtb3ZlTGFzdCgp
OworICAgICAgICB9CisgICAgICAgIG1fcnVuc1dpZHRoIC09IHJldmVydFdpZHRoOworICAgICAg
ICBpZiAocmV2ZXJ0TGVuZ3RoKQorICAgICAgICAgICAgcmV2ZXJ0UnVucyhydW5zLCByZXZlcnRM
ZW5ndGgsIHJldmVydFdpZHRoKTsKKyAgICAgICAgcmV0dXJuIG1fbGFzdENvbWl0dGVkOworICAg
IH0KIAorICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKExheW91dDo6UnVuVmVjdG9y
JiBydW5zKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHN5bmMgbV9mcmFnbWVudCwgYnV0IGl0
J3Mgb2sgZm9yIG5vdyBhcyB3ZSBkb24ndCB1c2UgbV9mcmFnbWVudCBhbnltb3JlIGFmdGVyIHJl
bW92ZVRyYWlsaW5nV2hpdGVzcGFjZS4KKyAgICAgICAgaWYgKCFtX3RyYWlsaW5nV2hpdGVzcGFj
ZUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmV2ZXJ0UnVucyhydW5zLCBt
X3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCwgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCk7CiAg
ICAgICAgIG1fcnVuc1dpZHRoIC09IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7Ci0gICAgICAg
IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggPSAwOwogICAgICAgICBtX3RyYWlsaW5nV2hpdGVz
cGFjZUxlbmd0aCA9IDA7CisgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggPSAwOwog
ICAgIH0KIAogcHJpdmF0ZToKQEAgLTI5MywxMiArMzUzLDE0IEBAIHByaXZhdGU6CiAgICAgZmxv
YXQgbV9sb2dpY2FsTGVmdE9mZnNldCB7IDAgfTsKICAgICBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6
VGV4dEZyYWdtZW50IG1fb3ZlcmZsb3dlZEZyYWdtZW50OwogICAgIGZsb2F0IG1fcnVuc1dpZHRo
IHsgMCB9OwotICAgIGJvb2wgbV9jcmVhdGVOZXdSdW4geyB0cnVlIH07CisgICAgVGV4dEZyYWdt
ZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBtX2xhc3RDb21pdHRlZDsKICAgICBmbG9hdCBtX3Ry
YWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9OyAvLyBVc2UgdGhpcyB0byByZW1vdmUgdHJhaWxp
bmcgd2hpdGVzcGFjZSB3aXRob3V0IHJlLW1lc3VyaW5nIHRoZSB0ZXh0LgogICAgIHVuc2lnbmVk
IG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoIHsgMCB9OworICAgIGZsb2F0IG1fY29sbGFwc2Vk
V2hpdGVzcGFjZVdpZHRoIHsgMCB9OwogICAgIC8vIEhhdmluZyBvbmUgY2hhcmFjdGVyIG9uIHRo
ZSBsaW5lIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gaXQgYWN0dWFsbHkgZml0cy4KICAgICAv
LyBGaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpcnN0IGZyYWdtZW50IG1pZ2h0IGJlIGZvcmNlZCBv
biB0byB0aGUgY3VycmVudCBsaW5lIGV2ZW4gaWYgaXQgZG9lcyBub3QgZml0LgogICAgIGJvb2wg
bV9maXJzdENoYXJhY3RlckZpdHMgeyBmYWxzZSB9OworICAgIFZlY3RvcjxUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6VGV4dEZyYWdtZW50PiBtX2ZyYWdtZW50czsKIH07CiAKIGNsYXNzIEZyYWdtZW50
Rm9yd2FyZEl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJh
dG9yX3RhZywgdW5zaWduZWQ+IHsKQEAgLTM4OSwxNCArNDUxLDM2IEBAIHN0YXRpYyBUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0RnJhZ21lbnQoVGV4dEZyYWdtZW50SXRl
cmF0b3ImIHRlCiAgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBza2lwIHRoZSBs
ZWFkaW5nIHdoaXRlc3BhY2UuCi0gICAgaWYgKHN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSAmJiBm
aXJzdEZyYWdtZW50LnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50
OjpXaGl0ZXNwYWNlKQotICAgICAgICBmaXJzdEZyYWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0
b3IubmV4dFRleHRGcmFnbWVudCgpOworICAgIGlmIChzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2Up
IHsKKyAgICAgICAgd2hpbGUgKGZpcnN0RnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0
ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpCisgICAgICAgICAgICBmaXJzdEZyYWdt
ZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOworICAgIH0KICAg
ICByZXR1cm4gZmlyc3RGcmFnbWVudDsKIH0KIAorc3RhdGljIHZvaWQgZm9yY2VGcmFnbWVudFRv
TGluZShMaW5lU3RhdGUmIGxpbmUsIFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJ
dGVyYXRvciwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KQoreworICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRB
bmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7CisgICAgLy8gQ2hlY2sgaWYgdGhl
cmUgYXJlIG1vcmUgZnJhZ21lbnRzIHRvIGFkZCB0byB0aGUgY3VycmVudCBsaW5lLgorICAgIGlm
ICghZnJhZ21lbnQub3ZlcmxhcHNUb05leHRSZW5kZXJlcigpKQorICAgICAgICByZXR1cm47Cisg
ICAgYXV0byBuZXh0RnJhZ21lbnQgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5uZXh0VGV4dEZyYWdt
ZW50KCk7CisgICAgZG8geworICAgICAgICBpZiAobmV4dEZyYWdtZW50LnR5cGUoKSAhPSBmcmFn
bWVudC50eXBlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbGluZS5hcHBlbmRGcmFn
bWVudEFuZENyZWF0ZVJ1bklmTmVlZGVkKG5leHRGcmFnbWVudCwgcnVucyk7CisgICAgICAgIC8v
IERvZXMgaXQgb3ZlcmxhcCB0byB0aGUgbmV4dCBzZWdtZW50PworICAgICAgICBpZiAoIW5leHRG
cmFnbWVudC5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG5leHRGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21l
bnQoKTsKKyAgICB9IHdoaWxlICh0cnVlKTsKKyAgICBsaW5lLnNldE92ZXJmbG93ZWRGcmFnbWVu
dChuZXh0RnJhZ21lbnQpOworfQorCiBzdGF0aWMgYm9vbCBjcmVhdGVMaW5lUnVucyhMaW5lU3Rh
dGUmIGxpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lLCBMYXlvdXQ6OlJ1blZlY3Rv
ciYgcnVucywgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yKQogewog
ICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKTsKKyAg
ICBsaW5lLnNldENvbGxhcGVkV2hpdGVzcGFjZVdpZHRoKHN0eWxlLnNwYWNlV2lkdGgpOwogICAg
IGJvb2wgbGluZUNhbkJlV3JhcHBlZCA9IHN0eWxlLndyYXBMaW5lcyB8fCBzdHlsZS5icmVha1dv
cmRPbk92ZXJmbG93OwogICAgIGF1dG8gZnJhZ21lbnQgPSBmaXJzdEZyYWdtZW50KHRleHRGcmFn
bWVudEl0ZXJhdG9yLCBwcmV2aW91c0xpbmUpOwogICAgIHdoaWxlIChmcmFnbWVudC50eXBlKCkg
IT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29udGVudEVuZCkgewpAQCAt
NDA0LDcgKzQ4OCw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUxpbmVSdW5zKExpbmVTdGF0ZSYgbGlu
ZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExheW91CiAgICAgICAgIGlmIChmcmFn
bWVudC50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6TGluZUJy
ZWFrKSB7CiAgICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyBsaW5lIGZyYWdtZW50IG9ubHkgaWYg
dGhlcmUncyBub3RoaW5nIG9uIHRoZSBsaW5lLiAob3RoZXJ3aXNlIHRoZSBleHRyYSBuZXcgbGlu
ZSBjaGFyYWN0ZXIgd291bGQgc2hvdyB1cCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50LikKICAg
ICAgICAgICAgIGlmICghbGluZS53aWR0aCgpKQotICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5k
RnJhZ21lbnQoZnJhZ21lbnQsIHJ1bnMpOworICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJh
Z21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobGluZUNhbkJlV3JhcHBlZCAmJiAhbGluZS5m
aXRzKGZyYWdtZW50LndpZHRoKCkpKSB7CkBAIC00MTMsMTMgKzQ5NywxMyBAQCBzdGF0aWMgYm9v
bCBjcmVhdGVMaW5lUnVucyhMaW5lU3RhdGUmIGxpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlv
dXNMaW5lLCBMYXlvdQogICAgICAgICAgICAgLy8gMi4gV2hpdGVzcGFjZSBjb2xsYXBzZSBvZmY6
IHdoaXRlc3BhY2UgaXMgd3JhcHBlZC4KICAgICAgICAgICAgIC8vIDMuIEZpcnN0LCBub24td2hp
dGVzcGFjZSBmcmFnbWVudCBpcyBlaXRoZXIgd3JhcHBlZCBvciBrZXB0IG9uIHRoZSBsaW5lLiAo
ZGVwZW5kcyBvbiBvdmVyZmxvdy13cmFwKQogICAgICAgICAgICAgLy8gNC4gTm9uLXdoaXRlc3Bh
Y2UgZnJhZ21lbnQgd2hlbiB0aGVyZSdzIGFscmVhZHkgYW5vdGhlciBmcmFnbWVudCBvbiB0aGUg
bGluZSBnZXRzIHB1c2hlZCB0byB0aGUgbmV4dCBsaW5lLgotICAgICAgICAgICAgYm9vbCBlbXB0
eUxpbmUgPSAhbGluZS53aWR0aCgpOworICAgICAgICAgICAgYm9vbCBlbXB0eUxpbmUgPSBsaW5l
LmlzRW1wdHkoKTsKICAgICAgICAgICAgIC8vIFdoaXRlc3BhY2UgZnJhZ21lbnQuCiAgICAgICAg
ICAgICBpZiAoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQ6OldoaXRlc3BhY2UpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN0eWxlLmNvbGxhcHNl
V2hpdGVzcGFjZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBTcGxpdCB0aGUgZnJhZ21lbnQ7
IChtb2RpZmllZClmcmFnbWVudCBzdGF5cyBvbiB0aGlzIGxpbmUsIG92ZXJmbG93ZWRGcmFnbWVu
dCBpcyBwdXNoZWQgdG8gbmV4dCBsaW5lLgogICAgICAgICAgICAgICAgICAgICBsaW5lLnNldE92
ZXJmbG93ZWRGcmFnbWVudChzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdtZW50LCBsaW5lLmF2
YWlsYWJsZVdpZHRoKCkgLSBsaW5lLndpZHRoKCksIGVtcHR5TGluZSwgdGV4dEZyYWdtZW50SXRl
cmF0b3IpKTsKLSAgICAgICAgICAgICAgICAgICAgbGluZS5hcHBlbmRGcmFnbWVudChmcmFnbWVu
dCwgcnVucyk7CisgICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVh
dGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIC8vIFdoZW4gd2hpdGVzcGFjZSBjb2xsYXBzZSBpcyBvbiwgd2hpdGVzcGFjZSB0
aGF0IGRvZXNuJ3QgZml0IGlzIHNpbXBseSBza2lwcGVkLgogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtNDI4LDIzICs1MTIsMzAgQEAgc3RhdGljIGJvb2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0
YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3UKICAgICAgICAg
ICAgIGlmICgoZW1wdHlMaW5lICYmIHN0eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3cpIHx8ICFzdHls
ZS53cmFwTGluZXMpIHsKICAgICAgICAgICAgICAgICAvLyBTcGxpdCB0aGUgZnJhZ21lbnQ7ICht
b2RpZmllZClmcmFnbWVudCBzdGF5cyBvbiB0aGlzIGxpbmUsIG92ZXJmbG93ZWRGcmFnbWVudCBp
cyBwdXNoZWQgdG8gbmV4dCBsaW5lLgogICAgICAgICAgICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dl
ZEZyYWdtZW50KHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUuYXZhaWxhYmxl
V2lkdGgoKSAtIGxpbmUud2lkdGgoKSwgZW1wdHlMaW5lLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcikp
OwotICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnQoZnJhZ21lbnQsIHJ1bnMpOwor
ICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChm
cmFnbWVudCwgcnVucyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAvLyBOb24tYnJlYWthYmxlIG5vbi13aGl0ZXNwYWNlIGZpcnN0IGZyYWdtZW50
LiBBZGQgaXQgdG8gdGhlIGN1cnJlbnQgbGluZS4gLWl0IG92ZXJmbG93cyB0aG91Z2guCisgICAg
ICAgICAgICBBU1NFUlQoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UpOwogICAgICAgICAgICAgaWYgKGVtcHR5TGluZSkg
ewotICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnQoZnJhZ21lbnQsIHJ1bnMpOwor
ICAgICAgICAgICAgICAgIGZvcmNlRnJhZ21lbnRUb0xpbmUobGluZSwgdGV4dEZyYWdtZW50SXRl
cmF0b3IsIHJ1bnMsIGZyYWdtZW50KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIC8vIE5vbi1icmVha2FibGUgbm9uLXdoaXRlc3BhY2UgZnJhZ21l
bnQgd2hlbiB0aGVyZSdzIGFscmVhZHkgY29udGVudCBvbiB0aGUgbGluZS4gUHVzaCBpdCB0byB0
aGUgbmV4dCBsaW5lLgorICAgICAgICAgICAgaWYgKGxpbmUubGFzdEZyYWdtZW50KCkub3Zlcmxh
cHNUb05leHRSZW5kZXJlcigpKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBm
cmFnbWVudCBpcyBhIGNvbnRpbnVhdGlvbiBvZiBhIHByZXZpb3VzIHNlZ21lbnQuIEluIHN1Y2gg
Y2FzZXMsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZW0gYWxsLgorICAgICAgICAgICAgICAgIGNvbnN0
IGF1dG8mIGN1cnJlbnRGcmFnbWVudCA9IGxpbmUucmV2ZXJ0VW5jb21taXR0ZWQocnVucyk7Cisg
ICAgICAgICAgICAgICAgdGV4dEZyYWdtZW50SXRlcmF0b3IucmV2ZXJ0VG9GcmFnbWVudChjdXJy
ZW50RnJhZ21lbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQoZnJhZ21lbnQpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgbGluZS5hcHBlbmRGcmFnbWVudChmcmFnbWVu
dCwgcnVucyk7CisgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRl
ZChmcmFnbWVudCwgcnVucyk7CiAgICAgICAgIC8vIEZpbmQgdGhlIG5leHQgdGV4dCBmcmFnbWVu
dC4KICAgICAgICAgZnJhZ21lbnQgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5uZXh0VGV4dEZyYWdt
ZW50KGxpbmUud2lkdGgoKSk7CiAgICAgfQotICAgIHJldHVybiBmcmFnbWVudC50eXBlKCkgPT0g
VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29udGVudEVuZCAmJiBsaW5lLm92
ZXJmbG93ZWRGcmFnbWVudCgpLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gKGZyYWdtZW50LnR5cGUo
KSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpDb250ZW50RW5kICYmIGxp
bmUub3ZlcmZsb3dlZEZyYWdtZW50KCkuaXNFbXB0eSgpKSB8fCBsaW5lLm92ZXJmbG93ZWRGcmFn
bWVudCgpLnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpDb250
ZW50RW5kOwogfQogCiBzdGF0aWMgdm9pZCBjbG9zZUxpbmVFbmRpbmdBbmRBZGp1c3RSdW5zKExp
bmVTdGF0ZSYgbGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIHVuc2lnbmVkIHByZXZpb3Vz
UnVuQ291bnQsIHVuc2lnbmVkJiBsaW5lQ291bnQsIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9y
JiB0ZXh0RnJhZ21lbnRJdGVyYXRvcikKQEAgLTQ2NiwyOCArNTU3LDYgQEAgc3RhdGljIHZvaWQg
Y2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhMaW5lU3RhdGUmIGxpbmUsIExheW91dDo6UnVu
VmVjdG9yJiBydW4KICAgICArK2xpbmVDb3VudDsKIH0KIAotc3RhdGljIHZvaWQgc3BsaXRSdW5z
QXRSZW5kZXJlckJvdW5kYXJ5KExheW91dDo6UnVuVmVjdG9yJiBsaW5lUnVucywgY29uc3QgVGV4
dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yKQotewotICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcHJvYmFibHkgc3BsaXQgZHVyaW5nIHJ1biBjb25zdHJ1Y3Rpb24gaW5zdGVh
ZCBvZiBhcyBhIHNlcGFyYXRlIHBhc3MuCi0gICAgaWYgKGxpbmVSdW5zLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHJ1bkluZGV4ID0gMDsKLSAgICBkbyB7Ci0gICAg
ICAgIGNvbnN0IFJ1biYgcnVuID0gbGluZVJ1bnMuYXQocnVuSW5kZXgpOwotICAgICAgICBBU1NF
UlQocnVuLnN0YXJ0ICE9IHJ1bi5lbmQpOwotICAgICAgICBhdXRvJiBzdGFydFNlZ21lbnQgPSB0
ZXh0RnJhZ21lbnRJdGVyYXRvci5zZWdtZW50Rm9yUG9zaXRpb24ocnVuLnN0YXJ0KTsKLSAgICAg
ICAgaWYgKHJ1bi5lbmQgPD0gc3RhcnRTZWdtZW50LmVuZCkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAvLyBUaGlzIHJ1biBvdmVybGFwcyBtdWx0aXBsZSByZW5kZXJlcnMuIFNwbGl0
IGl0IHVwLgotICAgICAgICAvLyBTcGxpdCBydW4gYXQgdGhlIHJlbmRlcmVyJ3MgYm91bmRhcnkg
YW5kIGNyZWF0ZSBhIG5ldyBydW4gZm9yIHRoZSBsZWZ0IHNpZGUsIHdoaWxlIHVzZSB0aGUgY3Vy
cmVudCBydW4gYXMgdGhlIHJpZ2h0IHNpZGUuCi0gICAgICAgIGZsb2F0IGxvZ2ljYWxSaWdodE9m
TGVmdFJ1biA9IHJ1bi5sb2dpY2FsTGVmdCArIHRleHRGcmFnbWVudEl0ZXJhdG9yLnRleHRXaWR0
aChydW4uc3RhcnQsIHN0YXJ0U2VnbWVudC5lbmQsIHJ1bi5sb2dpY2FsTGVmdCk7Ci0gICAgICAg
IGxpbmVSdW5zLmluc2VydChydW5JbmRleCwgUnVuKHJ1bi5zdGFydCwgc3RhcnRTZWdtZW50LmVu
ZCwgcnVuLmxvZ2ljYWxMZWZ0LCBsb2dpY2FsUmlnaHRPZkxlZnRSdW4sIGZhbHNlKSk7Ci0gICAg
ICAgIFJ1biYgcmlnaHRTaWRlUnVuID0gbGluZVJ1bnMuYXQocnVuSW5kZXggKyAxKTsKLSAgICAg
ICAgcmlnaHRTaWRlUnVuLnN0YXJ0ID0gc3RhcnRTZWdtZW50LmVuZDsKLSAgICAgICAgcmlnaHRT
aWRlUnVuLmxvZ2ljYWxMZWZ0ID0gbG9naWNhbFJpZ2h0T2ZMZWZ0UnVuOwotICAgIH0gd2hpbGUg
KCsrcnVuSW5kZXggPCBsaW5lUnVucy5zaXplKCkpOwotfQotCiBzdGF0aWMgdm9pZCBjcmVhdGVU
ZXh0UnVucyhMYXlvdXQ6OlJ1blZlY3RvciYgcnVucywgUmVuZGVyQmxvY2tGbG93JiBmbG93LCB1
bnNpZ25lZCYgbGluZUNvdW50KQogewogICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0Jl
Zm9yZSA9IGZsb3cuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwpAQCAtNTA1LDkgKzU3NCw2IEBA
IHN0YXRpYyB2b2lkIGNyZWF0ZVRleHRSdW5zKExheW91dDo6UnVuVmVjdG9yJiBydW5zLCBSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3csIHVuc2lnCiAgICAgICAgIGlzRW5kT2ZDb250ZW50ID0gY3JlYXRl
TGluZVJ1bnMobGluZSwgcHJldmlvdXNMaW5lLCBydW5zLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcik7
CiAgICAgICAgIGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMobGluZSwgcnVucywgcHJldmlv
dXNSdW5Db3VudCwgbGluZUNvdW50LCB0ZXh0RnJhZ21lbnRJdGVyYXRvcik7CiAgICAgfSB3aGls
ZSAoIWlzRW5kT2ZDb250ZW50KTsKLQotICAgIGlmIChmbG93LmZpcnN0Q2hpbGQoKSAhPSBmbG93
Lmxhc3RDaGlsZCgpKQotICAgICAgICBzcGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkocnVucywg
dGV4dEZyYWdtZW50SXRlcmF0b3IpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8TGF5b3V0PiBjcmVh
dGUoUmVuZGVyQmxvY2tGbG93JiBmbG93KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgKaW5kZXggMWZjMzQ3OWQyZTdh
NzZmNjExOWU5MzcyMzlkOThlZDRiZTQ4YjFmMC4uNWM2YTk0YmEwOTZmNGJkZjg3MTRlYThkMzQ1
ODYxMDk2ZWVjZDNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oCkBAIC01NSw5ICs1NSwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIH0KIAogICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpOworICAgICAgICBJ
dGVyYXRvciYgb3BlcmF0b3ItLSgpOworICAgICAgICBJdGVyYXRvciBvcGVyYXRvcisodW5zaWdu
ZWQgdmFsdWUpIGNvbnN0OwogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3Im
IG90aGVyKSBjb25zdDsKICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBv
dGhlcikgY29uc3Q7Ci0gICAgICAgIGNvbnN0IFNlZ21lbnQmIG9wZXJhdG9yKigpIGNvbnN0IHsg
cmV0dXJuIG1fZmxvd0NvbnRlbnRzLm1fc2VnbWVudHNbbV9zZWdtZW50SW5kZXhdOyB9CisgICAg
ICAgIGNvbnN0IFNlZ21lbnQmIG9wZXJhdG9yKigpIGNvbnN0OworICAgICAgICBjb25zdCBTZWdt
ZW50KiBvcGVyYXRvci0+KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBG
bG93Q29udGVudHMmIG1fZmxvd0NvbnRlbnRzOwpAQCAtNjcsMTUgKzcwLDExIEBAIHB1YmxpYzoK
ICAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yKCp0aGlzLCAwKTsg
fQogICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yKCp0aGlzLCBtX3Nl
Z21lbnRzLnNpemUoKSk7IH0KIAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VnbWVudHMubGFzdCgpLmVuZDsgfTsKLQogICAgIHVuc2lnbmVkIHNlZ21lbnRJbmRleEZv
clBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB1bnNp
Z25lZCBzZWdtZW50SW5kZXhGb3JQb3NpdGlvblNsb3codW5zaWduZWQgcG9zaXRpb24pIGNvbnN0
OwotCiAgICAgY29uc3QgVmVjdG9yPFNlZ21lbnQsIDg+IG1fc2VnbWVudHM7Ci0KICAgICBtdXRh
YmxlIHVuc2lnbmVkIG1fbGFzdFNlZ21lbnRJbmRleDsKIH07CiAKQEAgLTg1LDYgKzg0LDE4IEBA
IGlubGluZSBGbG93Q29udGVudHM6Okl0ZXJhdG9yJiBGbG93Q29udGVudHM6Okl0ZXJhdG9yOjpv
cGVyYXRvcisrKCkKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKK2lubGluZSBGbG93Q29udGVudHM6
Okl0ZXJhdG9yJiBGbG93Q29udGVudHM6Okl0ZXJhdG9yOjpvcGVyYXRvci0tKCkKK3sKKyAgICAt
LW1fc2VnbWVudEluZGV4OworICAgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIEZsb3dDb250
ZW50czo6SXRlcmF0b3IgRmxvd0NvbnRlbnRzOjpJdGVyYXRvcjo6b3BlcmF0b3IrKHVuc2lnbmVk
IHZhbHVlKSBjb25zdAoreworICAgIEFTU0VSVChtX3NlZ21lbnRJbmRleCArIHZhbHVlIDw9IG1f
Zmxvd0NvbnRlbnRzLm1fc2VnbWVudHMuc2l6ZSgpKTsKKyAgICByZXR1cm4gSXRlcmF0b3IobV9m
bG93Q29udGVudHMsIG1fc2VnbWVudEluZGV4ICsgdmFsdWUpOworfQorCiBpbmxpbmUgYm9vbCBG
bG93Q29udGVudHM6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IEZsb3dDb250ZW50czo6SXRl
cmF0b3ImIG90aGVyKSBjb25zdAogewogICAgIHJldHVybiBtX3NlZ21lbnRJbmRleCA9PSBvdGhl
ci5tX3NlZ21lbnRJbmRleDsKQEAgLTk1LDYgKzEwNiwxOCBAQCBpbmxpbmUgYm9vbCBGbG93Q29u
dGVudHM6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEZsb3dDb250ZW50czo6SXRlcmF0b3Im
IG90aAogICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKIH0KIAoraW5saW5lIGNvbnN0IEZs
b3dDb250ZW50czo6U2VnbWVudCYgRmxvd0NvbnRlbnRzOjpJdGVyYXRvcjo6b3BlcmF0b3IqKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9zZWdtZW50SW5kZXggPCBtX2Zsb3dDb250ZW50cy5tX3Nl
Z21lbnRzLnNpemUoKSk7CisgICAgcmV0dXJuIG1fZmxvd0NvbnRlbnRzLm1fc2VnbWVudHNbbV9z
ZWdtZW50SW5kZXhdOworfQorCitpbmxpbmUgY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50KiBG
bG93Q29udGVudHM6Okl0ZXJhdG9yOjpvcGVyYXRvci0+KCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9zZWdtZW50SW5kZXggPCBtX2Zsb3dDb250ZW50cy5tX3NlZ21lbnRzLnNpemUoKSk7CisgICAg
cmV0dXJuICYobV9mbG93Q29udGVudHMubV9zZWdtZW50c1ttX3NlZ21lbnRJbmRleF0pOworfQor
CiBpbmxpbmUgdW5zaWduZWQgRmxvd0NvbnRlbnRzOjpzZWdtZW50SW5kZXhGb3JQb3NpdGlvbih1
bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKIHsKICAgICBhdXRvJiBsYXN0U2VnbWVudCA9IG1fc2Vn
bWVudHNbbV9sYXN0U2VnbWVudEluZGV4XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAppbmRleCA2M2ZhOGJmNjU5NTZi
OGQ2NWU3ZWU4MmUyMjllMmI1MTIyNzBjOGYwLi5lZWIyYWUwOWQyNzFhNDZmMTQzZWY3OWZlNDBl
Y2YxMzgwZjFjY2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCkBAIC04NCw2ICs4NCw3IEBAIHZvaWQgcGFpbnRG
bG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQsIFBh
aW50SW5mbyYgcGFpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgVGV4dFJ1biB0ZXh0
UnVuKHJ1bi50ZXh0KCkpOwogICAgICAgICB0ZXh0UnVuLnNldFRhYlNpemUoIXN0eWxlLmNvbGxh
cHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50YWJTaXplKCkpOworICAgICAgICB0ZXh0UnVuLnNldFhQ
b3MocnVuLnJlY3QoKS54KCkpOwogICAgICAgICBGbG9hdFBvaW50IHRleHRPcmlnaW4gPSBydW4u
YmFzZWxpbmUoKSArIHBhaW50T2Zmc2V0OwogICAgICAgICB0ZXh0T3JpZ2luLnNldFkocm91bmRU
b0RldmljZVBpeGVsKExheW91dFVuaXQodGV4dE9yaWdpbi55KCkpLCBmbG93LmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSkpOwogICAgICAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIHRl
eHRSdW4sIHRleHRPcmlnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcAppbmRl
eCA4NzE3MzE5OWZmYWRmMDFmM2RkMjYzMjg5NGY0MWZjNGZmYjdmNjcyLi4yNDU2MjE2MzAyMmI1
ZDVkZjQxM2FjZDFmODg1OGIwNjViNTIwYmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJh
dG9yLmNwcApAQCAtNDgsNyArNDgsOCBAQCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6U3R5bGU6OlN0
eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIAogVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRl
eHRGcmFnbWVudEl0ZXJhdG9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKICAgICA6IG1f
Zmxvd0NvbnRlbnRzKGZsb3cpCi0gICAgLCBtX2xpbmVCcmVha0l0ZXJhdG9yKCgqbV9mbG93Q29u
dGVudHMuYmVnaW4oKSkudGV4dCwgZmxvdy5zdHlsZSgpLmxvY2FsZSgpKQorICAgICwgbV9jdXJy
ZW50U2VnbWVudChtX2Zsb3dDb250ZW50cy5iZWdpbigpKQorICAgICwgbV9saW5lQnJlYWtJdGVy
YXRvcihtX2N1cnJlbnRTZWdtZW50LT50ZXh0LCBmbG93LnN0eWxlKCkubG9jYWxlKCkpCiAgICAg
LCBtX3N0eWxlKGZsb3cuc3R5bGUoKSkKIHsKIH0KQEAgLTYwLDExNSArNjEsMTM1IEBAIFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgVGV4dEZyYWdtZW50SXRlcmF0b3I6Om5leHRU
ZXh0RnJhZ21lbnQoZmxvYXQKICAgICAvLyAyLiB3aGl0ZXNwYWNlIChjb2xsYXNwZWQsIG5vbi1j
b2xsYXBzZWQgbXVsdGkgb3Igc2luZ2xlKSBvcgogICAgIC8vIDMuIG5vbi13aGl0ZXNwYWNlIGNo
YXJhY3RlcnMuCiAgICAgLy8gNC4gZW1wdHksIGluZGljYXRpbmcgY29udGVudCBlbmQuCi0gICAg
aWYgKGlzRW5kKG1fcG9zaXRpb24pKQorICAgIEFTU0VSVChtX2N1cnJlbnRTZWdtZW50ICE9IG1f
Zmxvd0NvbnRlbnRzLmVuZCgpKTsKKyAgICBpZiAobV9wb3NpdGlvbiA9PSBtX2N1cnJlbnRTZWdt
ZW50LT5lbmQpCisgICAgICAgICsrbV9jdXJyZW50U2VnbWVudDsKKyAgICAvLyBJcyBpdCBjb250
ZW50IGVuZD8KKyAgICBpZiAobV9jdXJyZW50U2VnbWVudCA9PSBtX2Zsb3dDb250ZW50cy5lbmQo
KSkKICAgICAgICAgcmV0dXJuIFRleHRGcmFnbWVudChtX3Bvc2l0aW9uLCBtX3Bvc2l0aW9uLCAw
LCBUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQpOworICAgIHVuc2lnbmVkIHNlZ21lbnRFbmRQb3Np
dGlvbiA9IG1fY3VycmVudFNlZ21lbnQtPmVuZDsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9u
ID0gbV9wb3NpdGlvbjsKICAgICBpZiAoaXNMaW5lQnJlYWsobV9wb3NpdGlvbikpIHsKLSAgICAg
ICAgVGV4dEZyYWdtZW50IGZyYWdtZW50KG1fcG9zaXRpb24sIG1fcG9zaXRpb24gKyAxLCAwLCBU
ZXh0RnJhZ21lbnQ6OkxpbmVCcmVhayk7Ci0gICAgICAgICsrbV9wb3NpdGlvbjsKLSAgICAgICAg
cmV0dXJuIGZyYWdtZW50OworICAgICAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9ICsrbV9wb3Np
dGlvbjsKKyAgICAgICAgcmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBlbmRQb3Np
dGlvbiwgMCwgVGV4dEZyYWdtZW50OjpMaW5lQnJlYWspOwogICAgIH0KLSAgICB1bnNpZ25lZCBz
dGFydFBvc2l0aW9uID0gbV9wb3NpdGlvbjsKLSAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHNr
aXBUb05leHRQb3NpdGlvbihQb3NpdGlvblR5cGU6Ok5vbldoaXRlc3BhY2UsIHN0YXJ0UG9zaXRp
b24pOworICAgIGZsb2F0IHdpZHRoID0gMDsKKyAgICBib29sIG92ZXJsYXBwaW5nRnJhZ21lbnQg
PSBmYWxzZTsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHNraXBUb05leHRQb3NpdGlvbihQ
b3NpdGlvblR5cGU6Ok5vbldoaXRlc3BhY2UsIHN0YXJ0UG9zaXRpb24sIHdpZHRoLCB4UG9zaXRp
b24sIG92ZXJsYXBwaW5nRnJhZ21lbnQpOwogICAgIEFTU0VSVChzdGFydFBvc2l0aW9uIDw9IGVu
ZFBvc2l0aW9uKTsKLSAgICBpZiAoZW5kUG9zaXRpb24gPiBzdGFydFBvc2l0aW9uKSB7CisgICAg
aWYgKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbikgewogICAgICAgICBib29sIG11bHRpcGxl
V2hpdGVzcGFjZSA9IHN0YXJ0UG9zaXRpb24gKyAxIDwgZW5kUG9zaXRpb247CiAgICAgICAgIGJv
b2wgaXNDb2xsYXBzZWQgPSBtdWx0aXBsZVdoaXRlc3BhY2UgJiYgbV9zdHlsZS5jb2xsYXBzZVdo
aXRlc3BhY2U7CiAgICAgICAgIGJvb2wgaXNCcmVha2FibGUgPSAhaXNDb2xsYXBzZWQgJiYgbXVs
dGlwbGVXaGl0ZXNwYWNlOwotICAgICAgICBmbG9hdCB3aWR0aCA9IGlzQ29sbGFwc2VkID8gbV9z
dHlsZS5zcGFjZVdpZHRoIDogdGV4dFdpZHRoKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB4
UG9zaXRpb24pOwogICAgICAgICBtX3Bvc2l0aW9uID0gZW5kUG9zaXRpb247Ci0gICAgICAgIHJl
dHVybiBUZXh0RnJhZ21lbnQoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHdpZHRoLCBUZXh0
RnJhZ21lbnQ6OldoaXRlc3BhY2UsIGlzQ29sbGFwc2VkLCBpc0JyZWFrYWJsZSk7CisgICAgICAg
IHJldHVybiBUZXh0RnJhZ21lbnQoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHdpZHRoLCBU
ZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UsIGVuZFBvc2l0aW9uID09IHNlZ21lbnRFbmRQb3NpdGlv
biwgZmFsc2UsIGlzQ29sbGFwc2VkLCBtX3N0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSwgaXNCcmVh
a2FibGUpOwogICAgIH0KLSAgICBlbmRQb3NpdGlvbiA9IHNraXBUb05leHRQb3NpdGlvbihQb3Np
dGlvblR5cGU6OkJyZWFrYWJsZSwgc3RhcnRQb3NpdGlvbiArIDEpOworICAgIGVuZFBvc2l0aW9u
ID0gc2tpcFRvTmV4dFBvc2l0aW9uKFBvc2l0aW9uVHlwZTo6QnJlYWthYmxlLCBzdGFydFBvc2l0
aW9uLCB3aWR0aCwgeFBvc2l0aW9uLCBvdmVybGFwcGluZ0ZyYWdtZW50KTsKICAgICBtX3Bvc2l0
aW9uID0gZW5kUG9zaXRpb247Ci0gICAgcmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9u
LCBlbmRQb3NpdGlvbiwgdGV4dFdpZHRoKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB4UG9z
aXRpb24pLCBUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UsIGZhbHNlLCBtX3N0eWxlLmJyZWFr
V29yZE9uT3ZlcmZsb3cpOworICAgIHJldHVybiBUZXh0RnJhZ21lbnQoc3RhcnRQb3NpdGlvbiwg
ZW5kUG9zaXRpb24sIHdpZHRoLCBUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UsIGVuZFBvc2l0
aW9uID09IHNlZ21lbnRFbmRQb3NpdGlvbiwgb3ZlcmxhcHBpbmdGcmFnbWVudCwgZmFsc2UsIGZh
bHNlLCBtX3N0eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3cpOwogfQogCi1mbG9hdCBUZXh0RnJhZ21l
bnRJdGVyYXRvcjo6dGV4dFdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4
UG9zaXRpb24pIGNvbnN0Cit2b2lkIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpyZXZlcnRUb0ZyYWdt
ZW50KGNvbnN0IFRleHRGcmFnbWVudCYgZnJhZ21lbnQpCiB7Ci0gICAgY29uc3QgYXV0byYgZnJv
bVNlZ21lbnQgPSBtX2Zsb3dDb250ZW50cy5zZWdtZW50Rm9yUG9zaXRpb24oZnJvbSk7Ci0gICAg
QVNTRVJUKGlzPFJlbmRlclRleHQ+KGZyb21TZWdtZW50LnJlbmRlcmVyKSk7Ci0gICAgaWYgKCht
X3N0eWxlLmZvbnQuaXNGaXhlZFBpdGNoKCkgJiYgZnJvbVNlZ21lbnQuZW5kID49IHRvKSB8fCAo
ZnJvbSA9PSBmcm9tU2VnbWVudC5zdGFydCAmJiB0byA9PSBmcm9tU2VnbWVudC5lbmQpKQotICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dD4oZnJvbVNlZ21lbnQucmVuZGVyZXIpLndp
ZHRoKGZyb20gLSBmcm9tU2VnbWVudC5zdGFydCwgdG8gLSBmcm9tLCBtX3N0eWxlLmZvbnQsIHhQ
b3NpdGlvbiwgbnVsbHB0ciwgbnVsbHB0cik7Ci0KLSAgICBjb25zdCBhdXRvKiBzZWdtZW50ID0g
JmZyb21TZWdtZW50OwotICAgIGZsb2F0IHRleHRXaWR0aCA9IDA7Ci0gICAgdW5zaWduZWQgZnJh
Z21lbnRFbmQgPSAwOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGZyYWdtZW50RW5kID0g
c3RkOjptaW4odG8sIHNlZ21lbnQtPmVuZCk7Ci0gICAgICAgIHRleHRXaWR0aCArPSBzZWdtZW50
LT50ZXh0LmlzOEJpdCgpID8gcnVuV2lkdGg8TENoYXI+KHNlZ21lbnQtPnRleHQsIGZyb20gLSBz
ZWdtZW50LT5zdGFydCwgZnJhZ21lbnRFbmQgLSBzZWdtZW50LT5zdGFydCwgeFBvc2l0aW9uICsg
dGV4dFdpZHRoKSA6Ci0gICAgICAgICAgICBydW5XaWR0aDxVQ2hhcj4oc2VnbWVudC0+dGV4dCwg
ZnJvbSAtIHNlZ21lbnQtPnN0YXJ0LCBmcmFnbWVudEVuZCAtIHNlZ21lbnQtPnN0YXJ0LCB4UG9z
aXRpb24gKyB0ZXh0V2lkdGgpOwotICAgICAgICBpZiAoZnJhZ21lbnRFbmQgPT0gdG8pCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZnJvbSA9IGZyYWdtZW50RW5kOwotICAgICAgICBzZWdt
ZW50ID0gJm1fZmxvd0NvbnRlbnRzLnNlZ21lbnRGb3JQb3NpdGlvbihmcmFnbWVudEVuZCk7Ci0g
ICAgfTsKLQotICAgIHJldHVybiB0ZXh0V2lkdGg7CisgICAgQVNTRVJUKG1fcG9zaXRpb24gPj0g
ZnJhZ21lbnQuZW5kKCkpOworICAgIEFTU0VSVChmcmFnbWVudC5zdGFydCgpID49IDApOworICAg
IC8vIFJldmVydCBzZWdtZW50IGZpcnN0LgorICAgIHdoaWxlIChtX2N1cnJlbnRTZWdtZW50LT5z
dGFydCA+IGZyYWdtZW50LnN0YXJ0KCkpCisgICAgICAgIC0tbV9jdXJyZW50U2VnbWVudDsKKyAg
ICAvLyBUT0RPOiBJdCByZXZlcnRzIHRvIHRoZSBsYXN0IGZyYWdtZW50IG9uIHRoZSBzYW1lIHBv
c2l0aW9uLCBidXQgdGhhdCdzIG9rIGZvciBub3cgYXMgd2UgZG9uJ3QgbmVlZCB0bworICAgIC8v
IGRpZmZlcmVudGlhdGUgbXVsdGlwbGUgcmVuZGVyZXJzIG9uIHRoZSBzYW1lIHBvc2l0aW9uLgor
ICAgIG1fcG9zaXRpb24gPSBmcmFnbWVudC5zdGFydCgpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyB1bnNpZ25lZCBuZXh0QnJlYWthYmxlUG9zaXRpb24o
TGF6eUxpbmVCcmVha0l0ZXJhdG9yJiBsaW5lQnJlYWtJdGVyYXRvciwgY29uc3QgRmxvd0NvbnRl
bnRzOjpTZWdtZW50JiBzZWdtZW50LCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKQordW5zaWduZWQg
VGV4dEZyYWdtZW50SXRlcmF0b3I6Om5leHRCcmVha2FibGVQb3NpdGlvbihjb25zdCBGbG93Q29u
dGVudHM6OlNlZ21lbnQmIHNlZ21lbnQsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24pCiB7Ci0gICAg
cmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbk5vbkxvb3NlbHk8Q2hhcmFjdGVyVHlwZSwgTkJT
UEJlaGF2aW9yOjpJZ25vcmVOQlNQPihsaW5lQnJlYWtJdGVyYXRvciwgc2VnbWVudC50ZXh0LmNo
YXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSwgc2VnbWVudC5lbmQgLSBzZWdtZW50LnN0YXJ0LCBz
dGFydFBvc2l0aW9uKTsKKyAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8IHNlZ21lbnQuZW5kKTsK
KyAgICBpZiAoc2VnbWVudC50ZXh0LmltcGwoKSAhPSBtX2xpbmVCcmVha0l0ZXJhdG9yLnN0cmlu
ZygpLmltcGwoKSkgeworICAgICAgICBjb25zdCBTdHJpbmcmIGN1cnJlbnRUZXh0ID0gbV9saW5l
QnJlYWtJdGVyYXRvci5zdHJpbmcoKTsKKyAgICAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IGN1
cnJlbnRUZXh0Lmxlbmd0aCgpOworICAgICAgICBVQ2hhciBsYXN0Q2hhcmFjdGVyID0gdGV4dExl
bmd0aCA+IDAgPyBjdXJyZW50VGV4dFt0ZXh0TGVuZ3RoIC0gMV0gOiAwOworICAgICAgICBVQ2hh
ciBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIgPSB0ZXh0TGVuZ3RoID4gMSA/IGN1cnJlbnRUZXh0W3Rl
eHRMZW5ndGggLSAyXSA6IDA7CisgICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3Iuc2V0UHJpb3JD
b250ZXh0KGxhc3RDaGFyYWN0ZXIsIHNlY29uZFRvTGFzdENoYXJhY3Rlcik7CisgICAgICAgIG1f
bGluZUJyZWFrSXRlcmF0b3IucmVzZXRTdHJpbmdBbmRSZWxlYXNlSXRlcmF0b3Ioc2VnbWVudC50
ZXh0LCBtX3N0eWxlLmxvY2FsZSwgTGluZUJyZWFrSXRlcmF0b3JNb2RlVUFYMTQpOworICAgIH0K
KyAgICBjb25zdCBhdXRvKiBjaGFyYWN0ZXJzID0gc2VnbWVudC50ZXh0LmNoYXJhY3RlcnM8Q2hh
cmFjdGVyVHlwZT4oKTsKKyAgICB1bnNpZ25lZCBzZWdtZW50TGVuZ3RoID0gc2VnbWVudC5lbmQg
LSBzZWdtZW50LnN0YXJ0OworICAgIHVuc2lnbmVkIHNlZ21lbnRQb3NpdGlvbiA9IHN0YXJ0UG9z
aXRpb24gLSBzZWdtZW50LnN0YXJ0OworICAgIHJldHVybiBzZWdtZW50LnN0YXJ0ICsgbmV4dEJy
ZWFrYWJsZVBvc2l0aW9uTm9uTG9vc2VseTxDaGFyYWN0ZXJUeXBlLCBOQlNQQmVoYXZpb3I6Okln
bm9yZU5CU1A+KG1fbGluZUJyZWFrSXRlcmF0b3IsIGNoYXJhY3RlcnMsIHNlZ21lbnRMZW5ndGgs
IHNlZ21lbnRQb3NpdGlvbik7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgotc3RhdGljIHVuc2lnbmVkIG5leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oY29uc3QgRmxvd0Nv
bnRlbnRzOjpTZWdtZW50JiBzZWdtZW50LCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCBjb25zdCBU
ZXh0RnJhZ21lbnRJdGVyYXRvcjo6U3R5bGUmIHN0eWxlKQordW5zaWduZWQgVGV4dEZyYWdtZW50
SXRlcmF0b3I6Om5leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oY29uc3QgRmxvd0NvbnRlbnRzOjpT
ZWdtZW50JiBzZWdtZW50LCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKQogeworICAgIEFTU0VSVChz
dGFydFBvc2l0aW9uIDwgc2VnbWVudC5lbmQpOwogICAgIGNvbnN0IGF1dG8qIHRleHQgPSBzZWdt
ZW50LnRleHQuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpOwogICAgIHVuc2lnbmVkIHBvc2l0
aW9uID0gc3RhcnRQb3NpdGlvbjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzZWdtZW50LmVuZCAt
IHNlZ21lbnQuc3RhcnQ7Ci0gICAgZm9yICg7IHBvc2l0aW9uIDwgbGVuZ3RoOyArK3Bvc2l0aW9u
KSB7Ci0gICAgICAgIGF1dG8gY2hhcmFjdGVyID0gdGV4dFtwb3NpdGlvbl07Ci0gICAgICAgIGJv
b2wgaXNXaGl0ZXNwYWNlID0gY2hhcmFjdGVyID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JyB8
fCAoIXN0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBjaGFyYWN0ZXIgPT0gJ1xuJyk7CisgICAgZm9y
ICg7IHBvc2l0aW9uIDwgc2VnbWVudC5lbmQ7ICsrcG9zaXRpb24pIHsKKyAgICAgICAgYXV0byBj
aGFyYWN0ZXIgPSB0ZXh0W3Bvc2l0aW9uIC0gc2VnbWVudC5zdGFydF07CisgICAgICAgIGJvb2wg
aXNXaGl0ZXNwYWNlID0gY2hhcmFjdGVyID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JyB8fCAo
IW1fc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIGNoYXJhY3RlciA9PSAnXG4nKTsKICAgICAgICAg
aWYgKCFpc1doaXRlc3BhY2UpCiAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CiAgICAgfQog
ICAgIHJldHVybiBwb3NpdGlvbjsKIH0KIAotdW5zaWduZWQgVGV4dEZyYWdtZW50SXRlcmF0b3I6
OnNraXBUb05leHRQb3NpdGlvbihQb3NpdGlvblR5cGUgcG9zaXRpb25UeXBlLCB1bnNpZ25lZCBz
dGFydFBvc2l0aW9uKSBjb25zdAorZmxvYXQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OnRleHRXaWR0
aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdAogewot
ICAgIGlmIChpc0VuZChzdGFydFBvc2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIHN0YXJ0UG9zaXRp
b247CisgICAgYXV0byYgc2VnbWVudCA9ICptX2N1cnJlbnRTZWdtZW50OworICAgIEFTU0VSVChz
ZWdtZW50LnN0YXJ0IDw9IGZyb20gJiYgZnJvbSA8PSBzZWdtZW50LmVuZCAmJiBzZWdtZW50LnN0
YXJ0IDw9IHRvICYmIHRvIDw9IHNlZ21lbnQuZW5kKTsKKyAgICBBU1NFUlQoaXM8UmVuZGVyVGV4
dD4oc2VnbWVudC5yZW5kZXJlcikpOworICAgIGlmIChtX3N0eWxlLmZvbnQuaXNGaXhlZFBpdGNo
KCkgfHwgKGZyb20gPT0gc2VnbWVudC5zdGFydCAmJiB0byA9PSBzZWdtZW50LmVuZCkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0PihzZWdtZW50LnJlbmRlcmVyKS53aWR0aChm
cm9tIC0gc2VnbWVudC5zdGFydCwgdG8gLSBmcm9tLCBtX3N0eWxlLmZvbnQsIHhQb3NpdGlvbiwg
bnVsbHB0ciwgbnVsbHB0cik7CisgICAgcmV0dXJuIHNlZ21lbnQudGV4dC5pczhCaXQoKSA/IHJ1
bldpZHRoPExDaGFyPihzZWdtZW50LCBmcm9tLCB0bywgeFBvc2l0aW9uKSA6IHJ1bldpZHRoPFVD
aGFyPihzZWdtZW50LCBmcm9tLCB0bywgeFBvc2l0aW9uKTsKK30KIAordW5zaWduZWQgVGV4dEZy
YWdtZW50SXRlcmF0b3I6OnNraXBUb05leHRQb3NpdGlvbihQb3NpdGlvblR5cGUgcG9zaXRpb25U
eXBlLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCBmbG9hdCYgd2lkdGgsIGZsb2F0IHhQb3NpdGlv
biwgYm9vbCYgb3ZlcmxhcHBpbmdGcmFnbWVudCkKK3sKKyAgICBvdmVybGFwcGluZ0ZyYWdtZW50
ID0gZmFsc2U7CiAgICAgdW5zaWduZWQgY3VycmVudFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsK
LSAgICBGbG93Q29udGVudHM6Okl0ZXJhdG9yIGl0KG1fZmxvd0NvbnRlbnRzLCBtX2Zsb3dDb250
ZW50cy5zZWdtZW50SW5kZXhGb3JQb3NpdGlvbihjdXJyZW50UG9zaXRpb24pKTsKLSAgICBmb3Ig
KGF1dG8gZW5kID0gbV9mbG93Q29udGVudHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBhdXRvJiBzZWdtZW50ID0gKml0OwotICAgICAgICB1bnNpZ25lZCBjdXJyZW50UG9zaXRv
blJlbGF0aXZlVG9TZWdtZW50ID0gY3VycmVudFBvc2l0aW9uIC0gc2VnbWVudC5zdGFydDsKLSAg
ICAgICAgdW5zaWduZWQgbmV4dFBvc2l0aW9uUmVsYXRpdmVUb1NlZ21lbnQgPSAwOwotICAgICAg
ICBpZiAocG9zaXRpb25UeXBlID09IE5vbldoaXRlc3BhY2UpIHsKLSAgICAgICAgICAgIG5leHRQ
b3NpdGlvblJlbGF0aXZlVG9TZWdtZW50ID0gc2VnbWVudC50ZXh0LmlzOEJpdCgpID8gbmV4dE5v
bldoaXRlc3BhY2VQb3NpdGlvbjxMQ2hhcj4oc2VnbWVudCwgY3VycmVudFBvc2l0b25SZWxhdGl2
ZVRvU2VnbWVudCwgbV9zdHlsZSkgOgotICAgICAgICAgICAgICAgIG5leHROb25XaGl0ZXNwYWNl
UG9zaXRpb248VUNoYXI+KHNlZ21lbnQsIGN1cnJlbnRQb3NpdG9uUmVsYXRpdmVUb1NlZ21lbnQs
IG1fc3R5bGUpOwotICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uVHlwZSA9PSBCcmVha2FibGUp
IHsKLSAgICAgICAgICAgIGlmIChzZWdtZW50LnRleHQuaW1wbCgpICE9IG1fbGluZUJyZWFrSXRl
cmF0b3Iuc3RyaW5nKCkuaW1wbCgpKSB7Ci0gICAgICAgICAgICAgICAgVUNoYXIgbGFzdENoYXJh
Y3RlciA9IHNlZ21lbnQuc3RhcnQgPiAwID8gY2hhcmFjdGVyQXQoc2VnbWVudC5zdGFydCAtIDEp
IDogMDsKLSAgICAgICAgICAgICAgICBVQ2hhciBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIgPSBzZWdt
ZW50LnN0YXJ0ID4gMSA/IGNoYXJhY3RlckF0KHNlZ21lbnQuc3RhcnQgLSAyKSA6IDA7Ci0gICAg
ICAgICAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5zZXRQcmlvckNvbnRleHQobGFzdENoYXJh
Y3Rlciwgc2Vjb25kVG9MYXN0Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICBtX2xpbmVCcmVh
a0l0ZXJhdG9yLnJlc2V0U3RyaW5nQW5kUmVsZWFzZUl0ZXJhdG9yKHNlZ21lbnQudGV4dCwgbV9z
dHlsZS5sb2NhbGUsIExpbmVCcmVha0l0ZXJhdG9yTW9kZVVBWDE0KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG5leHRQb3NpdGlvblJlbGF0aXZlVG9TZWdtZW50ID0gc2VnbWVudC50ZXh0
LmlzOEJpdCgpID8gbmV4dEJyZWFrYWJsZVBvc2l0aW9uPExDaGFyPihtX2xpbmVCcmVha0l0ZXJh
dG9yLCBzZWdtZW50LCBjdXJyZW50UG9zaXRvblJlbGF0aXZlVG9TZWdtZW50KSA6Ci0gICAgICAg
ICAgICAgICAgbmV4dEJyZWFrYWJsZVBvc2l0aW9uPFVDaGFyPihtX2xpbmVCcmVha0l0ZXJhdG9y
LCBzZWdtZW50LCBjdXJyZW50UG9zaXRvblJlbGF0aXZlVG9TZWdtZW50KTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgY3VycmVudFBv
c2l0aW9uID0gc2VnbWVudC5zdGFydCArIG5leHRQb3NpdGlvblJlbGF0aXZlVG9TZWdtZW50Owot
ICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uIDwgc2VnbWVudC5lbmQpCi0gICAgICAgICAgICBi
cmVhazsKKyAgICB1bnNpZ25lZCBuZXh0UG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb247CisgICAg
Ly8gQ29sbGFwc2VkIHdoaXRlc3BhY2UgaGFzIGNvbnN0YW50IHdpZHRoLiBEbyBub3QgbWVhc3Vy
ZSBpdC4KKyAgICBpZiAocG9zaXRpb25UeXBlID09IE5vbldoaXRlc3BhY2UpCisgICAgICAgIG5l
eHRQb3NpdGlvbiA9IG1fY3VycmVudFNlZ21lbnQtPnRleHQuaXM4Qml0KCkgPyBuZXh0Tm9uV2hp
dGVzcGFjZVBvc2l0aW9uPExDaGFyPigqbV9jdXJyZW50U2VnbWVudCwgY3VycmVudFBvc2l0aW9u
KSA6IG5leHROb25XaGl0ZXNwYWNlUG9zaXRpb248VUNoYXI+KCptX2N1cnJlbnRTZWdtZW50LCBj
dXJyZW50UG9zaXRpb24pOworICAgIGVsc2UgaWYgKHBvc2l0aW9uVHlwZSA9PSBCcmVha2FibGUp
IHsKKyAgICAgICAgLy8gbmV4dEJyZWFrYWJsZVBvc2l0aW9uIHJldHVybnMgdGhlIHNhbWUgcG9z
aXRpb24gZm9yIGNlcnRhaW4gY2hhcmFjdGVycyBzdWNoIGFzIGh5cGhlbnMuIENhbGwgbmV4dCBh
Z2FpbiB3aXRoIG1vZGlmaWVkIHBvc2l0aW9uIHVubGVzcyBpdCdzIHRoZSBlbmQgb2YgdGhlIHNl
Z21lbnQuCisgICAgICAgIG5leHRQb3NpdGlvbiA9IG1fY3VycmVudFNlZ21lbnQtPnRleHQuaXM4
Qml0KCkgPyBuZXh0QnJlYWthYmxlUG9zaXRpb248TENoYXI+KCptX2N1cnJlbnRTZWdtZW50LCBj
dXJyZW50UG9zaXRpb24pIDogbmV4dEJyZWFrYWJsZVBvc2l0aW9uPFVDaGFyPigqbV9jdXJyZW50
U2VnbWVudCwgY3VycmVudFBvc2l0aW9uKTsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBrbm93IHdo
ZXRoZXIgdGhlIHdvcmQgYWN0dWFsbHkgZmluaXNoZXMgYXQgdGhlIGVuZCBvZiB0aGlzIHJlbmRl
cmVyIG9yIG5vdC4KKyAgICAgICAgaWYgKG5leHRQb3NpdGlvbiA9PSBtX2N1cnJlbnRTZWdtZW50
LT5lbmQpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8gbmV4dFNlZ21lbnQgPSBtX2N1cnJlbnRT
ZWdtZW50ICsgMTsKKyAgICAgICAgICAgIGlmIChuZXh0U2VnbWVudCAhPSBtX2Zsb3dDb250ZW50
cy5lbmQoKSkKKyAgICAgICAgICAgICAgICBvdmVybGFwcGluZ0ZyYWdtZW50ID0gbmV4dFBvc2l0
aW9uIDwgKG5leHRTZWdtZW50LT50ZXh0LmlzOEJpdCgpID8gbmV4dEJyZWFrYWJsZVBvc2l0aW9u
PExDaGFyPigqbmV4dFNlZ21lbnQsIG5leHRQb3NpdGlvbikgOiBuZXh0QnJlYWthYmxlUG9zaXRp
b248VUNoYXI+KCpuZXh0U2VnbWVudCwgbmV4dFBvc2l0aW9uKSk7CisgICAgICAgIH0gZWxzZSBp
ZiAobmV4dFBvc2l0aW9uID09IGN1cnJlbnRQb3NpdGlvbikgeworICAgICAgICAgICAgaWYgKCsr
bmV4dFBvc2l0aW9uIDwgbV9jdXJyZW50U2VnbWVudC0+ZW5kKQorICAgICAgICAgICAgICAgIG5l
eHRQb3NpdGlvbiA9IG1fY3VycmVudFNlZ21lbnQtPnRleHQuaXM4Qml0KCkgPyBuZXh0QnJlYWth
YmxlUG9zaXRpb248TENoYXI+KCptX2N1cnJlbnRTZWdtZW50LCBjdXJyZW50UG9zaXRpb24gKyAx
KSA6IG5leHRCcmVha2FibGVQb3NpdGlvbjxVQ2hhcj4oKm1fY3VycmVudFNlZ21lbnQsIGN1cnJl
bnRQb3NpdGlvbiArIDEpOworICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBjdXJyZW50UG9z
aXRpb247CisgICAgd2lkdGggPSAwOworICAgIGlmIChuZXh0UG9zaXRpb24gPT0gY3VycmVudFBv
c2l0aW9uKQorICAgICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9uOworICAgIGJvb2wgbWVhc3Vy
ZVRleHQgPSBwb3NpdGlvblR5cGUgIT0gTm9uV2hpdGVzcGFjZSB8fCAhbV9zdHlsZS5jb2xsYXBz
ZVdoaXRlc3BhY2U7CisgICAgaWYgKG1lYXN1cmVUZXh0KSB7CisgICAgICAgIGZsb2F0IHRleHRX
aWR0aCA9IHRoaXMtPnRleHRXaWR0aChjdXJyZW50UG9zaXRpb24sIG5leHRQb3NpdGlvbiwgeFBv
c2l0aW9uKTsKKyAgICAgICAgeFBvc2l0aW9uICs9IHRleHRXaWR0aDsKKyAgICAgICAgd2lkdGgg
Kz0gdGV4dFdpZHRoOworICAgIH0gZWxzZSBpZiAoc3RhcnRQb3NpdGlvbiA8IG5leHRQb3NpdGlv
bikKKyAgICAgICAgd2lkdGggPSBtX3N0eWxlLnNwYWNlV2lkdGg7CisgICAgcmV0dXJuIG5leHRQ
b3NpdGlvbjsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1mbG9hdCBU
ZXh0RnJhZ21lbnRJdGVyYXRvcjo6cnVuV2lkdGgoY29uc3QgU3RyaW5nJiB0ZXh0LCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdAorZmxvYXQgVGV4dEZy
YWdtZW50SXRlcmF0b3I6OnJ1bldpZHRoKGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2Vn
bWVudCwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24sIGZsb2F0
IHhQb3NpdGlvbikgY29uc3QKIHsKLSAgICBBU1NFUlQoZnJvbSA8PSB0byk7Ci0gICAgaWYgKGZy
b20gPT0gdG8pCisgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24gPD0gZW5kUG9zaXRpb24pOworICAg
IGlmIChzdGFydFBvc2l0aW9uID09IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBib29sIG1lYXN1cmVXaXRoRW5kU3BhY2UgPSBtX3N0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSAm
JiB0byA8IHRleHQubGVuZ3RoKCkgJiYgdGV4dFt0b10gPT0gJyAnOworICAgIHVuc2lnbmVkIHNl
Z21lbnRGcm9tID0gc3RhcnRQb3NpdGlvbiAtIHNlZ21lbnQuc3RhcnQ7CisgICAgdW5zaWduZWQg
c2VnbWVudFRvID0gZW5kUG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0OworICAgIGJvb2wgbWVhc3Vy
ZVdpdGhFbmRTcGFjZSA9IG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlICYmIHNlZ21lbnRUbyA8
IHNlZ21lbnQudGV4dC5sZW5ndGgoKSAmJiBzZWdtZW50LnRleHRbc2VnbWVudFRvXSA9PSAnICc7
CiAgICAgaWYgKG1lYXN1cmVXaXRoRW5kU3BhY2UpCi0gICAgICAgICsrdG87Ci0gICAgVGV4dFJ1
biBydW4odGV4dC5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBmcm9tLCB0byAtIGZyb20p
OworICAgICAgICArK3NlZ21lbnRUbzsKKyAgICBUZXh0UnVuIHJ1bihzZWdtZW50LnRleHQuY2hh
cmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgc2VnbWVudEZyb20sIHNlZ21lbnRUbyAtIHNlZ21l
bnRGcm9tKTsKICAgICBydW4uc2V0WFBvcyh4UG9zaXRpb24pOwogICAgIHJ1bi5zZXRUYWJTaXpl
KCEhbV9zdHlsZS50YWJXaWR0aCwgbV9zdHlsZS50YWJXaWR0aCk7CiAgICAgZmxvYXQgd2lkdGgg
PSBtX3N0eWxlLmZvbnQud2lkdGgocnVuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaApp
bmRleCBjOGMxZWI0MzNkYTU0MWEwZGUwZWI0MDUzOGI5Y2U4Y2U1OTRiMDBjLi44MWNmNmUyYzk0
Mjk0NWVjNzNlMTRjZDJlMmVkMDdkMjg4ODQxZWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVy
YXRvci5oCkBAIC00MywxMiArNDMsMTUgQEAgcHVibGljOgogICAgIHB1YmxpYzoKICAgICAgICAg
ZW51bSBUeXBlIHsgQ29udGVudEVuZCwgTGluZUJyZWFrLCBXaGl0ZXNwYWNlLCBOb25XaGl0ZXNw
YWNlIH07CiAgICAgICAgIFRleHRGcmFnbWVudCgpID0gZGVmYXVsdDsKLSAgICAgICAgVGV4dEZy
YWdtZW50KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGZsb2F0IHdpZHRoLCBUeXBlIHR5
cGUsIGJvb2wgaXNDb2xsYXBzZWQgPSBmYWxzZSwgYm9vbCBpc0JyZWFrYWJsZSA9IGZhbHNlKQor
ICAgICAgICBUZXh0RnJhZ21lbnQodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQg
d2lkdGgsIFR5cGUgdHlwZSwgYm9vbCBpc0xhc3RJblJlbmRlcmVyID0gZmFsc2UsIGJvb2wgb3Zl
cmxhcHNUb05leHRSZW5kZXJlciA9IGZhbHNlLCBib29sIGlzQ29sbGFwc2VkID0gZmFsc2UsIGJv
b2wgaXNDb2xsYXBzaWJsZSA9IGZhbHNlLCBib29sIGlzQnJlYWthYmxlID0gZmFsc2UpCiAgICAg
ICAgICAgICA6IG1fc3RhcnQoc3RhcnQpCiAgICAgICAgICAgICAsIG1fZW5kKGVuZCkKLSAgICAg
ICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgICAgICAgICAsIG1fd2lkdGgod2lkdGgpCisgICAg
ICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAgICAgLCBtX2lzTGFzdEluUmVuZGVyZXIo
aXNMYXN0SW5SZW5kZXJlcikKKyAgICAgICAgICAgICwgbV9vdmVybGFwc1RvTmV4dFJlbmRlcmVy
KG92ZXJsYXBzVG9OZXh0UmVuZGVyZXIpCiAgICAgICAgICAgICAsIG1faXNDb2xsYXBzZWQoaXND
b2xsYXBzZWQpCisgICAgICAgICAgICAsIG1faXNDb2xsYXBzaWJsZShpc0NvbGxhcHNpYmxlKQog
ICAgICAgICAgICAgLCBtX2lzQnJlYWthYmxlKGlzQnJlYWthYmxlKQogICAgICAgICB7CiAgICAg
ICAgIH0KQEAgLTU3LDIyICs2MCw0MSBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CiAgICAgICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV93aWR0aDsgfQogICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KKyAgICAgICAgYm9vbCBpc0xhc3RJblJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9p
c0xhc3RJblJlbmRlcmVyOyB9CisgICAgICAgIGJvb2wgb3ZlcmxhcHNUb05leHRSZW5kZXJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmxhcHNUb05leHRSZW5kZXJlcjsgfQogICAgICAgICBib29s
IGlzQ29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxhcHNlZDsgfQorICAgICAgICBi
b29sIGlzQ29sbGFwc2libGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29sbGFwc2libGU7IH0KICAg
ICAgICAgYm9vbCBpc0JyZWFrYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNCcmVha2FibGU7IH0K
IAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzdGFydCgpID09IGVuZCgp
OyB9CiAgICAgICAgIFRleHRGcmFnbWVudCBzcGxpdCh1bnNpZ25lZCBzcGxpdFBvc2l0aW9uLCBj
b25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvciYpOworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgVGV4dEZyYWdtZW50JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fc3RhcnQgPT0gb3RoZXIubV9zdGFydAorICAgICAgICAgICAgICAgICYmIG1fZW5kID09
IG90aGVyLm1fZW5kCisgICAgICAgICAgICAgICAgJiYgbV93aWR0aCA9PSBvdGhlci5tX3dpZHRo
CisgICAgICAgICAgICAgICAgJiYgbV90eXBlID09IG90aGVyLm1fdHlwZQorICAgICAgICAgICAg
ICAgICYmIG1faXNMYXN0SW5SZW5kZXJlciA9PSBvdGhlci5tX2lzTGFzdEluUmVuZGVyZXIKKyAg
ICAgICAgICAgICAgICAmJiBtX292ZXJsYXBzVG9OZXh0UmVuZGVyZXIgPT0gb3RoZXIubV9vdmVy
bGFwc1RvTmV4dFJlbmRlcmVyCisgICAgICAgICAgICAgICAgJiYgbV9pc0NvbGxhcHNlZCA9PSBv
dGhlci5tX2lzQ29sbGFwc2VkCisgICAgICAgICAgICAgICAgJiYgbV9pc0NvbGxhcHNpYmxlID09
IG90aGVyLm1faXNDb2xsYXBzaWJsZQorICAgICAgICAgICAgICAgICYmIG1faXNCcmVha2FibGUg
PT0gb3RoZXIubV9pc0JyZWFrYWJsZTsKKyAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdW5zaWduZWQgbV9zdGFydCB7IDAgfTsKICAgICAgICAgdW5zaWduZWQgbV9lbmQgeyAwIH07
Ci0gICAgICAgIFR5cGUgbV90eXBlIHsgTm9uV2hpdGVzcGFjZSB9OwogICAgICAgICBmbG9hdCBt
X3dpZHRoIHsgMCB9OworICAgICAgICBUeXBlIG1fdHlwZSB7IE5vbldoaXRlc3BhY2UgfTsKKyAg
ICAgICAgYm9vbCBtX2lzTGFzdEluUmVuZGVyZXIgeyBmYWxzZSB9OworICAgICAgICBib29sIG1f
b3ZlcmxhcHNUb05leHRSZW5kZXJlciB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgbV9pc0NvbGxh
cHNlZCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9pc0NvbGxhcHNpYmxlIHsgZmFsc2UgfTsK
ICAgICAgICAgYm9vbCBtX2lzQnJlYWthYmxlIHsgZmFsc2UgfTsKICAgICB9OwogICAgIFRleHRG
cmFnbWVudCBuZXh0VGV4dEZyYWdtZW50KGZsb2F0IHhQb3NpdGlvbiA9IDApOwotICAgIGZsb2F0
IHRleHRXaWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBj
b25zdDsKKyAgICB2b2lkIHJldmVydFRvRnJhZ21lbnQoY29uc3QgVGV4dEZyYWdtZW50Jik7Cisg
ICAgZmxvYXQgdGV4dFdpZHRoKHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBv
c2l0aW9uLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0OwogCiAgICAgc3RydWN0IFN0eWxlIHsKICAg
ICAgICAgZXhwbGljaXQgU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmKTsKQEAgLTg4LDE5ICsxMTAs
MTggQEAgcHVibGljOgogICAgICAgICBBdG9taWNTdHJpbmcgbG9jYWxlOwogICAgIH07CiAgICAg
Y29uc3QgU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQotICAgIC8vIEZJ
WE1FOiByZW1vdmUgc3BsaXRSdW5zQXRSZW5kZXJlckJvdW5kYXJ5KCkKLSAgICBjb25zdCBGbG93
Q29udGVudHM6OlNlZ21lbnQmIHNlZ21lbnRGb3JQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbikg
Y29uc3QgeyByZXR1cm4gbV9mbG93Q29udGVudHMuc2VnbWVudEZvclBvc2l0aW9uKHBvc2l0aW9u
KTsgfTsKIAogcHJpdmF0ZToKICAgICBlbnVtIFBvc2l0aW9uVHlwZSB7IEJyZWFrYWJsZSwgTm9u
V2hpdGVzcGFjZSB9OwotICAgIHVuc2lnbmVkIHNraXBUb05leHRQb3NpdGlvbihQb3NpdGlvblR5
cGUsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24pIGNvbnN0OwotICAgIFVDaGFyIGNoYXJhY3RlckF0
KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKKyAgICB1bnNpZ25lZCBza2lwVG9OZXh0UG9zaXRp
b24oUG9zaXRpb25UeXBlLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCBmbG9hdCYgd2lkdGgsIGZs
b2F0IHhQb3NpdGlvbiwgYm9vbCYgb3ZlcmxhcHBpbmdGcmFnbWVudCk7CiAgICAgYm9vbCBpc0xp
bmVCcmVhayh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgYm9vbCBpc0VuZCh1bnNpZ25l
ZCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGZsb2F0IHJ1bldpZHRoKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRv
LCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiB1bnNpZ25lZCBuZXh0QnJlYWthYmxlUG9zaXRpb24oY29uc3QgRmxvd0NvbnRlbnRz
OjpTZWdtZW50JiwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbik7CisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHVuc2lnbmVkIG5leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oY29u
c3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbik7CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGZsb2F0IHJ1bldpZHRoKGNvbnN0IEZs
b3dDb250ZW50czo6U2VnbWVudCYsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVu
ZFBvc2l0aW9uLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0OwogCiAgICAgRmxvd0NvbnRlbnRzIG1f
Zmxvd0NvbnRlbnRzOwotICAgIG11dGFibGUgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIG1fbGluZUJy
ZWFrSXRlcmF0b3I7CisgICAgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciBtX2N1cnJlbnRTZWdtZW50
OworICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBtX2xpbmVCcmVha0l0ZXJhdG9yOwogICAgIGNv
bnN0IFN0eWxlIG1fc3R5bGU7CiAgICAgdW5zaWduZWQgbV9wb3NpdGlvbiB7IDAgfTsKIH07CkBA
IC0xMjcsMjIgKzE0OCwxMSBAQCBpbmxpbmUgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFn
bWVudCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpzcAogICAgIHJldHVybiBu
ZXdGcmFnbWVudDsKIH0KIAotaW5saW5lIFVDaGFyIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpjaGFy
YWN0ZXJBdCh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICBhdXRvJiBzZWdtZW50ID0g
bV9mbG93Q29udGVudHMuc2VnbWVudEZvclBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICByZXR1cm4g
c2VnbWVudC50ZXh0W3Bvc2l0aW9uIC0gc2VnbWVudC5zdGFydF07Ci19Ci0KIGlubGluZSBib29s
IFRleHRGcmFnbWVudEl0ZXJhdG9yOjppc0xpbmVCcmVhayh1bnNpZ25lZCBwb3NpdGlvbikgY29u
c3QKIHsKLSAgICBpZiAoaXNFbmQocG9zaXRpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIG1fc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIGNoYXJhY3RlckF0KHBvc2l0aW9u
KSA9PSAnXG4nOwotfQotCi1pbmxpbmUgYm9vbCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6aXNFbmQo
dW5zaWduZWQgcG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBvc2l0aW9uID49IG1fZmxv
d0NvbnRlbnRzLmxlbmd0aCgpOworICAgIGNvbnN0IGF1dG8mIHNlZ21lbnQgPSAqbV9jdXJyZW50
U2VnbWVudDsKKyAgICBBU1NFUlQoc2VnbWVudC5zdGFydCA8PSBwb3NpdGlvbiAmJiBwb3NpdGlv
biA8IHNlZ21lbnQuZW5kKTsKKyAgICByZXR1cm4gbV9zdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYg
c2VnbWVudC50ZXh0W3Bvc2l0aW9uIC0gc2VnbWVudC5zdGFydF0gPT0gJ1xuJzsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDdhZWY4MjhkNDZkODBiMzY3MmE5YjI2N2RjYjdjMjYyNGNhZmNmNTMuLjBkMTUzMWM2
ZWFiNThmNzE1Nzk2ZTFjMmQxNzU5ODU4NDE5MjRkYTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAor
MjAxNS0wMy0xNiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFNp
bXBsZSBsaW5lIGxheW91dDogU3BsaXQgZnJhZ21lbnRzIG9uIHJlbmRlcmVyIGJvdW5kYXJ5IG9u
IHRoZSBmbHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDI1NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGcmFnbWVudCBzcGxpdHRpbmcgYXQgcmVuZGVyZXJzJyBib3VuZGFyeSBhdCB0aGUgZW5kIG9m
IHRoZSBsaW5lIGlzIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgIFRoaXMgcGF0Y2ggZW5zdXJl
cyB0aGF0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpuZXh0VGV4dEZyYWdtZW50KCkgZG9lcyBub3Qg
Y29uY2F0ZW5hdGUKKyAgICAgICAgZnJhZ21lbnRzIGFjcm9zcyByZW5kZXJlciBib3VuZGFyeS4K
KworICAgICAgICAqIGZhc3QvdGV4dC9zaW1wbGUtbGluZS13aXRoLW11bHRpcGxlLXJlbmRlcmVy
cy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3RleHQvc2ltcGxlLWxpbmUt
d2l0aC1tdWx0aXBsZS1yZW5kZXJlcnMuaHRtbDogQWRkZWQuCisKIDIwMTUtMDMtMDkgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgU2tpcCBjb250ZW50Zmls
dGVyaW5nL2Jsb2NrLWFmdGVyLWFkZC1kYXRhLmh0bWwgZm9yIG5vdy4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvdGV4dC9zaW1wbGUtbGluZS13aXRoLW11bHRpcGxlLXJlbmRlcmVycy1l
eHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3NpbXBsZS1saW5lLXdpdGgtbXVs
dGlwbGUtcmVuZGVyZXJzLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGVkOTZlODEwYmY0ZWEy
OGY5ZWJmNmE5MmIyNDZiZjA5ZjY1NTRkNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvdGV4dC9zaW1wbGUtbGluZS13aXRoLW11bHRpcGxlLXJlbmRlcmVycy1leHBlY3RlZC5o
dG1sCkBAIC0wLDAgKzEsMzYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzx0
aXRsZT5UZXN0IHRoYXQgc2VnbWVudHMgYWNyb3NzIG11bHRpcGxlIHJlbmRlcmVycyB3b3JrIGZp
bmUgd2l0aCBzaW1wbGUgbGluZSBsYXlvdXQuPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHNj
cmlwdD4KK2Z1bmN0aW9uIGluamVjdFRleHROb2Rlcyhjb250YWluZXIsIHN0eWxlKQoreworCWNv
bnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIAkiKSk7CisJY29u
dGFpbmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIJIikpOworCWNvbnRh
aW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiCVRoaXMgdGVzdHMgICAg
ICIpKTsKKwljb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAJ
ICAgIikpOworCWNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgi
d2hpdGVzcGFjZSAJCW92ZXJsYXBwaW5nICIpKTsKKwljb250YWluZXIuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoIgltdWx0aXBsZSAgICAgIikpOworCWNvbnRhaW5lci5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiCQkJCXJlbmRlcmVycy4iKSk7CisJY29u
dGFpbmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJUaGlzIHRlc3RzIHdo
ZW4gbm9uLSIpKTsKKwljb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoIndoaXRlc3BhY2UgY29uIikpOworCWNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgidGVudCBvIikpOworCWNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgidmVybGEiKSk7CisJY29udGFpbmVyLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKCJwcyBtdWx0aXBsZSByZW4iKSk7CisJY29udGFpbmVyLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJkZXJlcy4iKSk7CisJY29udGFpbmVyLnN0
eWxlLmNzc1RleHQgPSBzdHlsZTsKKwlkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5l
cik7Cit9CisKK2lmICh3aW5kb3cuaW50ZXJuYWxzKQorCWludGVybmFscy5zZXR0aW5ncy5zZXRT
aW1wbGVMaW5lTGF5b3V0RW5hYmxlZChmYWxzZSkKK2luamVjdFRleHROb2Rlcyhkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKSk7CitpbmplY3RUZXh0Tm9kZXMoZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2IiksICJ3aWR0aDogMHB4Iik7CitpbmplY3RUZXh0Tm9kZXMoZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2IiksICJ3aWR0aDogMTBweCIpOworaW5qZWN0VGV4dE5vZGVzKGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCAid2lkdGg6IDEwMHB4Iik7CitpbmplY3RUZXh0Tm9k
ZXMoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicHJlIikpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQvc2ltcGxlLWxpbmUtd2l0
aC1tdWx0aXBsZS1yZW5kZXJlcnMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9zaW1wbGUt
bGluZS13aXRoLW11bHRpcGxlLXJlbmRlcmVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4NTg4ZTMzMGEw
MzYyZDVlZjMwYzllMWNlY2ZjMmEzMzhmOGExNmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L3RleHQvc2ltcGxlLWxpbmUtd2l0aC1tdWx0aXBsZS1yZW5kZXJlcnMuaHRtbApA
QCAtMCwwICsxLDM0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+
VGVzdCB0aGF0IHNlZ21lbnRzIGFjcm9zcyBtdWx0aXBsZSByZW5kZXJlcnMgd29yayBmaW5lIHdp
dGggc2ltcGxlIGxpbmUgbGF5b3V0LjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+
CitmdW5jdGlvbiBpbmplY3RUZXh0Tm9kZXMoY29udGFpbmVyLCBzdHlsZSkKK3sKKwljb250YWlu
ZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAJIikpOworCWNvbnRhaW5l
ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiCSIpKTsKKwljb250YWluZXIu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIglUaGlzIHRlc3RzICAgICAiKSk7
CisJY29udGFpbmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgCSAgICIp
KTsKKwljb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIndoaXRl
c3BhY2UgCQlvdmVybGFwcGluZyAiKSk7CisJY29udGFpbmVyLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKCIJbXVsdGlwbGUgICAgICIpKTsKKwljb250YWluZXIuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIgkJCQlyZW5kZXJlcnMuIikpOworCWNvbnRhaW5l
ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiVGhpcyB0ZXN0cyB3aGVuIG5v
bi0iKSk7CisJY29udGFpbmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ3
aGl0ZXNwYWNlIGNvbiIpKTsKKwljb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoInRlbnQgbyIpKTsKKwljb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoInZlcmxhIikpOworCWNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgicHMgbXVsdGlwbGUgcmVuIikpOworCWNvbnRhaW5lci5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiZGVyZXMuIikpOworCWNvbnRhaW5lci5zdHlsZS5j
c3NUZXh0ID0gc3R5bGU7CisJZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpOwor
fQorCitpbmplY3RUZXh0Tm9kZXMoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOworaW5q
ZWN0VGV4dE5vZGVzKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCAid2lkdGg6IDBweCIp
OworaW5qZWN0VGV4dE5vZGVzKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCAid2lkdGg6
IDEwcHgiKTsKK2luamVjdFRleHROb2Rlcyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwg
IndpZHRoOiAxMDBweCIpOworaW5qZWN0VGV4dE5vZGVzKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
InByZSIpKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248861</attachid>
            <date>2015-03-17 12:32:08 -0700</date>
            <delta_ts>2015-03-17 15:21:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142579-20150317123137.patch</filename>
            <type>text/plain</type>
            <size>46412</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxNjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjUwN2NkZTFhMmQ1NDdh
NTdlZDk4OWJjYTNlZGQyNzI3MDYzNDlmYS4uMjM2NWY3Mjk5MmRmYjg5Y2UyZmU1OTRjMTY0NGMy
ZDQxMjIxZTllZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE1LTAzLTE2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBTcGxpdCBmcmFnbWVudHMgb24gcmVuZGVyZXIgYm91bmRhcnkgb24gdGhlIGZseS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZyYWdtZW50IHNwbGl0
dGluZyBhdCByZW5kZXJlcnMnIGJvdW5kYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgaXMgbm8g
bG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgVGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQgVGV4dEZyYWdt
ZW50SXRlcmF0b3I6Om5leHRUZXh0RnJhZ21lbnQoKSBkb2VzIG5vdCBjb25jYXRlbmF0ZQorICAg
ICAgICBmcmFnbWVudHMgYWNyb3NzIHJlbmRlcmVyIGJvdW5kYXJ5LgorCisgICAgICAgIFRlc3Q6
IGZhc3QvdGV4dC9zaW1wbGUtbGluZS13aXRoLW11bHRpcGxlLXJlbmRlcmVycy5odG1sCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0OjpyZXZlcnRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVk
ZWQpOiBDaGVjayBpZiBmcmFnbWVudHMgbmVlZCBhIG5ldyBydW4gYW5kCisgICAgICAgIHdoZXRo
ZXIgbmVpZ2hib3JpbmcgZnJhZ21lbnRzIG5lZWQgY29sbGFwc2luZy4KKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6cmV2ZXJ0VW5jb21taXR0ZWQpOiBSZXZl
cnQgZnJhZ21lbnRzIG92ZXIgbXVsdGlwbGUgcmVuZGVyZXJzIGlmIHRoZXkgZm9ybQorICAgICAg
ICBhIGZyYWdtZW50IGNvbnRpbnVhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OkxpbmVTdGF0ZTo6cmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmZvcmNlRnJhZ21lbnRUb0xpbmUpOiBFbnN1cmUgdGhh
dCBpZiBhIGZyYWdtZW50IGhhcyBjb250aW51YXRpb24gYWNyb3NzIG11bHRpcGxlIHJlbmRlcmVy
cywKKyAgICAgICAgdGhleSBhbGwgZ2V0IGFkZGVkIHRvIHRoZSBjdXJyZW50IGxpbmUuCisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjcmVhdGVMaW5lUnVucyk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmFwcGVuZEZyYWdtZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZyYWdtZW50Rm9y
d2FyZEl0ZXJhdG9yOjpGcmFnbWVudEZvcndhcmRJdGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGcmFnbWVudEZvcndhcmRJdGVyYXRvcjo6b3Bl
cmF0b3IrKyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpG
cmFnbWVudEZvcndhcmRJdGVyYXRvcjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGcmFnbWVudEZvcndhcmRJdGVyYXRvcjo6b3BlcmF0
b3IqKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmJlZ2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmVuZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmVXcmFwKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnJlbW92ZVRyYWlsaW5n
V2hpdGVzcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0
Ojp1cGRhdGVMaW5lQ29uc3RyYWlucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpzcGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y3JlYXRlVGV4dFJ1bnMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dDo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5o
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzOjpJdGVy
YXRvcjo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZs
b3dDb250ZW50czo6SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHM6Okl0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwYWludEZsb3cpOiBVbnJlbGF0ZWQgZml4IG9uIG5v
bi1jb2xsYXBzZWQgdGFiIHBvc2l0aW9uLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudEl0ZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9y
OjpuZXh0VGV4dEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6
OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpyZXZlcnRUb0ZyYWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjp0ZXh0V2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6
OnNraXBUb05leHRQb3NpdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxh
eW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6VGV4dEZyYWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9y
OjpUZXh0RnJhZ21lbnQ6Om92ZXJsYXBzVG9OZXh0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6
aXNDb2xsYXBzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0
RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjppc0xpbmVCcmVh
ayk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVy
YXRvcjo6VGV4dEZyYWdtZW50OjpzcGxpdCk6IERlbGV0ZWQuCisKIDIwMTUtMDMtMTcgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICAncGFnZUxvYWRlZCcgZGlhZ25v
c3RpYyBsb2dnaW5nIGlzIHRvbyB2ZXJib3NlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dC5jcHAKaW5kZXggOTY5YWI0YTI4NDg0MDY1YTM2MTc0OWI1YjMyYWNj
ZDBlMDNlNjU3Yi4uYmY2MDI0MzZhOTYzOTE0YjNlNWJjYzBlZjQ5MmUwYjU2ZTAyMGU5YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcApAQCAtMjMx
LDkgKzIzMSwyNyBAQCBzdGF0aWMgZmxvYXQgY29tcHV0ZUxpbmVMZWZ0KEVUZXh0QWxpZ24gdGV4
dEFsaWduLCBmbG9hdCBhdmFpbGFibGVXaWR0aCwgZmxvYXQgYwogICAgIHJldHVybiAwOwogfQog
CitzdGF0aWMgdm9pZCByZXZlcnRSdW5zKExheW91dDo6UnVuVmVjdG9yJiBydW5zLCB1bnNpZ25l
ZCBsZW5ndGgsIGZsb2F0IHdpZHRoKQoreworICAgIEFTU0VSVChydW5zLnNpemUoKSk7CisgICAg
d2hpbGUgKGxlbmd0aCkgeworICAgICAgICBSdW4mIGxhc3RSdW4gPSBydW5zLmxhc3QoKTsKKyAg
ICAgICAgdW5zaWduZWQgbGFzdFJ1bkxlbmd0aCA9IGxhc3RSdW4uZW5kIC0gbGFzdFJ1bi5zdGFy
dDsKKyAgICAgICAgaWYgKGxhc3RSdW5MZW5ndGggPiBsZW5ndGgpIHsKKyAgICAgICAgICAgIGxh
c3RSdW4ubG9naWNhbFJpZ2h0IC09IHdpZHRoOworICAgICAgICAgICAgbGFzdFJ1bi5lbmQgLT0g
bGVuZ3RoOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcnVucy5yZW1v
dmVMYXN0KCk7CisgICAgICAgIGxlbmd0aCAtPSBsYXN0UnVuTGVuZ3RoOworICAgICAgICB3aWR0
aCAtPSAobGFzdFJ1bi5sb2dpY2FsUmlnaHQgLSBsYXN0UnVuLmxvZ2ljYWxMZWZ0KTsKKyAgICB9
Cit9CisKIGNsYXNzIExpbmVTdGF0ZSB7CiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBdmFpbGFibGVX
aWR0aChmbG9hdCB3aWR0aCkgeyBtX2F2YWlsYWJsZVdpZHRoID0gd2lkdGg7IH0KKyAgICB2b2lk
IHNldENvbGxhcGVkV2hpdGVzcGFjZVdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fY29sbGFwc2VkV2hp
dGVzcGFjZVdpZHRoID0gd2lkdGg7IH0KICAgICB2b2lkIHNldExvZ2ljYWxMZWZ0T2Zmc2V0KGZs
b2F0IG9mZnNldCkgeyBtX2xvZ2ljYWxMZWZ0T2Zmc2V0ID0gb2Zmc2V0OyB9CiAgICAgdm9pZCBz
ZXRPdmVyZmxvd2VkRnJhZ21lbnQoY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFn
bWVudCYgZnJhZ21lbnQpIHsgbV9vdmVyZmxvd2VkRnJhZ21lbnQgPSBmcmFnbWVudDsgfQogCkBA
IC0yNDEsMjUgKzI1OSw1MSBAQCBwdWJsaWM6CiAgICAgZmxvYXQgbG9naWNhbExlZnRPZmZzZXQo
KSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxMZWZ0T2Zmc2V0OyB9CiAgICAgY29uc3QgVGV4dEZy
YWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgb3ZlcmZsb3dlZEZyYWdtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9vdmVyZmxvd2VkRnJhZ21lbnQ7IH0KICAgICBib29sIGhhc1RyYWlsaW5nV2hp
dGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoOyB9Cisg
ICAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBsYXN0RnJhZ21lbnQoKSBjb25z
dCB7IHJldHVybiBtX2ZyYWdtZW50cy5sYXN0KCk7IH0KICAgICBib29sIGlzV2hpdGVzcGFjZU9u
bHkoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoICYmIG1fcnVuc1dp
ZHRoID09IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7IH0KICAgICBib29sIGZpdHMoZmxvYXQg
ZXh0cmEpIGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmxlV2lkdGggPj0gbV9ydW5zV2lkdGggKyBl
eHRyYTsgfQogICAgIGJvb2wgZmlyc3RDaGFyYWN0ZXJGaXRzKCkgY29uc3QgeyByZXR1cm4gbV9m
aXJzdENoYXJhY3RlckZpdHM7IH0KICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cnVuc1dpZHRoOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghbV9mcmFnbWVudHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGlmICghbV9sYXN0Q29tcGxldGVGcmFnbWVudC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX2ZyYWdtZW50cy5sYXN0KCkub3ZlcmxhcHNUb05l
eHRSZW5kZXJlcigpOworICAgIH0KIAotICAgIHZvaWQgYXBwZW5kRnJhZ21lbnQoY29uc3QgVGV4
dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIExheW91dDo6UnVuVmVj
dG9yJiBydW5zKQorICAgIHZvaWQgYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChj
b25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCwgTGF5b3V0
OjpSdW5WZWN0b3ImIHJ1bnMpCiAgICAgewogICAgICAgICAvLyBBZGp1c3QgZW5kIHBvc2l0aW9u
IHdoaWxlIGNvbGxhcHNpbmcuCiAgICAgICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gZnJhZ21l
bnQuaXNDb2xsYXBzZWQoKSA/IGZyYWdtZW50LnN0YXJ0KCkgKyAxIDogZnJhZ21lbnQuZW5kKCk7
Ci0KLSAgICAgICAgaWYgKG1fY3JlYXRlTmV3UnVuKQorICAgICAgICAvLyBOZXcgbGluZSBuZWVk
cyBuZXcgcnVuLgorICAgICAgICBpZiAoIW1fcnVuc1dpZHRoKQogICAgICAgICAgICAgcnVucy5h
cHBlbmQoUnVuKGZyYWdtZW50LnN0YXJ0KCksIGVuZFBvc2l0aW9uLCBtX3J1bnNXaWR0aCwgbV9y
dW5zV2lkdGggKyBmcmFnbWVudC53aWR0aCgpLCBmYWxzZSkpOwogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIEFTU0VSVChydW5zLnNpemUoKSk7Ci0gICAgICAgICAgICBSdW4mIGxhc3RSdW4g
PSBydW5zLmxhc3QoKTsKLSAgICAgICAgICAgIGxhc3RSdW4uZW5kID0gZW5kUG9zaXRpb247Ci0g
ICAgICAgICAgICBsYXN0UnVuLmxvZ2ljYWxSaWdodCA9IG1fcnVuc1dpZHRoICsgZnJhZ21lbnQu
d2lkdGgoKTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGxhc3RGcmFnbWVudCA9IG1fZnJhZ21l
bnRzLmxhc3QoKTsKKyAgICAgICAgICAgIC8vIEFkdmFuY2UgbGFzdCBjb21wbGV0ZWQgZnJhZ21l
bnQgd2hlbiB0aGUgcHJldmlvdXMgZnJhZ21lbnQgaXMgYWxsIHNldCAoaW5jbHVkaW5nIG11bHRp
cGxlIHBhcnRzIGFjcm9zcyByZW5kZXJlcnMpCisgICAgICAgICAgICBpZiAoKGxhc3RGcmFnbWVu
dC50eXBlKCkgIT0gZnJhZ21lbnQudHlwZSgpKSB8fCAhbGFzdEZyYWdtZW50Lm92ZXJsYXBzVG9O
ZXh0UmVuZGVyZXIoKSkKKyAgICAgICAgICAgICAgICBtX2xhc3RDb21wbGV0ZUZyYWdtZW50ID0g
bGFzdEZyYWdtZW50OworICAgICAgICAgICAgLy8gQ29sbGFwc2UgbmVpZ2hib3VyaW5nIHdoaXRl
c3BhY2UsIGlmIHRoZXkgYXJlIGFjcm9zcyBtdWx0aXBsZSByZW5kZXJlcnMgYW5kIGFyZSBub3Qg
Y29sbGFwc2VkIHlldC4KKyAgICAgICAgICAgIGlmIChsYXN0RnJhZ21lbnQuaXNDb2xsYXBzaWJs
ZSgpICYmIGZyYWdtZW50LmlzQ29sbGFwc2libGUoKSkgeworICAgICAgICAgICAgICAgIEFTU0VS
VChsYXN0RnJhZ21lbnQuaXNMYXN0SW5SZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWxhc3RGcmFnbWVudC5pc0NvbGxhcHNlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIExp
bmUgd2lkdGggbmVlZHMgdG8gYmUgcmVzZXQgc28gdGhhdCBub3cgaXQgdGFrZXMgY29sbGFwc2lu
ZyBpbnRvIGNvbnNpZGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIG1fcnVuc1dpZHRoIC09
IChsYXN0RnJhZ21lbnQud2lkdGgoKSAtIG1fY29sbGFwc2VkV2hpdGVzcGFjZVdpZHRoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpcyBjb2xs
YXBzZWQgY29tcGxldGVseS4gTm8gcnVuIGlzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGFzdEZyYWdtZW50LmlzTGFzdElu
UmVuZGVyZXIoKSB8fCBsYXN0RnJhZ21lbnQuaXNDb2xsYXBzZWQoKSkKKyAgICAgICAgICAgICAg
ICBydW5zLmFwcGVuZChSdW4oZnJhZ21lbnQuc3RhcnQoKSwgZW5kUG9zaXRpb24sIG1fcnVuc1dp
ZHRoLCBtX3J1bnNXaWR0aCArIGZyYWdtZW50LndpZHRoKCksIGZhbHNlKSk7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBSdW4mIGxhc3RSdW4gPSBydW5zLmxhc3QoKTsKKyAg
ICAgICAgICAgICAgICBsYXN0UnVuLmVuZCA9IGVuZFBvc2l0aW9uOworICAgICAgICAgICAgICAg
IGxhc3RSdW4ubG9naWNhbFJpZ2h0ICs9IGZyYWdtZW50LndpZHRoKCk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgbV9jcmVhdGVOZXdSdW4gPSBmcmFnbWVudC5pc0NvbGxhcHNl
ZCgpOworICAgICAgICBtX2ZyYWdtZW50cy5hcHBlbmQoZnJhZ21lbnQpOwogICAgICAgICBtX3J1
bnNXaWR0aCArPSBmcmFnbWVudC53aWR0aCgpOwogCiAgICAgICAgIGlmIChmcmFnbWVudC50eXBl
KCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkgewpA
QCAtMjc0LDE4ICszMTgsMzQgQEAgcHVibGljOgogICAgICAgICAgICAgbV9maXJzdENoYXJhY3Rl
ckZpdHMgPSBmcmFnbWVudC5zdGFydCgpICsgMSA+IGVuZFBvc2l0aW9uIHx8IG1fcnVuc1dpZHRo
IDw9IG1fYXZhaWxhYmxlV2lkdGg7CiAgICAgfQogCi0gICAgdm9pZCByZW1vdmVUcmFpbGluZ1do
aXRlc3BhY2UoTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMpCisgICAgVGV4dEZyYWdtZW50SXRlcmF0
b3I6OlRleHRGcmFnbWVudCByZXZlcnRUb0xhc3RDb21wbGV0ZUZyYWdtZW50KExheW91dDo6UnVu
VmVjdG9yJiBydW5zKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJ1bnMuc2l6ZSgpKTsKLSAgICAg
ICAgUnVuJiBsYXN0UnVuID0gcnVucy5sYXN0KCk7Ci0gICAgICAgIGxhc3RSdW4ubG9naWNhbFJp
Z2h0IC09IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7Ci0gICAgICAgIGxhc3RSdW4uZW5kIC09
IG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoOwotICAgICAgICBpZiAobGFzdFJ1bi5zdGFydCA9
PSBsYXN0UnVuLmVuZCkKLSAgICAgICAgICAgIHJ1bnMucmVtb3ZlTGFzdCgpOworICAgICAgICBB
U1NFUlQobV9mcmFnbWVudHMuc2l6ZSgpKTsKKyAgICAgICAgdW5zaWduZWQgcmV2ZXJ0TGVuZ3Ro
ID0gMDsKKyAgICAgICAgZmxvYXQgcmV2ZXJ0V2lkdGggPSAwOworICAgICAgICB3aGlsZSAobV9m
cmFnbWVudHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBjdXJyZW50ID0gbV9m
cmFnbWVudHMubGFzdCgpOworICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gbV9sYXN0Q29tcGxl
dGVGcmFnbWVudCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldmVydExl
bmd0aCArPSBjdXJyZW50LmVuZCgpIC0gY3VycmVudC5zdGFydCgpOworICAgICAgICAgICAgcmV2
ZXJ0V2lkdGggKz0gY3VycmVudC53aWR0aCgpOworICAgICAgICAgICAgbV9mcmFnbWVudHMucmVt
b3ZlTGFzdCgpOworICAgICAgICB9CisgICAgICAgIG1fcnVuc1dpZHRoIC09IHJldmVydFdpZHRo
OworICAgICAgICBpZiAocmV2ZXJ0TGVuZ3RoKQorICAgICAgICAgICAgcmV2ZXJ0UnVucyhydW5z
LCByZXZlcnRMZW5ndGgsIHJldmVydFdpZHRoKTsKKyAgICAgICAgcmV0dXJuIG1fbGFzdENvbXBs
ZXRlRnJhZ21lbnQ7CisgICAgfQogCisgICAgdm9pZCByZW1vdmVUcmFpbGluZ1doaXRlc3BhY2Uo
TGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMpCisgICAgeworICAgICAgICAvLyBGSVhNRTogc3luYyBt
X2ZyYWdtZW50LCBidXQgaXQncyBvayBmb3Igbm93IGFzIHdlIGRvbid0IHVzZSBtX2ZyYWdtZW50
IGFueW1vcmUgYWZ0ZXIgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlLgorICAgICAgICBpZiAoIW1f
dHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXZlcnRSdW5zKHJ1bnMsIG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoLCBtX3RyYWlsaW5nV2hp
dGVzcGFjZVdpZHRoKTsKICAgICAgICAgbV9ydW5zV2lkdGggLT0gbV90cmFpbGluZ1doaXRlc3Bh
Y2VXaWR0aDsKLSAgICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCA9IDA7CiAgICAgICAg
IG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoID0gMDsKKyAgICAgICAgbV90cmFpbGluZ1doaXRl
c3BhY2VXaWR0aCA9IDA7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMjkzLDEyICszNTMsMTQgQEAg
cHJpdmF0ZToKICAgICBmbG9hdCBtX2xvZ2ljYWxMZWZ0T2Zmc2V0IHsgMCB9OwogICAgIFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgbV9vdmVyZmxvd2VkRnJhZ21lbnQ7CiAgICAg
ZmxvYXQgbV9ydW5zV2lkdGggeyAwIH07Ci0gICAgYm9vbCBtX2NyZWF0ZU5ld1J1biB7IHRydWUg
fTsKKyAgICBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IG1fbGFzdENvbXBsZXRl
RnJhZ21lbnQ7CiAgICAgZmxvYXQgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCB7IDAgfTsgLy8g
VXNlIHRoaXMgdG8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2l0aG91dCByZS1tZXN1cmlu
ZyB0aGUgdGV4dC4KICAgICB1bnNpZ25lZCBtX3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCB7IDAg
fTsKKyAgICBmbG9hdCBtX2NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aCB7IDAgfTsKICAgICAvLyBI
YXZpbmcgb25lIGNoYXJhY3RlciBvbiB0aGUgbGluZSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFu
IGl0IGFjdHVhbGx5IGZpdHMuCiAgICAgLy8gRmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaXJzdCBm
cmFnbWVudCBtaWdodCBiZSBmb3JjZWQgb24gdG8gdGhlIGN1cnJlbnQgbGluZSBldmVuIGlmIGl0
IGRvZXMgbm90IGZpdC4KICAgICBib29sIG1fZmlyc3RDaGFyYWN0ZXJGaXRzIHsgZmFsc2UgfTsK
KyAgICBWZWN0b3I8VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudD4gbV9mcmFnbWVu
dHM7CiB9OwogCiBjbGFzcyBGcmFnbWVudEZvcndhcmRJdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0
ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIHVuc2lnbmVkPiB7CkBAIC0zODksMTQg
KzQ1MSwzNiBAQCBzdGF0aWMgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBmaXJz
dEZyYWdtZW50KFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZQogICAgIH0KIAogICAgIC8vIENoZWNr
IGlmIHdlIG5lZWQgdG8gc2tpcCB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlLgotICAgIGlmIChzdHls
ZS5jb2xsYXBzZVdoaXRlc3BhY2UgJiYgZmlyc3RGcmFnbWVudC50eXBlKCkgPT0gVGV4dEZyYWdt
ZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkKLSAgICAgICAgZmlyc3RGcmFn
bWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsKKyAgICBpZiAo
c3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlKSB7CisgICAgICAgIHdoaWxlIChmaXJzdEZyYWdtZW50
LnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNl
KQorICAgICAgICAgICAgZmlyc3RGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRU
ZXh0RnJhZ21lbnQoKTsKKyAgICB9CiAgICAgcmV0dXJuIGZpcnN0RnJhZ21lbnQ7CiB9CiAKK3N0
YXRpYyB2b2lkIGZvcmNlRnJhZ21lbnRUb0xpbmUoTGluZVN0YXRlJiBsaW5lLCBUZXh0RnJhZ21l
bnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IsIExheW91dDo6UnVuVmVjdG9yJiBydW5z
LCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCkKK3sK
KyAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQoZnJhZ21lbnQsIHJ1
bnMpOworICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBtb3JlIGZyYWdtZW50cyB0byBhZGQgdG8g
dGhlIGN1cnJlbnQgbGluZS4KKyAgICBpZiAoIWZyYWdtZW50Lm92ZXJsYXBzVG9OZXh0UmVuZGVy
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gbmV4dEZyYWdtZW50ID0gdGV4dEZyYWdt
ZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgIGlmIChuZXh0RnJhZ21lbnQudHlwZSgpICE9IGZyYWdtZW50LnR5cGUoKSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVk
ZWQobmV4dEZyYWdtZW50LCBydW5zKTsKKyAgICAgICAgLy8gRG9lcyBpdCBvdmVybGFwIHRvIHRo
ZSBuZXh0IHNlZ21lbnQ/CisgICAgICAgIGlmICghbmV4dEZyYWdtZW50Lm92ZXJsYXBzVG9OZXh0
UmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbmV4dEZyYWdtZW50ID0g
dGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOworICAgIH0KKyAgICBsaW5l
LnNldE92ZXJmbG93ZWRGcmFnbWVudChuZXh0RnJhZ21lbnQpOworfQorCiBzdGF0aWMgYm9vbCBj
cmVhdGVMaW5lUnVucyhMaW5lU3RhdGUmIGxpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNM
aW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYgcnVucywgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRG
cmFnbWVudEl0ZXJhdG9yKQogewogICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gdGV4dEZyYWdtZW50
SXRlcmF0b3Iuc3R5bGUoKTsKKyAgICBsaW5lLnNldENvbGxhcGVkV2hpdGVzcGFjZVdpZHRoKHN0
eWxlLnNwYWNlV2lkdGgpOwogICAgIGJvb2wgbGluZUNhbkJlV3JhcHBlZCA9IHN0eWxlLndyYXBM
aW5lcyB8fCBzdHlsZS5icmVha1dvcmRPbk92ZXJmbG93OwogICAgIGF1dG8gZnJhZ21lbnQgPSBm
aXJzdEZyYWdtZW50KHRleHRGcmFnbWVudEl0ZXJhdG9yLCBwcmV2aW91c0xpbmUpOwogICAgIHdo
aWxlIChmcmFnbWVudC50eXBlKCkgIT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVu
dDo6Q29udGVudEVuZCkgewpAQCAtNDA0LDcgKzQ4OCw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUxp
bmVSdW5zKExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExh
eW91CiAgICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6
OlRleHRGcmFnbWVudDo6TGluZUJyZWFrKSB7CiAgICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyBs
aW5lIGZyYWdtZW50IG9ubHkgaWYgdGhlcmUncyBub3RoaW5nIG9uIHRoZSBsaW5lLiAob3RoZXJ3
aXNlIHRoZSBleHRyYSBuZXcgbGluZSBjaGFyYWN0ZXIgd291bGQgc2hvdyB1cCBhdCB0aGUgZW5k
IG9mIHRoZSBjb250ZW50LikKICAgICAgICAgICAgIGlmICghbGluZS53aWR0aCgpKQotICAgICAg
ICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnQoZnJhZ21lbnQsIHJ1bnMpOworICAgICAgICAg
ICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwg
cnVucyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobGluZUNh
bkJlV3JhcHBlZCAmJiAhbGluZS5maXRzKGZyYWdtZW50LndpZHRoKCkpKSB7CkBAIC00MTMsMTMg
KzQ5NywxMyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVMaW5lUnVucyhMaW5lU3RhdGUmIGxpbmUsIGNv
bnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lLCBMYXlvdQogICAgICAgICAgICAgLy8gMi4gV2hp
dGVzcGFjZSBjb2xsYXBzZSBvZmY6IHdoaXRlc3BhY2UgaXMgd3JhcHBlZC4KICAgICAgICAgICAg
IC8vIDMuIEZpcnN0LCBub24td2hpdGVzcGFjZSBmcmFnbWVudCBpcyBlaXRoZXIgd3JhcHBlZCBv
ciBrZXB0IG9uIHRoZSBsaW5lLiAoZGVwZW5kcyBvbiBvdmVyZmxvdy13cmFwKQogICAgICAgICAg
ICAgLy8gNC4gTm9uLXdoaXRlc3BhY2UgZnJhZ21lbnQgd2hlbiB0aGVyZSdzIGFscmVhZHkgYW5v
dGhlciBmcmFnbWVudCBvbiB0aGUgbGluZSBnZXRzIHB1c2hlZCB0byB0aGUgbmV4dCBsaW5lLgot
ICAgICAgICAgICAgYm9vbCBlbXB0eUxpbmUgPSAhbGluZS53aWR0aCgpOworICAgICAgICAgICAg
Ym9vbCBlbXB0eUxpbmUgPSBsaW5lLmlzRW1wdHkoKTsKICAgICAgICAgICAgIC8vIFdoaXRlc3Bh
Y2UgZnJhZ21lbnQuCiAgICAgICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIXN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSkgewogICAgICAgICAgICAgICAgICAgICAv
LyBTcGxpdCB0aGUgZnJhZ21lbnQ7IChtb2RpZmllZClmcmFnbWVudCBzdGF5cyBvbiB0aGlzIGxp
bmUsIG92ZXJmbG93ZWRGcmFnbWVudCBpcyBwdXNoZWQgdG8gbmV4dCBsaW5lLgogICAgICAgICAg
ICAgICAgICAgICBsaW5lLnNldE92ZXJmbG93ZWRGcmFnbWVudChzcGxpdEZyYWdtZW50VG9GaXRM
aW5lKGZyYWdtZW50LCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgLSBsaW5lLndpZHRoKCksIGVtcHR5
TGluZSwgdGV4dEZyYWdtZW50SXRlcmF0b3IpKTsKLSAgICAgICAgICAgICAgICAgICAgbGluZS5h
cHBlbmRGcmFnbWVudChmcmFnbWVudCwgcnVucyk7CisgICAgICAgICAgICAgICAgICAgIGxpbmUu
YXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIFdoZW4gd2hpdGVzcGFjZSBjb2xsYXBz
ZSBpcyBvbiwgd2hpdGVzcGFjZSB0aGF0IGRvZXNuJ3QgZml0IGlzIHNpbXBseSBza2lwcGVkLgog
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDI4LDIzICs1MTIsMzAgQEAgc3RhdGljIGJvb2wg
Y3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3Vz
TGluZSwgTGF5b3UKICAgICAgICAgICAgIGlmICgoZW1wdHlMaW5lICYmIHN0eWxlLmJyZWFrV29y
ZE9uT3ZlcmZsb3cpIHx8ICFzdHlsZS53cmFwTGluZXMpIHsKICAgICAgICAgICAgICAgICAvLyBT
cGxpdCB0aGUgZnJhZ21lbnQ7IChtb2RpZmllZClmcmFnbWVudCBzdGF5cyBvbiB0aGlzIGxpbmUs
IG92ZXJmbG93ZWRGcmFnbWVudCBpcyBwdXNoZWQgdG8gbmV4dCBsaW5lLgogICAgICAgICAgICAg
ICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoZnJh
Z21lbnQsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIGxpbmUud2lkdGgoKSwgZW1wdHlMaW5lLCB0
ZXh0RnJhZ21lbnRJdGVyYXRvcikpOwotICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21l
bnQoZnJhZ21lbnQsIHJ1bnMpOworICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRB
bmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBOb24tYnJlYWthYmxlIG5vbi13aGl0
ZXNwYWNlIGZpcnN0IGZyYWdtZW50LiBBZGQgaXQgdG8gdGhlIGN1cnJlbnQgbGluZS4gLWl0IG92
ZXJmbG93cyB0aG91Z2guCisgICAgICAgICAgICBBU1NFUlQoZnJhZ21lbnQudHlwZSgpID09IFRl
eHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UpOwogICAgICAg
ICAgICAgaWYgKGVtcHR5TGluZSkgewotICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21l
bnQoZnJhZ21lbnQsIHJ1bnMpOworICAgICAgICAgICAgICAgIGZvcmNlRnJhZ21lbnRUb0xpbmUo
bGluZSwgdGV4dEZyYWdtZW50SXRlcmF0b3IsIHJ1bnMsIGZyYWdtZW50KTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIE5vbi1icmVha2FibGUg
bm9uLXdoaXRlc3BhY2UgZnJhZ21lbnQgd2hlbiB0aGVyZSdzIGFscmVhZHkgY29udGVudCBvbiB0
aGUgbGluZS4gUHVzaCBpdCB0byB0aGUgbmV4dCBsaW5lLgorICAgICAgICAgICAgaWYgKGxpbmUu
bGFzdEZyYWdtZW50KCkub3ZlcmxhcHNUb05leHRSZW5kZXJlcigpKSB7CisgICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgaWYgdGhpcyBmcmFnbWVudCBpcyBhIGNvbnRpbnVhdGlvbiBvZiBhIHByZXZp
b3VzIHNlZ21lbnQuIEluIHN1Y2ggY2FzZXMsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZW0gYWxsLgor
ICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGN1cnJlbnRGcmFnbWVudCA9IGxpbmUucmV2ZXJ0
VG9MYXN0Q29tcGxldGVGcmFnbWVudChydW5zKTsKKyAgICAgICAgICAgICAgICB0ZXh0RnJhZ21l
bnRJdGVyYXRvci5yZXZlcnRUb0ZyYWdtZW50KGN1cnJlbnRGcmFnbWVudCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBsaW5lLnNldE92ZXJmbG93
ZWRGcmFnbWVudChmcmFnbWVudCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBsaW5lLmFwcGVuZEZyYWdtZW50KGZyYWdtZW50LCBydW5zKTsKKyAgICAgICAgbGluZS5h
cHBlbmRGcmFnbWVudEFuZENyZWF0ZVJ1bklmTmVlZGVkKGZyYWdtZW50LCBydW5zKTsKICAgICAg
ICAgLy8gRmluZCB0aGUgbmV4dCB0ZXh0IGZyYWdtZW50LgogICAgICAgICBmcmFnbWVudCA9IHRl
eHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQobGluZS53aWR0aCgpKTsKICAgICB9
Ci0gICAgcmV0dXJuIGZyYWdtZW50LnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4
dEZyYWdtZW50OjpDb250ZW50RW5kICYmIGxpbmUub3ZlcmZsb3dlZEZyYWdtZW50KCkuaXNFbXB0
eSgpOworICAgIHJldHVybiAoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9y
OjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQgJiYgbGluZS5vdmVyZmxvd2VkRnJhZ21lbnQoKS5p
c0VtcHR5KCkpIHx8IGxpbmUub3ZlcmZsb3dlZEZyYWdtZW50KCkudHlwZSgpID09IFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQ7CiB9CiAKIHN0YXRpYyB2b2lk
IGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6OlJ1
blZlY3RvciYgcnVucywgdW5zaWduZWQgcHJldmlvdXNSdW5Db3VudCwgdW5zaWduZWQmIGxpbmVD
b3VudCwgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yKQpA
QCAtNDY2LDI4ICs1NTcsNiBAQCBzdGF0aWMgdm9pZCBjbG9zZUxpbmVFbmRpbmdBbmRBZGp1c3RS
dW5zKExpbmVTdGF0ZSYgbGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bgogICAgICsrbGluZUNv
dW50OwogfQogCi1zdGF0aWMgdm9pZCBzcGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkoTGF5b3V0
OjpSdW5WZWN0b3ImIGxpbmVSdW5zLCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZy
YWdtZW50SXRlcmF0b3IpCi17Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBzcGxp
dCBkdXJpbmcgcnVuIGNvbnN0cnVjdGlvbiBpbnN0ZWFkIG9mIGFzIGEgc2VwYXJhdGUgcGFzcy4K
LSAgICBpZiAobGluZVJ1bnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWdu
ZWQgcnVuSW5kZXggPSAwOwotICAgIGRvIHsKLSAgICAgICAgY29uc3QgUnVuJiBydW4gPSBsaW5l
UnVucy5hdChydW5JbmRleCk7Ci0gICAgICAgIEFTU0VSVChydW4uc3RhcnQgIT0gcnVuLmVuZCk7
Ci0gICAgICAgIGF1dG8mIHN0YXJ0U2VnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLnNlZ21l
bnRGb3JQb3NpdGlvbihydW4uc3RhcnQpOwotICAgICAgICBpZiAocnVuLmVuZCA8PSBzdGFydFNl
Z21lbnQuZW5kKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIFRoaXMgcnVuIG92
ZXJsYXBzIG11bHRpcGxlIHJlbmRlcmVycy4gU3BsaXQgaXQgdXAuCi0gICAgICAgIC8vIFNwbGl0
IHJ1biBhdCB0aGUgcmVuZGVyZXIncyBib3VuZGFyeSBhbmQgY3JlYXRlIGEgbmV3IHJ1biBmb3Ig
dGhlIGxlZnQgc2lkZSwgd2hpbGUgdXNlIHRoZSBjdXJyZW50IHJ1biBhcyB0aGUgcmlnaHQgc2lk
ZS4KLSAgICAgICAgZmxvYXQgbG9naWNhbFJpZ2h0T2ZMZWZ0UnVuID0gcnVuLmxvZ2ljYWxMZWZ0
ICsgdGV4dEZyYWdtZW50SXRlcmF0b3IudGV4dFdpZHRoKHJ1bi5zdGFydCwgc3RhcnRTZWdtZW50
LmVuZCwgcnVuLmxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgbGluZVJ1bnMuaW5zZXJ0KHJ1bkluZGV4
LCBSdW4ocnVuLnN0YXJ0LCBzdGFydFNlZ21lbnQuZW5kLCBydW4ubG9naWNhbExlZnQsIGxvZ2lj
YWxSaWdodE9mTGVmdFJ1biwgZmFsc2UpKTsKLSAgICAgICAgUnVuJiByaWdodFNpZGVSdW4gPSBs
aW5lUnVucy5hdChydW5JbmRleCArIDEpOwotICAgICAgICByaWdodFNpZGVSdW4uc3RhcnQgPSBz
dGFydFNlZ21lbnQuZW5kOwotICAgICAgICByaWdodFNpZGVSdW4ubG9naWNhbExlZnQgPSBsb2dp
Y2FsUmlnaHRPZkxlZnRSdW47Ci0gICAgfSB3aGlsZSAoKytydW5JbmRleCA8IGxpbmVSdW5zLnNp
emUoKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGNyZWF0ZVRleHRSdW5zKExheW91dDo6UnVuVmVjdG9y
JiBydW5zLCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIHVuc2lnbmVkJiBsaW5lQ291bnQpCiB7CiAg
ICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlID0gZmxvdy5ib3JkZXJBbmRQYWRk
aW5nQmVmb3JlKCk7CkBAIC01MDUsOSArNTc0LDYgQEAgc3RhdGljIHZvaWQgY3JlYXRlVGV4dFJ1
bnMoTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIFJlbmRlckJsb2NrRmxvdyYgZmxvdywgdW5zaWcK
ICAgICAgICAgaXNFbmRPZkNvbnRlbnQgPSBjcmVhdGVMaW5lUnVucyhsaW5lLCBwcmV2aW91c0xp
bmUsIHJ1bnMsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKICAgICAgICAgY2xvc2VMaW5lRW5kaW5n
QW5kQWRqdXN0UnVucyhsaW5lLCBydW5zLCBwcmV2aW91c1J1bkNvdW50LCBsaW5lQ291bnQsIHRl
eHRGcmFnbWVudEl0ZXJhdG9yKTsKICAgICB9IHdoaWxlICghaXNFbmRPZkNvbnRlbnQpOwotCi0g
ICAgaWYgKGZsb3cuZmlyc3RDaGlsZCgpICE9IGZsb3cubGFzdENoaWxkKCkpCi0gICAgICAgIHNw
bGl0UnVuc0F0UmVuZGVyZXJCb3VuZGFyeShydW5zLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcik7CiB9
CiAKIHN0ZDo6dW5pcXVlX3B0cjxMYXlvdXQ+IGNyZWF0ZShSZW5kZXJCbG9ja0Zsb3cmIGZsb3cp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZs
b3dDb250ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRG
bG93Q29udGVudHMuaAppbmRleCAxZmMzNDc5ZDJlN2E3NmY2MTE5ZTkzNzIzOWQ5OGVkNGJlNDhi
MWYwLi4xN2QwZDBhZDhlOWI4ZDAwOTRhYjY3ZDNjMDkzNzYzZjZjN2YzN2M0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRl
bnRzLmgKQEAgLTU1LDkgKzU1LDExIEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIEl0
ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisgICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvci0tKCk7CiAg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0OwogICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdDsKLSAgICAg
ICAgY29uc3QgU2VnbWVudCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9mbG93Q29udGVu
dHMubV9zZWdtZW50c1ttX3NlZ21lbnRJbmRleF07IH0KKyAgICAgICAgY29uc3QgU2VnbWVudCYg
b3BlcmF0b3IqKCkgY29uc3Q7CisgICAgICAgIGNvbnN0IFNlZ21lbnQqIG9wZXJhdG9yLT4oKSBj
b25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IEZsb3dDb250ZW50cyYgbV9mbG93
Q29udGVudHM7CkBAIC02NywxNSArNjksMTEgQEAgcHVibGljOgogICAgIEl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IoKnRoaXMsIDApOyB9CiAgICAgSXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IoKnRoaXMsIG1fc2VnbWVudHMuc2l6ZSgpKTsgfQog
Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50cy5sYXN0KCku
ZW5kOyB9OwotCiAgICAgdW5zaWduZWQgc2VnbWVudEluZGV4Rm9yUG9zaXRpb24odW5zaWduZWQg
cG9zaXRpb24pIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIHNlZ21lbnRJbmRleEZv
clBvc2l0aW9uU2xvdyh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7Ci0KICAgICBjb25zdCBWZWN0
b3I8U2VnbWVudCwgOD4gbV9zZWdtZW50czsKLQogICAgIG11dGFibGUgdW5zaWduZWQgbV9sYXN0
U2VnbWVudEluZGV4OwogfTsKIApAQCAtODUsNiArODMsMTIgQEAgaW5saW5lIEZsb3dDb250ZW50
czo6SXRlcmF0b3ImIEZsb3dDb250ZW50czo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKQogICAgIHJl
dHVybiAqdGhpczsKIH0KIAoraW5saW5lIEZsb3dDb250ZW50czo6SXRlcmF0b3ImIEZsb3dDb250
ZW50czo6SXRlcmF0b3I6Om9wZXJhdG9yLS0oKQoreworICAgIC0tbV9zZWdtZW50SW5kZXg7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCiBpbmxpbmUgYm9vbCBGbG93Q29udGVudHM6Okl0ZXJhdG9y
OjpvcGVyYXRvcj09KGNvbnN0IEZsb3dDb250ZW50czo6SXRlcmF0b3ImIG90aGVyKSBjb25zdAog
ewogICAgIHJldHVybiBtX3NlZ21lbnRJbmRleCA9PSBvdGhlci5tX3NlZ21lbnRJbmRleDsKQEAg
LTk1LDYgKzk5LDE4IEBAIGlubGluZSBib29sIEZsb3dDb250ZW50czo6SXRlcmF0b3I6Om9wZXJh
dG9yIT0oY29uc3QgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciYgb3RoCiAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOwogfQogCitpbmxpbmUgY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBG
bG93Q29udGVudHM6Okl0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVCht
X3NlZ21lbnRJbmRleCA8IG1fZmxvd0NvbnRlbnRzLm1fc2VnbWVudHMuc2l6ZSgpKTsKKyAgICBy
ZXR1cm4gbV9mbG93Q29udGVudHMubV9zZWdtZW50c1ttX3NlZ21lbnRJbmRleF07Cit9CisKK2lu
bGluZSBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQqIEZsb3dDb250ZW50czo6SXRlcmF0b3I6
Om9wZXJhdG9yLT4oKSBjb25zdAoreworICAgIEFTU0VSVChtX3NlZ21lbnRJbmRleCA8IG1fZmxv
d0NvbnRlbnRzLm1fc2VnbWVudHMuc2l6ZSgpKTsKKyAgICByZXR1cm4gJihtX2Zsb3dDb250ZW50
cy5tX3NlZ21lbnRzW21fc2VnbWVudEluZGV4XSk7Cit9CisKIGlubGluZSB1bnNpZ25lZCBGbG93
Q29udGVudHM6OnNlZ21lbnRJbmRleEZvclBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25z
dAogewogICAgIGF1dG8mIGxhc3RTZWdtZW50ID0gbV9zZWdtZW50c1ttX2xhc3RTZWdtZW50SW5k
ZXhdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRGdW5jdGlvbnMuY3BwCmluZGV4IGQ1MTk5ZDg0NDg3OGNhNDgyZDJhYTQxOGI4ZGJjMjViYjk0
NWZjZjAuLjliMDEyYjIyNzZlOTA5NWRmMGM3YzMwZjIxYTBjMmE4NjA1OGY2NGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9u
cy5jcHAKQEAgLTg0LDYgKzg0LDcgQEAgdm9pZCBwYWludEZsb3coY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBmbG93LCBjb25zdCBMYXlvdXQmIGxheW91dCwgUGFpbnRJbmZvJiBwYWkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBUZXh0UnVuIHRleHRSdW4ocnVuLnRleHQoKSk7CiAgICAg
ICAgIHRleHRSdW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxl
LnRhYlNpemUoKSk7CisgICAgICAgIHRleHRSdW4uc2V0WFBvcyhydW4ucmVjdCgpLngoKSk7CiAg
ICAgICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbiA9IHJ1bi5iYXNlbGluZSgpICsgcGFpbnRPZmZz
ZXQ7CiAgICAgICAgIHRleHRPcmlnaW4uc2V0WShyb3VuZFRvRGV2aWNlUGl4ZWwoTGF5b3V0VW5p
dCh0ZXh0T3JpZ2luLnkoKSksIGZsb3cuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7
CiAgICAgICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgdGV4dE9yaWdpbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRG
cmFnbWVudEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwCmluZGV4IDg3MTczMTk5ZmZhZGYwMWYzZGQy
NjMyODk0ZjQxZmM0ZmZiN2Y2NzIuLjBlNzQzN2FjOTY3YzRkYzdkNGNjNjFjYjE0YWE4YjhkZTVl
YmNiYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwCkBAIC00OCw3ICs0OCw4
IEBAIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlKQogCiBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50SXRlcmF0b3IoY29u
c3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQogICAgIDogbV9mbG93Q29udGVudHMoZmxvdykKLSAg
ICAsIG1fbGluZUJyZWFrSXRlcmF0b3IoKCptX2Zsb3dDb250ZW50cy5iZWdpbigpKS50ZXh0LCBm
bG93LnN0eWxlKCkubG9jYWxlKCkpCisgICAgLCBtX2N1cnJlbnRTZWdtZW50KG1fZmxvd0NvbnRl
bnRzLmJlZ2luKCkpCisgICAgLCBtX2xpbmVCcmVha0l0ZXJhdG9yKG1fY3VycmVudFNlZ21lbnQt
PnRleHQsIGZsb3cuc3R5bGUoKS5sb2NhbGUoKSkKICAgICAsIG1fc3R5bGUoZmxvdy5zdHlsZSgp
KQogewogfQpAQCAtNjAsMTE1ICs2MSwxMzYgQEAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6bmV4dFRleHRGcmFnbWVudChmbG9hdAogICAg
IC8vIDIuIHdoaXRlc3BhY2UgKGNvbGxhc3BlZCwgbm9uLWNvbGxhcHNlZCBtdWx0aSBvciBzaW5n
bGUpIG9yCiAgICAgLy8gMy4gbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycy4KICAgICAvLyA0LiBl
bXB0eSwgaW5kaWNhdGluZyBjb250ZW50IGVuZC4KLSAgICBpZiAoaXNFbmQobV9wb3NpdGlvbikp
CisgICAgQVNTRVJUKG1fY3VycmVudFNlZ21lbnQgIT0gbV9mbG93Q29udGVudHMuZW5kKCkpOwor
ICAgIGlmIChtX3Bvc2l0aW9uID09IG1fY3VycmVudFNlZ21lbnQtPmVuZCkKKyAgICAgICAgKytt
X2N1cnJlbnRTZWdtZW50OworICAgIC8vIElzIGl0IGNvbnRlbnQgZW5kPworICAgIGlmIChtX2N1
cnJlbnRTZWdtZW50ID09IG1fZmxvd0NvbnRlbnRzLmVuZCgpKQogICAgICAgICByZXR1cm4gVGV4
dEZyYWdtZW50KG1fcG9zaXRpb24sIG1fcG9zaXRpb24sIDAsIFRleHRGcmFnbWVudDo6Q29udGVu
dEVuZCk7CisgICAgdW5zaWduZWQgc2VnbWVudEVuZFBvc2l0aW9uID0gbV9jdXJyZW50U2VnbWVu
dC0+ZW5kOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBtX3Bvc2l0aW9uOwogICAgIGlm
IChpc0xpbmVCcmVhayhtX3Bvc2l0aW9uKSkgewotICAgICAgICBUZXh0RnJhZ21lbnQgZnJhZ21l
bnQobV9wb3NpdGlvbiwgbV9wb3NpdGlvbiArIDEsIDAsIFRleHRGcmFnbWVudDo6TGluZUJyZWFr
KTsKLSAgICAgICAgKyttX3Bvc2l0aW9uOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAg
ICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gKyttX3Bvc2l0aW9uOworICAgICAgICByZXR1cm4g
VGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCAwLCBUZXh0RnJhZ21lbnQ6
OkxpbmVCcmVhayk7CiAgICAgfQotICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBtX3Bvc2l0
aW9uOwotICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc2tpcFRvTmV4dFBvc2l0aW9uKFBvc2l0
aW9uVHlwZTo6Tm9uV2hpdGVzcGFjZSwgc3RhcnRQb3NpdGlvbik7CisgICAgZmxvYXQgd2lkdGgg
PSAwOworICAgIGJvb2wgb3ZlcmxhcHBpbmdGcmFnbWVudCA9IGZhbHNlOworICAgIHVuc2lnbmVk
IGVuZFBvc2l0aW9uID0gc2tpcFRvTmV4dFBvc2l0aW9uKFBvc2l0aW9uVHlwZTo6Tm9uV2hpdGVz
cGFjZSwgc3RhcnRQb3NpdGlvbiwgd2lkdGgsIHhQb3NpdGlvbiwgb3ZlcmxhcHBpbmdGcmFnbWVu
dCk7CiAgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24gPD0gZW5kUG9zaXRpb24pOwotICAgIGlmIChl
bmRQb3NpdGlvbiA+IHN0YXJ0UG9zaXRpb24pIHsKKyAgICBpZiAoc3RhcnRQb3NpdGlvbiA8IGVu
ZFBvc2l0aW9uKSB7CiAgICAgICAgIGJvb2wgbXVsdGlwbGVXaGl0ZXNwYWNlID0gc3RhcnRQb3Np
dGlvbiArIDEgPCBlbmRQb3NpdGlvbjsKICAgICAgICAgYm9vbCBpc0NvbGxhcHNlZCA9IG11bHRp
cGxlV2hpdGVzcGFjZSAmJiBtX3N0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZTsKICAgICAgICAgYm9v
bCBpc0JyZWFrYWJsZSA9ICFpc0NvbGxhcHNlZCAmJiBtdWx0aXBsZVdoaXRlc3BhY2U7Ci0gICAg
ICAgIGZsb2F0IHdpZHRoID0gaXNDb2xsYXBzZWQgPyBtX3N0eWxlLnNwYWNlV2lkdGggOiB0ZXh0
V2lkdGgoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHhQb3NpdGlvbik7CiAgICAgICAgIG1f
cG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKLSAgICAgICAgcmV0dXJuIFRleHRGcmFnbWVudChzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgd2lkdGgsIFRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSwg
aXNDb2xsYXBzZWQsIGlzQnJlYWthYmxlKTsKKyAgICAgICAgcmV0dXJuIFRleHRGcmFnbWVudChz
dGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgd2lkdGgsIFRleHRGcmFnbWVudDo6V2hpdGVzcGFj
ZSwgZW5kUG9zaXRpb24gPT0gc2VnbWVudEVuZFBvc2l0aW9uLCBmYWxzZSwgaXNDb2xsYXBzZWQs
IG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlLCBpc0JyZWFrYWJsZSk7CiAgICAgfQotICAgIGVu
ZFBvc2l0aW9uID0gc2tpcFRvTmV4dFBvc2l0aW9uKFBvc2l0aW9uVHlwZTo6QnJlYWthYmxlLCBz
dGFydFBvc2l0aW9uICsgMSk7CisgICAgZW5kUG9zaXRpb24gPSBza2lwVG9OZXh0UG9zaXRpb24o
UG9zaXRpb25UeXBlOjpCcmVha2FibGUsIHN0YXJ0UG9zaXRpb24sIHdpZHRoLCB4UG9zaXRpb24s
IG92ZXJsYXBwaW5nRnJhZ21lbnQpOwogICAgIG1fcG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKLSAg
ICByZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB0ZXh0V2lk
dGgoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHhQb3NpdGlvbiksIFRleHRGcmFnbWVudDo6
Tm9uV2hpdGVzcGFjZSwgZmFsc2UsIG1fc3R5bGUuYnJlYWtXb3JkT25PdmVyZmxvdyk7CisgICAg
cmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgd2lkdGgsIFRl
eHRGcmFnbWVudDo6Tm9uV2hpdGVzcGFjZSwgZW5kUG9zaXRpb24gPT0gc2VnbWVudEVuZFBvc2l0
aW9uLCBvdmVybGFwcGluZ0ZyYWdtZW50LCBmYWxzZSwgZmFsc2UsIG1fc3R5bGUuYnJlYWtXb3Jk
T25PdmVyZmxvdyk7CiB9CiAKLWZsb2F0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjp0ZXh0V2lkdGgo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3QKK3ZvaWQg
VGV4dEZyYWdtZW50SXRlcmF0b3I6OnJldmVydFRvRnJhZ21lbnQoY29uc3QgVGV4dEZyYWdtZW50
JiBmcmFnbWVudCkKIHsKLSAgICBjb25zdCBhdXRvJiBmcm9tU2VnbWVudCA9IG1fZmxvd0NvbnRl
bnRzLnNlZ21lbnRGb3JQb3NpdGlvbihmcm9tKTsKLSAgICBBU1NFUlQoaXM8UmVuZGVyVGV4dD4o
ZnJvbVNlZ21lbnQucmVuZGVyZXIpKTsKLSAgICBpZiAoKG1fc3R5bGUuZm9udC5pc0ZpeGVkUGl0
Y2goKSAmJiBmcm9tU2VnbWVudC5lbmQgPj0gdG8pIHx8IChmcm9tID09IGZyb21TZWdtZW50LnN0
YXJ0ICYmIHRvID09IGZyb21TZWdtZW50LmVuZCkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJUZXh0Pihmcm9tU2VnbWVudC5yZW5kZXJlcikud2lkdGgoZnJvbSAtIGZyb21TZWdtZW50
LnN0YXJ0LCB0byAtIGZyb20sIG1fc3R5bGUuZm9udCwgeFBvc2l0aW9uLCBudWxscHRyLCBudWxs
cHRyKTsKLQotICAgIGNvbnN0IGF1dG8qIHNlZ21lbnQgPSAmZnJvbVNlZ21lbnQ7Ci0gICAgZmxv
YXQgdGV4dFdpZHRoID0gMDsKLSAgICB1bnNpZ25lZCBmcmFnbWVudEVuZCA9IDA7Ci0gICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgZnJhZ21lbnRFbmQgPSBzdGQ6Om1pbih0bywgc2VnbWVudC0+
ZW5kKTsKLSAgICAgICAgdGV4dFdpZHRoICs9IHNlZ21lbnQtPnRleHQuaXM4Qml0KCkgPyBydW5X
aWR0aDxMQ2hhcj4oc2VnbWVudC0+dGV4dCwgZnJvbSAtIHNlZ21lbnQtPnN0YXJ0LCBmcmFnbWVu
dEVuZCAtIHNlZ21lbnQtPnN0YXJ0LCB4UG9zaXRpb24gKyB0ZXh0V2lkdGgpIDoKLSAgICAgICAg
ICAgIHJ1bldpZHRoPFVDaGFyPihzZWdtZW50LT50ZXh0LCBmcm9tIC0gc2VnbWVudC0+c3RhcnQs
IGZyYWdtZW50RW5kIC0gc2VnbWVudC0+c3RhcnQsIHhQb3NpdGlvbiArIHRleHRXaWR0aCk7Ci0g
ICAgICAgIGlmIChmcmFnbWVudEVuZCA9PSB0bykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBmcm9tID0gZnJhZ21lbnRFbmQ7Ci0gICAgICAgIHNlZ21lbnQgPSAmbV9mbG93Q29udGVudHMu
c2VnbWVudEZvclBvc2l0aW9uKGZyYWdtZW50RW5kKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIHRl
eHRXaWR0aDsKKyAgICBBU1NFUlQobV9wb3NpdGlvbiA+PSBmcmFnbWVudC5lbmQoKSk7CisgICAg
QVNTRVJUKGZyYWdtZW50LnN0YXJ0KCkgPj0gMCk7CisgICAgLy8gUmV2ZXJ0IHNlZ21lbnQgZmly
c3QuCisgICAgd2hpbGUgKG1fY3VycmVudFNlZ21lbnQtPnN0YXJ0ID4gZnJhZ21lbnQuc3RhcnQo
KSkKKyAgICAgICAgLS1tX2N1cnJlbnRTZWdtZW50OworICAgIC8vIFRPRE86IEl0IHJldmVydHMg
dG8gdGhlIGxhc3QgZnJhZ21lbnQgb24gdGhlIHNhbWUgcG9zaXRpb24sIGJ1dCB0aGF0J3Mgb2sg
Zm9yIG5vdyBhcyB3ZSBkb24ndCBuZWVkIHRvCisgICAgLy8gZGlmZmVyZW50aWF0ZSBtdWx0aXBs
ZSByZW5kZXJlcnMgb24gdGhlIHNhbWUgcG9zaXRpb24uCisgICAgbV9wb3NpdGlvbiA9IGZyYWdt
ZW50LnN0YXJ0KCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3Rh
dGljIHVuc2lnbmVkIG5leHRCcmVha2FibGVQb3NpdGlvbihMYXp5TGluZUJyZWFrSXRlcmF0b3Im
IGxpbmVCcmVha0l0ZXJhdG9yLCBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIHNlZ21lbnQs
IHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24pCit1bnNpZ25lZCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6
bmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2VnbWVu
dCwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbikKIHsKLSAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBv
c2l0aW9uTm9uTG9vc2VseTxDaGFyYWN0ZXJUeXBlLCBOQlNQQmVoYXZpb3I6Oklnbm9yZU5CU1A+
KGxpbmVCcmVha0l0ZXJhdG9yLCBzZWdtZW50LnRleHQuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBl
PigpLCBzZWdtZW50LmVuZCAtIHNlZ21lbnQuc3RhcnQsIHN0YXJ0UG9zaXRpb24pOworICAgIEFT
U0VSVChzdGFydFBvc2l0aW9uIDwgc2VnbWVudC5lbmQpOworICAgIGlmIChzZWdtZW50LnRleHQu
aW1wbCgpICE9IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5nKCkuaW1wbCgpKSB7CisgICAgICAg
IGNvbnN0IFN0cmluZyYgY3VycmVudFRleHQgPSBtX2xpbmVCcmVha0l0ZXJhdG9yLnN0cmluZygp
OworICAgICAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gY3VycmVudFRleHQubGVuZ3RoKCk7Cisg
ICAgICAgIFVDaGFyIGxhc3RDaGFyYWN0ZXIgPSB0ZXh0TGVuZ3RoID4gMCA/IGN1cnJlbnRUZXh0
W3RleHRMZW5ndGggLSAxXSA6IDA7CisgICAgICAgIFVDaGFyIHNlY29uZFRvTGFzdENoYXJhY3Rl
ciA9IHRleHRMZW5ndGggPiAxID8gY3VycmVudFRleHRbdGV4dExlbmd0aCAtIDJdIDogMDsKKyAg
ICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5zZXRQcmlvckNvbnRleHQobGFzdENoYXJhY3Rlciwg
c2Vjb25kVG9MYXN0Q2hhcmFjdGVyKTsKKyAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5yZXNl
dFN0cmluZ0FuZFJlbGVhc2VJdGVyYXRvcihzZWdtZW50LnRleHQsIG1fc3R5bGUubG9jYWxlLCBM
aW5lQnJlYWtJdGVyYXRvck1vZGVVQVgxNCk7CisgICAgfQorICAgIGNvbnN0IGF1dG8qIGNoYXJh
Y3RlcnMgPSBzZWdtZW50LnRleHQuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpOworICAgIHVu
c2lnbmVkIHNlZ21lbnRMZW5ndGggPSBzZWdtZW50LmVuZCAtIHNlZ21lbnQuc3RhcnQ7CisgICAg
dW5zaWduZWQgc2VnbWVudFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiAtIHNlZ21lbnQuc3RhcnQ7
CisgICAgcmV0dXJuIHNlZ21lbnQuc3RhcnQgKyBuZXh0QnJlYWthYmxlUG9zaXRpb25Ob25Mb29z
ZWx5PENoYXJhY3RlclR5cGUsIE5CU1BCZWhhdmlvcjo6SWdub3JlTkJTUD4obV9saW5lQnJlYWtJ
dGVyYXRvciwgY2hhcmFjdGVycywgc2VnbWVudExlbmd0aCwgc2VnbWVudFBvc2l0aW9uKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgdW5zaWduZWQgbmV4
dE5vbldoaXRlc3BhY2VQb3NpdGlvbihjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIHNlZ21l
bnQsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpT
dHlsZSYgc3R5bGUpCit1bnNpZ25lZCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6bmV4dE5vbldoaXRl
c3BhY2VQb3NpdGlvbihjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIHNlZ21lbnQsIHVuc2ln
bmVkIHN0YXJ0UG9zaXRpb24pCiB7CisgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24gPCBzZWdtZW50
LmVuZCk7CiAgICAgY29uc3QgYXV0byogdGV4dCA9IHNlZ21lbnQudGV4dC5jaGFyYWN0ZXJzPENo
YXJhY3RlclR5cGU+KCk7CiAgICAgdW5zaWduZWQgcG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOwot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHNlZ21lbnQuZW5kIC0gc2VnbWVudC5zdGFydDsKLSAgICBm
b3IgKDsgcG9zaXRpb24gPCBsZW5ndGg7ICsrcG9zaXRpb24pIHsKLSAgICAgICAgYXV0byBjaGFy
YWN0ZXIgPSB0ZXh0W3Bvc2l0aW9uXTsKLSAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UgPSBjaGFy
YWN0ZXIgPT0gJyAnIHx8IGNoYXJhY3RlciA9PSAnXHQnIHx8ICghc3R5bGUucHJlc2VydmVOZXds
aW5lICYmIGNoYXJhY3RlciA9PSAnXG4nKTsKKyAgICBmb3IgKDsgcG9zaXRpb24gPCBzZWdtZW50
LmVuZDsgKytwb3NpdGlvbikgeworICAgICAgICBhdXRvIGNoYXJhY3RlciA9IHRleHRbcG9zaXRp
b24gLSBzZWdtZW50LnN0YXJ0XTsKKyAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UgPSBjaGFyYWN0
ZXIgPT0gJyAnIHx8IGNoYXJhY3RlciA9PSAnXHQnIHx8ICghbV9zdHlsZS5wcmVzZXJ2ZU5ld2xp
bmUgJiYgY2hhcmFjdGVyID09ICdcbicpOwogICAgICAgICBpZiAoIWlzV2hpdGVzcGFjZSkKICAg
ICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICB9CiAgICAgcmV0dXJuIHBvc2l0aW9uOwog
fQogCi11bnNpZ25lZCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6c2tpcFRvTmV4dFBvc2l0aW9uKFBv
c2l0aW9uVHlwZSBwb3NpdGlvblR5cGUsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24pIGNvbnN0Citm
bG9hdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6dGV4dFdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKGlzRW5kKHN0YXJ0UG9z
aXRpb24pKQotICAgICAgICByZXR1cm4gc3RhcnRQb3NpdGlvbjsKKyAgICBhdXRvJiBzZWdtZW50
ID0gKm1fY3VycmVudFNlZ21lbnQ7CisgICAgQVNTRVJUKHNlZ21lbnQuc3RhcnQgPD0gZnJvbSAm
JiBmcm9tIDw9IHNlZ21lbnQuZW5kICYmIHNlZ21lbnQuc3RhcnQgPD0gdG8gJiYgdG8gPD0gc2Vn
bWVudC5lbmQpOworICAgIEFTU0VSVChpczxSZW5kZXJUZXh0PihzZWdtZW50LnJlbmRlcmVyKSk7
CisgICAgaWYgKG1fc3R5bGUuZm9udC5pc0ZpeGVkUGl0Y2goKSB8fCAoZnJvbSA9PSBzZWdtZW50
LnN0YXJ0ICYmIHRvID09IHNlZ21lbnQuZW5kKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJl
bmRlclRleHQ+KHNlZ21lbnQucmVuZGVyZXIpLndpZHRoKGZyb20gLSBzZWdtZW50LnN0YXJ0LCB0
byAtIGZyb20sIG1fc3R5bGUuZm9udCwgeFBvc2l0aW9uLCBudWxscHRyLCBudWxscHRyKTsKKyAg
ICByZXR1cm4gc2VnbWVudC50ZXh0LmlzOEJpdCgpID8gcnVuV2lkdGg8TENoYXI+KHNlZ21lbnQs
IGZyb20sIHRvLCB4UG9zaXRpb24pIDogcnVuV2lkdGg8VUNoYXI+KHNlZ21lbnQsIGZyb20sIHRv
LCB4UG9zaXRpb24pOworfQogCit1bnNpZ25lZCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6c2tpcFRv
TmV4dFBvc2l0aW9uKFBvc2l0aW9uVHlwZSBwb3NpdGlvblR5cGUsIHVuc2lnbmVkIHN0YXJ0UG9z
aXRpb24sIGZsb2F0JiB3aWR0aCwgZmxvYXQgeFBvc2l0aW9uLCBib29sJiBvdmVybGFwcGluZ0Zy
YWdtZW50KQoreworICAgIG92ZXJsYXBwaW5nRnJhZ21lbnQgPSBmYWxzZTsKICAgICB1bnNpZ25l
ZCBjdXJyZW50UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOwotICAgIEZsb3dDb250ZW50czo6SXRl
cmF0b3IgaXQobV9mbG93Q29udGVudHMsIG1fZmxvd0NvbnRlbnRzLnNlZ21lbnRJbmRleEZvclBv
c2l0aW9uKGN1cnJlbnRQb3NpdGlvbikpOwotICAgIGZvciAoYXV0byBlbmQgPSBtX2Zsb3dDb250
ZW50cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGF1dG8mIHNlZ21lbnQgPSAq
aXQ7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRQb3NpdG9uUmVsYXRpdmVUb1NlZ21lbnQgPSBj
dXJyZW50UG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0OwotICAgICAgICB1bnNpZ25lZCBuZXh0UG9z
aXRpb25SZWxhdGl2ZVRvU2VnbWVudCA9IDA7Ci0gICAgICAgIGlmIChwb3NpdGlvblR5cGUgPT0g
Tm9uV2hpdGVzcGFjZSkgewotICAgICAgICAgICAgbmV4dFBvc2l0aW9uUmVsYXRpdmVUb1NlZ21l
bnQgPSBzZWdtZW50LnRleHQuaXM4Qml0KCkgPyBuZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uPExD
aGFyPihzZWdtZW50LCBjdXJyZW50UG9zaXRvblJlbGF0aXZlVG9TZWdtZW50LCBtX3N0eWxlKSA6
Ci0gICAgICAgICAgICAgICAgbmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbjxVQ2hhcj4oc2VnbWVu
dCwgY3VycmVudFBvc2l0b25SZWxhdGl2ZVRvU2VnbWVudCwgbV9zdHlsZSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAocG9zaXRpb25UeXBlID09IEJyZWFrYWJsZSkgewotICAgICAgICAgICAgaWYgKHNl
Z21lbnQudGV4dC5pbXBsKCkgIT0gbV9saW5lQnJlYWtJdGVyYXRvci5zdHJpbmcoKS5pbXBsKCkp
IHsKLSAgICAgICAgICAgICAgICBVQ2hhciBsYXN0Q2hhcmFjdGVyID0gc2VnbWVudC5zdGFydCA+
IDAgPyBjaGFyYWN0ZXJBdChzZWdtZW50LnN0YXJ0IC0gMSkgOiAwOwotICAgICAgICAgICAgICAg
IFVDaGFyIHNlY29uZFRvTGFzdENoYXJhY3RlciA9IHNlZ21lbnQuc3RhcnQgPiAxID8gY2hhcmFj
dGVyQXQoc2VnbWVudC5zdGFydCAtIDIpIDogMDsKLSAgICAgICAgICAgICAgICBtX2xpbmVCcmVh
a0l0ZXJhdG9yLnNldFByaW9yQ29udGV4dChsYXN0Q2hhcmFjdGVyLCBzZWNvbmRUb0xhc3RDaGFy
YWN0ZXIpOwotICAgICAgICAgICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3IucmVzZXRTdHJpbmdB
bmRSZWxlYXNlSXRlcmF0b3Ioc2VnbWVudC50ZXh0LCBtX3N0eWxlLmxvY2FsZSwgTGluZUJyZWFr
SXRlcmF0b3JNb2RlVUFYMTQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbmV4dFBvc2l0
aW9uUmVsYXRpdmVUb1NlZ21lbnQgPSBzZWdtZW50LnRleHQuaXM4Qml0KCkgPyBuZXh0QnJlYWth
YmxlUG9zaXRpb248TENoYXI+KG1fbGluZUJyZWFrSXRlcmF0b3IsIHNlZ21lbnQsIGN1cnJlbnRQ
b3NpdG9uUmVsYXRpdmVUb1NlZ21lbnQpIDoKLSAgICAgICAgICAgICAgICBuZXh0QnJlYWthYmxl
UG9zaXRpb248VUNoYXI+KG1fbGluZUJyZWFrSXRlcmF0b3IsIHNlZ21lbnQsIGN1cnJlbnRQb3Np
dG9uUmVsYXRpdmVUb1NlZ21lbnQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBzZWdtZW50LnN0YXJ0
ICsgbmV4dFBvc2l0aW9uUmVsYXRpdmVUb1NlZ21lbnQ7Ci0gICAgICAgIGlmIChjdXJyZW50UG9z
aXRpb24gPCBzZWdtZW50LmVuZCkKLSAgICAgICAgICAgIGJyZWFrOworICAgIHVuc2lnbmVkIG5l
eHRQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKKyAgICAvLyBDb2xsYXBzZWQgd2hpdGVzcGFj
ZSBoYXMgY29uc3RhbnQgd2lkdGguIERvIG5vdCBtZWFzdXJlIGl0LgorICAgIGlmIChwb3NpdGlv
blR5cGUgPT0gTm9uV2hpdGVzcGFjZSkKKyAgICAgICAgbmV4dFBvc2l0aW9uID0gbV9jdXJyZW50
U2VnbWVudC0+dGV4dC5pczhCaXQoKSA/IG5leHROb25XaGl0ZXNwYWNlUG9zaXRpb248TENoYXI+
KCptX2N1cnJlbnRTZWdtZW50LCBjdXJyZW50UG9zaXRpb24pIDogbmV4dE5vbldoaXRlc3BhY2VQ
b3NpdGlvbjxVQ2hhcj4oKm1fY3VycmVudFNlZ21lbnQsIGN1cnJlbnRQb3NpdGlvbik7CisgICAg
ZWxzZSBpZiAocG9zaXRpb25UeXBlID09IEJyZWFrYWJsZSkgeworICAgICAgICAvLyBuZXh0QnJl
YWthYmxlUG9zaXRpb24gcmV0dXJucyB0aGUgc2FtZSBwb3NpdGlvbiBmb3IgY2VydGFpbiBjaGFy
YWN0ZXJzIHN1Y2ggYXMgaHlwaGVucy4gQ2FsbCBuZXh0IGFnYWluIHdpdGggbW9kaWZpZWQgcG9z
aXRpb24gdW5sZXNzIGl0J3MgdGhlIGVuZCBvZiB0aGUgc2VnbWVudC4KKyAgICAgICAgbmV4dFBv
c2l0aW9uID0gbV9jdXJyZW50U2VnbWVudC0+dGV4dC5pczhCaXQoKSA/IG5leHRCcmVha2FibGVQ
b3NpdGlvbjxMQ2hhcj4oKm1fY3VycmVudFNlZ21lbnQsIGN1cnJlbnRQb3NpdGlvbikgOiBuZXh0
QnJlYWthYmxlUG9zaXRpb248VUNoYXI+KCptX2N1cnJlbnRTZWdtZW50LCBjdXJyZW50UG9zaXRp
b24pOworICAgICAgICAvLyBXZSBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgd29yZCBhY3R1YWxs
eSBmaW5pc2hlcyBhdCB0aGUgZW5kIG9mIHRoaXMgcmVuZGVyZXIgb3Igbm90LgorICAgICAgICBp
ZiAobmV4dFBvc2l0aW9uID09IG1fY3VycmVudFNlZ21lbnQtPmVuZCkgeworICAgICAgICAgICAg
YXV0byBuZXh0U2VnbWVudCA9IG1fY3VycmVudFNlZ21lbnQ7CisgICAgICAgICAgICArK25leHRT
ZWdtZW50OworICAgICAgICAgICAgaWYgKG5leHRTZWdtZW50ICE9IG1fZmxvd0NvbnRlbnRzLmVu
ZCgpKQorICAgICAgICAgICAgICAgIG92ZXJsYXBwaW5nRnJhZ21lbnQgPSBuZXh0UG9zaXRpb24g
PCAobmV4dFNlZ21lbnQtPnRleHQuaXM4Qml0KCkgPyBuZXh0QnJlYWthYmxlUG9zaXRpb248TENo
YXI+KCpuZXh0U2VnbWVudCwgbmV4dFBvc2l0aW9uKSA6IG5leHRCcmVha2FibGVQb3NpdGlvbjxV
Q2hhcj4oKm5leHRTZWdtZW50LCBuZXh0UG9zaXRpb24pKTsKKyAgICAgICAgfSBlbHNlIGlmIChu
ZXh0UG9zaXRpb24gPT0gY3VycmVudFBvc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAoKytuZXh0
UG9zaXRpb24gPCBtX2N1cnJlbnRTZWdtZW50LT5lbmQpCisgICAgICAgICAgICAgICAgbmV4dFBv
c2l0aW9uID0gbV9jdXJyZW50U2VnbWVudC0+dGV4dC5pczhCaXQoKSA/IG5leHRCcmVha2FibGVQ
b3NpdGlvbjxMQ2hhcj4oKm1fY3VycmVudFNlZ21lbnQsIGN1cnJlbnRQb3NpdGlvbiArIDEpIDog
bmV4dEJyZWFrYWJsZVBvc2l0aW9uPFVDaGFyPigqbV9jdXJyZW50U2VnbWVudCwgY3VycmVudFBv
c2l0aW9uICsgMSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlv
bjsKKyAgICB3aWR0aCA9IDA7CisgICAgaWYgKG5leHRQb3NpdGlvbiA9PSBjdXJyZW50UG9zaXRp
b24pCisgICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CisgICAgYm9vbCBtZWFzdXJlVGV4
dCA9IHBvc2l0aW9uVHlwZSAhPSBOb25XaGl0ZXNwYWNlIHx8ICFtX3N0eWxlLmNvbGxhcHNlV2hp
dGVzcGFjZTsKKyAgICBpZiAobWVhc3VyZVRleHQpIHsKKyAgICAgICAgZmxvYXQgdGV4dFdpZHRo
ID0gdGhpcy0+dGV4dFdpZHRoKGN1cnJlbnRQb3NpdGlvbiwgbmV4dFBvc2l0aW9uLCB4UG9zaXRp
b24pOworICAgICAgICB4UG9zaXRpb24gKz0gdGV4dFdpZHRoOworICAgICAgICB3aWR0aCArPSB0
ZXh0V2lkdGg7CisgICAgfSBlbHNlIGlmIChzdGFydFBvc2l0aW9uIDwgbmV4dFBvc2l0aW9uKQor
ICAgICAgICB3aWR0aCA9IG1fc3R5bGUuc3BhY2VXaWR0aDsKKyAgICByZXR1cm4gbmV4dFBvc2l0
aW9uOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWZsb2F0IFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpydW5XaWR0aChjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0CitmbG9hdCBUZXh0RnJhZ21l
bnRJdGVyYXRvcjo6cnVuV2lkdGgoY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBzZWdtZW50
LCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbiwgZmxvYXQgeFBv
c2l0aW9uKSBjb25zdAogewotICAgIEFTU0VSVChmcm9tIDw9IHRvKTsKLSAgICBpZiAoZnJvbSA9
PSB0bykKKyAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8PSBlbmRQb3NpdGlvbik7CisgICAgaWYg
KHN0YXJ0UG9zaXRpb24gPT0gZW5kUG9zaXRpb24pCiAgICAgICAgIHJldHVybiAwOwotICAgIGJv
b2wgbWVhc3VyZVdpdGhFbmRTcGFjZSA9IG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlICYmIHRv
IDwgdGV4dC5sZW5ndGgoKSAmJiB0ZXh0W3RvXSA9PSAnICc7CisgICAgdW5zaWduZWQgc2VnbWVu
dEZyb20gPSBzdGFydFBvc2l0aW9uIC0gc2VnbWVudC5zdGFydDsKKyAgICB1bnNpZ25lZCBzZWdt
ZW50VG8gPSBlbmRQb3NpdGlvbiAtIHNlZ21lbnQuc3RhcnQ7CisgICAgYm9vbCBtZWFzdXJlV2l0
aEVuZFNwYWNlID0gbV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgJiYgc2VnbWVudFRvIDwgc2Vn
bWVudC50ZXh0Lmxlbmd0aCgpICYmIHNlZ21lbnQudGV4dFtzZWdtZW50VG9dID09ICcgJzsKICAg
ICBpZiAobWVhc3VyZVdpdGhFbmRTcGFjZSkKLSAgICAgICAgKyt0bzsKLSAgICBUZXh0UnVuIHJ1
bih0ZXh0LmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSArIGZyb20sIHRvIC0gZnJvbSk7Cisg
ICAgICAgICsrc2VnbWVudFRvOworICAgIFRleHRSdW4gcnVuKHNlZ21lbnQudGV4dC5jaGFyYWN0
ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBzZWdtZW50RnJvbSwgc2VnbWVudFRvIC0gc2VnbWVudEZy
b20pOwogICAgIHJ1bi5zZXRYUG9zKHhQb3NpdGlvbik7CiAgICAgcnVuLnNldFRhYlNpemUoISFt
X3N0eWxlLnRhYldpZHRoLCBtX3N0eWxlLnRhYldpZHRoKTsKICAgICBmbG9hdCB3aWR0aCA9IG1f
c3R5bGUuZm9udC53aWR0aChydW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oCmluZGV4
IGM4YzFlYjQzM2RhNTQxYTBkZTBlYjQwNTM4YjljZThjZTU5NGIwMGMuLjgxY2Y2ZTJjOTQyOTQ1
ZWM3M2UxNGNkMmUyZWQwN2QyODg4NDFlZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9y
LmgKQEAgLTQzLDEyICs0MywxNSBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICBlbnVt
IFR5cGUgeyBDb250ZW50RW5kLCBMaW5lQnJlYWssIFdoaXRlc3BhY2UsIE5vbldoaXRlc3BhY2Ug
fTsKICAgICAgICAgVGV4dEZyYWdtZW50KCkgPSBkZWZhdWx0OwotICAgICAgICBUZXh0RnJhZ21l
bnQodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgd2lkdGgsIFR5cGUgdHlwZSwg
Ym9vbCBpc0NvbGxhcHNlZCA9IGZhbHNlLCBib29sIGlzQnJlYWthYmxlID0gZmFsc2UpCisgICAg
ICAgIFRleHRGcmFnbWVudCh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9hdCB3aWR0
aCwgVHlwZSB0eXBlLCBib29sIGlzTGFzdEluUmVuZGVyZXIgPSBmYWxzZSwgYm9vbCBvdmVybGFw
c1RvTmV4dFJlbmRlcmVyID0gZmFsc2UsIGJvb2wgaXNDb2xsYXBzZWQgPSBmYWxzZSwgYm9vbCBp
c0NvbGxhcHNpYmxlID0gZmFsc2UsIGJvb2wgaXNCcmVha2FibGUgPSBmYWxzZSkKICAgICAgICAg
ICAgIDogbV9zdGFydChzdGFydCkKICAgICAgICAgICAgICwgbV9lbmQoZW5kKQotICAgICAgICAg
ICAgLCBtX3R5cGUodHlwZSkKICAgICAgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAg
ICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICAgICAsIG1faXNMYXN0SW5SZW5kZXJlcihpc0xh
c3RJblJlbmRlcmVyKQorICAgICAgICAgICAgLCBtX292ZXJsYXBzVG9OZXh0UmVuZGVyZXIob3Zl
cmxhcHNUb05leHRSZW5kZXJlcikKICAgICAgICAgICAgICwgbV9pc0NvbGxhcHNlZChpc0NvbGxh
cHNlZCkKKyAgICAgICAgICAgICwgbV9pc0NvbGxhcHNpYmxlKGlzQ29sbGFwc2libGUpCiAgICAg
ICAgICAgICAsIG1faXNCcmVha2FibGUoaXNCcmVha2FibGUpCiAgICAgICAgIHsKICAgICAgICAg
fQpAQCAtNTcsMjIgKzYwLDQxIEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgZW5kKCkgY29u
c3QgeyByZXR1cm4gbV9lbmQ7IH0KICAgICAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoOyB9CiAgICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQorICAgICAgICBib29sIGlzTGFzdEluUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2lzTGFz
dEluUmVuZGVyZXI7IH0KKyAgICAgICAgYm9vbCBvdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gbV9vdmVybGFwc1RvTmV4dFJlbmRlcmVyOyB9CiAgICAgICAgIGJvb2wgaXND
b2xsYXBzZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQ29sbGFwc2VkOyB9CisgICAgICAgIGJvb2wg
aXNDb2xsYXBzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xsYXBzaWJsZTsgfQogICAgICAg
ICBib29sIGlzQnJlYWthYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0JyZWFrYWJsZTsgfQogCiAg
ICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0KCkgPT0gZW5kKCk7IH0K
ICAgICAgICAgVGV4dEZyYWdtZW50IHNwbGl0KHVuc2lnbmVkIHNwbGl0UG9zaXRpb24sIGNvbnN0
IFRleHRGcmFnbWVudEl0ZXJhdG9yJik7CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBU
ZXh0RnJhZ21lbnQmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9zdGFydCA9PSBvdGhlci5tX3N0YXJ0CisgICAgICAgICAgICAgICAgJiYgbV9lbmQgPT0gb3Ro
ZXIubV9lbmQKKyAgICAgICAgICAgICAgICAmJiBtX3dpZHRoID09IG90aGVyLm1fd2lkdGgKKyAg
ICAgICAgICAgICAgICAmJiBtX3R5cGUgPT0gb3RoZXIubV90eXBlCisgICAgICAgICAgICAgICAg
JiYgbV9pc0xhc3RJblJlbmRlcmVyID09IG90aGVyLm1faXNMYXN0SW5SZW5kZXJlcgorICAgICAg
ICAgICAgICAgICYmIG1fb3ZlcmxhcHNUb05leHRSZW5kZXJlciA9PSBvdGhlci5tX292ZXJsYXBz
VG9OZXh0UmVuZGVyZXIKKyAgICAgICAgICAgICAgICAmJiBtX2lzQ29sbGFwc2VkID09IG90aGVy
Lm1faXNDb2xsYXBzZWQKKyAgICAgICAgICAgICAgICAmJiBtX2lzQ29sbGFwc2libGUgPT0gb3Ro
ZXIubV9pc0NvbGxhcHNpYmxlCisgICAgICAgICAgICAgICAgJiYgbV9pc0JyZWFrYWJsZSA9PSBv
dGhlci5tX2lzQnJlYWthYmxlOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB1
bnNpZ25lZCBtX3N0YXJ0IHsgMCB9OwogICAgICAgICB1bnNpZ25lZCBtX2VuZCB7IDAgfTsKLSAg
ICAgICAgVHlwZSBtX3R5cGUgeyBOb25XaGl0ZXNwYWNlIH07CiAgICAgICAgIGZsb2F0IG1fd2lk
dGggeyAwIH07CisgICAgICAgIFR5cGUgbV90eXBlIHsgTm9uV2hpdGVzcGFjZSB9OworICAgICAg
ICBib29sIG1faXNMYXN0SW5SZW5kZXJlciB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9vdmVy
bGFwc1RvTmV4dFJlbmRlcmVyIHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBtX2lzQ29sbGFwc2Vk
IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2lzQ29sbGFwc2libGUgeyBmYWxzZSB9OwogICAg
ICAgICBib29sIG1faXNCcmVha2FibGUgeyBmYWxzZSB9OwogICAgIH07CiAgICAgVGV4dEZyYWdt
ZW50IG5leHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uID0gMCk7Ci0gICAgZmxvYXQgdGV4
dFdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0
OworICAgIHZvaWQgcmV2ZXJ0VG9GcmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnQmKTsKKyAgICBm
bG9hdCB0ZXh0V2lkdGgodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRp
b24sIGZsb2F0IHhQb3NpdGlvbikgY29uc3Q7CiAKICAgICBzdHJ1Y3QgU3R5bGUgewogICAgICAg
ICBleHBsaWNpdCBTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYpOwpAQCAtODgsMTkgKzExMCwxOCBA
QCBwdWJsaWM6CiAgICAgICAgIEF0b21pY1N0cmluZyBsb2NhbGU7CiAgICAgfTsKICAgICBjb25z
dCBTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9Ci0gICAgLy8gRklYTUU6
IHJlbW92ZSBzcGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkoKQotICAgIGNvbnN0IEZsb3dDb250
ZW50czo6U2VnbWVudCYgc2VnbWVudEZvclBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25z
dCB7IHJldHVybiBtX2Zsb3dDb250ZW50cy5zZWdtZW50Rm9yUG9zaXRpb24ocG9zaXRpb24pOyB9
OwogCiBwcml2YXRlOgogICAgIGVudW0gUG9zaXRpb25UeXBlIHsgQnJlYWthYmxlLCBOb25XaGl0
ZXNwYWNlIH07Ci0gICAgdW5zaWduZWQgc2tpcFRvTmV4dFBvc2l0aW9uKFBvc2l0aW9uVHlwZSwg
dW5zaWduZWQgc3RhcnRQb3NpdGlvbikgY29uc3Q7Ci0gICAgVUNoYXIgY2hhcmFjdGVyQXQodW5z
aWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIHVuc2lnbmVkIHNraXBUb05leHRQb3NpdGlvbihQ
b3NpdGlvblR5cGUsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIGZsb2F0JiB3aWR0aCwgZmxvYXQg
eFBvc2l0aW9uLCBib29sJiBvdmVybGFwcGluZ0ZyYWdtZW50KTsKICAgICBib29sIGlzTGluZUJy
ZWFrKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKLSAgICBib29sIGlzRW5kKHVuc2lnbmVkIHBv
c2l0aW9uKSBjb25zdDsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gZmxv
YXQgcnVuV2lkdGgoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZs
b2F0IHhQb3NpdGlvbikgY29uc3Q7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHVuc2lnbmVkIG5leHRCcmVha2FibGVQb3NpdGlvbihjb25zdCBGbG93Q29udGVudHM6OlNl
Z21lbnQmLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gdW5zaWduZWQgbmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihjb25zdCBG
bG93Q29udGVudHM6OlNlZ21lbnQmLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKTsKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gZmxvYXQgcnVuV2lkdGgoY29uc3QgRmxvd0Nv
bnRlbnRzOjpTZWdtZW50JiwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9z
aXRpb24sIGZsb2F0IHhQb3NpdGlvbikgY29uc3Q7CiAKICAgICBGbG93Q29udGVudHMgbV9mbG93
Q29udGVudHM7Ci0gICAgbXV0YWJsZSBMYXp5TGluZUJyZWFrSXRlcmF0b3IgbV9saW5lQnJlYWtJ
dGVyYXRvcjsKKyAgICBGbG93Q29udGVudHM6Okl0ZXJhdG9yIG1fY3VycmVudFNlZ21lbnQ7Cisg
ICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIG1fbGluZUJyZWFrSXRlcmF0b3I7CiAgICAgY29uc3Qg
U3R5bGUgbV9zdHlsZTsKICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIHsgMCB9OwogfTsKQEAgLTEy
NywyMiArMTQ4LDExIEBAIGlubGluZSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50
IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OnNwCiAgICAgcmV0dXJuIG5ld0Zy
YWdtZW50OwogfQogCi1pbmxpbmUgVUNoYXIgVGV4dEZyYWdtZW50SXRlcmF0b3I6OmNoYXJhY3Rl
ckF0KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAotewotICAgIGF1dG8mIHNlZ21lbnQgPSBtX2Zs
b3dDb250ZW50cy5zZWdtZW50Rm9yUG9zaXRpb24ocG9zaXRpb24pOwotICAgIHJldHVybiBzZWdt
ZW50LnRleHRbcG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0XTsKLX0KLQogaW5saW5lIGJvb2wgVGV4
dEZyYWdtZW50SXRlcmF0b3I6OmlzTGluZUJyZWFrKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAog
ewotICAgIGlmIChpc0VuZChwb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gbV9zdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVyQXQocG9zaXRpb24pID09
ICdcbic7Ci19Ci0KLWlubGluZSBib29sIFRleHRGcmFnbWVudEl0ZXJhdG9yOjppc0VuZCh1bnNp
Z25lZCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICByZXR1cm4gcG9zaXRpb24gPj0gbV9mbG93Q29u
dGVudHMubGVuZ3RoKCk7CisgICAgY29uc3QgYXV0byYgc2VnbWVudCA9ICptX2N1cnJlbnRTZWdt
ZW50OworICAgIEFTU0VSVChzZWdtZW50LnN0YXJ0IDw9IHBvc2l0aW9uICYmIHBvc2l0aW9uIDwg
c2VnbWVudC5lbmQpOworICAgIHJldHVybiBtX3N0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBzZWdt
ZW50LnRleHRbcG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0XSA9PSAnXG4nOwogfQogCiB9CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggYjA0MjJmOTA2YzZiMDUzMzlhZjM4MThhMGM0MTVkMWNiOTYzOWI0OC4uODFjYzhiNDI2N2Vl
ZTE3ZTVkMmMwN2VkMWI1NDAzMzYxZjY1NDEzYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE1
LTAzLTE2ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxl
IGxpbmUgbGF5b3V0OiBTcGxpdCBmcmFnbWVudHMgb24gcmVuZGVyZXIgYm91bmRhcnkgb24gdGhl
IGZseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MjU3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZy
YWdtZW50IHNwbGl0dGluZyBhdCByZW5kZXJlcnMnIGJvdW5kYXJ5IGF0IHRoZSBlbmQgb2YgdGhl
IGxpbmUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgVGhpcyBwYXRjaCBlbnN1cmVzIHRo
YXQgVGV4dEZyYWdtZW50SXRlcmF0b3I6Om5leHRUZXh0RnJhZ21lbnQoKSBkb2VzIG5vdCBjb25j
YXRlbmF0ZQorICAgICAgICBmcmFnbWVudHMgYWNyb3NzIHJlbmRlcmVyIGJvdW5kYXJ5LgorCisg
ICAgICAgICogZmFzdC90ZXh0L3NpbXBsZS1saW5lLXdpdGgtbXVsdGlwbGUtcmVuZGVyZXJzLWV4
cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvdGV4dC9zaW1wbGUtbGluZS13aXRo
LW11bHRpcGxlLXJlbmRlcmVycy5odG1sOiBBZGRlZC4KKwogMjAxNS0wMy0xNyAgQW50dGkgS29p
dmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgRGlzayBjYWNoZSBzaG91bGQgc3Vw
cG9ydCBWYXJ5OiBDb29raWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9zaW1w
bGUtbGluZS13aXRoLW11bHRpcGxlLXJlbmRlcmVycy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC90ZXh0L3NpbXBsZS1saW5lLXdpdGgtbXVsdGlwbGUtcmVuZGVyZXJzLWV4cGVjdGVk
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGVkOTZlODEwYmY0ZWEyOGY5ZWJmNmE5MmIyNDZiZjA5ZjY1NTRk
NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9zaW1wbGUtbGluZS13
aXRoLW11bHRpcGxlLXJlbmRlcmVycy1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMzYgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5UZXN0IHRoYXQgc2VnbWVudHMg
YWNyb3NzIG11bHRpcGxlIHJlbmRlcmVycyB3b3JrIGZpbmUgd2l0aCBzaW1wbGUgbGluZSBsYXlv
dXQuPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGluamVjdFRl
eHROb2Rlcyhjb250YWluZXIsIHN0eWxlKQoreworCWNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSgiIAkiKSk7CisJY29udGFpbmVyLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKCIJIikpOworCWNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgiCVRoaXMgdGVzdHMgICAgICIpKTsKKwljb250YWluZXIuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAJICAgIikpOworCWNvbnRhaW5lci5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgid2hpdGVzcGFjZSAJCW92ZXJsYXBwaW5n
ICIpKTsKKwljb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIglt
dWx0aXBsZSAgICAgIikpOworCWNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgiCQkJCXJlbmRlcmVycy4iKSk7CisJY29udGFpbmVyLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKCJUaGlzIHRlc3RzIHdoZW4gbm9uLSIpKTsKKwljb250YWluZXIu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIndoaXRlc3BhY2UgY29uIikpOwor
CWNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidGVudCBvIikp
OworCWNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidmVybGEi
KSk7CisJY29udGFpbmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJwcyBt
dWx0aXBsZSByZW4iKSk7CisJY29udGFpbmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCJkZXJlcy4iKSk7CisJY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBzdHlsZTsKKwlk
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7Cit9CisKK2lmICh3aW5kb3cuaW50
ZXJuYWxzKQorCWludGVybmFscy5zZXR0aW5ncy5zZXRTaW1wbGVMaW5lTGF5b3V0RW5hYmxlZChm
YWxzZSkKK2luamVjdFRleHROb2Rlcyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7Citp
bmplY3RUZXh0Tm9kZXMoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksICJ3aWR0aDogMHB4
Iik7CitpbmplY3RUZXh0Tm9kZXMoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksICJ3aWR0
aDogMTBweCIpOworaW5qZWN0VGV4dE5vZGVzKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
LCAid2lkdGg6IDEwMHB4Iik7CitpbmplY3RUZXh0Tm9kZXMoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgicHJlIikpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L3RleHQvc2ltcGxlLWxpbmUtd2l0aC1tdWx0aXBsZS1yZW5kZXJlcnMuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9zaW1wbGUtbGluZS13aXRoLW11bHRpcGxlLXJlbmRl
cmVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4NTg4ZTMzMGEwMzYyZDVlZjMwYzllMWNlY2ZjMmEzMzhm
OGExNmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvc2ltcGxlLWxp
bmUtd2l0aC1tdWx0aXBsZS1yZW5kZXJlcnMuaHRtbApAQCAtMCwwICsxLDM0IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+VGVzdCB0aGF0IHNlZ21lbnRzIGFjcm9z
cyBtdWx0aXBsZSByZW5kZXJlcnMgd29yayBmaW5lIHdpdGggc2ltcGxlIGxpbmUgbGF5b3V0Ljwv
dGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBpbmplY3RUZXh0Tm9k
ZXMoY29udGFpbmVyLCBzdHlsZSkKK3sKKwljb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoIiAJIikpOworCWNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgiCSIpKTsKKwljb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoIglUaGlzIHRlc3RzICAgICAiKSk7CisJY29udGFpbmVyLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgCSAgICIpKTsKKwljb250YWluZXIuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIndoaXRlc3BhY2UgCQlvdmVybGFwcGluZyAiKSk7
CisJY29udGFpbmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIJbXVsdGlw
bGUgICAgICIpKTsKKwljb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoIgkJCQlyZW5kZXJlcnMuIikpOworCWNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgiVGhpcyB0ZXN0cyB3aGVuIG5vbi0iKSk7CisJY29udGFpbmVyLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ3aGl0ZXNwYWNlIGNvbiIpKTsKKwljb250
YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInRlbnQgbyIpKTsKKwlj
b250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInZlcmxhIikpOwor
CWNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgicHMgbXVsdGlw
bGUgcmVuIikpOworCWNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgiZGVyZXMuIikpOworCWNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7CisJZG9jdW1l
bnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpOworfQorCitpbmplY3RUZXh0Tm9kZXMoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOworaW5qZWN0VGV4dE5vZGVzKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpLCAid2lkdGg6IDBweCIpOworaW5qZWN0VGV4dE5vZGVzKGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCAid2lkdGg6IDEwcHgiKTsKK2luamVjdFRleHROb2Rl
cyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgIndpZHRoOiAxMDBweCIpOworaW5qZWN0
VGV4dE5vZGVzKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpKTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>