<?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>150354</bug_id>
          
          <creation_ts>2015-10-19 21:57:11 -0700</creation_ts>
          <short_desc>Use modern for-loops in WebCore/editing.</short_desc>
          <delta_ts>2015-10-25 23:30:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hunseop Jeong">hs85.jeong</reporter>
          <assigned_to name="Hunseop Jeong">hs85.jeong</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1134803</commentid>
    <comment_count>0</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-10-19 21:57:11 -0700</bug_when>
    <thetext>Refactor the for-loops using the ranged-for loops and auto keyword in WebCore/editing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134806</commentid>
    <comment_count>1</comment_count>
      <attachid>263550</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-10-19 22:07:15 -0700</bug_when>
    <thetext>Created attachment 263550
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134892</commentid>
    <comment_count>2</comment_count>
      <attachid>263550</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-20 09:04:07 -0700</bug_when>
    <thetext>Comment on attachment 263550
Patch

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

Patch is OK as is. I spotted some things we might want to come back and improve separately.

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:578
&gt;  static void copyMarkers(const Vector&lt;RenderedDocumentMarker*&gt;&amp; markerPointers, Vector&lt;RenderedDocumentMarker&gt;&amp; markers)

This should have a return value, not an out argument.

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:580
&gt; +    markers.reserveCapacity(markerPointers.size());

This should be using reserveInitialCapacity.

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:582
&gt; +        markers.append(*markerPointer);

This should be using uncheckedAppend.

&gt; Source/WebCore/editing/EditingStyle.cpp:103
&gt; +    for (auto editingProperty : editingProperties) {

I’d prefer either &quot;int&quot; or &quot;auto&amp;&quot; here, even though auto will work fine.

&gt; Source/WebCore/editing/mac/EditorMac.mm:517
&gt; +    if (!paths.size())

paths.isEmpty() would be better, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135592</commentid>
    <comment_count>3</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-10-21 23:47:50 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 263550 [details]
&gt; Patch
&gt; 

Thanks for the review.

I have a question about your comment.

&gt; &gt; Source/WebCore/editing/CompositeEditCommand.cpp:578
&gt; &gt;  static void copyMarkers(const Vector&lt;RenderedDocumentMarker*&gt;&amp; markerPointers, Vector&lt;RenderedDocumentMarker&gt;&amp; markers)
&gt; 
&gt; This should have a return value, not an out argument.
&gt; 

I don&apos;t understand here. Do I changed the function to have a return value?
Could you give me the detail explanation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136290</commentid>
    <comment_count>4</comment_count>
      <attachid>263550</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-24 15:25:19 -0700</bug_when>
    <thetext>Comment on attachment 263550
Patch

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

&gt;&gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:578
&gt;&gt;&gt;  static void copyMarkers(const Vector&lt;RenderedDocumentMarker*&gt;&amp; markerPointers, Vector&lt;RenderedDocumentMarker&gt;&amp; markers)
&gt;&gt; 
&gt;&gt; This should have a return value, not an out argument.
&gt; 
&gt; I don&apos;t understand here. Do I changed the function to have a return value?
&gt; Could you give me the detail explanation?

Yes, the new function should be:

    static Vector&lt;RenderedDocumentMarker&gt; copyMarkers(const Vector&lt;RenderedDocumentMarker*&gt;&amp; markerPointers)
    {
        ...
        return markers;
    }

And the call site below should be changed to:

    auto markers = copyMarkers(markerController.markersInRange(Range::create(document(), node, offset, node, offset + count).ptr(), DocumentMarker::AllMarkers()));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136472</commentid>
    <comment_count>5</comment_count>
      <attachid>264035</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-10-25 21:52:53 -0700</bug_when>
    <thetext>Created attachment 264035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136475</commentid>
    <comment_count>6</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-10-25 22:07:18 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 263550 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=263550&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:578
&gt; &gt;&gt;&gt;  static void copyMarkers(const Vector&lt;RenderedDocumentMarker*&gt;&amp; markerPointers, Vector&lt;RenderedDocumentMarker&gt;&amp; markers)
&gt; &gt;&gt; 
&gt; &gt;&gt; This should have a return value, not an out argument.
&gt; &gt; 
&gt; &gt; I don&apos;t understand here. Do I changed the function to have a return value?
&gt; &gt; Could you give me the detail explanation?
&gt; 
&gt; Yes, the new function should be:
&gt; 
&gt;     static Vector&lt;RenderedDocumentMarker&gt; copyMarkers(const
&gt; Vector&lt;RenderedDocumentMarker*&gt;&amp; markerPointers)
&gt;     {
&gt;         ...
&gt;         return markers;
&gt;     }
&gt; 
&gt; And the call site below should be changed to:
&gt; 
&gt;     auto markers =
&gt; copyMarkers(markerController.markersInRange(Range::create(document(), node,
&gt; offset, node, offset + count).ptr(), DocumentMarker::AllMarkers()));

Thanks for the guide.
I applied your comments.
Could you check the patch again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136487</commentid>
    <comment_count>7</comment_count>
      <attachid>264035</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-25 23:30:07 -0700</bug_when>
    <thetext>Comment on attachment 264035
Patch

Clearing flags on attachment: 264035

Committed r191553: &lt;http://trac.webkit.org/changeset/191553&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136488</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-25 23:30:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263550</attachid>
            <date>2015-10-19 22:07:15 -0700</date>
            <delta_ts>2015-10-25 21:52:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150354-20151020140632.patch</filename>
            <type>text/plain</type>
            <size>40564</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDE1LTEwLTE5ICBIdW5zZW9w
IEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJuIGZv
ci1sb29wcyBpbiBXZWJDb3JlL2VkaXRpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzNTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhh
dmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBw
bHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJp
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RW
aWV3UmVjdEZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6Om1hcmtDb3JyZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0
aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmR1bW15U3BhbkFuY2VzdG9y
Rm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6Y2xlYW51cFVu
c3R5bGVkQXBwbGVTdHlsZVNwYW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21t
YW5kOjpzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25JbmxpbmVT
dHlsZUFyb3VuZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6Ompv
aW5DaGlsZFRleHROb2Rlcyk6CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpyZWFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OmdldE5vZGVzSW5D
b21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVD
aGlsZHJlbkluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6
OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29weU1hcmtlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2Vydmlu
Z01hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0
ZUluc2lnbmlmaWNhbnRUZXh0KToKKyAgICAgICAgKiBlZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uTWFya2VyU3VwcGxpZXI6OmFkZE1hcmtl
cnNUb1RleHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkNvbW1hbmQ6OmNvbGxl
Y3REaWN0YXRpb25BbHRlcm5hdGl2ZXNJblJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRp
bmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0VkaXRpbmdQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmV4dHJhY3RDb25mbGljdGluZ0ltcGxpY2l0U3R5
bGVPZkF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjplbGVtZW50
SXNTdHlsZWRTcGFuT3JIVE1MRXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6Om1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OmRpZmZUZXh0RGVjb3JhdGlvbnMpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcik6CisgICAgICAgICogZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbW1hbmRNYXApOgorICAg
ICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWFya3VwQWNjdW11bGF0b3I6OnRvdGFsTGVuZ3RoKToKKyAgICAgICAgKiBlZGl0aW5nL01lcmdl
SWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lcmdlSWRl
bnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lcmdl
SWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1l
bnRGcmFnbWVudDo6cmVtb3ZlVW5yZW5kZXJlZE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZUludGVyY2hhbmdlTm9kZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtl
ZXBTdHlsZVNwYW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlSGVhZENvbnRlbnRz
KToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTcGVsbENoZWNrZXI6On5TcGVsbENoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxD
aGVja2VyOjpjbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjplbnF1ZXVl
UmVxdWVzdCk6CisgICAgICAgICogZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6OmV4ZWN1dGVBcHBseSk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGxpdEVsZW1lbnRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGlu
Zy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5n
SGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsUmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFu
ZDo6ZXhlY3V0ZUFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OldyYXBDb250ZW50c0luRHVtbXlT
cGFuQ29tbWFuZDo6ZG9VbmFwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3Vy
Y2VzKToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRGaWxlbmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyk6CisgICAgICAg
ICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGxldGVVUkxzKToK
KwogMjAxNS0xMC0xOSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgog
CiAgICAgICAgIEZvbnRDYXNjYWRlOjp0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgaXMgbm90IHByaXZ5
IHRvIGZvbnQtdmFyaWFudC0qIG5vciBmb250LWZlYXR1cmUtc2V0dGluZ3MKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gMTkxMjc2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgzLDkgKzI4Myw5IEBAIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHQKICAgICAgICAgcmV0dXJuOwog
CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5n
ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKTsKLSAgICBzaXplX3Qgc2l6
ZSA9IG1hcmtlclR5cGVzVG9BZGQuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdl
dCgpLCBtYXJrZXJUeXBlc1RvQWRkW2ldLCBtYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRl
cm5hdGl2ZVRleHQoYWx0ZXJuYXRpdmVUeXBlLCBtYXJrZXJUeXBlc1RvQWRkW2ldKSk7CisKKyAg
ICBmb3IgKGF1dG8mIG1hcmtlclR5cGUgOiBtYXJrZXJUeXBlc1RvQWRkKQorICAgICAgICBtYXJr
ZXJzLmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlLCBtYXJrZXJE
ZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoYWx0ZXJuYXRpdmVUeXBlLCBtYXJr
ZXJUeXBlKSk7CiB9CiAKIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRv
Y29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQpAQCAtNDM0LDkgKzQzNCw4IEBA
IEZsb2F0UmVjdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb28KICAgICBWZWN0b3I8Rmxv
YXRRdWFkPiB0ZXh0UXVhZHM7CiAgICAgcmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHRleHRRdWFk
cyk7CiAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdDsKLSAgICBzaXplX3Qgc2l6ZSA9IHRleHRR
dWFkcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAg
ICAgIGJvdW5kaW5nUmVjdC51bml0ZSh0ZXh0UXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CisgICAg
Zm9yIChhdXRvJiB0ZXh0UXVhZCA6IHRleHRRdWFkcykKKyAgICAgICAgYm91bmRpbmdSZWN0LnVu
aXRlKHRleHRRdWFkLmJvdW5kaW5nQm94KCkpOwogICAgIHJldHVybiB2aWV3LT5jb250ZW50c1Rv
Um9vdFZpZXcoSW50UmVjdChib3VuZGluZ1JlY3QpKTsKIH0gICAgICAgIAogCkBAIC01MzIsMTAg
KzUzMSw4IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1JldmUKIAogdm9p
ZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihQYXNzUmVmUHRyPFJh
bmdlPiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogewotICAg
IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXNUb0FkZCA9IG1h
cmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKTsKICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXImIG1hcmtlcnMgPSByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCku
bWFya2VycygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyVHlwZXNUb0FkZC5z
aXplKCk7ICsraSkgewotICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJU
eXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKKyAgICBmb3IgKGF1dG8mIG1hcmtlclR5cGUgOiBt
YXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpIHsKICAgICAgICAgaWYgKG1hcmtlclR5cGUg
PT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRN
YXJrZXI6OkF1dG9jb3JyZWN0ZWQpCiAgICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcihyZXBs
YWNlZFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlLCByZXBsYWNlZFN0cmluZyk7CiAgICAgICAgIGVs
c2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
CShyZXZpc2lvbiAxOTEyNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI4LDkgKzQyOCw4IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb24KICAgICAgICAgfQogICAgIH0KIAotICAgIHNp
emVfdCBzaXplID0gdW5zdHlsZWRTcGFucy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpCi0gICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4odW5z
dHlsZWRTcGFuc1tpXS5nZXQoKSk7CisgICAgZm9yIChhdXRvJiB1bnN0eWxlZFNwYW4gOiB1bnN0
eWxlZFNwYW5zKQorICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHVuc3R5bGVk
U3Bhbi5nZXQoKSk7CiB9CiAKIHN0YXRpYyBDb250YWluZXJOb2RlKiBkdW1teVNwYW5BbmNlc3Rv
ckZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkKQEAgLTQ1Niw4ICs0NTUsOSBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjpjbGVhbnVwVW5zdHlsZWRBCiAgICAgICAgIGlmIChpc1NwYW5XaXRob3V0
QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oJmNoaWxkKSkKICAgICAgICAgICAgIHRvUmVt
b3ZlLmFwcGVuZCgmY2hpbGQpOwogICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dG9SZW1vdmUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4odG9SZW1vdmVbaV0pOworCisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdG9SZW1vdmUpCisg
ICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CiB9CiAKIEhUTUxF
bGVtZW50KiBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGko
Tm9kZSogbm9kZSwgYm9vbCBiZWZvcmUsIFdyaXRpbmdEaXJlY3Rpb24gYWxsb3dlZERpcmVjdGlv
bikKQEAgLTgzNCwxMSArODM0LDEwIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5s
aW5lU3R5bGUKIAogICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJ1bnMuc2l6ZSgpOyBpKysp
Ci0gICAgICAgIHJ1bnNbaV0uY2hhbmdlID0gU3R5bGVDaGFuZ2Uoc3R5bGUsIHJ1bnNbaV0ucG9z
aXRpb25Gb3JTdHlsZUNvbXB1dGF0aW9uKTsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IHJ1bnMpCisg
ICAgICAgIHJ1bi5jaGFuZ2UgPSBTdHlsZUNoYW5nZShzdHlsZSwgcnVuLnBvc2l0aW9uRm9yU3R5
bGVDb21wdXRhdGlvbik7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJ1bnMuc2l6ZSgp
OyBpKyspIHsKLSAgICAgICAgSW5saW5lUnVuVG9BcHBseVN0eWxlJiBydW4gPSBydW5zW2ldOwor
ICAgIGZvciAoYXV0byYgcnVuIDogcnVucykgewogICAgICAgICBpZiAocnVuLmR1bW15RWxlbWVu
dCkKICAgICAgICAgICAgIHJlbW92ZU5vZGUocnVuLmR1bW15RWxlbWVudCk7CiAgICAgICAgIGlm
IChydW4uc3RhcnRBbmRFbmRBcmVTdGlsbEluRG9jdW1lbnQoKSkKQEAgLTk1OCw4ICs5NTcsOCBA
QCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5CiAgICAgICAgIGV4dHJh
Y3RlZFN0eWxlLCBhdHRyaWJ1dGVzLCBtb2RlID09IFJlbW92ZUFsd2F5cyA/IEVkaXRpbmdTdHls
ZTo6RXh0cmFjdE1hdGNoaW5nU3R5bGUgOiBFZGl0aW5nU3R5bGU6OkRvTm90RXh0cmFjdE1hdGNo
aW5nU3R5bGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGF0dHJpYnV0ZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1
dGUoZWxlbWVudCwgYXR0cmlidXRlc1tpXSk7CisgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBh
dHRyaWJ1dGVzKQorICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0
ZSk7CiAKICAgICBpZiAoaXNFbXB0eUZvbnRUYWcoZWxlbWVudCkgfHwgaXNTcGFuV2l0aG91dEF0
dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFuKGVsZW1lbnQpKQogICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwpAQCAtMTA3NSw4ICsxMDc0LDggQEAgdm9pZCBB
cHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25JbmxpbmVTdAogICAgICAgICAgICAgaWYgKCFjaGls
ZC5wYXJlbnROb2RlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBp
ZiAoIWNoaWxkLmNvbnRhaW5zKHRhcmdldE5vZGUpICYmIGVsZW1lbnRzVG9QdXNoRG93bi5zaXpl
KCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVsZW1lbnRzVG9Q
dXNoRG93bi5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8RWxlbWVu
dD4gd3JhcHBlciA9IGVsZW1lbnRzVG9QdXNoRG93bltpXS0+Y2xvbmVFbGVtZW50V2l0aG91dENo
aWxkcmVuKGRvY3VtZW50KCkpOworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6
IGVsZW1lbnRzVG9QdXNoRG93bikgeworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8RWxlbWVu
dD4gd3JhcHBlciA9IGVsZW1lbnQtPmNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbihkb2N1bWVu
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci0+cmVtb3ZlQXR0cmlidXRlKHN0eWxl
QXR0cik7CiAgICAgICAgICAgICAgICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQo
JmNoaWxkLCAmY2hpbGQsIHdyYXBwZXIpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE1NDEsOCAr
MTU0MCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRleHROb2QKICAgICBm
b3IgKFRleHQqIHRleHROb2RlID0gVGV4dE5vZGVUcmF2ZXJzYWw6OmZpcnN0Q2hpbGQoKm5vZGUp
OyB0ZXh0Tm9kZTsgdGV4dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKnRl
eHROb2RlKSkKICAgICAgICAgdGV4dE5vZGVzLmFwcGVuZCh0ZXh0Tm9kZSk7CiAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHRleHROb2Rlcy5zaXplKCk7ICsraSkgewotICAgICAgICBUZXh0
KiBjaGlsZFRleHQgPSB0ZXh0Tm9kZXNbaV0uZ2V0KCk7CisgICAgZm9yIChhdXRvJiBjaGlsZFRl
eHQgOiB0ZXh0Tm9kZXMpIHsKICAgICAgICAgTm9kZSogbmV4dCA9IGNoaWxkVGV4dC0+bmV4dFNp
YmxpbmcoKTsKICAgICAgICAgaWYgKCFpczxUZXh0PihuZXh0KSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29t
bWFuZC5jcHAJKHJldmlzaW9uIDE5MTI3NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsOSArMTMyLDggQEAg
dm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpyZWFwcGx5KCkKICAgICAvLyBpZiBvbmUgaXMg
bmVjZXNzYXJ5IChsaWtlIGZvciB0aGUgY3JlYXRpb24gb2YgVmlzaWJsZVBvc2l0aW9ucykuCiAg
ICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAK
LSAgICBzaXplX3Qgc2l6ZSA9IG1fY29tbWFuZHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpICE9IHNpemU7ICsraSkKLSAgICAgICAgbV9jb21tYW5kc1tpXS0+ZG9SZWFwcGx5KCk7
CisgICAgZm9yIChhdXRvJiBjb21tYW5kIDogbV9jb21tYW5kcykKKyAgICAgICAgY29tbWFuZC0+
ZG9SZWFwcGx5KCk7CiAKICAgICBmcmFtZS0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZyh0aGlz
KTsKIH0KQEAgLTE1OSw5ICsxNTgsOCBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OnNl
dEVuZGluZ1NlCiAjaWZuZGVmIE5ERUJVRwogdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpn
ZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYgbm9kZXMpCiB7Ci0gICAgc2l6ZV90IHNp
emUgPSBtX2NvbW1hbmRzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKLSAgICAgICAgbV9jb21tYW5kc1tpXS0+Z2V0Tm9kZXNJbkNvbW1hbmQobm9kZXMpOwor
ICAgIGZvciAoYXV0byYgY29tbWFuZCA6IG1fY29tbWFuZHMpCisgICAgICAgIGNvbW1hbmQtPmdl
dE5vZGVzSW5Db21tYW5kKG5vZGVzKTsKIH0KICNlbmRpZgogCkBAIC00MDYsOSArNDA0LDggQEAg
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlQ2hpbGRyZQogICAgIGZvciAodW5zaWdu
ZWQgaSA9IGZyb207IGNoaWxkICYmIGkgPCB0bzsgaSsrLCBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKQogICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwogCi0gICAgc2l6ZV90IHNp
emUgPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgIHJlbW92ZU5vZGUoY2hpbGRyZW5baV0ucmVsZWFzZSgpKTsKKyAgICBmb3Ig
KGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCisgICAgICAgIHJlbW92ZU5vZGUoY2hpbGQucmVsZWFz
ZSgpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZShQYXNzUmVm
UHRyPE5vZGU+IG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3Vs
ZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQpAQCAtNTgwLDEwICs1NzcsOSBAQCBQb3Np
dGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVNlCiAKIHN0YXRpYyB2b2lkIGNvcHlN
YXJrZXJzKGNvbnN0IFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4mIG1hcmtlclBvaW50
ZXJzLCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMpCiB7Ci0gICAgc2l6
ZV90IGFycmF5U2l6ZSA9IG1hcmtlclBvaW50ZXJzLnNpemUoKTsKLSAgICBtYXJrZXJzLnJlc2Vy
dmVDYXBhY2l0eShhcnJheVNpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlT
aXplOyArK2kpCi0gICAgICAgIG1hcmtlcnMuYXBwZW5kKCptYXJrZXJQb2ludGVyc1tpXSk7Cisg
ICAgbWFya2Vycy5yZXNlcnZlQ2FwYWNpdHkobWFya2VyUG9pbnRlcnMuc2l6ZSgpKTsKKyAgICBm
b3IgKGF1dG8mIG1hcmtlclBvaW50ZXIgOiBtYXJrZXJQb2ludGVycykKKyAgICAgICAgbWFya2Vy
cy5hcHBlbmQoKm1hcmtlclBvaW50ZXIpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpyZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKFBhc3NSZWZQdHI8VGV4dD4gcHJw
Tm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudFRleHQpCkBAIC04ODgsOCArODg0LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6ZGVsZXRlSW5zaWduaQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7ICsraSkgewotICAgICAgICBUZXh0KiB0ZXh0
Tm9kZSA9IG5vZGVzW2ldLmdldCgpOworICAgIGZvciAoYXV0byYgdGV4dE5vZGUgOiBub2Rlcykg
ewogICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSB0ZXh0Tm9kZSA9PSBzdGFydC5kZXByZWNhdGVk
Tm9kZSgpID8gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IDA7CiAgICAgICAgIGlu
dCBlbmRPZmZzZXQgPSB0ZXh0Tm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSA/IGVuZC5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpIDogc3RhdGljX2Nhc3Q8aW50Pih0ZXh0Tm9kZS0+bGVuZ3Ro
KCkpOwogICAgICAgICBkZWxldGVJbnNpZ25pZmljYW50VGV4dCh0ZXh0Tm9kZSwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9u
Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE5MTI3NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RGljdGF0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRNYXJrZXJzVG9UZXh0Tm9kZShUZXh0KiB0ZXh0Tm9k
ZSwgdW5zaWduZWQgb2Zmc2V0T2ZJbnNlcnRpb24sIGNvbnN0IFN0cmluZyYgdGV4dFRvQmVJbnNl
cnRlZCkKICAgICB7CiAgICAgICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29u
dHJvbGxlciA9IHRleHROb2RlLT5kb2N1bWVudCgpLm1hcmtlcnMoKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2FsdGVybmF0aXZlcy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgY29uc3QgRGljdGF0aW9uQWx0ZXJuYXRpdmUmIGFsdGVybmF0aXZlID0gbV9hbHRlcm5hdGl2
ZXNbaV07CisgICAgICAgIGZvciAoYXV0byYgYWx0ZXJuYXRpdmUgOiBtX2FsdGVybmF0aXZlcykg
ewogICAgICAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXJUb05vZGUodGV4dE5vZGUs
IGFsdGVybmF0aXZlLnJhbmdlU3RhcnQgKyBvZmZzZXRPZkluc2VydGlvbiwgYWx0ZXJuYXRpdmUu
cmFuZ2VMZW5ndGgsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMsIERpY3Rh
dGlvbk1hcmtlckRldGFpbHM6OmNyZWF0ZSh0ZXh0VG9CZUluc2VydGVkLnN1YnN0cmluZyhhbHRl
cm5hdGl2ZS5yYW5nZVN0YXJ0LCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCksIGFsdGVybmF0aXZl
LmRpY3RhdGlvbkNvbnRleHQpKTsKICAgICAgICAgICAgIG1hcmtlckNvbnRyb2xsZXIuYWRkTWFy
a2VyVG9Ob2RlKHRleHROb2RlLCBhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0ICsgb2Zmc2V0T2ZJbnNl
cnRpb24sIGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVj
a2luZ0V4ZW1wdGlvbik7CiAgICAgICAgIH0KQEAgLTEyOSw4ICsxMjgsNyBAQCB2b2lkIERpY3Rh
dGlvbkNvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlCiAKIHZvaWQgRGljdGF0aW9uQ29tbWFuZDo6
Y29sbGVjdERpY3RhdGlvbkFsdGVybmF0aXZlc0luUmFuZ2Uoc2l6ZV90IHJhbmdlU3RhcnQsIHNp
emVfdCByYW5nZUxlbmd0aCwgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiYgYWx0ZXJuYXRp
dmVzKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbHRlcm5hdGl2ZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgY29uc3QgRGljdGF0aW9uQWx0ZXJuYXRpdmUmIGFsdGVybmF0aXZl
ID0gbV9hbHRlcm5hdGl2ZXNbaV07CisgICAgZm9yIChhdXRvJiBhbHRlcm5hdGl2ZSA6IG1fYWx0
ZXJuYXRpdmVzKSB7CiAgICAgICAgIGlmIChhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0ID49IHJhbmdl
U3RhcnQgJiYgKGFsdGVybmF0aXZlLnJhbmdlU3RhcnQgKyBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0
aCkgPD0gcmFuZ2VTdGFydCArIHJhbmdlTGVuZ3RoKQogICAgICAgICAgICAgYWx0ZXJuYXRpdmVz
LmFwcGVuZChEaWN0YXRpb25BbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0IC0gcmFu
Z2VTdGFydCwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgsIGFsdGVybmF0aXZlLmRpY3RhdGlvbkNv
bnRleHQpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCShyZXZpc2lvbiAxOTEyNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdT
dHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAsOCBAQCBzdGF0aWMgUGFzc1Jl
ZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0VkaXRp
bmdQcm9wZXJ0eShpbnQgaWQpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJS
QVlfTEVOR1RIKGVkaXRpbmdQcm9wZXJ0aWVzKTsgKytpKSB7Ci0gICAgICAgIGlmIChlZGl0aW5n
UHJvcGVydGllc1tpXSA9PSBpZCkKKyAgICBmb3IgKGF1dG8gZWRpdGluZ1Byb3BlcnR5IDogZWRp
dGluZ1Byb3BlcnRpZXMpIHsKKyAgICAgICAgaWYgKGVkaXRpbmdQcm9wZXJ0eSA9PSBpZCkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC05Nzks
MTEgKzk3OSw4IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjpleHRyYWN0Q29uZmxpY3RpbmdJbXAKICAg
ICBpZiAoIW1fbXV0YWJsZVN0eWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25z
dCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50Pj4mIEhUTUxB
dHRyaWJ1dGVFcXVpdmFsZW50cyA9IGh0bWxBdHRyaWJ1dGVFcXVpdmFsZW50cygpOwogICAgIGJv
b2wgcmVtb3ZlZCA9IGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSFRNTEF0dHJp
YnV0ZUVxdWl2YWxlbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEhUTUxBdHRyaWJ1
dGVFcXVpdmFsZW50KiBlcXVpdmFsZW50ID0gSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnRzW2ldLmdl
dCgpOwotCisgICAgZm9yIChhdXRvJiBlcXVpdmFsZW50IDogaHRtbEF0dHJpYnV0ZUVxdWl2YWxl
bnRzKCkpIHsKICAgICAgICAgLy8gdW5pY29kZS1iaWRpIGFuZCBkaXJlY3Rpb24gYXJlIHB1c2hl
ZCBkb3duIHNlcGFyYXRlbHkgc28gZG9uJ3QgcHVzaCBkb3duIHdpdGggb3RoZXIgc3R5bGVzLgog
ICAgICAgICBpZiAoc2hvdWxkUHJlc2VydmVXcml0aW5nRGlyZWN0aW9uID09IFByZXNlcnZlV3Jp
dGluZ0RpcmVjdGlvbiAmJiBlcXVpdmFsZW50LT5hdHRyaWJ1dGVOYW1lKCkgPT0gSFRNTE5hbWVz
OjpkaXJBdHRyKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMDMzLDEwICsxMDMwLDggQEAg
Ym9vbCBFZGl0aW5nU3R5bGU6OmVsZW1lbnRJc1N0eWxlZFNwYW5PcgogICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3BhblRhZykpCiAgICAgICAgIGVsZW1lbnRJc1NwYW5P
ckVsZW1lbnRFcXVpdmFsZW50ID0gdHJ1ZTsKICAgICBlbHNlIHsKLSAgICAgICAgY29uc3QgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxIVE1MRWxlbWVudEVxdWl2YWxlbnQ+PiYgSFRNTEVsZW1lbnRF
cXVpdmFsZW50cyA9IGh0bWxFbGVtZW50RXF1aXZhbGVudHMoKTsKLSAgICAgICAgc2l6ZV90IGk7
Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBIVE1MRWxlbWVudEVxdWl2YWxlbnRzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAoSFRNTEVsZW1lbnRFcXVpdmFsZW50c1tpXS0+bWF0Y2hl
cygqZWxlbWVudCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBlcXVpdmFsZW50IDogaHRtbEVsZW1l
bnRFcXVpdmFsZW50cygpKSB7CisgICAgICAgICAgICBpZiAoZXF1aXZhbGVudC0+bWF0Y2hlcygq
ZWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICBlbGVtZW50SXNTcGFuT3JFbGVtZW50RXF1aXZh
bGVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0x
MDQ3LDkgKzEwNDIsOCBAQCBib29sIEVkaXRpbmdTdHlsZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9y
CiAgICAgICAgIHJldHVybiBlbGVtZW50SXNTcGFuT3JFbGVtZW50RXF1aXZhbGVudDsgLy8gc3Bh
biwgYiwgZXRjLi4uIHdpdGhvdXQgYW55IGF0dHJpYnV0ZXMKIAogICAgIHVuc2lnbmVkIG1hdGNo
ZWRBdHRyaWJ1dGVzID0gMDsKLSAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEhUTUxB
dHRyaWJ1dGVFcXVpdmFsZW50Pj4mIEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50cyA9IGh0bWxBdHRy
aWJ1dGVFcXVpdmFsZW50cygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSFRNTEF0dHJp
YnV0ZUVxdWl2YWxlbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChIVE1MQXR0cmlidXRl
RXF1aXZhbGVudHNbaV0tPm1hdGNoZXMoKmVsZW1lbnQpICYmIEhUTUxBdHRyaWJ1dGVFcXVpdmFs
ZW50c1tpXS0+YXR0cmlidXRlTmFtZSgpICE9IEhUTUxOYW1lczo6ZGlyQXR0cikKKyAgICBmb3Ig
KGF1dG8mIGVxdWl2YWxlbnQgOiBodG1sQXR0cmlidXRlRXF1aXZhbGVudHMoKSkgeworICAgICAg
ICBpZiAoZXF1aXZhbGVudC0+bWF0Y2hlcygqZWxlbWVudCkgJiYgZXF1aXZhbGVudC0+YXR0cmli
dXRlTmFtZSgpICE9IEhUTUxOYW1lczo6ZGlyQXR0cikKICAgICAgICAgICAgIG1hdGNoZWRBdHRy
aWJ1dGVzKys7CiAgICAgfQogCkBAIC0xMTc5LDE4ICsxMTczLDE2IEBAIHZvaWQgRWRpdGluZ1N0
eWxlOjptZXJnZUlubGluZUFuZEltcGxpY2kKICAgICBzdHlsZUZyb21SdWxlcy0+bV9tdXRhYmxl
U3R5bGUgPSBleHRyYWN0RWRpdGluZ1Byb3BlcnRpZXMoc3R5bGVGcm9tUnVsZXMtPm1fbXV0YWJs
ZVN0eWxlLmdldCgpLCBwcm9wZXJ0aWVzVG9JbmNsdWRlKTsKICAgICBtZXJnZVN0eWxlKHN0eWxl
RnJvbVJ1bGVzLT5tX211dGFibGVTdHlsZS5nZXQoKSwgbW9kZSk7CiAKLSAgICBjb25zdCBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEhUTUxFbGVtZW50RXF1aXZhbGVudD4+JiBlbGVtZW50RXF1aXZh
bGVudHMgPSBodG1sRWxlbWVudEVxdWl2YWxlbnRzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBlbGVtZW50RXF1aXZhbGVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGVsZW1l
bnRNYXRjaGVzQW5kUHJvcGVydHlJc05vdEluSW5saW5lU3R5bGVEZWNsKGVsZW1lbnRFcXVpdmFs
ZW50c1tpXS5nZXQoKSwgZWxlbWVudCwgbW9kZSwgKnRoaXMpKQotICAgICAgICAgICAgZWxlbWVu
dEVxdWl2YWxlbnRzW2ldLT5hZGRUb1N0eWxlKGVsZW1lbnQsIHRoaXMpOworICAgIGZvciAoYXV0
byYgZXF1aXZhbGVudCA6IGh0bWxFbGVtZW50RXF1aXZhbGVudHMoKSkgeworICAgICAgICBpZiAo
ZWxlbWVudE1hdGNoZXNBbmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2woZXF1aXZhbGVu
dC5nZXQoKSwgZWxlbWVudCwgbW9kZSwgKnRoaXMpKQorICAgICAgICAgICAgZXF1aXZhbGVudC0+
YWRkVG9TdHlsZShlbGVtZW50LCB0aGlzKTsKICAgICB9CiAKLSAgICBjb25zdCBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50Pj4mIGF0dHJpYnV0ZUVxdWl2YWxl
bnRzID0gaHRtbEF0dHJpYnV0ZUVxdWl2YWxlbnRzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhdHRyaWJ1dGVFcXVpdmFsZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoYXR0
cmlidXRlRXF1aXZhbGVudHNbaV0tPmF0dHJpYnV0ZU5hbWUoKSA9PSBIVE1MTmFtZXM6OmRpckF0
dHIpCisgICAgZm9yIChhdXRvJiBlcXVpdmFsZW50IDogaHRtbEF0dHJpYnV0ZUVxdWl2YWxlbnRz
KCkpIHsKKyAgICAgICAgaWYgKGVxdWl2YWxlbnQtPmF0dHJpYnV0ZU5hbWUoKSA9PSBIVE1MTmFt
ZXM6OmRpckF0dHIpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gV2UgZG9uJ3Qgd2FudCB0byBp
bmNsdWRlIGRpcmVjdGlvbmFsaXR5Ci0gICAgICAgIGlmIChlbGVtZW50TWF0Y2hlc0FuZFByb3Bl
cnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChhdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS5nZXQoKSwg
ZWxlbWVudCwgbW9kZSwgKnRoaXMpKQotICAgICAgICAgICAgYXR0cmlidXRlRXF1aXZhbGVudHNb
aV0tPmFkZFRvU3R5bGUoZWxlbWVudCwgdGhpcyk7CisgICAgICAgIGlmIChlbGVtZW50TWF0Y2hl
c0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChlcXVpdmFsZW50LmdldCgpLCBlbGVt
ZW50LCBtb2RlLCAqdGhpcykpCisgICAgICAgICAgICBlcXVpdmFsZW50LT5hZGRUb1N0eWxlKGVs
ZW1lbnQsIHRoaXMpOwogICAgIH0KIH0KIApAQCAtMTI3NywxMCArMTI2OSw5IEBAIHZvaWQgRWRp
dGluZ1N0eWxlOjptZXJnZVN0eWxlKGNvbnN0IFN0eWwKIHN0YXRpYyBQYXNzUmVmUHRyPE11dGFi
bGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUpCiB7CiAgICAgUmVmUHRyPE11dGFi
bGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRl
KCk7Ci0gICAgYXV0byBtYXRjaGVkUnVsZXMgPSBlbGVtZW50LT5zdHlsZVJlc29sdmVyKCkuc3R5
bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcnVsZXNUb0luY2x1ZGUpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUnVsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KG1hdGNoZWRSdWxlc1tpXS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAgIHN0eWxlLT5tZXJn
ZUFuZE92ZXJyaWRlT25Db25mbGljdChzdGF0aWNfcG9pbnRlcl9jYXN0PFN0eWxlUnVsZT4obWF0
Y2hlZFJ1bGVzW2ldKS0+cHJvcGVydGllcygpKTsKKyAgICBmb3IgKGF1dG8mIG1hdGNoZWRSdWxl
IDogZWxlbWVudC0+c3R5bGVSZXNvbHZlcigpLnN0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQs
IHJ1bGVzVG9JbmNsdWRlKSkgeworICAgICAgICBpZiAobWF0Y2hlZFJ1bGUtPmlzU3R5bGVSdWxl
KCkpCisgICAgICAgICAgICBzdHlsZS0+bWVyZ2VBbmRPdmVycmlkZU9uQ29uZmxpY3Qoc3RhdGlj
X3BvaW50ZXJfY2FzdDxTdHlsZVJ1bGU+KG1hdGNoZWRSdWxlKS0+cHJvcGVydGllcygpKTsKICAg
ICB9CiAgICAgCiAgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKQEAgLTE3MzksMTAgKzE3MzAs
OSBAQCBzdGF0aWMgdm9pZCBkaWZmVGV4dERlY29yYXRpb25zKE11dGFibGVTCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG5ld1RleHREZWNvcmF0aW9uID0gZG93
bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdGV4dERlY29yYXRpb24pLmNvcHkoKTsKLSAgICBDU1NWYWx1
ZUxpc3QmIHZhbHVlc0luUmVmVGV4dERlY29yYXRpb24gPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+
KCpyZWZUZXh0RGVjb3JhdGlvbik7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVl
c0luUmVmVGV4dERlY29yYXRpb24ubGVuZ3RoKCk7ICsraSkKLSAgICAgICAgbmV3VGV4dERlY29y
YXRpb24tPnJlbW92ZUFsbCh2YWx1ZXNJblJlZlRleHREZWNvcmF0aW9uLml0ZW0oaSkpOworICAg
IGZvciAoYXV0byYgdmFsdWUgOiAgZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqcmVmVGV4dERlY29y
YXRpb24pKQorICAgICAgICBuZXdUZXh0RGVjb3JhdGlvbi0+cmVtb3ZlQWxsKCZ2YWx1ZS5nZXQo
KSk7CiAKICAgICBzZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KHN0eWxlLCBuZXdUZXh0RGVjb3Jh
dGlvbi5nZXQoKSwgcHJvcGVydElEKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAJKHJldmlzaW9uIDE5MTI3NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgyMCwxMCArMTgyMCw5IEBAIHZvaWQgRWRpdG9yOjpzZXRD
b21wb3NpdGlvbihjb25zdCBTdHJpbmcKICAgICAgICAgICAgIG1fY29tcG9zaXRpb25TdGFydCA9
IGJhc2VPZmZzZXQ7CiAgICAgICAgICAgICBtX2NvbXBvc2l0aW9uRW5kID0gZXh0ZW50T2Zmc2V0
OwogICAgICAgICAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMgPSB1bmRlcmxpbmVz
OwotICAgICAgICAgICAgc2l6ZV90IG51bVVuZGVybGluZXMgPSBtX2N1c3RvbUNvbXBvc2l0aW9u
VW5kZXJsaW5lcy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bVVuZGVybGluZXM7ICsraSkgewotICAgICAgICAgICAgICAgIG1fY3VzdG9tQ29tcG9zaXRpb25V
bmRlcmxpbmVzW2ldLnN0YXJ0T2Zmc2V0ICs9IGJhc2VPZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
bV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXNbaV0uZW5kT2Zmc2V0ICs9IGJhc2VPZmZzZXQ7
CisgICAgICAgICAgICBmb3IgKGF1dG8mIHVuZGVybGluZSA6IG1fY3VzdG9tQ29tcG9zaXRpb25V
bmRlcmxpbmVzKSB7CisgICAgICAgICAgICAgICAgdW5kZXJsaW5lLnN0YXJ0T2Zmc2V0ICs9IGJh
c2VPZmZzZXQ7CisgICAgICAgICAgICAgICAgdW5kZXJsaW5lLmVuZE9mZnNldCArPSBiYXNlT2Zm
c2V0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGJhc2VOb2RlLT5yZW5kZXJlcigp
KQogICAgICAgICAgICAgICAgIGJhc2VOb2RlLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7CkBAIC0y
NDk2LDkgKzI0OTUsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoUGFzc1JlZlB0
CiAgICAgICAgICAgICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50
KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6U3BlbGxpbmcsIHJlcGxhY2VtZW50KTsKICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRN
YXJrR3JhbW1hciAmJiByZXN1bHRUeXBlID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIHBh
cmFncmFwaC5jaGVja2luZ1JhbmdlQ292ZXJzKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgp
KSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlv
biA+PSAwKTsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZGV0YWls
cyA9IHJlc3VsdHNbaV0uZGV0YWlsczsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCBkZXRhaWxzLnNpemUoKTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgR3JhbW1h
ckRldGFpbCYgZGV0YWlsID0gZGV0YWlsc1tqXTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgZGV0
YWlsIDogcmVzdWx0c1tpXS5kZXRhaWxzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFp
bC5sZW5ndGggPiAwICYmIGRldGFpbC5sb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgICAgICBp
ZiAocGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMocmVzdWx0TG9jYXRpb24gKyBkZXRhaWwu
bG9jYXRpb24sIGRldGFpbC5sZW5ndGgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxS
YW5nZT4gYmFkR3JhbW1hclJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9u
ICsgZGV0YWlsLmxvY2F0aW9uLCBkZXRhaWwubGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gMTkxMjc2KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0Nyw5
ICsxNjQ3LDkgQEAgc3RhdGljIGNvbnN0IENvbW1hbmRNYXAmIGNyZWF0ZUNvbW1hbmRNYQogCiAg
ICAgQ29tbWFuZE1hcCYgY29tbWFuZE1hcCA9ICpuZXcgQ29tbWFuZE1hcDsKIAotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7ICsraSkgewotICAg
ICAgICBBU1NFUlQoIWNvbW1hbmRNYXAuZ2V0KGNvbW1hbmRzW2ldLm5hbWUpKTsKLSAgICAgICAg
Y29tbWFuZE1hcC5zZXQoY29tbWFuZHNbaV0ubmFtZSwgJmNvbW1hbmRzW2ldLmNvbW1hbmQpOwor
ICAgIGZvciAoYXV0byYgY29tbWFuZCA6IGNvbW1hbmRzKSB7CisgICAgICAgIEFTU0VSVCghY29t
bWFuZE1hcC5nZXQoY29tbWFuZC5uYW1lKSk7CisgICAgICAgIGNvbW1hbmRNYXAuc2V0KGNvbW1h
bmQubmFtZSwgJmNvbW1hbmQuY29tbWFuZCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNvbW1hbmRN
YXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNw
cAkocmV2aXNpb24gMTkxMjc2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1
bXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw4ICsyMDYsOCBAQCB2b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcoY29uCiBzaXplX3QgTWFya3VwQWNjdW11bGF0b3I6
OnRvdGFsTGVuZ3RoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdHJpbmdzKQogewogICAgIHNpemVf
dCBsZW5ndGggPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyaW5ncy5zaXplKCk7
ICsraSkKLSAgICAgICAgbGVuZ3RoICs9IHN0cmluZ3NbaV0ubGVuZ3RoKCk7CisgICAgZm9yIChh
dXRvJiBzdHJpbmcgOiBzdHJpbmdzKQorICAgICAgICBsZW5ndGggKz0gc3RyaW5nLmxlbmd0aCgp
OwogICAgIHJldHVybiBsZW5ndGg7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3BwCShyZXZpc2lv
biAxOTEyNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVu
dHNDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsOSArNTEsOCBAQCB2b2lkIE1lcmdl
SWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb0FwCiAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG1f
ZWxlbWVudDEtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpCiAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgqY2hpbGQpOwogCi0gICAgc2l6ZV90IHNpemUg
PSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
Ci0gICAgICAgIG1fZWxlbWVudDItPmluc2VydEJlZm9yZShXVEY6Om1vdmUoY2hpbGRyZW5baV0p
LCBtX2F0Q2hpbGQuZ2V0KCksIElHTk9SRV9FWENFUFRJT04pOworICAgIGZvciAoYXV0byYgY2hp
bGQgOiBjaGlsZHJlbikKKyAgICAgICAgbV9lbGVtZW50Mi0+aW5zZXJ0QmVmb3JlKFdURjo6bW92
ZShjaGlsZCksIG1fYXRDaGlsZC5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAKICAgICBtX2Vs
ZW1lbnQxLT5yZW1vdmUoSUdOT1JFX0VYQ0VQVElPTik7CiB9CkBAIC03OSw5ICs3OCw4IEBAIHZv
aWQgTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6OmRvVW4KICAgICBmb3IgKE5vZGUqIGNo
aWxkID0gbV9lbGVtZW50Mi0+Zmlyc3RDaGlsZCgpOyBjaGlsZCAmJiBjaGlsZCAhPSBhdENoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZHJlbi5hcHBlbmQo
KmNoaWxkKTsKIAotICAgIHNpemVfdCBzaXplID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBtX2VsZW1lbnQxLT5hcHBlbmRD
aGlsZChXVEY6Om1vdmUoY2hpbGRyZW5baV0pLCBlYyk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6
IGNoaWxkcmVuKQorICAgICAgICBtX2VsZW1lbnQxLT5hcHBlbmRDaGlsZChXVEY6Om1vdmUoY2hp
bGQpLCBlYyk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTkxMjc2
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4Niw5ICsyODYsOCBAQCB2b2lkIFJlcGxhY2VtZW50RnJhZ21l
bnQ6OnJlbW92ZVVucmVuZGVyCiAgICAgICAgICAgICB1bnJlbmRlcmVkLmFwcGVuZChub2RlKTsK
ICAgICB9CiAKLSAgICBzaXplX3QgbiA9IHVucmVuZGVyZWQuc2l6ZSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbjsgKytpKQotICAgICAgICByZW1vdmVOb2RlKHVucmVuZGVyZWRbaV0p
OworICAgIGZvciAoYXV0byYgbm9kZSA6IHVucmVuZGVyZWQpCisgICAgICAgIHJlbW92ZU5vZGUo
bm9kZSk7CiB9CiAKIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlSW50ZXJjaGFuZ2VO
b2RlcyhOb2RlKiBjb250YWluZXIpCkBAIC01MDIsOCArNTAxLDggQEAgdm9pZCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3
SW5saW5lU3R5bGUtPmV4dHJhY3RDb25mbGljdGluZ0ltcGxpY2l0U3R5bGVPZkF0dHJpYnV0ZXMo
Jmh0bWxFbGVtZW50LCBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbiwgMCwg
YXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgRWRpdGluZ1N0eWxlOjpEb05vdEV4dHJh
Y3RNYXRjaGluZ1N0eWxlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBlLmcuIDxmb250IHNp
emU9IjMiIHN0eWxlPSJmb250LXNpemU6IDIwcHg7Ij4gaXMgY29udmVydGVkIHRvIDxmb250IHN0
eWxlPSJmb250LXNpemU6IDIwcHg7Ij4KLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhdHRyaWJ1dGVzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVzW2ldKTsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBhdHRyaWJ1dGVzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGUpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtNzMzLDggKzczMiw4IEBAIHN0
YXRpYyB2b2lkIHJlbW92ZUhlYWRDb250ZW50cyhSZXBsYWNlbWUKICAgICAgICAgKytpdDsKICAg
ICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIGZyYWdtZW50LnJlbW92ZU5vZGUodG9SZW1vdmVbaV0pOworICAgIGZvciAoYXV0
byYgZWxlbWVudCA6IHRvUmVtb3ZlKQorICAgICAgICBmcmFnbWVudC5yZW1vdmVOb2RlKGVsZW1l
bnQpOwogfQogCiAvLyBSZW1vdmUgc3R5bGUgc3BhbnMgYmVmb3JlIGluc2VydGlvbiBpZiB0aGV5
IGFyZSB1bm5lY2Vzc2FyeS4gIEl0J3MgZmFzdGVyIGJlY2F1c2Ugd2UnbGwgCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCShyZXZpc2lvbiAxOTEyNzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNSw4ICsxMTUsOCBAQCBTcGVsbENoZWNrZXI6On5TcGVsbENoZWNrZXIoKQogewogICAgIGlm
IChtX3Byb2Nlc3NpbmdSZXF1ZXN0KQogICAgICAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5yZXF1
ZXN0ZXJEZXN0cm95ZWQoKTsKLSAgICBmb3IgKFJlcXVlc3RRdWV1ZTo6aXRlcmF0b3IgaSA9IG1f
cmVxdWVzdFF1ZXVlLmJlZ2luKCk7IGkgIT0gbV9yZXF1ZXN0UXVldWUuZW5kKCk7ICsraSkKLSAg
ICAgICAgKCppKS0+cmVxdWVzdGVyRGVzdHJveWVkKCk7CisgICAgZm9yIChhdXRvJiBxdWV1ZSA6
IG1fcmVxdWVzdFF1ZXVlKQorICAgICAgICBxdWV1ZS0+cmVxdWVzdGVyRGVzdHJveWVkKCk7CiB9
CiAKIFRleHRDaGVja2VyQ2xpZW50KiBTcGVsbENoZWNrZXI6OmNsaWVudCgpIGNvbnN0CkBAIC0x
ODksMTEgKzE4OSwxMSBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1ZVJlcXVlc3QoUGFzc1Jl
CiB7CiAgICAgQVNTRVJUKHJlcXVlc3QpOwogCi0gICAgZm9yIChSZXF1ZXN0UXVldWU6Oml0ZXJh
dG9yIGl0ID0gbV9yZXF1ZXN0UXVldWUuYmVnaW4oKTsgaXQgIT0gbV9yZXF1ZXN0UXVldWUuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgaWYgKHJlcXVlc3QtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAh
PSAoKml0KS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQorICAgIGZvciAoYXV0byYgcXVldWUgOiBt
X3JlcXVlc3RRdWV1ZSkgeworICAgICAgICBpZiAocmVxdWVzdC0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpICE9IHF1ZXVlLT5yb290RWRpdGFibGVFbGVtZW50KCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICAqaXQgPSByZXF1ZXN0OworICAgICAgICBxdWV1ZSA9IHJlcXVlc3Q7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bs
aXRFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gMTkxMjc2KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjMsOSArNjMsOCBAQCB2b2lkIFNwbGl0RWxlbWVudENvbW1hbmQ6OmV4ZWN1dGVBcHBseSgpCiAg
ICAgLy8gRGVsZXRlIGlkIGF0dHJpYnV0ZSBmcm9tIHRoZSBzZWNvbmQgZWxlbWVudCBiZWNhdXNl
IHRoZSBzYW1lIGlkIGNhbm5vdCBiZSB1c2VkIGZvciBtb3JlIHRoYW4gb25lIGVsZW1lbnQKICAg
ICBtX2VsZW1lbnQyLT5yZW1vdmVBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpOwogCi0gICAg
c2l6ZV90IHNpemUgPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpCi0gICAgICAgIG1fZWxlbWVudDEtPmFwcGVuZENoaWxkKFdURjo6bW92ZShj
aGlsZHJlbltpXSksIGVjKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCisgICAg
ICAgIG1fZWxlbWVudDEtPmFwcGVuZENoaWxkKFdURjo6bW92ZShjaGlsZCksIGVjKTsKIH0KICAg
ICAKIHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9BcHBseSgpCkBAIC04Niw5ICs4NSw4IEBA
IHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9VbmFwcGx5KCkKIAogICAgIFJlZlB0cjxOb2Rl
PiByZWZDaGlsZCA9IG1fZWxlbWVudDItPmZpcnN0Q2hpbGQoKTsKIAotICAgIHNpemVfdCBzaXpl
ID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQotICAgICAgICBtX2VsZW1lbnQyLT5pbnNlcnRCZWZvcmUoV1RGOjptb3ZlKGNoaWxkcmVuW2ld
KSwgcmVmQ2hpbGQuZ2V0KCksIElHTk9SRV9FWENFUFRJT04pOworICAgIGZvciAoYXV0byYgY2hp
bGQgOiBjaGlsZHJlbikKKyAgICAgICAgbV9lbGVtZW50Mi0+aW5zZXJ0QmVmb3JlKFdURjo6bW92
ZShjaGlsZCksIHJlZkNoaWxkLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKIAogICAgIC8vIFJl
Y292ZXIgdGhlIGlkIGF0dHJpYnV0ZSBvZiB0aGUgb3JpZ2luYWwgZWxlbWVudC4KICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGlkID0gbV9lbGVtZW50MS0+Z2V0SWRBdHRyaWJ1dGUoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAJKHJldmlz
aW9uIDE5MTI3NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDM4ICszNDcsMzcgQEAgU3RyaW5nIFRleHRDaGVj
a2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzcwogICAgICAgICAgICAgICAgIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgICAgICAgICAgICAgVGV4dENoZWNraW5nVHlwZU1h
c2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7
CiAgICAgICAgICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hl
Y2tlcigpLCBwYXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1
bHRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHRDaGVja2lu
Z1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdC0+bG9jYXRp
b24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyByZXN1bHQtPmxl
bmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQocmVzdWx0LT5sZW5ndGggPiAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQtPmxvY2F0aW9uID49IDApOwotICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdM
b2NhdGlvbiA9IHJlc3VsdC0+bG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaXNz
cGVsbGVkV29yZCA9IHBhcmFncmFwaFN0cmluZy5zdWJzdHJpbmcocmVzdWx0LT5sb2NhdGlvbiwg
cmVzdWx0LT5sZW5ndGgpOworCisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZXN1bHQgOiBy
ZXN1bHRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hl
Y2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0LmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNl
dCAmJiByZXN1bHQubG9jYXRpb24gKyByZXN1bHQubGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQubGVuZ3RoID4gMCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmxvY2F0aW9uID49IDApOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdMb2NhdGlvbiA9IHJlc3VsdC5sb2NhdGlvbjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoU3RyaW5n
LnN1YnN0cmluZyhyZXN1bHQubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChjaGVja0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5
cGVHcmFtbWFyICYmIHJlc3VsdC0+bG9jYXRpb24gPCBjdXJyZW50RW5kT2Zmc2V0ICYmIHJlc3Vs
dC0+bG9jYXRpb24gKyByZXN1bHQtPmxlbmd0aCA+IGN1cnJlbnRTdGFydE9mZnNldCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC0+bGVuZ3RoID4gMCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LT5sb2NhdGlvbiA+PSAwKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hciAmJiByZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tp
bmdUeXBlR3JhbW1hciAmJiByZXN1bHQubG9jYXRpb24gPCBjdXJyZW50RW5kT2Zmc2V0ICYmIHJl
c3VsdC5sb2NhdGlvbiArIHJlc3VsdC5sZW5ndGggPiBjdXJyZW50U3RhcnRPZmZzZXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQubGVuZ3RoID4gMCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmxvY2F0aW9uID49IDApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc3RvcCBhZnRlciB0aGUgZmlyc3QgZ3JhbW1hciBy
ZXN1bHQsIHNpbmNlIHRoZXJlIG1pZ2h0IHN0aWxsIGJlIGEgc3BlbGxpbmcgcmVzdWx0IGFmdGVy
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBiZWdpbnMgYnV0IGJlZm9yZSB0aGUgZmly
c3QgZGV0YWlsIGluIGl0LCBidXQgd2UgY2FuIHN0b3AgaWYgd2UgZmluZCBhIHNlY29uZCBncmFt
bWFyIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZEdyYW1tYXIpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVzdWx0LT5kZXRhaWxzLnNpemUoKTsgaisrKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhbW1hckRldGFpbCogZGV0YWls
ID0gJnJlc3VsdC0+ZGV0YWlsc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCByZXN1bHQuZGV0YWlscy5zaXplKCk7IGorKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwqIGRldGFpbCA9ICZyZXN1bHQu
ZGV0YWlsc1tqXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsLT5s
ZW5ndGggPiAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsLT5s
b2NhdGlvbiA+PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT5s
b2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3Vs
dC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uICsgZGV0YWlsLT5sZW5ndGggPD0gY3VycmVu
dEVuZE9mZnNldCAmJiAoIWZvdW5kR3JhbW1hciB8fCByZXN1bHQtPmxvY2F0aW9uICsgZGV0YWls
LT5sb2NhdGlvbiA8IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiA+PSBjdXJy
ZW50U3RhcnRPZmZzZXQgJiYgcmVzdWx0LmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiArIGRl
dGFpbC0+bGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQgJiYgKCFmb3VuZEdyYW1tYXIgfHwgcmVz
dWx0LmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiA8IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hckRldGFpbEluZGV4ID0g
ajsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hckRldGFpbExvY2F0aW9u
ID0gcmVzdWx0LT5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb247CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdyYW1tYXJEZXRhaWxMb2NhdGlvbiA9IHJlc3VsdC5sb2NhdGlvbiAr
IGRldGFpbC0+bG9jYXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
R3JhbW1hciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kR3JhbW1h
cikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9
IHJlc3VsdC0+bG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0R3JhbW1h
ckRldGFpbCA9IHJlc3VsdC0+ZGV0YWlsc1tncmFtbWFyRGV0YWlsSW5kZXhdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vi
c3RyaW5nKHJlc3VsdC0+bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlTG9jYXRpb24gPSByZXN1bHQubG9jYXRpb247Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0R3JhbW1hckRldGFpbCA9IHJlc3VsdC5kZXRh
aWxzW2dyYW1tYXJEZXRhaWxJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFk
R3JhbW1hclBocmFzZSA9IHBhcmFncmFwaFN0cmluZy5zdWJzdHJpbmcocmVzdWx0LmxvY2F0aW9u
LCByZXN1bHQubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmFk
R3JhbW1hclBocmFzZS5sZW5ndGgoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTU4MCwxMCArNTc5LDkgQEAgVmVjdG9yPFN0cmluZz4gVGV4
dENoZWNraW5nSGVscGVyOjpndWVzcwogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJl
c3VsdHM7CiAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3Jh
bW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1h
cikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7CiAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
Km1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGgudGV4dCgpLCBjaGVja2luZ1R5cGVz
LCByZXN1bHRzKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5z
aXplKCk7IGkrKykgewotICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9
ICZyZXN1bHRzW2ldOwotICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZU1hdGNoZXMocmVzdWx0LT5sb2Nh
dGlvbiwgcmVzdWx0LT5sZW5ndGgpKSB7CisKKyAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IHJlc3Vs
dHMpIHsKKyAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGlu
ZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZU1hdGNoZXMocmVzdWx0LmxvY2F0aW9uLCByZXN1
bHQubGVuZ3RoKSkgewogICAgICAgICAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGFyYWdy
YXBoLmNoZWNraW5nU3Vic3RyaW5nKCk7CiAgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxlZFdv
cmQubGVuZ3RoKCkpOwogICAgICAgICAgICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCktPmdldEd1
ZXNzZXNGb3JXb3JkKG1pc3NwZWxsZWRXb3JkLCBTdHJpbmcoKSwgZ3Vlc3Nlcyk7CkBAIC01OTUs
MjAgKzU5MywxOCBAQCBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzCiAg
ICAgCiAgICAgaWYgKCFjaGVja0dyYW1tYXIpCiAgICAgICAgIHJldHVybiBndWVzc2VzOwotICAg
ICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykg
ewotICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ld
OwotICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYm
IHBhcmFncmFwaC5pc0NoZWNraW5nUmFuZ2VDb3ZlcmVkQnkocmVzdWx0LT5sb2NhdGlvbiwgcmVz
dWx0LT5sZW5ndGgpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVz
dWx0LT5kZXRhaWxzLnNpemUoKTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgR3JhbW1h
ckRldGFpbCogZGV0YWlsID0gJnJlc3VsdC0+ZGV0YWlsc1tqXTsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoZGV0YWlsLT5sZW5ndGggPiAwKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWls
LT5sb2NhdGlvbiA+PSAwKTsKLSAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoLmNoZWNraW5n
UmFuZ2VNYXRjaGVzKHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uLCBkZXRhaWwt
Pmxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2Ug
PSBwYXJhZ3JhcGgudGV4dFN1YnN0cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0
aCk7CisKKyAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IHJlc3VsdHMpIHsKKyAgICAgICAgaWYgKHJl
c3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIHBhcmFncmFwaC5pc0NoZWNr
aW5nUmFuZ2VDb3ZlcmVkQnkocmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKSkgeworICAg
ICAgICAgICAgZm9yIChhdXRvJiBkZXRhaWwgOiByZXN1bHQuZGV0YWlscykgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChkZXRhaWwubGVuZ3RoID4gMCk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGRldGFpbC5sb2NhdGlvbiA+PSAwKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoLmNo
ZWNraW5nUmFuZ2VNYXRjaGVzKHJlc3VsdC5sb2NhdGlvbiArIGRldGFpbC5sb2NhdGlvbiwgZGV0
YWlsLmxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJh
c2UgPSBwYXJhZ3JhcGgudGV4dFN1YnN0cmluZyhyZXN1bHQubG9jYXRpb24sIHJlc3VsdC5sZW5n
dGgpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZS5sZW5ndGgo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZXRhaWwt
Pmd1ZXNzZXMuc2l6ZSgpOyBrKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBndWVzc2VzLmFw
cGVuZChkZXRhaWwtPmd1ZXNzZXNba10pOwotICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsICpkZXRh
aWwpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGd1ZXNzIDogZGV0YWlsLmd1ZXNz
ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBndWVzc2VzLmFwcGVuZChndWVzcyk7CisgICAg
ICAgICAgICAgICAgICAgIG1fY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcoYmFkR3JhbW1hclBocmFzZSwgZGV0YWlsKTsKICAgICAgICAgICAgICAgICAgICAgdW5ncmFt
bWF0aWNhbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBndWVzc2VzOwogICAg
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV3JhcENvbnRlbnRz
SW5EdW1teVNwYW5Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE5MTI3NikK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsOCBAQCB2b2lkIFdyYXBDb250ZW50c0lu
RHVtbXlTcGFuQ29tbWFuZDo6ZXhlCiAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fZWxlbWVudC0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAg
ICAgY2hpbGRyZW4uYXBwZW5kKCpjaGlsZCk7CiAKLSAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVu
LnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAg
bV9kdW1teVNwYW4tPmFwcGVuZENoaWxkKFdURjo6bW92ZShjaGlsZHJlbltpXSksIElHTk9SRV9F
WENFUFRJT04pOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKKyAgICAgICAgbV9k
dW1teVNwYW4tPmFwcGVuZENoaWxkKFdURjo6bW92ZShjaGlsZCksIElHTk9SRV9FWENFUFRJT04p
OwogCiAgICAgbV9lbGVtZW50LT5hcHBlbmRDaGlsZCgqbV9kdW1teVNwYW4sIElHTk9SRV9FWENF
UFRJT04pOwogfQpAQCAtNjksOSArNjgsOCBAQCB2b2lkIFdyYXBDb250ZW50c0luRHVtbXlTcGFu
Q29tbWFuZDo6ZG9VCiAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fZHVtbXlTcGFuLT5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGls
ZHJlbi5hcHBlbmQoKmNoaWxkKTsKIAotICAgIHNpemVfdCBzaXplID0gY2hpbGRyZW4uc2l6ZSgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBtX2VsZW1l
bnQtPmFwcGVuZENoaWxkKFdURjo6bW92ZShjaGlsZHJlbltpXSksIElHTk9SRV9FWENFUFRJT04p
OworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKKyAgICAgICAgbV9lbGVtZW50LT5h
cHBlbmRDaGlsZChXVEY6Om1vdmUoY2hpbGQpLCBJR05PUkVfRVhDRVBUSU9OKTsKIAogICAgIG1f
ZHVtbXlTcGFuLT5yZW1vdmUoSUdOT1JFX0VYQ0VQVElPTik7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAxOTEyNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw5ICsxMTAsOCBAQCBzdGF0aWMg
dm9pZCBjb21wbGV0ZVVSTHMoRG9jdW1lbnRGcmFnbWVuCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBzaXplX3QgbnVtQ2hhbmdlcyA9IGNoYW5nZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtQ2hhbmdlczsgKytpKQotICAgICAgICBjaGFuZ2VzW2ldLmFwcGx5KCk7Cisg
ICAgZm9yIChhdXRvJiBjaGFuZ2UgOiBjaGFuZ2VzKQorICAgICAgICBjaGFuZ2UuYXBwbHkoKTsK
IH0KICAgICAKIGNsYXNzIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yIGZpbmFsIDogcHVibGljIE1h
cmt1cEFjY3VtdWxhdG9yIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJ
T1MubW0JKHJldmlzaW9uIDE5MTI3NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0Vk
aXRvcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTY4LDggKzU2OCw4IEBAIFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjpjcmUKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBjbGllbnQoKS0+ZG9jdW1lbnRGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3Ry
aW5nKHN0cmluZywgcmVzb3VyY2VzKTsKIAogICAgIGlmIChEb2N1bWVudExvYWRlciogbG9hZGVy
ID0gbV9mcmFtZS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKSB7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwLCBzaXplID0gcmVzb3VyY2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgICAgIGxvYWRlci0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlc1tpXSk7CisgICAgICAg
IGZvciAoYXV0byYgcmVzb3VyY2UgOiByZXNvdXJjZXMpCisgICAgICAgICAgICBsb2FkZXItPmFk
ZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZSk7CiAgICAgfQogCiAgICAgaWYgKCF3YXNEZWZlcnJp
bmdDYWxsYmFja3MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
CShyZXZpc2lvbiAxOTEyNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxNCw4ICs1MTQsNyBAQCBib29sIEVkaXRvcjo6V2Vi
Q29udGVudFJlYWRlcjo6cmVhZFdlYkFyCiAKIGJvb2wgRWRpdG9yOjpXZWJDb250ZW50UmVhZGVy
OjpyZWFkRmlsZW5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKIHsKLSAgICBzaXpl
X3Qgc2l6ZSA9IHBhdGhzLnNpemUoKTsKLSAgICBpZiAoIXNpemUpCisgICAgaWYgKCFwYXRocy5z
aXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghZnJhbWUuZG9jdW1lbnQo
KSkKQEAgLTUyNCw4ICs1MjMsNyBAQCBib29sIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVh
ZEZpbGVuCiAKICAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo
KTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIFN0
cmluZyB0ZXh0ID0gcGF0aHNbaV07CisgICAgZm9yIChhdXRvJiB0ZXh0IDogcGF0aHMpIHsKICNp
ZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgICAgICBSZWY8SFRNTEF0dGFjaG1lbnRF
bGVtZW50PiBhdHRhY2htZW50ID0gSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoYXR0YWNo
bWVudFRhZywgZG9jdW1lbnQpOwogICAgICAgICBhdHRhY2htZW50LT5zZXRGaWxlKEZpbGU6OmNy
ZWF0ZShbW05TVVJMIGZpbGVVUkxXaXRoUGF0aDp0ZXh0XSBwYXRoXSkucHRyKCkpOwpAQCAtNjYw
LDggKzY1OCw4IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjpjcmUKICAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjbGllbnQoKS0+ZG9jdW1lbnRG
cmFnbWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKHN0cmluZywgcmVzb3VyY2VzKTsKIAogICAgIGlm
IChEb2N1bWVudExvYWRlciogbG9hZGVyID0gbV9mcmFtZS5sb2FkZXIoKS5kb2N1bWVudExvYWRl
cigpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcmVzb3VyY2VzLnNpemUo
KTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGxvYWRlci0+YWRkQXJjaGl2ZVJlc291cmNl
KHJlc291cmNlc1tpXSk7CisgICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiByZXNvdXJjZXMp
CisgICAgICAgICAgICBsb2FkZXItPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZSk7CiAgICAg
fQogCiAgICAgaWYgKCF3YXNEZWZlcnJpbmdDYWxsYmFja3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264035</attachid>
            <date>2015-10-25 21:52:53 -0700</date>
            <delta_ts>2015-10-25 23:30:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150354-20151026135203.patch</filename>
            <type>text/plain</type>
            <size>41479</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDE1LTEwLTI1ICBIdW5zZW9w
IEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJuIGZv
ci1sb29wcyBpbiBXZWJDb3JlL2VkaXRpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzNTQKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlv
ciBjaGFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlB
bHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3
UmVjdEZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6Om1hcmtDb3JyZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZl
Rm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmR1bW15U3BhbkFuY2VzdG9yRm9y
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6Y2xlYW51cFVuc3R5
bGVkQXBwbGVTdHlsZVNwYW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjpzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25JbmxpbmVTdHls
ZUFyb3VuZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5D
aGlsZFRleHROb2Rlcyk6CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpyZWFwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OmdldE5vZGVzSW5Db21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVDaGls
ZHJlbkluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29weU1hcmtlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01h
cmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUlu
c2lnbmlmaWNhbnRUZXh0KToKKyAgICAgICAgKiBlZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uTWFya2VyU3VwcGxpZXI6OmFkZE1hcmtlcnNU
b1RleHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3RhdGlvbkNvbW1hbmQ6OmNvbGxlY3RE
aWN0YXRpb25BbHRlcm5hdGl2ZXNJblJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdT
dHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0VkaXRpbmdQcm9wZXJ0eSk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmV4dHJhY3RDb25mbGljdGluZ0ltcGxpY2l0U3R5bGVP
ZkF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjplbGVtZW50SXNT
dHlsZWRTcGFuT3JIVE1MRXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5
bGU6Om1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmRpZmZUZXh0RGVjb3JhdGlvbnMpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbW1hbmRNYXApOgorICAgICAg
ICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFy
a3VwQWNjdW11bGF0b3I6OnRvdGFsTGVuZ3RoKToKKyAgICAgICAgKiBlZGl0aW5nL01lcmdlSWRl
bnRpY2FsRWxlbWVudHNDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lcmdlSWRlbnRp
Y2FsRWxlbWVudHNDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lcmdlSWRl
bnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRG
cmFnbWVudDo6cmVtb3ZlVW5yZW5kZXJlZE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
Y2VtZW50RnJhZ21lbnQ6OnJlbW92ZUludGVyY2hhbmdlTm9kZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBT
dHlsZVNwYW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlSGVhZENvbnRlbnRzKToK
KyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
cGVsbENoZWNrZXI6On5TcGVsbENoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVj
a2VyOjpjbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjplbnF1ZXVlUmVx
dWVzdCk6CisgICAgICAgICogZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6OmV4ZWN1dGVBcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpTcGxpdEVsZW1lbnRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNv
cmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVs
cGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2Fs
UmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZDo6
ZXhlY3V0ZUFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OldyYXBDb250ZW50c0luRHVtbXlTcGFu
Q29tbWFuZDo6ZG9VbmFwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL2lvcy9FZGl0b3JJT1MubW06
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2Vz
KToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRGaWxlbmFtZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyk6CisgICAgICAgICog
ZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGxldGVVUkxzKToKKwog
MjAxNS0xMC0yNSAgR3dhbmcgWW9vbiBId2FuZyAgPHlvb25AaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbVGV4TWFwXSBGaXggYSBtaXN1c2VkIGZsYWcgZm9yIEdzdEdMCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDE5MTU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw5ICsyODMsOSBAQCB2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0CiAgICAgICAgIHJldHVybjsKIAogICAg
IERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VycyA9IHJlcGxhY2VtZW50UmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBt
YXJrZXJUeXBlc1RvQWRkLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKLSAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwg
bWFya2VyVHlwZXNUb0FkZFtpXSwgbWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRp
dmVUZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZXNUb0FkZFtpXSkpOworCisgICAgZm9y
IChhdXRvJiBtYXJrZXJUeXBlIDogbWFya2VyVHlwZXNUb0FkZCkKKyAgICAgICAgbWFya2Vycy5h
ZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSwgbWFya2VyRGVzY3Jp
cHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRpdmVUZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlw
ZSkpOwogfQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJl
Y3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKQEAgLTQzNCw5ICs0MzQsOCBAQCBGbG9h
dFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vCiAgICAgVmVjdG9yPEZsb2F0UXVh
ZD4gdGV4dFF1YWRzOwogICAgIHJhbmdlLT5hYnNvbHV0ZVRleHRRdWFkcyh0ZXh0UXVhZHMpOwog
ICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3Q7Ci0gICAgc2l6ZV90IHNpemUgPSB0ZXh0UXVhZHMu
c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBi
b3VuZGluZ1JlY3QudW5pdGUodGV4dFF1YWRzW2ldLmJvdW5kaW5nQm94KCkpOworICAgIGZvciAo
YXV0byYgdGV4dFF1YWQgOiB0ZXh0UXVhZHMpCisgICAgICAgIGJvdW5kaW5nUmVjdC51bml0ZSh0
ZXh0UXVhZC5ib3VuZGluZ0JveCgpKTsKICAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RW
aWV3KEludFJlY3QoYm91bmRpbmdSZWN0KSk7CiB9ICAgICAgICAKIApAQCAtNTMyLDEwICs1MzEs
OCBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtSZXZlCiAKIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4g
cmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKIHsKLSAgICBWZWN0
b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzVG9BZGQgPSBtYXJrZXJU
eXBlc0ZvckF1dG9jb3JyZWN0aW9uKCk7CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBt
YXJrZXJzID0gcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtl
cnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlclR5cGVzVG9BZGQuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9
IG1hcmtlclR5cGVzVG9BZGRbaV07CisgICAgZm9yIChhdXRvJiBtYXJrZXJUeXBlIDogbWFya2Vy
VHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKSB7CiAgICAgICAgIGlmIChtYXJrZXJUeXBlID09IERv
Y3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2Vy
OjpBdXRvY29ycmVjdGVkKQogICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZWRS
YW5nZS5nZXQoKSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOwogICAgICAgICBlbHNlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2
aXNpb24gMTkxNTUwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOCw5ICs0MjgsOCBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjphcHBseVJlbGF0aXZlRm9uCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzaXplX3Qg
c2l6ZSA9IHVuc3R5bGVkU3BhbnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHVuc3R5bGVk
U3BhbnNbaV0uZ2V0KCkpOworICAgIGZvciAoYXV0byYgdW5zdHlsZWRTcGFuIDogdW5zdHlsZWRT
cGFucykKKyAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih1bnN0eWxlZFNwYW4u
Z2V0KCkpOwogfQogCiBzdGF0aWMgQ29udGFpbmVyTm9kZSogZHVtbXlTcGFuQW5jZXN0b3JGb3JO
b2RlKGNvbnN0IE5vZGUqIG5vZGUpCkBAIC00NTYsOCArNDU1LDkgQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6Y2xlYW51cFVuc3R5bGVkQQogICAgICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJp
YnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFuKCZjaGlsZCkpCiAgICAgICAgICAgICB0b1JlbW92ZS5h
cHBlbmQoJmNoaWxkKTsKICAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvUmVt
b3ZlLnNpemUoKTsgKytpKQotICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHRv
UmVtb3ZlW2ldKTsKKworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHRvUmVtb3ZlKQorICAgICAg
ICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwogfQogCiBIVE1MRWxlbWVu
dCogQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0QW5jZXN0b3JzV2l0aFVuaWNvZGVCaWRpKE5vZGUq
IG5vZGUsIGJvb2wgYmVmb3JlLCBXcml0aW5nRGlyZWN0aW9uIGFsbG93ZWREaXJlY3Rpb24pCkBA
IC04MzQsMTEgKzgzNCwxMCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0
eWxlCiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBydW5zLnNpemUoKTsgaSsrKQotICAg
ICAgICBydW5zW2ldLmNoYW5nZSA9IFN0eWxlQ2hhbmdlKHN0eWxlLCBydW5zW2ldLnBvc2l0aW9u
Rm9yU3R5bGVDb21wdXRhdGlvbik7CisgICAgZm9yIChhdXRvJiBydW4gOiBydW5zKQorICAgICAg
ICBydW4uY2hhbmdlID0gU3R5bGVDaGFuZ2Uoc3R5bGUsIHJ1bi5wb3NpdGlvbkZvclN0eWxlQ29t
cHV0YXRpb24pOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBydW5zLnNpemUoKTsgaSsr
KSB7Ci0gICAgICAgIElubGluZVJ1blRvQXBwbHlTdHlsZSYgcnVuID0gcnVuc1tpXTsKKyAgICBm
b3IgKGF1dG8mIHJ1biA6IHJ1bnMpIHsKICAgICAgICAgaWYgKHJ1bi5kdW1teUVsZW1lbnQpCiAg
ICAgICAgICAgICByZW1vdmVOb2RlKHJ1bi5kdW1teUVsZW1lbnQpOwogICAgICAgICBpZiAocnVu
LnN0YXJ0QW5kRW5kQXJlU3RpbGxJbkRvY3VtZW50KCkpCkBAIC05NTgsOCArOTU3LDggQEAgYm9v
bCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW1wbGljaXRseQogICAgICAgICBleHRyYWN0ZWRT
dHlsZSwgYXR0cmlidXRlcywgbW9kZSA9PSBSZW1vdmVBbHdheXMgPyBFZGl0aW5nU3R5bGU6OkV4
dHJhY3RNYXRjaGluZ1N0eWxlIDogRWRpdGluZ1N0eWxlOjpEb05vdEV4dHJhY3RNYXRjaGluZ1N0
eWxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhdHRyaWJ1dGVzLnNpemUoKTsgaSsrKQotICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVs
ZW1lbnQsIGF0dHJpYnV0ZXNbaV0pOworICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogYXR0cmli
dXRlcykKKyAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGUpOwog
CiAgICAgaWYgKGlzRW1wdHlGb250VGFnKGVsZW1lbnQpIHx8IGlzU3BhbldpdGhvdXRBdHRyaWJ1
dGVzT3JVbnN0eWxlZFN0eWxlU3BhbihlbGVtZW50KSkKICAgICAgICAgcmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbihlbGVtZW50KTsKQEAgLTEwNzUsOCArMTA3NCw4IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3QKICAgICAgICAgICAgIGlmICghY2hpbGQucGFy
ZW50Tm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFj
aGlsZC5jb250YWlucyh0YXJnZXROb2RlKSAmJiBlbGVtZW50c1RvUHVzaERvd24uc2l6ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbGVtZW50c1RvUHVzaERv
d24uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHdy
YXBwZXIgPSBlbGVtZW50c1RvUHVzaERvd25baV0tPmNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJl
bihkb2N1bWVudCgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVt
ZW50c1RvUHVzaERvd24pIHsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHdy
YXBwZXIgPSBlbGVtZW50LT5jbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oZG9jdW1lbnQoKSk7
CiAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXItPnJlbW92ZUF0dHJpYnV0ZShzdHlsZUF0dHIp
OwogICAgICAgICAgICAgICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KCZjaGls
ZCwgJmNoaWxkLCB3cmFwcGVyKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNTQxLDggKzE1NDAs
NyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9kCiAgICAgZm9yIChU
ZXh0KiB0ZXh0Tm9kZSA9IFRleHROb2RlVHJhdmVyc2FsOjpmaXJzdENoaWxkKCpub2RlKTsgdGV4
dE5vZGU7IHRleHROb2RlID0gVGV4dE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKCp0ZXh0Tm9k
ZSkpCiAgICAgICAgIHRleHROb2Rlcy5hcHBlbmQodGV4dE5vZGUpOwogCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB0ZXh0Tm9kZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVGV4dCogY2hp
bGRUZXh0ID0gdGV4dE5vZGVzW2ldLmdldCgpOworICAgIGZvciAoYXV0byYgY2hpbGRUZXh0IDog
dGV4dE5vZGVzKSB7CiAgICAgICAgIE5vZGUqIG5leHQgPSBjaGlsZFRleHQtPm5leHRTaWJsaW5n
KCk7CiAgICAgICAgIGlmICghaXM8VGV4dD4obmV4dCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCShyZXZpc2lvbiAxOTE1NTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDkgKzEzMiw4IEBAIHZvaWQg
RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSgpCiAgICAgLy8gaWYgb25lIGlzIG5lY2Vz
c2FyeSAobGlrZSBmb3IgdGhlIGNyZWF0aW9uIG9mIFZpc2libGVQb3NpdGlvbnMpLgogICAgIG1f
ZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAg
c2l6ZV90IHNpemUgPSBtX2NvbW1hbmRzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSAhPSBzaXplOyArK2kpCi0gICAgICAgIG1fY29tbWFuZHNbaV0tPmRvUmVhcHBseSgpOworICAg
IGZvciAoYXV0byYgY29tbWFuZCA6IG1fY29tbWFuZHMpCisgICAgICAgIGNvbW1hbmQtPmRvUmVh
cHBseSgpOwogCiAgICAgZnJhbWUtPmVkaXRvcigpLnJlYXBwbGllZEVkaXRpbmcodGhpcyk7CiB9
CkBAIC0xNTksOSArMTU4LDggQEAgdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpzZXRFbmRp
bmdTZQogI2lmbmRlZiBOREVCVUcKIHZvaWQgRWRpdENvbW1hbmRDb21wb3NpdGlvbjo6Z2V0Tm9k
ZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mIG5vZGVzKQogewotICAgIHNpemVfdCBzaXplID0g
bV9jb21tYW5kcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
Ci0gICAgICAgIG1fY29tbWFuZHNbaV0tPmdldE5vZGVzSW5Db21tYW5kKG5vZGVzKTsKKyAgICBm
b3IgKGF1dG8mIGNvbW1hbmQgOiBtX2NvbW1hbmRzKQorICAgICAgICBjb21tYW5kLT5nZXROb2Rl
c0luQ29tbWFuZChub2Rlcyk7CiB9CiAjZW5kaWYKIApAQCAtNDA2LDkgKzQwNCw4IEBAIHZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZUNoaWxkcmUKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBmcm9tOyBjaGlsZCAmJiBpIDwgdG87IGkrKywgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkKICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKIAotICAgIHNpemVfdCBzaXplID0g
Y2hpbGRyZW4uc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQot
ICAgICAgICByZW1vdmVOb2RlKGNoaWxkcmVuW2ldLnJlbGVhc2UoKSk7CisgICAgZm9yIChhdXRv
JiBjaGlsZCA6IGNoaWxkcmVuKQorICAgICAgICByZW1vdmVOb2RlKGNoaWxkLnJlbGVhc2UoKSk7
CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUoUGFzc1JlZlB0cjxO
b2RlPiBub2RlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1
bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKQEAgLTU3OCwyMCArNTc1LDIxIEBAIFBvc2l0aW9u
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlU2UKICAgICByZXR1cm4gUG9zaXRpb24odGV4
dE5vZGUucmVsZWFzZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIHRleHQubGVu
Z3RoKCkpOwogfQogCi1zdGF0aWMgdm9pZCBjb3B5TWFya2Vycyhjb25zdCBWZWN0b3I8UmVuZGVy
ZWREb2N1bWVudE1hcmtlcio+JiBtYXJrZXJQb2ludGVycywgVmVjdG9yPFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXI+JiBtYXJrZXJzKQorc3RhdGljIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2Vy
PiBjb3B5TWFya2Vycyhjb25zdCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+JiBtYXJr
ZXJQb2ludGVycykKIHsKLSAgICBzaXplX3QgYXJyYXlTaXplID0gbWFya2VyUG9pbnRlcnMuc2l6
ZSgpOwotICAgIG1hcmtlcnMucmVzZXJ2ZUNhcGFjaXR5KGFycmF5U2l6ZSk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhcnJheVNpemU7ICsraSkKLSAgICAgICAgbWFya2Vycy5hcHBlbmQo
Km1hcmtlclBvaW50ZXJzW2ldKTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcj4g
bWFya2VyczsKKyAgICBtYXJrZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWFya2VyUG9pbnRl
cnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIG1hcmtlclBvaW50ZXIgOiBtYXJrZXJQb2ludGVy
cykKKyAgICAgICAgbWFya2Vycy51bmNoZWNrZWRBcHBlbmQoKm1hcmtlclBvaW50ZXIpOworCisg
ICAgcmV0dXJuIG1hcmtlcnM7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxh
Y2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoUGFzc1JlZlB0cjxUZXh0PiBwcnBOb2RlLCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
VGV4dCkKIHsKICAgICBSZWZQdHI8VGV4dD4gbm9kZShwcnBOb2RlKTsKICAgICBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXImIG1hcmtlckNvbnRyb2xsZXIgPSBkb2N1bWVudCgpLm1hcmtlcnMoKTsK
LSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcj4gbWFya2VyczsKLSAgICBjb3B5TWFy
a2VycyhtYXJrZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQoKSwgbm9kZSwgb2Zmc2V0LCBub2RlLCBvZmZzZXQgKyBjb3VudCkucHRyKCksIERvY3VtZW50
TWFya2VyOjpBbGxNYXJrZXJzKCkpLCBtYXJrZXJzKTsKKyAgICBhdXRvIG1hcmtlcnMgPSBjb3B5
TWFya2VycyhtYXJrZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQoKSwgbm9kZSwgb2Zmc2V0LCBub2RlLCBvZmZzZXQgKyBjb3VudCkucHRyKCksIERvY3Vt
ZW50TWFya2VyOjpBbGxNYXJrZXJzKCkpKTsKICAgICByZXBsYWNlVGV4dEluTm9kZShub2RlLCBv
ZmZzZXQsIGNvdW50LCByZXBsYWNlbWVudFRleHQpOwogICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgbm9kZSwgb2Zmc2V0
ICsgcmVwbGFjZW1lbnRUZXh0Lmxlbmd0aCgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIG1hcmtl
ciA6IG1hcmtlcnMpCkBAIC04ODgsOCArODg2LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6ZGVsZXRlSW5zaWduaQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7ICsraSkgewotICAgICAgICBUZXh0KiB0ZXh0
Tm9kZSA9IG5vZGVzW2ldLmdldCgpOworICAgIGZvciAoYXV0byYgdGV4dE5vZGUgOiBub2Rlcykg
ewogICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSB0ZXh0Tm9kZSA9PSBzdGFydC5kZXByZWNhdGVk
Tm9kZSgpID8gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IDA7CiAgICAgICAgIGlu
dCBlbmRPZmZzZXQgPSB0ZXh0Tm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSA/IGVuZC5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpIDogc3RhdGljX2Nhc3Q8aW50Pih0ZXh0Tm9kZS0+bGVuZ3Ro
KCkpOwogICAgICAgICBkZWxldGVJbnNpZ25pZmljYW50VGV4dCh0ZXh0Tm9kZSwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9u
Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE5MTU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RGljdGF0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRNYXJrZXJzVG9UZXh0Tm9kZShUZXh0KiB0ZXh0Tm9k
ZSwgdW5zaWduZWQgb2Zmc2V0T2ZJbnNlcnRpb24sIGNvbnN0IFN0cmluZyYgdGV4dFRvQmVJbnNl
cnRlZCkKICAgICB7CiAgICAgICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29u
dHJvbGxlciA9IHRleHROb2RlLT5kb2N1bWVudCgpLm1hcmtlcnMoKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2FsdGVybmF0aXZlcy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgY29uc3QgRGljdGF0aW9uQWx0ZXJuYXRpdmUmIGFsdGVybmF0aXZlID0gbV9hbHRlcm5hdGl2
ZXNbaV07CisgICAgICAgIGZvciAoYXV0byYgYWx0ZXJuYXRpdmUgOiBtX2FsdGVybmF0aXZlcykg
ewogICAgICAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXJUb05vZGUodGV4dE5vZGUs
IGFsdGVybmF0aXZlLnJhbmdlU3RhcnQgKyBvZmZzZXRPZkluc2VydGlvbiwgYWx0ZXJuYXRpdmUu
cmFuZ2VMZW5ndGgsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMsIERpY3Rh
dGlvbk1hcmtlckRldGFpbHM6OmNyZWF0ZSh0ZXh0VG9CZUluc2VydGVkLnN1YnN0cmluZyhhbHRl
cm5hdGl2ZS5yYW5nZVN0YXJ0LCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCksIGFsdGVybmF0aXZl
LmRpY3RhdGlvbkNvbnRleHQpKTsKICAgICAgICAgICAgIG1hcmtlckNvbnRyb2xsZXIuYWRkTWFy
a2VyVG9Ob2RlKHRleHROb2RlLCBhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0ICsgb2Zmc2V0T2ZJbnNl
cnRpb24sIGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVj
a2luZ0V4ZW1wdGlvbik7CiAgICAgICAgIH0KQEAgLTEyOSw4ICsxMjgsNyBAQCB2b2lkIERpY3Rh
dGlvbkNvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlCiAKIHZvaWQgRGljdGF0aW9uQ29tbWFuZDo6
Y29sbGVjdERpY3RhdGlvbkFsdGVybmF0aXZlc0luUmFuZ2Uoc2l6ZV90IHJhbmdlU3RhcnQsIHNp
emVfdCByYW5nZUxlbmd0aCwgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiYgYWx0ZXJuYXRp
dmVzKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbHRlcm5hdGl2ZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgY29uc3QgRGljdGF0aW9uQWx0ZXJuYXRpdmUmIGFsdGVybmF0aXZl
ID0gbV9hbHRlcm5hdGl2ZXNbaV07CisgICAgZm9yIChhdXRvJiBhbHRlcm5hdGl2ZSA6IG1fYWx0
ZXJuYXRpdmVzKSB7CiAgICAgICAgIGlmIChhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0ID49IHJhbmdl
U3RhcnQgJiYgKGFsdGVybmF0aXZlLnJhbmdlU3RhcnQgKyBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0
aCkgPD0gcmFuZ2VTdGFydCArIHJhbmdlTGVuZ3RoKQogICAgICAgICAgICAgYWx0ZXJuYXRpdmVz
LmFwcGVuZChEaWN0YXRpb25BbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0IC0gcmFu
Z2VTdGFydCwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgsIGFsdGVybmF0aXZlLmRpY3RhdGlvbkNv
bnRleHQpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCShyZXZpc2lvbiAxOTE1NTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdT
dHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAsOCBAQCBzdGF0aWMgUGFzc1Jl
ZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0VkaXRp
bmdQcm9wZXJ0eShpbnQgaWQpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJS
QVlfTEVOR1RIKGVkaXRpbmdQcm9wZXJ0aWVzKTsgKytpKSB7Ci0gICAgICAgIGlmIChlZGl0aW5n
UHJvcGVydGllc1tpXSA9PSBpZCkKKyAgICBmb3IgKGF1dG8mIGVkaXRpbmdQcm9wZXJ0eSA6IGVk
aXRpbmdQcm9wZXJ0aWVzKSB7CisgICAgICAgIGlmIChlZGl0aW5nUHJvcGVydHkgPT0gaWQpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTc5
LDExICs5NzksOCBAQCBib29sIEVkaXRpbmdTdHlsZTo6ZXh0cmFjdENvbmZsaWN0aW5nSW1wCiAg
ICAgaWYgKCFtX211dGFibGVTdHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29u
c3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxIVE1MQXR0cmlidXRlRXF1aXZhbGVudD4+JiBIVE1M
QXR0cmlidXRlRXF1aXZhbGVudHMgPSBodG1sQXR0cmlidXRlRXF1aXZhbGVudHMoKTsKICAgICBi
b29sIHJlbW92ZWQgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhUTUxBdHRy
aWJ1dGVFcXVpdmFsZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBIVE1MQXR0cmli
dXRlRXF1aXZhbGVudCogZXF1aXZhbGVudCA9IEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS5n
ZXQoKTsKLQorICAgIGZvciAoYXV0byYgZXF1aXZhbGVudCA6IGh0bWxBdHRyaWJ1dGVFcXVpdmFs
ZW50cygpKSB7CiAgICAgICAgIC8vIHVuaWNvZGUtYmlkaSBhbmQgZGlyZWN0aW9uIGFyZSBwdXNo
ZWQgZG93biBzZXBhcmF0ZWx5IHNvIGRvbid0IHB1c2ggZG93biB3aXRoIG90aGVyIHN0eWxlcy4K
ICAgICAgICAgaWYgKHNob3VsZFByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbiA9PSBQcmVzZXJ2ZVdy
aXRpbmdEaXJlY3Rpb24gJiYgZXF1aXZhbGVudC0+YXR0cmlidXRlTmFtZSgpID09IEhUTUxOYW1l
czo6ZGlyQXR0cikKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTAzMywxMCArMTAzMCw4IEBA
IGJvb2wgRWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3IKICAgICBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNwYW5UYWcpKQogICAgICAgICBlbGVtZW50SXNTcGFu
T3JFbGVtZW50RXF1aXZhbGVudCA9IHRydWU7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbnN0IFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SFRNTEVsZW1lbnRFcXVpdmFsZW50Pj4mIEhUTUxFbGVtZW50
RXF1aXZhbGVudHMgPSBodG1sRWxlbWVudEVxdWl2YWxlbnRzKCk7Ci0gICAgICAgIHNpemVfdCBp
OwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSFRNTEVsZW1lbnRFcXVpdmFsZW50cy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKEhUTUxFbGVtZW50RXF1aXZhbGVudHNbaV0tPm1hdGNo
ZXMoKmVsZW1lbnQpKSB7CisgICAgICAgIGZvciAoYXV0byYgZXF1aXZhbGVudCA6IGh0bWxFbGVt
ZW50RXF1aXZhbGVudHMoKSkgeworICAgICAgICAgICAgaWYgKGVxdWl2YWxlbnQtPm1hdGNoZXMo
KmVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudElzU3Bhbk9yRWxlbWVudEVxdWl2
YWxlbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAt
MTA0Nyw5ICsxMDQyLDggQEAgYm9vbCBFZGl0aW5nU3R5bGU6OmVsZW1lbnRJc1N0eWxlZFNwYW5P
cgogICAgICAgICByZXR1cm4gZWxlbWVudElzU3Bhbk9yRWxlbWVudEVxdWl2YWxlbnQ7IC8vIHNw
YW4sIGIsIGV0Yy4uLiB3aXRob3V0IGFueSBhdHRyaWJ1dGVzCiAKICAgICB1bnNpZ25lZCBtYXRj
aGVkQXR0cmlidXRlcyA9IDA7Ci0gICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxIVE1M
QXR0cmlidXRlRXF1aXZhbGVudD4+JiBIVE1MQXR0cmlidXRlRXF1aXZhbGVudHMgPSBodG1sQXR0
cmlidXRlRXF1aXZhbGVudHMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhUTUxBdHRy
aWJ1dGVFcXVpdmFsZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoSFRNTEF0dHJpYnV0
ZUVxdWl2YWxlbnRzW2ldLT5tYXRjaGVzKCplbGVtZW50KSAmJiBIVE1MQXR0cmlidXRlRXF1aXZh
bGVudHNbaV0tPmF0dHJpYnV0ZU5hbWUoKSAhPSBIVE1MTmFtZXM6OmRpckF0dHIpCisgICAgZm9y
IChhdXRvJiBlcXVpdmFsZW50IDogaHRtbEF0dHJpYnV0ZUVxdWl2YWxlbnRzKCkpIHsKKyAgICAg
ICAgaWYgKGVxdWl2YWxlbnQtPm1hdGNoZXMoKmVsZW1lbnQpICYmIGVxdWl2YWxlbnQtPmF0dHJp
YnV0ZU5hbWUoKSAhPSBIVE1MTmFtZXM6OmRpckF0dHIpCiAgICAgICAgICAgICBtYXRjaGVkQXR0
cmlidXRlcysrOwogICAgIH0KIApAQCAtMTE3OSwxOCArMTE3MywxNiBAQCB2b2lkIEVkaXRpbmdT
dHlsZTo6bWVyZ2VJbmxpbmVBbmRJbXBsaWNpCiAgICAgc3R5bGVGcm9tUnVsZXMtPm1fbXV0YWJs
ZVN0eWxlID0gZXh0cmFjdEVkaXRpbmdQcm9wZXJ0aWVzKHN0eWxlRnJvbVJ1bGVzLT5tX211dGFi
bGVTdHlsZS5nZXQoKSwgcHJvcGVydGllc1RvSW5jbHVkZSk7CiAgICAgbWVyZ2VTdHlsZShzdHls
ZUZyb21SdWxlcy0+bV9tdXRhYmxlU3R5bGUuZ2V0KCksIG1vZGUpOwogCi0gICAgY29uc3QgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxIVE1MRWxlbWVudEVxdWl2YWxlbnQ+PiYgZWxlbWVudEVxdWl2
YWxlbnRzID0gaHRtbEVsZW1lbnRFcXVpdmFsZW50cygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZWxlbWVudEVxdWl2YWxlbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChlbGVt
ZW50TWF0Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChlbGVtZW50RXF1aXZh
bGVudHNbaV0uZ2V0KCksIGVsZW1lbnQsIG1vZGUsICp0aGlzKSkKLSAgICAgICAgICAgIGVsZW1l
bnRFcXVpdmFsZW50c1tpXS0+YWRkVG9TdHlsZShlbGVtZW50LCB0aGlzKTsKKyAgICBmb3IgKGF1
dG8mIGVxdWl2YWxlbnQgOiBodG1sRWxlbWVudEVxdWl2YWxlbnRzKCkpIHsKKyAgICAgICAgaWYg
KGVsZW1lbnRNYXRjaGVzQW5kUHJvcGVydHlJc05vdEluSW5saW5lU3R5bGVEZWNsKGVxdWl2YWxl
bnQuZ2V0KCksIGVsZW1lbnQsIG1vZGUsICp0aGlzKSkKKyAgICAgICAgICAgIGVxdWl2YWxlbnQt
PmFkZFRvU3R5bGUoZWxlbWVudCwgdGhpcyk7CiAgICAgfQogCi0gICAgY29uc3QgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxIVE1MQXR0cmlidXRlRXF1aXZhbGVudD4+JiBhdHRyaWJ1dGVFcXVpdmFs
ZW50cyA9IGh0bWxBdHRyaWJ1dGVFcXVpdmFsZW50cygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXR0cmlidXRlRXF1aXZhbGVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGF0
dHJpYnV0ZUVxdWl2YWxlbnRzW2ldLT5hdHRyaWJ1dGVOYW1lKCkgPT0gSFRNTE5hbWVzOjpkaXJB
dHRyKQorICAgIGZvciAoYXV0byYgZXF1aXZhbGVudCA6IGh0bWxBdHRyaWJ1dGVFcXVpdmFsZW50
cygpKSB7CisgICAgICAgIGlmIChlcXVpdmFsZW50LT5hdHRyaWJ1dGVOYW1lKCkgPT0gSFRNTE5h
bWVzOjpkaXJBdHRyKQogICAgICAgICAgICAgY29udGludWU7IC8vIFdlIGRvbid0IHdhbnQgdG8g
aW5jbHVkZSBkaXJlY3Rpb25hbGl0eQotICAgICAgICBpZiAoZWxlbWVudE1hdGNoZXNBbmRQcm9w
ZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2woYXR0cmlidXRlRXF1aXZhbGVudHNbaV0uZ2V0KCks
IGVsZW1lbnQsIG1vZGUsICp0aGlzKSkKLSAgICAgICAgICAgIGF0dHJpYnV0ZUVxdWl2YWxlbnRz
W2ldLT5hZGRUb1N0eWxlKGVsZW1lbnQsIHRoaXMpOworICAgICAgICBpZiAoZWxlbWVudE1hdGNo
ZXNBbmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2woZXF1aXZhbGVudC5nZXQoKSwgZWxl
bWVudCwgbW9kZSwgKnRoaXMpKQorICAgICAgICAgICAgZXF1aXZhbGVudC0+YWRkVG9TdHlsZShl
bGVtZW50LCB0aGlzKTsKICAgICB9CiB9CiAKQEAgLTEyNzcsMTAgKzEyNjksOSBAQCB2b2lkIEVk
aXRpbmdTdHlsZTo6bWVyZ2VTdHlsZShjb25zdCBTdHlsCiBzdGF0aWMgUGFzc1JlZlB0cjxNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KEVsZW1l
bnQqIGVsZW1lbnQsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlKQogewogICAgIFJlZlB0cjxNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0
ZSgpOwotICAgIGF1dG8gbWF0Y2hlZFJ1bGVzID0gZWxlbWVudC0+c3R5bGVSZXNvbHZlcigpLnN0
eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIHJ1bGVzVG9JbmNsdWRlKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFJ1bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChtYXRjaGVkUnVsZXNbaV0tPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICBzdHlsZS0+bWVy
Z2VBbmRPdmVycmlkZU9uQ29uZmxpY3Qoc3RhdGljX3BvaW50ZXJfY2FzdDxTdHlsZVJ1bGU+KG1h
dGNoZWRSdWxlc1tpXSktPnByb3BlcnRpZXMoKSk7CisgICAgZm9yIChhdXRvJiBtYXRjaGVkUnVs
ZSA6IGVsZW1lbnQtPnN0eWxlUmVzb2x2ZXIoKS5zdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVtZW50
LCBydWxlc1RvSW5jbHVkZSkpIHsKKyAgICAgICAgaWYgKG1hdGNoZWRSdWxlLT5pc1N0eWxlUnVs
ZSgpKQorICAgICAgICAgICAgc3R5bGUtPm1lcmdlQW5kT3ZlcnJpZGVPbkNvbmZsaWN0KHN0YXRp
Y19wb2ludGVyX2Nhc3Q8U3R5bGVSdWxlPihtYXRjaGVkUnVsZSktPnByb3BlcnRpZXMoKSk7CiAg
ICAgfQogICAgIAogICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCk7CkBAIC0xNzM5LDEwICsxNzMw
LDkgQEAgc3RhdGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhNdXRhYmxlUwogICAgICAgICBy
ZXR1cm47CiAKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBuZXdUZXh0RGVjb3JhdGlvbiA9IGRv
d25jYXN0PENTU1ZhbHVlTGlzdD4oKnRleHREZWNvcmF0aW9uKS5jb3B5KCk7Ci0gICAgQ1NTVmFs
dWVMaXN0JiB2YWx1ZXNJblJlZlRleHREZWNvcmF0aW9uID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0
PigqcmVmVGV4dERlY29yYXRpb24pOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1
ZXNJblJlZlRleHREZWNvcmF0aW9uLmxlbmd0aCgpOyArK2kpCi0gICAgICAgIG5ld1RleHREZWNv
cmF0aW9uLT5yZW1vdmVBbGwodmFsdWVzSW5SZWZUZXh0RGVjb3JhdGlvbi5pdGVtKGkpKTsKKyAg
ICBmb3IgKGF1dG8mIHZhbHVlIDogIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnJlZlRleHREZWNv
cmF0aW9uKSkKKyAgICAgICAgbmV3VGV4dERlY29yYXRpb24tPnJlbW92ZUFsbCgmdmFsdWUuZ2V0
KCkpOwogCiAgICAgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eShzdHlsZSwgbmV3VGV4dERlY29y
YXRpb24uZ2V0KCksIHByb3BlcnRJRCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCShyZXZpc2lvbiAxOTE1NTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MjAsMTAgKzE4MjAsOSBAQCB2b2lkIEVkaXRvcjo6c2V0
Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nCiAgICAgICAgICAgICBtX2NvbXBvc2l0aW9uU3RhcnQg
PSBiYXNlT2Zmc2V0OwogICAgICAgICAgICAgbV9jb21wb3NpdGlvbkVuZCA9IGV4dGVudE9mZnNl
dDsKICAgICAgICAgICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzID0gdW5kZXJsaW5l
czsKLSAgICAgICAgICAgIHNpemVfdCBudW1VbmRlcmxpbmVzID0gbV9jdXN0b21Db21wb3NpdGlv
blVuZGVybGluZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1VbmRlcmxpbmVzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX2N1c3RvbUNvbXBvc2l0aW9u
VW5kZXJsaW5lc1tpXS5zdGFydE9mZnNldCArPSBiYXNlT2Zmc2V0OwotICAgICAgICAgICAgICAg
IG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzW2ldLmVuZE9mZnNldCArPSBiYXNlT2Zmc2V0
OworICAgICAgICAgICAgZm9yIChhdXRvJiB1bmRlcmxpbmUgOiBtX2N1c3RvbUNvbXBvc2l0aW9u
VW5kZXJsaW5lcykgeworICAgICAgICAgICAgICAgIHVuZGVybGluZS5zdGFydE9mZnNldCArPSBi
YXNlT2Zmc2V0OworICAgICAgICAgICAgICAgIHVuZGVybGluZS5lbmRPZmZzZXQgKz0gYmFzZU9m
ZnNldDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChiYXNlTm9kZS0+cmVuZGVyZXIo
KSkKICAgICAgICAgICAgICAgICBiYXNlTm9kZS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOwpAQCAt
MjQ5Niw5ICsyNDk1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQ
dAogICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsaW5nLCByZXBsYWNlbWVudCk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
TWFya0dyYW1tYXIgJiYgcmVzdWx0VHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBw
YXJhZ3JhcGguY2hlY2tpbmdSYW5nZUNvdmVycyhyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3Ro
KSkgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRp
b24gPj0gMCk7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGRldGFp
bHMgPSByZXN1bHRzW2ldLmRldGFpbHM7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgZGV0YWlscy5zaXplKCk7IGorKykgewotICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1t
YXJEZXRhaWwmIGRldGFpbCA9IGRldGFpbHNbal07CisgICAgICAgICAgICBmb3IgKGF1dG8mIGRl
dGFpbCA6IHJlc3VsdHNbaV0uZGV0YWlscykgewogICAgICAgICAgICAgICAgIEFTU0VSVChkZXRh
aWwubGVuZ3RoID4gMCAmJiBkZXRhaWwubG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICAgICAg
aWYgKHBhcmFncmFwaC5jaGVja2luZ1JhbmdlQ292ZXJzKHJlc3VsdExvY2F0aW9uICsgZGV0YWls
LmxvY2F0aW9uLCBkZXRhaWwubGVuZ3RoKSkgewogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
UmFuZ2U+IGJhZEdyYW1tYXJSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlv
biArIGRldGFpbC5sb2NhdGlvbiwgZGV0YWlsLmxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE5MTU1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NDcs
OSArMTY0Nyw5IEBAIHN0YXRpYyBjb25zdCBDb21tYW5kTWFwJiBjcmVhdGVDb21tYW5kTWEKIAog
ICAgIENvbW1hbmRNYXAmIGNvbW1hbmRNYXAgPSAqbmV3IENvbW1hbmRNYXA7CiAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOyArK2kpIHsKLSAg
ICAgICAgQVNTRVJUKCFjb21tYW5kTWFwLmdldChjb21tYW5kc1tpXS5uYW1lKSk7Ci0gICAgICAg
IGNvbW1hbmRNYXAuc2V0KGNvbW1hbmRzW2ldLm5hbWUsICZjb21tYW5kc1tpXS5jb21tYW5kKTsK
KyAgICBmb3IgKGF1dG8mIGNvbW1hbmQgOiBjb21tYW5kcykgeworICAgICAgICBBU1NFUlQoIWNv
bW1hbmRNYXAuZ2V0KGNvbW1hbmQubmFtZSkpOworICAgICAgICBjb21tYW5kTWFwLnNldChjb21t
YW5kLm5hbWUsICZjb21tYW5kLmNvbW1hbmQpOwogICAgIH0KIAogICAgIHJldHVybiBjb21tYW5k
TWFwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHAJKHJldmlzaW9uIDE5MTU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNj
dW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsOCArMjA2LDggQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKGNvbgogc2l6ZV90IE1hcmt1cEFjY3VtdWxhdG9y
Ojp0b3RhbExlbmd0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5ncykKIHsKICAgICBzaXpl
X3QgbGVuZ3RoID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZ3Muc2l6ZSgp
OyArK2kpCi0gICAgICAgIGxlbmd0aCArPSBzdHJpbmdzW2ldLmxlbmd0aCgpOworICAgIGZvciAo
YXV0byYgc3RyaW5nIDogc3RyaW5ncykKKyAgICAgICAgbGVuZ3RoICs9IHN0cmluZy5sZW5ndGgo
KTsKICAgICByZXR1cm4gbGVuZ3RoOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNwcAkocmV2aXNp
b24gMTkxNTUwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1l
bnRzQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDggQEAgdm9pZCBNZXJn
ZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6ZG9BcAogICAgIGZvciAoTm9kZSogY2hpbGQgPSBt
X2VsZW1lbnQxLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKQogICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKmNoaWxkKTsKIAotICAgIHNpemVfdCBzaXpl
ID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQotICAgICAgICBtX2VsZW1lbnQyLT5pbnNlcnRCZWZvcmUoV1RGOjptb3ZlKGNoaWxkcmVuW2ld
KSwgbV9hdENoaWxkLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBmb3IgKGF1dG8mIGNo
aWxkIDogY2hpbGRyZW4pCisgICAgICAgIG1fZWxlbWVudDItPmluc2VydEJlZm9yZShXVEY6Om1v
dmUoY2hpbGQpLCBtX2F0Q2hpbGQuZ2V0KCksIElHTk9SRV9FWENFUFRJT04pOwogCiAgICAgbV9l
bGVtZW50MS0+cmVtb3ZlKElHTk9SRV9FWENFUFRJT04pOwogfQpAQCAtNzksOSArNzgsOCBAQCB2
b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb1VuCiAgICAgZm9yIChOb2RlKiBj
aGlsZCA9IG1fZWxlbWVudDItPmZpcnN0Q2hpbGQoKTsgY2hpbGQgJiYgY2hpbGQgIT0gYXRDaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY2hpbGRyZW4uYXBwZW5k
KCpjaGlsZCk7CiAKLSAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9lbGVtZW50MS0+YXBwZW5k
Q2hpbGQoV1RGOjptb3ZlKGNoaWxkcmVuW2ldKSwgZWMpOworICAgIGZvciAoYXV0byYgY2hpbGQg
OiBjaGlsZHJlbikKKyAgICAgICAgbV9lbGVtZW50MS0+YXBwZW5kQ2hpbGQoV1RGOjptb3ZlKGNo
aWxkKSwgZWMpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE5MTU1
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yODYsOSArMjg2LDggQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdt
ZW50OjpyZW1vdmVVbnJlbmRlcgogICAgICAgICAgICAgdW5yZW5kZXJlZC5hcHBlbmQobm9kZSk7
CiAgICAgfQogCi0gICAgc2l6ZV90IG4gPSB1bnJlbmRlcmVkLnNpemUoKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG47ICsraSkKLSAgICAgICAgcmVtb3ZlTm9kZSh1bnJlbmRlcmVkW2ld
KTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiB1bnJlbmRlcmVkKQorICAgICAgICByZW1vdmVOb2Rl
KG5vZGUpOwogfQogCiB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZUludGVyY2hhbmdl
Tm9kZXMoTm9kZSogY29udGFpbmVyKQpAQCAtNTAyLDggKzUwMSw4IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHUKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5l
d0lubGluZVN0eWxlLT5leHRyYWN0Q29uZmxpY3RpbmdJbXBsaWNpdFN0eWxlT2ZBdHRyaWJ1dGVz
KCZodG1sRWxlbWVudCwgRWRpdGluZ1N0eWxlOjpQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24sIDAs
IGF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgIEVkaXRpbmdTdHlsZTo6RG9Ob3RFeHRy
YWN0TWF0Y2hpbmdTdHlsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiA8Zm9udCBz
aXplPSIzIiBzdHlsZT0iZm9udC1zaXplOiAyMHB4OyI+IGlzIGNvbnZlcnRlZCB0byA8Zm9udCBz
dHlsZT0iZm9udC1zaXplOiAyMHB4OyI+Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlc1tpXSk7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogYXR0cmlidXRlcykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTczMyw4ICs3MzIsOCBAQCBz
dGF0aWMgdm9pZCByZW1vdmVIZWFkQ29udGVudHMoUmVwbGFjZW1lCiAgICAgICAgICsraXQ7CiAg
ICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytp
KQotICAgICAgICBmcmFnbWVudC5yZW1vdmVOb2RlKHRvUmVtb3ZlW2ldKTsKKyAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiB0b1JlbW92ZSkKKyAgICAgICAgZnJhZ21lbnQucmVtb3ZlTm9kZShlbGVt
ZW50KTsKIH0KIAogLy8gUmVtb3ZlIHN0eWxlIHNwYW5zIGJlZm9yZSBpbnNlcnRpb24gaWYgdGhl
eSBhcmUgdW5uZWNlc3NhcnkuICBJdCdzIGZhc3RlciBiZWNhdXNlIHdlJ2xsIApJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAkocmV2aXNpb24gMTkxNTUwKQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTUsOCArMTE1LDggQEAgU3BlbGxDaGVja2VyOjp+U3BlbGxDaGVja2VyKCkKIHsKICAgICBp
ZiAobV9wcm9jZXNzaW5nUmVxdWVzdCkKICAgICAgICAgbV9wcm9jZXNzaW5nUmVxdWVzdC0+cmVx
dWVzdGVyRGVzdHJveWVkKCk7Ci0gICAgZm9yIChSZXF1ZXN0UXVldWU6Oml0ZXJhdG9yIGkgPSBt
X3JlcXVlc3RRdWV1ZS5iZWdpbigpOyBpICE9IG1fcmVxdWVzdFF1ZXVlLmVuZCgpOyArK2kpCi0g
ICAgICAgICgqaSktPnJlcXVlc3RlckRlc3Ryb3llZCgpOworICAgIGZvciAoYXV0byYgcXVldWUg
OiBtX3JlcXVlc3RRdWV1ZSkKKyAgICAgICAgcXVldWUtPnJlcXVlc3RlckRlc3Ryb3llZCgpOwog
fQogCiBUZXh0Q2hlY2tlckNsaWVudCogU3BlbGxDaGVja2VyOjpjbGllbnQoKSBjb25zdApAQCAt
MTg5LDExICsxODksMTEgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmVucXVldWVSZXF1ZXN0KFBhc3NS
ZQogewogICAgIEFTU0VSVChyZXF1ZXN0KTsKIAotICAgIGZvciAoUmVxdWVzdFF1ZXVlOjppdGVy
YXRvciBpdCA9IG1fcmVxdWVzdFF1ZXVlLmJlZ2luKCk7IGl0ICE9IG1fcmVxdWVzdFF1ZXVlLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChyZXF1ZXN0LT5yb290RWRpdGFibGVFbGVtZW50KCkg
IT0gKCppdCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICBmb3IgKGF1dG8mIHF1ZXVlIDog
bV9yZXF1ZXN0UXVldWUpIHsKKyAgICAgICAgaWYgKHJlcXVlc3QtPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSAhPSBxdWV1ZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgKml0ID0gcmVxdWVzdDsKKyAgICAgICAgcXVldWUgPSByZXF1ZXN0Owog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
bGl0RWxlbWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE5MTU1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDkgKzYzLDggQEAgdm9pZCBTcGxpdEVsZW1lbnRDb21tYW5kOjpleGVjdXRlQXBwbHkoKQog
ICAgIC8vIERlbGV0ZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgYmVjYXVz
ZSB0aGUgc2FtZSBpZCBjYW5ub3QgYmUgdXNlZCBmb3IgbW9yZSB0aGFuIG9uZSBlbGVtZW50CiAg
ICAgbV9lbGVtZW50Mi0+cmVtb3ZlQXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKTsKIAotICAg
IHNpemVfdCBzaXplID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKQotICAgICAgICBtX2VsZW1lbnQxLT5hcHBlbmRDaGlsZChXVEY6Om1vdmUo
Y2hpbGRyZW5baV0pLCBlYyk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQorICAg
ICAgICBtX2VsZW1lbnQxLT5hcHBlbmRDaGlsZChXVEY6Om1vdmUoY2hpbGQpLCBlYyk7CiB9CiAg
ICAgCiB2b2lkIFNwbGl0RWxlbWVudENvbW1hbmQ6OmRvQXBwbHkoKQpAQCAtODYsOSArODUsOCBA
QCB2b2lkIFNwbGl0RWxlbWVudENvbW1hbmQ6OmRvVW5hcHBseSgpCiAKICAgICBSZWZQdHI8Tm9k
ZT4gcmVmQ2hpbGQgPSBtX2VsZW1lbnQyLT5maXJzdENoaWxkKCk7CiAKLSAgICBzaXplX3Qgc2l6
ZSA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKLSAgICAgICAgbV9lbGVtZW50Mi0+aW5zZXJ0QmVmb3JlKFdURjo6bW92ZShjaGlsZHJlbltp
XSksIHJlZkNoaWxkLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBmb3IgKGF1dG8mIGNo
aWxkIDogY2hpbGRyZW4pCisgICAgICAgIG1fZWxlbWVudDItPmluc2VydEJlZm9yZShXVEY6Om1v
dmUoY2hpbGQpLCByZWZDaGlsZC5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAKICAgICAvLyBS
ZWNvdmVyIHRoZSBpZCBhdHRyaWJ1dGUgb2YgdGhlIG9yaWdpbmFsIGVsZW1lbnQuCiAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBpZCA9IG1fZWxlbWVudDEtPmdldElkQXR0cmlidXRlKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCShyZXZp
c2lvbiAxOTE1NTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NywzOCArMzQ3LDM3IEBAIFN0cmluZyBUZXh0Q2hl
Y2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3MKICAgICAgICAgICAgICAgICBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiByZXN1bHRzOwogICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1R5cGVN
YXNrIGNoZWNraW5nVHlwZXMgPSBjaGVja0dyYW1tYXIgPyAoVGV4dENoZWNraW5nVHlwZVNwZWxs
aW5nIHwgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpIDogVGV4dENoZWNraW5nVHlwZVNwZWxsaW5n
OwogICAgICAgICAgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCptX2NsaWVudC0+dGV4dENo
ZWNrZXIoKSwgcGFyYWdyYXBoU3RyaW5nLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVz
dWx0cy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0Q2hlY2tp
bmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiByZXN1bHQtPmxvY2F0
aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1bHQtPmxvY2F0aW9uICsgcmVzdWx0LT5s
ZW5ndGggPD0gY3VycmVudEVuZE9mZnNldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdC0+bGVuZ3RoID4gMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0LT5sb2NhdGlvbiA+PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5n
TG9jYXRpb24gPSByZXN1bHQtPmxvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgbWlz
c3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5nKHJlc3VsdC0+bG9jYXRpb24s
IHJlc3VsdC0+bGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcmVzdWx0IDog
cmVzdWx0cykgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0gVGV4dENo
ZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdC5sb2NhdGlvbiA+PSBjdXJyZW50U3RhcnRPZmZz
ZXQgJiYgcmVzdWx0LmxvY2F0aW9uICsgcmVzdWx0Lmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0Lmxlbmd0aCA+IDApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC5sb2NhdGlvbiA+PSAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nTG9jYXRpb24gPSByZXN1bHQubG9jYXRpb247
CisgICAgICAgICAgICAgICAgICAgICAgICBtaXNzcGVsbGVkV29yZCA9IHBhcmFncmFwaFN0cmlu
Zy5zdWJzdHJpbmcocmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGVkV29yZC5sZW5ndGgoKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBpZiAoY2hlY2tHcmFtbWFyICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdU
eXBlR3JhbW1hciAmJiByZXN1bHQtPmxvY2F0aW9uIDwgY3VycmVudEVuZE9mZnNldCAmJiByZXN1
bHQtPmxvY2F0aW9uICsgcmVzdWx0LT5sZW5ndGggPiBjdXJyZW50U3RhcnRPZmZzZXQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQtPmxlbmd0aCA+IDApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC0+bG9jYXRpb24gPj0gMCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjaGVja0dyYW1tYXIgJiYgcmVzdWx0LnR5cGUgPT0gVGV4dENoZWNr
aW5nVHlwZUdyYW1tYXIgJiYgcmVzdWx0LmxvY2F0aW9uIDwgY3VycmVudEVuZE9mZnNldCAmJiBy
ZXN1bHQubG9jYXRpb24gKyByZXN1bHQubGVuZ3RoID4gY3VycmVudFN0YXJ0T2Zmc2V0KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0Lmxlbmd0aCA+IDApOworICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC5sb2NhdGlvbiA+PSAwKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IGdyYW1tYXIg
cmVzdWx0LCBzaW5jZSB0aGVyZSBtaWdodCBzdGlsbCBiZSBhIHNwZWxsaW5nIHJlc3VsdCBhZnRl
cgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgYmVnaW5zIGJ1dCBiZWZvcmUgdGhlIGZp
cnN0IGRldGFpbCBpbiBpdCwgYnV0IHdlIGNhbiBzdG9wIGlmIHdlIGZpbmQgYSBzZWNvbmQgZ3Jh
bW1hciByZXN1bHQuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRHcmFtbWFyKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlc3VsdC0+ZGV0YWlscy5zaXplKCk7IGorKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwqIGRldGFp
bCA9ICZyZXN1bHQtPmRldGFpbHNbal07CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgcmVzdWx0LmRldGFpbHMuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmcmVzdWx0
LmRldGFpbHNbal07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbC0+
bGVuZ3RoID4gMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbC0+
bG9jYXRpb24gPj0gMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+
bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1
bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiArIGRldGFpbC0+bGVuZ3RoIDw9IGN1cnJl
bnRFbmRPZmZzZXQgJiYgKCFmb3VuZEdyYW1tYXIgfHwgcmVzdWx0LT5sb2NhdGlvbiArIGRldGFp
bC0+bG9jYXRpb24gPCBncmFtbWFyRGV0YWlsTG9jYXRpb24pKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdC5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gPj0gY3Vy
cmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gKyBk
ZXRhaWwtPmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0ICYmICghZm91bmRHcmFtbWFyIHx8IHJl
c3VsdC5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gPCBncmFtbWFyRGV0YWlsTG9jYXRpb24p
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJEZXRhaWxJbmRleCA9
IGo7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJEZXRhaWxMb2NhdGlv
biA9IHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBncmFtbWFyRGV0YWlsTG9jYXRpb24gPSByZXN1bHQubG9jYXRpb24g
KyBkZXRhaWwtPmxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Vu
ZEdyYW1tYXIgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZEdyYW1t
YXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlTG9jYXRpb24g
PSByZXN1bHQtPmxvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dEdyYW1t
YXJEZXRhaWwgPSByZXN1bHQtPmRldGFpbHNbZ3JhbW1hckRldGFpbEluZGV4XTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5nLnN1
YnN0cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JhbW1hclBocmFzZUxvY2F0aW9uID0gcmVzdWx0LmxvY2F0aW9uOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dEdyYW1tYXJEZXRhaWwgPSByZXN1bHQuZGV0
YWlsc1tncmFtbWFyRGV0YWlsSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJh
ZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5nKHJlc3VsdC5sb2NhdGlv
biwgcmVzdWx0Lmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJh
ZEdyYW1tYXJQaHJhc2UubGVuZ3RoKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICB9CkBAIC01ODAsMTAgKzU3OSw5IEBAIFZlY3RvcjxTdHJpbmc+IFRl
eHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3MKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBy
ZXN1bHRzOwogICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMgPSBjaGVja0dy
YW1tYXIgPyAoVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZUdyYW1t
YXIpIDogVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOwogICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KCptX2NsaWVudC0+dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hlY2tpbmdUeXBl
cywgcmVzdWx0cyk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQg
PSAmcmVzdWx0c1tpXTsKLSAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdU
eXBlU3BlbGxpbmcgJiYgcGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VNYXRjaGVzKHJlc3VsdC0+bG9j
YXRpb24sIHJlc3VsdC0+bGVuZ3RoKSkgeworCisgICAgZm9yIChhdXRvJiByZXN1bHQgOiByZXN1
bHRzKSB7CisgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcgJiYgcGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VNYXRjaGVzKHJlc3VsdC5sb2NhdGlvbiwgcmVz
dWx0Lmxlbmd0aCkpIHsKICAgICAgICAgICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IHBhcmFn
cmFwaC5jaGVja2luZ1N1YnN0cmluZygpOwogICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsZWRX
b3JkLmxlbmd0aCgpKTsKICAgICAgICAgICAgIG1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLT5nZXRH
dWVzc2VzRm9yV29yZChtaXNzcGVsbGVkV29yZCwgU3RyaW5nKCksIGd1ZXNzZXMpOwpAQCAtNTk1
LDIwICs1OTMsMTggQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzcwog
ICAgIAogICAgIGlmICghY2hlY2tHcmFtbWFyKQogICAgICAgICByZXR1cm4gZ3Vlc3NlczsKLSAg
ICAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0c1tp
XTsKLSAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAm
JiBwYXJhZ3JhcGguaXNDaGVja2luZ1JhbmdlQ292ZXJlZEJ5KHJlc3VsdC0+bG9jYXRpb24sIHJl
c3VsdC0+bGVuZ3RoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJl
c3VsdC0+ZGV0YWlscy5zaXplKCk7IGorKykgewotICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1t
YXJEZXRhaWwqIGRldGFpbCA9ICZyZXN1bHQtPmRldGFpbHNbal07Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKGRldGFpbC0+bGVuZ3RoID4gMCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGRldGFp
bC0+bG9jYXRpb24gPj0gMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaC5jaGVja2lu
Z1JhbmdlTWF0Y2hlcyhyZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiwgZGV0YWls
LT5sZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBiYWRHcmFtbWFyUGhyYXNl
ID0gcGFyYWdyYXBoLnRleHRTdWJzdHJpbmcocmVzdWx0LT5sb2NhdGlvbiwgcmVzdWx0LT5sZW5n
dGgpOworCisgICAgZm9yIChhdXRvJiByZXN1bHQgOiByZXN1bHRzKSB7CisgICAgICAgIGlmIChy
ZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBwYXJhZ3JhcGguaXNDaGVj
a2luZ1JhbmdlQ292ZXJlZEJ5KHJlc3VsdC5sb2NhdGlvbiwgcmVzdWx0Lmxlbmd0aCkpIHsKKyAg
ICAgICAgICAgIGZvciAoYXV0byYgZGV0YWlsIDogcmVzdWx0LmRldGFpbHMpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoZGV0YWlsLmxlbmd0aCA+IDApOworICAgICAgICAgICAgICAgIEFTU0VS
VChkZXRhaWwubG9jYXRpb24gPj0gMCk7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaC5j
aGVja2luZ1JhbmdlTWF0Y2hlcyhyZXN1bHQubG9jYXRpb24gKyBkZXRhaWwubG9jYXRpb24sIGRl
dGFpbC5sZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBiYWRHcmFtbWFyUGhy
YXNlID0gcGFyYWdyYXBoLnRleHRTdWJzdHJpbmcocmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVu
Z3RoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2UubGVuZ3Ro
KCkpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZGV0YWls
LT5ndWVzc2VzLnNpemUoKTsgaysrKQotICAgICAgICAgICAgICAgICAgICAgICAgZ3Vlc3Nlcy5h
cHBlbmQoZGV0YWlsLT5ndWVzc2VzW2tdKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQt
PnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCAqZGV0
YWlsKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBndWVzcyA6IGRldGFpbC5ndWVz
c2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgZ3Vlc3Nlcy5hcHBlbmQoZ3Vlc3MpOworICAg
ICAgICAgICAgICAgICAgICBtX2NsaWVudC0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3Ry
aW5nKGJhZEdyYW1tYXJQaHJhc2UsIGRldGFpbCk7CiAgICAgICAgICAgICAgICAgICAgIHVuZ3Jh
bW1hdGljYWwgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3Vlc3NlczsKICAg
ICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50
c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAxOTE1NTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDggQEAgdm9pZCBXcmFwQ29udGVudHNJ
bkR1bW15U3BhbkNvbW1hbmQ6OmV4ZQogICAgIGZvciAoTm9kZSogY2hpbGQgPSBtX2VsZW1lbnQt
PmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAg
ICAgIGNoaWxkcmVuLmFwcGVuZCgqY2hpbGQpOwogCi0gICAgc2l6ZV90IHNpemUgPSBjaGlsZHJl
bi5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAg
IG1fZHVtbXlTcGFuLT5hcHBlbmRDaGlsZChXVEY6Om1vdmUoY2hpbGRyZW5baV0pLCBJR05PUkVf
RVhDRVBUSU9OKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCisgICAgICAgIG1f
ZHVtbXlTcGFuLT5hcHBlbmRDaGlsZChXVEY6Om1vdmUoY2hpbGQpLCBJR05PUkVfRVhDRVBUSU9O
KTsKIAogICAgIG1fZWxlbWVudC0+YXBwZW5kQ2hpbGQoKm1fZHVtbXlTcGFuLCBJR05PUkVfRVhD
RVBUSU9OKTsKIH0KQEAgLTY5LDkgKzY4LDggQEAgdm9pZCBXcmFwQ29udGVudHNJbkR1bW15U3Bh
bkNvbW1hbmQ6OmRvVQogICAgIGZvciAoTm9kZSogY2hpbGQgPSBtX2R1bW15U3Bhbi0+Zmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY2hp
bGRyZW4uYXBwZW5kKCpjaGlsZCk7CiAKLSAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLnNpemUo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9lbGVt
ZW50LT5hcHBlbmRDaGlsZChXVEY6Om1vdmUoY2hpbGRyZW5baV0pLCBJR05PUkVfRVhDRVBUSU9O
KTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCisgICAgICAgIG1fZWxlbWVudC0+
YXBwZW5kQ2hpbGQoV1RGOjptb3ZlKGNoaWxkKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAKICAgICBt
X2R1bW15U3Bhbi0+cmVtb3ZlKElHTk9SRV9FWENFUFRJT04pOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTkxNTUwKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsOSArMTEwLDggQEAgc3RhdGlj
IHZvaWQgY29tcGxldGVVUkxzKERvY3VtZW50RnJhZ21lbgogICAgICAgICB9CiAgICAgfQogCi0g
ICAgc2l6ZV90IG51bUNoYW5nZXMgPSBjaGFuZ2VzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bUNoYW5nZXM7ICsraSkKLSAgICAgICAgY2hhbmdlc1tpXS5hcHBseSgpOwor
ICAgIGZvciAoYXV0byYgY2hhbmdlIDogY2hhbmdlcykKKyAgICAgICAgY2hhbmdlLmFwcGx5KCk7
CiB9CiAgICAgCiBjbGFzcyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvciBmaW5hbCA6IHB1YmxpYyBN
YXJrdXBBY2N1bXVsYXRvciB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9y
SU9TLm1tCShyZXZpc2lvbiAxOTE1NTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9F
ZGl0b3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2OCw4ICs1NjgsOCBAQCBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6Y3JlCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gY2xpZW50KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0
cmluZyhzdHJpbmcsIHJlc291cmNlcyk7CiAKICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRl
ciA9IG1fZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkgewotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMCwgc2l6ZSA9IHJlc291cmNlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpCi0gICAg
ICAgICAgICBsb2FkZXItPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZXNbaV0pOworICAgICAg
ICBmb3IgKGF1dG8mIHJlc291cmNlIDogcmVzb3VyY2VzKQorICAgICAgICAgICAgbG9hZGVyLT5h
ZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UpOwogICAgIH0KIAogICAgIGlmICghd2FzRGVmZXJy
aW5nQ2FsbGJhY2tzKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5t
bQkocmV2aXNpb24gMTkxNTUwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9y
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MTQsOCArNTE0LDcgQEAgYm9vbCBFZGl0b3I6Oldl
YkNvbnRlbnRSZWFkZXI6OnJlYWRXZWJBcgogCiBib29sIEVkaXRvcjo6V2ViQ29udGVudFJlYWRl
cjo6cmVhZEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCiB7Ci0gICAgc2l6
ZV90IHNpemUgPSBwYXRocy5zaXplKCk7Ci0gICAgaWYgKCFzaXplKQorICAgIGlmIChwYXRocy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghZnJhbWUuZG9jdW1l
bnQoKSkKQEAgLTUyNCw4ICs1MjMsNyBAQCBib29sIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6
cmVhZEZpbGVuCiAKICAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21l
bnQoKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAg
IFN0cmluZyB0ZXh0ID0gcGF0aHNbaV07CisgICAgZm9yIChhdXRvJiB0ZXh0IDogcGF0aHMpIHsK
ICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgICAgICBSZWY8SFRNTEF0dGFjaG1l
bnRFbGVtZW50PiBhdHRhY2htZW50ID0gSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoYXR0
YWNobWVudFRhZywgZG9jdW1lbnQpOwogICAgICAgICBhdHRhY2htZW50LT5zZXRGaWxlKEZpbGU6
OmNyZWF0ZShbW05TVVJMIGZpbGVVUkxXaXRoUGF0aDp0ZXh0XSBwYXRoXSkucHRyKCkpOwpAQCAt
NjYwLDggKzY1OCw4IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjpjcmUK
ICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjbGllbnQoKS0+ZG9jdW1l
bnRGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKHN0cmluZywgcmVzb3VyY2VzKTsKIAogICAg
IGlmIChEb2N1bWVudExvYWRlciogbG9hZGVyID0gbV9mcmFtZS5sb2FkZXIoKS5kb2N1bWVudExv
YWRlcigpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcmVzb3VyY2VzLnNp
emUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGxvYWRlci0+YWRkQXJjaGl2ZVJlc291
cmNlKHJlc291cmNlc1tpXSk7CisgICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiByZXNvdXJj
ZXMpCisgICAgICAgICAgICBsb2FkZXItPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZSk7CiAg
ICAgfQogCiAgICAgaWYgKCF3YXNEZWZlcnJpbmdDYWxsYmFja3MpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>