<?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>208074</bug_id>
          
          <creation_ts>2020-02-21 13:51:50 -0800</creation_ts>
          <short_desc>AXIsolatedObject support for tables.</short_desc>
          <delta_ts>2020-02-23 16:55:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andres Gonzalez">andresg_22</reporter>
          <assigned_to name="Andres Gonzalez">andresg_22</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1621779</commentid>
    <comment_count>0</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-02-21 13:51:50 -0800</bug_when>
    <thetext>AXIsolatedObject support for tables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621786</commentid>
    <comment_count>1</comment_count>
      <attachid>391428</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-02-21 14:41:03 -0800</bug_when>
    <thetext>Created attachment 391428
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621883</commentid>
    <comment_count>2</comment_count>
      <attachid>391462</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-02-22 10:21:23 -0800</bug_when>
    <thetext>Created attachment 391462
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621890</commentid>
    <comment_count>3</comment_count>
      <attachid>391462</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2020-02-22 12:05:44 -0800</bug_when>
    <thetext>Comment on attachment 391462
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityTableRow.cpp:71
&gt; +    return is&lt;AccessibilityTable&gt;(table)  &amp;&amp; downcast&lt;AccessibilityTable&gt;(*table).isExposable();

extra space after

isAccessibilityTable&gt;(table)

&gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp:481
&gt; +    auto cell = Accessibility::retrieveValueFromMainThread&lt;AXCoreObject*&gt;([&amp;columnIndex, &amp;rowIndex, this] () -&gt; AXCoreObject* {

I feel like we should get the cellID on the main thread instead of returning the object off the main thread and then access ivars off the main thread

&gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h:398
&gt; +    int axColumnCount() const override { return intAttributeValue(AXPropertyName::AXColumnCount); }

can these be unsigned or do they need to be int?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622004</commentid>
    <comment_count>4</comment_count>
      <attachid>391492</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-02-23 10:33:56 -0800</bug_when>
    <thetext>Created attachment 391492
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622005</commentid>
    <comment_count>5</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-02-23 10:37:33 -0800</bug_when>
    <thetext>(In reply to chris fleizach from comment #3)
&gt; Comment on attachment 391462 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=391462&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityTableRow.cpp:71
&gt; &gt; +    return is&lt;AccessibilityTable&gt;(table)  &amp;&amp; downcast&lt;AccessibilityTable&gt;(*table).isExposable();
&gt; 
&gt; extra space after
&gt; 
&gt; isAccessibilityTable&gt;(table)

Fixed.
&gt; 
&gt; &gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp:481
&gt; &gt; +    auto cell = Accessibility::retrieveValueFromMainThread&lt;AXCoreObject*&gt;([&amp;columnIndex, &amp;rowIndex, this] () -&gt; AXCoreObject* {
&gt; 
&gt; I feel like we should get the cellID on the main thread instead of returning
&gt; the object off the main thread and then access ivars off the main thread

Good point, done.
&gt; 
&gt; &gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h:398
&gt; &gt; +    int axColumnCount() const override { return intAttributeValue(AXPropertyName::AXColumnCount); }
&gt; 
&gt; can these be unsigned or do they need to be int?

They can be -1. In the implementation we have the following comment:

    // The ARIA spec states, &quot;Authors must set the value of aria-rowcount to an integer equal to the
    // number of rows in the full table. If the total number of rows is unknown, authors must set
    // the value of aria-rowcount to -1 to indicate that the value should not be calculated by the
    // user agent.&quot; ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622041</commentid>
    <comment_count>6</comment_count>
      <attachid>391492</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-23 16:54:47 -0800</bug_when>
    <thetext>Comment on attachment 391492
Patch

Clearing flags on attachment: 391492

Committed r257200: &lt;https://trac.webkit.org/changeset/257200&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622042</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-23 16:54:49 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622043</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-23 16:55:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/59710821&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391428</attachid>
            <date>2020-02-21 14:41:03 -0800</date>
            <delta_ts>2020-02-22 10:21:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208074-20200221174101.patch</filename>
            <type>text/plain</type>
            <size>156586</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2OTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWNhNDFkZWNhZDdhMzRm
MDEyMzIzYWQ4NGQzNzQyZDZkYTA0ODI1My4uMGZjNTc5NTg2NTUyM2NjNTM5MWY4MTk4ZmVmNjlj
ZDdhMjZiNWVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOCBAQAorMjAyMC0wMi0yMSAgQW5k
cmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CisKKyAgICAgICAgQVhJc29sYXRl
ZE9iamVjdCBzdXBwb3J0IGZvciB0YWJsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDgwNzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNvZGUgYW5kIHNvbWUgdXRpbGl0eSBmdW5jdGlv
bnMgaW4KKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYXNzdW1lIHRoYXQgQVggb2Jq
ZWN0cyBjYW4gYmUgZG93bmNhc3QgdG8gYQorICAgICAgICBzcGVjaWFsaXplZCBzdWJjbGFzcyBs
aWtlIEFjY2Vzc2liaWxpdHlUYWJsZS4gVGhhdCBpcyBub3QgdHJ1ZSBmb3IKKyAgICAgICAgQVhJ
c29sYXRlZE9iamVjdHMsIGFuZCB0aGUgcmVhc29uIHdoeSB0YWJsZXMgZG9u4oCZdCB3b3JrIGlu
IElzb2xhdGVkVHJlZQorICAgICAgICBtb2RlLgorCisgICAgICAgIFRvIHNvbHZlIHRoaXMgcHJv
YmxlbSwgdGhpcyBwYXRjaCBleHBvc2VzIHRoZSBBY2Nlc3NpYmlsaXR5VGFibGUKKyAgICAgICAg
aW50ZXJmYWNlIGFzIHBhcnQgb2YgdGhlIEFYQ29yZU9iamVjdC4gVGh1cyBpdCBlbGltaW5hdGVz
IHRoZSBuZWVkIHRvCisgICAgICAgIGRvd25jYXN0IGFuIEFYIG9iamVjdCB0byBhbiBBY2Nlc3Np
YmlsaXR5VGFibGUuIEl0IGFsc28gaW1wbGVtZW50cyB0aGUKKyAgICAgICAgQWNjZXNzaWJpbGl0
eVRhYmxlIGludGVyZmFjZSBpbiB0aGUgQVhJc29sYXRlZE9iamVjdCBjbGFzcy4gVGhlIHNhbWUK
KyAgICAgICAgYXBwcm9hY2ggd2lsbCBiZSB1c2VkIGluIHN1YnNlcXVlbnQgcGF0Y2hlcyBmb3Ig
b3RoZXIgc3BlY2lhbGl6ZWQKKyAgICAgICAgaW50ZXJmYWNlcyB1c2VkIGJ5IGNsaWVudCBjb2Rl
LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRDaGlsZHJlbik6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaDoKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cGFyZW50VGFibGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cm93SW5kZXhSYW5n
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpj
b2x1bW5JbmRleFJhbmdlIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZFJvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWRSb3c6OmRpc2Nsb3NlZFJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRCeVJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OnBhcmVudFRhYmxlIGNvbnN0KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNob3VsZFVzZUFjY2Vzc2liaWxpdHlPYmplY3RJbm5lclRleHQpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjph
cHBlbmRDaGlsZHJlblRvQXJyYXkpOiBVc2UgQVhDb3JlT2JqZWN0IGludGVyZmFjZSBpbnN0ZWFk
IG9mIGRvd25jYXN0aW5nLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eTo6aXNBY2Nl
c3NpYmlsaXR5T2JqZWN0U2VhcmNoTWF0Y2hBdEluZGV4KTogVXNlIEFYQ29yZU9iamVjdCBpbnRl
cmZhY2UgaW5zdGVhZCBvZiBkb3duY2FzdGluZy4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3RJbnRlcmZhY2UuaDogQVhDb3JlT2JqZWN0IG5vdyBleHBvc2VzIHRoZSB0YWJsZSBp
bnRlcmZhY2UuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFy
aWFTZWxlY3RlZFJvd3MpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6QWNjZXNzaWJp
bGl0eVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aW5pdCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRXhwb3NhYmxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6YWRkQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpoZWFkZXJDb250YWluZXIpOiBS
ZXR1cm5zIGFuIEFYQ29yZU9iamVjdC4KKworICAgICAgICBUaGUgZm9sbG93aW5nIG1ldGhvZHMg
bm93IHJldHVybiBhIHZlY3RvciBvZiBvYmplY3RzIGluc3RlYWQgb2YgdGFraW5nCisgICAgICAg
IGFuZCBvdXQgcGFyYW1ldGVyLiBSVk8gZ3VhcmFudGllcyB0aGF0IHRoaXMgZG9lcyBub3QgY2F1
c2UgZXh0cmEgY29weS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y29s
dW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnJvd3MpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpjb2x1bW5IZWFkZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6cm93SGVhZGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnZpc2libGVSb3dzKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbHMpOgorCisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5VGFibGU6OnRhYmxlTGV2ZWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVRhYmxlOjpyb2xlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVRhYmxlOjpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnRpdGxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aXNFeHBvc2FibGVUaHJvdWdoQWNjZXNz
aWJpbGl0eSBjb25zdCk6IFJlbmFtZWQgdG8ganVzdCBpc0V4cG9zYWJsZS4KKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVRhYmxlOjpzdXBwb3J0c1NlbGVjdGVkUm93cyk6IERlbGV0ZWQuCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnBhcmVudFRhYmxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmlzVGFibGVDZWxsIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmNvbHVtbkhlYWRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6cm93SGVhZGVycyk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmg6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjpoZWFkZXJPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjphZGRDaGlsZHJlbik6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVy
OjphZGRDaGlsZHJlbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGVSb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlUm93Ojppc1Rh
YmxlUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6
cGFyZW50VGFibGUgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGUuY3BwOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJs
ZS5jcHA6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5IZWFkZXIpOgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93SGVhZGVyKToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVDZWxsLmNwcDoK
KyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRDb2x1bW5IZWFkZXJDZWxscyk6
CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0Um93SGVhZGVyQ2VsbHMpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
SU9TLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZVBh
cmVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5SGVhZGVyRWxlbWVudHNdKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRP
YmplY3Q6OmluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNv
bGF0ZWRPYmplY3Q6OnNldE9iamVjdFZlY3RvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkFYSXNvbGF0ZWRPYmplY3Q6OmNlbGxGb3JDb2x1bW5BbmRSb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZE9iamVjdDo6ZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5VGFi
bGVJbnN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0Ojpp
c0RhdGFUYWJsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29s
YXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0
ZWRUcmVlOjpub2RlRm9ySUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRy
ZWU6Om9iamVjdHNGb3JJRHMgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQVhP
YmplY3RDYWNoZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RQ
bGF0Zm9ybU5vdGlmaWNhdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgIEluIGFkZGl0aW9uIHRvIHJl
cGxhY2luZyB0aGUgZG93bmNhc3QgdG8gQWNjZXNzaWJpbGl0eVRhYmxlLCBjbGVhbmVkIHVwCisg
ICAgICAgIHRoZSB1bm5lY2Vzc2FyeSBjYWxscyB0byBzZWxmLmF4QmFja2luZ09iamVjdC4gVGhp
cyB1c2VkIHRvIGJlIGEgbWFjcm8sCisgICAgICAgIGJ1dCBpdCBpcyBub3cgYSBtZXRob2QgdGhh
dCBjaGVjayBmb3IgdGhlIGV4ZWN1dGlvbiB0aHJlYWQgYW5kIHJldHVybnMKKyAgICAgICAgdGhl
IGFwcHJvcHJpYXRlIEFYIG9iamVjdC4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVNldFZhbHVlOmZvckF0dHJpYnV0ZTpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpdKToKKwogMjAyMC0wMi0xOSAgWmFsYW4gQnVq
dGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0Zsb2F0c10gRmxvYXRpbmdD
b250ZXh0Ojpjb25zdHJhaW50cyBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgZW1wdHkgY2FuZGlk
YXRlIHJhbmdlcyAocG9pbnRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCmluZGV4IDAwMGFkZDRjM2FhMjI4ZjJlM2Y2
MDUxODAxMDIwNTlmYWQxMTIzN2QuLjVhMmIzNGMyOWZmZjg3MzRiYjliMTdhNzdjZDU1NmIwYzcz
YTFmYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlBUklBR3JpZC5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIEFjY2Vzc2liaWxp
dHlBUklBR3JpZDo6YWRkQ2hpbGRyZW4oKQogewogICAgIEFTU0VSVCghbV9oYXZlQ2hpbGRyZW4p
OyAKICAgICAKLSAgICBpZiAoIWlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkgewor
ICAgIGlmICghaXNFeHBvc2FibGUoKSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphZGRDaGlsZHJlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ1LDggKzE0
NSw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRDaGlsZHJlbigpCiAgICAgICAg
IGlmICghY29sdW1uLmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKICAgICAgICAgICAgIG1fY2hp
bGRyZW4uYXBwZW5kKCZjb2x1bW4pOwogICAgIH0KLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBoZWFkZXJDb250YWluZXJPYmplY3QgPSBoZWFkZXJDb250YWluZXIoKTsKKworICAgIGF1
dG8qIGhlYWRlckNvbnRhaW5lck9iamVjdCA9IGhlYWRlckNvbnRhaW5lcigpOwogICAgIGlmICho
ZWFkZXJDb250YWluZXJPYmplY3QgJiYgIWhlYWRlckNvbnRhaW5lck9iamVjdC0+YWNjZXNzaWJp
bGl0eUlzSWdub3JlZCgpKQogICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChoZWFkZXJDb250YWlu
ZXJPYmplY3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkLmgKaW5kZXggZjcyYzkwNmFhMGNlMGY0Yjc4MTg1YWIxNWU1Zjkx
M2E5YmMzMzI0My4uMWIzNjVkNDQ2ODdmZDk3ZTJmOTNiZGFjZTI2ODYwOWJjOGRiNjBhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZC5oCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQWNjZXNzaWJp
bGl0eUFSSUFHcmlkKFJlbmRlck9iamVjdCopOwogCiAgICAgLy8gQVJJQSB0cmVlZ3JpZHMgYW5k
IGdyaWRzIHN1cHBvcnQgc2VsZWN0ZWQgcm93cy4KLSAgICBib29sIHN1cHBvcnRzU2VsZWN0ZWRS
b3dzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgc3VwcG9ydHNTZWxlY3Rl
ZFJvd3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBpc011bHRp
U2VsZWN0YWJsZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgY29tcHV0ZUlzVGFibGVFeHBv
c2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KICAgICBib29sIGlzQXJpYVRhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWRDZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkQ2VsbC5jcHAKaW5kZXggZjgxOWU5YWVlOTQ2YzVkMzU1MGY3M2IyNDllMTM5
Yzk5YjRhNDI3OC4uNmM0YWYxNTg5N2JjOTg3MGI0YzAxYzRhMTA2YWE3ZTE2MGQxNmFlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWRDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlBUklBR3JpZENlbGwuY3BwCkBAIC01Niw3ICs1Niw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZSog
QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cGFyZW50VGFibGUoKSBjb25zdAogICAgIC8vIGlu
Y2x1ZGluZyByb3dzIGFuZCBpbnRlcmFjdGl2ZSByb3dncm91cHMuIEluIGFkZGl0aW9uLCBwb29y
bHktZm9ybWVkIGdyaWRzIG1heSBjb250YWluIGVsZW1lbnRzCiAgICAgLy8gd2hpY2ggcGFzcyB0
aGUgdGVzdHMgZm9yIGluY2x1c2lvbi4KICAgICBmb3IgKGF1dG8qIHBhcmVudCA9IHBhcmVudE9i
amVjdFVuaWdub3JlZCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0VW5p
Z25vcmVkKCkpIHsKLSAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudCkg
JiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5pc0V4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpw
YXJlbnQpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudCkuaXNFeHBvc2Fi
bGUoKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KHBh
cmVudCk7CiAgICAgfQogCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFH
cmlkQ2VsbDo6cm93SW5kZXhSYW5nZShzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiYgcm93
CiAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKnBhcmVudCkpIHsKICAgICAgICAg
Ly8gV2UgYWxyZWFkeSBnb3QgYSB0YWJsZSByb3csIHVzZSBpdHMgQVBJLgogICAgICAgICByb3dS
YW5nZS5maXJzdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKnBhcmVudCkucm93
SW5kZXgoKTsKLSAgICB9IGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudCkg
JiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5pc0V4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KCkpIHsKKyAgICB9IGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJs
ZT4oKnBhcmVudCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5pc0V4
cG9zYWJsZSgpKSB7CiAgICAgICAgIC8vIFdlIHJlYWNoZWQgdGhlIHBhcmVudCB0YWJsZSwgc28g
d2UgbmVlZCB0byBpbnNwZWN0IGl0cwogICAgICAgICAvLyBjaGlsZHJlbiB0byBkZXRlcm1pbmUg
dGhlIHJvdyBpbmRleCBmb3IgdGhlIGNlbGwgaW4gaXQuCiAgICAgICAgIHVuc2lnbmVkIGNvbHVt
bkNvdW50ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5jb2x1bW5Db3Vu
dCgpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6
Y29sdW1uSW5kZXhSYW5nZShzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiYKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KCpwYXJlbnQpCi0g
ICAgICAgICYmICEoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KSAmJiBkb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxp
dHkoKSkpCisgICAgICAgICYmICEoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KSAmJiBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpLmlzRXhwb3NhYmxlKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHNp
YmxpbmdzID0gcGFyZW50LT5jaGlsZHJlbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCmluZGV4IDMyODM4
MDc2NTI5ZGQ0NWMxMGZjN2Q0YTdhYzA5YTBjN2Y1YTNkZmMuLmViYmUzMGY4M2M2YTU2ZDgwZjBj
ZTRlNjNmMjA1NzlkODlhMTBkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAKQEAgLTYwLDE3ICs2MCwx
NyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6ZGlzY2xvc2VkUm93cyhBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGRpc2NsbwogICAgIC8vIFRoZSBjb250aWd1b3VzIGRpc2Ns
b3NlZCByb3dzIHdpbGwgYmUgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIHRoYXQgCiAgICAgLy8gaGF2
ZSBhbiBhcmlhLWxldmVsIG9mIHBsdXMgMSBmcm9tIHRoaXMgcm93LgogICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdFVuaWdub3JlZCgpOwotICAgIGlmICghaXM8
QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KSB8fCAhZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlPigqcGFyZW50KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgaWYg
KCFpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpIHx8ICFkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGU+KCpwYXJlbnQpLmlzRXhwb3NhYmxlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAK
KwogICAgIC8vIFNlYXJjaCBmb3Igcm93cyB0aGF0IG1hdGNoIHRoZSBjb3JyZWN0IGxldmVsLiAK
ICAgICAvLyBPbmx5IHRha2UgdGhlIHN1YnNlcXVlbnQgcm93cyBmcm9tIHRoaXMgb25lIHRoYXQg
YXJlICsxIGZyb20gdGhpcyByb3cncyBsZXZlbC4KICAgICBpbnQgaW5kZXggPSByb3dJbmRleCgp
OwogICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIHVuc2ln
bmVkIGxldmVsID0gaGllcmFyY2hpY2FsTGV2ZWwoKTsKLSAgICBhdXRvJiBhbGxSb3dzID0gZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5yb3dzKCk7CisgICAgYXV0byBhbGxS
b3dzID0gcGFyZW50LT5yb3dzKCk7CiAgICAgaW50IHJvd0NvdW50ID0gYWxsUm93cy5zaXplKCk7
CiAgICAgZm9yIChpbnQgayA9IGluZGV4ICsgMTsgayA8IHJvd0NvdW50OyArK2spIHsKICAgICAg
ICAgYXV0byogcm93ID0gYWxsUm93c1trXS5nZXQoKTsKQEAgLTg3LDI3ICs4NywyNyBAQCBBWENv
cmVPYmplY3QqIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6ZGlzY2xvc2VkQnlSb3coKSBjb25z
dAogICAgIC8vIFRoZSByb3cgdGhhdCBkaXNjbG9zZXMgdGhpcyBvbmUgaXMgdGhlIHJvdyBpbiB0
aGUgdGFibGUKICAgICAvLyB0aGF0IGlzIGFyaWEtbGV2ZWwgc3VidHJhY3QgMSBmcm9tIHRoaXMg
cm93LgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdFVuaWdu
b3JlZCgpOwotICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KSB8fCAhZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nl
c3NpYmlsaXR5KCkpCisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpIHx8
ICFkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpLmlzRXhwb3NhYmxlKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorCiAgICAgLy8gSWYgdGhlIGxldmVsIGlzIDEg
b3IgbGVzcywgdGhhbiBub3RoaW5nIGRpc2Nsb3NlcyB0aGlzIHJvdy4KICAgICB1bnNpZ25lZCBs
ZXZlbCA9IGhpZXJhcmNoaWNhbExldmVsKCk7CiAgICAgaWYgKGxldmVsIDw9IDEpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIAorCiAgICAgLy8gU2VhcmNoIGZvciB0aGUgcHJldmlvdXMg
cm93IHRoYXQgbWF0Y2hlcyB0aGUgY29ycmVjdCBsZXZlbC4KICAgICBpbnQgaW5kZXggPSByb3dJ
bmRleCgpOwotICAgIGF1dG8mIGFsbFJvd3MgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+
KHBhcmVudCktPnJvd3MoKTsKKyAgICBhdXRvIGFsbFJvd3MgPSBwYXJlbnQtPnJvd3MoKTsKICAg
ICBpbnQgcm93Q291bnQgPSBhbGxSb3dzLnNpemUoKTsKICAgICBpZiAoaW5kZXggPj0gcm93Q291
bnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorCiAgICAgZm9yIChpbnQgayA9IGlu
ZGV4IC0gMTsgayA+PSAwOyAtLWspIHsKICAgICAgICAgYXV0byogcm93ID0gYWxsUm93c1trXS5n
ZXQoKTsKICAgICAgICAgaWYgKHJvdy0+aGllcmFyY2hpY2FsTGV2ZWwoKSA9PSBsZXZlbCAtIDEp
CiAgICAgICAgICAgICByZXR1cm4gcm93OwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBudWxs
cHRyOwogfQogICAgIApAQCAtMTI1LDcgKzEyNSw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZSogQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpwYXJlbnRUYWJsZSgpIGNvbnN0CiAgICAgICAgIC8vIFVu
bGVzcyB0aGUgcm93IGlzIGEgbmF0aXZlIHRyIGVsZW1lbnQuCiAgICAgICAgIGlmIChpczxBY2Nl
c3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5VGFi
bGUmIHRhYmxlUGFyZW50ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KTsK
LSAgICAgICAgICAgIGlmICh0YWJsZVBhcmVudC5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmls
aXR5KCkgJiYgKHRhYmxlUGFyZW50LmlzQXJpYVRhYmxlKCkgfHwgbm9kZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dHJUYWcpKSkKKyAgICAgICAgICAgIGlmICh0YWJsZVBhcmVudC5pc0V4cG9z
YWJsZSgpICYmICh0YWJsZVBhcmVudC5pc0FyaWFUYWJsZSgpIHx8IG5vZGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRyVGFnKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICZ0YWJsZVBhcmVu
dDsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKaW5kZXggMjA5ZWI4ZTY1OGUwYjcz
NDE4ZWMyY2QwMGNkODBhNDE2ZmEyOTMzYS4uN2VjZTA2MTdkNmZiZjg5MTQ5ZTI0YWYwZjgwZWNk
ZWU2MjIwMGE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKQEAgLTE3MzksNyArMTczOSw3IEBAIHN0YXRp
YyBib29sIHNob3VsZFVzZUFjY2Vzc2liaWxpdHlPYmplY3RJbm5lclRleHQoQWNjZXNzaWJpbGl0
eU9iamVjdCogb2JqLCBBY2NlCiAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlMaXN0Pigqb2JqKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4o
Km9iaikgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqKS5pc0V4cG9zYWJsZVRo
cm91Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9i
aikgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqKS5pc0V4cG9zYWJsZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAob2JqLT5pc1RyZWUoKSB8fCBvYmotPmlz
Q2FudmFzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAppbmRleCA4MzE0NzEyNjAyNjgzOTQyYTIxZmE0Y2RhN2RiYjUzYWJk
OWEyNjk5Li45NTJiYmQ3ZjI5Yjc5MmM3N2FjYWYwZjg4MWQ0OTc1MWQ1YmMxNGQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKQEAgLTUxMCw3ICs1MTAsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRDaGlsZHJlblRvQXJyYXko
QVhDb3JlT2JqZWN0KiBvYmplY3QsIGJvb2wgaXNGb3J3YXJkLCBBWENvcmVPYgogewogICAgIC8v
IEEgdGFibGUncyBjaGlsZHJlbiBpbmNsdWRlcyBlbGVtZW50cyB3aG9zZSBvd24gY2hpbGRyZW4g
YXJlIGFsc28gdGhlIHRhYmxlJ3MgY2hpbGRyZW4gKGR1ZSB0byB0aGUgd2F5IHRoZSBNYWMgZXhw
b3NlcyB0YWJsZXMpLgogICAgIC8vIFRoZSByb3dzIGZyb20gdGhlIHRhYmxlIHNob3VsZCBiZSBx
dWVyaWVkLCBzaW5jZSB0aG9zZSBhcmUgZGlyZWN0IGRlc2NlbmRhbnRzIG9mIHRoZSB0YWJsZSwg
YW5kIHRoZXkgY29udGFpbiBjb250ZW50LgotICAgIGNvbnN0IGF1dG8mIHNlYXJjaENoaWxkcmVu
ID0gaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGU+KCpvYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSA/IGRv
d25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9iamVjdCkucm93cygpIDogb2JqZWN0LT5jaGls
ZHJlbigpOworICAgIGNvbnN0IGF1dG8mIHNlYXJjaENoaWxkcmVuID0gb2JqZWN0LT5pc1RhYmxl
KCkgJiYgb2JqZWN0LT5pc0V4cG9zYWJsZSgpID8gb2JqZWN0LT5yb3dzKCkgOiBvYmplY3QtPmNo
aWxkcmVuKCk7CiAKICAgICBzaXplX3QgY2hpbGRyZW5TaXplID0gc2VhcmNoQ2hpbGRyZW4uc2l6
ZSgpOwogCkBAIC0zNzIzLDEwICszNzIzLDEwIEBAIHN0YXRpYyBib29sIGlzQWNjZXNzaWJpbGl0
eU9iamVjdFNlYXJjaE1hdGNoQXRJbmRleChBWENvcmVPYmplY3QqIGF4T2JqZWN0LCBBY2NlCiAg
ICAgICAgICAgICAmJiAhYXhPYmplY3QtPmhhc1NhbWVTdHlsZShjcml0ZXJpYS5zdGFydE9iamVj
dC0+cmVuZGVyZXIoKSk7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5OjpUYWJsZVNh
bWVMZXZlbDoKICAgICAgICAgcmV0dXJuIGNyaXRlcmlhLnN0YXJ0T2JqZWN0Ci0gICAgICAgICAg
ICAmJiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpheE9iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlPigqYXhPYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHko
KQotICAgICAgICAgICAgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYXhPYmplY3Qp
LnRhYmxlTGV2ZWwoKSA9PSBjcml0ZXJpYS5zdGFydE9iamVjdC0+dGFibGVMZXZlbCgpOworICAg
ICAgICAgICAgJiYgYXhPYmplY3QtPmlzVGFibGUoKSAmJiBheE9iamVjdC0+aXNFeHBvc2FibGUo
KQorICAgICAgICAgICAgJiYgYXhPYmplY3QtPnRhYmxlTGV2ZWwoKSA9PSBjcml0ZXJpYS5zdGFy
dE9iamVjdC0+dGFibGVMZXZlbCgpOwogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNlYXJjaEtleTo6
VGFibGU6Ci0gICAgICAgIHJldHVybiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpheE9iamVjdCkg
JiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYXhPYmplY3QpLmlzRXhwb3NhYmxlVGhy
b3VnaEFjY2Vzc2liaWxpdHkoKTsKKyAgICAgICAgcmV0dXJuIGF4T2JqZWN0LT5pc1RhYmxlKCkg
JiYgYXhPYmplY3QtPmlzRXhwb3NhYmxlKCk7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U2VhcmNo
S2V5OjpUZXh0RmllbGQ6CiAgICAgICAgIHJldHVybiBheE9iamVjdC0+aXNUZXh0Q29udHJvbCgp
OwogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNlYXJjaEtleTo6VW5kZXJsaW5lOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCAw
M2VmYmVkZmZhMTVkMjJjYmZiYjc2N2Q2NDdmOTMzMjQ1NGU0MDc2Li45NGNhNTlkYjY2N2EzMTIz
NTU2ZGFhYWEwZjI5MDkwYTA5ODhmYjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtMTEzLDYgKzExMyw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U1ZHUm9vdCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlTVkdF
bGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQWNj
ZXNzaWJpbGl0eVRhYmxlSW5zdGFuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgYm9vbCBpc0F0dGFjaG1lbnRFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KICAgICBib29sIGlzSGVhZGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CkBAIC0xNDgsOCArMTQ5LDI1IEBAIHB1YmxpYzoKICAgICBib29sIGlzT3JkZXJl
ZExpc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNEZXNj
cmlwdGlvbkxpc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgLy8g
VGFibGUgc3VwcG9ydC4KICAgICBib29sIGlzVGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIGJvb2wgaXNFeHBvc2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAgICAgYm9vbCBpc0RhdGFUYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgaW50IHRhYmxlTGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAw
OyB9CisgICAgYm9vbCBzdXBwb3J0c1NlbGVjdGVkUm93cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVtbnMoKSBv
dmVycmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IoKTsgfQorICAgIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzKCkgb3ZlcnJpZGUgeyByZXR1cm4gQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yKCk7IH0KKyAgICB1bnNpZ25lZCBjb2x1bW5Db3VudCgpIG92
ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICB1bnNpZ25lZCByb3dDb3VudCgpIG92ZXJyaWRlIHsg
cmV0dXJuIDA7IH0KKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHMoKSBvdmVy
cmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IoKTsgfQorICAgIEFYQ29y
ZU9iamVjdCogY2VsbEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCwgdW5zaWduZWQpIG92ZXJyaWRl
IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29s
dW1uSGVhZGVycygpIG92ZXJyaWRlIHsgcmV0dXJuIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
cigpOyB9CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRlcnMoKSBvdmVy
cmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IoKTsgfQorICAgIEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciB2aXNpYmxlUm93cygpIG92ZXJyaWRlIHsgcmV0dXJuIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvcigpOyB9CisgICAgQVhDb3JlT2JqZWN0KiBoZWFkZXJD
b250YWluZXIoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgaW50IGF4Q29sdW1u
Q291bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgaW50IGF4Um93Q291bnQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisKICAgICBib29sIGlzVGFibGVSb3coKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNUYWJsZUNvbHVtbigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBpc1RhYmxlQ2VsbCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yNDAsNyArMjU4LDYgQEAgcHVi
bGljOgogCiAgICAgdW5zaWduZWQgYmxvY2txdW90ZUxldmVsKCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgaW50IGhlYWRpbmdMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICBp
bnQgdGFibGVMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KICAgICBBY2Nlc3Np
YmlsaXR5QnV0dG9uU3RhdGUgY2hlY2tib3hPclJhZGlvVmFsdWUoKSBjb25zdCBvdmVycmlkZTsK
ICAgICBTdHJpbmcgdmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0
cmluZygpOyB9CiAgICAgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIDAuMGY7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKaW5kZXggYzE1ZjhlZmUwYjE3ODY1NTNi
MjJlMmIxNmM5NDcyMjBiMzViZTYzMi4uOGRmN2QyZmNkZjk2M2Y2ZWEzMzk1YjVjMDNkNWVhYzQ2
YjQxMDM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKQEAgLTQ4OCw2ICs0ODgsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVRhYmxlSW5zdGFuY2UoKSBjb25zdCA9
IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRhY2htZW50RWxlbWVudCgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNIZWFkaW5nKCkgY29uc3QgPSAwOwpAQCAtNTI4LDExICs1Mjks
MzEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc09yZGVyZWRMaXN0KCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBpc0Rlc2NyaXB0aW9uTGlzdCgpIGNvbnN0ID0gMDsKIAorICAg
IC8vIFRhYmxlIHN1cHBvcnQuCiAgICAgdmlydHVhbCBib29sIGlzVGFibGUoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBib29sIGlzRXhwb3NhYmxlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBpc0RhdGFUYWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCB0YWJsZUxldmVs
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGVkUm93cygpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5z
KCkgPSAwOworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3MoKSA9
IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjb2x1bW5Db3VudCgpID0gMDsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIHJvd0NvdW50KCkgPSAwOworICAgIC8vIEFsbCB0aGUgY2VsbHMgaW4gdGhlIHRh
YmxlLgorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNlbGxzKCkgPSAw
OworICAgIHZpcnR1YWwgQVhDb3JlT2JqZWN0KiBjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVk
IGNvbHVtbiwgdW5zaWduZWQgcm93KSA9IDA7CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgY29sdW1uSGVhZGVycygpID0gMDsKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciByb3dIZWFkZXJzKCkgPSAwOworICAgIHZpcnR1YWwgQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIHZpc2libGVSb3dzKCkgPSAwOworICAgIC8vIFJldHVybnMgYW4g
b2JqZWN0IHRoYXQgY29udGFpbnMsIGFzIGNoaWxkcmVuLCBhbGwgdGhlIG9iamVjdHMgdGhhdCBh
Y3QgYXMgaGVhZGVycy4KKyAgICB2aXJ0dWFsIEFYQ29yZU9iamVjdCogaGVhZGVyQ29udGFpbmVy
KCkgPSAwOworICAgIHZpcnR1YWwgaW50IGF4Q29sdW1uQ291bnQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBpbnQgYXhSb3dDb3VudCgpIGNvbnN0ID0gMDsKKwogICAgIHZpcnR1YWwgYm9vbCBp
c1RhYmxlUm93KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1RhYmxlQ29sdW1uKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1RhYmxlQ2VsbCgpIGNvbnN0ID0gMDsKKwog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZpZWxkc2V0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBpc0dyb3VwKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0FSSUFUcmVlR3JpZFJv
dygpIGNvbnN0ID0gMDsKQEAgLTY0OCw3ICs2NjksNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHVuc2lnbmVkIGJsb2NrcXVvdGVMZXZlbCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBo
ZWFkaW5nTGV2ZWwoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgdGFibGVMZXZlbCgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBjaGVja2JveE9y
UmFkaW9WYWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZURlc2NyaXB0
aW9uKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNvbnN0
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDk2ZjMzY2I3MzRhNzA4MzY5YjRmM2JhM2Q1
NDg0ODhlNTA0OTU3NzAuLmM4MjU0NDYxMmYwYjFiMmRjNTQ3NDdmYjE3YzMxOTQ4NTcwZTAwYWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMzQ3Myw3ICszNDczLDcgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhU2VsZWN0ZWRSb3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYgcmUKICAgICB9CiAKICAgICAvLyBHZXQgYWxsIHRoZSByb3dzLgotICAgIGF1dG8g
cm93c0l0ZXJhdGlvbiA9IFsmXShhdXRvJiByb3dzKSB7CisgICAgYXV0byByb3dzSXRlcmF0aW9u
ID0gWyZdKGNvbnN0IGF1dG8mIHJvd3MpIHsKICAgICAgICAgZm9yIChhdXRvJiByb3cgOiByb3dz
KSB7CiAgICAgICAgICAgICBpZiAocm93LT5pc1NlbGVjdGVkKCkgfHwgcm93LT5pc0FjdGl2ZURl
c2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIoKSkgewogICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQocm93KTsKQEAgLTM0ODgsNyArMzQ4OCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YXJpYVNlbGVjdGVkUm93cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJl
CiAgICAgICAgIHJvd3NJdGVyYXRpb24oYWxsUm93cyk7CiAgICAgfSBlbHNlIGlmIChpczxBY2Nl
c3NpYmlsaXR5VGFibGU+KCp0aGlzKSkgewogICAgICAgICBhdXRvJiB0aGlzVGFibGUgPSBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCp0aGlzKTsKLSAgICAgICAgaWYgKHRoaXNUYWJsZS5p
c0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkgJiYgdGhpc1RhYmxlLnN1cHBvcnRzU2Vs
ZWN0ZWRSb3dzKCkpCisgICAgICAgIGlmICh0aGlzVGFibGUuaXNFeHBvc2FibGUoKSAmJiB0aGlz
VGFibGUuc3VwcG9ydHNTZWxlY3RlZFJvd3MoKSkKICAgICAgICAgICAgIHJvd3NJdGVyYXRpb24o
dGhpc1RhYmxlLnJvd3MoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCmluZGV4IDI3MzFiMDc4ODZhZWY5YmMy
NzU2NmI3YjE0ZThlNjRhOGFlNzAxZGQuLjIyNWZjOGVlYWVlNTNkMWIzODUyMDJjMjdmNzEzZTY0
ZDU4NDkzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlUYWJsZS5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIEFjY2Vzc2liaWxpdHlUYWJsZTo6QWNjZXNzaWJpbGl0eVRhYmxlKFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCiAgICAgOiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KHJlbmRlcmVyKQog
ICAgICwgbV9oZWFkZXJDb250YWluZXIobnVsbHB0cikKLSAgICAsIG1faXNFeHBvc2FibGVUaHJv
dWdoQWNjZXNzaWJpbGl0eSh0cnVlKQorICAgICwgbV9pc0V4cG9zYWJsZSh0cnVlKQogewogfQog
CkBAIC02Myw3ICs2Myw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZTo6fkFjY2Vzc2liaWxpdHlUYWJs
ZSgpID0gZGVmYXVsdDsKIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjppbml0KCkKIHsKICAgICBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbml0KCk7Ci0gICAgbV9pc0V4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5ID0gY29tcHV0ZUlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJp
bGl0eSgpOworICAgIG1faXNFeHBvc2FibGUgPSBjb21wdXRlSXNUYWJsZUV4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KCk7CiB9CiAKIFJlZjxBY2Nlc3NpYmlsaXR5VGFibGU+IEFjY2Vzc2li
aWxpdHlUYWJsZTo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCkBAIC04MywxMiArODMs
MTIgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6Omhhc0FSSUFSb2xlKCkgY29uc3QKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0V4cG9zYWJsZVRo
cm91Z2hBY2Nlc3NpYmlsaXR5KCkgY29uc3QKK2Jvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0V4
cG9zYWJsZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIG1faXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0
eTsKKyAgICByZXR1cm4gbV9pc0V4cG9zYWJsZTsKIH0KIAogSFRNTFRhYmxlRWxlbWVudCogQWNj
ZXNzaWJpbGl0eVRhYmxlOjp0YWJsZUVsZW1lbnQoKSBjb25zdApAQCAtMzc3LDcgKzM3Nyw3IEBA
IHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjpjbGVhckNoaWxkcmVuKCkKIAogdm9pZCBBY2Nlc3Np
YmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKCkKIHsKLSAgICBpZiAoIWlzRXhwb3NhYmxlVGhyb3Vn
aEFjY2Vzc2liaWxpdHkoKSkgeworICAgIGlmICghaXNFeHBvc2FibGUoKSkgewogICAgICAgICBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRDaGlsZHJlbigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNDI0LDggKzQyNCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjphZGRD
aGlsZHJlbigpCiAgICAgICAgIGlmICghY29sdW1uLmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkK
ICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKCZjb2x1bW4pOwogICAgIH0KLSAgICAKLSAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJDb250YWluZXJPYmplY3QgPSBoZWFkZXJDb250
YWluZXIoKTsKKworICAgIGF1dG8qIGhlYWRlckNvbnRhaW5lck9iamVjdCA9IGhlYWRlckNvbnRh
aW5lcigpOwogICAgIGlmIChoZWFkZXJDb250YWluZXJPYmplY3QgJiYgIWhlYWRlckNvbnRhaW5l
ck9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQogICAgICAgICBtX2NoaWxkcmVuLmFw
cGVuZChoZWFkZXJDb250YWluZXJPYmplY3QpOwogCkBAIC00MzcsNyArNDM3LDYgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKCkKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBjZWxsIDogcm93LT5jaGlsZHJlbigpKQogICAgICAgICAgICAgY2VsbC0+dXBkYXRlQWNjZXNz
aWJpbGl0eVJvbGUoKTsKICAgICB9Ci0KIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFk
ZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvd09iamVjdCwgSGFzaFNldDxB
Y2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50
KQpAQCAtNTAxLDcgKzUwMCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjphZGRDaGlsZHJl
bkZyb21TZWN0aW9uKFJlbmRlclRhYmxlU2VjdGlvbiogdGFibGVTZWN0aW9uCiAgICAgbWF4Q29s
dW1uQ291bnQgPSBzdGQ6Om1heCh0YWJsZVNlY3Rpb24tPm51bUNvbHVtbnMoKSwgbWF4Q29sdW1u
Q291bnQpOwogfQogICAgIAotQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVRhYmxl
OjpoZWFkZXJDb250YWluZXIoKQorQVhDb3JlT2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGU6Omhl
YWRlckNvbnRhaW5lcigpCiB7CiAgICAgaWYgKG1faGVhZGVyQ29udGFpbmVyKQogICAgICAgICBy
ZXR1cm4gbV9oZWFkZXJDb250YWluZXIuZ2V0KCk7CkBAIC01MTMsNzQgKzUxMiw4NiBAQCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGU6OmhlYWRlckNvbnRhaW5lcigpCiAg
ICAgcmV0dXJuIG1faGVhZGVyQ29udGFpbmVyLmdldCgpOwogfQogCi1jb25zdCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIEFjY2Vzc2liaWxpdHlUYWJs
ZTo6Y29sdW1ucygpCitBWENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBB
Y2Nlc3NpYmlsaXR5VGFibGU6OmNvbHVtbnMoKQogewogICAgIHVwZGF0ZUNoaWxkcmVuSWZOZWNl
c3NhcnkoKTsKICAgICAgICAgCiAgICAgcmV0dXJuIG1fY29sdW1uczsKIH0KIAotY29uc3QgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBBY2Nlc3NpYmls
aXR5VGFibGU6OnJvd3MoKQorQVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgQWNjZXNzaWJpbGl0eVRhYmxlOjpyb3dzKCkKIHsKICAgICB1cGRhdGVDaGlsZHJlbklmTmVj
ZXNzYXJ5KCk7CiAgICAgCiAgICAgcmV0dXJuIG1fcm93czsKIH0KIAotdm9pZCBBY2Nlc3NpYmls
aXR5VGFibGU6OmNvbHVtbkhlYWRlcnMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBoZWFk
ZXJzKQorQVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgQWNjZXNzaWJp
bGl0eVRhYmxlOjpjb2x1bW5IZWFkZXJzKCkKIHsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3IgaGVhZGVyczsKICAgICBpZiAoIW1fcmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKKyAgICAgICAgcmV0dXJuIGhlYWRlcnM7CisKICAgICB1cGRhdGVDaGlsZHJlbklmTmVjZXNz
YXJ5KCk7Ci0gICAgCisKICAgICAvLyBTb21ldGltZXMgbV9jb2x1bW5zIGNhbiBiZSByZXNldCBk
dXJpbmcgdGhlIGl0ZXJhdGlvbiwgd2UgY2FjaGUgaXQgaGVyZSB0byBiZSBzYWZlLgogICAgIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5zQ29weSA9IG1fY29sdW1uczsKLSAgICAK
KwogICAgIGZvciAoY29uc3QgYXV0byYgY29sdW1uIDogY29sdW1uc0NvcHkpIHsKICAgICAgICAg
aWYgKEFYQ29yZU9iamVjdCogaGVhZGVyID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ29s
dW1uPigqY29sdW1uKS5oZWFkZXJPYmplY3QoKSkKICAgICAgICAgICAgIGhlYWRlcnMuYXBwZW5k
KGhlYWRlcik7CiAgICAgfQorCisgICAgcmV0dXJuIGhlYWRlcnM7CiB9CiAKLXZvaWQgQWNjZXNz
aWJpbGl0eVRhYmxlOjpyb3dIZWFkZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgaGVh
ZGVycykKK0FYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIEFjY2Vzc2li
aWxpdHlUYWJsZTo6cm93SGVhZGVycygpCiB7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yIGhlYWRlcnM7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAg
CisgICAgICAgIHJldHVybiBoZWFkZXJzOworCiAgICAgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2Fy
eSgpOwotICAgIAorCiAgICAgLy8gU29tZXRpbWVzIG1fcm93cyBjYW4gYmUgcmVzZXQgZHVyaW5n
IHRoZSBpdGVyYXRpb24sIHdlIGNhY2hlIGl0IGhlcmUgdG8gYmUgc2FmZS4KICAgICBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93c0NvcHkgPSBtX3Jvd3M7Ci0gICAgCisKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHJvdyA6IHJvd3NDb3B5KSB7CiAgICAgICAgIGlmIChBWENvcmVPYmplY3Qq
IGhlYWRlciA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKnJvdykuaGVhZGVyT2Jq
ZWN0KCkpCiAgICAgICAgICAgICBoZWFkZXJzLmFwcGVuZChoZWFkZXIpOwogICAgIH0KKworICAg
IHJldHVybiBoZWFkZXJzOwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlUYWJsZTo6dmlzaWJsZVJv
d3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByb3dzKQorQVhDb3JlT2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgQWNjZXNzaWJpbGl0eVRhYmxlOjp2aXNpYmxlUm93cygp
CiB7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3M7CiAgICAgaWYgKCFtX3Jl
bmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgICAgIHJldHVybiByb3dzOworCiAg
ICAgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwotICAgIAorCiAgICAgZm9yIChjb25zdCBh
dXRvJiByb3cgOiBtX3Jvd3MpIHsKICAgICAgICAgaWYgKHJvdyAmJiAhcm93LT5pc09mZlNjcmVl
bigpKQogICAgICAgICAgICAgcm93cy5hcHBlbmQocm93KTsKICAgICB9CisKKyAgICByZXR1cm4g
cm93czsKIH0KIAotdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxzKEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2VsbHMpCitBWENvcmVPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBBY2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxzKCkK
IHsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHM7CiAgICAgaWYgKCFtX3Jl
bmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgICAgIHJldHVybiBjZWxsczsKKwog
ICAgIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKLSAgICAKKwogICAgIGZvciAoY29uc3Qg
YXV0byYgcm93IDogbV9yb3dzKQogICAgICAgICBjZWxscy5hcHBlbmRWZWN0b3Iocm93LT5jaGls
ZHJlbigpKTsKKworICAgIHJldHVybiBjZWxsczsKIH0KICAgICAKIHVuc2lnbmVkIEFjY2Vzc2li
aWxpdHlUYWJsZTo6Y29sdW1uQ291bnQoKQpAQCAtNjAxLDcgKzYxMiw3IEBAIGludCBBY2Nlc3Np
YmlsaXR5VGFibGU6OnRhYmxlTGV2ZWwoKSBjb25zdAogewogICAgIGludCBsZXZlbCA9IDA7CiAg
ICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5T2JqZWN0Kj4oY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPih0aGlzKSk7IG9iajsg
b2JqID0gb2JqLT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0
eVRhYmxlPigqb2JqKSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpvYmopLmlzRXhw
b3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkKKyAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxp
dHlUYWJsZT4oKm9iaikgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqKS5pc0V4
cG9zYWJsZSgpKQogICAgICAgICAgICAgKytsZXZlbDsKICAgICB9CiAgICAgCkBAIC02NDQsNyAr
NjU1LDcgQEAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogQWNjZXNzaWJpbGl0eVRhYmxlOjpjZWxs
Rm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbiwKIAogQWNjZXNzaWJpbGl0eVJvbGUgQWNj
ZXNzaWJpbGl0eVRhYmxlOjpyb2xlVmFsdWUoKSBjb25zdAogewotICAgIGlmICghaXNFeHBvc2Fi
bGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAgIGlmICghaXNFeHBvc2FibGUoKSkKICAgICAg
ICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJvbGVWYWx1ZSgpOwogICAgIAog
ICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xlID0gYXJpYVJvbGVBdHRyaWJ1dGUoKTsKQEAg
LTY2Miw5ICs2NzMsOSBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6Y29tcHV0ZUFjY2Vzc2li
aWxpdHlJc0lnbm9yZWQoKSBjb25zdAogICAgIGlmIChkZWNpc2lvbiA9PSBBY2Nlc3NpYmlsaXR5
T2JqZWN0SW5jbHVzaW9uOjpJZ25vcmVPYmplY3QpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IAotICAgIGlmICghaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAgIGlmICgh
aXNFeHBvc2FibGUoKSkKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7Ci0gICAgICAgIAorCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCkBAIC02NzcsNyArNjg4LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6
OnRpdGxlRWxlbWVudFRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dE9yZGVyKQog
CiBTdHJpbmcgQWNjZXNzaWJpbGl0eVRhYmxlOjp0aXRsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFp
c0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgaWYgKCFpc0V4cG9zYWJsZSgp
KQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGl0bGUoKTsKICAg
ICAKICAgICBTdHJpbmcgdGl0bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGUuaAppbmRleCBjYmZjYTZhZjkwOGI2YmFjMGM4OTEwNGIwNGE3
NDE0YmRlNzI4YmE4Li4wZDhlZDM5YTQxODRhMWM4M2UxYjlhNzY2MzFmZjI5YTViNzJhOWYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
LmgKQEAgLTI5LDExICsyOSwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDsKIGNsYXNzIEhUTUxUYWJsZUVsZW1lbnQ7CiBjbGFz
cyBSZW5kZXJUYWJsZVNlY3Rpb247CiAgICAgCkBAIC00NiwzNiArNDYsMzYgQEAgcHVibGljOgog
CiAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3QgZmluYWw7CiAgICAgdmly
dHVhbCBib29sIGlzQXJpYVRhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKKwog
ICAgIHZvaWQgYWRkQ2hpbGRyZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGNsZWFyQ2hpbGRyZW4o
KSBmaW5hbDsKLSAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNv
bHVtbnMoKTsKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJvd3MoKTsK
LSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZWxlY3RlZFJvd3MoKSB7IHJldHVybiBm
YWxzZTsgfQotICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KCk7Ci0gICAgdW5zaWduZWQgcm93Q291
bnQoKTsKKworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5zKCkgb3ZlcnJp
ZGU7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3MoKSBvdmVycmlkZTsKKwor
ICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KCkgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgcm93Q291
bnQoKSBvdmVycmlkZTsKICAgICBpbnQgdGFibGVMZXZlbCgpIGNvbnN0IGZpbmFsOwotICAgIAor
CiAgICAgU3RyaW5nIHRpdGxlKCkgY29uc3QgZmluYWw7Ci0gICAgCisKICAgICAvLyBhbGwgdGhl
IGNlbGxzIGluIHRoZSB0YWJsZQotICAgIHZvaWQgY2VsbHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJik7Ci0gICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogY2VsbEZvckNvbHVtbkFuZFJv
dyh1bnNpZ25lZCBjb2x1bW4sIHVuc2lnbmVkIHJvdyk7Ci0gICAgCi0gICAgdm9pZCBjb2x1bW5I
ZWFkZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwotICAgIHZvaWQgcm93SGVhZGVy
cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsKLSAgICB2b2lkIHZpc2libGVSb3dzKEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwotICAgIAotICAgIC8vIGFuIG9iamVjdCB0aGF0
IGNvbnRhaW5zLCBhcyBjaGlsZHJlbiwgYWxsIHRoZSBvYmplY3RzIHRoYXQgYWN0IGFzIGhlYWRl
cnMKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJDb250YWluZXIoKTsKKyAgICBBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHMoKSBvdmVycmlkZTsKKyAgICBBY2Nlc3NpYmls
aXR5VGFibGVDZWxsKiBjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbiwgdW5zaWdu
ZWQgcm93KSBvdmVycmlkZTsKIAotICAgIC8vIGlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxp
dHkoKSBpcyB3aGV0aGVyIGl0IGlzIGV4cG9zZWQgYXMgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIHRv
IHRoZSBwbGF0Zm9ybS4KLSAgICBib29sIGlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHko
KSBjb25zdDsKLSAgICAKLSAgICBpbnQgYXhDb2x1bW5Db3VudCgpIGNvbnN0OwotICAgIGludCBh
eFJvd0NvdW50KCkgY29uc3Q7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVt
bkhlYWRlcnMoKSBvdmVycmlkZTsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93
SGVhZGVycygpIG92ZXJyaWRlOworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB2aXNp
YmxlUm93cygpIG92ZXJyaWRlOworCisgICAgLy8gUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250
YWlucywgYXMgY2hpbGRyZW4sIGFsbCB0aGUgb2JqZWN0cyB0aGF0IGFjdCBhcyBoZWFkZXJzLgor
ICAgIEFYQ29yZU9iamVjdCogaGVhZGVyQ29udGFpbmVyKCkgb3ZlcnJpZGU7CisKKyAgICBib29s
IGlzVGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgLy8gUmV0dXJu
cyB3aGV0aGVyIGl0IGlzIGV4cG9zZWQgYXMgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIHRvIHRoZSBw
bGF0Zm9ybS4KKyAgICBib29sIGlzRXhwb3NhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBp
bnQgYXhDb2x1bW5Db3VudCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGludCBheFJvd0NvdW50KCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBBY2Nlc3NpYmlsaXR5
VGFibGUoUmVuZGVyT2JqZWN0Kik7CkBAIC04NCwxMiArODQsMTMgQEAgcHJvdGVjdGVkOgogICAg
IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBtX2NvbHVtbnM7CiAKICAgICBSZWZQdHI8QWNj
ZXNzaWJpbGl0eU9iamVjdD4gbV9oZWFkZXJDb250YWluZXI7Ci0gICAgYm9vbCBtX2lzRXhwb3Nh
YmxlVGhyb3VnaEFjY2Vzc2liaWxpdHk7CisgICAgYm9vbCBtX2lzRXhwb3NhYmxlOwogCiAgICAg
Ym9vbCBoYXNBUklBUm9sZSgpIGNvbnN0OwogCi0gICAgLy8gaXNUYWJsZSBpcyB3aGV0aGVyIGl0
J3MgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIG9iamVjdC4KLSAgICBib29sIGlzVGFibGUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgLy8gVXNlZCBpbiB0eXBlIGNoZWNraW5nIGZ1
bmN0aW9uIGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4uCisgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlU
YWJsZUluc3RhbmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgLy8gaXNE
YXRhVGFibGUgaXMgd2hldGhlciBpdCBpcyBleHBvc2VkIGFzIGFuIEFjY2Vzc2liaWxpdHlUYWJs
ZSBiZWNhdXNlIHRoZSBoZXVyaXN0aWMKICAgICAvLyB0aGluayB0aGlzICJsb29rcyIgbGlrZSBh
IGRhdGEtYmFzZWQgdGFibGUgKGluc3RlYWQgb2YgYSB0YWJsZSB1c2VkIGZvciBsYXlvdXQpLgog
ICAgIGJvb2wgaXNEYXRhVGFibGUoKSBjb25zdCBmaW5hbDsKQEAgLTEwNSw0ICsxMDYsNCBAQCBw
cml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlIAogCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eVRhYmxlLCBpc1RhYmxlKCkpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eVRhYmxlLCBpc0FjY2Vz
c2liaWxpdHlUYWJsZUluc3RhbmNlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAppbmRleCBkYjUwNDFjOTM4OTc5
MjhmYjFkNzQ0ZDc3ZGI1ZWE3ZjY5YWFlN2NmLi4wMTMyN2QyYmIwYzZjMWI0NTM3NTNlNmMzMmRi
OTIyMmExNWVlZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCBBY2Nlc3Np
YmlsaXR5VGFibGUqIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnBhcmVudFRhYmxlKCkgY29uc3QK
ICAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gY2hvb3NlIGFub3RoZXIgYW5jZXN0b3Ig
dGFibGUgYXMgdGhpcyBjZWxsJ3MgdGFibGUuCiAgICAgICAgICAgICBpZiAoaXM8QWNjZXNzaWJp
bGl0eVRhYmxlPigqcGFyZW50KSkgewogICAgICAgICAgICAgICAgIGF1dG8mIHBhcmVudFRhYmxl
ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KTsKLSAgICAgICAgICAgICAg
ICBpZiAocGFyZW50VGFibGUuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAg
ICAgICAgICAgICAgIGlmIChwYXJlbnRUYWJsZS5pc0V4cG9zYWJsZSgpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gJnBhcmVudFRhYmxlOwogICAgICAgICAgICAgICAgIGlmIChwYXJlbnRU
YWJsZS5ub2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE5LDcgKzExOSw3
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6aXNUYWJsZUNlbGwoKSBjb25zdAogICAg
IC8vIFRoaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgdW5pZ25vcmVkUGFyZW50IHdhcyBhIHJvdywg
YnV0IHRoYXQgZXhwbG9kZWQgcGVyZm9ybWFuY2UgaWYKICAgICAvLyB0aGlzIHdhcyBpbiBuZXN0
ZWQgdGFibGVzLiBUaGlzIGNoZWNrIHNob3VsZCBiZSBqdXN0IGFzIGdvb2QuCiAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogcGFyZW50VGFibGUgPSB0aGlzLT5wYXJlbnRUYWJsZSgpOwotICAgIHJl
dHVybiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVudFRhYmxlKSAmJiBkb3duY2FzdDxBY2Nl
c3NpYmlsaXR5VGFibGU+KCpwYXJlbnRUYWJsZSkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJp
bGl0eSgpOworICAgIHJldHVybiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVudFRhYmxlKSAm
JiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnRUYWJsZSkuaXNFeHBvc2FibGUo
KTsKIH0KICAgICAKIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmRl
dGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCkKQEAgLTI0MywxNyArMjQzLDE4IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVRhYmxlQ2VsbDo6c3VwcG9ydHNFeHBhbmRlZFRleHRWYWx1ZSgpIGNvbnN0CiAg
ICAgcmV0dXJuIGlzVGFibGVIZWFkZXJDZWxsKCkgJiYgaGFzQXR0cmlidXRlKGFiYnJBdHRyKTsK
IH0KICAgICAKLXZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6Y29sdW1uSGVhZGVycyhBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGhlYWRlcnMpCitBWENvcmVPYmplY3Q6OkFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpjb2x1bW5IZWFkZXJz
KCkKIHsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgaGVhZGVyczsKICAgICBBY2Nl
c3NpYmlsaXR5VGFibGUqIHBhcmVudCA9IHBhcmVudFRhYmxlKCk7CiAgICAgaWYgKCFwYXJlbnQp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGhlYWRlcnM7CiAKICAgICAvLyBDaG9v
c2UgY29sdW1uSGVhZGVycyBhcyB0aGUgcGxhY2Ugd2hlcmUgdGhlICJoZWFkZXJzIiBhdHRyaWJ1
dGUgaXMgcmVwb3J0ZWQuCiAgICAgYXJpYUVsZW1lbnRzRnJvbUF0dHJpYnV0ZShoZWFkZXJzLCBo
ZWFkZXJzQXR0cik7CiAgICAgLy8gSWYgdGhlIGhlYWRlcnMgYXR0cmlidXRlIHJldHVybmVkIHZh
bGlkIHZhbHVlcywgdGhlbiBkbyBub3QgZnVydGhlciBzZWFyY2ggZm9yIGNvbHVtbiBoZWFkZXJz
LgogICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGhlYWRlcnM7CiAgICAgCiAgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4g
cm93UmFuZ2U7CiAgICAgcm93SW5kZXhSYW5nZShyb3dSYW5nZSk7CkBAIC0yNzUsMTMgKzI3Niwx
NiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmNvbHVtbkhlYWRlcnMoQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJiBoZWFkZXJzKQogICAgICAgICBlbHNlIGlmICh0YWJsZUNlbGwt
PmlzQ29sdW1uSGVhZGVyQ2VsbCgpKQogICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQodGFibGVD
ZWxsKTsKICAgICB9CisKKyAgICByZXR1cm4gaGVhZGVyczsKIH0KICAgICAKLXZvaWQgQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbDo6cm93SGVhZGVycyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Im
IGhlYWRlcnMpCitBWENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsOjpyb3dIZWFkZXJzKCkKIHsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgaGVhZGVyczsKICAgICBBY2Nlc3NpYmlsaXR5VGFibGUqIHBhcmVudCA9IHBh
cmVudFRhYmxlKCk7CiAgICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGhlYWRlcnM7CiAKICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiByb3dS
YW5nZTsKICAgICByb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsKQEAgLTMwMCw2ICszMDQsOCBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnJvd0hlYWRlcnMoQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJiBoZWFkZXJzKQogICAgICAgICBlbHNlIGlmICh0YWJsZUNlbGwtPmlzUm93SGVh
ZGVyQ2VsbCgpKQogICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQodGFibGVDZWxsKTsKICAgICB9
CisKKyAgICByZXR1cm4gaGVhZGVyczsKIH0KIAogQWNjZXNzaWJpbGl0eVRhYmxlUm93KiBBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsOjpwYXJlbnRSb3coKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaAppbmRleCAwNTIw
ZjIyOGE2NTc4YmMzNTYxMWRhMDliMzY2NTEzNDUyNDlmOTg5Li5mYTM2MWM2OTZlOGU2YWYwMDZi
NWI4ZWM4NjcwZGRlMjY5NzE0YmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaApAQCAtNDksMTAgKzQ5LDEwIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcm93SW5kZXhSYW5nZShzdGQ6OnBhaXI8dW5zaWduZWQs
IHVuc2lnbmVkPiYgcm93UmFuZ2UpIGNvbnN0OwogICAgIC8vIGZpbGxzIGluIHRoZSBzdGFydCBs
b2NhdGlvbiBhbmQgY29sdW1uIHNwYW4gb2YgY2VsbAogICAgIHZpcnR1YWwgdm9pZCBjb2x1bW5J
bmRleFJhbmdlKHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+JiBjb2x1bW5SYW5nZSkgY29u
c3Q7Ci0gICAgCi0gICAgdm9pZCBjb2x1bW5IZWFkZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYpOwotICAgIHZvaWQgcm93SGVhZGVycyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Im
KTsKLSAgICAKKworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5IZWFkZXJz
KCkgb3ZlcnJpZGU7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRlcnMo
KSBvdmVycmlkZTsKKwogICAgIGludCBheENvbHVtbkluZGV4KCkgY29uc3Q7CiAgICAgaW50IGF4
Um93SW5kZXgoKSBjb25zdDsKICAgICBpbnQgYXhDb2x1bW5TcGFuKCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVt
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNv
bHVtbi5jcHAKaW5kZXggZmRjNjdmOGFjMTU2YTVhZGJiYWE2MTM1NzZiODY4MmFlNjI3MTVhMS4u
ZWIzZjBkMjk1OTBlNTE0YmVkMmFiMmQxNTcwNTE2NmY5YzVhMjhhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1u
LmNwcApAQCAtODIsNyArODIsNyBAQCBBWENvcmVPYmplY3QqIEFjY2Vzc2liaWxpdHlUYWJsZUNv
bHVtbjo6aGVhZGVyT2JqZWN0KCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRv
JiBwYXJlbnRUYWJsZSA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fcGFyZW50KTsK
LSAgICBpZiAoIXBhcmVudFRhYmxlLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkK
KyAgICBpZiAoIXBhcmVudFRhYmxlLmlzRXhwb3NhYmxlKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAogICAgIGlmIChwYXJlbnRUYWJsZS5pc0FyaWFUYWJsZSgpKSB7CkBAIC0xOTIs
NyArMTkyLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW46OmFkZENoaWxkcmVuKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgcGFyZW50VGFibGUgPSBkb3duY2FzdDxBY2Nl
c3NpYmlsaXR5VGFibGU+KCptX3BhcmVudCk7Ci0gICAgaWYgKCFwYXJlbnRUYWJsZS5pc0V4cG9z
YWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgaWYgKCFwYXJlbnRUYWJsZS5pc0V4cG9z
YWJsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaW50IG51bVJvd3MgPSBwYXJlbnRU
YWJsZS5yb3dDb3VudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwCmluZGV4
IDk0NmVmMWMxZWJjM2RkYjU2ZjcxYmE5NTQ4ZWVlZGFlZWY2M2RkMGIuLjcyNTgxMTZmNWQxYmVk
OTgxOTNmMzE1YmQzMjU4YmRjYmU1ZTY5YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRh
aW5lci5jcHAKQEAgLTcwLDExICs3MCwxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUhlYWRl
ckNvbnRhaW5lcjo6YWRkQ2hpbGRyZW4oKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBw
YXJlbnRUYWJsZSA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fcGFyZW50KTsKLSAg
ICBpZiAoIXBhcmVudFRhYmxlLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkKKyAg
ICBpZiAoIXBhcmVudFRhYmxlLmlzRXhwb3NhYmxlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBwYXJlbnRUYWJsZS5jb2x1bW5IZWFkZXJzKG1fY2hpbGRyZW4pOwotICAgIAorCisgICAg
bV9jaGlsZHJlbiA9IHBhcmVudFRhYmxlLmNvbHVtbkhlYWRlcnMoKTsKKwogICAgIGZvciAoY29u
c3QgYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQogICAgICAgICBtX2hlYWRlclJlY3QudW5pdGUo
Y2hpbGQtPmVsZW1lbnRSZWN0KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCmluZGV4IDdiNDljMjhiYzBjZDY4
NDE0MjZkNjdkYTUzNDgyYzEzMGMzYjY3NmYuLmNiZDlmNTc1ZTE2NDEzN2UwNWZhNTFjYzk1ZmRh
NjVlMGY4ZDliN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlUm93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgQWNjZXNzaWJpbGl0
eVJvbGUgQWNjZXNzaWJpbGl0eVRhYmxlUm93OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgp
CiBib29sIEFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6aXNUYWJsZVJvdygpIGNvbnN0CiB7CiAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogdGFibGUgPSBwYXJlbnRUYWJsZSgpOwotICAgIHJldHVybiBp
czxBY2Nlc3NpYmlsaXR5VGFibGU+KHRhYmxlKSAgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlPigqdGFibGUpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKTsKKyAgICByZXR1
cm4gaXM8QWNjZXNzaWJpbGl0eVRhYmxlPih0YWJsZSkgICYmIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZT4oKnRhYmxlKS5pc0V4cG9zYWJsZSgpOwogfQogICAgIAogQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eVRhYmxlUm93OjpvYnNlcnZhYmxlT2JqZWN0KCkgY29uc3QKQEAg
LTEwMCw3ICsxMDAsNyBAQCBBY2Nlc3NpYmlsaXR5VGFibGUqIEFjY2Vzc2liaWxpdHlUYWJsZVJv
dzo6cGFyZW50VGFibGUoKSBjb25zdAogICAgICAgICAvLyBjaG9vc2UgYW5vdGhlciBhbmNlc3Rv
ciB0YWJsZSBhcyB0aGlzIHJvdydzIHRhYmxlLgogICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0
eVRhYmxlPigqcGFyZW50KSkgewogICAgICAgICAgICAgYXV0byYgcGFyZW50VGFibGUgPSBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpOwotICAgICAgICAgICAgaWYgKHBhcmVu
dFRhYmxlLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkKKyAgICAgICAgICAgIGlm
IChwYXJlbnRUYWJsZS5pc0V4cG9zYWJsZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiAmcGFy
ZW50VGFibGU7CiAgICAgICAgICAgICBpZiAocGFyZW50VGFibGUubm9kZSgpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlLmNwcAppbmRleCBkMzJjODIyYWUxYzQ1MjE5NjkwNmZiZmRhYWUx
OTk4NDE2NzUwZDAxLi4xMjVjMTkyYmMwY2UzYzQ0YjEwMTQxMDM1YjYyMTM0NWE4OTZlZWY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlLmNwcApAQCAtNDI2LDcgKzQyNiw3IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdl
YmtpdEFjY2Vzc2libGVHZXRBdHRyaWJ1dGVzKEF0a09iamVjdCogb2JqZWN0KQogICAgICAgICAg
ICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAibXVs
dGlzY3JpcHQtdHlwZSIsICJwb3N0Iik7CiAgICAgfQogCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxp
dHlUYWJsZT4oKmNvcmVPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmNv
cmVPYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkgeworICAgIGlmIChp
czxBY2Nlc3NpYmlsaXR5VGFibGU+KCpjb3JlT2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGU+KCpjb3JlT2JqZWN0KS5pc0V4cG9zYWJsZSgpKSB7CiAgICAgICAgIGF1dG8mIHRh
YmxlID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqY29yZU9iamVjdCk7CiAgICAgICAg
IGludCByb3dDb3VudCA9IHRhYmxlLmF4Um93Q291bnQoKTsKICAgICAgICAgaWYgKHJvd0NvdW50
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAKaW5kZXggYThhOGU5MjM1Yzk1
MjA3NjJkYTk5NmUzZjRiY2Q3ZDg1NDMwYjI1My4uMTE1YTllZWEyYjExZDVhYjUxNjA2YzRhMDhk
MjM5ZWMzYjY2NjJlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwCkBA
IC0yMDgsOCArMjA4LDcgQEAgc3RhdGljIEF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxl
R2V0Q29sdW1uSGVhZGVyKEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBjb2wKIAogICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7CiAgICAgaWYgKGlzPEFjY2Vzc2li
aWxpdHlUYWJsZT4oKmFjY1RhYmxlKSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29sdW1uSGVhZGVyczsKLSAgICAgICAgZG93bmNh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFibGUpLmNvbHVtbkhlYWRlcnMoY29sdW1uSGVh
ZGVycyk7CisgICAgICAgIGF1dG8gY29sdW1uSGVhZGVycyA9IGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZT4oKmFjY1RhYmxlKS5jb2x1bW5IZWFkZXJzKCk7CiAKICAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBjb2x1bW5IZWFkZXIgOiBjb2x1bW5IZWFkZXJzKSB7CiAgICAgICAgICAgICBzdGQ6
OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBjb2x1bW5SYW5nZTsKQEAgLTIyOCw4ICsyMjcsNyBA
QCBzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dIZWFkZXIoQXRr
VGFibGUqIHRhYmxlLCBnaW50IHJvdykKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1Rh
YmxlID0gY29yZSh0YWJsZSk7CiAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1Rh
YmxlKSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3Igcm93SGVhZGVyczsKLSAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxl
PigqYWNjVGFibGUpLnJvd0hlYWRlcnMocm93SGVhZGVycyk7CisgICAgICAgIGF1dG8gcm93SGVh
ZGVycyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKS5yb3dIZWFkZXJz
KCk7CiAKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByb3dIZWFkZXIgOiByb3dIZWFkZXJzKSB7
CiAgICAgICAgICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiByb3dSYW5nZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHAKaW5kZXggOGE4YjQxYWYx
YjUyODk0N2MyMjBlZTY4ZTI2MDVjYzIyZWEzZjE2MC4uZWQxOTI1YjJhNTM5NDA5N2YwODJmNmJh
NWMwZjI5Mzg3NzQ2NTNiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxl
Q2VsbC5jcHAKQEAgLTU3LDggKzU3LDcgQEAgR1B0ckFycmF5KiB3ZWJraXRBY2Nlc3NpYmxlVGFi
bGVDZWxsR2V0Q29sdW1uSGVhZGVyQ2VsbHMoQXRrVGFibGVDZWxsKiBjZWxsKQogICAgIGlmICgh
aXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oYXhPYmplY3QpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBjb2x1bW5IZWFkZXJzOwotICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+
KCpheE9iamVjdCkuY29sdW1uSGVhZGVycyhjb2x1bW5IZWFkZXJzKTsKKyAgICBhdXRvIGNvbHVt
bkhlYWRlcnMgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3QpLmNv
bHVtbkhlYWRlcnMoKTsKIAogICAgIHJldHVybiBjb252ZXJ0VG9HUHRyQXJyYXkoY29sdW1uSGVh
ZGVycyk7CiB9CkBAIC03Miw4ICs3MSw3IEBAIEdQdHJBcnJheSogd2Via2l0QWNjZXNzaWJsZVRh
YmxlQ2VsbEdldFJvd0hlYWRlckNlbGxzKEF0a1RhYmxlQ2VsbCogY2VsbCkKICAgICBpZiAoIWlz
PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KGF4T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3Igcm93SGVhZGVyczsKLSAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhP
YmplY3QpLnJvd0hlYWRlcnMocm93SGVhZGVycyk7CisgICAgYXV0byByb3dIZWFkZXJzID0gZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmF4T2JqZWN0KS5yb3dIZWFkZXJzKCk7CiAK
ICAgICByZXR1cm4gY29udmVydFRvR1B0ckFycmF5KHJvd0hlYWRlcnMpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQppbmRleCA0NzRlODUzZTcxNmFjNTRiNTljMzQ0
YzIxZDA4ZmM1ZmZkYTUzYWQzLi4wYjNiMjY3MjMzOWJiMWRlZWY5MTlmNDgzMTc0OWI0ODE3OWU4
MWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQpAQCAtMTE5Myw3
ICsxMTkzLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3Ry
aW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiB7CiAgICAgLy8gRmluZCBpZiB0aGUgcGFy
ZW50IHRhYmxlIGZvciB0aGUgdGFibGUgY2VsbC4KICAgICBpZiAoQVhDb3JlT2JqZWN0KiBwYXJl
bnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0Pigqc2VsZi5heEJh
Y2tpbmdPYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewotICAg
ICAgICByZXR1cm4gaXM8QWNjZXNzaWJpbGl0eVRhYmxlPihvYmplY3QpICYmIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZT4ob2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5
KCk7CisgICAgICAgIHJldHVybiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KG9iamVjdCkgJiYgZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPihvYmplY3QpLmlzRXhwb3NhYmxlKCk7CiAgICAgfSkp
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihwYXJlbnQp
OwogICAgIHJldHVybiBuaWw7CkBAIC0xMjMwLDEyICsxMjMwLDEwIEBAIHN0YXRpYyB2b2lkIGFw
cGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3Ry
aW5nKQogICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGNvbHVtblJhbmdlOwogICAg
IHRhYmxlQ2VsbC0+cm93SW5kZXhSYW5nZShyb3dSYW5nZSk7CiAgICAgdGFibGVDZWxsLT5jb2x1
bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93SGVhZGVyczsKLSAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29sdW1uSGVhZGVyczsKLSAg
ICB0YWJsZS0+cm93SGVhZGVycyhyb3dIZWFkZXJzKTsKLSAgICB0YWJsZS0+Y29sdW1uSGVhZGVy
cyhjb2x1bW5IZWFkZXJzKTsKLSAgICAKKworICAgIGF1dG8gcm93SGVhZGVycyA9IHRhYmxlLT5y
b3dIZWFkZXJzKCk7CisgICAgYXV0byBjb2x1bW5IZWFkZXJzID0gdGFibGUtPmNvbHVtbkhlYWRl
cnMoKTsKKwogICAgIE5TTXV0YWJsZUFycmF5ICpoZWFkZXJzID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5XTsKICAgICAKICAgICB1bnNpZ25lZCBjb2x1bW5SYW5nZUluZGV4ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNvbHVtblJhbmdlLmZpcnN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAK
aW5kZXggYmQ2MTAwOWNhMTU0MzcxODYzYTU2ODNjNGE0ZTI4Y2NiZTQ1YTliOC4uMjgyZTk1Mzc3
MjM2NDM1MjViNjE1M2I1MTM1ZGJkYjcxNjJkYzM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVj
dC5jcHAKQEAgLTE0NCw3ICsxNDQsNiBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmluaXRpYWxp
emVBdHRyaWJ1dGVEYXRhKEFYQ29yZU9iamVjdCYgb2JqZWN0LCBib29sIGlzUm9vdAogICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWxpZGF0aW9uTWVzc2FnZSwgb2JqZWN0LnZhbGlk
YXRpb25NZXNzYWdlKCkpOwogICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpCbG9ja3F1
b3RlTGV2ZWwsIG9iamVjdC5ibG9ja3F1b3RlTGV2ZWwoKSk7CiAgICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OkhlYWRpbmdMZXZlbCwgb2JqZWN0LmhlYWRpbmdMZXZlbCgpKTsKLSAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VGFibGVMZXZlbCwgb2JqZWN0LnRhYmxlTGV2ZWwo
KSk7CiAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFjY2Vzc2liaWxpdHlCdXR0b25T
dGF0ZSwgc3RhdGljX2Nhc3Q8aW50PihvYmplY3QuY2hlY2tib3hPclJhZGlvVmFsdWUoKSkpOwog
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZURlc2NyaXB0aW9uLCBvYmplY3Qu
dmFsdWVEZXNjcmlwdGlvbigpKTsKICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VmFs
dWVGb3JSYW5nZSwgb2JqZWN0LnZhbHVlRm9yUmFuZ2UoKSk7CkBAIC0yMTcsNiArMjE2LDI2IEBA
IHZvaWQgQVhJc29sYXRlZE9iamVjdDo6aW5pdGlhbGl6ZUF0dHJpYnV0ZURhdGEoQVhDb3JlT2Jq
ZWN0JiBvYmplY3QsIGJvb2wgaXNSb290CiAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OkxpdmVSZWdpb25TdGF0dXMsIG9iamVjdC5saXZlUmVnaW9uU3RhdHVzKCkpOwogICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpMaXZlUmVnaW9uUmVsZXZhbnQsIG9iamVjdC5saXZlUmVn
aW9uUmVsZXZhbnQoKSk7CiAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkxpdmVSZWdp
b25BdG9taWMsIG9iamVjdC5saXZlUmVnaW9uQXRvbWljKCkpOworCisgICAgaWYgKG9iamVjdC5p
c1RhYmxlKCkpIHsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzVGFibGUs
IG9iamVjdC5pc1RhYmxlKCkpOworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
SXNFeHBvc2FibGUsIG9iamVjdC5pc0V4cG9zYWJsZSgpKTsKKyAgICAgICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OklzRGF0YVRhYmxlLCBvYmplY3QuaXNEYXRhVGFibGUoKSk7CisgICAg
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpUYWJsZUxldmVsLCBvYmplY3QudGFibGVM
ZXZlbCgpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzU2Vs
ZWN0ZWRSb3dzLCBvYmplY3Quc3VwcG9ydHNTZWxlY3RlZFJvd3MoKSk7CisgICAgICAgIHNldE9i
amVjdFZlY3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2x1bW5zLCBvYmplY3QuY29sdW1u
cygpKTsKKyAgICAgICAgc2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlJv
d3MsIG9iamVjdC5yb3dzKCkpOworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
Q29sdW1uQ291bnQsIG9iamVjdC5jb2x1bW5Db3VudCgpKTsKKyAgICAgICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OlJvd0NvdW50LCBvYmplY3Qucm93Q291bnQoKSk7CisgICAgICAgIHNl
dE9iamVjdFZlY3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDZWxscywgb2JqZWN0LmNlbGxz
KCkpOworICAgICAgICBzZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q29s
dW1uSGVhZGVycywgb2JqZWN0LmNvbHVtbkhlYWRlcnMoKSk7CisgICAgICAgIHNldE9iamVjdFZl
Y3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpSb3dIZWFkZXJzLCBvYmplY3Qucm93SGVhZGVy
cygpKTsKKyAgICAgICAgc2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZp
c2libGVSb3dzLCBvYmplY3QudmlzaWJsZVJvd3MoKSk7CisgICAgICAgIHNldFByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpIZWFkZXJDb250YWluZXIsIG9iamVjdC5oZWFkZXJDb250YWluZXIoKSk7
CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBWENvbHVtbkNvdW50LCBvYmpl
Y3QuYXhDb2x1bW5Db3VudCgpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OkFYUm93Q291bnQsIG9iamVjdC5heFJvd0NvdW50KCkpOworICAgIH0KKwogICAgIGlmIChvYmpl
Y3QuaXNUZXh0Q29udHJvbCgpKQogICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
VGV4dExlbmd0aCwgb2JqZWN0LnRleHRMZW5ndGgoKSk7CiAKQEAgLTM3OCwxNyArMzk3LDE2IEBA
IHZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBBWENvcmVPYmplCiAgICAgICAgIHNldFByb3BlcnR5KHByb3BlcnR5TmFt
ZSwgbnVsbHB0ciwgdHJ1ZSk7CiB9CiAKLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0T2JqZWN0
VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKQordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRPYmpl
Y3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pCiB7Ci0gICAgc2l6ZV90IGNoaWxkcmVu
U2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICBpZiAoIWNoaWxkcmVuU2l6ZSkKKyAgICBpZiAo
IWNoaWxkcmVuLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFZlY3RvcjxBWElE
PiBjaGlsZHJlblZlY3RvcjsKLSAgICBjaGlsZHJlblZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkoY2hp
bGRyZW5TaXplKTsKLSAgICBmb3IgKGF1dG8gY2hpbGRPYmplY3QgOiBjaGlsZHJlbikKLSAgICAg
ICAgY2hpbGRyZW5WZWN0b3IudW5jaGVja2VkQXBwZW5kKGNoaWxkT2JqZWN0LT5vYmplY3RJRCgp
KTsKLSAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGNoaWxkcmVuVmVjdG9yKTsKKworICAg
IFZlY3RvcjxBWElEPiBjaGlsZElEcyhjaGlsZHJlbi5zaXplKCkpOworICAgIGZvciAoYXV0byBj
aGlsZCA6IGNoaWxkcmVuKQorICAgICAgICBjaGlsZElEcy51bmNoZWNrZWRBcHBlbmQoY2hpbGQt
Pm9iamVjdElEKCkpOworCisgICAgc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBjaGlsZElEcyk7
CiB9CiAKIHZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBBdHRyaWJ1dGVWYWx1ZVZhcmlhbnQmJiB2YWx1ZSwgYm9vbCBzaG91bGRS
ZW1vdmUpCkBAIC00NTgsNiArNDc2LDE3IEBAIGJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNEZXRh
Y2hlZEZyb21QYXJlbnQoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorQVhDb3JlT2JqZWN0KiBB
WElzb2xhdGVkT2JqZWN0OjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbkluZGV4
LCB1bnNpZ25lZCByb3dJbmRleCkKK3sKKyAgICBhdXRvIGNlbGwgPSBBY2Nlc3NpYmlsaXR5Ojpy
ZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8QVhDb3JlT2JqZWN0Kj4oWyZjb2x1bW5JbmRleCwg
JnJvd0luZGV4LCB0aGlzXSAoKSAtPiBBWENvcmVPYmplY3QqIHsKKyAgICAgICAgaWYgKGF1dG8q
IG9iamVjdCA9IGFzc29jaWF0ZWRBWE9iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9iamVj
dC0+Y2VsbEZvckNvbHVtbkFuZFJvdyhjb2x1bW5JbmRleCwgcm93SW5kZXgpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9KTsKKworICAgIHJldHVybiBjZWxsID8gdHJlZSgpLT5ub2Rl
Rm9ySUQoY2VsbC0+b2JqZWN0SUQoKSkuZ2V0KCkgOiBudWxscHRyOworfQorCiB2b2lkIEFYSXNv
bGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4m
IHRleHRzKSBjb25zdAogewogICAgIGF1dG8gaXNvbGF0ZWRUZXh0cyA9IHZlY3RvckF0dHJpYnV0
ZVZhbHVlPEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVUZXh0PihBWFByb3BlcnR5TmFtZTo6QWNj
ZXNzaWJpbGl0eVRleHQpOwpAQCAtNzg2LDEyICs4MTUsNyBAQCBpbnQgQVhJc29sYXRlZE9iamVj
dDo6aW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAog
CiB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmZpbGxDaGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFY
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBj
aGlsZHJlbikgY29uc3QKIHsKLSAgICBWZWN0b3I8QVhJRD4gY2hpbGRJRHMgPSB2ZWN0b3JBdHRy
aWJ1dGVWYWx1ZTxBWElEPihwcm9wZXJ0eU5hbWUpOwotICAgIGNoaWxkcmVuLnJlc2VydmVDYXBh
Y2l0eShjaGlsZElEcy5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGRJRCA6IGNo
aWxkSURzKSB7Ci0gICAgICAgIGlmIChhdXRvIG9iamVjdCA9IHRyZWUoKS0+bm9kZUZvcklEKGNo
aWxkSUQpKQotICAgICAgICAgICAgY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKG9iamVjdCk7Ci0g
ICAgfQorICAgIGNoaWxkcmVuID0gdHJlZSgpLT5vYmplY3RzRm9ySURzKHZlY3RvckF0dHJpYnV0
ZVZhbHVlPEFYSUQ+KHByb3BlcnR5TmFtZSkpOwogfQogCiB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6
OnVwZGF0ZUJhY2tpbmdTdG9yZSgpCkBAIC05MDIsNiArOTI2LDEyIEBAIGJvb2wgQVhJc29sYXRl
ZE9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQWNjZXNzaWJpbGl0eVRhYmxlSW5z
dGFuY2UoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwogYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0F0dGFjaG1lbnRFbGVtZW50KCkg
Y29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTk2OCwxMiArOTk4LDYgQEAg
Ym9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0xhYmVsKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNEYXRhVGFibGUoKSBjb25zdAotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBBWElz
b2xhdGVkT2JqZWN0Ojppc0ltYWdlTWFwTGluaygpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmgKaW5kZXggMmY2ZDJkZDUyNzZmOGRlYTg5
MTNlMWUxNzI3MWI5NWIzY2VmOTc1NC4uMTFlMDljMjA0YmNmOWIyMmY2NmYwNTI1MDViZTAxZTVm
YTJkY2M3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaApAQCAtOTgsNiArOTgsOCBAQCBwcml2
YXRlOgogICAgICAgICBBUklBVHJlZVJvd3MsCiAgICAgICAgIEFSSUFSb2xlQXR0cmlidXRlLAog
ICAgICAgICBBUklBT3duc0VsZW1lbnRzLAorICAgICAgICBBWENvbHVtbkNvdW50LAorICAgICAg
ICBBWFJvd0NvdW50LAogICAgICAgICBCbG9ja3F1b3RlTGV2ZWwsCiAgICAgICAgIEJvdW5kaW5n
Qm94UmVjdCwKICAgICAgICAgQ2FuSGF2ZVNlbGVjdGVkQ2hpbGRyZW4sCkBAIC0xMTIsOSArMTE0
LDEzIEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShJT1NfRkFN
SUxZKQogICAgICAgICBDYXJldEJyb3dzaW5nRW5hYmxlZCwKICNlbmRpZgorICAgICAgICBDZWxs
cywKICAgICAgICAgQ2xhc3NMaXN0LAogICAgICAgICBDbGlja1BvaW50LAogICAgICAgICBDb2xv
clZhbHVlLAorICAgICAgICBDb2x1bW5zLAorICAgICAgICBDb2x1bW5Db3VudCwKKyAgICAgICAg
Q29sdW1uSGVhZGVycywKICAgICAgICAgQ29tcHV0ZWRMYWJlbCwKICAgICAgICAgQ29tcHV0ZWRS
b2xlU3RyaW5nLAogICAgICAgICBDdXJyZW50U3RhdGUsCkBAIC0xMzQsNiArMTQwLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgSGFzQVJJQVZhbHVlTm93LAogICAgICAgICBIYXNDaGlsZHJlbiwKICAg
ICAgICAgSGFzUG9wdXAsCisgICAgICAgIEhlYWRlckNvbnRhaW5lciwKICAgICAgICAgSGVhZGlu
Z0xldmVsLAogICAgICAgICBIZWxwVGV4dCwKICAgICAgICAgSGllcmFyY2hpY2FsTGV2ZWwsCkBA
IC0xNTMsOSArMTYwLDExIEBAIHByaXZhdGU6CiAgICAgICAgIElzQ2hlY2tlZCwKICAgICAgICAg
SXNDb2xsYXBzZWQsCiAgICAgICAgIElzQ29udHJvbCwKKyAgICAgICAgSXNEYXRhVGFibGUsCiAg
ICAgICAgIElzRGVzY3JpcHRpb25MaXN0LAogICAgICAgICBJc0VuYWJsZWQsCiAgICAgICAgIElz
RXhwYW5kZWQsCisgICAgICAgIElzRXhwb3NhYmxlLAogICAgICAgICBJc0ZpZWxkc2V0LAogICAg
ICAgICBJc0ZpbGVVcGxvYWRCdXR0b24sCiAgICAgICAgIElzRm9jdXNlZCwKQEAgLTIyMiw2ICsy
MzEsNyBAQCBwcml2YXRlOgogICAgICAgICBJc1Nob3dpbmdWYWxpZGF0aW9uTWVzc2FnZSwKICAg
ICAgICAgSXNTbGlkZXIsCiAgICAgICAgIElzU3R5bGVGb3JtYXRHcm91cCwKKyAgICAgICAgSXNU
YWJsZSwKICAgICAgICAgSXNUYWJsZUNlbGwsCiAgICAgICAgIElzVGFibGVDb2x1bW4sCiAgICAg
ICAgIElzVGFibGVSb3csCkBAIC0yNjksNiArMjc5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgUm9s
ZVZhbHVlLAogICAgICAgICBSb2xlUGxhdGZvcm1TdHJpbmcsCiAgICAgICAgIFJvbGVEZXNjcmlw
dGlvbiwKKyAgICAgICAgUm93cywKKyAgICAgICAgUm93Q291bnQsCisgICAgICAgIFJvd0hlYWRl
cnMsCiAgICAgICAgIFNlbGVjdGVkQ2hpbGRyZW4sCiAgICAgICAgIFNlbGVjdGVkUmFkaW9CdXR0
b24sCiAgICAgICAgIFNlbGVjdGVkVGFiSXRlbSwKQEAgLTI5MSw2ICszMDQsNyBAQCBwcml2YXRl
OgogICAgICAgICBTdXBwb3J0c1ByZXNzQWN0aW9uLAogICAgICAgICBTdXBwb3J0c1JhbmdlVmFs
dWUsCiAgICAgICAgIFN1cHBvcnRzUmVxdWlyZWRBdHRyaWJ1dGUsCisgICAgICAgIFN1cHBvcnRz
U2VsZWN0ZWRSb3dzLAogICAgICAgICBTdXBwb3J0c1NldFNpemUsCiAgICAgICAgIFRhYkNoaWxk
cmVuLAogICAgICAgICBUYWJsZUxldmVsLApAQCAtMzA1LDYgKzMxOSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIFZhbGlkYXRpb25NZXNzYWdlLAogICAgICAgICBWZXJ0aWNhbFNjcm9sbEJhciwKICAg
ICAgICAgVmlzaWJsZUNoaWxkcmVuLAorICAgICAgICBWaXNpYmxlUm93cywKICAgICB9OwogICAg
IAogICAgIHR5cGVkZWYgc3RkOjpwYWlyPEFYSUQsIEFYSUQ+IEFjY2Vzc2liaWxpdHlJc29sYXRl
ZFRyZWVNYXRoTXVsdGlzY3JpcHRQYWlyOwpAQCAtMzE3LDcgKzMzMiw3IEBAIHByaXZhdGU6CiAg
ICAgdXNpbmcgQXR0cmlidXRlVmFsdWVWYXJpYW50ID0gVmFyaWFudDxzdGQ6Om51bGxwdHJfdCwg
U3RyaW5nLCBib29sLCBpbnQsIHVuc2lnbmVkLCBkb3VibGUsIGZsb2F0LCB1aW50NjRfdCwgQ29s
b3IsIFVSTCwgTGF5b3V0UmVjdCwgQVhJRCwgSW50UG9pbnQsIE9wdGlvblNldDxTcGVha0FzPiwg
VmVjdG9yPEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVUZXh0PiwgVmVjdG9yPEFYSUQ+LCBWZWN0
b3I8QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1hdGhNdWx0aXNjcmlwdFBhaXI+LCBWZWN0b3I8
U3RyaW5nPj47CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSwgQXR0cmlidXRl
VmFsdWVWYXJpYW50JiYsIGJvb2wgc2hvdWxkUmVtb3ZlID0gZmFsc2UpOwogICAgIHZvaWQgc2V0
T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUsIEFYQ29yZU9iamVjdCopOwotICAgIHZvaWQg
c2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUsIEFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciYpOworICAgIHZvaWQgc2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWUsIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwogCiAgICAgYm9vbCBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIGNvbnN0IFN0cmlu
ZyBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CkBAIC0zNjQsNyAr
Mzc5LDI1IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc09yZGVyZWRMaXN0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc09yZGVyZWRM
aXN0KTsgfQogICAgIGJvb2wgaXNEZXNjcmlwdGlvbkxpc3QoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzRGVzY3JpcHRpb25MaXN0
KTsgfQogCi0gICAgYm9vbCBpc1RhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICAvLyBUYWJsZSBzdXBwb3J0LgorICAgIGJvb2wgaXNUYWJsZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNUYWJsZSk7
IH0KKyAgICBib29sIGlzRXhwb3NhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0V4cG9zYWJsZSk7IH0KKyAgICBib29sIGlz
RGF0YVRhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpJc0RhdGFUYWJsZSk7IH0KKyAgICBpbnQgdGFibGVMZXZlbCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpUYWJs
ZUxldmVsKTsgfQorICAgIGJvb2wgc3VwcG9ydHNTZWxlY3RlZFJvd3MoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzU2Vs
ZWN0ZWRSb3dzKTsgfQorICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5zKCkg
b3ZlcnJpZGUgeyByZXR1cm4gdHJlZSgpLT5vYmplY3RzRm9ySURzKHZlY3RvckF0dHJpYnV0ZVZh
bHVlPEFYSUQ+KEFYUHJvcGVydHlOYW1lOjpDb2x1bW5zKSk7IH0KKyAgICBBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3Igcm93cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRyZWUoKS0+b2JqZWN0c0Zv
cklEcyh2ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxBWElEPihBWFByb3BlcnR5TmFtZTo6Um93cykpOyB9
CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKSBvdmVycmlkZSB7IHJldHVybiB1bnNpZ25lZEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2x1bW5Db3VudCk7IH0KKyAgICB1bnNpZ25l
ZCByb3dDb3VudCgpIG92ZXJyaWRlIHsgcmV0dXJuIHVuc2lnbmVkQXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWU6OlJvd0NvdW50KTsgfQorICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciBjZWxscygpIG92ZXJyaWRlIHsgcmV0dXJuIHRyZWUoKS0+b2JqZWN0c0ZvcklEcyh2ZWN0b3JB
dHRyaWJ1dGVWYWx1ZTxBWElEPihBWFByb3BlcnR5TmFtZTo6Q2VsbHMpKTsgfQorICAgIEFYQ29y
ZU9iamVjdCogY2VsbEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCwgdW5zaWduZWQpIG92ZXJyaWRl
OworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5IZWFkZXJzKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJlZSgpLT5vYmplY3RzRm9ySURzKHZlY3RvckF0dHJpYnV0ZVZhbHVlPEFY
SUQ+KEFYUHJvcGVydHlOYW1lOjpDb2x1bW5IZWFkZXJzKSk7IH0KKyAgICBBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3Igcm93SGVhZGVycygpIG92ZXJyaWRlIHsgcmV0dXJuIHRyZWUoKS0+b2Jq
ZWN0c0ZvcklEcyh2ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxBWElEPihBWFByb3BlcnR5TmFtZTo6Um93
SGVhZGVycykpOyB9CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHZpc2libGVSb3dz
KCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJlZSgpLT5vYmplY3RzRm9ySURzKHZlY3RvckF0dHJpYnV0
ZVZhbHVlPEFYSUQ+KEFYUHJvcGVydHlOYW1lOjpWaXNpYmxlUm93cykpOyB9CisgICAgQVhDb3Jl
T2JqZWN0KiBoZWFkZXJDb250YWluZXIoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SGVhZGVyQ29udGFpbmVyKTsgfQorICAgIGludCBheENv
bHVtbkNvdW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWU6OkFYQ29sdW1uQ291bnQpOyB9CisgICAgaW50IGF4Um93Q291bnQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6QVhS
b3dDb3VudCk7IH0KKwogICAgIGJvb2wgaXNUYWJsZVJvdygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNUYWJsZVJvdyk7IH0KICAg
ICBib29sIGlzVGFibGVDb2x1bW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzVGFibGVDb2x1bW4pOyB9CiAgICAgYm9vbCBpc1Rh
YmxlQ2VsbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6SXNUYWJsZUNlbGwpOyB9CkBAIC00MDQsNyArNDM3LDYgQEAgcHJpdmF0ZToK
ICAgICBTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBz
dHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VmFsaWRhdGlvbk1lc3NhZ2UpOyB9
CiAgICAgdW5zaWduZWQgYmxvY2txdW90ZUxldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dW5zaWduZWRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6QmxvY2txdW90ZUxldmVsKTsg
fQogICAgIGludCBoZWFkaW5nTGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBpbnRBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SGVhZGluZ0xldmVsKTsgfQotICAgIGludCB0YWJs
ZUxldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OlRhYmxlTGV2ZWwpOyB9CiAgICAgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlIGNo
ZWNrYm94T3JSYWRpb1ZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
QWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlPihpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6QWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlKSk7IH0KICAgICBTdHJpbmcgdmFsdWVEZXNjcmlw
dGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpWYWx1ZURlc2NyaXB0aW9uKTsgfQogICAgIGZsb2F0IHZhbHVlRm9yUmFuZ2Uo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmbG9hdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlO
YW1lOjpWYWx1ZUZvclJhbmdlKTsgfQpAQCAtNjU2LDYgKzY4OCw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBpc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9v
bCBpc0FjY2Vzc2liaWxpdHlTVkdSb290KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0Fj
Y2Vzc2liaWxpdHlTVkdFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0FjY2Vz
c2liaWxpdHlUYWJsZUluc3RhbmNlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0F0dGFj
aG1lbnRFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc05hdGl2ZUltYWdlKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGU7
CkBAIC02NjcsNyArNzAwLDYgQEAgcHJpdmF0ZToKICAgICBib29sIGlzU2xpZGVyVGh1bWIoKSBj
b25zdCBvdmVycmlkZTsKICAgICBib29sIGlzSW5wdXRTbGlkZXIoKSBjb25zdCBvdmVycmlkZTsK
ICAgICBib29sIGlzTGFiZWwoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzRGF0YVRhYmxl
KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0ltYWdlTWFwTGluaygpIGNvbnN0IG92ZXJy
aWRlOwogICAgIGJvb2wgaXNOYXRpdmVTcGluQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBpc1NwaW5CdXR0b25QYXJ0KCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJl
ZS5jcHAKaW5kZXggMTE0MTU2N2IwMDUwNDJmZGYzZjZkYmM3N2ExODk1MjU1ODM0MTI5ZS4uZTgw
Y2Y0M2MyOTEwMWZhMmNiMTI3MzAwMzM4ODBhZmU3YjBjNWUzNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRU
cmVlLmNwcApAQCAtMTMyLDkgKzEzMiwxOSBAQCBSZWZQdHI8QVhJc29sYXRlZFRyZWU+IEFYSXNv
bGF0ZWRUcmVlOjp0cmVlRm9yUGFnZUlEKFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCkKIAogUmVmUHRy
PEFYSXNvbGF0ZWRPYmplY3Q+IEFYSXNvbGF0ZWRUcmVlOjpub2RlRm9ySUQoQVhJRCBheElEKSBj
b25zdAogewotICAgIGlmICghYXhJRCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIG1fcmVhZGVyVGhyZWFkTm9kZU1hcC5nZXQoYXhJRCk7CisgICAgcmV0dXJuIGF4SUQgIT0g
SW52YWxpZEFYSUQgPyBtX3JlYWRlclRocmVhZE5vZGVNYXAuZ2V0KGF4SUQpIDogbnVsbHB0cjsK
K30KKworVmVjdG9yPFJlZlB0cjxBWENvcmVPYmplY3Q+PiBBWElzb2xhdGVkVHJlZTo6b2JqZWN0
c0ZvcklEcyhWZWN0b3I8QVhJRD4gYXhJRHMpIGNvbnN0Cit7CisgICAgVmVjdG9yPFJlZlB0cjxB
WENvcmVPYmplY3Q+PiByZXN1bHQoYXhJRHMuc2l6ZSgpKTsKKworICAgIGZvciAoY29uc3QgYXV0
byYgYXhJRCA6IGF4SURzKSB7CisgICAgICAgIGlmIChhdXRvIG9iamVjdCA9IG5vZGVGb3JJRChh
eElEKSkKKyAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQob2JqZWN0KTsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBSZWZQdHI8QVhJc29sYXRlZE9iamVjdD4gQVhJ
c29sYXRlZFRyZWU6OmZvY3VzZWRVSUVsZW1lbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgKaW5kZXgg
YmI4ZjBkMzg4ZTA2NjA0NGE1MmMzM2Y2ZWViNjVjZTE5MzdkMWIxMy4uYjUwYTk1ZGFmOWFlMmU3
NWJmMDE1OTQ2MDJmNzFhNDRiZmUyZTU3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCkBAIC02MCw2
ICs2MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8QVhJc29sYXRlZE9i
amVjdD4gZm9jdXNlZFVJRWxlbWVudCgpOwogICAgIFJlZlB0cjxBWElzb2xhdGVkT2JqZWN0PiBu
b2RlRm9ySUQoQVhJRCkgY29uc3Q7CiAgICAgc3RhdGljIFJlZlB0cjxBWElzb2xhdGVkT2JqZWN0
PiBub2RlSW5UcmVlRm9ySUQoQVhJc29sYXRlZFRyZWVJRCwgQVhJRCk7CisgICAgVmVjdG9yPFJl
ZlB0cjxBWENvcmVPYmplY3Q+PiBvYmplY3RzRm9ySURzKFZlY3RvcjxBWElEPikgY29uc3Q7CiAK
ICAgICBzdHJ1Y3QgTm9kZUNoYW5nZSB7CiAgICAgICAgIFJlZjxBWElzb2xhdGVkT2JqZWN0PiBt
X2lzb2xhdGVkT2JqZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0KaW5kZXggOWQ0OTRmMWI1M2FlYjZiNzgzZmFmZGQyYTU2
MzJiMDUwYjdhMzU4My4uY2JiOGNkOWQ1ODljOTEwZmViYzhmNzRhODc4Y2U2NWMzNjY5YTUyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNo
ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENh
Y2hlTWFjLm1tCkBAIC0zMDMsNyArMzAzLDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0UGxh
dGZvcm1Ob3RpZmljYXRpb24oQVhDb3JlT2JqZWN0KiBvYmosIEFYTm90aWZpY2F0aW9uIG4KICAg
ICAgICAgICAgIG1hY05vdGlmaWNhdGlvbiA9IEAiQVhJbnZhbGlkU3RhdHVzQ2hhbmdlZCI7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBWFNlbGVjdGVkQ2hpbGRyZW5DaGFuZ2Vk
OgotICAgICAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9iaikgJiYgZG93bmNh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqKS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmls
aXR5KCkpCisgICAgICAgICAgICBpZiAob2JqLT5pc1RhYmxlKCkgJiYgb2JqLT5pc0V4cG9zYWJs
ZSgpKQogICAgICAgICAgICAgICAgIG1hY05vdGlmaWNhdGlvbiA9IE5TQWNjZXNzaWJpbGl0eVNl
bGVjdGVkUm93c0NoYW5nZWROb3RpZmljYXRpb247CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgbWFjTm90aWZpY2F0aW9uID0gTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJl
bkNoYW5nZWROb3RpZmljYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFj
Lm1tCmluZGV4IDQ2ZTI2YTZjMmI3YTUyYWIyMTg4ZmRjYjI1NjY3Yzg0NjZmODE2NDIuLjg3NWQz
ZWQ4MjBhN2I1Mjc0MTQxMDcyM2Q4ZDM5Y2FkNzQzYzIzMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC0xMzcyLDEwMSArMTM3MiwxMDIgQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKIC0gKE5TQXJyYXkqKWFkZGl0aW9uYWxBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKIHsKLSAgICBpZiAoIXNlbGYuYXhCYWNraW5nT2JqZWN0
KQorICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdDsKKyAgICBp
ZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCisKICAgICBOU011
dGFibGVBcnJheSAqYWRkaXRpb25hbCA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c0FSSUFPd25zKCkpCisgICAgaWYgKGJhY2tp
bmdPYmplY3QtPnN1cHBvcnRzQVJJQU93bnMoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eU93bnNBdHRyaWJ1dGVdOwotICAgIAotICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNUb2dnbGVCdXR0b24oKSkKKworICAgIGlmIChiYWNraW5nT2JqZWN0
LT5pc1RvZ2dsZUJ1dHRvbigpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOwotICAgIAotICAgIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpIHx8IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1N1bW1h
cnkoKSkKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkKCkgfHwgYmFj
a2luZ09iamVjdC0+aXNTdW1tYXJ5KCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlFeHBhbmRlZEF0dHJpYnV0ZV07Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc1Njcm9sbGJhcigpCi0gICAgICAgIHx8IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc1JhZGlvR3JvdXAoKQotICAgICAgICB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNT
cGxpdHRlcigpCi0gICAgICAgIHx8IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Rvb2xiYXIoKSkK
KworICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1Njcm9sbGJhcigpCisgICAgICAgIHx8IGJhY2tp
bmdPYmplY3QtPmlzUmFkaW9Hcm91cCgpCisgICAgICAgIHx8IGJhY2tpbmdPYmplY3QtPmlzU3Bs
aXR0ZXIoKQorICAgICAgICB8fCBiYWNraW5nT2JqZWN0LT5pc1Rvb2xiYXIoKSkKICAgICAgICAg
W2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmlidXRl
XTsKLSAgICAKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzQVJJQURyYWdn
aW5nKCkpCisKKyAgICBpZiAoYmFja2luZ09iamVjdC0+c3VwcG9ydHNBUklBRHJhZ2dpbmcoKSkK
ICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRy
aWJ1dGVdOwotICAgIAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNBUklB
RHJvcHBpbmcoKSkKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5zdXBwb3J0c0FSSUFEcm9wcGlu
ZygpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RHJvcEVm
ZmVjdHNBdHRyaWJ1dGVdOwotICAgIAotICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpz
ZWxmLmF4QmFja2luZ09iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2Vs
Zi5heEJhY2tpbmdPYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSAmJiBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkuc3VwcG9y
dHNTZWxlY3RlZFJvd3MoKSkKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RhYmxlKCkgJiYg
YmFja2luZ09iamVjdC0+aXNFeHBvc2FibGUoKSAmJiBiYWNraW5nT2JqZWN0LT5zdXBwb3J0c1Nl
bGVjdGVkUm93cygpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5U2VsZWN0ZWRSb3dzQXR0cmlidXRlXTsKLSAgICAKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPnN1cHBvcnRzTGl2ZVJlZ2lvbigpKSB7CisKKyAgICBpZiAoYmFja2luZ09iamVjdC0+
c3VwcG9ydHNMaXZlUmVnaW9uKCkpIHsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eUFSSUFMaXZlQXR0cmlidXRlXTsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRk
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFSZWxldmFudEF0dHJpYnV0ZV07CiAgICAgfQotICAg
IAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNTZXRTaXplKCkpCisKKyAg
ICBpZiAoYmFja2luZ09iamVjdC0+c3VwcG9ydHNTZXRTaXplKCkpCiAgICAgICAgIFthZGRpdGlv
bmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBUklBU2V0U2l6ZUF0dHJpYnV0ZV07Ci0gICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c1Bvc0luU2V0KCkpCisKKyAgICBpZiAo
YmFja2luZ09iamVjdC0+c3VwcG9ydHNQb3NJblNldCgpKQogICAgICAgICBbYWRkaXRpb25hbCBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5QVJJQVBvc0luU2V0QXR0cmlidXRlXTsKLSAgICAKLSAg
ICBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbiBzb3J0RGlyZWN0aW9uID0gc2VsZi5heEJhY2tp
bmdPYmplY3QtPnNvcnREaXJlY3Rpb24oKTsKKworICAgIEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0
aW9uIHNvcnREaXJlY3Rpb24gPSBiYWNraW5nT2JqZWN0LT5zb3J0RGlyZWN0aW9uKCk7CiAgICAg
aWYgKHNvcnREaXJlY3Rpb24gIT0gQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb246Ok5vbmUgJiYg
c29ydERpcmVjdGlvbiAhPSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6SW52YWxpZCkKICAg
ICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb25B
dHRyaWJ1dGVdOwotICAgIAorCiAgICAgLy8gSWYgYW4gb2JqZWN0IGlzIGEgY2hpbGQgb2YgYSBs
aXZlIHJlZ2lvbiwgdGhlbiBhZGQgdGhlc2UKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzSW5zaWRlTGl2ZVJlZ2lvbigpKQorICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc0luc2lkZUxp
dmVSZWdpb24oKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eUFSSUFBdG9taWNBdHRyaWJ1dGVdOworCiAgICAgLy8gQWxsIG9iamVjdHMgc2hvdWxkIGV4cG9z
ZSB0aGUgQVJJQSBidXN5IGF0dHJpYnV0ZSAoQVJJQSAxLjEgd2l0aCBJU1NVRS01MzgpLgogICAg
IFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlFbGVtZW50QnVzeUF0dHJpYnV0
ZV07Ci0gICAgCisKICAgICAvLyBQb3B1cCBidXR0b25zIG9uIHRoZSBNYWMgZXhwb3NlIHRoZSB2
YWx1ZSBhdHRyaWJ1dGUuCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1BvcFVwQnV0
dG9uKCkpIHsKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNQb3BVcEJ1dHRvbigpKQogICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOwot
ICAgIH0KIAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNEYXRldGltZUF0
dHJpYnV0ZSgpKQorICAgIGlmIChiYWNraW5nT2JqZWN0LT5zdXBwb3J0c0RhdGV0aW1lQXR0cmli
dXRlKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlEYXRl
dGltZVZhbHVlQXR0cmlidXRlXTsKLSAgICAKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnN1cHBvcnRzUmVxdWlyZWRBdHRyaWJ1dGUoKSkgeworCisgICAgaWYgKGJhY2tpbmdPYmplY3Qt
PnN1cHBvcnRzUmVxdWlyZWRBdHRyaWJ1dGUoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eVJlcXVpcmVkQXR0cmlidXRlXTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5oYXNQb3B1cCgpKQorCisgICAgaWYgKGJhY2tpbmdP
YmplY3QtPmhhc1BvcHVwKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vz
c2liaWxpdHlIYXNQb3B1cEF0dHJpYnV0ZV07Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc01hdGhSb290KCkpIHsKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc01hdGhS
b290KCkpIHsKICAgICAgICAgLy8gVGhlIGluZGV4IG9mIGEgc3F1YXJlIHJvb3QgaXMgYWx3YXlz
IGtub3duLCBzbyB0aGVyZSdzIG5vIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggaXQuCi0gICAgICAg
IGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFNxdWFyZVJvb3QoKSkKKyAgICAgICAg
aWYgKCFiYWNraW5nT2JqZWN0LT5pc01hdGhTcXVhcmVSb290KCkpCiAgICAgICAgICAgICBbYWRk
aXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RJbmRleEF0dHJpYnV0ZV07
CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdFJh
ZGljYW5kQXR0cmlidXRlXTsKLSAgICB9IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c01hdGhGcmFjdGlvbigpKSB7CisgICAgfSBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc01hdGhG
cmFjdGlvbigpKSB7CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlNYXRoRnJhY3Rpb25OdW1lcmF0b3JBdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25hbCBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9uRGVub21pbmF0b3JBdHRyaWJ1dGVd
OwogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aExpbmVU
aGlja25lc3NBdHRyaWJ1dGVdOwotICAgIH0gZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkpIHsKKyAgICB9IGVsc2UgaWYgKGJhY2tpbmdP
YmplY3QtPmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkpIHsKICAgICAgICAgW2FkZGl0aW9u
YWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhCYXNlQXR0cmlidXRlXTsKICAgICAgICAg
W2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhTdWJzY3JpcHRBdHRyaWJ1
dGVdOwogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFN1
cGVyc2NyaXB0QXR0cmlidXRlXTsKLSAgICB9IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc01hdGhVbmRlck92ZXIoKSkgeworICAgIH0gZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNN
YXRoVW5kZXJPdmVyKCkpIHsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eU1hdGhCYXNlQXR0cmlidXRlXTsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eU1hdGhVbmRlckF0dHJpYnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFs
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoT3ZlckF0dHJpYnV0ZV07Ci0gICAgfSBlbHNl
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoRmVuY2VkKCkpIHsKKyAgICB9IGVsc2Ug
aWYgKGJhY2tpbmdPYmplY3QtPmlzTWF0aEZlbmNlZCgpKSB7CiAgICAgICAgIFthZGRpdGlvbmFs
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoRmVuY2VkT3BlbkF0dHJpYnV0ZV07CiAgICAg
ICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoRmVuY2VkQ2xvc2VB
dHRyaWJ1dGVdOwotICAgIH0gZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aE11
bHRpc2NyaXB0KCkpIHsKKyAgICB9IGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzTWF0aE11bHRp
c2NyaXB0KCkpIHsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eU1hdGhCYXNlQXR0cmlidXRlXTsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eU1hdGhQcmVzY3JpcHRzQXR0cmlidXRlXTsKICAgICAgICAgW2FkZGl0aW9uYWwg
YWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhQb3N0c2NyaXB0c0F0dHJpYnV0ZV07CiAgICAg
fQotICAgIAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNQYXRoKCkpCisK
KyAgICBpZiAoYmFja2luZ09iamVjdC0+c3VwcG9ydHNQYXRoKCkpCiAgICAgICAgIFthZGRpdGlv
bmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlQYXRoQXR0cmlidXRlXTsKLSAgICAKLSAgICBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzRXhwYW5kZWRUZXh0VmFsdWUoKSkKKwor
ICAgIGlmIChiYWNraW5nT2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkVGV4dFZhbHVlKCkpCiAgICAg
ICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlFeHBhbmRlZFRleHRWYWx1
ZUF0dHJpYnV0ZV07Ci0gICAgCisKICAgICByZXR1cm4gYWRkaXRpb25hbDsKIH0KIApAQCAtMTQ3
NCwxMiArMTQ3NSwxMyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgog
LSAoTlNBcnJheSopYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzCiBBTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKIHsKLSAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tp
bmdTdG9yZV0pCisgICAgYXV0byogYmFja2luZ09iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
OworICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAg
ICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKQorCisgICAgaWYgKGJh
Y2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKQogICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFj
aG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdOwotICAgIAorCiAgICAgc3Rh
dGljIE5TQXJyYXkqIGF0dHJpYnV0ZXMgPSBuaWw7CiAgICAgc3RhdGljIE5TQXJyYXkqIGFuY2hv
ckF0dHJzID0gbmlsOwogICAgIHN0YXRpYyBOU0FycmF5KiB3ZWJBcmVhQXR0cnMgPSBuaWw7CkBA
IC0xODAzLDg2ICsxODA1LDc3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VO
RAogICAgICAgICBzY3JvbGxWaWV3QXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJy
YXk6dGVtcEFycmF5XTsKICAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKICAgICB9Ci0gICAg
CisKICAgICBOU0FycmF5ICpvYmplY3RBdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKLSAgICAKLSAg
ICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQorCisgICAgaWYg
KGJhY2tpbmdPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1
dGVzID0gcGFzc3dvcmRGaWVsZEF0dHJzOwotICAgIAotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5pc1dlYkFyZWEoKSkKKyAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc1dl
YkFyZWEoKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHdlYkFyZWFBdHRyczsKLSAgICAK
LSAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKQorICAg
IGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKICAgICAgICAgb2JqZWN0
QXR0cmlidXRlcyA9IHRleHRBdHRyczsKLSAgICAKLSAgICBlbHNlIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNMaW5rKCkgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzSW1hZ2UoKSkKKyAg
ICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc0xpbmsoKSB8fCBiYWNraW5nT2JqZWN0LT5pc0lt
YWdlKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBhbmNob3JBdHRyczsKLSAgICAKLSAg
ICBlbHNlIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkg
JiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpLmlz
RXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkKKyAgICBlbHNlIGlmIChiYWNraW5nT2Jq
ZWN0LT5pc1RhYmxlKCkgJiYgYmFja2luZ09iamVjdC0+aXNFeHBvc2FibGUoKSkKICAgICAgICAg
b2JqZWN0QXR0cmlidXRlcyA9IHRhYmxlQXR0cnM7Ci0gICAgZWxzZSBpZiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzVGFibGVDb2x1bW4oKSkKKyAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5p
c1RhYmxlQ29sdW1uKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJsZUNvbEF0dHJz
OwotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RhYmxlQ2VsbCgpKQorICAg
IGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzVGFibGVDZWxsKCkpCiAgICAgICAgIG9iamVjdEF0
dHJpYnV0ZXMgPSB0YWJsZUNlbGxBdHRyczsKLSAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNUYWJsZVJvdygpKSB7CisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNUYWJs
ZVJvdygpKSB7CiAgICAgICAgIC8vIEFuIEFSSUEgdGFibGUgcm93IGNhbiBiZSBjb2xsYXBzZWQg
YW5kIGV4cGFuZGVkLCBzbyBpdCBuZWVkcyB0aGUgZXh0cmEgYXR0cmlidXRlcy4KLSAgICAgICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0FSSUFUcmVlR3JpZFJvdygpKQorICAgICAgICBp
ZiAoYmFja2luZ09iamVjdC0+aXNBUklBVHJlZUdyaWRSb3coKSkKICAgICAgICAgICAgIG9iamVj
dEF0dHJpYnV0ZXMgPSBvdXRsaW5lUm93QXR0cnM7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJsZVJvd0F0dHJzOwotICAgIH0gZWxzZSBpZiAoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzVHJlZSgpKQorICAgIH0gZWxzZSBpZiAoYmFja2luZ09iamVjdC0+
aXNUcmVlKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBvdXRsaW5lQXR0cnM7Ci0gICAg
ZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkKKyAgICBlbHNlIGlm
IChiYWNraW5nT2JqZWN0LT5pc1RyZWVJdGVtKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMg
PSBvdXRsaW5lUm93QXR0cnM7Ci0gICAgCi0gICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzTGlzdEJveCgpKQorICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzTGlzdEJveCgp
KQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbGlzdEJveEF0dHJzOwotICAgIGVsc2UgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xpc3QoKSkKKyAgICBlbHNlIGlmIChiYWNraW5nT2Jq
ZWN0LT5pc0xpc3QoKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGxpc3RBdHRyczsKLSAg
ICAKLSAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb21ib0JveCgpKQorICAg
IGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzQ29tYm9Cb3goKSkKICAgICAgICAgb2JqZWN0QXR0
cmlidXRlcyA9IGNvbWJvQm94QXR0cnM7Ci0gICAgCi0gICAgZWxzZSBpZiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzUHJvZ3Jlc3NJbmRpY2F0b3IoKSB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNTbGlkZXIoKSkKKyAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc1Byb2dyZXNzSW5kaWNh
dG9yKCkgfHwgYmFja2luZ09iamVjdC0+aXNTbGlkZXIoKSkKICAgICAgICAgb2JqZWN0QXR0cmli
dXRlcyA9IHJhbmdlQXR0cnM7Ci0gICAgCiAgICAgLy8gVGhlc2UgYXJlIHByb2Nlc3NlZCBpbiBv
cmRlciBiZWNhdXNlIGFuIGlucHV0IGltYWdlIGlzIGEgYnV0dG9uLCBhbmQgYSBidXR0b24gaXMg
YSBjb250cm9sLgotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0lucHV0SW1h
Z2UoKSkKKyAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc0lucHV0SW1hZ2UoKSkKICAgICAg
ICAgb2JqZWN0QXR0cmlidXRlcyA9IGlucHV0SW1hZ2VBdHRyczsKLSAgICBlbHNlIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+aXNCdXR0b24oKSkKKyAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0
LT5pc0J1dHRvbigpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gYnV0dG9uQXR0cnM7Ci0g
ICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQ29udHJvbCgpKQorICAgIGVsc2Ug
aWYgKGJhY2tpbmdPYmplY3QtPmlzQ29udHJvbCgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVz
ID0gY29udHJvbEF0dHJzOwotICAgIAotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc0dyb3VwKCkgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTGlzdEl0ZW0oKSkKKworICAg
IGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzR3JvdXAoKSB8fCBiYWNraW5nT2JqZWN0LT5pc0xp
c3RJdGVtKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBncm91cEF0dHJzOwotICAgIGVs
c2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RhYkxpc3QoKSkKKyAgICBlbHNlIGlmIChi
YWNraW5nT2JqZWN0LT5pc1RhYkxpc3QoKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHRh
Ykxpc3RBdHRyczsKLSAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTY3JvbGxW
aWV3KCkpCisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNTY3JvbGxWaWV3KCkpCiAgICAg
ICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBzY3JvbGxWaWV3QXR0cnM7Ci0gICAgZWxzZSBpZiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmlzU3BpbkJ1dHRvbigpKQorICAgIGVsc2UgaWYgKGJhY2tpbmdP
YmplY3QtPmlzU3BpbkJ1dHRvbigpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gaW5jcmVt
ZW50b3JBdHRyczsKLSAgICAKLSAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNN
ZW51KCkpCisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNNZW51KCkpCiAgICAgICAgIG9i
amVjdEF0dHJpYnV0ZXMgPSBtZW51QXR0cnM7Ci0gICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzTWVudUJhcigpKQorICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzTWVudUJh
cigpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbWVudUJhckF0dHJzOwotICAgIGVsc2Ug
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01lbnVCdXR0b24oKSkKKyAgICBlbHNlIGlmIChi
YWNraW5nT2JqZWN0LT5pc01lbnVCdXR0b24oKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9
IG1lbnVCdXR0b25BdHRyczsKLSAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNN
ZW51SXRlbSgpKQorICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzTWVudUl0ZW0oKSkKICAg
ICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG1lbnVJdGVtQXR0cnM7Ci0gICAgCisKICAgICBOU0Fy
cmF5ICphZGRpdGlvbmFsQXR0cmlidXRlcyA9IFtzZWxmIGFkZGl0aW9uYWxBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlTmFtZXNdOwogICAgIGlmIChbYWRkaXRpb25hbEF0dHJpYnV0ZXMgY291bnRdKQog
ICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gW29iamVjdEF0dHJpYnV0ZXMgYXJyYXlCeUFkZGlu
Z09iamVjdHNGcm9tQXJyYXk6YWRkaXRpb25hbEF0dHJpYnV0ZXNdOwotICAgIAorCiAgICAgLy8g
T25seSBleHBvc2UgQVhBUklBQ3VycmVudCBhdHRyaWJ1dGUgd2hlbiB0aGUgZWxlbWVudCBpcyBz
ZXQgdG8gYmUgY3VycmVudCBpdGVtLgotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+Y3Vy
cmVudFN0YXRlKCkgIT0gQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6RmFsc2UpCisgICAgaWYg
KGJhY2tpbmdPYmplY3QtPmN1cnJlbnRTdGF0ZSgpICE9IEFjY2Vzc2liaWxpdHlDdXJyZW50U3Rh
dGU6OkZhbHNlKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gW29iamVjdEF0dHJpYnV0ZXMg
YXJyYXlCeUFkZGluZ09iamVjdHNGcm9tQXJyYXk6QFsgTlNBY2Nlc3NpYmlsaXR5QVJJQUN1cnJl
bnRBdHRyaWJ1dGUgXV07Ci0gICAgCisKICAgICAvLyBBcHBLaXQgbmVlZHMgdG8ga25vdyB0aGUg
c2NyZWVuIGhlaWdodCBpbiBvcmRlciB0byBkbyB0aGUgY29vcmRpbmF0ZSBjb252ZXJzaW9uLgog
ICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBbb2JqZWN0QXR0cmlidXRlcyBhcnJheUJ5QWRkaW5nT2Jq
ZWN0c0Zyb21BcnJheTpAWyBOU0FjY2Vzc2liaWxpdHlQcmltYXJ5U2NyZWVuSGVpZ2h0QXR0cmli
dXRlIF1dOwotICAgIAorCiAgICAgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZXM7CiB9CiAKQEAgLTIz
NzcsMjE0ICsyMzcwLDIxNiBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQK
IHsKICAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCiAgICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0RldGFjaGVk
RnJvbVBhcmVudCgpKQorICAgIC8vIEZJWE1FOiBtYWtlIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9y
ZSBhYm92ZSByZXR1cm4gdGhlIGJhY2tpbmcgb2JqZWN0LgorICAgIGF1dG8qIGJhY2tpbmdPYmpl
Y3QgPSBzZWxmLmF4QmFja2luZ09iamVjdDsKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc0Rl
dGFjaGVkRnJvbVBhcmVudCgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIAorCiAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJp
YnV0ZV0pCiAgICAgICAgIHJldHVybiBbc2VsZiByb2xlXTsKLSAgICAKKwogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVN1YnJvbGVBdHRyaWJ1
dGVdKQogICAgICAgICByZXR1cm4gW3NlbGYgc3Vicm9sZV07Ci0gICAgCisKICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRp
b25BdHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gW3NlbGYgcm9sZURlc2NyaXB0aW9uXTsKIAog
ICAgIC8vIEFYQVJJQVJvbGUgaXMgb25seSB1c2VkIGJ5IER1bXBSZW5kZXJUcmVlIChzbyBmYXIp
LgogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEFSSUFSb2xlIl0p
CiAgICAgICAgIHJldHVybiBbc2VsZiBjb21wdXRlZFJvbGVTdHJpbmddOwotICAgIAorCiAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5UGFyZW50
QXR0cmlidXRlXSkgewotICAgICAgICAKKwogICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIHRo
ZSBwYXJlbnQgb2YgdGhlIEFYV2ViQXJlYSwgaWYgdGhpcyBpcyBhIHdlYiBhcmVhLgogICAgICAg
ICBpZCBzY3JvbGxWaWV3UGFyZW50ID0gW3NlbGYgc2Nyb2xsVmlld1BhcmVudF07CiAgICAgICAg
IGlmIChzY3JvbGxWaWV3UGFyZW50KQogICAgICAgICAgICAgcmV0dXJuIHNjcm9sbFZpZXdQYXJl
bnQ7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFRyZWUgaXRlbSAoY2hhbmdlZCB0byBBWFJvd3Mp
IGNhbiBvbmx5IHJlcG9ydCB0aGUgdHJlZSAoQVhPdXRsaW5lKSBhcyBpdHMgcGFyZW50LgotICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkgewotICAgICAgICAg
ICAgYXV0byBwYXJlbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25v
cmVkKCk7CisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKKyAgICAg
ICAgICAgIGF1dG8gcGFyZW50ID0gYmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVk
KCk7CiAgICAgICAgICAgICB3aGlsZSAocGFyZW50KSB7CiAgICAgICAgICAgICAgICAgaWYgKHBh
cmVudC0+aXNUcmVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBw
ZXIoKTsKICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdFVuaWdu
b3JlZCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBhdXRv
IHBhcmVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsK
KworICAgICAgICBhdXRvIHBhcmVudCA9IGJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdFVuaWdu
b3JlZCgpOwogICAgICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgICAgIAorCiAgICAgICAgIC8vIEluIFdlYktpdDEsIHRoZSBzY3JvbGwgdmlldyBpcyBwcm92
aWRlZCBieSB0aGUgc3lzdGVtICh0aGUgYXR0YWNobWVudCB2aWV3KSwgc28gdGhlIHBhcmVudAog
ICAgICAgICAvLyBzaG91bGQgYmUgcmVwb3J0ZWQgZGlyZWN0bHkgYXMgc3VjaC4KLSAgICAgICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSAmJiBwYXJlbnQtPmlzQXR0YWNo
bWVudCgpKQorICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNXZWJBcmVhKCkgJiYgcGFyZW50
LT5pc0F0dGFjaG1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBbcGFyZW50LT53cmFwcGVyKCkg
YXR0YWNobWVudFZpZXddOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFw
cGVyKCk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzogTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdIHx8IFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5Jbk5hdmlnYXRpb25PcmRl
ckF0dHJpYnV0ZV0pIHsKICAgICAgICAgaWYgKCFzZWxmLmNoaWxkcmVuVmVjdG9yU2l6ZSkgewog
ICAgICAgICAgICAgTlNBcnJheSogY2hpbGRyZW4gPSBbc2VsZiByZW5kZXJXaWRnZXRDaGlsZHJl
bl07CiAgICAgICAgICAgICBpZiAoY2hpbGRyZW4gIT0gbmlsKQogICAgICAgICAgICAgICAgIHJl
dHVybiBjaGlsZHJlbjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBUaGUgdHJl
ZSdzIChBWE91dGxpbmUpIGNoaWxkcmVuIGFyZSBzdXBwb3NlZCB0byBiZSBpdHMgcm93cyBhbmQg
Y29sdW1ucy4KICAgICAgICAgLy8gVGhlIEFSSUEgc3BlYyBkb2Vzbid0IGhhdmUgY29sdW1ucywg
c28gd2UganVzdCBuZWVkIHJvd3MuCi0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNUcmVlKCkpCisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RyZWUoKSkKICAgICAgICAg
ICAgIHJldHVybiBbc2VsZiBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmls
aXR5Um93c0F0dHJpYnV0ZV07Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEEgdHJlZSBpdGVtIHNo
b3VsZCBvbmx5IGV4cG9zZSBpdHMgY29udGVudCBhcyBpdHMgY2hpbGRyZW4gKG5vdCBpdHMgcm93
cykKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKKyAg
ICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkgewogICAgICAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbnRlbnRDb3B5
OwotICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFUcmVlSXRlbUNvbnRlbnQo
Y29udGVudENvcHkpOworICAgICAgICAgICAgYmFja2luZ09iamVjdC0+YXJpYVRyZWVJdGVtQ29u
dGVudChjb250ZW50Q29weSk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShj
b250ZW50Q29weSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHNlbGYu
Y2hpbGRyZW5WZWN0b3JBcnJheTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxkcmVuQXR0cmli
dXRlXSkgewotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmNhbkhhdmVTZWxlY3Rl
ZENoaWxkcmVuKCkpIHsKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmNhbkhhdmVTZWxlY3Rl
ZENoaWxkcmVuKCkpIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuQ29weTsKLSAgICAgICAgICAgIHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW5Db3B5
KTsKKyAgICAgICAgICAgIGJhY2tpbmdPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRD
aGlsZHJlbkNvcHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoc2VsZWN0
ZWRDaGlsZHJlbkNvcHkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQot
ICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5VmlzaWJsZUNoaWxkcmVuQXR0cmlidXRlXSkgewotICAgICAgICBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzTGlzdEJveCgpKSB7CisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5p
c0xpc3RCb3goKSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIHZpc2libGVDaGlsZHJlbkNvcHk7Ci0gICAgICAgICAgICBzZWxm
LmF4QmFja2luZ09iamVjdC0+dmlzaWJsZUNoaWxkcmVuKHZpc2libGVDaGlsZHJlbkNvcHkpOwor
ICAgICAgICAgICAgYmFja2luZ09iamVjdC0+dmlzaWJsZUNoaWxkcmVuKHZpc2libGVDaGlsZHJl
bkNvcHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkodmlzaWJsZUNoaWxk
cmVuQ29weSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzTGlzdCgpKQorICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNMaXN0KCkpCiAgICAgICAg
ICAgICByZXR1cm4gW3NlbGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJp
bGl0eUNoaWxkcmVuQXR0cmlidXRlXTsKIAogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KLSAg
ICAKLSAgICAKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpKSB7CisK
KworICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSkgewogICAgICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMaW5rVUlFbGVtZW50cyJdKSB7CiAgICAg
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
bGlua3M7Ci0gICAgICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Pigq
c2VsZi5heEJhY2tpbmdPYmplY3QpLmdldERvY3VtZW50TGlua3MobGlua3MpOworICAgICAgICAg
ICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdD4oKmJhY2tpbmdPYmplY3QpLmdl
dERvY3VtZW50TGlua3MobGlua3MpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJy
YXkobGlua3MpOwogICAgICAgICB9CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWExvYWRlZCJdKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1i
ZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+aXNMb2FkZWQoKV07CisgICAgICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmJhY2tpbmdPYmplY3QtPmlzTG9hZGVk
KCldOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMYXlv
dXRDb3VudCJdKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OnNl
bGYuYXhCYWNraW5nT2JqZWN0LT5sYXlvdXRDb3VudCgpXTsKKyAgICAgICAgICAgIHJldHVybiBb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDpiYWNraW5nT2JqZWN0LT5sYXlvdXRDb3VudCgpXTsKICAg
ICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlM
b2FkaW5nUHJvZ3Jlc3NBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5lc3RpbWF0ZWRMb2FkaW5nUHJv
Z3Jlc3MoKV07CisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6
YmFja2luZ09iamVjdC0+ZXN0aW1hdGVkTG9hZGluZ1Byb2dyZXNzKCldOwogICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVByZXZlbnRLZXli
b2FyZERPTUV2ZW50RGlzcGF0Y2hBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+cHJldmVudEtleWJvYXJk
RE9NRXZlbnREaXNwYXRjaCgpXTsKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEJvb2w6YmFja2luZ09iamVjdC0+cHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCgp
XTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlDYXJldEJyb3dzaW5nRW5hYmxlZEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5jYXJldEJyb3dz
aW5nRW5hYmxlZCgpXTsKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6YmFja2luZ09iamVjdC0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKV07CiAgICAgICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5V2ViU2Vzc2lvbklE
QXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBAKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5z
ZXNzaW9uSUQoKSk7CisgICAgICAgICAgICByZXR1cm4gQChiYWNraW5nT2JqZWN0LT5zZXNzaW9u
SUQoKSk7CiAgICAgfQotICAgIAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0
Q29udHJvbCgpKSB7CisKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7
CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJp
bGl0eU51bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIGludCBsZW5n
dGggPSBzZWxmLmF4QmFja2luZ09iamVjdC0+dGV4dExlbmd0aCgpOworICAgICAgICAgICAgaW50
IGxlbmd0aCA9IGJhY2tpbmdPYmplY3QtPnRleHRMZW5ndGgoKTsKICAgICAgICAgICAgIGlmIChs
ZW5ndGggPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICByZXR1
cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDpsZW5ndGhdOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0
eVNlbGVjdGVkVGV4dEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIFN0cmluZyBzZWxlY3RlZFRl
eHQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+c2VsZWN0ZWRUZXh0KCk7CisgICAgICAgICAgICBT
dHJpbmcgc2VsZWN0ZWRUZXh0ID0gYmFja2luZ09iamVjdC0+c2VsZWN0ZWRUZXh0KCk7CiAgICAg
ICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0LmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgICAgICAgICByZXR1cm4gKE5TU3RyaW5nKilzZWxlY3RlZFRleHQ7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nl
c3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBQbGFp
blRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+c2VsZWN0ZWRUZXh0
UmFuZ2UoKTsKKyAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IGJhY2tpbmdP
YmplY3QtPnNlbGVjdGVkVGV4dFJhbmdlKCk7CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUg
dmFsdWVXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVu
Z3RoKV07CiAgICAgICAgIH0KICAgICAgICAgLy8gVE9ETzogR2V0IGFjdHVhbCB2aXNpYmxlIHJh
bmdlLiA8cmRhcjovL3Byb2JsZW0vNDcxMjEwMT4KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0
cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQYXNz
d29yZEZpZWxkKCkgPyBuaWwgOiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2Uo
MCwgc2VsZi5heEJhY2tpbmdPYmplY3QtPnRleHRMZW5ndGgoKSldOworICAgICAgICAgICAgcmV0
dXJuIGJhY2tpbmdPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpID8gbmlsIDogW05TVmFsdWUgdmFs
dWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKDAsIGJhY2tpbmdPYmplY3QtPnRleHRMZW5ndGgoKSld
OwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2li
aWxpdHlJbnNlcnRpb25Qb2ludExpbmVOdW1iZXJBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICAv
LyBpZiBzZWxlY3Rpb25FbmQgPiAwLCB0aGVuIHRoZXJlIGlzIHNlbGVjdGVkIHRleHQgYW5kIHRo
aXMgcXVlc3Rpb24gc2hvdWxkIG5vdCBiZSBhbnN3ZXJlZAotICAgICAgICAgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSB8fCBzZWxmLmF4QmFja2luZ09iamVj
dC0+c2VsZWN0aW9uRW5kKCkgPiAwKQorICAgICAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlz
UGFzc3dvcmRGaWVsZCgpIHx8IGJhY2tpbmdPYmplY3QtPnNlbGVjdGlvbkVuZCgpID4gMCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRv
IGZvY3VzZWRPYmplY3QgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0PihzZWxmLmF4QmFj
a2luZ09iamVjdC0+Zm9jdXNlZFVJRWxlbWVudCgpKTsKLSAgICAgICAgICAgIGlmIChmb2N1c2Vk
T2JqZWN0ICE9IHNlbGYuYXhCYWNraW5nT2JqZWN0KQorCisgICAgICAgICAgICBhdXRvIGZvY3Vz
ZWRPYmplY3QgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0PihiYWNraW5nT2JqZWN0LT5m
b2N1c2VkVUlFbGVtZW50KCkpOworICAgICAgICAgICAgaWYgKGZvY3VzZWRPYmplY3QgIT0gYmFj
a2luZ09iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgCisK
ICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBmb2N1c2VkUG9zaXRpb24gPSBmb2N1c2VkT2Jq
ZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChmb2N1c2VkT2JqZWN0LT5zZWxlY3Rpb25TdGFy
dCgpLCB0cnVlKTsKLSAgICAgICAgICAgIGludCBsaW5lTnVtYmVyID0gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmxpbmVGb3JQb3NpdGlvbihmb2N1c2VkUG9zaXRpb24pOworICAgICAgICAgICAgaW50
IGxpbmVOdW1iZXIgPSBiYWNraW5nT2JqZWN0LT5saW5lRm9yUG9zaXRpb24oZm9jdXNlZFBvc2l0
aW9uKTsKICAgICAgICAgICAgIGlmIChsaW5lTnVtYmVyIDwgMCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbmlsOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEludDpsaW5lTnVtYmVyXTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVVSTEF0
dHJpYnV0ZV0pIHsKLSAgICAgICAgVVJMIHVybCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT51cmwo
KTsKKyAgICAgICAgVVJMIHVybCA9IGJhY2tpbmdPYmplY3QtPnVybCgpOwogICAgICAgICBpZiAo
dXJsLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgcmV0dXJuIChO
U1VSTCopdXJsOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50QnV0dG9uQXR0cmlidXRlXSkgewotICAgICAgICBh
dXRvIGluY3JlbWVudEJ1dHRvbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pbmNyZW1lbnRCdXR0
b24oKTsKKyAgICAgICAgYXV0byBpbmNyZW1lbnRCdXR0b24gPSBiYWNraW5nT2JqZWN0LT5pbmNy
ZW1lbnRCdXR0b24oKTsKICAgICAgICAgcmV0dXJuIGluY3JlbWVudEJ1dHRvbiA/IGluY3JlbWVu
dEJ1dHRvbi0+d3JhcHBlcigpIDogbmlsOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50QnV0dG9uQXR0cmlidXRl
XSkgewotICAgICAgICBhdXRvIGRlY3JlbWVudEJ1dHRvbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5kZWNyZW1lbnRCdXR0b24oKTsKKyAgICAgICAgYXV0byBkZWNyZW1lbnRCdXR0b24gPSBiYWNr
aW5nT2JqZWN0LT5kZWNyZW1lbnRCdXR0b24oKTsKICAgICAgICAgcmV0dXJuIGRlY3JlbWVudEJ1
dHRvbiA/IGRlY3JlbWVudEJ1dHRvbi0+d3JhcHBlcigpIDogbmlsOwogICAgIH0KIAogICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhWaXNpdGVkIl0pCi0gICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c1Zpc2l0ZWQoKV07Ci0gICAgCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6IGJhY2tpbmdPYmplY3QtPmlzVmlzaXRlZCgpXTsKKwogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVRpdGxlQXR0cmlidXRlXSkgewotICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKSB7CisgICAgICAg
IGlmIChiYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkgewogICAgICAgICAgICAgaWYgKFtb
W3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10gY29udGFp
bnNPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VGl0bGVBdHRyaWJ1dGVdKQogICAgICAgICAgICAgICAg
IHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZTpOU0FjY2Vzc2liaWxpdHlUaXRsZUF0dHJpYnV0ZV07CiAgICAgICAgIH0KLSAgICAgICAgCisK
ICAgICAgICAgLy8gTWV0ZXIgZWxlbWVudHMgc2hvdWxkIGNvbW11bmljYXRlIHRoZWlyIGNvbnRl
bnQgdmlhIEFYVmFsdWVEZXNjcmlwdGlvbi4KLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc01ldGVyKCkpCisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc01ldGVyKCkpCiAg
ICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ107Ci0gICAgICAgIAorCiAgICAgICAg
IC8vIFN1bW1hcnkgZWxlbWVudCBzaG91bGQgdXNlIGl0cyB0ZXh0IG5vZGUgYXMgQVhUaXRsZS4K
LSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1N1bW1hcnkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpOwotICAg
ICAgICAKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzU3VtbWFyeSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPnRleHRVbmRlckVsZW1lbnQoKTsKKwogICAgICAgICBy
ZXR1cm4gW3NlbGYgYmFzZUFjY2Vzc2liaWxpdHlUaXRsZV07CiAgICAgfQotICAgIAorCiAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5RGVzY3Jp
cHRpb25BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNB
dHRhY2htZW50KCkpIHsKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgp
KSB7CiAgICAgICAgICAgICBpZiAoW1tbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZU5hbWVzXSBjb250YWluc09iamVjdDpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlv
bkF0dHJpYnV0ZV0pCiAgICAgICAgICAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmll
d10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
QXR0cmlidXRlXTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gW3NlbGYgYmFzZUFjY2Vzc2li
aWxpdHlEZXNjcmlwdGlvbl07CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpIHsKKyAgICAgICAg
aWYgKGJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoW1tb
c2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSBjb250YWlu
c09iamVjdDpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV0pCiAgICAgICAgICAgICAgICAg
cmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
Ok5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXTsKICAgICAgICAgfQotICAgICAgICBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzUmFuZ2VWYWx1ZSgpKQotICAgICAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPnZh
bHVlRm9yUmFuZ2UoKV07Ci0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZh
bHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlNsaWRlclRodW1iKQotICAgICAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPnBhcmVu
dE9iamVjdCgpLT52YWx1ZUZvclJhbmdlKCldOwotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzSGVhZGluZygpKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJX
aXRoSW50OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5oZWFkaW5nTGV2ZWwoKV07Ci0gICAgICAgIAot
ICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQ2hlY2tib3hPclJhZGlvKCkgfHwg
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWVudUl0ZW0oKSB8fCBzZWxmLmF4QmFja2luZ09iamVj
dC0+aXNTd2l0Y2goKSB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUb2dnbGVCdXR0b24oKSkg
ewotICAgICAgICAgICAgc3dpdGNoIChzZWxmLmF4QmFja2luZ09iamVjdC0+Y2hlY2tib3hPclJh
ZGlvVmFsdWUoKSkgeworICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+c3VwcG9ydHNSYW5nZVZh
bHVlKCkpCisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpiYWNr
aW5nT2JqZWN0LT52YWx1ZUZvclJhbmdlKCldOworICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+
cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlNsaWRlclRodW1iKQorICAgICAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6YmFja2luZ09iamVjdC0+cGFyZW50
T2JqZWN0KCktPnZhbHVlRm9yUmFuZ2UoKV07CisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5p
c0hlYWRpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpi
YWNraW5nT2JqZWN0LT5oZWFkaW5nTGV2ZWwoKV07CisKKyAgICAgICAgaWYgKGJhY2tpbmdPYmpl
Y3QtPmlzQ2hlY2tib3hPclJhZGlvKCkgfHwgYmFja2luZ09iamVjdC0+aXNNZW51SXRlbSgpIHx8
IGJhY2tpbmdPYmplY3QtPmlzU3dpdGNoKCkgfHwgYmFja2luZ09iamVjdC0+aXNUb2dnbGVCdXR0
b24oKSkgeworICAgICAgICAgICAgc3dpdGNoIChiYWNraW5nT2JqZWN0LT5jaGVja2JveE9yUmFk
aW9WYWx1ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZTo6
T2ZmOgogICAgICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDowXTsK
ICAgICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlOjpPbjoKQEAgLTI1OTMs
NjcgKzI1ODgsNjcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OjJdOwogICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIHJhZGlvIGdyb3VwcyByZXR1
cm4gdGhlIHNlbGVjdGVkIHJhZGlvIGJ1dHRvbiBhcyB0aGUgQVhWYWx1ZQotICAgICAgICBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUmFkaW9Hcm91cCgpKSB7Ci0gICAgICAgICAgICBBWENv
cmVPYmplY3QqIHJhZGlvQnV0dG9uID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNlbGVjdGVkUmFk
aW9CdXR0b24oKTsKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzUmFkaW9Hcm91cCgpKSB7
CisgICAgICAgICAgICBBWENvcmVPYmplY3QqIHJhZGlvQnV0dG9uID0gYmFja2luZ09iamVjdC0+
c2VsZWN0ZWRSYWRpb0J1dHRvbigpOwogICAgICAgICAgICAgaWYgKCFyYWRpb0J1dHRvbikKICAg
ICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJuIHJhZGlvQnV0dG9u
LT53cmFwcGVyKCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNUYWJMaXN0KCkpIHsKLSAgICAgICAgICAgIEFYQ29yZU9iamVjdCogdGFi
SXRlbSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZWxlY3RlZFRhYkl0ZW0oKTsKKworICAgICAg
ICBpZiAoYmFja2luZ09iamVjdC0+aXNUYWJMaXN0KCkpIHsKKyAgICAgICAgICAgIEFYQ29yZU9i
amVjdCogdGFiSXRlbSA9IGJhY2tpbmdPYmplY3QtPnNlbGVjdGVkVGFiSXRlbSgpOwogICAgICAg
ICAgICAgaWYgKCF0YWJJdGVtKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAg
ICAgICByZXR1cm4gdGFiSXRlbS0+d3JhcHBlcigpOwogICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGFiSXRlbSgpKQotICAgICAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Nl
bGVjdGVkKCldOwotICAgICAgICAKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c0NvbG9yV2VsbCgpKSB7CisKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVGFiSXRlbSgp
KQorICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OmJhY2tpbmdPYmpl
Y3QtPmlzU2VsZWN0ZWQoKV07CisKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzQ29sb3JX
ZWxsKCkpIHsKICAgICAgICAgICAgIGludCByLCBnLCBiOwotICAgICAgICAgICAgc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmNvbG9yVmFsdWUociwgZywgYik7CisgICAgICAgICAgICBiYWNraW5nT2Jq
ZWN0LT5jb2xvclZhbHVlKHIsIGcsIGIpOwogICAgICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAicmdiICU3LjVmICU3LjVmICU3LjVmIDEiLCByIC8gMjU1LiwgZyAv
IDI1NS4sIGIgLyAyNTUuXTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5zdHJpbmdWYWx1ZSgpOworCisgICAgICAgIHJldHVybiBiYWNr
aW5nT2JqZWN0LT5zdHJpbmdWYWx1ZSgpOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa0FYTWVudUl0ZW1NYXJrQ2hhckF0dHJpYnV0
ZV0pIHsKICAgICAgICAgY29uc3QgdW5pY2hhciBjaCA9IDB4MjcxMzsgLy8g4pyTIHVzZWQgb24g
TWFjIGZvciBzZWxlY3RlZCBtZW51IGl0ZW1zLgotICAgICAgICByZXR1cm4gKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5pc0NoZWNrZWQoKSkgPyBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6
JmNoIGxlbmd0aDoxXSA6IG5pbDsKKyAgICAgICAgcmV0dXJuIChiYWNraW5nT2JqZWN0LT5pc0No
ZWNrZWQoKSkgPyBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6JmNoIGxlbmd0aDoxXSA6
IG5pbDsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOiBOU0FjY2Vzc2liaWxpdHlNaW5WYWx1ZUF0dHJpYnV0ZV0pIHsKICAgICAgICAgLy8gSW5k
ZXRlcm1pbmF0ZSBwcm9ncmVzcyBpbmRpY2F0b3Igc2hvdWxkIHJldHVybiAwLgotICAgICAgICBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFSb2xlQXR0cmlidXRlKCkgPT0gQWNjZXNzaWJp
bGl0eVJvbGU6OlByb2dyZXNzSW5kaWNhdG9yICYmICFzZWxmLmF4QmFja2luZ09iamVjdC0+aGFz
QVJJQVZhbHVlTm93KCkpCisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5hcmlhUm9sZUF0dHJp
YnV0ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9ncmVzc0luZGljYXRvciAmJiAhYmFja2lu
Z09iamVjdC0+aGFzQVJJQVZhbHVlTm93KCkpCiAgICAgICAgICAgICByZXR1cm4gQDA7Ci0gICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNlbGYuYXhCYWNraW5nT2JqZWN0
LT5taW5WYWx1ZUZvclJhbmdlKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDpiYWNraW5nT2JqZWN0LT5taW5WYWx1ZUZvclJhbmdlKCldOwogICAgIH0KLSAgICAK
KwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0
eU1heFZhbHVlQXR0cmlidXRlXSkgewogICAgICAgICAvLyBJbmRldGVybWluYXRlIHByb2dyZXNz
IGluZGljYXRvciBzaG91bGQgcmV0dXJuIDAuCi0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6UHJvZ3Jlc3NJ
bmRpY2F0b3IgJiYgIXNlbGYuYXhCYWNraW5nT2JqZWN0LT5oYXNBUklBVmFsdWVOb3coKSkKKyAg
ICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmFyaWFSb2xlQXR0cmlidXRlKCkgPT0gQWNjZXNzaWJp
bGl0eVJvbGU6OlByb2dyZXNzSW5kaWNhdG9yICYmICFiYWNraW5nT2JqZWN0LT5oYXNBUklBVmFs
dWVOb3coKSkKICAgICAgICAgICAgIHJldHVybiBAMDsKLSAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoRmxvYXQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPm1heFZhbHVlRm9yUmFuZ2Uo
KV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmJhY2tpbmdPYmpl
Y3QtPm1heFZhbHVlRm9yUmFuZ2UoKV07CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5SGVscEF0dHJpYnV0ZV0pCiAg
ICAgICAgIHJldHVybiBbc2VsZiBiYXNlQWNjZXNzaWJpbGl0eUhlbHBUZXh0XTsKLSAgICAKKwog
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUZv
Y3VzZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29s
OiBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNGb2N1c2VkKCldOwotICAgIAorICAgICAgICByZXR1
cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiBiYWNraW5nT2JqZWN0LT5pc0ZvY3VzZWQoKV07
CisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxp
dHlFbmFibGVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRo
Qm9vbDogc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzRW5hYmxlZCgpXTsKLSAgICAKKyAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogYmFja2luZ09iamVjdC0+aXNFbmFibGVk
KCldOworCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5U2l6ZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgSW50U2l6ZSBzID0gc25hcHBlZEludFJl
Y3Qoc2VsZi5heEJhY2tpbmdPYmplY3QtPmVsZW1lbnRSZWN0KCkpLnNpemUoKTsKKyAgICAgICAg
SW50U2l6ZSBzID0gc25hcHBlZEludFJlY3QoYmFja2luZ09iamVjdC0+ZWxlbWVudFJlY3QoKSku
c2l6ZSgpOwogICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoU2l6ZTogTlNNYWtlU2l6
ZShzLndpZHRoKCksIHMuaGVpZ2h0KCkpXTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlQcmltYXJ5U2NyZWVuSGVp
Z2h0QXR0cmlidXRlXSkKICAgICAgICAgcmV0dXJuIFtzZWxmIHByaW1hcnlTY3JlZW5IZWlnaHRd
OwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0
eVBvc2l0aW9uQXR0cmlidXRlXSkKQEAgLTI2NjYsMjkgKzI2NjEsMjkgQEAgQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIHJldHVybiBbc2VsZiB3aW5kb3dFbGVt
ZW50OmF0dHJpYnV0ZU5hbWVdOwogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEF0b21T
dHJpbmcgYWNjZXNzS2V5ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmFjY2Vzc0tleSgpOworICAg
ICAgICBBdG9tU3RyaW5nIGFjY2Vzc0tleSA9IGJhY2tpbmdPYmplY3QtPmFjY2Vzc0tleSgpOwog
ICAgICAgICBpZiAoYWNjZXNzS2V5LmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICAgICAgcmV0dXJuIGFjY2Vzc0tleTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUxpbmtSZWxhdGlvbnNoaXBU
eXBlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5saW5r
UmVsVmFsdWUoKTsKLSAgICAKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPmxpbmtSZWxW
YWx1ZSgpOworCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlUYWJzQXR0cmlidXRlXSkgewotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzVGFiTGlzdCgpKSB7CisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RhYkxpc3Qo
KSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIHRhYnNDaGlsZHJlbjsKLSAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0
LT50YWJDaGlsZHJlbih0YWJzQ2hpbGRyZW4pOworICAgICAgICAgICAgYmFja2luZ09iamVjdC0+
dGFiQ2hpbGRyZW4odGFic0NoaWxkcmVuKTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9O
U0FycmF5KHRhYnNDaGlsZHJlbik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNvbnRlbnRzQXR0
cmlidXRlXSkgewogICAgICAgICAvLyBUaGUgY29udGVudHMgb2YgYSB0YWIgbGlzdCBhcmUgYWxs
IHRoZSBjaGlsZHJlbiBleGNlcHQgdGhlIHRhYnMuCi0gICAgICAgIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNUYWJMaXN0KCkpIHsKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVGFi
TGlzdCgpKSB7CiAgICAgICAgICAgICBhdXRvIGNoaWxkcmVuID0gc2VsZi5jaGlsZHJlblZlY3Rv
ckFycmF5OwogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIHRhYnM7Ci0gICAgICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+dGFi
Q2hpbGRyZW4odGFicyk7CisgICAgICAgICAgICBiYWNraW5nT2JqZWN0LT50YWJDaGlsZHJlbih0
YWJzKTsKICAgICAgICAgICAgIGF1dG8gdGFic0NoaWxkcmVuID0gY29udmVydFRvTlNBcnJheSh0
YWJzKTsKIAogICAgICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKmNvbnRlbnRzID0gW05TTXV0YWJs
ZUFycmF5IGFycmF5XTsKQEAgLTI2OTksNyArMjY5NCw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1Q
TEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRzOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkgewor
ICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNTY3JvbGxWaWV3KCkpIHsKICAgICAgICAgICAg
IC8vIEEgc2Nyb2xsVmlldydzIGNvbnRlbnRzIGFyZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgc2Ny
b2xsIGJhcnMuCiAgICAgICAgICAgICBhdXRvIGNoaWxkcmVuID0gc2VsZi5jaGlsZHJlblZlY3Rv
ckFycmF5OwogICAgICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKmNvbnRlbnRzID0gW05TTXV0YWJs
ZUFycmF5IGFycmF5XTsKQEAgLTI3MTMsNzggKzI3MDgsNjIgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1cm4gY29udGVudHM7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhC
YWNraW5nT2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFj
a2luZ09iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKSB7Ci0gICAgICAg
IGF1dG8mIHRhYmxlID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tp
bmdPYmplY3QpOworCisgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVGFibGUoKSAmJiBiYWNraW5n
T2JqZWN0LT5pc0V4cG9zYWJsZSgpKSB7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV0pCi0gICAgICAgICAgICBy
ZXR1cm4gY29udmVydFRvTlNBcnJheSh0YWJsZS5yb3dzKCkpOwotICAgICAgICAKLSAgICAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWaXNpYmxl
Um93c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciB2aXNpYmxlUm93czsKLSAgICAgICAgICAgIHRhYmxlLnZp
c2libGVSb3dzKHZpc2libGVSb3dzKTsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0Fy
cmF5KHZpc2libGVSb3dzKTsKLSAgICAgICAgfQotICAgICAgICAKKyAgICAgICAgICAgIHJldHVy
biBjb252ZXJ0VG9OU0FycmF5KGJhY2tpbmdPYmplY3QtPnJvd3MoKSk7CisKKyAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlUm93
c0F0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShiYWNraW5n
T2JqZWN0LT52aXNpYmxlUm93cygpKTsKKwogICAgICAgICAvLyBUT0RPOiBkaXN0aW5ndWlzaCBi
ZXR3ZWVuIHZpc2libGUgYW5kIG5vbi12aXNpYmxlIGNvbHVtbnMKLSAgICAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5zQXR0cmlidXRl
XSB8fAotICAgICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eVZpc2libGVDb2x1bW5zQXR0cmlidXRlXSkgewotICAgICAgICAgICAgcmV0dXJuIGNv
bnZlcnRUb05TQXJyYXkodGFibGUuY29sdW1ucygpKTsKLSAgICAgICAgfQotICAgICAgICAKKyAg
ICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlD
b2x1bW5zQXR0cmlidXRlXQorICAgICAgICAgICAgfHwgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZpc2libGVDb2x1bW5zQXR0cmlidXRlXSkKKyAgICAgICAg
ICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGJhY2tpbmdPYmplY3QtPmNvbHVtbnMoKSk7CisK
ICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbkNvcHk7Ci0g
ICAgICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3Rl
ZENoaWxkcmVuQ29weSk7CisgICAgICAgICAgICBiYWNraW5nT2JqZWN0LT5zZWxlY3RlZENoaWxk
cmVuKHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9O
U0FycmF5KHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgLy8gSFRNTCB0YWJsZXMgZG9uJ3Qgc3VwcG9ydCB0aGVzZQotICAgICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ29sdW1uc0F0
dHJpYnV0ZV0gfHwKLSAgICAgICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlTZWxlY3RlZENlbGxzQXR0cmlidXRlXSkKKworICAgICAgICAvLyBIVE1M
IHRhYmxlcyBkb24ndCBzdXBwb3J0IHRoZXNlIGF0dHJpYnV0ZXMuCisgICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDb2x1bW5z
QXR0cmlidXRlXQorICAgICAgICAgICAgfHwgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2VsbHNBdHRyaWJ1dGVdKQogICAgICAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAgICAgCi0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29sdW1uSGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0pIHsK
LSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBjb2x1bW5IZWFkZXJzOwotICAgICAgICAgICAgdGFibGUuY29sdW1uSGVhZGVycyhjb2x1
bW5IZWFkZXJzKTsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNvbHVtbkhl
YWRlcnMpOwotICAgICAgICB9Ci0gICAgICAgIAorCisgICAgICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29sdW1uSGVhZGVyVUlFbGVtZW50c0F0
dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShiYWNraW5nT2Jq
ZWN0LT5jb2x1bW5IZWFkZXJzKCkpOworCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SGVhZGVyQXR0cmlidXRlXSkgewotICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGVyQ29udGFpbmVyID0gdGFibGUuaGVhZGVyQ29u
dGFpbmVyKCk7Ci0gICAgICAgICAgICBpZiAoaGVhZGVyQ29udGFpbmVyKQotICAgICAgICAgICAg
ICAgIHJldHVybiBoZWFkZXJDb250YWluZXItPndyYXBwZXIoKTsKLSAgICAgICAgICAgIHJldHVy
biBuaWw7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93SGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0
ZV0pIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciByb3dIZWFkZXJzOwotICAgICAgICAgICAgdGFibGUucm93SGVhZGVycyhyb3dI
ZWFkZXJzKTsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJvd0hlYWRlcnMp
OworICAgICAgICAgICAgYXV0byogaGVhZGVyQ29udGFpbmVyID0gYmFja2luZ09iamVjdC0+aGVh
ZGVyQ29udGFpbmVyKCk7CisgICAgICAgICAgICByZXR1cm4gaGVhZGVyQ29udGFpbmVyID8gaGVh
ZGVyQ29udGFpbmVyLT53cmFwcGVyKCkgOiBuaWw7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Vmlz
aWJsZUNlbGxzQXR0cmlidXRlXSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNlbGxzOwotICAgICAgICAgICAgdGFibGUuY2Vs
bHMoY2VsbHMpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY2VsbHMpOwot
ICAgICAgICB9Ci0gICAgICAgIAorCisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93SGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0pCisg
ICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShiYWNraW5nT2JqZWN0LT5yb3dIZWFk
ZXJzKCkpOworCisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5VmlzaWJsZUNlbGxzQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiBj
b252ZXJ0VG9OU0FycmF5KGJhY2tpbmdPYmplY3QtPmNlbGxzKCkpOworCiAgICAgICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29sdW1uQ291bnRB
dHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIEAodGFibGUuY29sdW1uQ291bnQoKSk7Ci0g
ICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIEAoYmFja2luZ09iamVjdC0+Y29sdW1uQ291bnQo
KSk7CisKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlSb3dDb3VudEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gQCh0YWJsZS5y
b3dDb3VudCgpKTsKLSAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gQChiYWNraW5nT2JqZWN0
LT5yb3dDb3VudCgpKTsKKwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFDb2x1bW5Db3VudEF0dHJpYnV0ZV0pCi0gICAgICAgICAg
ICByZXR1cm4gQCh0YWJsZS5heENvbHVtbkNvdW50KCkpOwotICAgICAgICAKKyAgICAgICAgICAg
IHJldHVybiBAKGJhY2tpbmdPYmplY3QtPmF4Q29sdW1uQ291bnQoKSk7CisKICAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBUm93Q291
bnRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIEAodGFibGUuYXhSb3dDb3VudCgpKTsK
KyAgICAgICAgICAgIHJldHVybiBAKGJhY2tpbmdPYmplY3QtPmF4Um93Q291bnQoKSk7CiAgICAg
fQotICAgIAotICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4+KCpzZWxmLmF4QmFj
a2luZ09iamVjdCkpIHsKLSAgICAgICAgYXV0byYgY29sdW1uID0gZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eVRhYmxlQ29sdW1uPigqc2VsZi5heEJhY2tpbmdPYmplY3QpOworCisgICAgaWYgKGlzPEFj
Y2Vzc2liaWxpdHlUYWJsZUNvbHVtbj4oKmJhY2tpbmdPYmplY3QpKSB7CisgICAgICAgIGF1dG8m
IGNvbHVtbiA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbj4oKmJhY2tpbmdPYmpl
Y3QpOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUluZGV4QXR0cmlidXRlXSkKICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDpjb2x1bW4uY29sdW1uSW5kZXgoKV07Ci0gICAgICAgIAorCiAgICAgICAgIC8v
IHJvd3MgYXR0cmlidXRlIGZvciBhIGNvbHVtbiBpcyB0aGUgbGlzdCBvZiBhbGwgdGhlIGVsZW1l
bnRzIGluIHRoYXQgY29sdW1uIGF0IGVhY2ggcm93CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV0gfHwKICAgICAg
ICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWaXNp
YmxlUm93c0F0dHJpYnV0ZV0pIHsKQEAgLTI3OTcsOSArMjc3Niw5IEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJuIGhlYWRlci0+d3JhcHBl
cigpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFi
bGVDZWxsPigqc2VsZi5heEJhY2tpbmdPYmplY3QpKSB7Ci0gICAgICAgIGF1dG8mIGNlbGwgPSBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqc2VsZi5heEJhY2tpbmdPYmplY3QpOwor
CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpiYWNraW5nT2JqZWN0KSkgewor
ICAgICAgICBhdXRvJiBjZWxsID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmJh
Y2tpbmdPYmplY3QpOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eVJvd0luZGV4UmFuZ2VBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICBz
dGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiByb3dSYW5nZTsKICAgICAgICAgICAgIGNlbGwu
cm93SW5kZXhSYW5nZShyb3dSYW5nZSk7CkBAIC0yODEwLDQ5ICsyNzg5LDQ1IEBAIEFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgY2VsbC5jb2x1bW5JbmRl
eFJhbmdlKGNvbHVtblJhbmdlKTsKICAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdp
dGhSYW5nZTpOU01ha2VSYW5nZShjb2x1bW5SYW5nZS5maXJzdCwgY29sdW1uUmFuZ2Uuc2Vjb25k
KV07CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5IZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRlXSkgewotICAg
ICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
IGNvbHVtbkhlYWRlcnM7Ci0gICAgICAgICAgICBjZWxsLmNvbHVtbkhlYWRlcnMoY29sdW1uSGVh
ZGVycyk7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShjb2x1bW5IZWFkZXJz
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eVJvd0hlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7Ci0gICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93
SGVhZGVyczsKLSAgICAgICAgICAgIGNlbGwucm93SGVhZGVycyhyb3dIZWFkZXJzKTsKLSAgICAg
ICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJvd0hlYWRlcnMpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
Q29sdW1uSGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gY29u
dmVydFRvTlNBcnJheShjZWxsLmNvbHVtbkhlYWRlcnMoKSk7CisKKyAgICAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dIZWFkZXJVSUVsZW1l
bnRzQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNlbGwu
cm93SGVhZGVycygpKTsKKwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFDb2x1bW5JbmRleEF0dHJpYnV0ZV0pCiAgICAgICAgICAg
ICByZXR1cm4gQChjZWxsLmF4Q29sdW1uSW5kZXgoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVJvd0lu
ZGV4QXR0cmlidXRlXSkKICAgICAgICAgICAgIHJldHVybiBAKGNlbGwuYXhSb3dJbmRleCgpKTsK
ICAgICB9Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWUoKSkgewor
CisgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVHJlZSgpKSB7CiAgICAgICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRSb3dzQXR0cmli
dXRlXSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW5Db3B5OwotICAgICAgICAgICAgc2VsZi5heEJh
Y2tpbmdPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOworICAg
ICAgICAgICAgYmFja2luZ09iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVu
Q29weSk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShzZWxlY3RlZENoaWxk
cmVuQ29weSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXSkgewogICAgICAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3NDb3B5Owot
ICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFUcmVlUm93cyhyb3dzQ29weSk7
CisgICAgICAgICAgICBiYWNraW5nT2JqZWN0LT5hcmlhVHJlZVJvd3Mocm93c0NvcHkpOwogICAg
ICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocm93c0NvcHkpOwogICAgICAgICB9Ci0g
ICAgICAgIAorCiAgICAgICAgIC8vIFRyZWVSb2xlcyBkbyBub3Qgc3VwcG9ydCBjb2x1bW5zLCBi
dXQgTWFjIEFYIGV4cGVjdHMgdG8gYmUgYWJsZSB0byBhc2sgYWJvdXQgY29sdW1ucyBhdCB0aGUg
bGVhc3QuCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5Q29sdW1uc0F0dHJpYnV0ZV0pCiAgICAgICAgICAgICByZXR1cm4gW05TQXJyYXkg
YXJyYXldOwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKSB7Ci0gICAgICAgICAgICBBWENvcmVPYmpl
Y3QqIHBhcmVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wYXJlbnRPYmplY3QoKTsKKyAgICAg
ICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkgeworICAgICAgICAgICAgQVhDb3Jl
T2JqZWN0KiBwYXJlbnQgPSBiYWNraW5nT2JqZWN0LT5wYXJlbnRPYmplY3QoKTsKICAgICAgICAg
ICAgIGZvciAoOyBwYXJlbnQgJiYgIXBhcmVudC0+aXNUcmVlKCk7IHBhcmVudCA9IHBhcmVudC0+
cGFyZW50T2JqZWN0KCkpCiAgICAgICAgICAgICB7IH0KLSAgICAgICAgICAgIAorCiAgICAgICAg
ICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAg
ICAgCisKICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGluZGV4IG9mIHRoaXMgaXRlbSBieSBpdGVy
YXRpbmcgdGhlIHBhcmVudHMuCiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93c0NvcHk7CiAgICAgICAgICAgICBwYXJlbnQtPmFy
aWFUcmVlUm93cyhyb3dzQ29weSk7CkBAIC0yODYwLDM0ICsyODM1LDM0IEBAIEFMTE9XX0RFUFJF
Q0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7
IGsgPCBjb3VudDsgKytrKQogICAgICAgICAgICAgICAgIGlmIChyb3dzQ29weVtrXS0+d3JhcHBl
cigpID09IHNlbGYpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aFVuc2lnbmVkSW50OmtdOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJldHVybiBu
aWw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKnNl
bGYuYXhCYWNraW5nT2JqZWN0KSkgeworICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxl
Um93PigqYmFja2luZ09iamVjdCkpIHsKICAgICAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKQotICAgICAgICAg
ICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGVSb3c+KCpzZWxmLmF4QmFja2luZ09iamVjdCkucm93SW5kZXgoKV07CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OmRvd25jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZVJvdz4oKmJhY2tpbmdPYmplY3QpLnJvd0luZGV4KCldOwogICAgICAgICB9CiAg
ICAgfQotICAgIAorCiAgICAgLy8gVGhlIHJvd3MgdGhhdCBhcmUgY29uc2lkZXJlZCBpbnNpZGUg
dGhpcyByb3cuCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlEaXNjbG9zZWRSb3dzQXR0cmlidXRlXSkgewotICAgICAgICBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkgeworICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+
aXNUcmVlSXRlbSgpKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93c0NvcHk7Ci0gICAgICAgICAgICBzZWxmLmF4QmFja2lu
Z09iamVjdC0+YXJpYVRyZWVJdGVtRGlzY2xvc2VkUm93cyhyb3dzQ29weSk7CisgICAgICAgICAg
ICBiYWNraW5nT2JqZWN0LT5hcmlhVHJlZUl0ZW1EaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKICAg
ICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJvd3NDb3B5KTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KCpzZWxmLmF4QmFja2lu
Z09iamVjdCkpIHsKKyAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdz4oKmJh
Y2tpbmdPYmplY3QpKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93c0NvcHk7Ci0gICAgICAgICAgICBkb3duY2FzdDxBY2Nl
c3NpYmlsaXR5QVJJQUdyaWRSb3c+KCpzZWxmLmF4QmFja2luZ09iamVjdCkuZGlzY2xvc2VkUm93
cyhyb3dzQ29weSk7CisgICAgICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRS
b3c+KCpiYWNraW5nT2JqZWN0KS5kaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKICAgICAgICAgICAg
IHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJvd3NDb3B5KTsKICAgICAgICAgfQogICAgIH0KLSAg
ICAKKwogICAgIC8vIFRoZSByb3cgdGhhdCBjb250YWlucyB0aGlzIHJvdy4gSXQgc2hvdWxkIGJl
IHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBwYXJlbnQgdGhhdCBpcyBhIHRyZWVpdGVtLgogICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc2Vk
QnlSb3dBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNU
cmVlSXRlbSgpKSB7Ci0gICAgICAgICAgICBBWENvcmVPYmplY3QqIHBhcmVudCA9IHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5wYXJlbnRPYmplY3QoKTsKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3Qt
PmlzVHJlZUl0ZW0oKSkgeworICAgICAgICAgICAgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBiYWNr
aW5nT2JqZWN0LT5wYXJlbnRPYmplY3QoKTsKICAgICAgICAgICAgIHdoaWxlIChwYXJlbnQpIHsK
ICAgICAgICAgICAgICAgICBpZiAocGFyZW50LT5pc1RyZWVJdGVtKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKQEAgLTI4OTksNzYgKzI4NzQsNzYgQEAg
QUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1cm4g
bmlsOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlBUklBR3JpZFJv
dz4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KSkgewotICAgICAgICAgICAgQVhDb3JlT2JqZWN0KiBy
b3cgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KCpzZWxmLmF4QmFja2luZ09i
amVjdCkuZGlzY2xvc2VkQnlSb3coKTsKKyAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlBUklB
R3JpZFJvdz4oKmJhY2tpbmdPYmplY3QpKSB7CisgICAgICAgICAgICBBWENvcmVPYmplY3QqIHJv
dyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdz4oKmJhY2tpbmdPYmplY3QpLmRp
c2Nsb3NlZEJ5Um93KCk7CiAgICAgICAgICAgICBpZiAoIXJvdykKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJuIHJvdy0+d3JhcHBlcigpOwogICAgICAgICB9
CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlEaXNjbG9zdXJlTGV2ZWxBdHRyaWJ1dGVdKSB7CiAgICAgICAgIC8vIENv
bnZlcnQgZnJvbSAxLWJhc2VkIGxldmVsIChmcm9tIGFyaWEtbGV2ZWwgc3BlYykgdG8gMC1iYXNl
ZCBsZXZlbCAoTWFjKQotICAgICAgICBpbnQgbGV2ZWwgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+
aGllcmFyY2hpY2FsTGV2ZWwoKTsKKyAgICAgICAgaW50IGxldmVsID0gYmFja2luZ09iamVjdC0+
aGllcmFyY2hpY2FsTGV2ZWwoKTsKICAgICAgICAgaWYgKGxldmVsID4gMCkKICAgICAgICAgICAg
IGxldmVsIC09IDE7CiAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpsZXZl
bF07CiAgICAgfQogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5RGlzY2xvc2luZ0F0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzRXhwYW5kZWQoKV07Ci0gICAg
Ci0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xpc3QoKSAmJiBbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25BdHRyaWJ1dGVdKQor
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmJhY2tpbmdPYmplY3QtPmlz
RXhwYW5kZWQoKV07CisKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNMaXN0KCkgJiYgW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmli
dXRlXSkKICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsT3JpZW50YXRpb25W
YWx1ZTsKLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAi
QVhTZWxlY3RlZFRleHRNYXJrZXJSYW5nZSJdKQogICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1h
cmtlclJhbmdlRm9yU2VsZWN0aW9uXTsKLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6IEAiQVhTdGFydFRleHRNYXJrZXIiXSkKLSAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246c3RhcnRPZkRvY3VtZW50KHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5kb2N1bWVudCgpKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFy
a2VyRm9yVmlzaWJsZVBvc2l0aW9uOnN0YXJ0T2ZEb2N1bWVudChiYWNraW5nT2JqZWN0LT5kb2N1
bWVudCgpKV07CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogQCJBWEVu
ZFRleHRNYXJrZXIiXSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxl
UG9zaXRpb246ZW5kT2ZEb2N1bWVudChzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSld
OwotICAgIAorICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlv
bjplbmRPZkRvY3VtZW50KGJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCkpXTsKKwogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QmxvY2tRdW90ZUxl
dmVsQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWdu
ZWRJbnQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPmJsb2NrcXVvdGVMZXZlbCgpXTsKKyAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6YmFja2luZ09iamVjdC0+Ymxv
Y2txdW90ZUxldmVsKCldOwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWFRhYmxlTGV2ZWwiXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50
OnNlbGYuYXhCYWNraW5nT2JqZWN0LT50YWJsZUxldmVsKCldOwotICAgIAorICAgICAgICByZXR1
cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6YmFja2luZ09iamVjdC0+dGFibGVMZXZlbCgpXTsK
KwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0
eUxpbmtlZFVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBsaW5rZWRVSUVsZW1lbnRzOwotICAgICAg
ICBzZWxmLmF4QmFja2luZ09iamVjdC0+bGlua2VkVUlFbGVtZW50cyhsaW5rZWRVSUVsZW1lbnRz
KTsKKyAgICAgICAgYmFja2luZ09iamVjdC0+bGlua2VkVUlFbGVtZW50cyhsaW5rZWRVSUVsZW1l
bnRzKTsKICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkobGlua2VkVUlFbGVtZW50cyk7
CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzog
TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVt
YmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1NlbGVjdGVkKCldOwot
ICAgIAorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmJhY2tpbmdPYmpl
Y3QtPmlzU2VsZWN0ZWQoKV07CisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOiBOU0FjY2Vzc2liaWxpdHlBUklBQ3VycmVudEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVy
biBzZWxmLmF4QmFja2luZ09iamVjdC0+Y3VycmVudFZhbHVlKCk7Ci0gICAgCi0gICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VydmVzQXNUaXRs
ZUZvclVJRWxlbWVudHNBdHRyaWJ1dGVdICYmIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01lbnVC
dXR0b24oKSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB1aUVsZW1lbnQgPSBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Pigqc2VsZi5heEJhY2tpbmdPYmplY3QpLm1l
bnVGb3JNZW51QnV0dG9uKCk7CisgICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5jdXJyZW50
VmFsdWUoKTsKKworICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNj
ZXNzaWJpbGl0eVNlcnZlc0FzVGl0bGVGb3JVSUVsZW1lbnRzQXR0cmlidXRlXSAmJiBiYWNraW5n
T2JqZWN0LT5pc01lbnVCdXR0b24oKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB1
aUVsZW1lbnQgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0PigqYmFja2luZ09i
amVjdCkubWVudUZvck1lbnVCdXR0b24oKTsKICAgICAgICAgaWYgKHVpRWxlbWVudCkKICAgICAg
ICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6dWlFbGVtZW50LT53cmFwcGVy
KCldOwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlm
ICghc2VsZi5heEJhY2tpbmdPYmplY3QtPmV4cG9zZXNUaXRsZVVJRWxlbWVudCgpKQorICAgICAg
ICBpZiAoIWJhY2tpbmdPYmplY3QtPmV4cG9zZXNUaXRsZVVJRWxlbWVudCgpKQogICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKIAotICAgICAgICBBWENvcmVPYmplY3QqIG9iaiA9IHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT50aXRsZVVJRWxlbWVudCgpOworICAgICAgICBBWENvcmVPYmplY3QqIG9iaiA9
IGJhY2tpbmdPYmplY3QtPnRpdGxlVUlFbGVtZW50KCk7CiAgICAgICAgIGlmIChvYmopCiAgICAg
ICAgICAgICByZXR1cm4gb2JqLT53cmFwcGVyKCk7CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
fQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlWYWx1ZURlc2NyaXB0aW9uQXR0cmlidXRlXSkgewotICAgICAgICBpZiAoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzTWV0ZXIoKSkKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlz
TWV0ZXIoKSkKICAgICAgICAgICAgIHJldHVybiBbc2VsZiB2YWx1ZURlc2NyaXB0aW9uRm9yTWV0
ZXJdOwotICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnZhbHVlRGVzY3JpcHRp
b24oKTsKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPnZhbHVlRGVzY3JpcHRpb24oKTsK
ICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmlidXRlXSkgewotICAgICAgICBBY2Nlc3NpYmls
aXR5T3JpZW50YXRpb24gZWxlbWVudE9yaWVudGF0aW9uID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
Pm9yaWVudGF0aW9uKCk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBlbGVtZW50
T3JpZW50YXRpb24gPSBiYWNraW5nT2JqZWN0LT5vcmllbnRhdGlvbigpOwogICAgICAgICBpZiAo
ZWxlbWVudE9yaWVudGF0aW9uID09IEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6VmVydGljYWwp
CiAgICAgICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VmVydGljYWxPcmllbnRhdGlvblZh
bHVlOwogICAgICAgICBpZiAoZWxlbWVudE9yaWVudGF0aW9uID09IEFjY2Vzc2liaWxpdHlPcmll
bnRhdGlvbjo6SG9yaXpvbnRhbCkKQEAgLTI5NzcsMjIgKzI5NTIsMjIgQEAgQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmls
aXR5VW5rbm93bk9yaWVudGF0aW9uVmFsdWU7CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQot
ICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlIb3Jpem9udGFsU2Nyb2xsQmFyQXR0cmlidXRlXSkgewotICAgICAgICBBWENvcmVPYmpl
Y3QqIHNjcm9sbEJhciA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zY3JvbGxCYXIoQWNjZXNzaWJp
bGl0eU9yaWVudGF0aW9uOjpIb3Jpem9udGFsKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBzY3Jv
bGxCYXIgPSBiYWNraW5nT2JqZWN0LT5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9u
OjpIb3Jpem9udGFsKTsKICAgICAgICAgaWYgKHNjcm9sbEJhcikKICAgICAgICAgICAgIHJldHVy
biBzY3JvbGxCYXItPndyYXBwZXIoKTsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWZXJ0aWNh
bFNjcm9sbEJhckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQVhDb3JlT2JqZWN0KiBzY3JvbGxCYXIg
PSBzZWxmLmF4QmFja2luZ09iamVjdC0+c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlv
bjo6VmVydGljYWwpOworICAgICAgICBBWENvcmVPYmplY3QqIHNjcm9sbEJhciA9IGJhY2tpbmdP
YmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246OlZlcnRpY2FsKTsKICAg
ICAgICAgaWYgKHNjcm9sbEJhcikKICAgICAgICAgICAgIHJldHVybiBzY3JvbGxCYXItPndyYXBw
ZXIoKTsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb25BdHRy
aWJ1dGVdKSB7Ci0gICAgICAgIHN3aXRjaCAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnNvcnREaXJl
Y3Rpb24oKSkgeworICAgICAgICBzd2l0Y2ggKGJhY2tpbmdPYmplY3QtPnNvcnREaXJlY3Rpb24o
KSkgewogICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uOjpBc2NlbmRpbmc6
CiAgICAgICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5QXNjZW5kaW5nU29ydERpcmVjdGlv
blZhbHVlOwogICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uOjpEZXNjZW5k
aW5nOgpAQCAtMzAwMSw0NiArMjk3Niw0NiBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19FTkQKICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlVbmtub3duU29ydERp
cmVjdGlvblZhbHVlOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlMYW5ndWFnZUF0dHJpYnV0ZV0p
Ci0gICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bGFuZ3VhZ2UoKTsKLSAgICAK
KyAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPmxhbmd1YWdlKCk7CisKICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkQXR0cmli
dXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNFeHBhbmRlZCgpXTsKLSAgICAKKyAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpiYWNraW5nT2JqZWN0LT5pc0V4cGFuZGVkKCldOworCiAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSZXF1aXJlZEF0
dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzUmVxdWlyZWQoKV07Ci0gICAgCisgICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6YmFja2luZ09iamVjdC0+aXNSZXF1aXJlZCgpXTsKKwogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW52YWxp
ZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+aW52YWxp
ZFN0YXR1cygpOwotICAgIAorICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+aW52YWxpZFN0
YXR1cygpOworCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlPd25zQXR0cmlidXRlXSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYU93bnM7Ci0gICAgICAgIHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5hcmlhT3duc0VsZW1lbnRzKGFyaWFPd25zKTsKKyAgICAgICAgYmFja2luZ09i
amVjdC0+YXJpYU93bnNFbGVtZW50cyhhcmlhT3ducyk7CiAgICAgICAgIHJldHVybiBjb252ZXJ0
VG9OU0FycmF5KGFyaWFPd25zKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFQb3NJblNldEF0dHJpYnV0ZV0p
Ci0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpzZWxmLmF4QmFja2luZ09i
amVjdC0+cG9zSW5TZXQoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aElu
dDpiYWNraW5nT2JqZWN0LT5wb3NJblNldCgpXTsKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFTZXRTaXplQXR0cmlidXRlXSkKLSAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5z
ZXRTaXplKCldOwotICAgIAorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6
YmFja2luZ09iamVjdC0+c2V0U2l6ZSgpXTsKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJl
dHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQVJJ
QUdyYWJiZWQoKV07Ci0gICAgCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6YmFja2luZ09iamVjdC0+aXNBUklBR3JhYmJlZCgpXTsKKwogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RHJvcEVmZmVjdHNBdHRyaWJ1dGVd
KSB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGRyb3BFZmZlY3RzID0gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmRldGVybWluZUFSSUFEcm9wRWZmZWN0cygpOworICAgICAgICBWZWN0b3I8U3RyaW5n
PiBkcm9wRWZmZWN0cyA9IGJhY2tpbmdPYmplY3QtPmRldGVybWluZUFSSUFEcm9wRWZmZWN0cygp
OwogICAgICAgICByZXR1cm4gY29udmVydFN0cmluZ3NUb05TQXJyYXkoZHJvcEVmZmVjdHMpOwog
ICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBz
ZWxmLmF4QmFja2luZ09iamVjdC0+cGxhY2Vob2xkZXJWYWx1ZSgpOworICAgICAgICByZXR1cm4g
YmFja2luZ09iamVjdC0+cGxhY2Vob2xkZXJWYWx1ZSgpOwogCiAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF1dG9maWxsQXZhaWxhYmxl
QXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIEAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVmFs
dWVBdXRvZmlsbEF2YWlsYWJsZSgpKTsKLSAgICAKKyAgICAgICAgcmV0dXJuIEAoYmFja2luZ09i
amVjdC0+aXNWYWx1ZUF1dG9maWxsQXZhaWxhYmxlKCkpOworCiAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF1dG9maWxsVHlwZUF0dHJp
YnV0ZV0pIHsKLSAgICAgICAgc3dpdGNoIChzZWxmLmF4QmFja2luZ09iamVjdC0+dmFsdWVBdXRv
ZmlsbEJ1dHRvblR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKGJhY2tpbmdPYmplY3QtPnZhbHVl
QXV0b2ZpbGxCdXR0b25UeXBlKCkpIHsKICAgICAgICAgY2FzZSBBdXRvRmlsbEJ1dHRvblR5cGU6
Ok5vbmU6CiAgICAgICAgICAgICByZXR1cm4gQCJub25lIjsKICAgICAgICAgY2FzZSBBdXRvRmls
bEJ1dHRvblR5cGU6OkNyZWRlbnRpYWxzOgpAQCAtMzA1MywxNTQgKzMwMjgsMTU0IEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJuIEAiY3Jl
ZGl0IGNhcmQiOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF1dG9maWxsZWRBdHRyaWJ1
dGVdKQotICAgICAgICByZXR1cm4gQChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNWYWx1ZUF1dG9m
aWxsZWQoKSk7CisgICAgICAgIHJldHVybiBAKGJhY2tpbmdPYmplY3QtPmlzVmFsdWVBdXRvZmls
bGVkKCkpOwogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlIYXNQb3B1cEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVt
YmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmhhc1BvcHVwKCldOworICAgICAgICBy
ZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmJhY2tpbmdPYmplY3QtPmhhc1BvcHVwKCld
OwogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlEYXRldGltZVZhbHVlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5kYXRldGltZUF0dHJpYnV0ZVZhbHVlKCk7Ci0gICAgCisgICAgICAgIHJldHVybiBi
YWNraW5nT2JqZWN0LT5kYXRldGltZUF0dHJpYnV0ZVZhbHVlKCk7CisKICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUlubGluZVRleHRBdHRyaWJ1
dGVdKQotICAgICAgICByZXR1cm4gQChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNJbmxpbmVUZXh0
KCkpOwotICAgIAorICAgICAgICByZXR1cm4gQChiYWNraW5nT2JqZWN0LT5pc0lubGluZVRleHQo
KSk7CisKICAgICAvLyBBUklBIExpdmUgcmVnaW9uIGF0dHJpYnV0ZXMuCiAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBTGl2ZUF0dHJpYnV0
ZV0pCi0gICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bGl2ZVJlZ2lvblN0YXR1
cygpOworICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+bGl2ZVJlZ2lvblN0YXR1cygpOwog
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJ
QVJlbGV2YW50QXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5saXZlUmVnaW9uUmVsZXZhbnQoKTsKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPmxp
dmVSZWdpb25SZWxldmFudCgpOwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5QVJJQUF0b21pY0F0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmxpdmVSZWdpb25B
dG9taWMoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6YmFja2lu
Z09iamVjdC0+bGl2ZVJlZ2lvbkF0b21pYygpXTsKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUVsZW1lbnRCdXN5QXR0cmlidXRlXSkKLSAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNCdXN5KCldOwotICAgIAorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29s
OmJhY2tpbmdPYmplY3QtPmlzQnVzeSgpXTsKKwogICAgIC8vIE1hdGhNTCBBdHRyaWJ1dGVzLgot
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoRWxlbWVudCgpKSB7CisgICAgaWYg
KGJhY2tpbmdPYmplY3QtPmlzTWF0aEVsZW1lbnQoKSkgewogICAgICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhSb290SW5kZXhBdHRyaWJ1
dGVdKQotICAgICAgICAgICAgcmV0dXJuIChzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFJvb3RJ
bmRleE9iamVjdCgpKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoUm9vdEluZGV4T2JqZWN0
KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgICAgICByZXR1cm4gKGJhY2tpbmdPYmplY3QtPm1h
dGhSb290SW5kZXhPYmplY3QoKSkgPyBiYWNraW5nT2JqZWN0LT5tYXRoUm9vdEluZGV4T2JqZWN0
KCktPndyYXBwZXIoKSA6IDA7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RSYWRpY2FuZEF0dHJpYnV0ZV0pCi0gICAgICAg
ICAgICByZXR1cm4gKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoUmFkaWNhbmRPYmplY3QoKSkg
PyBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCktPndyYXBwZXIoKSA6
IDA7CisgICAgICAgICAgICByZXR1cm4gKGJhY2tpbmdPYmplY3QtPm1hdGhSYWRpY2FuZE9iamVj
dCgpKSA/IGJhY2tpbmdPYmplY3QtPm1hdGhSYWRpY2FuZE9iamVjdCgpLT53cmFwcGVyKCkgOiAw
OwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eU1hdGhGcmFjdGlvbk51bWVyYXRvckF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4g
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoTnVtZXJhdG9yT2JqZWN0KCkpID8gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPm1hdGhOdW1lcmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAg
ICAgICAgIHJldHVybiAoYmFja2luZ09iamVjdC0+bWF0aE51bWVyYXRvck9iamVjdCgpKSA/IGJh
Y2tpbmdPYmplY3QtPm1hdGhOdW1lcmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRo
RnJhY3Rpb25EZW5vbWluYXRvckF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKSkgPyBzZWxmLmF4QmFja2lu
Z09iamVjdC0+bWF0aERlbm9taW5hdG9yT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAg
ICAgICByZXR1cm4gKGJhY2tpbmdPYmplY3QtPm1hdGhEZW5vbWluYXRvck9iamVjdCgpKSA/IGJh
Y2tpbmdPYmplY3QtPm1hdGhEZW5vbWluYXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwogICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1h
dGhCYXNlQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPm1hdGhCYXNlT2JqZWN0KCkpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhCYXNlT2Jq
ZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgICAgICByZXR1cm4gKGJhY2tpbmdPYmplY3Qt
Pm1hdGhCYXNlT2JqZWN0KCkpID8gYmFja2luZ09iamVjdC0+bWF0aEJhc2VPYmplY3QoKS0+d3Jh
cHBlcigpIDogMDsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlNYXRoU3Vic2NyaXB0QXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVy
biAoc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhTdWJzY3JpcHRPYmplY3QoKSkgPyBzZWxmLmF4
QmFja2luZ09iamVjdC0+bWF0aFN1YnNjcmlwdE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAg
ICAgICAgICAgcmV0dXJuIChiYWNraW5nT2JqZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCkpID8g
YmFja2luZ09iamVjdC0+bWF0aFN1YnNjcmlwdE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwogICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1h
dGhTdXBlcnNjcmlwdEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5tYXRoU3VwZXJzY3JpcHRPYmplY3QoKSkgPyBzZWxmLmF4QmFja2luZ09iamVj
dC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgICAgICBy
ZXR1cm4gKGJhY2tpbmdPYmplY3QtPm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpKSA/IGJhY2tpbmdP
YmplY3QtPm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwogICAgICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhVbmRl
ckF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5t
YXRoVW5kZXJPYmplY3QoKSkgPyBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFVuZGVyT2JqZWN0
KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgICAgICByZXR1cm4gKGJhY2tpbmdPYmplY3QtPm1h
dGhVbmRlck9iamVjdCgpKSA/IGJhY2tpbmdPYmplY3QtPm1hdGhVbmRlck9iamVjdCgpLT53cmFw
cGVyKCkgOiAwOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eU1hdGhPdmVyQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPm1hdGhPdmVyT2JqZWN0KCkpID8gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPm1hdGhPdmVyT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgICAgICByZXR1cm4g
KGJhY2tpbmdPYmplY3QtPm1hdGhPdmVyT2JqZWN0KCkpID8gYmFja2luZ09iamVjdC0+bWF0aE92
ZXJPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoRmVuY2VkT3BlbkF0dHJpYnV0ZV0pCi0g
ICAgICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhGZW5jZWRPcGVuU3Ry
aW5nKCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+bWF0aEZlbmNlZE9wZW5T
dHJpbmcoKTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlNYXRoRmVuY2VkQ2xvc2VBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJu
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoRmVuY2VkQ2xvc2VTdHJpbmcoKTsKKyAgICAgICAg
ICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5tYXRoRmVuY2VkQ2xvc2VTdHJpbmcoKTsKICAgICAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRo
TGluZVRoaWNrbmVzc0F0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhJbnRlZ2VyOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoTGluZVRoaWNrbmVzcygp
XTsKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6YmFja2lu
Z09iamVjdC0+bWF0aExpbmVUaGlja25lc3MoKV07CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aFBvc3RzY3JpcHRzQXR0cmlidXRl
XSkKICAgICAgICAgICAgIHJldHVybiBbc2VsZiBhY2Nlc3NpYmlsaXR5TWF0aFBvc3RzY3JpcHRQ
YWlyc107CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5TWF0aFByZXNjcmlwdHNBdHRyaWJ1dGVdKQogICAgICAgICAgICAgcmV0dXJuIFtz
ZWxmIGFjY2Vzc2liaWxpdHlNYXRoUHJlc2NyaXB0UGFpcnNdOwogICAgIH0KLSAgICAKKwogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RXhwYW5k
ZWRUZXh0VmFsdWVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmV4cGFuZGVkVGV4dFZhbHVlKCk7Ci0gICAgCisgICAgICAgIHJldHVybiBiYWNraW5nT2Jq
ZWN0LT5leHBhbmRlZFRleHRWYWx1ZSgpOworCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlET01JZGVudGlmaWVyQXR0cmlidXRlXSkKLSAgICAg
ICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pZGVudGlmaWVyQXR0cmlidXRlKCk7Cisg
ICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5pZGVudGlmaWVyQXR0cmlidXRlKCk7CiAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlET01DbGFz
c0xpc3RBdHRyaWJ1dGVdKSB7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGNsYXNzTGlzdDsKLSAg
ICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmNsYXNzTGlzdChjbGFzc0xpc3QpOworICAgICAg
ICBiYWNraW5nT2JqZWN0LT5jbGFzc0xpc3QoY2xhc3NMaXN0KTsKICAgICAgICAgcmV0dXJuIGNv
bnZlcnRTdHJpbmdzVG9OU0FycmF5KGNsYXNzTGlzdCk7CiAgICAgfQotICAgIAorCiAgICAgLy8g
VGhpcyBhbGxvd3MgdXMgdG8gY29ubmVjdCB0byBhIHBsdWdpbiB0aGF0IGNyZWF0ZXMgYSBzaGFk
b3cgbm9kZSBmb3IgZWRpdGluZyAobGlrZSBQREZzKS4KICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOkAiX0FYQXNzb2NpYXRlZFBsdWdpblBhcmVudCJdKQogICAgICAgICBy
ZXR1cm4gW3NlbGYgYXNzb2NpYXRlZFBsdWdpblBhcmVudF07Ci0gICAgCisKICAgICAvLyB0aGlz
IGlzIHVzZWQgb25seSBieSBEdW1wUmVuZGVyVHJlZSBmb3IgdGVzdGluZwogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWENsaWNrUG9pbnQiXSkKLSAgICAgICAgcmV0
dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5jbGlja1Bv
aW50KCldOwotICAgIAorICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6YmFj
a2luZ09iamVjdC0+Y2xpY2tQb2ludCgpXTsKKwogICAgIC8vIFRoaXMgaXMgdXNlZCBieSBEUlQg
dG8gdmVyaWZ5IENTUzMgc3BlZWNoIHdvcmtzLgogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6QCJBWERSVFNwZWVjaEF0dHJpYnV0ZSJdKQogICAgICAgICByZXR1cm4gW3Nl
bGYgYmFzZUFjY2Vzc2liaWxpdHlTcGVlY2hIaW50XTsKLSAgICAKKwogICAgIC8vIFVzZWQgYnkg
RFJUIHRvIGZpbmQgYW4gYWNjZXNzaWJsZSBub2RlIGJ5IGl0cyBlbGVtZW50IGlkLgogICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERSVEVsZW1lbnRJZEF0dHJpYnV0
ZSJdKQotICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmlkZW50aWZpZXJBdHRy
aWJ1dGUoKTsKLSAgICAKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPmlkZW50aWZpZXJB
dHRyaWJ1dGUoKTsKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJB
WEF1dG9jb21wbGV0ZVZhbHVlIl0pCi0gICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVj
dC0+YXV0b0NvbXBsZXRlVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPmF1
dG9Db21wbGV0ZVZhbHVlKCk7CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eVBvcHVwVmFsdWVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4g
c2VsZi5heEJhY2tpbmdPYmplY3QtPnBvcHVwVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGJhY2tp
bmdPYmplY3QtPnBvcHVwVmFsdWUoKTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWEtleVNob3J0Y3V0c1ZhbHVlIl0pCi0gICAgICAgIHJldHVybiBzZWxmLmF4
QmFja2luZ09iamVjdC0+a2V5U2hvcnRjdXRzVmFsdWUoKTsKLSAgICAKKyAgICAgICAgcmV0dXJu
IGJhY2tpbmdPYmplY3QtPmtleVNob3J0Y3V0c1ZhbHVlKCk7CisKICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhBUklBUHJlc3NlZElzUHJlc2VudCJdKQotICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5w
cmVzc2VkSXNQcmVzZW50KCldOwotICAgIAorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOmJhY2tpbmdPYmplY3QtPnByZXNzZWRJc1ByZXNlbnQoKV07CisKICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhJc011bHRpbGluZSJdKQotICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5h
cmlhSXNNdWx0aWxpbmUoKV07Ci0gICAgCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEJvb2w6YmFja2luZ09iamVjdC0+YXJpYUlzTXVsdGlsaW5lKCldOworCiAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYUmVhZE9ubHlWYWx1ZSJdKQotICAgICAg
ICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJlYWRPbmx5VmFsdWUoKTsKKyAgICAgICAg
cmV0dXJuIGJhY2tpbmdPYmplY3QtPnJlYWRPbmx5VmFsdWUoKTsKIAogICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWElzQWN0aXZlRGVzY2VuZGFudE9mRm9jdXNlZENv
bnRhaW5lciJdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0FjdGl2ZURlc2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIoKV07
CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6YmFja2luZ09iamVjdC0+
aXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyKCldOwogCiAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYRGV0YWlsc0VsZW1lbnRzIl0pIHsKICAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGRldGFp
bHM7Ci0gICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhRGV0YWlsc0VsZW1lbnRzKGRl
dGFpbHMpOworICAgICAgICBiYWNraW5nT2JqZWN0LT5hcmlhRGV0YWlsc0VsZW1lbnRzKGRldGFp
bHMpOwogICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShkZXRhaWxzKTsKICAgICB9CiAK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJl
bGF0aXZlRnJhbWVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRo
UmVjdDpOU1JlY3RGcm9tQ0dSZWN0KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yZWxhdGl2ZUZyYW1l
KCkpXTsKKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6TlNSZWN0RnJvbUNH
UmVjdChiYWNraW5nT2JqZWN0LT5yZWxhdGl2ZUZyYW1lKCkpXTsKIAogICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEVycm9yTWVzc2FnZUVsZW1lbnRzIl0pIHsKICAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGVy
cm9yTWVzc2FnZXM7Ci0gICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhRXJyb3JNZXNz
YWdlRWxlbWVudHMoZXJyb3JNZXNzYWdlcyk7CisgICAgICAgIGJhY2tpbmdPYmplY3QtPmFyaWFF
cnJvck1lc3NhZ2VFbGVtZW50cyhlcnJvck1lc3NhZ2VzKTsKICAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb05TQXJyYXkoZXJyb3JNZXNzYWdlcyk7CiAgICAgfQogCiAgICAgLy8gTXVsdGktc2VsZWN0
YWJsZQogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5SXNNdWx0aVNlbGVjdGFibGVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVy
IG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc011bHRpU2VsZWN0YWJsZSgp
XTsKLSAgICAKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpiYWNraW5n
T2JqZWN0LT5pc011bHRpU2VsZWN0YWJsZSgpXTsKKwogICAgIC8vIERvY3VtZW50IGF0dHJpYnV0
ZXMKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eURvY3VtZW50VVJJQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5kb2N1bWVudFVSSSgpOwotICAgIAorICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+
ZG9jdW1lbnRVUkkoKTsKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5RG9jdW1lbnRFbmNvZGluZ0F0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVy
biBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnRFbmNvZGluZygpOwotICAgIAorICAgICAg
ICByZXR1cm4gYmFja2luZ09iamVjdC0+ZG9jdW1lbnRFbmNvZGluZygpOworCiAgICAgLy8gQXJp
YSBjb250cm9scyBlbGVtZW50CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlBcmlhQ29udHJvbHNBdHRyaWJ1dGVdKSB7CiAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhcmlhQ29udHJvbHM7
Ci0gICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhQ29udHJvbHNFbGVtZW50cyhhcmlh
Q29udHJvbHMpOworICAgICAgICBiYWNraW5nT2JqZWN0LT5hcmlhQ29udHJvbHNFbGVtZW50cyhh
cmlhQ29udHJvbHMpOwogICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShhcmlhQ29udHJv
bHMpOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5Rm9jdXNhYmxlQW5jZXN0b3JBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFYQ29y
ZU9iamVjdCogb2JqZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmZvY3VzYWJsZUFuY2VzdG9y
KCk7CisgICAgICAgIEFYQ29yZU9iamVjdCogb2JqZWN0ID0gYmFja2luZ09iamVjdC0+Zm9jdXNh
YmxlQW5jZXN0b3IoKTsKICAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+d3JhcHBlcigp
IDogbmlsOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5RWRpdGFibGVBbmNlc3RvckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQVhD
b3JlT2JqZWN0KiBvYmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZWRpdGFibGVBbmNlc3Rv
cigpOworICAgICAgICBBWENvcmVPYmplY3QqIG9iamVjdCA9IGJhY2tpbmdPYmplY3QtPmVkaXRh
YmxlQW5jZXN0b3IoKTsKICAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+d3JhcHBlcigp
IDogbmlsOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5SGlnaGVzdEVkaXRhYmxlQW5jZXN0b3JBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgIEFYQ29yZU9iamVjdCogb2JqZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmhpZ2hlc3RF
ZGl0YWJsZUFuY2VzdG9yKCk7CisgICAgICAgIEFYQ29yZU9iamVjdCogb2JqZWN0ID0gYmFja2lu
Z09iamVjdC0+aGlnaGVzdEVkaXRhYmxlQW5jZXN0b3IoKTsKICAgICAgICAgcmV0dXJuIG9iamVj
dCA/IG9iamVjdC0+d3JhcHBlcigpIDogbmlsOwogICAgIH0KIApAQCAtMzMxNywxMCArMzI5Miwx
MiBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIHsKICAgICBpZiAoIVtz
ZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
Ci0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKKyAgICAvLyBG
SVhNRTogbWFrZSB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmUgYWJvdmUgcmV0dXJuIHRoZSBiYWNr
aW5nIG9iamVjdC4KKyAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gc2VsZi5heEJhY2tpbmdPYmpl
Y3Q7CisKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpCiAgICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgCisKICAgICBzdGF0aWMgTlNBcnJheSogcGFyYW1BdHRycyA9IG5pbDsK
ICAgICBzdGF0aWMgTlNBcnJheSogdGV4dFBhcmFtQXR0cnMgPSBuaWw7CiAgICAgc3RhdGljIE5T
QXJyYXkqIHRhYmxlUGFyYW1BdHRycyA9IG5pbDsKQEAgLTMzNjcsNyArMzM0NCw3IEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgTlNBY2Nlc3NpYmls
aXR5VGV4dE9wZXJhdGlvblBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUsCiAgICAgICAgICAgICBuaWxd
OwogICAgIH0KLSAgICAKKwogICAgIGlmICh0ZXh0UGFyYW1BdHRycyA9PSBuaWwpIHsKICAgICAg
ICAgTlNNdXRhYmxlQXJyYXkqIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQXJyYXk6cGFyYW1BdHRyc107CiAgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihO
U1N0cmluZyopa0FYTGluZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07CkBAIC0zMzk2
LDIyICszMzczLDIyIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAg
ICAgICB3ZWJBcmVhUGFyYW1BdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0
ZW1wQXJyYXldOwogICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwogICAgIH0KLSAgICAKLSAg
ICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQorCisgICAgaWYg
KGJhY2tpbmdPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gQFsgTlNB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50c0ZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRy
aWJ1dGUgXTsKLSAgICAKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRy
b2woKSkKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RleHRDb250cm9sKCkpCiAgICAgICAg
IHJldHVybiB0ZXh0UGFyYW1BdHRyczsKLSAgICAKLSAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRh
YmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJs
ZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5
KCkpCisKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNUYWJsZSgpICYmIGJhY2tpbmdPYmplY3Qt
PmlzRXhwb3NhYmxlKCkpCiAgICAgICAgIHJldHVybiB0YWJsZVBhcmFtQXR0cnM7Ci0gICAgCi0g
ICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01lbnVSZWxhdGVkKCkpCisKKyAgICBpZiAo
YmFja2luZ09iamVjdC0+aXNNZW51UmVsYXRlZCgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAg
IAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNXZWJBcmVhKCkpCisKKyAgICBpZiAo
YmFja2luZ09iamVjdC0+aXNXZWJBcmVhKCkpCiAgICAgICAgIHJldHVybiB3ZWJBcmVhUGFyYW1B
dHRyczsKLSAgICAKKwogICAgIHJldHVybiBwYXJhbUF0dHJzOwogfQogCkBAIC0zNjExLDczICsz
NTg4LDcxIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogewogICAgIGlm
ICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKICAgICAgICAgcmV0dXJuOwotICAg
IAorICAgIC8vIEZJWE1FOiBtYWtlIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZSBhYm92ZSByZXR1
cm4gdGhlIGJhY2tpbmcgb2JqZWN0LgorICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBzZWxmLmF4
QmFja2luZ09iamVjdDsKKwogICAgIGlkIHRleHRNYXJrZXJSYW5nZSA9IG5pbDsKICAgICBOU051
bWJlciogICAgICAgICAgICAgICBudW1iZXIgPSBuaWw7CiAgICAgTlNTdHJpbmcqICAgICAgICAg
ICAgICAgc3RyaW5nID0gbmlsOwogICAgIE5TUmFuZ2UgICAgICAgICAgICAgICAgIHJhbmdlID0g
ezAsIDB9OwogICAgIE5TQXJyYXkqICAgICAgICAgICAgICAgIGFycmF5ID0gbmlsOwotICAgIAor
CiAgICAgLy8gZGVjb2RlIHRoZSBwYXJhbWV0ZXIKICAgICBpZiAoQVhPYmplY3RJc1RleHRNYXJr
ZXJSYW5nZSh2YWx1ZSkpCiAgICAgICAgIHRleHRNYXJrZXJSYW5nZSA9IHZhbHVlOwotICAgIAog
ICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBzZWxmXV0pCiAgICAg
ICAgIG51bWJlciA9IHZhbHVlOwotICAgIAogICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNs
YXNzOltOU1N0cmluZyBzZWxmXV0pCiAgICAgICAgIHN0cmluZyA9IHZhbHVlOwotICAgIAogICAg
IGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1ZhbHVlIHNlbGZdXSkKICAgICAgICAg
cmFuZ2UgPSBbdmFsdWUgcmFuZ2VWYWx1ZV07Ci0gICAgCiAgICAgZWxzZSBpZiAoW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TQXJyYXkgc2VsZl1dKQogICAgICAgICBhcnJheSA9IHZhbHVlOwotICAg
IAorCiAgICAgLy8gaGFuZGxlIHRoZSBjb21tYW5kCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzogQCJBWFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlIl0pIHsKICAgICAgICAg
QVNTRVJUKHRleHRNYXJrZXJSYW5nZSk7Ci0gICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5z
ZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKFtzZWxmIHZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV0pOworICAgICAgICBiYWNraW5nT2Jq
ZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKFtzZWxmIHZpc2libGVQb3NpdGlv
blJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV0pOwogICAgIH0gZWxzZSBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2Vk
QXR0cmlidXRlXSkgewogICAgICAgICBbc2VsZiBiYXNlQWNjZXNzaWJpbGl0eVNldEZvY3VzOltu
dW1iZXIgYm9vbFZhbHVlXV07CiAgICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXSkgewotICAgICAgICBpZiAo
bnVtYmVyICYmIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jYW5TZXROdW1lcmljVmFsdWUoKSkKLSAg
ICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRWYWx1ZShbbnVtYmVyIGZsb2F0VmFs
dWVdKTsKKyAgICAgICAgaWYgKG51bWJlciAmJiBiYWNraW5nT2JqZWN0LT5jYW5TZXROdW1lcmlj
VmFsdWUoKSkKKyAgICAgICAgICAgIGJhY2tpbmdPYmplY3QtPnNldFZhbHVlKFtudW1iZXIgZmxv
YXRWYWx1ZV0pOwogICAgICAgICBlbHNlIGlmIChzdHJpbmcpCi0gICAgICAgICAgICBzZWxmLmF4
QmFja2luZ09iamVjdC0+c2V0VmFsdWUoc3RyaW5nKTsKKyAgICAgICAgICAgIGJhY2tpbmdPYmpl
Y3QtPnNldFZhbHVlKHN0cmluZyk7CiAgICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQXR0cmlidXRlXSkgewogICAgICAg
ICBpZiAoIW51bWJlcikKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc2VsZi5heEJhY2tp
bmdPYmplY3QtPnNldFNlbGVjdGVkKFtudW1iZXIgYm9vbFZhbHVlXSk7CisgICAgICAgIGJhY2tp
bmdPYmplY3QtPnNldFNlbGVjdGVkKFtudW1iZXIgYm9vbFZhbHVlXSk7CiAgICAgfSBlbHNlIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVk
Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7CiAgICAgICAgIGlmICghYXJyYXkpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCkgIT0g
QWNjZXNzaWJpbGl0eVJvbGU6Okxpc3RCb3gpCisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5y
b2xlVmFsdWUoKSAhPSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdEJveCkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW47CiAgICAgICAgIGNvbnZlcnRUb1ZlY3RvcihhcnJheSwg
c2VsZWN0ZWRDaGlsZHJlbik7Ci0gICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94
Pigqc2VsZi5heEJhY2tpbmdPYmplY3QpLnNldFNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGls
ZHJlbik7Ci0gICAgfSBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJv
bCgpKSB7CisgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94PigqYmFja2luZ09i
amVjdCkuc2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuKTsKKyAgICB9IGVsc2Ug
aWYgKGJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgewogICAgICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRy
aWJ1dGVdKSB7Ci0gICAgICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0U2VsZWN0ZWRU
ZXh0KHN0cmluZyk7CisgICAgICAgICAgICBiYWNraW5nT2JqZWN0LT5zZXRTZWxlY3RlZFRleHQo
c3RyaW5nKTsKICAgICAgICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0cmlidXRlXSkgewotICAgICAg
ICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNldFNlbGVjdGVkVGV4dFJhbmdlKFBsYWluVGV4
dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpKTsKKyAgICAgICAgICAgIGJhY2tp
bmdPYmplY3QtPnNldFNlbGVjdGVkVGV4dFJhbmdlKFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0
aW9uLCByYW5nZS5sZW5ndGgpKTsKICAgICAgICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJp
YnV0ZV0pIHsKLSAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYWtlUmFuZ2VWaXNp
YmxlKFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpKTsKKyAgICAg
ICAgICAgIGJhY2tpbmdPYmplY3QtPm1ha2VSYW5nZVZpc2libGUoUGxhaW5UZXh0UmFuZ2UocmFu
Z2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc2luZ0F0
dHJpYnV0ZV0gfHwgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eUV4cGFuZGVkQXR0cmlidXRlXSkKLSAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNldElz
RXhwYW5kZWQoW251bWJlciBib29sVmFsdWVdKTsKKyAgICAgICAgYmFja2luZ09iamVjdC0+c2V0
SXNFeHBhbmRlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOwogICAgIGVsc2UgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVd
KSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBzZWxlY3RlZFJvd3M7CiAgICAgICAgIGNvbnZlcnRUb1ZlY3RvcihhcnJheSwgc2VsZWN0
ZWRSb3dzKTsKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWUoKSB8fCAo
aXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpICYmIGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5pc0V4cG9zYWJsZVRo
cm91Z2hBY2Nlc3NpYmlsaXR5KCkpKQotICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnNldFNlbGVjdGVkUm93cyhzZWxlY3RlZFJvd3MpOworICAgICAgICBpZiAoYmFja2luZ09iamVj
dC0+aXNUcmVlKCkgfHwgKGJhY2tpbmdPYmplY3QtPmlzVGFibGUoKSAmJiBiYWNraW5nT2JqZWN0
LT5pc0V4cG9zYWJsZSgpKSkKKyAgICAgICAgICAgIGJhY2tpbmdPYmplY3QtPnNldFNlbGVjdGVk
Um93cyhzZWxlY3RlZFJvd3MpOwogICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGVdKQotICAgICAgICBzZWxm
LmF4QmFja2luZ09iamVjdC0+c2V0QVJJQUdyYWJiZWQoW251bWJlciBib29sVmFsdWVdKTsKLSAg
ICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNXZWJBcmVhKCkgJiYgW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVByZXZlbnRLZXlib2FyZERPTUV2
ZW50RGlzcGF0Y2hBdHRyaWJ1dGVdKQotICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0
UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaChbbnVtYmVyIGJvb2xWYWx1ZV0pOwotICAg
IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSAmJiBbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2FyZXRCcm93c2luZ0VuYWJsZWRB
dHRyaWJ1dGVdKQotICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0Q2FyZXRCcm93c2lu
Z0VuYWJsZWQoW251bWJlciBib29sVmFsdWVdKTsKKyAgICAgICAgYmFja2luZ09iamVjdC0+c2V0
QVJJQUdyYWJiZWQoW251bWJlciBib29sVmFsdWVdKTsKKyAgICBlbHNlIGlmIChiYWNraW5nT2Jq
ZWN0LT5pc1dlYkFyZWEoKSAmJiBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaEF0dHJpYnV0ZV0pCisgICAg
ICAgIGJhY2tpbmdPYmplY3QtPnNldFByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2goW251
bWJlciBib29sVmFsdWVdKTsKKyAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEo
KSAmJiBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2FyZXRC
cm93c2luZ0VuYWJsZWRBdHRyaWJ1dGVdKQorICAgICAgICBiYWNraW5nT2JqZWN0LT5zZXRDYXJl
dEJyb3dzaW5nRW5hYmxlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOwogfQogCiAvLyBVc2VkIHRvIHNl
dCBhdHRyaWJ1dGVzIHN5bmNocm9ub3VzbHkgb24gYWNjZXNzaWJpbGl0eSBlbGVtZW50cyB3aXRo
aW4gdGVzdHMuCkBAIC0zODU1LDYgKzM4MzAsMTUgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfQkVHSU4KIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJp
bmcqKWF0dHJpYnV0ZSBmb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcgogQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECiB7CisgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNr
aW5nU3RvcmVdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIC8vIEZJWE1FOiBtYWtlIHVwZGF0
ZU9iamVjdEJhY2tpbmdTdG9yZSBhYm92ZSByZXR1cm4gdGhlIGJhY2tpbmcgb2JqZWN0LgorICAg
IGF1dG8qIGJhY2tpbmdPYmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdDsKKworICAgIC8vIEJh
c2ljIHBhcmFtZXRlciB2YWxpZGF0aW9uLgorICAgIGlmICghYXR0cmlidXRlIHx8ICFwYXJhbWV0
ZXIpCisgICAgICAgIHJldHVybiBuaWw7CisKICAgICBpZCB0ZXh0TWFya2VyID0gbmlsOwogICAg
IGlkIHRleHRNYXJrZXJSYW5nZSA9IG5pbDsKICAgICBOU051bWJlciogbnVtYmVyID0gbmlsOwpA
QCAtMzg2NiwzOSArMzg1MCwyNSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19F
TkQKICAgICBOU1JhbmdlIHJhbmdlID0gezAsIDB9OwogICAgIGJvb2wgcmFuZ2VTZXQgPSBmYWxz
ZTsKICAgICBOU1JlY3QgcmVjdCA9IE5TWmVyb1JlY3Q7Ci0gICAgCi0gICAgLy8gYmFzaWMgcGFy
YW1ldGVyIHZhbGlkYXRpb24KLSAgICBpZiAoIXNlbGYuYXhCYWNraW5nT2JqZWN0IHx8ICFhdHRy
aWJ1dGUgfHwgIXBhcmFtZXRlcikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBpZiAo
IVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgCisKICAgICAvLyBjb21tb24gcGFyYW1ldGVyIHR5cGUgY2hlY2svY2FzdGluZy4gIE5pbCBj
aGVja3MgaW4gaGFuZGxlcnMgY2F0Y2ggd3JvbmcgdHlwZSBjYXNlLgogICAgIC8vIE5PVEU6IFRo
aXMgYXNzdW1lcyBuaWwgaXMgbm90IGEgdmFsaWQgcGFyYW1ldGVyLCBiZWNhdXNlIGl0IGlzIGlu
ZGlzdGluZ3Vpc2hhYmxlIGZyb20KICAgICAvLyBhIHBhcmFtZXRlciBvZiB0aGUgd3JvbmcgdHlw
ZS4KICAgICBpZiAoQVhPYmplY3RJc1RleHRNYXJrZXIocGFyYW1ldGVyKSkKICAgICAgICAgdGV4
dE1hcmtlciA9IHBhcmFtZXRlcjsKLSAgICAKICAgICBlbHNlIGlmIChBWE9iamVjdElzVGV4dE1h
cmtlclJhbmdlKHBhcmFtZXRlcikpCiAgICAgICAgIHRleHRNYXJrZXJSYW5nZSA9IHBhcmFtZXRl
cjsKLSAgICAKICAgICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIHNlbGZdXSkKICAgICAgICAgdWlFbGVtZW50ID0gWyhXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopcGFyYW1ldGVyIGF4QmFja2luZ09iamVjdF07Ci0K
ICAgICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIHNlbGZdXSkK
ICAgICAgICAgbnVtYmVyID0gcGFyYW1ldGVyOwotICAgIAogICAgIGVsc2UgaWYgKFtwYXJhbWV0
ZXIgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBzZWxmXV0pCiAgICAgICAgIGFycmF5ID0gcGFyYW1l
dGVyOwotICAgIAogICAgIGVsc2UgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbTlNEaWN0
aW9uYXJ5IHNlbGZdXSkKICAgICAgICAgZGljdGlvbmFyeSA9IHBhcmFtZXRlcjsKLSAgICAKICAg
ICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgc2VsZl1dICYmICFz
dHJjbXAoWyhOU1ZhbHVlKilwYXJhbWV0ZXIgb2JqQ1R5cGVdLCBAZW5jb2RlKE5TUG9pbnQpKSkg
ewogICAgICAgICBwb2ludFNldCA9IHRydWU7CiAgICAgICAgIHBvaW50ID0gWyhOU1ZhbHVlKilw
YXJhbWV0ZXIgcG9pbnRWYWx1ZV07Ci0gICAgICAgIAogICAgIH0gZWxzZSBpZiAoW3BhcmFtZXRl
ciBpc0tpbmRPZkNsYXNzOltOU1ZhbHVlIHNlbGZdXSAmJiAhc3RyY21wKFsoTlNWYWx1ZSopcGFy
YW1ldGVyIG9iakNUeXBlXSwgQGVuY29kZShOU1JhbmdlKSkpIHsKICAgICAgICAgcmFuZ2VTZXQg
PSB0cnVlOwogICAgICAgICByYW5nZSA9IFsoTlNWYWx1ZSopcGFyYW1ldGVyIHJhbmdlVmFsdWVd
OwpAQCAtMzkwOCwxNSArMzg3OCwxOSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9O
U19FTkQKICAgICAgICAgLy8gQXR0cmlidXRlIHR5cGUgaXMgbm90IHN1cHBvcnRlZC4gQWxsb3cg
c3VwZXIgdG8gaGFuZGxlLgogICAgICAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTphdHRyaWJ1dGUgZm9yUGFyYW1ldGVyOnBhcmFtZXRlcl07CiAgICAgfQotICAg
IAorCiAgICAgLy8gZGlzcGF0Y2gKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5U2VsZWN0VGV4dFdpdGhDcml0ZXJpYVBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVdKSB7CiAgICAgICAgIC8vIFRvIGJlIGRlcHJlY2F0ZWQuCi0gICAgICAgIGF1dG8gcmVzdWx0
ID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFZlY3RvcjxTdHJp
bmc+PihbZGljdGlvbmFyeSwgc2VsZl0gKCkgLT4gVmVjdG9yPFN0cmluZz4geworICAgICAgICBh
dXRvIHJlc3VsdCA9IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxW
ZWN0b3I8U3RyaW5nPj4oW2RpY3Rpb25hcnksIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBWZWN0b3I8U3RyaW5nPiB7
CisgICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5h
eEJhY2tpbmdPYmplY3Q7CisgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisKICAgICAgICAgICAgIGF1dG8gY3Jp
dGVyaWEgPSBhY2Nlc3NpYmlsaXR5VGV4dENyaXRlcmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0
ZShkaWN0aW9uYXJ5KTsKLSAgICAgICAgICAgIGNyaXRlcmlhLnNlY29uZC50ZXh0UmFuZ2VzID0g
c2VsZi5heEJhY2tpbmdPYmplY3QtPmZpbmRUZXh0UmFuZ2VzKGNyaXRlcmlhLmZpcnN0KTsKKyAg
ICAgICAgICAgIGNyaXRlcmlhLnNlY29uZC50ZXh0UmFuZ2VzID0gYmFja2luZ09iamVjdC0+Zmlu
ZFRleHRSYW5nZXMoY3JpdGVyaWEuZmlyc3QpOwogICAgICAgICAgICAgQVNTRVJUKGNyaXRlcmlh
LnNlY29uZC50ZXh0UmFuZ2VzLnNpemUoKSA8PSAxKTsKLSAgICAgICAgICAgIHJldHVybiBzZWxm
LmF4QmFja2luZ09iamVjdC0+cGVyZm9ybVRleHRPcGVyYXRpb24oY3JpdGVyaWEuc2Vjb25kKTsK
KyAgICAgICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5wZXJmb3JtVGV4dE9wZXJhdGlvbihj
cml0ZXJpYS5zZWNvbmQpOwogICAgICAgICB9KTsKICAgICAgICAgQVNTRVJUKHJlc3VsdC5zaXpl
KCkgPD0gMSk7CiAgICAgICAgIGlmIChyZXN1bHQuc2l6ZSgpID4gMCkKQEAgLTM5MjYsMTMgKzM5
MDAsMTcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dFdpdGhD
cml0ZXJpYVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIGF1dG8gY3JpdGVyaWEg
PSBhY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0
ZShkaWN0aW9uYXJ5KTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFs
dWVGcm9tTWFpblRocmVhZDxOU0FycmF5ICo+KFsmY3JpdGVyaWEsIHNlbGZdICgpIC0+IE5TQXJy
YXkgKiB7Ci0gICAgICAgICAgICBhdXRvIHJhbmdlcyA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5m
aW5kVGV4dFJhbmdlcyhjcml0ZXJpYSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Ojpy
ZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8TlNBcnJheSAqPihbJmNyaXRlcmlhLCBwcm90ZWN0
ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0g
KCkgLT4gTlNBcnJheSAqIHsKKyAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90
ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKKyAgICAgICAgICAgIGlmICghYmFja2lu
Z09iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICAgICBhdXRv
IHJhbmdlcyA9IGJhY2tpbmdPYmplY3QtPmZpbmRUZXh0UmFuZ2VzKGNyaXRlcmlhKTsKICAgICAg
ICAgICAgIGlmIChyYW5nZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgICAgICAgICBOU011dGFibGVBcnJheSAqbWFya2VycyA9IFtOU011dGFibGVBcnJheSBh
cnJheVdpdGhDYXBhY2l0eTpyYW5nZXMuc2l6ZSgpXTsKICAgICAgICAgICAgIGZvciAoYXV0byBy
YW5nZSA6IHJhbmdlcykgewotICAgICAgICAgICAgICAgIGlmIChpZCBtYXJrZXIgPSBbc2VsZiB0
ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6cmFuZ2VdKQorICAgICAgICAgICAgICAgIGlmIChpZCBt
YXJrZXIgPSBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6cmFuZ2VdKQog
ICAgICAgICAgICAgICAgICAgICBbbWFya2VycyBhZGRPYmplY3Q6bWFya2VyXTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiBtYXJrZXJzOwpAQCAtMzk0MCw5ICszOTE4LDEzIEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIH0KIAogICAgIGlmIChb
YXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgYXV0byBvcGVyYXRpb25SZXN1bHQgPSBB
Y2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8VmVjdG9yPFN0cmluZz4+
KFtkaWN0aW9uYXJ5LCBzZWxmXSAoKSAtPiBWZWN0b3I8U3RyaW5nPiB7Ci0gICAgICAgICAgICBh
dXRvIHRleHRPcGVyYXRpb24gPSBhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGUoc2VsZiwgZGljdGlvbmFyeSk7Ci0gICAgICAgICAgICByZXR1cm4gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnBlcmZvcm1UZXh0T3BlcmF0aW9uKHRleHRPcGVyYXRpb24pOwor
ICAgICAgICBhdXRvIG9wZXJhdGlvblJlc3VsdCA9IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFs
dWVGcm9tTWFpblRocmVhZDxWZWN0b3I8U3RyaW5nPj4oW2RpY3Rpb25hcnksIHByb3RlY3RlZFNl
bGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAt
PiBWZWN0b3I8U3RyaW5nPiB7CisgICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJv
dGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CisgICAgICAgICAgICBpZiAoIWJhY2tp
bmdPYmplY3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisKKyAg
ICAgICAgICAgIGF1dG8gdGV4dE9wZXJhdGlvbiA9IGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9u
Rm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShwcm90ZWN0ZWRTZWxmLmdldCgpLCBkaWN0aW9uYXJ5
KTsKKyAgICAgICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5wZXJmb3JtVGV4dE9wZXJhdGlv
bih0ZXh0T3BlcmF0aW9uKTsKICAgICAgICAgfSk7CiAgICAgICAgIGlmIChvcGVyYXRpb25SZXN1
bHQuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTM5NTUsMTQgKzM5Mzcs
MTQgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVVJRWxlbWVudENvdW50Rm9yU2Vh
cmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgQWNjZXNzaWJp
bGl0eVNlYXJjaENyaXRlcmlhIGNyaXRlcmlhID0gYWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlh
Rm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShkaWN0aW9uYXJ5KTsKICAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJl
c3VsdHM7Ci0gICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5maW5kTWF0Y2hpbmdPYmplY3Rz
KCZjcml0ZXJpYSwgcmVzdWx0cyk7CisgICAgICAgIGJhY2tpbmdPYmplY3QtPmZpbmRNYXRjaGlu
Z09iamVjdHMoJmNyaXRlcmlhLCByZXN1bHRzKTsKICAgICAgICAgcmV0dXJuIEAocmVzdWx0cy5z
aXplKCkpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRzRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhIGNyaXRl
cmlhID0gYWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1l
dGVyaXplZEF0dHJpYnV0ZShkaWN0aW9uYXJ5KTsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJlc3VsdHM7Ci0gICAgICAgIHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5maW5kTWF0Y2hpbmdPYmplY3RzKCZjcml0ZXJpYSwgcmVzdWx0cyk7Cisg
ICAgICAgIGJhY2tpbmdPYmplY3QtPmZpbmRNYXRjaGluZ09iamVjdHMoJmNyaXRlcmlhLCByZXN1
bHRzKTsKICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocmVzdWx0cyk7CiAgICAgfQog
CkBAIC0zOTkyLDEzICszOTc0LDEzIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05T
X0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eUxpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0p
IHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbiA9IFtzZWxmIHZpc2li
bGVQb3NpdGlvbkZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07Ci0gICAgICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmxp
bmVSYW5nZUZvclBvc2l0aW9uKHZpc2libGVQb3NpdGlvbik7CisgICAgICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlID0gYmFja2luZ09iamVjdC0+bGluZVJhbmdl
Rm9yUG9zaXRpb24odmlzaWJsZVBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRN
YXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZpc2libGVQb3NpdGlvblJhbmdlLnN0YXJ0
IGVuZFBvc2l0aW9uOnZpc2libGVQb3NpdGlvblJhbmdlLmVuZF07CiAgICAgfQogCiAgICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1pc3NwZWxsaW5nVGV4
dE1hcmtlclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgYXV0byBjcml0
ZXJpYSA9IGFjY2Vzc2liaWxpdHlNaXNzcGVsbGluZ1NlYXJjaENyaXRlcmlhRm9yUGFyYW1ldGVy
aXplZEF0dHJpYnV0ZShzZWxmLCBkaWN0aW9uYXJ5KTsKLSAgICAgICAgaWYgKGF1dG8gbWlzc3Bl
bGxpbmdSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5nZXRNaXNzcGVsbGluZ1JhbmdlKGNy
aXRlcmlhLmZpcnN0LCBjcml0ZXJpYS5zZWNvbmQpKQorICAgICAgICBpZiAoYXV0byBtaXNzcGVs
bGluZ1JhbmdlID0gYmFja2luZ09iamVjdC0+Z2V0TWlzc3BlbGxpbmdSYW5nZShjcml0ZXJpYS5m
aXJzdCwgY3JpdGVyaWEuc2Vjb25kKSkKICAgICAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFy
a2VyUmFuZ2VGcm9tUmFuZ2U6bWlzc3BlbGxpbmdSYW5nZV07CiAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgfQpAQCAtNDAxMyw3ICszOTk1LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfRU5ECiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAg
IHJldHVybiBbc2VsZiBfdGV4dE1hcmtlckZvckluZGV4OltudW1iZXIgaW50ZWdlclZhbHVlXV07
CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhV
SUVsZW1lbnRGb3JUZXh0TWFya2VyIl0pIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
YXhPYmplY3QgPSBbc2VsZiBhY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFy
a2VyXTsKICAgICAgICAgaWYgKCFheE9iamVjdCkKQEAgLTQwMzIsMTkgKzQwMTQsMTkgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6QCJBWExpbmVGb3JUZXh0TWFya2VyIl0pIHsKICAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2Vy
Oih0ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2ln
bmVkSW50OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5saW5lRm9yUG9zaXRpb24odmlzaWJsZVBvcyld
OworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDpiYWNraW5n
T2JqZWN0LT5saW5lRm9yUG9zaXRpb24odmlzaWJsZVBvcyldOwogICAgIH0KLSAgICAKKwogICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4dE1hcmtlclJhbmdlRm9yTGlu
ZSJdKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2U7CiAgICAgICAgIGlm
IChbbnVtYmVyIHVuc2lnbmVkSW50ZWdlclZhbHVlXSAhPSBOU05vdEZvdW5kKQotICAgICAgICAg
ICAgdnBSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZv
ckxpbmUoW251bWJlciB1bnNpZ25lZEludFZhbHVlXSk7CisgICAgICAgICAgICB2cFJhbmdlID0g
YmFja2luZ09iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKFtudW1iZXIgdW5zaWdu
ZWRJbnRWYWx1ZV0pOwogICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZp
c2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CiAg
ICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdHJp
bmdGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
W3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKLSAgICAgICAg
cmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdHJpbmdGb3JSYW5nZShyYW5nZSk7CisgICAg
ICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5zdHJpbmdGb3JSYW5nZShyYW5nZSk7CiAgICAgfQog
CiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhUZXh0TWFya2VyRm9yUG9z
aXRpb24iXSkgewpAQCAtNDA2NCw3ICs0MDQ2LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEJv
dW5kc0ZvclRleHRNYXJrZXJSYW5nZSJdKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwotICAgICAg
ICBhdXRvIGJvdW5kcyA9IEZsb2F0UmVjdChzZWxmLmF4QmFja2luZ09iamVjdC0+Ym91bmRzRm9y
UmFuZ2UocmFuZ2UpKTsKKyAgICAgICAgYXV0byBib3VuZHMgPSBGbG9hdFJlY3QoYmFja2luZ09i
amVjdC0+Ym91bmRzRm9yUmFuZ2UocmFuZ2UpKTsKICAgICAgICAgTlNSZWN0IHJlY3QgPSBbc2Vs
ZiBjb252ZXJ0UmVjdFRvU3BhY2U6Ym91bmRzIHNwYWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9u
U3BhY2U6OlNjcmVlbl07CiAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJl
Y3RdOwogICAgIH0KQEAgLTQwOTIsOSArNDA3NCw5IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVN
RU5UQVRJT05TX0VORAogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlTdHJpbmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7
Ci0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7Cisg
ICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKICAgICAgICAgICAg
IFBsYWluVGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlID0gUGxhaW5UZXh0UmFuZ2UocmFuZ2UubG9j
YXRpb24sIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmRvQVhTdHJpbmdGb3JSYW5nZShwbGFpblRleHRSYW5nZSk7CisgICAgICAgICAgICBy
ZXR1cm4gYmFja2luZ09iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHBsYWluVGV4dFJhbmdlKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVl
RnJvbU1haW5UaHJlYWQ8TlNTdHJpbmcgKj4oWyZyYW5nZSwgcHJvdGVjdGVkU2VsZiA9IFJldGFp
blB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IE5TU3RyaW5n
ICogewpAQCAtNDE1Nyw3ICs0MTM5LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBj
aGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwogICAgICAgICByZXR1cm4g
W3NlbGYgbmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0XTsK
ICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFBy
ZXZpb3VzVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewogICAgICAgICBDaGFyYWN0ZXJPZmZz
ZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0
ZXh0TWFya2VyXTsKICAgICAgICAgcmV0dXJuIFtzZWxmIHByZXZpb3VzVGV4dE1hcmtlckZvckNo
YXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOwpAQCAtNDE4OSwxMyArNDE3MSwxMyBAQCBB
TExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYTGVmdExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2Vy
Il0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIHZwUmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+bGVmdExpbmVWaXNpYmxl
UG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
dnBSYW5nZSA9IGJhY2tpbmdPYmplY3QtPmxlZnRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2Uodmlz
aWJsZVBvcyk7CiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJs
ZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9
Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFJpZ2h0TGlu
ZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewogICAgICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRN
YXJrZXIpXTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5yaWdodExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zKTsK
KyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IGJhY2tpbmdPYmplY3QtPnJp
Z2h0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3MpOwogICAgICAgICByZXR1cm4g
W3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBl
bmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CiAgICAgfQogCkBAIC00MjQ5LDIwICs0MjMxLDIwIEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0TGluZUVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
Il0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVybiBbc2Vs
ZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5uZXh0
TGluZUVuZFBvc2l0aW9uKHZpc2libGVQb3MpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRN
YXJrZXJGb3JWaXNpYmxlUG9zaXRpb246YmFja2luZ09iamVjdC0+bmV4dExpbmVFbmRQb3NpdGlv
bih2aXNpYmxlUG9zKV07CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhQcmV2aW91c0xpbmVTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0p
IHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9z
aXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVybiBbc2VsZiB0
ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5wcmV2aW91
c0xpbmVTdGFydFBvc2l0aW9uKHZpc2libGVQb3MpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRl
eHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246YmFja2luZ09iamVjdC0+cHJldmlvdXNMaW5lU3Rh
cnRQb3NpdGlvbih2aXNpYmxlUG9zKV07CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0U2VudGVuY2VFbmRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlciJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxl
YXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFt0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0g
UmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gUmV0
YWluUHRyPGlkPiB7CiAgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0
KCkuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNh
Y2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICAKKwogICAgICAg
ICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IFtwcm90ZWN0ZWRTZWxmIGNo
YXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CiAgICAgICAgICAgICBDaGFy
YWN0ZXJPZmZzZXQgbmV4dEVuZCA9IGNhY2hlLT5uZXh0U2VudGVuY2VFbmRDaGFyYWN0ZXJPZmZz
ZXQoY2hhcmFjdGVyT2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0
ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0Om5leHRFbmRdOwpAQCAtNDMwNywxMCArNDI4OSwx
MCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3R5bGVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFy
a2VyIl0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNp
YmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIFZpc2libGVQ
b3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+c3R5bGVSYW5nZUZv
clBvc2l0aW9uKHZpc2libGVQb3MpOworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJh
bmdlID0gYmFja2luZ09iamVjdC0+c3R5bGVSYW5nZUZvclBvc2l0aW9uKHZpc2libGVQb3MpOwog
ICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6
dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CiAgICAgfQotICAgIAorCiAg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMZW5ndGhGb3JUZXh0TWFya2Vy
UmFuZ2UiXSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3NlbGYgcmFuZ2VGb3JU
ZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKICAgICAgICAgaW50IGxlbmd0aCA9IEFY
T2JqZWN0Q2FjaGU6Omxlbmd0aEZvclJhbmdlKHJhbmdlLmdldCgpKTsKQEAgLTQzMTgsMTMgKzQz
MDAsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAg
ICByZXR1cm4gbmlsOwogICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bGVu
Z3RoXTsKICAgICB9Ci0gICAgCisKICAgICAvLyBVc2VkIG9ubHkgYnkgRHVtcFJlbmRlclRyZWUg
KHNvIGZhcikuCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdGFydFRl
eHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKICAg
ICAgICAgcmV0dXJuIFtzZWxmIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6cmFuZ2UgaXNT
dGFydDpZRVNdOwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpAIkFYRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSJdKSB7CiAgICAgICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFy
a2VyUmFuZ2VdOwogICAgICAgICByZXR1cm4gW3NlbGYgc3RhcnRPckVuZFRleHRNYXJrZXJGb3JS
YW5nZTpyYW5nZSBpc1N0YXJ0Ok5PXTsKQEAgLTQzNDgsNzAgKzQzMzAsNjcgQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoaXM8
QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpICYmIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5pc0V4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KCkpIHsKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNUYWJsZSgpICYm
IGJhY2tpbmdPYmplY3QtPmlzRXhwb3NhYmxlKCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNlbGxGb3JDb2x1bW5BbmRSb3dQYXJhbWV0
ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICAgICAgaWYgKGFycmF5ID09IG5pbCB8fCBbYXJy
YXkgY291bnRdICE9IDIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAg
IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNlbGwgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFi
bGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkuY2VsbEZvckNvbHVtbkFuZFJvdyhbW2FycmF5IG9i
amVjdEF0SW5kZXg6MF0gdW5zaWduZWRJbnRWYWx1ZV0sIFtbYXJyYXkgb2JqZWN0QXRJbmRleDox
XSB1bnNpZ25lZEludFZhbHVlXSk7Ci0gICAgICAgICAgICBpZiAoIWNlbGwpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIGNlbGwt
PndyYXBwZXIoKTsKKyAgICAgICAgICAgIGF1dG8qIGNlbGwgPSBiYWNraW5nT2JqZWN0LT5jZWxs
Rm9yQ29sdW1uQW5kUm93KFtbYXJyYXkgb2JqZWN0QXRJbmRleDowXSB1bnNpZ25lZEludFZhbHVl
XSwgW1thcnJheSBvYmplY3RBdEluZGV4OjFdIHVuc2lnbmVkSW50VmFsdWVdKTsKKyAgICAgICAg
ICAgIHJldHVybiBjZWxsID8gY2VsbC0+d3JhcHBlcigpIDogbmlsOwogICAgICAgICB9CiAgICAg
fQotICAgIAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7
CisKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7CiAgICAgICAgIGlm
IChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nICopa0FYTGluZUZvckluZGV4
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIGludCBsaW5lTnVtYmVyID0g
c2VsZi5heEJhY2tpbmdPYmplY3QtPmRvQVhMaW5lRm9ySW5kZXgoW251bWJlciBpbnRWYWx1ZV0p
OworICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSBiYWNraW5nT2JqZWN0LT5kb0FYTGluZUZv
ckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKICAgICAgICAgICAgIGlmIChsaW5lTnVtYmVyIDwg
MCkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6bGluZU51bWJlcl07CiAgICAgICAgIH0KLSAgICAg
ICAgCisKICAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcg
KilrQVhSYW5nZUZvckxpbmVQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICAgICAg
UGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvQVhSYW5n
ZUZvckxpbmUoW251bWJlciBpbnRWYWx1ZV0pOworICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2Ug
dGV4dFJhbmdlID0gYmFja2luZ09iamVjdC0+ZG9BWFJhbmdlRm9yTGluZShbbnVtYmVyIGludFZh
bHVlXSk7CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFr
ZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCldOwogICAgICAgICB9Ci0g
ICAgICAgIAorCiAgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3Ry
aW5nKilrQVhTdHJpbmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAg
ICAgICBQbGFpblRleHRSYW5nZSBwbGFpblRleHRSYW5nZSA9IFBsYWluVGV4dFJhbmdlKHJhbmdl
LmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOwotICAgICAgICAgICAgcmV0dXJuIHJhbmdlU2V0ID8g
KGlkKShzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHBsYWluVGV4dFJh
bmdlKSkgOiBuaWw7CisgICAgICAgICAgICByZXR1cm4gcmFuZ2VTZXQgPyAoaWQpKGJhY2tpbmdP
YmplY3QtPmRvQVhTdHJpbmdGb3JSYW5nZShwbGFpblRleHRSYW5nZSkpIDogbmlsOwogICAgICAg
ICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzog
KE5TU3RyaW5nKilrQVhSYW5nZUZvclBvc2l0aW9uUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsK
ICAgICAgICAgICAgIGlmICghcG9pbnRTZXQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICAgICAgICAgIEludFBvaW50IHdlYkNvcmVQb2ludCA9IEludFBvaW50KHBvaW50KTsKLSAg
ICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5kb0FYUmFuZ2VGb3JQb3NpdGlvbih3ZWJDb3JlUG9pbnQpOworICAgICAgICAgICAgUGxhaW5U
ZXh0UmFuZ2UgdGV4dFJhbmdlID0gYmFja2luZ09iamVjdC0+ZG9BWFJhbmdlRm9yUG9zaXRpb24o
d2ViQ29yZVBvaW50KTsKICAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5n
ZTogTlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKV07CiAgICAg
ICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
OiAoTlNTdHJpbmcqKWtBWFJhbmdlRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewot
ICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmRvQVhSYW5nZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKKyAgICAgICAgICAgIFBs
YWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IGJhY2tpbmdPYmplY3QtPmRvQVhSYW5nZUZvckluZGV4
KFtudW1iZXIgaW50VmFsdWVdKTsKICAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdp
dGhSYW5nZTogTlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKV07
CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOiAoTlNTdHJpbmcqKWtBWEJvdW5kc0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0
ZV0pIHsKICAgICAgICAgICAgIGlmICghcmFuZ2VTZXQpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlID0gUGxhaW5U
ZXh0UmFuZ2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgICAgICBhdXRv
IGJvdW5kcyA9IEZsb2F0UmVjdChzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9BWEJvdW5kc0ZvclJh
bmdlVXNpbmdDaGFyYWN0ZXJPZmZzZXQocGxhaW5UZXh0UmFuZ2UpKTsKKyAgICAgICAgICAgIGF1
dG8gYm91bmRzID0gRmxvYXRSZWN0KGJhY2tpbmdPYmplY3QtPmRvQVhCb3VuZHNGb3JSYW5nZVVz
aW5nQ2hhcmFjdGVyT2Zmc2V0KHBsYWluVGV4dFJhbmdlKSk7CiAgICAgICAgICAgICBOU1JlY3Qg
cmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0VG9TcGFjZTpib3VuZHMgc3BhY2U6QWNjZXNzaWJpbGl0
eUNvbnZlcnNpb25TcGFjZTo6U2NyZWVuXTsKICAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2
YWx1ZVdpdGhSZWN0OnJlY3RdOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChb
YXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nKilrQVhSVEZGb3JSYW5nZVBhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGVdKQogICAgICAgICAgICAgcmV0dXJuIHJhbmdlU2V0ID8gW3NlbGYg
ZG9BWFJURkZvclJhbmdlOnJhbmdlXSA6IG5pbDsKLSAgICAgICAgCisKICAgICAgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcqKWtBWEF0dHJpYnV0ZWRTdHJpbmdG
b3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKQogICAgICAgICAgICAgcmV0dXJuIHJhbmdl
U2V0ID8gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTpyYW5nZV0gOiBuaWw7Ci0g
ICAgICAgIAorCiAgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3Ry
aW5nKilrQVhTdHlsZVJhbmdlRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAg
ICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmRvQVhTdHlsZVJhbmdlRm9ySW5kZXgoW251bWJlciBpbnRWYWx1ZV0pOworICAgICAgICAgICAg
UGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gYmFja2luZ09iamVjdC0+ZG9BWFN0eWxlUmFuZ2VG
b3JJbmRleChbbnVtYmVyIGludFZhbHVlXSk7CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUg
dmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxl
bmd0aCldOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLy8gVGhlcmUgYXJlIHNvbWUg
cGFyYW1ldGVycyB0aGF0IHN1cGVyIGhhbmRsZXMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgcmV0
dXJuZWQgYnkgdGhlIGxpc3Qgb2YgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzLgogICAgIC8vIElu
IHRoYXQgY2FzZSBpdCBtdXN0IGJlIHBhc3NlZCB0byBzdXBlci4KICAgICByZXR1cm4gW3N1cGVy
IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTphdHRyaWJ1dGUgZm9yUGFyYW1ldGVyOnBhcmFt
ZXRlcl07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391462</attachid>
            <date>2020-02-22 10:21:23 -0800</date>
            <delta_ts>2020-02-23 10:33:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208074-20200222132121.patch</filename>
            <type>text/plain</type>
            <size>157712</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2OTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWNhNDFkZWNhZDdhMzRm
MDEyMzIzYWQ4NGQzNzQyZDZkYTA0ODI1My4uMGZjNTc5NTg2NTUyM2NjNTM5MWY4MTk4ZmVmNjlj
ZDdhMjZiNWVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOCBAQAorMjAyMC0wMi0yMSAgQW5k
cmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CisKKyAgICAgICAgQVhJc29sYXRl
ZE9iamVjdCBzdXBwb3J0IGZvciB0YWJsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDgwNzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNvZGUgYW5kIHNvbWUgdXRpbGl0eSBmdW5jdGlv
bnMgaW4KKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYXNzdW1lIHRoYXQgQVggb2Jq
ZWN0cyBjYW4gYmUgZG93bmNhc3QgdG8gYQorICAgICAgICBzcGVjaWFsaXplZCBzdWJjbGFzcyBs
aWtlIEFjY2Vzc2liaWxpdHlUYWJsZS4gVGhhdCBpcyBub3QgdHJ1ZSBmb3IKKyAgICAgICAgQVhJ
c29sYXRlZE9iamVjdHMsIGFuZCB0aGUgcmVhc29uIHdoeSB0YWJsZXMgZG9u4oCZdCB3b3JrIGlu
IElzb2xhdGVkVHJlZQorICAgICAgICBtb2RlLgorCisgICAgICAgIFRvIHNvbHZlIHRoaXMgcHJv
YmxlbSwgdGhpcyBwYXRjaCBleHBvc2VzIHRoZSBBY2Nlc3NpYmlsaXR5VGFibGUKKyAgICAgICAg
aW50ZXJmYWNlIGFzIHBhcnQgb2YgdGhlIEFYQ29yZU9iamVjdC4gVGh1cyBpdCBlbGltaW5hdGVz
IHRoZSBuZWVkIHRvCisgICAgICAgIGRvd25jYXN0IGFuIEFYIG9iamVjdCB0byBhbiBBY2Nlc3Np
YmlsaXR5VGFibGUuIEl0IGFsc28gaW1wbGVtZW50cyB0aGUKKyAgICAgICAgQWNjZXNzaWJpbGl0
eVRhYmxlIGludGVyZmFjZSBpbiB0aGUgQVhJc29sYXRlZE9iamVjdCBjbGFzcy4gVGhlIHNhbWUK
KyAgICAgICAgYXBwcm9hY2ggd2lsbCBiZSB1c2VkIGluIHN1YnNlcXVlbnQgcGF0Y2hlcyBmb3Ig
b3RoZXIgc3BlY2lhbGl6ZWQKKyAgICAgICAgaW50ZXJmYWNlcyB1c2VkIGJ5IGNsaWVudCBjb2Rl
LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRDaGlsZHJlbik6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaDoKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cGFyZW50VGFibGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cm93SW5kZXhSYW5n
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpj
b2x1bW5JbmRleFJhbmdlIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZFJvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWRSb3c6OmRpc2Nsb3NlZFJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRCeVJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OnBhcmVudFRhYmxlIGNvbnN0KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNob3VsZFVzZUFjY2Vzc2liaWxpdHlPYmplY3RJbm5lclRleHQpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjph
cHBlbmRDaGlsZHJlblRvQXJyYXkpOiBVc2UgQVhDb3JlT2JqZWN0IGludGVyZmFjZSBpbnN0ZWFk
IG9mIGRvd25jYXN0aW5nLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eTo6aXNBY2Nl
c3NpYmlsaXR5T2JqZWN0U2VhcmNoTWF0Y2hBdEluZGV4KTogVXNlIEFYQ29yZU9iamVjdCBpbnRl
cmZhY2UgaW5zdGVhZCBvZiBkb3duY2FzdGluZy4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3RJbnRlcmZhY2UuaDogQVhDb3JlT2JqZWN0IG5vdyBleHBvc2VzIHRoZSB0YWJsZSBp
bnRlcmZhY2UuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFy
aWFTZWxlY3RlZFJvd3MpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6QWNjZXNzaWJp
bGl0eVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aW5pdCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRXhwb3NhYmxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6YWRkQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpoZWFkZXJDb250YWluZXIpOiBS
ZXR1cm5zIGFuIEFYQ29yZU9iamVjdC4KKworICAgICAgICBUaGUgZm9sbG93aW5nIG1ldGhvZHMg
bm93IHJldHVybiBhIHZlY3RvciBvZiBvYmplY3RzIGluc3RlYWQgb2YgdGFraW5nCisgICAgICAg
IGFuZCBvdXQgcGFyYW1ldGVyLiBSVk8gZ3VhcmFudGllcyB0aGF0IHRoaXMgZG9lcyBub3QgY2F1
c2UgZXh0cmEgY29weS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y29s
dW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnJvd3MpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpjb2x1bW5IZWFkZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6cm93SGVhZGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnZpc2libGVSb3dzKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbHMpOgorCisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5VGFibGU6OnRhYmxlTGV2ZWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVRhYmxlOjpyb2xlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVRhYmxlOjpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnRpdGxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aXNFeHBvc2FibGVUaHJvdWdoQWNjZXNz
aWJpbGl0eSBjb25zdCk6IFJlbmFtZWQgdG8ganVzdCBpc0V4cG9zYWJsZS4KKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVRhYmxlOjpzdXBwb3J0c1NlbGVjdGVkUm93cyk6IERlbGV0ZWQuCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnBhcmVudFRhYmxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmlzVGFibGVDZWxsIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmNvbHVtbkhlYWRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6cm93SGVhZGVycyk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmg6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjpoZWFkZXJPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjphZGRDaGlsZHJlbik6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVy
OjphZGRDaGlsZHJlbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGVSb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlUm93Ojppc1Rh
YmxlUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6
cGFyZW50VGFibGUgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGUuY3BwOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJs
ZS5jcHA6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5IZWFkZXIpOgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93SGVhZGVyKToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVDZWxsLmNwcDoK
KyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRDb2x1bW5IZWFkZXJDZWxscyk6
CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0Um93SGVhZGVyQ2VsbHMpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
SU9TLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZVBh
cmVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5SGVhZGVyRWxlbWVudHNdKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRP
YmplY3Q6OmluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNv
bGF0ZWRPYmplY3Q6OnNldE9iamVjdFZlY3RvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkFYSXNvbGF0ZWRPYmplY3Q6OmNlbGxGb3JDb2x1bW5BbmRSb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZE9iamVjdDo6ZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5VGFi
bGVJbnN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0Ojpp
c0RhdGFUYWJsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29s
YXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0
ZWRUcmVlOjpub2RlRm9ySUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRy
ZWU6Om9iamVjdHNGb3JJRHMgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQVhP
YmplY3RDYWNoZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RQ
bGF0Zm9ybU5vdGlmaWNhdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgIEluIGFkZGl0aW9uIHRvIHJl
cGxhY2luZyB0aGUgZG93bmNhc3QgdG8gQWNjZXNzaWJpbGl0eVRhYmxlLCBjbGVhbmVkIHVwCisg
ICAgICAgIHRoZSB1bm5lY2Vzc2FyeSBjYWxscyB0byBzZWxmLmF4QmFja2luZ09iamVjdC4gVGhp
cyB1c2VkIHRvIGJlIGEgbWFjcm8sCisgICAgICAgIGJ1dCBpdCBpcyBub3cgYSBtZXRob2QgdGhh
dCBjaGVjayBmb3IgdGhlIGV4ZWN1dGlvbiB0aHJlYWQgYW5kIHJldHVybnMKKyAgICAgICAgdGhl
IGFwcHJvcHJpYXRlIEFYIG9iamVjdC4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVNldFZhbHVlOmZvckF0dHJpYnV0ZTpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpdKToKKwogMjAyMC0wMi0xOSAgWmFsYW4gQnVq
dGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0Zsb2F0c10gRmxvYXRpbmdD
b250ZXh0Ojpjb25zdHJhaW50cyBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgZW1wdHkgY2FuZGlk
YXRlIHJhbmdlcyAocG9pbnRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCmluZGV4IDAwMGFkZDRjM2FhMjI4ZjJlM2Y2
MDUxODAxMDIwNTlmYWQxMTIzN2QuLjVhMmIzNGMyOWZmZjg3MzRiYjliMTdhNzdjZDU1NmIwYzcz
YTFmYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlBUklBR3JpZC5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIEFjY2Vzc2liaWxp
dHlBUklBR3JpZDo6YWRkQ2hpbGRyZW4oKQogewogICAgIEFTU0VSVCghbV9oYXZlQ2hpbGRyZW4p
OyAKICAgICAKLSAgICBpZiAoIWlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkgewor
ICAgIGlmICghaXNFeHBvc2FibGUoKSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphZGRDaGlsZHJlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ1LDggKzE0
NSw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRDaGlsZHJlbigpCiAgICAgICAg
IGlmICghY29sdW1uLmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKICAgICAgICAgICAgIG1fY2hp
bGRyZW4uYXBwZW5kKCZjb2x1bW4pOwogICAgIH0KLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBoZWFkZXJDb250YWluZXJPYmplY3QgPSBoZWFkZXJDb250YWluZXIoKTsKKworICAgIGF1
dG8qIGhlYWRlckNvbnRhaW5lck9iamVjdCA9IGhlYWRlckNvbnRhaW5lcigpOwogICAgIGlmICho
ZWFkZXJDb250YWluZXJPYmplY3QgJiYgIWhlYWRlckNvbnRhaW5lck9iamVjdC0+YWNjZXNzaWJp
bGl0eUlzSWdub3JlZCgpKQogICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChoZWFkZXJDb250YWlu
ZXJPYmplY3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkLmgKaW5kZXggZjcyYzkwNmFhMGNlMGY0Yjc4MTg1YWIxNWU1Zjkx
M2E5YmMzMzI0My4uMWIzNjVkNDQ2ODdmZDk3ZTJmOTNiZGFjZTI2ODYwOWJjOGRiNjBhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZC5oCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQWNjZXNzaWJp
bGl0eUFSSUFHcmlkKFJlbmRlck9iamVjdCopOwogCiAgICAgLy8gQVJJQSB0cmVlZ3JpZHMgYW5k
IGdyaWRzIHN1cHBvcnQgc2VsZWN0ZWQgcm93cy4KLSAgICBib29sIHN1cHBvcnRzU2VsZWN0ZWRS
b3dzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgc3VwcG9ydHNTZWxlY3Rl
ZFJvd3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBpc011bHRp
U2VsZWN0YWJsZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgY29tcHV0ZUlzVGFibGVFeHBv
c2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KICAgICBib29sIGlzQXJpYVRhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWRDZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkQ2VsbC5jcHAKaW5kZXggZjgxOWU5YWVlOTQ2YzVkMzU1MGY3M2IyNDllMTM5
Yzk5YjRhNDI3OC4uNmM0YWYxNTg5N2JjOTg3MGI0YzAxYzRhMTA2YWE3ZTE2MGQxNmFlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWRDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlBUklBR3JpZENlbGwuY3BwCkBAIC01Niw3ICs1Niw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZSog
QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cGFyZW50VGFibGUoKSBjb25zdAogICAgIC8vIGlu
Y2x1ZGluZyByb3dzIGFuZCBpbnRlcmFjdGl2ZSByb3dncm91cHMuIEluIGFkZGl0aW9uLCBwb29y
bHktZm9ybWVkIGdyaWRzIG1heSBjb250YWluIGVsZW1lbnRzCiAgICAgLy8gd2hpY2ggcGFzcyB0
aGUgdGVzdHMgZm9yIGluY2x1c2lvbi4KICAgICBmb3IgKGF1dG8qIHBhcmVudCA9IHBhcmVudE9i
amVjdFVuaWdub3JlZCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0VW5p
Z25vcmVkKCkpIHsKLSAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudCkg
JiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5pc0V4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpw
YXJlbnQpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudCkuaXNFeHBvc2Fi
bGUoKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KHBh
cmVudCk7CiAgICAgfQogCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFH
cmlkQ2VsbDo6cm93SW5kZXhSYW5nZShzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiYgcm93
CiAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKnBhcmVudCkpIHsKICAgICAgICAg
Ly8gV2UgYWxyZWFkeSBnb3QgYSB0YWJsZSByb3csIHVzZSBpdHMgQVBJLgogICAgICAgICByb3dS
YW5nZS5maXJzdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKnBhcmVudCkucm93
SW5kZXgoKTsKLSAgICB9IGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudCkg
JiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5pc0V4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KCkpIHsKKyAgICB9IGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJs
ZT4oKnBhcmVudCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5pc0V4
cG9zYWJsZSgpKSB7CiAgICAgICAgIC8vIFdlIHJlYWNoZWQgdGhlIHBhcmVudCB0YWJsZSwgc28g
d2UgbmVlZCB0byBpbnNwZWN0IGl0cwogICAgICAgICAvLyBjaGlsZHJlbiB0byBkZXRlcm1pbmUg
dGhlIHJvdyBpbmRleCBmb3IgdGhlIGNlbGwgaW4gaXQuCiAgICAgICAgIHVuc2lnbmVkIGNvbHVt
bkNvdW50ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5jb2x1bW5Db3Vu
dCgpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6
Y29sdW1uSW5kZXhSYW5nZShzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiYKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KCpwYXJlbnQpCi0g
ICAgICAgICYmICEoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KSAmJiBkb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxp
dHkoKSkpCisgICAgICAgICYmICEoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KSAmJiBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpLmlzRXhwb3NhYmxlKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHNp
YmxpbmdzID0gcGFyZW50LT5jaGlsZHJlbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCmluZGV4IDMyODM4
MDc2NTI5ZGQ0NWMxMGZjN2Q0YTdhYzA5YTBjN2Y1YTNkZmMuLmViYmUzMGY4M2M2YTU2ZDgwZjBj
ZTRlNjNmMjA1NzlkODlhMTBkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAKQEAgLTYwLDE3ICs2MCwx
NyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6ZGlzY2xvc2VkUm93cyhBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGRpc2NsbwogICAgIC8vIFRoZSBjb250aWd1b3VzIGRpc2Ns
b3NlZCByb3dzIHdpbGwgYmUgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIHRoYXQgCiAgICAgLy8gaGF2
ZSBhbiBhcmlhLWxldmVsIG9mIHBsdXMgMSBmcm9tIHRoaXMgcm93LgogICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdFVuaWdub3JlZCgpOwotICAgIGlmICghaXM8
QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KSB8fCAhZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlPigqcGFyZW50KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgaWYg
KCFpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpIHx8ICFkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGU+KCpwYXJlbnQpLmlzRXhwb3NhYmxlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAK
KwogICAgIC8vIFNlYXJjaCBmb3Igcm93cyB0aGF0IG1hdGNoIHRoZSBjb3JyZWN0IGxldmVsLiAK
ICAgICAvLyBPbmx5IHRha2UgdGhlIHN1YnNlcXVlbnQgcm93cyBmcm9tIHRoaXMgb25lIHRoYXQg
YXJlICsxIGZyb20gdGhpcyByb3cncyBsZXZlbC4KICAgICBpbnQgaW5kZXggPSByb3dJbmRleCgp
OwogICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIHVuc2ln
bmVkIGxldmVsID0gaGllcmFyY2hpY2FsTGV2ZWwoKTsKLSAgICBhdXRvJiBhbGxSb3dzID0gZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5yb3dzKCk7CisgICAgYXV0byBhbGxS
b3dzID0gcGFyZW50LT5yb3dzKCk7CiAgICAgaW50IHJvd0NvdW50ID0gYWxsUm93cy5zaXplKCk7
CiAgICAgZm9yIChpbnQgayA9IGluZGV4ICsgMTsgayA8IHJvd0NvdW50OyArK2spIHsKICAgICAg
ICAgYXV0byogcm93ID0gYWxsUm93c1trXS5nZXQoKTsKQEAgLTg3LDI3ICs4NywyNyBAQCBBWENv
cmVPYmplY3QqIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6ZGlzY2xvc2VkQnlSb3coKSBjb25z
dAogICAgIC8vIFRoZSByb3cgdGhhdCBkaXNjbG9zZXMgdGhpcyBvbmUgaXMgdGhlIHJvdyBpbiB0
aGUgdGFibGUKICAgICAvLyB0aGF0IGlzIGFyaWEtbGV2ZWwgc3VidHJhY3QgMSBmcm9tIHRoaXMg
cm93LgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdFVuaWdu
b3JlZCgpOwotICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KSB8fCAhZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nl
c3NpYmlsaXR5KCkpCisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpIHx8
ICFkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpLmlzRXhwb3NhYmxlKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorCiAgICAgLy8gSWYgdGhlIGxldmVsIGlzIDEg
b3IgbGVzcywgdGhhbiBub3RoaW5nIGRpc2Nsb3NlcyB0aGlzIHJvdy4KICAgICB1bnNpZ25lZCBs
ZXZlbCA9IGhpZXJhcmNoaWNhbExldmVsKCk7CiAgICAgaWYgKGxldmVsIDw9IDEpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIAorCiAgICAgLy8gU2VhcmNoIGZvciB0aGUgcHJldmlvdXMg
cm93IHRoYXQgbWF0Y2hlcyB0aGUgY29ycmVjdCBsZXZlbC4KICAgICBpbnQgaW5kZXggPSByb3dJ
bmRleCgpOwotICAgIGF1dG8mIGFsbFJvd3MgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+
KHBhcmVudCktPnJvd3MoKTsKKyAgICBhdXRvIGFsbFJvd3MgPSBwYXJlbnQtPnJvd3MoKTsKICAg
ICBpbnQgcm93Q291bnQgPSBhbGxSb3dzLnNpemUoKTsKICAgICBpZiAoaW5kZXggPj0gcm93Q291
bnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorCiAgICAgZm9yIChpbnQgayA9IGlu
ZGV4IC0gMTsgayA+PSAwOyAtLWspIHsKICAgICAgICAgYXV0byogcm93ID0gYWxsUm93c1trXS5n
ZXQoKTsKICAgICAgICAgaWYgKHJvdy0+aGllcmFyY2hpY2FsTGV2ZWwoKSA9PSBsZXZlbCAtIDEp
CiAgICAgICAgICAgICByZXR1cm4gcm93OwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBudWxs
cHRyOwogfQogICAgIApAQCAtMTI1LDcgKzEyNSw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZSogQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpwYXJlbnRUYWJsZSgpIGNvbnN0CiAgICAgICAgIC8vIFVu
bGVzcyB0aGUgcm93IGlzIGEgbmF0aXZlIHRyIGVsZW1lbnQuCiAgICAgICAgIGlmIChpczxBY2Nl
c3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5VGFi
bGUmIHRhYmxlUGFyZW50ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KTsK
LSAgICAgICAgICAgIGlmICh0YWJsZVBhcmVudC5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmls
aXR5KCkgJiYgKHRhYmxlUGFyZW50LmlzQXJpYVRhYmxlKCkgfHwgbm9kZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dHJUYWcpKSkKKyAgICAgICAgICAgIGlmICh0YWJsZVBhcmVudC5pc0V4cG9z
YWJsZSgpICYmICh0YWJsZVBhcmVudC5pc0FyaWFUYWJsZSgpIHx8IG5vZGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRyVGFnKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICZ0YWJsZVBhcmVu
dDsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKaW5kZXggMjA5ZWI4ZTY1OGUwYjcz
NDE4ZWMyY2QwMGNkODBhNDE2ZmEyOTMzYS4uN2VjZTA2MTdkNmZiZjg5MTQ5ZTI0YWYwZjgwZWNk
ZWU2MjIwMGE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKQEAgLTE3MzksNyArMTczOSw3IEBAIHN0YXRp
YyBib29sIHNob3VsZFVzZUFjY2Vzc2liaWxpdHlPYmplY3RJbm5lclRleHQoQWNjZXNzaWJpbGl0
eU9iamVjdCogb2JqLCBBY2NlCiAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlMaXN0Pigqb2JqKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4o
Km9iaikgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqKS5pc0V4cG9zYWJsZVRo
cm91Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9i
aikgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqKS5pc0V4cG9zYWJsZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAob2JqLT5pc1RyZWUoKSB8fCBvYmotPmlz
Q2FudmFzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAppbmRleCA4MzE0NzEyNjAyNjgzOTQyYTIxZmE0Y2RhN2RiYjUzYWJk
OWEyNjk5Li45NTJiYmQ3ZjI5Yjc5MmM3N2FjYWYwZjg4MWQ0OTc1MWQ1YmMxNGQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKQEAgLTUxMCw3ICs1MTAsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRDaGlsZHJlblRvQXJyYXko
QVhDb3JlT2JqZWN0KiBvYmplY3QsIGJvb2wgaXNGb3J3YXJkLCBBWENvcmVPYgogewogICAgIC8v
IEEgdGFibGUncyBjaGlsZHJlbiBpbmNsdWRlcyBlbGVtZW50cyB3aG9zZSBvd24gY2hpbGRyZW4g
YXJlIGFsc28gdGhlIHRhYmxlJ3MgY2hpbGRyZW4gKGR1ZSB0byB0aGUgd2F5IHRoZSBNYWMgZXhw
b3NlcyB0YWJsZXMpLgogICAgIC8vIFRoZSByb3dzIGZyb20gdGhlIHRhYmxlIHNob3VsZCBiZSBx
dWVyaWVkLCBzaW5jZSB0aG9zZSBhcmUgZGlyZWN0IGRlc2NlbmRhbnRzIG9mIHRoZSB0YWJsZSwg
YW5kIHRoZXkgY29udGFpbiBjb250ZW50LgotICAgIGNvbnN0IGF1dG8mIHNlYXJjaENoaWxkcmVu
ID0gaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGU+KCpvYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSA/IGRv
d25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9iamVjdCkucm93cygpIDogb2JqZWN0LT5jaGls
ZHJlbigpOworICAgIGNvbnN0IGF1dG8mIHNlYXJjaENoaWxkcmVuID0gb2JqZWN0LT5pc1RhYmxl
KCkgJiYgb2JqZWN0LT5pc0V4cG9zYWJsZSgpID8gb2JqZWN0LT5yb3dzKCkgOiBvYmplY3QtPmNo
aWxkcmVuKCk7CiAKICAgICBzaXplX3QgY2hpbGRyZW5TaXplID0gc2VhcmNoQ2hpbGRyZW4uc2l6
ZSgpOwogCkBAIC0zNzIzLDEwICszNzIzLDEwIEBAIHN0YXRpYyBib29sIGlzQWNjZXNzaWJpbGl0
eU9iamVjdFNlYXJjaE1hdGNoQXRJbmRleChBWENvcmVPYmplY3QqIGF4T2JqZWN0LCBBY2NlCiAg
ICAgICAgICAgICAmJiAhYXhPYmplY3QtPmhhc1NhbWVTdHlsZShjcml0ZXJpYS5zdGFydE9iamVj
dC0+cmVuZGVyZXIoKSk7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5OjpUYWJsZVNh
bWVMZXZlbDoKICAgICAgICAgcmV0dXJuIGNyaXRlcmlhLnN0YXJ0T2JqZWN0Ci0gICAgICAgICAg
ICAmJiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpheE9iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlPigqYXhPYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHko
KQotICAgICAgICAgICAgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYXhPYmplY3Qp
LnRhYmxlTGV2ZWwoKSA9PSBjcml0ZXJpYS5zdGFydE9iamVjdC0+dGFibGVMZXZlbCgpOworICAg
ICAgICAgICAgJiYgYXhPYmplY3QtPmlzVGFibGUoKSAmJiBheE9iamVjdC0+aXNFeHBvc2FibGUo
KQorICAgICAgICAgICAgJiYgYXhPYmplY3QtPnRhYmxlTGV2ZWwoKSA9PSBjcml0ZXJpYS5zdGFy
dE9iamVjdC0+dGFibGVMZXZlbCgpOwogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNlYXJjaEtleTo6
VGFibGU6Ci0gICAgICAgIHJldHVybiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpheE9iamVjdCkg
JiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYXhPYmplY3QpLmlzRXhwb3NhYmxlVGhy
b3VnaEFjY2Vzc2liaWxpdHkoKTsKKyAgICAgICAgcmV0dXJuIGF4T2JqZWN0LT5pc1RhYmxlKCkg
JiYgYXhPYmplY3QtPmlzRXhwb3NhYmxlKCk7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U2VhcmNo
S2V5OjpUZXh0RmllbGQ6CiAgICAgICAgIHJldHVybiBheE9iamVjdC0+aXNUZXh0Q29udHJvbCgp
OwogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNlYXJjaEtleTo6VW5kZXJsaW5lOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCAw
M2VmYmVkZmZhMTVkMjJjYmZiYjc2N2Q2NDdmOTMzMjQ1NGU0MDc2Li45NGNhNTlkYjY2N2EzMTIz
NTU2ZGFhYWEwZjI5MDkwYTA5ODhmYjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtMTEzLDYgKzExMyw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U1ZHUm9vdCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlTVkdF
bGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQWNj
ZXNzaWJpbGl0eVRhYmxlSW5zdGFuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgYm9vbCBpc0F0dGFjaG1lbnRFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KICAgICBib29sIGlzSGVhZGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CkBAIC0xNDgsOCArMTQ5LDI1IEBAIHB1YmxpYzoKICAgICBib29sIGlzT3JkZXJl
ZExpc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNEZXNj
cmlwdGlvbkxpc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgLy8g
VGFibGUgc3VwcG9ydC4KICAgICBib29sIGlzVGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIGJvb2wgaXNFeHBvc2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAgICAgYm9vbCBpc0RhdGFUYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgaW50IHRhYmxlTGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAw
OyB9CisgICAgYm9vbCBzdXBwb3J0c1NlbGVjdGVkUm93cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVtbnMoKSBv
dmVycmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IoKTsgfQorICAgIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzKCkgb3ZlcnJpZGUgeyByZXR1cm4gQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yKCk7IH0KKyAgICB1bnNpZ25lZCBjb2x1bW5Db3VudCgpIG92
ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICB1bnNpZ25lZCByb3dDb3VudCgpIG92ZXJyaWRlIHsg
cmV0dXJuIDA7IH0KKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHMoKSBvdmVy
cmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IoKTsgfQorICAgIEFYQ29y
ZU9iamVjdCogY2VsbEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCwgdW5zaWduZWQpIG92ZXJyaWRl
IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29s
dW1uSGVhZGVycygpIG92ZXJyaWRlIHsgcmV0dXJuIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
cigpOyB9CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRlcnMoKSBvdmVy
cmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IoKTsgfQorICAgIEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciB2aXNpYmxlUm93cygpIG92ZXJyaWRlIHsgcmV0dXJuIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvcigpOyB9CisgICAgQVhDb3JlT2JqZWN0KiBoZWFkZXJD
b250YWluZXIoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgaW50IGF4Q29sdW1u
Q291bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgaW50IGF4Um93Q291bnQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisKICAgICBib29sIGlzVGFibGVSb3coKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNUYWJsZUNvbHVtbigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBpc1RhYmxlQ2VsbCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yNDAsNyArMjU4LDYgQEAgcHVi
bGljOgogCiAgICAgdW5zaWduZWQgYmxvY2txdW90ZUxldmVsKCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgaW50IGhlYWRpbmdMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICBp
bnQgdGFibGVMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KICAgICBBY2Nlc3Np
YmlsaXR5QnV0dG9uU3RhdGUgY2hlY2tib3hPclJhZGlvVmFsdWUoKSBjb25zdCBvdmVycmlkZTsK
ICAgICBTdHJpbmcgdmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0
cmluZygpOyB9CiAgICAgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIDAuMGY7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKaW5kZXggYzE1ZjhlZmUwYjE3ODY1NTNi
MjJlMmIxNmM5NDcyMjBiMzViZTYzMi4uOGRmN2QyZmNkZjk2M2Y2ZWEzMzk1YjVjMDNkNWVhYzQ2
YjQxMDM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKQEAgLTQ4OCw2ICs0ODgsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVRhYmxlSW5zdGFuY2UoKSBjb25zdCA9
IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRhY2htZW50RWxlbWVudCgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNIZWFkaW5nKCkgY29uc3QgPSAwOwpAQCAtNTI4LDExICs1Mjks
MzEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc09yZGVyZWRMaXN0KCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBpc0Rlc2NyaXB0aW9uTGlzdCgpIGNvbnN0ID0gMDsKIAorICAg
IC8vIFRhYmxlIHN1cHBvcnQuCiAgICAgdmlydHVhbCBib29sIGlzVGFibGUoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBib29sIGlzRXhwb3NhYmxlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBpc0RhdGFUYWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCB0YWJsZUxldmVs
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGVkUm93cygpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5z
KCkgPSAwOworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3MoKSA9
IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjb2x1bW5Db3VudCgpID0gMDsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIHJvd0NvdW50KCkgPSAwOworICAgIC8vIEFsbCB0aGUgY2VsbHMgaW4gdGhlIHRh
YmxlLgorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNlbGxzKCkgPSAw
OworICAgIHZpcnR1YWwgQVhDb3JlT2JqZWN0KiBjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVk
IGNvbHVtbiwgdW5zaWduZWQgcm93KSA9IDA7CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgY29sdW1uSGVhZGVycygpID0gMDsKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciByb3dIZWFkZXJzKCkgPSAwOworICAgIHZpcnR1YWwgQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIHZpc2libGVSb3dzKCkgPSAwOworICAgIC8vIFJldHVybnMgYW4g
b2JqZWN0IHRoYXQgY29udGFpbnMsIGFzIGNoaWxkcmVuLCBhbGwgdGhlIG9iamVjdHMgdGhhdCBh
Y3QgYXMgaGVhZGVycy4KKyAgICB2aXJ0dWFsIEFYQ29yZU9iamVjdCogaGVhZGVyQ29udGFpbmVy
KCkgPSAwOworICAgIHZpcnR1YWwgaW50IGF4Q29sdW1uQ291bnQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBpbnQgYXhSb3dDb3VudCgpIGNvbnN0ID0gMDsKKwogICAgIHZpcnR1YWwgYm9vbCBp
c1RhYmxlUm93KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1RhYmxlQ29sdW1uKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1RhYmxlQ2VsbCgpIGNvbnN0ID0gMDsKKwog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZpZWxkc2V0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBpc0dyb3VwKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0FSSUFUcmVlR3JpZFJv
dygpIGNvbnN0ID0gMDsKQEAgLTY0OCw3ICs2NjksNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHVuc2lnbmVkIGJsb2NrcXVvdGVMZXZlbCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBo
ZWFkaW5nTGV2ZWwoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgdGFibGVMZXZlbCgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBjaGVja2JveE9y
UmFkaW9WYWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZURlc2NyaXB0
aW9uKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNvbnN0
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDk2ZjMzY2I3MzRhNzA4MzY5YjRmM2JhM2Q1
NDg0ODhlNTA0OTU3NzAuLmM4MjU0NDYxMmYwYjFiMmRjNTQ3NDdmYjE3YzMxOTQ4NTcwZTAwYWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMzQ3Myw3ICszNDczLDcgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhU2VsZWN0ZWRSb3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYgcmUKICAgICB9CiAKICAgICAvLyBHZXQgYWxsIHRoZSByb3dzLgotICAgIGF1dG8g
cm93c0l0ZXJhdGlvbiA9IFsmXShhdXRvJiByb3dzKSB7CisgICAgYXV0byByb3dzSXRlcmF0aW9u
ID0gWyZdKGNvbnN0IGF1dG8mIHJvd3MpIHsKICAgICAgICAgZm9yIChhdXRvJiByb3cgOiByb3dz
KSB7CiAgICAgICAgICAgICBpZiAocm93LT5pc1NlbGVjdGVkKCkgfHwgcm93LT5pc0FjdGl2ZURl
c2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIoKSkgewogICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQocm93KTsKQEAgLTM0ODgsNyArMzQ4OCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YXJpYVNlbGVjdGVkUm93cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJl
CiAgICAgICAgIHJvd3NJdGVyYXRpb24oYWxsUm93cyk7CiAgICAgfSBlbHNlIGlmIChpczxBY2Nl
c3NpYmlsaXR5VGFibGU+KCp0aGlzKSkgewogICAgICAgICBhdXRvJiB0aGlzVGFibGUgPSBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCp0aGlzKTsKLSAgICAgICAgaWYgKHRoaXNUYWJsZS5p
c0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkgJiYgdGhpc1RhYmxlLnN1cHBvcnRzU2Vs
ZWN0ZWRSb3dzKCkpCisgICAgICAgIGlmICh0aGlzVGFibGUuaXNFeHBvc2FibGUoKSAmJiB0aGlz
VGFibGUuc3VwcG9ydHNTZWxlY3RlZFJvd3MoKSkKICAgICAgICAgICAgIHJvd3NJdGVyYXRpb24o
dGhpc1RhYmxlLnJvd3MoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCmluZGV4IDI3MzFiMDc4ODZhZWY5YmMy
NzU2NmI3YjE0ZThlNjRhOGFlNzAxZGQuLjIyNWZjOGVlYWVlNTNkMWIzODUyMDJjMjdmNzEzZTY0
ZDU4NDkzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlUYWJsZS5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIEFjY2Vzc2liaWxpdHlUYWJsZTo6QWNjZXNzaWJpbGl0eVRhYmxlKFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCiAgICAgOiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KHJlbmRlcmVyKQog
ICAgICwgbV9oZWFkZXJDb250YWluZXIobnVsbHB0cikKLSAgICAsIG1faXNFeHBvc2FibGVUaHJv
dWdoQWNjZXNzaWJpbGl0eSh0cnVlKQorICAgICwgbV9pc0V4cG9zYWJsZSh0cnVlKQogewogfQog
CkBAIC02Myw3ICs2Myw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZTo6fkFjY2Vzc2liaWxpdHlUYWJs
ZSgpID0gZGVmYXVsdDsKIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjppbml0KCkKIHsKICAgICBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbml0KCk7Ci0gICAgbV9pc0V4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5ID0gY29tcHV0ZUlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJp
bGl0eSgpOworICAgIG1faXNFeHBvc2FibGUgPSBjb21wdXRlSXNUYWJsZUV4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KCk7CiB9CiAKIFJlZjxBY2Nlc3NpYmlsaXR5VGFibGU+IEFjY2Vzc2li
aWxpdHlUYWJsZTo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCkBAIC04MywxMiArODMs
MTIgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6Omhhc0FSSUFSb2xlKCkgY29uc3QKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0V4cG9zYWJsZVRo
cm91Z2hBY2Nlc3NpYmlsaXR5KCkgY29uc3QKK2Jvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0V4
cG9zYWJsZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIG1faXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0
eTsKKyAgICByZXR1cm4gbV9pc0V4cG9zYWJsZTsKIH0KIAogSFRNTFRhYmxlRWxlbWVudCogQWNj
ZXNzaWJpbGl0eVRhYmxlOjp0YWJsZUVsZW1lbnQoKSBjb25zdApAQCAtMzc3LDcgKzM3Nyw3IEBA
IHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjpjbGVhckNoaWxkcmVuKCkKIAogdm9pZCBBY2Nlc3Np
YmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKCkKIHsKLSAgICBpZiAoIWlzRXhwb3NhYmxlVGhyb3Vn
aEFjY2Vzc2liaWxpdHkoKSkgeworICAgIGlmICghaXNFeHBvc2FibGUoKSkgewogICAgICAgICBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRDaGlsZHJlbigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNDI0LDggKzQyNCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjphZGRD
aGlsZHJlbigpCiAgICAgICAgIGlmICghY29sdW1uLmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkK
ICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKCZjb2x1bW4pOwogICAgIH0KLSAgICAKLSAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJDb250YWluZXJPYmplY3QgPSBoZWFkZXJDb250
YWluZXIoKTsKKworICAgIGF1dG8qIGhlYWRlckNvbnRhaW5lck9iamVjdCA9IGhlYWRlckNvbnRh
aW5lcigpOwogICAgIGlmIChoZWFkZXJDb250YWluZXJPYmplY3QgJiYgIWhlYWRlckNvbnRhaW5l
ck9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQogICAgICAgICBtX2NoaWxkcmVuLmFw
cGVuZChoZWFkZXJDb250YWluZXJPYmplY3QpOwogCkBAIC00MzcsNyArNDM3LDYgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKCkKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBjZWxsIDogcm93LT5jaGlsZHJlbigpKQogICAgICAgICAgICAgY2VsbC0+dXBkYXRlQWNjZXNz
aWJpbGl0eVJvbGUoKTsKICAgICB9Ci0KIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFk
ZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvd09iamVjdCwgSGFzaFNldDxB
Y2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50
KQpAQCAtNTAxLDcgKzUwMCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjphZGRDaGlsZHJl
bkZyb21TZWN0aW9uKFJlbmRlclRhYmxlU2VjdGlvbiogdGFibGVTZWN0aW9uCiAgICAgbWF4Q29s
dW1uQ291bnQgPSBzdGQ6Om1heCh0YWJsZVNlY3Rpb24tPm51bUNvbHVtbnMoKSwgbWF4Q29sdW1u
Q291bnQpOwogfQogICAgIAotQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVRhYmxl
OjpoZWFkZXJDb250YWluZXIoKQorQVhDb3JlT2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGU6Omhl
YWRlckNvbnRhaW5lcigpCiB7CiAgICAgaWYgKG1faGVhZGVyQ29udGFpbmVyKQogICAgICAgICBy
ZXR1cm4gbV9oZWFkZXJDb250YWluZXIuZ2V0KCk7CkBAIC01MTMsNzQgKzUxMiw4NiBAQCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGU6OmhlYWRlckNvbnRhaW5lcigpCiAg
ICAgcmV0dXJuIG1faGVhZGVyQ29udGFpbmVyLmdldCgpOwogfQogCi1jb25zdCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIEFjY2Vzc2liaWxpdHlUYWJs
ZTo6Y29sdW1ucygpCitBWENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBB
Y2Nlc3NpYmlsaXR5VGFibGU6OmNvbHVtbnMoKQogewogICAgIHVwZGF0ZUNoaWxkcmVuSWZOZWNl
c3NhcnkoKTsKICAgICAgICAgCiAgICAgcmV0dXJuIG1fY29sdW1uczsKIH0KIAotY29uc3QgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBBY2Nlc3NpYmls
aXR5VGFibGU6OnJvd3MoKQorQVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgQWNjZXNzaWJpbGl0eVRhYmxlOjpyb3dzKCkKIHsKICAgICB1cGRhdGVDaGlsZHJlbklmTmVj
ZXNzYXJ5KCk7CiAgICAgCiAgICAgcmV0dXJuIG1fcm93czsKIH0KIAotdm9pZCBBY2Nlc3NpYmls
aXR5VGFibGU6OmNvbHVtbkhlYWRlcnMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBoZWFk
ZXJzKQorQVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgQWNjZXNzaWJp
bGl0eVRhYmxlOjpjb2x1bW5IZWFkZXJzKCkKIHsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3IgaGVhZGVyczsKICAgICBpZiAoIW1fcmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKKyAgICAgICAgcmV0dXJuIGhlYWRlcnM7CisKICAgICB1cGRhdGVDaGlsZHJlbklmTmVjZXNz
YXJ5KCk7Ci0gICAgCisKICAgICAvLyBTb21ldGltZXMgbV9jb2x1bW5zIGNhbiBiZSByZXNldCBk
dXJpbmcgdGhlIGl0ZXJhdGlvbiwgd2UgY2FjaGUgaXQgaGVyZSB0byBiZSBzYWZlLgogICAgIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5zQ29weSA9IG1fY29sdW1uczsKLSAgICAK
KwogICAgIGZvciAoY29uc3QgYXV0byYgY29sdW1uIDogY29sdW1uc0NvcHkpIHsKICAgICAgICAg
aWYgKEFYQ29yZU9iamVjdCogaGVhZGVyID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ29s
dW1uPigqY29sdW1uKS5oZWFkZXJPYmplY3QoKSkKICAgICAgICAgICAgIGhlYWRlcnMuYXBwZW5k
KGhlYWRlcik7CiAgICAgfQorCisgICAgcmV0dXJuIGhlYWRlcnM7CiB9CiAKLXZvaWQgQWNjZXNz
aWJpbGl0eVRhYmxlOjpyb3dIZWFkZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgaGVh
ZGVycykKK0FYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIEFjY2Vzc2li
aWxpdHlUYWJsZTo6cm93SGVhZGVycygpCiB7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yIGhlYWRlcnM7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAg
CisgICAgICAgIHJldHVybiBoZWFkZXJzOworCiAgICAgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2Fy
eSgpOwotICAgIAorCiAgICAgLy8gU29tZXRpbWVzIG1fcm93cyBjYW4gYmUgcmVzZXQgZHVyaW5n
IHRoZSBpdGVyYXRpb24sIHdlIGNhY2hlIGl0IGhlcmUgdG8gYmUgc2FmZS4KICAgICBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93c0NvcHkgPSBtX3Jvd3M7Ci0gICAgCisKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHJvdyA6IHJvd3NDb3B5KSB7CiAgICAgICAgIGlmIChBWENvcmVPYmplY3Qq
IGhlYWRlciA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKnJvdykuaGVhZGVyT2Jq
ZWN0KCkpCiAgICAgICAgICAgICBoZWFkZXJzLmFwcGVuZChoZWFkZXIpOwogICAgIH0KKworICAg
IHJldHVybiBoZWFkZXJzOwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlUYWJsZTo6dmlzaWJsZVJv
d3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByb3dzKQorQVhDb3JlT2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgQWNjZXNzaWJpbGl0eVRhYmxlOjp2aXNpYmxlUm93cygp
CiB7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3M7CiAgICAgaWYgKCFtX3Jl
bmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgICAgIHJldHVybiByb3dzOworCiAg
ICAgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwotICAgIAorCiAgICAgZm9yIChjb25zdCBh
dXRvJiByb3cgOiBtX3Jvd3MpIHsKICAgICAgICAgaWYgKHJvdyAmJiAhcm93LT5pc09mZlNjcmVl
bigpKQogICAgICAgICAgICAgcm93cy5hcHBlbmQocm93KTsKICAgICB9CisKKyAgICByZXR1cm4g
cm93czsKIH0KIAotdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxzKEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2VsbHMpCitBWENvcmVPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBBY2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxzKCkK
IHsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHM7CiAgICAgaWYgKCFtX3Jl
bmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgICAgIHJldHVybiBjZWxsczsKKwog
ICAgIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKLSAgICAKKwogICAgIGZvciAoY29uc3Qg
YXV0byYgcm93IDogbV9yb3dzKQogICAgICAgICBjZWxscy5hcHBlbmRWZWN0b3Iocm93LT5jaGls
ZHJlbigpKTsKKworICAgIHJldHVybiBjZWxsczsKIH0KICAgICAKIHVuc2lnbmVkIEFjY2Vzc2li
aWxpdHlUYWJsZTo6Y29sdW1uQ291bnQoKQpAQCAtNjAxLDcgKzYxMiw3IEBAIGludCBBY2Nlc3Np
YmlsaXR5VGFibGU6OnRhYmxlTGV2ZWwoKSBjb25zdAogewogICAgIGludCBsZXZlbCA9IDA7CiAg
ICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5T2JqZWN0Kj4oY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPih0aGlzKSk7IG9iajsg
b2JqID0gb2JqLT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0
eVRhYmxlPigqb2JqKSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpvYmopLmlzRXhw
b3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkKKyAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxp
dHlUYWJsZT4oKm9iaikgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqKS5pc0V4
cG9zYWJsZSgpKQogICAgICAgICAgICAgKytsZXZlbDsKICAgICB9CiAgICAgCkBAIC02NDQsNyAr
NjU1LDcgQEAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogQWNjZXNzaWJpbGl0eVRhYmxlOjpjZWxs
Rm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbiwKIAogQWNjZXNzaWJpbGl0eVJvbGUgQWNj
ZXNzaWJpbGl0eVRhYmxlOjpyb2xlVmFsdWUoKSBjb25zdAogewotICAgIGlmICghaXNFeHBvc2Fi
bGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAgIGlmICghaXNFeHBvc2FibGUoKSkKICAgICAg
ICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJvbGVWYWx1ZSgpOwogICAgIAog
ICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xlID0gYXJpYVJvbGVBdHRyaWJ1dGUoKTsKQEAg
LTY2Miw5ICs2NzMsOSBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6Y29tcHV0ZUFjY2Vzc2li
aWxpdHlJc0lnbm9yZWQoKSBjb25zdAogICAgIGlmIChkZWNpc2lvbiA9PSBBY2Nlc3NpYmlsaXR5
T2JqZWN0SW5jbHVzaW9uOjpJZ25vcmVPYmplY3QpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IAotICAgIGlmICghaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAgIGlmICgh
aXNFeHBvc2FibGUoKSkKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7Ci0gICAgICAgIAorCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCkBAIC02NzcsNyArNjg4LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6
OnRpdGxlRWxlbWVudFRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dE9yZGVyKQog
CiBTdHJpbmcgQWNjZXNzaWJpbGl0eVRhYmxlOjp0aXRsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFp
c0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgaWYgKCFpc0V4cG9zYWJsZSgp
KQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGl0bGUoKTsKICAg
ICAKICAgICBTdHJpbmcgdGl0bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGUuaAppbmRleCBjYmZjYTZhZjkwOGI2YmFjMGM4OTEwNGIwNGE3
NDE0YmRlNzI4YmE4Li4wZDhlZDM5YTQxODRhMWM4M2UxYjlhNzY2MzFmZjI5YTViNzJhOWYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
LmgKQEAgLTI5LDExICsyOSwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDsKIGNsYXNzIEhUTUxUYWJsZUVsZW1lbnQ7CiBjbGFz
cyBSZW5kZXJUYWJsZVNlY3Rpb247CiAgICAgCkBAIC00NiwzNiArNDYsMzYgQEAgcHVibGljOgog
CiAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3QgZmluYWw7CiAgICAgdmly
dHVhbCBib29sIGlzQXJpYVRhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKKwog
ICAgIHZvaWQgYWRkQ2hpbGRyZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGNsZWFyQ2hpbGRyZW4o
KSBmaW5hbDsKLSAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNv
bHVtbnMoKTsKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJvd3MoKTsK
LSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZWxlY3RlZFJvd3MoKSB7IHJldHVybiBm
YWxzZTsgfQotICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KCk7Ci0gICAgdW5zaWduZWQgcm93Q291
bnQoKTsKKworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5zKCkgb3ZlcnJp
ZGU7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3MoKSBvdmVycmlkZTsKKwor
ICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KCkgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgcm93Q291
bnQoKSBvdmVycmlkZTsKICAgICBpbnQgdGFibGVMZXZlbCgpIGNvbnN0IGZpbmFsOwotICAgIAor
CiAgICAgU3RyaW5nIHRpdGxlKCkgY29uc3QgZmluYWw7Ci0gICAgCisKICAgICAvLyBhbGwgdGhl
IGNlbGxzIGluIHRoZSB0YWJsZQotICAgIHZvaWQgY2VsbHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJik7Ci0gICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogY2VsbEZvckNvbHVtbkFuZFJv
dyh1bnNpZ25lZCBjb2x1bW4sIHVuc2lnbmVkIHJvdyk7Ci0gICAgCi0gICAgdm9pZCBjb2x1bW5I
ZWFkZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwotICAgIHZvaWQgcm93SGVhZGVy
cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsKLSAgICB2b2lkIHZpc2libGVSb3dzKEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwotICAgIAotICAgIC8vIGFuIG9iamVjdCB0aGF0
IGNvbnRhaW5zLCBhcyBjaGlsZHJlbiwgYWxsIHRoZSBvYmplY3RzIHRoYXQgYWN0IGFzIGhlYWRl
cnMKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJDb250YWluZXIoKTsKKyAgICBBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHMoKSBvdmVycmlkZTsKKyAgICBBY2Nlc3NpYmls
aXR5VGFibGVDZWxsKiBjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbiwgdW5zaWdu
ZWQgcm93KSBvdmVycmlkZTsKIAotICAgIC8vIGlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxp
dHkoKSBpcyB3aGV0aGVyIGl0IGlzIGV4cG9zZWQgYXMgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIHRv
IHRoZSBwbGF0Zm9ybS4KLSAgICBib29sIGlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHko
KSBjb25zdDsKLSAgICAKLSAgICBpbnQgYXhDb2x1bW5Db3VudCgpIGNvbnN0OwotICAgIGludCBh
eFJvd0NvdW50KCkgY29uc3Q7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVt
bkhlYWRlcnMoKSBvdmVycmlkZTsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93
SGVhZGVycygpIG92ZXJyaWRlOworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB2aXNp
YmxlUm93cygpIG92ZXJyaWRlOworCisgICAgLy8gUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250
YWlucywgYXMgY2hpbGRyZW4sIGFsbCB0aGUgb2JqZWN0cyB0aGF0IGFjdCBhcyBoZWFkZXJzLgor
ICAgIEFYQ29yZU9iamVjdCogaGVhZGVyQ29udGFpbmVyKCkgb3ZlcnJpZGU7CisKKyAgICBib29s
IGlzVGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgLy8gUmV0dXJu
cyB3aGV0aGVyIGl0IGlzIGV4cG9zZWQgYXMgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIHRvIHRoZSBw
bGF0Zm9ybS4KKyAgICBib29sIGlzRXhwb3NhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBp
bnQgYXhDb2x1bW5Db3VudCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGludCBheFJvd0NvdW50KCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBBY2Nlc3NpYmlsaXR5
VGFibGUoUmVuZGVyT2JqZWN0Kik7CkBAIC04NCwxMiArODQsMTMgQEAgcHJvdGVjdGVkOgogICAg
IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBtX2NvbHVtbnM7CiAKICAgICBSZWZQdHI8QWNj
ZXNzaWJpbGl0eU9iamVjdD4gbV9oZWFkZXJDb250YWluZXI7Ci0gICAgYm9vbCBtX2lzRXhwb3Nh
YmxlVGhyb3VnaEFjY2Vzc2liaWxpdHk7CisgICAgYm9vbCBtX2lzRXhwb3NhYmxlOwogCiAgICAg
Ym9vbCBoYXNBUklBUm9sZSgpIGNvbnN0OwogCi0gICAgLy8gaXNUYWJsZSBpcyB3aGV0aGVyIGl0
J3MgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIG9iamVjdC4KLSAgICBib29sIGlzVGFibGUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgLy8gVXNlZCBpbiB0eXBlIGNoZWNraW5nIGZ1
bmN0aW9uIGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4uCisgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlU
YWJsZUluc3RhbmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgLy8gaXNE
YXRhVGFibGUgaXMgd2hldGhlciBpdCBpcyBleHBvc2VkIGFzIGFuIEFjY2Vzc2liaWxpdHlUYWJs
ZSBiZWNhdXNlIHRoZSBoZXVyaXN0aWMKICAgICAvLyB0aGluayB0aGlzICJsb29rcyIgbGlrZSBh
IGRhdGEtYmFzZWQgdGFibGUgKGluc3RlYWQgb2YgYSB0YWJsZSB1c2VkIGZvciBsYXlvdXQpLgog
ICAgIGJvb2wgaXNEYXRhVGFibGUoKSBjb25zdCBmaW5hbDsKQEAgLTEwNSw0ICsxMDYsNCBAQCBw
cml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlIAogCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eVRhYmxlLCBpc1RhYmxlKCkpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eVRhYmxlLCBpc0FjY2Vz
c2liaWxpdHlUYWJsZUluc3RhbmNlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAppbmRleCBkYjUwNDFjOTM4OTc5
MjhmYjFkNzQ0ZDc3ZGI1ZWE3ZjY5YWFlN2NmLi4wMTMyN2QyYmIwYzZjMWI0NTM3NTNlNmMzMmRi
OTIyMmExNWVlZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCBBY2Nlc3Np
YmlsaXR5VGFibGUqIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnBhcmVudFRhYmxlKCkgY29uc3QK
ICAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gY2hvb3NlIGFub3RoZXIgYW5jZXN0b3Ig
dGFibGUgYXMgdGhpcyBjZWxsJ3MgdGFibGUuCiAgICAgICAgICAgICBpZiAoaXM8QWNjZXNzaWJp
bGl0eVRhYmxlPigqcGFyZW50KSkgewogICAgICAgICAgICAgICAgIGF1dG8mIHBhcmVudFRhYmxl
ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KTsKLSAgICAgICAgICAgICAg
ICBpZiAocGFyZW50VGFibGUuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAg
ICAgICAgICAgICAgIGlmIChwYXJlbnRUYWJsZS5pc0V4cG9zYWJsZSgpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gJnBhcmVudFRhYmxlOwogICAgICAgICAgICAgICAgIGlmIChwYXJlbnRU
YWJsZS5ub2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE5LDcgKzExOSw3
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6aXNUYWJsZUNlbGwoKSBjb25zdAogICAg
IC8vIFRoaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgdW5pZ25vcmVkUGFyZW50IHdhcyBhIHJvdywg
YnV0IHRoYXQgZXhwbG9kZWQgcGVyZm9ybWFuY2UgaWYKICAgICAvLyB0aGlzIHdhcyBpbiBuZXN0
ZWQgdGFibGVzLiBUaGlzIGNoZWNrIHNob3VsZCBiZSBqdXN0IGFzIGdvb2QuCiAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogcGFyZW50VGFibGUgPSB0aGlzLT5wYXJlbnRUYWJsZSgpOwotICAgIHJl
dHVybiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVudFRhYmxlKSAmJiBkb3duY2FzdDxBY2Nl
c3NpYmlsaXR5VGFibGU+KCpwYXJlbnRUYWJsZSkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJp
bGl0eSgpOworICAgIHJldHVybiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVudFRhYmxlKSAm
JiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnRUYWJsZSkuaXNFeHBvc2FibGUo
KTsKIH0KICAgICAKIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmRl
dGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCkKQEAgLTI0MywxNyArMjQzLDE4IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVRhYmxlQ2VsbDo6c3VwcG9ydHNFeHBhbmRlZFRleHRWYWx1ZSgpIGNvbnN0CiAg
ICAgcmV0dXJuIGlzVGFibGVIZWFkZXJDZWxsKCkgJiYgaGFzQXR0cmlidXRlKGFiYnJBdHRyKTsK
IH0KICAgICAKLXZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6Y29sdW1uSGVhZGVycyhBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGhlYWRlcnMpCitBWENvcmVPYmplY3Q6OkFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpjb2x1bW5IZWFkZXJz
KCkKIHsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgaGVhZGVyczsKICAgICBBY2Nl
c3NpYmlsaXR5VGFibGUqIHBhcmVudCA9IHBhcmVudFRhYmxlKCk7CiAgICAgaWYgKCFwYXJlbnQp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGhlYWRlcnM7CiAKICAgICAvLyBDaG9v
c2UgY29sdW1uSGVhZGVycyBhcyB0aGUgcGxhY2Ugd2hlcmUgdGhlICJoZWFkZXJzIiBhdHRyaWJ1
dGUgaXMgcmVwb3J0ZWQuCiAgICAgYXJpYUVsZW1lbnRzRnJvbUF0dHJpYnV0ZShoZWFkZXJzLCBo
ZWFkZXJzQXR0cik7CiAgICAgLy8gSWYgdGhlIGhlYWRlcnMgYXR0cmlidXRlIHJldHVybmVkIHZh
bGlkIHZhbHVlcywgdGhlbiBkbyBub3QgZnVydGhlciBzZWFyY2ggZm9yIGNvbHVtbiBoZWFkZXJz
LgogICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGhlYWRlcnM7CiAgICAgCiAgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4g
cm93UmFuZ2U7CiAgICAgcm93SW5kZXhSYW5nZShyb3dSYW5nZSk7CkBAIC0yNzUsMTMgKzI3Niwx
NiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmNvbHVtbkhlYWRlcnMoQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJiBoZWFkZXJzKQogICAgICAgICBlbHNlIGlmICh0YWJsZUNlbGwt
PmlzQ29sdW1uSGVhZGVyQ2VsbCgpKQogICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQodGFibGVD
ZWxsKTsKICAgICB9CisKKyAgICByZXR1cm4gaGVhZGVyczsKIH0KICAgICAKLXZvaWQgQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbDo6cm93SGVhZGVycyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Im
IGhlYWRlcnMpCitBWENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsOjpyb3dIZWFkZXJzKCkKIHsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgaGVhZGVyczsKICAgICBBY2Nlc3NpYmlsaXR5VGFibGUqIHBhcmVudCA9IHBh
cmVudFRhYmxlKCk7CiAgICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGhlYWRlcnM7CiAKICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiByb3dS
YW5nZTsKICAgICByb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsKQEAgLTMwMCw2ICszMDQsOCBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnJvd0hlYWRlcnMoQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJiBoZWFkZXJzKQogICAgICAgICBlbHNlIGlmICh0YWJsZUNlbGwtPmlzUm93SGVh
ZGVyQ2VsbCgpKQogICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQodGFibGVDZWxsKTsKICAgICB9
CisKKyAgICByZXR1cm4gaGVhZGVyczsKIH0KIAogQWNjZXNzaWJpbGl0eVRhYmxlUm93KiBBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsOjpwYXJlbnRSb3coKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaAppbmRleCAwNTIw
ZjIyOGE2NTc4YmMzNTYxMWRhMDliMzY2NTEzNDUyNDlmOTg5Li5mYTM2MWM2OTZlOGU2YWYwMDZi
NWI4ZWM4NjcwZGRlMjY5NzE0YmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaApAQCAtNDksMTAgKzQ5LDEwIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcm93SW5kZXhSYW5nZShzdGQ6OnBhaXI8dW5zaWduZWQs
IHVuc2lnbmVkPiYgcm93UmFuZ2UpIGNvbnN0OwogICAgIC8vIGZpbGxzIGluIHRoZSBzdGFydCBs
b2NhdGlvbiBhbmQgY29sdW1uIHNwYW4gb2YgY2VsbAogICAgIHZpcnR1YWwgdm9pZCBjb2x1bW5J
bmRleFJhbmdlKHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+JiBjb2x1bW5SYW5nZSkgY29u
c3Q7Ci0gICAgCi0gICAgdm9pZCBjb2x1bW5IZWFkZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYpOwotICAgIHZvaWQgcm93SGVhZGVycyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Im
KTsKLSAgICAKKworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5IZWFkZXJz
KCkgb3ZlcnJpZGU7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRlcnMo
KSBvdmVycmlkZTsKKwogICAgIGludCBheENvbHVtbkluZGV4KCkgY29uc3Q7CiAgICAgaW50IGF4
Um93SW5kZXgoKSBjb25zdDsKICAgICBpbnQgYXhDb2x1bW5TcGFuKCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVt
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNv
bHVtbi5jcHAKaW5kZXggZmRjNjdmOGFjMTU2YTVhZGJiYWE2MTM1NzZiODY4MmFlNjI3MTVhMS4u
ZWIzZjBkMjk1OTBlNTE0YmVkMmFiMmQxNTcwNTE2NmY5YzVhMjhhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1u
LmNwcApAQCAtODIsNyArODIsNyBAQCBBWENvcmVPYmplY3QqIEFjY2Vzc2liaWxpdHlUYWJsZUNv
bHVtbjo6aGVhZGVyT2JqZWN0KCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRv
JiBwYXJlbnRUYWJsZSA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fcGFyZW50KTsK
LSAgICBpZiAoIXBhcmVudFRhYmxlLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkK
KyAgICBpZiAoIXBhcmVudFRhYmxlLmlzRXhwb3NhYmxlKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAogICAgIGlmIChwYXJlbnRUYWJsZS5pc0FyaWFUYWJsZSgpKSB7CkBAIC0xOTIs
NyArMTkyLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW46OmFkZENoaWxkcmVuKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgcGFyZW50VGFibGUgPSBkb3duY2FzdDxBY2Nl
c3NpYmlsaXR5VGFibGU+KCptX3BhcmVudCk7Ci0gICAgaWYgKCFwYXJlbnRUYWJsZS5pc0V4cG9z
YWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgaWYgKCFwYXJlbnRUYWJsZS5pc0V4cG9z
YWJsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaW50IG51bVJvd3MgPSBwYXJlbnRU
YWJsZS5yb3dDb3VudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwCmluZGV4
IDk0NmVmMWMxZWJjM2RkYjU2ZjcxYmE5NTQ4ZWVlZGFlZWY2M2RkMGIuLjcyNTgxMTZmNWQxYmVk
OTgxOTNmMzE1YmQzMjU4YmRjYmU1ZTY5YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRh
aW5lci5jcHAKQEAgLTcwLDExICs3MCwxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUhlYWRl
ckNvbnRhaW5lcjo6YWRkQ2hpbGRyZW4oKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBw
YXJlbnRUYWJsZSA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fcGFyZW50KTsKLSAg
ICBpZiAoIXBhcmVudFRhYmxlLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkKKyAg
ICBpZiAoIXBhcmVudFRhYmxlLmlzRXhwb3NhYmxlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBwYXJlbnRUYWJsZS5jb2x1bW5IZWFkZXJzKG1fY2hpbGRyZW4pOwotICAgIAorCisgICAg
bV9jaGlsZHJlbiA9IHBhcmVudFRhYmxlLmNvbHVtbkhlYWRlcnMoKTsKKwogICAgIGZvciAoY29u
c3QgYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQogICAgICAgICBtX2hlYWRlclJlY3QudW5pdGUo
Y2hpbGQtPmVsZW1lbnRSZWN0KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCmluZGV4IDdiNDljMjhiYzBjZDY4
NDE0MjZkNjdkYTUzNDgyYzEzMGMzYjY3NmYuLmNiZDlmNTc1ZTE2NDEzN2UwNWZhNTFjYzk1ZmRh
NjVlMGY4ZDliN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlUm93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgQWNjZXNzaWJpbGl0
eVJvbGUgQWNjZXNzaWJpbGl0eVRhYmxlUm93OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgp
CiBib29sIEFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6aXNUYWJsZVJvdygpIGNvbnN0CiB7CiAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogdGFibGUgPSBwYXJlbnRUYWJsZSgpOwotICAgIHJldHVybiBp
czxBY2Nlc3NpYmlsaXR5VGFibGU+KHRhYmxlKSAgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlPigqdGFibGUpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKTsKKyAgICByZXR1
cm4gaXM8QWNjZXNzaWJpbGl0eVRhYmxlPih0YWJsZSkgICYmIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZT4oKnRhYmxlKS5pc0V4cG9zYWJsZSgpOwogfQogICAgIAogQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eVRhYmxlUm93OjpvYnNlcnZhYmxlT2JqZWN0KCkgY29uc3QKQEAg
LTEwMCw3ICsxMDAsNyBAQCBBY2Nlc3NpYmlsaXR5VGFibGUqIEFjY2Vzc2liaWxpdHlUYWJsZVJv
dzo6cGFyZW50VGFibGUoKSBjb25zdAogICAgICAgICAvLyBjaG9vc2UgYW5vdGhlciBhbmNlc3Rv
ciB0YWJsZSBhcyB0aGlzIHJvdydzIHRhYmxlLgogICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0
eVRhYmxlPigqcGFyZW50KSkgewogICAgICAgICAgICAgYXV0byYgcGFyZW50VGFibGUgPSBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpOwotICAgICAgICAgICAgaWYgKHBhcmVu
dFRhYmxlLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkKKyAgICAgICAgICAgIGlm
IChwYXJlbnRUYWJsZS5pc0V4cG9zYWJsZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiAmcGFy
ZW50VGFibGU7CiAgICAgICAgICAgICBpZiAocGFyZW50VGFibGUubm9kZSgpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlLmNwcAppbmRleCBkMzJjODIyYWUxYzQ1MjE5NjkwNmZiZmRhYWUx
OTk4NDE2NzUwZDAxLi4xMjVjMTkyYmMwY2UzYzQ0YjEwMTQxMDM1YjYyMTM0NWE4OTZlZWY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlLmNwcApAQCAtNDI2LDcgKzQyNiw3IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdl
YmtpdEFjY2Vzc2libGVHZXRBdHRyaWJ1dGVzKEF0a09iamVjdCogb2JqZWN0KQogICAgICAgICAg
ICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAibXVs
dGlzY3JpcHQtdHlwZSIsICJwb3N0Iik7CiAgICAgfQogCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxp
dHlUYWJsZT4oKmNvcmVPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmNv
cmVPYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkgeworICAgIGlmIChp
czxBY2Nlc3NpYmlsaXR5VGFibGU+KCpjb3JlT2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGU+KCpjb3JlT2JqZWN0KS5pc0V4cG9zYWJsZSgpKSB7CiAgICAgICAgIGF1dG8mIHRh
YmxlID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqY29yZU9iamVjdCk7CiAgICAgICAg
IGludCByb3dDb3VudCA9IHRhYmxlLmF4Um93Q291bnQoKTsKICAgICAgICAgaWYgKHJvd0NvdW50
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAKaW5kZXggYThhOGU5MjM1Yzk1
MjA3NjJkYTk5NmUzZjRiY2Q3ZDg1NDMwYjI1My4uZDc4YmY0Y2Y3NjRkMWI3M2MxMWYzZDczZDc4
MjVmZTA1MWFmZDUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwCkBA
IC02Niw4ICs2Niw3IEBAIHN0YXRpYyBnaW50IGNlbGxJbmRleChBY2Nlc3NpYmlsaXR5VGFibGVD
ZWxsKiBheENlbGwsIEFjY2Vzc2liaWxpdHlUYWJsZSogYXhUYWJsCiB7CiAgICAgLy8gQ2FsY3Vs
YXRlIHRoZSBjZWxsJ3MgaW5kZXggYXMgaWYgd2UgaGFkIGEgdHJhZGl0aW9uYWwgR3RrKyB0YWJs
ZSBpbgogICAgIC8vIHdoaWNoIGNlbGxzIGFyZSBhbGwgZGlyZWN0IGNoaWxkcmVuIG9mIHRoZSB0
YWJsZSwgYXJyYW5nZWQgcm93LWZpcnN0LgotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciBhbGxDZWxsczsKLSAgICBheFRhYmxlLT5jZWxscyhhbGxD
ZWxscyk7CisgICAgYXV0byBhbGxDZWxscyA9IGF4VGFibGUtPmNlbGxzKCk7CiAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yOjppdGVyYXRvciBwb3Np
dGlvbjsKICAgICBwb3NpdGlvbiA9IHN0ZDo6ZmluZChhbGxDZWxscy5iZWdpbigpLCBhbGxDZWxs
cy5lbmQoKSwgYXhDZWxsKTsKICAgICBpZiAocG9zaXRpb24gPT0gYWxsQ2VsbHMuZW5kKCkpCkBA
IC03OSw4ICs3OCw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsQXRJbmRl
eChBdGtUYWJsZSogdGFibGUsIGdpbnQgaW5kZXgpCiB7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxl
PigqYWNjVGFibGUpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBhbGxDZWxsczsKLSAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVRhYmxlPigqYWNjVGFibGUpLmNlbGxzKGFsbENlbGxzKTsKKyAgICAgICAgYXV0byBhbGxDZWxs
cyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKS5jZWxscygpOwogICAg
ICAgICBpZiAoMCA8PSBpbmRleCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDwgYWxs
Q2VsbHMuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGw+KGFsbENlbGxzW2luZGV4XS5nZXQoKSk7CiAgICAgfQpAQCAtMjA4LDggKzIwNiw3
IEBAIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkhlYWRl
cihBdGtUYWJsZSogdGFibGUsIGdpbnQgY29sCiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBh
Y2NUYWJsZSA9IGNvcmUodGFibGUpOwogICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCph
Y2NUYWJsZSkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIGNvbHVtbkhlYWRlcnM7Ci0gICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZT4oKmFjY1RhYmxlKS5jb2x1bW5IZWFkZXJzKGNvbHVtbkhlYWRlcnMpOworICAgICAg
ICBhdXRvIGNvbHVtbkhlYWRlcnMgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NU
YWJsZSkuY29sdW1uSGVhZGVycygpOwogCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgY29sdW1u
SGVhZGVyIDogY29sdW1uSGVhZGVycykgewogICAgICAgICAgICAgc3RkOjpwYWlyPHVuc2lnbmVk
LCB1bnNpZ25lZD4gY29sdW1uUmFuZ2U7CkBAIC0yMjgsOCArMjI1LDcgQEAgc3RhdGljIEF0a09i
amVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93SGVhZGVyKEF0a1RhYmxlKiB0YWJsZSwg
Z2ludCByb3cpCiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFi
bGUpOwogICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSkpIHsKLSAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0hl
YWRlcnM7Ci0gICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKS5y
b3dIZWFkZXJzKHJvd0hlYWRlcnMpOworICAgICAgICBhdXRvIHJvd0hlYWRlcnMgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSkucm93SGVhZGVycygpOwogCiAgICAgICAg
IGZvciAoY29uc3QgYXV0byYgcm93SGVhZGVyIDogcm93SGVhZGVycykgewogICAgICAgICAgICAg
c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gcm93UmFuZ2U7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFi
bGVDZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VUYWJsZUNlbGwuY3BwCmluZGV4IDhhOGI0MWFmMWI1Mjg5NDdjMjIwZWU2
OGUyNjA1Y2MyMmVhM2YxNjAuLmVkMTkyNWIyYTUzOTQwOTdmMDgyZjZiYTVjMGYyOTM4Nzc0NjUz
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VUYWJsZUNlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZUNlbGwuY3BwCkBAIC01
Nyw4ICs1Nyw3IEBAIEdQdHJBcnJheSogd2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldENvbHVt
bkhlYWRlckNlbGxzKEF0a1RhYmxlQ2VsbCogY2VsbCkKICAgICBpZiAoIWlzPEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGw+KGF4T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29sdW1uSGVh
ZGVyczsKLSAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3QpLmNv
bHVtbkhlYWRlcnMoY29sdW1uSGVhZGVycyk7CisgICAgYXV0byBjb2x1bW5IZWFkZXJzID0gZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmF4T2JqZWN0KS5jb2x1bW5IZWFkZXJzKCk7
CiAKICAgICByZXR1cm4gY29udmVydFRvR1B0ckFycmF5KGNvbHVtbkhlYWRlcnMpOwogfQpAQCAt
NzIsOCArNzEsNyBAQCBHUHRyQXJyYXkqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRSb3dI
ZWFkZXJDZWxscyhBdGtUYWJsZUNlbGwqIGNlbGwpCiAgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsPihheE9iamVjdCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRlcnM7
Ci0gICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmF4T2JqZWN0KS5yb3dIZWFk
ZXJzKHJvd0hlYWRlcnMpOworICAgIGF1dG8gcm93SGVhZGVycyA9IGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZUNlbGw+KCpheE9iamVjdCkucm93SGVhZGVycygpOwogCiAgICAgcmV0dXJuIGNv
bnZlcnRUb0dQdHJBcnJheShyb3dIZWFkZXJzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1t
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJJT1MubW0KaW5kZXggNDc0ZTg1M2U3MTZhYzU0YjU5YzM0NGMyMWQwOGZjNWZmZGE1
M2FkMy4uMGIzYjI2NzIzMzliYjFkZWVmOTE5ZjQ4MzE3NDliNDgxNzllODFmNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KQEAgLTExOTMsNyArMTE5Myw3IEBAIHN0
YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBO
U1N0cmluZyAqc3RyaW5nKQogewogICAgIC8vIEZpbmQgaWYgdGhlIHBhcmVudCB0YWJsZSBmb3Ig
dGhlIHRhYmxlIGNlbGwuCiAgICAgaWYgKEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJp
bGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0LCB0
cnVlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKLSAgICAgICAgcmV0dXJuIGlz
PEFjY2Vzc2liaWxpdHlUYWJsZT4ob2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFi
bGU+KG9iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpOworICAgICAgICBy
ZXR1cm4gaXM8QWNjZXNzaWJpbGl0eVRhYmxlPihvYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZT4ob2JqZWN0KS5pc0V4cG9zYWJsZSgpOwogICAgIH0pKQogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4ocGFyZW50KTsKICAgICByZXR1cm4g
bmlsOwpAQCAtMTIzMCwxMiArMTIzMCwxMCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jl
c3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBzdGQ6
OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBjb2x1bW5SYW5nZTsKICAgICB0YWJsZUNlbGwtPnJv
d0luZGV4UmFuZ2Uocm93UmFuZ2UpOwogICAgIHRhYmxlQ2VsbC0+Y29sdW1uSW5kZXhSYW5nZShj
b2x1bW5SYW5nZSk7Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRlcnM7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVtbkhlYWRlcnM7Ci0gICAgdGFibGUtPnJvd0hl
YWRlcnMocm93SGVhZGVycyk7Ci0gICAgdGFibGUtPmNvbHVtbkhlYWRlcnMoY29sdW1uSGVhZGVy
cyk7Ci0gICAgCisKKyAgICBhdXRvIHJvd0hlYWRlcnMgPSB0YWJsZS0+cm93SGVhZGVycygpOwor
ICAgIGF1dG8gY29sdW1uSGVhZGVycyA9IHRhYmxlLT5jb2x1bW5IZWFkZXJzKCk7CisKICAgICBO
U011dGFibGVBcnJheSAqaGVhZGVycyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CiAgICAgCiAg
ICAgdW5zaWduZWQgY29sdW1uUmFuZ2VJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2x1
bW5SYW5nZS5maXJzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCmluZGV4IGJkNjEwMDlj
YTE1NDM3MTg2M2E1NjgzYzRhNGUyOGNjYmU0NWE5YjguLjI4MmU5NTM3NzIzNjQzNTI1YjYxNTNi
NTEzNWRiZGI3MTYyZGMzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBAIC0xNDQs
NyArMTQ0LDYgQEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojppbml0aWFsaXplQXR0cmlidXRlRGF0
YShBWENvcmVPYmplY3QmIG9iamVjdCwgYm9vbCBpc1Jvb3QKICAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6VmFsaWRhdGlvbk1lc3NhZ2UsIG9iamVjdC52YWxpZGF0aW9uTWVzc2FnZSgp
KTsKICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QmxvY2txdW90ZUxldmVsLCBvYmpl
Y3QuYmxvY2txdW90ZUxldmVsKCkpOwogICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpI
ZWFkaW5nTGV2ZWwsIG9iamVjdC5oZWFkaW5nTGV2ZWwoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OlRhYmxlTGV2ZWwsIG9iamVjdC50YWJsZUxldmVsKCkpOwogICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUsIHN0YXRpY19j
YXN0PGludD4ob2JqZWN0LmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkpKTsKICAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6VmFsdWVEZXNjcmlwdGlvbiwgb2JqZWN0LnZhbHVlRGVzY3JpcHRp
b24oKSk7CiAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZhbHVlRm9yUmFuZ2UsIG9i
amVjdC52YWx1ZUZvclJhbmdlKCkpOwpAQCAtMjE3LDYgKzIxNiwyNiBAQCB2b2lkIEFYSXNvbGF0
ZWRPYmplY3Q6OmluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKEFYQ29yZU9iamVjdCYgb2JqZWN0LCBi
b29sIGlzUm9vdAogICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpMaXZlUmVnaW9uU3Rh
dHVzLCBvYmplY3QubGl2ZVJlZ2lvblN0YXR1cygpKTsKICAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6TGl2ZVJlZ2lvblJlbGV2YW50LCBvYmplY3QubGl2ZVJlZ2lvblJlbGV2YW50KCkp
OwogICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpMaXZlUmVnaW9uQXRvbWljLCBvYmpl
Y3QubGl2ZVJlZ2lvbkF0b21pYygpKTsKKworICAgIGlmIChvYmplY3QuaXNUYWJsZSgpKSB7Cisg
ICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1RhYmxlLCBvYmplY3QuaXNUYWJs
ZSgpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzRXhwb3NhYmxlLCBv
YmplY3QuaXNFeHBvc2FibGUoKSk7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpJc0RhdGFUYWJsZSwgb2JqZWN0LmlzRGF0YVRhYmxlKCkpOworICAgICAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6VGFibGVMZXZlbCwgb2JqZWN0LnRhYmxlTGV2ZWwoKSk7CisgICAg
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1NlbGVjdGVkUm93cywgb2Jq
ZWN0LnN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkpOworICAgICAgICBzZXRPYmplY3RWZWN0b3JQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6Q29sdW1ucywgb2JqZWN0LmNvbHVtbnMoKSk7CisgICAgICAg
IHNldE9iamVjdFZlY3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpSb3dzLCBvYmplY3Qucm93
cygpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbHVtbkNvdW50LCBv
YmplY3QuY29sdW1uQ291bnQoKSk7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpSb3dDb3VudCwgb2JqZWN0LnJvd0NvdW50KCkpOworICAgICAgICBzZXRPYmplY3RWZWN0b3JQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q2VsbHMsIG9iamVjdC5jZWxscygpKTsKKyAgICAgICAg
c2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbHVtbkhlYWRlcnMsIG9i
amVjdC5jb2x1bW5IZWFkZXJzKCkpOworICAgICAgICBzZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6Um93SGVhZGVycywgb2JqZWN0LnJvd0hlYWRlcnMoKSk7CisgICAgICAg
IHNldE9iamVjdFZlY3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWaXNpYmxlUm93cywgb2Jq
ZWN0LnZpc2libGVSb3dzKCkpOworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
SGVhZGVyQ29udGFpbmVyLCBvYmplY3QuaGVhZGVyQ29udGFpbmVyKCkpOworICAgICAgICBzZXRQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVhDb2x1bW5Db3VudCwgb2JqZWN0LmF4Q29sdW1uQ291
bnQoKSk7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBWFJvd0NvdW50LCBv
YmplY3QuYXhSb3dDb3VudCgpKTsKKyAgICB9CisKICAgICBpZiAob2JqZWN0LmlzVGV4dENvbnRy
b2woKSkKICAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlRleHRMZW5ndGgsIG9i
amVjdC50ZXh0TGVuZ3RoKCkpOwogCkBAIC0zNzgsMTcgKzM5NywxNiBAQCB2b2lkIEFYSXNvbGF0
ZWRPYmplY3Q6OnNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
QVhDb3JlT2JqZQogICAgICAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIG51bGxwdHIsIHRy
dWUpOwogfQogCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldE9iamVjdFZlY3RvclByb3BlcnR5
KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JiBjaGlsZHJlbikKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0T2JqZWN0VmVjdG9yUHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3ImIGNoaWxkcmVuKQogewotICAgIHNpemVfdCBjaGlsZHJlblNpemUgPSBjaGlsZHJl
bi5zaXplKCk7Ci0gICAgaWYgKCFjaGlsZHJlblNpemUpCisgICAgaWYgKCFjaGlsZHJlbi5zaXpl
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBWZWN0b3I8QVhJRD4gY2hpbGRyZW5WZWN0
b3I7Ci0gICAgY2hpbGRyZW5WZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KGNoaWxkcmVuU2l6ZSk7Ci0g
ICAgZm9yIChhdXRvIGNoaWxkT2JqZWN0IDogY2hpbGRyZW4pCi0gICAgICAgIGNoaWxkcmVuVmVj
dG9yLnVuY2hlY2tlZEFwcGVuZChjaGlsZE9iamVjdC0+b2JqZWN0SUQoKSk7Ci0gICAgc2V0UHJv
cGVydHkocHJvcGVydHlOYW1lLCBjaGlsZHJlblZlY3Rvcik7CisKKyAgICBWZWN0b3I8QVhJRD4g
Y2hpbGRJRHMoY2hpbGRyZW4uc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gY2hpbGQgOiBjaGlsZHJl
bikKKyAgICAgICAgY2hpbGRJRHMudW5jaGVja2VkQXBwZW5kKGNoaWxkLT5vYmplY3RJRCgpKTsK
KworICAgIHNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgY2hpbGRJRHMpOwogfQogCiB2b2lkIEFY
SXNvbGF0ZWRPYmplY3Q6OnNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
QXR0cmlidXRlVmFsdWVWYXJpYW50JiYgdmFsdWUsIGJvb2wgc2hvdWxkUmVtb3ZlKQpAQCAtNDU4
LDYgKzQ3NiwxNyBAQCBib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzRGV0YWNoZWRGcm9tUGFyZW50
KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0FYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVj
dDo6Y2VsbEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCBjb2x1bW5JbmRleCwgdW5zaWduZWQgcm93
SW5kZXgpCit7CisgICAgYXV0byBjZWxsID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZy
b21NYWluVGhyZWFkPEFYQ29yZU9iamVjdCo+KFsmY29sdW1uSW5kZXgsICZyb3dJbmRleCwgdGhp
c10gKCkgLT4gQVhDb3JlT2JqZWN0KiB7CisgICAgICAgIGlmIChhdXRvKiBvYmplY3QgPSBhc3Nv
Y2lhdGVkQVhPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvYmplY3QtPmNlbGxGb3JDb2x1
bW5BbmRSb3coY29sdW1uSW5kZXgsIHJvd0luZGV4KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfSk7CisKKyAgICByZXR1cm4gY2VsbCA/IHRyZWUoKS0+bm9kZUZvcklEKGNlbGwtPm9i
amVjdElEKCkpLmdldCgpIDogbnVsbHB0cjsKK30KKwogdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojph
Y2Nlc3NpYmlsaXR5VGV4dChWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+JiB0ZXh0cykgY29uc3QK
IHsKICAgICBhdXRvIGlzb2xhdGVkVGV4dHMgPSB2ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxBY2Nlc3Np
YmlsaXR5SXNvbGF0ZWRUcmVlVGV4dD4oQVhQcm9wZXJ0eU5hbWU6OkFjY2Vzc2liaWxpdHlUZXh0
KTsKQEAgLTc4NiwxMiArODE1LDcgQEAgaW50IEFYSXNvbGF0ZWRPYmplY3Q6OmludEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKIAogdm9pZCBBWElzb2xh
dGVkT2JqZWN0OjpmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pIGNvbnN0
CiB7Ci0gICAgVmVjdG9yPEFYSUQ+IGNoaWxkSURzID0gdmVjdG9yQXR0cmlidXRlVmFsdWU8QVhJ
RD4ocHJvcGVydHlOYW1lKTsKLSAgICBjaGlsZHJlbi5yZXNlcnZlQ2FwYWNpdHkoY2hpbGRJRHMu
c2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkSUQgOiBjaGlsZElEcykgewotICAg
ICAgICBpZiAoYXV0byBvYmplY3QgPSB0cmVlKCktPm5vZGVGb3JJRChjaGlsZElEKSkKLSAgICAg
ICAgICAgIGNoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChvYmplY3QpOwotICAgIH0KKyAgICBjaGls
ZHJlbiA9IHRyZWUoKS0+b2JqZWN0c0ZvcklEcyh2ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxBWElEPihw
cm9wZXJ0eU5hbWUpKTsKIH0KIAogdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojp1cGRhdGVCYWNraW5n
U3RvcmUoKQpAQCAtOTAyLDYgKzkyNiwxMiBAQCBib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQWNj
ZXNzaWJpbGl0eVNWR0VsZW1lbnQoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9v
bCBBWElzb2xhdGVkT2JqZWN0Ojppc0FjY2Vzc2liaWxpdHlUYWJsZUluc3RhbmNlKCkgY29uc3QK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJv
b2wgQVhJc29sYXRlZE9iamVjdDo6aXNBdHRhY2htZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC05NjgsMTIgKzk5OCw2IEBAIGJvb2wgQVhJc29sYXRl
ZE9iamVjdDo6aXNMYWJlbCgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEFY
SXNvbGF0ZWRPYmplY3Q6OmlzRGF0YVRhYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wgQVhJc29sYXRlZE9iamVjdDo6
aXNJbWFnZU1hcExpbmsoKSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZE9iamVjdC5oCmluZGV4IDJmNmQyZGQ1Mjc2ZjhkZWE4OTEzZTFlMTcyNzFiOTVi
M2NlZjk3NTQuLjExZTA5YzIwNGJjZjliMjJmNjZmMDUyNTA1YmUwMWU1ZmEyZGNjN2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0
ZWRPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJl
ZS9BWElzb2xhdGVkT2JqZWN0LmgKQEAgLTk4LDYgKzk4LDggQEAgcHJpdmF0ZToKICAgICAgICAg
QVJJQVRyZWVSb3dzLAogICAgICAgICBBUklBUm9sZUF0dHJpYnV0ZSwKICAgICAgICAgQVJJQU93
bnNFbGVtZW50cywKKyAgICAgICAgQVhDb2x1bW5Db3VudCwKKyAgICAgICAgQVhSb3dDb3VudCwK
ICAgICAgICAgQmxvY2txdW90ZUxldmVsLAogICAgICAgICBCb3VuZGluZ0JveFJlY3QsCiAgICAg
ICAgIENhbkhhdmVTZWxlY3RlZENoaWxkcmVuLApAQCAtMTEyLDkgKzExNCwxMyBAQCBwcml2YXRl
OgogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAg
Q2FyZXRCcm93c2luZ0VuYWJsZWQsCiAjZW5kaWYKKyAgICAgICAgQ2VsbHMsCiAgICAgICAgIENs
YXNzTGlzdCwKICAgICAgICAgQ2xpY2tQb2ludCwKICAgICAgICAgQ29sb3JWYWx1ZSwKKyAgICAg
ICAgQ29sdW1ucywKKyAgICAgICAgQ29sdW1uQ291bnQsCisgICAgICAgIENvbHVtbkhlYWRlcnMs
CiAgICAgICAgIENvbXB1dGVkTGFiZWwsCiAgICAgICAgIENvbXB1dGVkUm9sZVN0cmluZywKICAg
ICAgICAgQ3VycmVudFN0YXRlLApAQCAtMTM0LDYgKzE0MCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IEhhc0FSSUFWYWx1ZU5vdywKICAgICAgICAgSGFzQ2hpbGRyZW4sCiAgICAgICAgIEhhc1BvcHVw
LAorICAgICAgICBIZWFkZXJDb250YWluZXIsCiAgICAgICAgIEhlYWRpbmdMZXZlbCwKICAgICAg
ICAgSGVscFRleHQsCiAgICAgICAgIEhpZXJhcmNoaWNhbExldmVsLApAQCAtMTUzLDkgKzE2MCwx
MSBAQCBwcml2YXRlOgogICAgICAgICBJc0NoZWNrZWQsCiAgICAgICAgIElzQ29sbGFwc2VkLAog
ICAgICAgICBJc0NvbnRyb2wsCisgICAgICAgIElzRGF0YVRhYmxlLAogICAgICAgICBJc0Rlc2Ny
aXB0aW9uTGlzdCwKICAgICAgICAgSXNFbmFibGVkLAogICAgICAgICBJc0V4cGFuZGVkLAorICAg
ICAgICBJc0V4cG9zYWJsZSwKICAgICAgICAgSXNGaWVsZHNldCwKICAgICAgICAgSXNGaWxlVXBs
b2FkQnV0dG9uLAogICAgICAgICBJc0ZvY3VzZWQsCkBAIC0yMjIsNiArMjMxLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgSXNTaG93aW5nVmFsaWRhdGlvbk1lc3NhZ2UsCiAgICAgICAgIElzU2xpZGVy
LAogICAgICAgICBJc1N0eWxlRm9ybWF0R3JvdXAsCisgICAgICAgIElzVGFibGUsCiAgICAgICAg
IElzVGFibGVDZWxsLAogICAgICAgICBJc1RhYmxlQ29sdW1uLAogICAgICAgICBJc1RhYmxlUm93
LApAQCAtMjY5LDYgKzI3OSw5IEBAIHByaXZhdGU6CiAgICAgICAgIFJvbGVWYWx1ZSwKICAgICAg
ICAgUm9sZVBsYXRmb3JtU3RyaW5nLAogICAgICAgICBSb2xlRGVzY3JpcHRpb24sCisgICAgICAg
IFJvd3MsCisgICAgICAgIFJvd0NvdW50LAorICAgICAgICBSb3dIZWFkZXJzLAogICAgICAgICBT
ZWxlY3RlZENoaWxkcmVuLAogICAgICAgICBTZWxlY3RlZFJhZGlvQnV0dG9uLAogICAgICAgICBT
ZWxlY3RlZFRhYkl0ZW0sCkBAIC0yOTEsNiArMzA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3Vw
cG9ydHNQcmVzc0FjdGlvbiwKICAgICAgICAgU3VwcG9ydHNSYW5nZVZhbHVlLAogICAgICAgICBT
dXBwb3J0c1JlcXVpcmVkQXR0cmlidXRlLAorICAgICAgICBTdXBwb3J0c1NlbGVjdGVkUm93cywK
ICAgICAgICAgU3VwcG9ydHNTZXRTaXplLAogICAgICAgICBUYWJDaGlsZHJlbiwKICAgICAgICAg
VGFibGVMZXZlbCwKQEAgLTMwNSw2ICszMTksNyBAQCBwcml2YXRlOgogICAgICAgICBWYWxpZGF0
aW9uTWVzc2FnZSwKICAgICAgICAgVmVydGljYWxTY3JvbGxCYXIsCiAgICAgICAgIFZpc2libGVD
aGlsZHJlbiwKKyAgICAgICAgVmlzaWJsZVJvd3MsCiAgICAgfTsKICAgICAKICAgICB0eXBlZGVm
IHN0ZDo6cGFpcjxBWElELCBBWElEPiBBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTWF0aE11bHRp
c2NyaXB0UGFpcjsKQEAgLTMxNyw3ICszMzIsNyBAQCBwcml2YXRlOgogICAgIHVzaW5nIEF0dHJp
YnV0ZVZhbHVlVmFyaWFudCA9IFZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIFN0cmluZywgYm9vbCwg
aW50LCB1bnNpZ25lZCwgZG91YmxlLCBmbG9hdCwgdWludDY0X3QsIENvbG9yLCBVUkwsIExheW91
dFJlY3QsIEFYSUQsIEludFBvaW50LCBPcHRpb25TZXQ8U3BlYWtBcz4sIFZlY3RvcjxBY2Nlc3Np
YmlsaXR5SXNvbGF0ZWRUcmVlVGV4dD4sIFZlY3RvcjxBWElEPiwgVmVjdG9yPEFjY2Vzc2liaWxp
dHlJc29sYXRlZFRyZWVNYXRoTXVsdGlzY3JpcHRQYWlyPiwgVmVjdG9yPFN0cmluZz4+OwogICAg
IHZvaWQgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUsIEF0dHJpYnV0ZVZhbHVlVmFyaWFudCYm
LCBib29sIHNob3VsZFJlbW92ZSA9IGZhbHNlKTsKICAgICB2b2lkIHNldE9iamVjdFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lLCBBWENvcmVPYmplY3QqKTsKLSAgICB2b2lkIHNldE9iamVjdFZlY3Rv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lLCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsK
KyAgICB2b2lkIHNldE9iamVjdFZlY3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lLCBjb25zdCBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsKIAogICAgIGJvb2wgYm9vbEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcgc3RyaW5nQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwpAQCAtMzY0LDcgKzM3OSwyNSBAQCBwcml2
YXRlOgogICAgIGJvb2wgaXNPcmRlcmVkTGlzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNPcmRlcmVkTGlzdCk7IH0KICAgICBi
b29sIGlzRGVzY3JpcHRpb25MaXN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0Rlc2NyaXB0aW9uTGlzdCk7IH0KIAotICAgIGJv
b2wgaXNUYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgLy8gVGFi
bGUgc3VwcG9ydC4KKyAgICBib29sIGlzVGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzVGFibGUpOyB9CisgICAgYm9vbCBp
c0V4cG9zYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6SXNFeHBvc2FibGUpOyB9CisgICAgYm9vbCBpc0RhdGFUYWJsZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
SXNEYXRhVGFibGUpOyB9CisgICAgaW50IHRhYmxlTGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VGFibGVMZXZlbCk7IH0KKyAg
ICBib29sIHN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9v
bEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1NlbGVjdGVkUm93cyk7IH0K
KyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29sdW1ucygpIG92ZXJyaWRlIHsgcmV0
dXJuIHRyZWUoKS0+b2JqZWN0c0ZvcklEcyh2ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxBWElEPihBWFBy
b3BlcnR5TmFtZTo6Q29sdW1ucykpOyB9CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
IHJvd3MoKSBvdmVycmlkZSB7IHJldHVybiB0cmVlKCktPm9iamVjdHNGb3JJRHModmVjdG9yQXR0
cmlidXRlVmFsdWU8QVhJRD4oQVhQcm9wZXJ0eU5hbWU6OlJvd3MpKTsgfQorICAgIHVuc2lnbmVk
IGNvbHVtbkNvdW50KCkgb3ZlcnJpZGUgeyByZXR1cm4gdW5zaWduZWRBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6Q29sdW1uQ291bnQpOyB9CisgICAgdW5zaWduZWQgcm93Q291bnQoKSBv
dmVycmlkZSB7IHJldHVybiB1bnNpZ25lZEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpS
b3dDb3VudCk7IH0KKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHMoKSBvdmVy
cmlkZSB7IHJldHVybiB0cmVlKCktPm9iamVjdHNGb3JJRHModmVjdG9yQXR0cmlidXRlVmFsdWU8
QVhJRD4oQVhQcm9wZXJ0eU5hbWU6OkNlbGxzKSk7IH0KKyAgICBBWENvcmVPYmplY3QqIGNlbGxG
b3JDb2x1bW5BbmRSb3codW5zaWduZWQsIHVuc2lnbmVkKSBvdmVycmlkZTsKKyAgICBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29sdW1uSGVhZGVycygpIG92ZXJyaWRlIHsgcmV0dXJuIHRy
ZWUoKS0+b2JqZWN0c0ZvcklEcyh2ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxBWElEPihBWFByb3BlcnR5
TmFtZTo6Q29sdW1uSGVhZGVycykpOyB9CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
IHJvd0hlYWRlcnMoKSBvdmVycmlkZSB7IHJldHVybiB0cmVlKCktPm9iamVjdHNGb3JJRHModmVj
dG9yQXR0cmlidXRlVmFsdWU8QVhJRD4oQVhQcm9wZXJ0eU5hbWU6OlJvd0hlYWRlcnMpKTsgfQor
ICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB2aXNpYmxlUm93cygpIG92ZXJyaWRlIHsg
cmV0dXJuIHRyZWUoKS0+b2JqZWN0c0ZvcklEcyh2ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxBWElEPihB
WFByb3BlcnR5TmFtZTo6VmlzaWJsZVJvd3MpKTsgfQorICAgIEFYQ29yZU9iamVjdCogaGVhZGVy
Q29udGFpbmVyKCkgb3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OkhlYWRlckNvbnRhaW5lcik7IH0KKyAgICBpbnQgYXhDb2x1bW5Db3VudCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpB
WENvbHVtbkNvdW50KTsgfQorICAgIGludCBheFJvd0NvdW50KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkFYUm93Q291bnQpOyB9CisK
ICAgICBib29sIGlzVGFibGVSb3coKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzVGFibGVSb3cpOyB9CiAgICAgYm9vbCBpc1RhYmxl
Q29sdW1uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpJc1RhYmxlQ29sdW1uKTsgfQogICAgIGJvb2wgaXNUYWJsZUNlbGwoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Oklz
VGFibGVDZWxsKTsgfQpAQCAtNDA0LDcgKzQzNyw2IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIHZh
bGlkYXRpb25NZXNzYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlZhbGlkYXRpb25NZXNzYWdlKTsgfQogICAgIHVuc2lnbmVk
IGJsb2NrcXVvdGVMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHVuc2lnbmVkQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkJsb2NrcXVvdGVMZXZlbCk7IH0KICAgICBpbnQgaGVh
ZGluZ0xldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWU6OkhlYWRpbmdMZXZlbCk7IH0KLSAgICBpbnQgdGFibGVMZXZlbCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpUYWJs
ZUxldmVsKTsgfQogICAgIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBjaGVja2JveE9yUmFkaW9W
YWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlC
dXR0b25TdGF0ZT4oaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkFjY2Vzc2liaWxp
dHlCdXR0b25TdGF0ZSkpOyB9CiAgICAgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VmFs
dWVEZXNjcmlwdGlvbik7IH0KICAgICBmbG9hdCB2YWx1ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmxvYXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VmFsdWVGb3JS
YW5nZSk7IH0KQEAgLTY1Niw2ICs2ODgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNBY2Nlc3Np
YmlsaXR5U2Nyb2xsVmlldygpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaXNBY2Nlc3NpYmls
aXR5U1ZHUm9vdCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U1ZH
RWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5VGFibGVJ
bnN0YW5jZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaXNBdHRhY2htZW50RWxlbWVudCgp
IGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaXNOYXRpdmVJbWFnZSgpIGNvbnN0IG92ZXJyaWRl
OwogICAgIGJvb2wgaXNJbWFnZUJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNjY3LDcgKzcw
MCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1NsaWRlclRodW1iKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgYm9vbCBpc0lucHV0U2xpZGVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0xh
YmVsKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0RhdGFUYWJsZSgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIGJvb2wgaXNJbWFnZU1hcExpbmsoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29s
IGlzTmF0aXZlU3BpbkJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaXNTcGluQnV0
dG9uUGFydCgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCmluZGV4IDEx
NDE1NjdiMDA1MDQyZmRmM2Y2ZGJjNzdhMTg5NTI1NTgzNDEyOWUuLmU4MGNmNDNjMjkxMDFmYTJj
YjEyNzMwMDMzODgwYWZlN2IwYzVlMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKQEAgLTEz
Miw5ICsxMzIsMTkgQEAgUmVmUHRyPEFYSXNvbGF0ZWRUcmVlPiBBWElzb2xhdGVkVHJlZTo6dHJl
ZUZvclBhZ2VJRChQYWdlSWRlbnRpZmllciBwYWdlSUQpCiAKIFJlZlB0cjxBWElzb2xhdGVkT2Jq
ZWN0PiBBWElzb2xhdGVkVHJlZTo6bm9kZUZvcklEKEFYSUQgYXhJRCkgY29uc3QKIHsKLSAgICBp
ZiAoIWF4SUQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBtX3JlYWRlclRo
cmVhZE5vZGVNYXAuZ2V0KGF4SUQpOworICAgIHJldHVybiBheElEICE9IEludmFsaWRBWElEID8g
bV9yZWFkZXJUaHJlYWROb2RlTWFwLmdldChheElEKSA6IG51bGxwdHI7Cit9CisKK1ZlY3RvcjxS
ZWZQdHI8QVhDb3JlT2JqZWN0Pj4gQVhJc29sYXRlZFRyZWU6Om9iamVjdHNGb3JJRHMoVmVjdG9y
PEFYSUQ+IGF4SURzKSBjb25zdAoreworICAgIFZlY3RvcjxSZWZQdHI8QVhDb3JlT2JqZWN0Pj4g
cmVzdWx0KGF4SURzLnNpemUoKSk7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGF4SUQgOiBheElE
cykgeworICAgICAgICBpZiAoYXV0byBvYmplY3QgPSBub2RlRm9ySUQoYXhJRCkpCisgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKG9iamVjdCk7CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogUmVmUHRyPEFYSXNvbGF0ZWRPYmplY3Q+IEFYSXNvbGF0ZWRUcmVlOjpm
b2N1c2VkVUlFbGVtZW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCmluZGV4IGJiOGYwZDM4OGUwNjYw
NDRhNTJjMzNmNmVlYjY1Y2UxOTM3ZDFiMTMuLmI1MGE5NWRhZjlhZTJlNzViZjAxNTk0NjAyZjcx
YTQ0YmZlMmU1NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaApAQCAtNjAsNiArNjAsNyBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEFYSXNvbGF0ZWRPYmplY3Q+IGZvY3VzZWRV
SUVsZW1lbnQoKTsKICAgICBSZWZQdHI8QVhJc29sYXRlZE9iamVjdD4gbm9kZUZvcklEKEFYSUQp
IGNvbnN0OwogICAgIHN0YXRpYyBSZWZQdHI8QVhJc29sYXRlZE9iamVjdD4gbm9kZUluVHJlZUZv
cklEKEFYSXNvbGF0ZWRUcmVlSUQsIEFYSUQpOworICAgIFZlY3RvcjxSZWZQdHI8QVhDb3JlT2Jq
ZWN0Pj4gb2JqZWN0c0ZvcklEcyhWZWN0b3I8QVhJRD4pIGNvbnN0OwogCiAgICAgc3RydWN0IE5v
ZGVDaGFuZ2UgewogICAgICAgICBSZWY8QVhJc29sYXRlZE9iamVjdD4gbV9pc29sYXRlZE9iamVj
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0
Q2FjaGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENh
Y2hlTWFjLm1tCmluZGV4IDlkNDk0ZjFiNTNhZWI2Yjc4M2ZhZmRkMmE1NjMyYjA1MGI3YTM1ODMu
LmNiYjhjZDlkNTg5YzkxMGZlYmM4Zjc0YTg3OGNlNjVjMzY2OWE1MjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQpAQCAt
MzAzLDcgKzMwMyw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0
aW9uKEFYQ29yZU9iamVjdCogb2JqLCBBWE5vdGlmaWNhdGlvbiBuCiAgICAgICAgICAgICBtYWNO
b3RpZmljYXRpb24gPSBAIkFYSW52YWxpZFN0YXR1c0NoYW5nZWQiOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQVhTZWxlY3RlZENoaWxkcmVuQ2hhbmdlZDoKLSAgICAgICAgICAg
IGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpvYmopICYmIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZT4oKm9iaikuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAgICAg
ICAgICAgaWYgKG9iai0+aXNUYWJsZSgpICYmIG9iai0+aXNFeHBvc2FibGUoKSkKICAgICAgICAg
ICAgICAgICBtYWNOb3RpZmljYXRpb24gPSBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NDaGFu
Z2VkTm90aWZpY2F0aW9uOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG1hY05v
dGlmaWNhdGlvbiA9IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRyZW5DaGFuZ2VkTm90aWZp
Y2F0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCA0NmUy
NmE2YzJiN2E1MmFiMjE4OGZkY2IyNTY2N2M4NDY2ZjgxNjQyLi44NzVkM2VkODIwYTdiNTI3NDE0
MTA3MjNkOGQzOWNhZDc0M2MyMzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbQpAQCAtMTM3MiwxMDEgKzEzNzIsMTAyIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVN
RU5UQVRJT05TX0VORAogCiAtIChOU0FycmF5KilhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZU5hbWVzCiB7Ci0gICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdCkKKyAgICBhdXRvKiBi
YWNraW5nT2JqZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3Q7CisgICAgaWYgKCFiYWNraW5nT2Jq
ZWN0KQogICAgICAgICByZXR1cm4gbmlsOwotICAgIAorCiAgICAgTlNNdXRhYmxlQXJyYXkgKmFk
ZGl0aW9uYWwgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+c3VwcG9ydHNBUklBT3ducygpKQorICAgIGlmIChiYWNraW5nT2JqZWN0LT5zdXBw
b3J0c0FSSUFPd25zKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlPd25zQXR0cmlidXRlXTsKLSAgICAKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzVG9nZ2xlQnV0dG9uKCkpCisKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNUb2dnbGVCdXR0
b24oKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZhbHVl
QXR0cmlidXRlXTsKLSAgICAKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRz
RXhwYW5kZWQoKSB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTdW1tYXJ5KCkpCisKKyAgICBp
ZiAoYmFja2luZ09iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpIHx8IGJhY2tpbmdPYmplY3QtPmlz
U3VtbWFyeSgpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
RXhwYW5kZWRBdHRyaWJ1dGVdOwotICAgIAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNTY3JvbGxiYXIoKQotICAgICAgICB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNSYWRpb0dy
b3VwKCkKLSAgICAgICAgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU3BsaXR0ZXIoKQotICAg
ICAgICB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUb29sYmFyKCkpCisKKyAgICBpZiAoYmFj
a2luZ09iamVjdC0+aXNTY3JvbGxiYXIoKQorICAgICAgICB8fCBiYWNraW5nT2JqZWN0LT5pc1Jh
ZGlvR3JvdXAoKQorICAgICAgICB8fCBiYWNraW5nT2JqZWN0LT5pc1NwbGl0dGVyKCkKKyAgICAg
ICAgfHwgYmFja2luZ09iamVjdC0+aXNUb29sYmFyKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV07Ci0gICAgCi0gICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c0FSSUFEcmFnZ2luZygpKQorCisgICAg
aWYgKGJhY2tpbmdPYmplY3QtPnN1cHBvcnRzQVJJQURyYWdnaW5nKCkpCiAgICAgICAgIFthZGRp
dGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlHcmFiYmVkQXR0cmlidXRlXTsKLSAgICAK
LSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzQVJJQURyb3BwaW5nKCkpCisK
KyAgICBpZiAoYmFja2luZ09iamVjdC0+c3VwcG9ydHNBUklBRHJvcHBpbmcoKSkKICAgICAgICAg
W2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRl
XTsKLSAgICAKLSAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdP
YmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2Jq
ZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkgJiYgZG93bmNhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpLnN1cHBvcnRzU2VsZWN0ZWRSb3dz
KCkpCisKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNUYWJsZSgpICYmIGJhY2tpbmdPYmplY3Qt
PmlzRXhwb3NhYmxlKCkgJiYgYmFja2luZ09iamVjdC0+c3VwcG9ydHNTZWxlY3RlZFJvd3MoKSkK
ICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93
c0F0dHJpYnV0ZV07Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0
c0xpdmVSZWdpb24oKSkgeworCisgICAgaWYgKGJhY2tpbmdPYmplY3QtPnN1cHBvcnRzTGl2ZVJl
Z2lvbigpKSB7CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlB
UklBTGl2ZUF0dHJpYnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vz
c2liaWxpdHlBUklBUmVsZXZhbnRBdHRyaWJ1dGVdOwogICAgIH0KLSAgICAKLSAgICBpZiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzU2V0U2l6ZSgpKQorCisgICAgaWYgKGJhY2tpbmdP
YmplY3QtPnN1cHBvcnRzU2V0U2l6ZSgpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5QVJJQVNldFNpemVBdHRyaWJ1dGVdOwotICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+c3VwcG9ydHNQb3NJblNldCgpKQorCisgICAgaWYgKGJhY2tpbmdPYmplY3Qt
PnN1cHBvcnRzUG9zSW5TZXQoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eUFSSUFQb3NJblNldEF0dHJpYnV0ZV07Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0
eVNvcnREaXJlY3Rpb24gc29ydERpcmVjdGlvbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zb3J0
RGlyZWN0aW9uKCk7CisKKyAgICBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbiBzb3J0RGlyZWN0
aW9uID0gYmFja2luZ09iamVjdC0+c29ydERpcmVjdGlvbigpOwogICAgIGlmIChzb3J0RGlyZWN0
aW9uICE9IEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uOjpOb25lICYmIHNvcnREaXJlY3Rpb24g
IT0gQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb246OkludmFsaWQpCiAgICAgICAgIFthZGRpdGlv
bmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uQXR0cmlidXRlXTsKLSAg
ICAKKwogICAgIC8vIElmIGFuIG9iamVjdCBpcyBhIGNoaWxkIG9mIGEgbGl2ZSByZWdpb24sIHRo
ZW4gYWRkIHRoZXNlCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0luc2lkZUxpdmVS
ZWdpb24oKSkKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNJbnNpZGVMaXZlUmVnaW9uKCkpCiAg
ICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBUklBQXRvbWljQXR0
cmlidXRlXTsKKwogICAgIC8vIEFsbCBvYmplY3RzIHNob3VsZCBleHBvc2UgdGhlIEFSSUEgYnVz
eSBhdHRyaWJ1dGUgKEFSSUEgMS4xIHdpdGggSVNTVUUtNTM4KS4KICAgICBbYWRkaXRpb25hbCBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RWxlbWVudEJ1c3lBdHRyaWJ1dGVdOwotICAgIAorCiAg
ICAgLy8gUG9wdXAgYnV0dG9ucyBvbiB0aGUgTWFjIGV4cG9zZSB0aGUgdmFsdWUgYXR0cmlidXRl
LgotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQb3BVcEJ1dHRvbigpKSB7CisgICAg
aWYgKGJhY2tpbmdPYmplY3QtPmlzUG9wVXBCdXR0b24oKSkKICAgICAgICAgW2FkZGl0aW9uYWwg
YWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXTsKLSAgICB9CiAKLSAgICBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUoKSkKKyAg
ICBpZiAoYmFja2luZ09iamVjdC0+c3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpKQogICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RGF0ZXRpbWVWYWx1ZUF0dHJp
YnV0ZV07Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c1JlcXVp
cmVkQXR0cmlidXRlKCkpIHsKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5zdXBwb3J0c1JlcXVp
cmVkQXR0cmlidXRlKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlSZXF1aXJlZEF0dHJpYnV0ZV07Ci0gICAgfQotICAgIAotICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aGFzUG9wdXAoKSkKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5oYXNQb3B1
cCgpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SGFzUG9w
dXBBdHRyaWJ1dGVdOwotICAgIAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRo
Um9vdCgpKSB7CisKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNNYXRoUm9vdCgpKSB7CiAgICAg
ICAgIC8vIFRoZSBpbmRleCBvZiBhIHNxdWFyZSByb290IGlzIGFsd2F5cyBrbm93biwgc28gdGhl
cmUncyBubyBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIGl0LgotICAgICAgICBpZiAoIXNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc01hdGhTcXVhcmVSb290KCkpCisgICAgICAgIGlmICghYmFja2luZ09i
amVjdC0+aXNNYXRoU3F1YXJlUm9vdCgpKQogICAgICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhSb290SW5kZXhBdHRyaWJ1dGVdOwogICAgICAgICBbYWRk
aXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RSYWRpY2FuZEF0dHJpYnV0
ZV07Ci0gICAgfSBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoRnJhY3Rpb24o
KSkgeworICAgIH0gZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkgewog
ICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9u
TnVtZXJhdG9yQXR0cmlidXRlXTsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eU1hdGhGcmFjdGlvbkRlbm9taW5hdG9yQXR0cmlidXRlXTsKICAgICAgICAgW2Fk
ZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhMaW5lVGhpY2tuZXNzQXR0cmli
dXRlXTsKLSAgICB9IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhTdWJzY3Jp
cHRTdXBlcnNjcmlwdCgpKSB7CisgICAgfSBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc01hdGhT
dWJzY3JpcHRTdXBlcnNjcmlwdCgpKSB7CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlNYXRoQmFzZUF0dHJpYnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFsIGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoU3Vic2NyaXB0QXR0cmlidXRlXTsKICAgICAgICAg
W2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhTdXBlcnNjcmlwdEF0dHJp
YnV0ZV07Ci0gICAgfSBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoVW5kZXJP
dmVyKCkpIHsKKyAgICB9IGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzTWF0aFVuZGVyT3Zlcigp
KSB7CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoQmFz
ZUF0dHJpYnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlNYXRoVW5kZXJBdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5TWF0aE92ZXJBdHRyaWJ1dGVdOwotICAgIH0gZWxzZSBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzTWF0aEZlbmNlZCgpKSB7CisgICAgfSBlbHNlIGlmIChiYWNraW5nT2Jq
ZWN0LT5pc01hdGhGZW5jZWQoKSkgewogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5TWF0aEZlbmNlZE9wZW5BdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25h
bCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZENsb3NlQXR0cmlidXRlXTsKLSAg
ICB9IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhNdWx0aXNjcmlwdCgpKSB7
CisgICAgfSBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc01hdGhNdWx0aXNjcmlwdCgpKSB7CiAg
ICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoQmFzZUF0dHJp
YnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRo
UHJlc2NyaXB0c0F0dHJpYnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlNYXRoUG9zdHNjcmlwdHNBdHRyaWJ1dGVdOwogICAgIH0KLSAgICAKLSAgICBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzUGF0aCgpKQorCisgICAgaWYgKGJhY2tp
bmdPYmplY3QtPnN1cHBvcnRzUGF0aCgpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5UGF0aEF0dHJpYnV0ZV07Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkVGV4dFZhbHVlKCkpCisKKyAgICBpZiAoYmFja2lu
Z09iamVjdC0+c3VwcG9ydHNFeHBhbmRlZFRleHRWYWx1ZSgpKQogICAgICAgICBbYWRkaXRpb25h
bCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RXhwYW5kZWRUZXh0VmFsdWVBdHRyaWJ1dGVdOwot
ICAgIAorCiAgICAgcmV0dXJuIGFkZGl0aW9uYWw7CiB9CiAKQEAgLTE0NzQsMTIgKzE0NzUsMTMg
QEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KIC0gKE5TQXJyYXkqKWFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcwogQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiB7Ci0gICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAg
IGF1dG8qIGJhY2tpbmdPYmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdDsKKyAgICBpZiAoIWJh
Y2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5p
c0F0dGFjaG1lbnQoKSkKICAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXTsKLSAgICAKKwogICAgIHN0YXRpYyBOU0FycmF5KiBh
dHRyaWJ1dGVzID0gbmlsOwogICAgIHN0YXRpYyBOU0FycmF5KiBhbmNob3JBdHRycyA9IG5pbDsK
ICAgICBzdGF0aWMgTlNBcnJheSogd2ViQXJlYUF0dHJzID0gbmlsOwpAQCAtMTgwMyw4NiArMTgw
NSw3NyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgc2Ny
b2xsVmlld0F0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07
CiAgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CiAgICAgfQotICAgIAorCiAgICAgTlNBcnJh
eSAqb2JqZWN0QXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkKKworICAgIGlmIChiYWNraW5nT2JqZWN0
LT5pc1Bhc3N3b3JkRmllbGQoKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHBhc3N3b3Jk
RmllbGRBdHRyczsKLSAgICAKLSAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNX
ZWJBcmVhKCkpCisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNXZWJBcmVhKCkpCiAgICAg
ICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB3ZWJBcmVhQXR0cnM7Ci0gICAgCi0gICAgZWxzZSBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKKyAgICBlbHNlIGlmIChiYWNr
aW5nT2JqZWN0LT5pc1RleHRDb250cm9sKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0
ZXh0QXR0cnM7Ci0gICAgCi0gICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTGlu
aygpIHx8IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0ltYWdlKCkpCisgICAgZWxzZSBpZiAoYmFj
a2luZ09iamVjdC0+aXNMaW5rKCkgfHwgYmFja2luZ09iamVjdC0+aXNJbWFnZSgpKQogICAgICAg
ICBvYmplY3RBdHRyaWJ1dGVzID0gYW5jaG9yQXR0cnM7Ci0gICAgCi0gICAgZWxzZSBpZiAoaXM8
QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpICYmIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5pc0V4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNUYWJsZSgp
ICYmIGJhY2tpbmdPYmplY3QtPmlzRXhwb3NhYmxlKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0
ZXMgPSB0YWJsZUF0dHJzOwotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Rh
YmxlQ29sdW1uKCkpCisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNUYWJsZUNvbHVtbigp
KQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFibGVDb2xBdHRyczsKLSAgICBlbHNlIGlm
IChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUYWJsZUNlbGwoKSkKKyAgICBlbHNlIGlmIChiYWNr
aW5nT2JqZWN0LT5pc1RhYmxlQ2VsbCgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFi
bGVDZWxsQXR0cnM7Ci0gICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGFibGVS
b3coKSkgeworICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzVGFibGVSb3coKSkgewogICAg
ICAgICAvLyBBbiBBUklBIHRhYmxlIHJvdyBjYW4gYmUgY29sbGFwc2VkIGFuZCBleHBhbmRlZCwg
c28gaXQgbmVlZHMgdGhlIGV4dHJhIGF0dHJpYnV0ZXMuCi0gICAgICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNBUklBVHJlZUdyaWRSb3coKSkKKyAgICAgICAgaWYgKGJhY2tpbmdPYmpl
Y3QtPmlzQVJJQVRyZWVHcmlkUm93KCkpCiAgICAgICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0g
b3V0bGluZVJvd0F0dHJzOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBvYmplY3RBdHRyaWJ1
dGVzID0gdGFibGVSb3dBdHRyczsKLSAgICB9IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc1RyZWUoKSkKKyAgICB9IGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzVHJlZSgpKQogICAg
ICAgICBvYmplY3RBdHRyaWJ1dGVzID0gb3V0bGluZUF0dHJzOwotICAgIGVsc2UgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc1RyZWVJdGVtKCkpCisgICAgZWxzZSBpZiAoYmFja2luZ09iamVj
dC0+aXNUcmVlSXRlbSgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gb3V0bGluZVJvd0F0
dHJzOwotICAgIAotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xpc3RCb3go
KSkKKyAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc0xpc3RCb3goKSkKICAgICAgICAgb2Jq
ZWN0QXR0cmlidXRlcyA9IGxpc3RCb3hBdHRyczsKLSAgICBlbHNlIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNMaXN0KCkpCisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNMaXN0KCkp
CiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBsaXN0QXR0cnM7Ci0gICAgCi0gICAgZWxzZSBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQ29tYm9Cb3goKSkKKyAgICBlbHNlIGlmIChiYWNr
aW5nT2JqZWN0LT5pc0NvbWJvQm94KCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBjb21i
b0JveEF0dHJzOwotICAgIAotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1By
b2dyZXNzSW5kaWNhdG9yKCkgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU2xpZGVyKCkpCisg
ICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNQcm9ncmVzc0luZGljYXRvcigpIHx8IGJhY2tp
bmdPYmplY3QtPmlzU2xpZGVyKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSByYW5nZUF0
dHJzOwotICAgIAogICAgIC8vIFRoZXNlIGFyZSBwcm9jZXNzZWQgaW4gb3JkZXIgYmVjYXVzZSBh
biBpbnB1dCBpbWFnZSBpcyBhIGJ1dHRvbiwgYW5kIGEgYnV0dG9uIGlzIGEgY29udHJvbC4KLSAg
ICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNJbnB1dEltYWdlKCkpCisgICAgZWxz
ZSBpZiAoYmFja2luZ09iamVjdC0+aXNJbnB1dEltYWdlKCkpCiAgICAgICAgIG9iamVjdEF0dHJp
YnV0ZXMgPSBpbnB1dEltYWdlQXR0cnM7Ci0gICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzQnV0dG9uKCkpCisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNCdXR0b24oKSkK
ICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGJ1dHRvbkF0dHJzOwotICAgIGVsc2UgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc0NvbnRyb2woKSkKKyAgICBlbHNlIGlmIChiYWNraW5nT2Jq
ZWN0LT5pc0NvbnRyb2woKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGNvbnRyb2xBdHRy
czsKLSAgICAKLSAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNHcm91cCgpIHx8
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xpc3RJdGVtKCkpCisKKyAgICBlbHNlIGlmIChiYWNr
aW5nT2JqZWN0LT5pc0dyb3VwKCkgfHwgYmFja2luZ09iamVjdC0+aXNMaXN0SXRlbSgpKQogICAg
ICAgICBvYmplY3RBdHRyaWJ1dGVzID0gZ3JvdXBBdHRyczsKLSAgICBlbHNlIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNUYWJMaXN0KCkpCisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+
aXNUYWJMaXN0KCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJMaXN0QXR0cnM7Ci0g
ICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU2Nyb2xsVmlldygpKQorICAgIGVs
c2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzU2Nyb2xsVmlldygpKQogICAgICAgICBvYmplY3RBdHRy
aWJ1dGVzID0gc2Nyb2xsVmlld0F0dHJzOwotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc1NwaW5CdXR0b24oKSkKKyAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc1NwaW5C
dXR0b24oKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGluY3JlbWVudG9yQXR0cnM7Ci0g
ICAgCi0gICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWVudSgpKQorICAgIGVs
c2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzTWVudSgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVz
ID0gbWVudUF0dHJzOwotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01lbnVC
YXIoKSkKKyAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc01lbnVCYXIoKSkKICAgICAgICAg
b2JqZWN0QXR0cmlidXRlcyA9IG1lbnVCYXJBdHRyczsKLSAgICBlbHNlIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNNZW51QnV0dG9uKCkpCisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+
aXNNZW51QnV0dG9uKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBtZW51QnV0dG9uQXR0
cnM7Ci0gICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWVudUl0ZW0oKSkKKyAg
ICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc01lbnVJdGVtKCkpCiAgICAgICAgIG9iamVjdEF0
dHJpYnV0ZXMgPSBtZW51SXRlbUF0dHJzOwotICAgIAorCiAgICAgTlNBcnJheSAqYWRkaXRpb25h
bEF0dHJpYnV0ZXMgPSBbc2VsZiBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVz
XTsKICAgICBpZiAoW2FkZGl0aW9uYWxBdHRyaWJ1dGVzIGNvdW50XSkKICAgICAgICAgb2JqZWN0
QXR0cmlidXRlcyA9IFtvYmplY3RBdHRyaWJ1dGVzIGFycmF5QnlBZGRpbmdPYmplY3RzRnJvbUFy
cmF5OmFkZGl0aW9uYWxBdHRyaWJ1dGVzXTsKLSAgICAKKwogICAgIC8vIE9ubHkgZXhwb3NlIEFY
QVJJQUN1cnJlbnQgYXR0cmlidXRlIHdoZW4gdGhlIGVsZW1lbnQgaXMgc2V0IHRvIGJlIGN1cnJl
bnQgaXRlbS4KLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmN1cnJlbnRTdGF0ZSgpICE9
IEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkZhbHNlKQorICAgIGlmIChiYWNraW5nT2JqZWN0
LT5jdXJyZW50U3RhdGUoKSAhPSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlOjpGYWxzZSkKICAg
ICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IFtvYmplY3RBdHRyaWJ1dGVzIGFycmF5QnlBZGRpbmdP
YmplY3RzRnJvbUFycmF5OkBbIE5TQWNjZXNzaWJpbGl0eUFSSUFDdXJyZW50QXR0cmlidXRlIF1d
OwotICAgIAorCiAgICAgLy8gQXBwS2l0IG5lZWRzIHRvIGtub3cgdGhlIHNjcmVlbiBoZWlnaHQg
aW4gb3JkZXIgdG8gZG8gdGhlIGNvb3JkaW5hdGUgY29udmVyc2lvbi4KICAgICBvYmplY3RBdHRy
aWJ1dGVzID0gW29iamVjdEF0dHJpYnV0ZXMgYXJyYXlCeUFkZGluZ09iamVjdHNGcm9tQXJyYXk6
QFsgTlNBY2Nlc3NpYmlsaXR5UHJpbWFyeVNjcmVlbkhlaWdodEF0dHJpYnV0ZSBdXTsKLSAgICAK
KwogICAgIHJldHVybiBvYmplY3RBdHRyaWJ1dGVzOwogfQogCkBAIC0yMzc3LDIxNCArMjM3MCwy
MTYgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiB7CiAgICAgaWYgKCFb
c2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQogICAgICAgICByZXR1cm4gbmlsOwotICAg
IAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNEZXRhY2hlZEZyb21QYXJlbnQoKSkK
KyAgICAvLyBGSVhNRTogbWFrZSB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmUgYWJvdmUgcmV0dXJu
IHRoZSBiYWNraW5nIG9iamVjdC4KKyAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gc2VsZi5heEJh
Y2tpbmdPYmplY3Q7CisKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNEZXRhY2hlZEZyb21QYXJl
bnQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGVdKQogICAgICAg
ICByZXR1cm4gW3NlbGYgcm9sZV07Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTdWJyb2xlQXR0cmlidXRlXSkKICAgICAgICAg
cmV0dXJuIFtzZWxmIHN1YnJvbGVdOwotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlXSkK
ICAgICAgICAgcmV0dXJuIFtzZWxmIHJvbGVEZXNjcmlwdGlvbl07CiAKICAgICAvLyBBWEFSSUFS
b2xlIGlzIG9ubHkgdXNlZCBieSBEdW1wUmVuZGVyVHJlZSAoc28gZmFyKS4KICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhBUklBUm9sZSJdKQogICAgICAgICByZXR1
cm4gW3NlbGYgY29tcHV0ZWRSb2xlU3RyaW5nXTsKLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZV0pIHsK
LSAgICAgICAgCisKICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiB0aGUgcGFyZW50IG9mIHRo
ZSBBWFdlYkFyZWEsIGlmIHRoaXMgaXMgYSB3ZWIgYXJlYS4KICAgICAgICAgaWQgc2Nyb2xsVmll
d1BhcmVudCA9IFtzZWxmIHNjcm9sbFZpZXdQYXJlbnRdOwogICAgICAgICBpZiAoc2Nyb2xsVmll
d1BhcmVudCkKICAgICAgICAgICAgIHJldHVybiBzY3JvbGxWaWV3UGFyZW50OwotICAgICAgICAK
KwogICAgICAgICAvLyBUcmVlIGl0ZW0gKGNoYW5nZWQgdG8gQVhSb3dzKSBjYW4gb25seSByZXBv
cnQgdGhlIHRyZWUgKEFYT3V0bGluZSkgYXMgaXRzIHBhcmVudC4KLSAgICAgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKLSAgICAgICAgICAgIGF1dG8gcGFyZW50
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgICAg
ICBpZiAoYmFja2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKSB7CisgICAgICAgICAgICBhdXRvIHBh
cmVudCA9IGJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOwogICAgICAgICAg
ICAgd2hpbGUgKHBhcmVudCkgewogICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzVHJlZSgp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CiAgICAgICAg
ICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYXV0byBwYXJlbnQgPSBzZWxm
LmF4QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CisKKyAgICAgICAgYXV0
byBwYXJlbnQgPSBiYWNraW5nT2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKICAgICAg
ICAgaWYgKCFwYXJlbnQpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAKKwogICAg
ICAgICAvLyBJbiBXZWJLaXQxLCB0aGUgc2Nyb2xsIHZpZXcgaXMgcHJvdmlkZWQgYnkgdGhlIHN5
c3RlbSAodGhlIGF0dGFjaG1lbnQgdmlldyksIHNvIHRoZSBwYXJlbnQKICAgICAgICAgLy8gc2hv
dWxkIGJlIHJlcG9ydGVkIGRpcmVjdGx5IGFzIHN1Y2guCi0gICAgICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNXZWJBcmVhKCkgJiYgcGFyZW50LT5pc0F0dGFjaG1lbnQoKSkKKyAgICAg
ICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpICYmIHBhcmVudC0+aXNBdHRhY2htZW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gW3BhcmVudC0+d3JhcHBlcigpIGF0dGFjaG1lbnRWaWV3
XTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwogICAgIH0K
LSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNz
aWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSB8fCBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6IE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuSW5OYXZpZ2F0aW9uT3JkZXJBdHRyaWJ1dGVdKSB7
CiAgICAgICAgIGlmICghc2VsZi5jaGlsZHJlblZlY3RvclNpemUpIHsKICAgICAgICAgICAgIE5T
QXJyYXkqIGNoaWxkcmVuID0gW3NlbGYgcmVuZGVyV2lkZ2V0Q2hpbGRyZW5dOwogICAgICAgICAg
ICAgaWYgKGNoaWxkcmVuICE9IG5pbCkKICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47
CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gVGhlIHRyZWUncyAoQVhPdXRsaW5l
KSBjaGlsZHJlbiBhcmUgc3VwcG9zZWQgdG8gYmUgaXRzIHJvd3MgYW5kIGNvbHVtbnMuCiAgICAg
ICAgIC8vIFRoZSBBUklBIHNwZWMgZG9lc24ndCBoYXZlIGNvbHVtbnMsIHNvIHdlIGp1c3QgbmVl
ZCByb3dzLgotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZSgpKQorICAg
ICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNUcmVlKCkpCiAgICAgICAgICAgICByZXR1cm4gW3Nl
bGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1
dGVdOwotICAgICAgICAKKwogICAgICAgICAvLyBBIHRyZWUgaXRlbSBzaG91bGQgb25seSBleHBv
c2UgaXRzIGNvbnRlbnQgYXMgaXRzIGNoaWxkcmVuIChub3QgaXRzIHJvd3MpCi0gICAgICAgIGlm
IChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKSB7CisgICAgICAgIGlmIChiYWNr
aW5nT2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb250ZW50Q29weTsKLSAgICAgICAgICAg
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhVHJlZUl0ZW1Db250ZW50KGNvbnRlbnRDb3B5KTsK
KyAgICAgICAgICAgIGJhY2tpbmdPYmplY3QtPmFyaWFUcmVlSXRlbUNvbnRlbnQoY29udGVudENv
cHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudENvcHkpOwog
ICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzZWxmLmNoaWxkcmVuVmVjdG9y
QXJyYXk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKLSAgICAg
ICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jYW5IYXZlU2VsZWN0ZWRDaGlsZHJlbigpKSB7
CisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5jYW5IYXZlU2VsZWN0ZWRDaGlsZHJlbigpKSB7
CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbkNvcHk7Ci0gICAgICAgICAgICBzZWxmLmF4QmFja2luZ09i
amVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuQ29weSk7CisgICAgICAgICAg
ICBiYWNraW5nT2JqZWN0LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsK
ICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHNlbGVjdGVkQ2hpbGRyZW5Db3B5
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KLSAgICAKKwogICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZpc2libGVD
aGlsZHJlbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c0xpc3RCb3goKSkgeworICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNMaXN0Qm94KCkpIHsK
ICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciB2aXNpYmxlQ2hpbGRyZW5Db3B5OwotICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPnZpc2libGVDaGlsZHJlbih2aXNpYmxlQ2hpbGRyZW5Db3B5KTsKKyAgICAgICAgICAgIGJh
Y2tpbmdPYmplY3QtPnZpc2libGVDaGlsZHJlbih2aXNpYmxlQ2hpbGRyZW5Db3B5KTsKICAgICAg
ICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHZpc2libGVDaGlsZHJlbkNvcHkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xpc3QoKSkKKyAg
ICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuIFtz
ZWxmIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0
dHJpYnV0ZV07CiAKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9Ci0gICAgCi0gICAgCi0gICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSkgeworCisKKyAgICBpZiAoYmFj
a2luZ09iamVjdC0+aXNXZWJBcmVhKCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpAIkFYTGlua1VJRWxlbWVudHMiXSkgewogICAgICAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGxpbmtzOwotICAgICAg
ICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdD4oKnNlbGYuYXhCYWNraW5n
T2JqZWN0KS5nZXREb2N1bWVudExpbmtzKGxpbmtzKTsKKyAgICAgICAgICAgIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KCpiYWNraW5nT2JqZWN0KS5nZXREb2N1bWVudExpbmtz
KGxpbmtzKTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGxpbmtzKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhM
b2FkZWQiXSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmlzTG9hZGVkKCldOworICAgICAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoQm9vbDpiYWNraW5nT2JqZWN0LT5pc0xvYWRlZCgpXTsKICAgICAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYTGF5b3V0Q291bnQiXSkKLSAg
ICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpzZWxmLmF4QmFja2luZ09i
amVjdC0+bGF5b3V0Q291bnQoKV07CisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhJbnQ6YmFja2luZ09iamVjdC0+bGF5b3V0Q291bnQoKV07CiAgICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TG9hZGluZ1Byb2dyZXNz
QXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZTpzZWxmLmF4QmFja2luZ09iamVjdC0+ZXN0aW1hdGVkTG9hZGluZ1Byb2dyZXNzKCldOworICAg
ICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmJhY2tpbmdPYmplY3Qt
PmVzdGltYXRlZExvYWRpbmdQcm9ncmVzcygpXTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlQcmV2ZW50S2V5Ym9hcmRET01FdmVudERp
c3BhdGNoQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPnByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0
Y2goKV07CisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmJhY2tp
bmdPYmplY3QtPnByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2goKV07CiAgICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2FyZXRCcm93
c2luZ0VuYWJsZWRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1i
ZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKV07
CisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmJhY2tpbmdPYmpl
Y3QtPmNhcmV0QnJvd3NpbmdFbmFibGVkKCldOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVdlYlNlc3Npb25JREF0dHJpYnV0ZV0pCi0g
ICAgICAgICAgICByZXR1cm4gQChzZWxmLmF4QmFja2luZ09iamVjdC0+c2Vzc2lvbklEKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIEAoYmFja2luZ09iamVjdC0+c2Vzc2lvbklEKCkpOwogICAgIH0K
LSAgICAKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgewor
CisgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgewogICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlOdW1iZXJPZkNo
YXJhY3RlcnNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPnRleHRMZW5ndGgoKTsKKyAgICAgICAgICAgIGludCBsZW5ndGggPSBiYWNr
aW5nT2JqZWN0LT50ZXh0TGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAobGVuZ3RoIDwgMCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoVW5zaWduZWRJbnQ6bGVuZ3RoXTsKICAgICAgICAgfQogICAgICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRB
dHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPnNlbGVjdGVkVGV4dCgpOworICAgICAgICAgICAgU3RyaW5nIHNlbGVjdGVk
VGV4dCA9IGJhY2tpbmdPYmplY3QtPnNlbGVjdGVkVGV4dCgpOwogICAgICAgICAgICAgaWYgKHNl
bGVjdGVkVGV4dC5pc051bGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAg
ICAgICAgcmV0dXJuIChOU1N0cmluZyopc2VsZWN0ZWRUZXh0OwogICAgICAgICB9CiAgICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVj
dGVkVGV4dFJhbmdlQXR0cmlidXRlXSkgewotICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4
dFJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNlbGVjdGVkVGV4dFJhbmdlKCk7CisgICAg
ICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5zZWxlY3Rl
ZFRleHRSYW5nZSgpOwogICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdl
Ok5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCldOwogICAgICAg
ICB9CiAgICAgICAgIC8vIFRPRE86IEdldCBhY3R1YWwgdmlzaWJsZSByYW5nZS4gPHJkYXI6Ly9w
cm9ibGVtLzQ3MTIxMDE+CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6IE5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZV0pCi0gICAg
ICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpID8g
bmlsIDogW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKDAsIHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT50ZXh0TGVuZ3RoKCkpXTsKKyAgICAgICAgICAgIHJldHVybiBiYWNraW5nT2Jq
ZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSA/IG5pbCA6IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOiBO
U01ha2VSYW5nZSgwLCBiYWNraW5nT2JqZWN0LT50ZXh0TGVuZ3RoKCkpXTsKICAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5SW5zZXJ0aW9u
UG9pbnRMaW5lTnVtYmVyQXR0cmlidXRlXSkgewogICAgICAgICAgICAgLy8gaWYgc2VsZWN0aW9u
RW5kID4gMCwgdGhlbiB0aGVyZSBpcyBzZWxlY3RlZCB0ZXh0IGFuZCB0aGlzIHF1ZXN0aW9uIHNo
b3VsZCBub3QgYmUgYW5zd2VyZWQKLSAgICAgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVj
dC0+aXNQYXNzd29yZEZpZWxkKCkgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNlbGVjdGlvbkVu
ZCgpID4gMCkKKyAgICAgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQo
KSB8fCBiYWNraW5nT2JqZWN0LT5zZWxlY3Rpb25FbmQoKSA+IDApCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBmb2N1c2VkT2JqZWN0
ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdD4oc2VsZi5heEJhY2tpbmdPYmplY3QtPmZv
Y3VzZWRVSUVsZW1lbnQoKSk7Ci0gICAgICAgICAgICBpZiAoZm9jdXNlZE9iamVjdCAhPSBzZWxm
LmF4QmFja2luZ09iamVjdCkKKworICAgICAgICAgICAgYXV0byBmb2N1c2VkT2JqZWN0ID0gZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdD4oYmFja2luZ09iamVjdC0+Zm9jdXNlZFVJRWxlbWVu
dCgpKTsKKyAgICAgICAgICAgIGlmIChmb2N1c2VkT2JqZWN0ICE9IGJhY2tpbmdPYmplY3QpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBW
aXNpYmxlUG9zaXRpb24gZm9jdXNlZFBvc2l0aW9uID0gZm9jdXNlZE9iamVjdC0+dmlzaWJsZVBv
c2l0aW9uRm9ySW5kZXgoZm9jdXNlZE9iamVjdC0+c2VsZWN0aW9uU3RhcnQoKSwgdHJ1ZSk7Ci0g
ICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5saW5lRm9y
UG9zaXRpb24oZm9jdXNlZFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGludCBsaW5lTnVtYmVyID0g
YmFja2luZ09iamVjdC0+bGluZUZvclBvc2l0aW9uKGZvY3VzZWRQb3NpdGlvbik7CiAgICAgICAg
ICAgICBpZiAobGluZU51bWJlciA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICAgICAgICAgIAorCiAgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6
bGluZU51bWJlcl07CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlVUkxBdHRyaWJ1dGVdKSB7Ci0g
ICAgICAgIFVSTCB1cmwgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+dXJsKCk7CisgICAgICAgIFVS
TCB1cmwgPSBiYWNraW5nT2JqZWN0LT51cmwoKTsKICAgICAgICAgaWYgKHVybC5pc051bGwoKSkK
ICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIHJldHVybiAoTlNVUkwqKXVybDsKICAg
ICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eUluY3JlbWVudEJ1dHRvbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgYXV0byBpbmNyZW1lbnRC
dXR0b24gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+aW5jcmVtZW50QnV0dG9uKCk7CisgICAgICAg
IGF1dG8gaW5jcmVtZW50QnV0dG9uID0gYmFja2luZ09iamVjdC0+aW5jcmVtZW50QnV0dG9uKCk7
CiAgICAgICAgIHJldHVybiBpbmNyZW1lbnRCdXR0b24gPyBpbmNyZW1lbnRCdXR0b24tPndyYXBw
ZXIoKSA6IG5pbDsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEJ1dHRvbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAg
YXV0byBkZWNyZW1lbnRCdXR0b24gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZGVjcmVtZW50QnV0
dG9uKCk7CisgICAgICAgIGF1dG8gZGVjcmVtZW50QnV0dG9uID0gYmFja2luZ09iamVjdC0+ZGVj
cmVtZW50QnV0dG9uKCk7CiAgICAgICAgIHJldHVybiBkZWNyZW1lbnRCdXR0b24gPyBkZWNyZW1l
bnRCdXR0b24tPndyYXBwZXIoKSA6IG5pbDsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYVmlzaXRlZCJdKQotICAgICAgICByZXR1cm4gW05TTnVt
YmVyIG51bWJlcldpdGhCb29sOiBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNWaXNpdGVkKCldOwot
ICAgIAorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiBiYWNraW5nT2Jq
ZWN0LT5pc1Zpc2l0ZWQoKV07CisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOiBOU0FjY2Vzc2liaWxpdHlUaXRsZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkgeworICAgICAgICBpZiAoYmFja2luZ09i
amVjdC0+aXNBdHRhY2htZW50KCkpIHsKICAgICAgICAgICAgIGlmIChbW1tzZWxmIGF0dGFjaG1l
bnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdIGNvbnRhaW5zT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eVRpdGxlQXR0cmlidXRlXSkKICAgICAgICAgICAgICAgICByZXR1cm4gW1tzZWxm
IGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmls
aXR5VGl0bGVBdHRyaWJ1dGVdOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIE1l
dGVyIGVsZW1lbnRzIHNob3VsZCBjb21tdW5pY2F0ZSB0aGVpciBjb250ZW50IHZpYSBBWFZhbHVl
RGVzY3JpcHRpb24uCi0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNZXRlcigp
KQorICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNNZXRlcigpKQogICAgICAgICAgICAgcmV0
dXJuIFtOU1N0cmluZyBzdHJpbmddOwotICAgICAgICAKKwogICAgICAgICAvLyBTdW1tYXJ5IGVs
ZW1lbnQgc2hvdWxkIHVzZSBpdHMgdGV4dCBub2RlIGFzIEFYVGl0bGUuCi0gICAgICAgIGlmIChz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNTdW1tYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnRleHRVbmRlckVsZW1lbnQoKTsKLSAgICAgICAgCisgICAgICAg
IGlmIChiYWNraW5nT2JqZWN0LT5pc1N1bW1hcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBiYWNr
aW5nT2JqZWN0LT50ZXh0VW5kZXJFbGVtZW50KCk7CisKICAgICAgICAgcmV0dXJuIFtzZWxmIGJh
c2VBY2Nlc3NpYmlsaXR5VGl0bGVdOwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRl
XSkgewotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKSB7
CisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkgewogICAgICAgICAg
ICAgaWYgKFtbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1l
c10gY29udGFpbnNPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdKQog
ICAgICAgICAgICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV07CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIFtzZWxmIGJhc2VBY2Nlc3NpYmlsaXR5RGVzY3JpcHRp
b25dOwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6IE5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXSkgewotICAgICAgICBpZiAoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKSB7CisgICAgICAgIGlmIChiYWNraW5nT2Jq
ZWN0LT5pc0F0dGFjaG1lbnQoKSkgewogICAgICAgICAgICAgaWYgKFtbW3NlbGYgYXR0YWNobWVu
dFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10gY29udGFpbnNPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdKQogICAgICAgICAgICAgICAgIHJldHVybiBbW3NlbGYg
YXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxp
dHlWYWx1ZUF0dHJpYnV0ZV07CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5zdXBwb3J0c1JhbmdlVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEZsb2F0OnNlbGYuYXhCYWNraW5nT2JqZWN0LT52YWx1ZUZvclJhbmdlKCld
OwotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vz
c2liaWxpdHlSb2xlOjpTbGlkZXJUaHVtYikKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5wYXJlbnRPYmplY3QoKS0+dmFs
dWVGb3JSYW5nZSgpXTsKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0hlYWRp
bmcoKSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpzZWxmLmF4
QmFja2luZ09iamVjdC0+aGVhZGluZ0xldmVsKCldOwotICAgICAgICAKLSAgICAgICAgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc0NoZWNrYm94T3JSYWRpbygpIHx8IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc01lbnVJdGVtKCkgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU3dpdGNoKCkg
fHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVG9nZ2xlQnV0dG9uKCkpIHsKLSAgICAgICAgICAg
IHN3aXRjaCAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkpIHsK
KyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPnN1cHBvcnRzUmFuZ2VWYWx1ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6YmFja2luZ09iamVjdC0+dmFs
dWVGb3JSYW5nZSgpXTsKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgpID09
IEFjY2Vzc2liaWxpdHlSb2xlOjpTbGlkZXJUaHVtYikKKyAgICAgICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aEZsb2F0OmJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdCgpLT52YWx1
ZUZvclJhbmdlKCldOworICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNIZWFkaW5nKCkpCisg
ICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6YmFja2luZ09iamVjdC0+
aGVhZGluZ0xldmVsKCldOworCisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc0NoZWNrYm94
T3JSYWRpbygpIHx8IGJhY2tpbmdPYmplY3QtPmlzTWVudUl0ZW0oKSB8fCBiYWNraW5nT2JqZWN0
LT5pc1N3aXRjaCgpIHx8IGJhY2tpbmdPYmplY3QtPmlzVG9nZ2xlQnV0dG9uKCkpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoYmFja2luZ09iamVjdC0+Y2hlY2tib3hPclJhZGlvVmFsdWUoKSkgewog
ICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGU6Ok9mZjoKICAgICAgICAg
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6MF07CiAgICAgICAgICAgICBj
YXNlIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZTo6T246CkBAIC0yNTkzLDY3ICsyNTg4LDY3IEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgICAgIHJl
dHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDoyXTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICAKKwogICAgICAgICAvLyByYWRpbyBncm91cHMgcmV0dXJuIHRoZSBzZWxlY3Rl
ZCByYWRpbyBidXR0b24gYXMgdGhlIEFYVmFsdWUKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc1JhZGlvR3JvdXAoKSkgewotICAgICAgICAgICAgQVhDb3JlT2JqZWN0KiByYWRp
b0J1dHRvbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZWxlY3RlZFJhZGlvQnV0dG9uKCk7Cisg
ICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1JhZGlvR3JvdXAoKSkgeworICAgICAgICAgICAg
QVhDb3JlT2JqZWN0KiByYWRpb0J1dHRvbiA9IGJhY2tpbmdPYmplY3QtPnNlbGVjdGVkUmFkaW9C
dXR0b24oKTsKICAgICAgICAgICAgIGlmICghcmFkaW9CdXR0b24pCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAgICAgICAgIHJldHVybiByYWRpb0J1dHRvbi0+d3JhcHBlcigpOwog
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
VGFiTGlzdCgpKSB7Ci0gICAgICAgICAgICBBWENvcmVPYmplY3QqIHRhYkl0ZW0gPSBzZWxmLmF4
QmFja2luZ09iamVjdC0+c2VsZWN0ZWRUYWJJdGVtKCk7CisKKyAgICAgICAgaWYgKGJhY2tpbmdP
YmplY3QtPmlzVGFiTGlzdCgpKSB7CisgICAgICAgICAgICBBWENvcmVPYmplY3QqIHRhYkl0ZW0g
PSBiYWNraW5nT2JqZWN0LT5zZWxlY3RlZFRhYkl0ZW0oKTsKICAgICAgICAgICAgIGlmICghdGFi
SXRlbSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJuIHRh
Ykl0ZW0tPndyYXBwZXIoKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc1RhYkl0ZW0oKSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEludDpzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTZWxlY3RlZCgpXTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb2xvcldlbGwoKSkg
eworCisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RhYkl0ZW0oKSkKKyAgICAgICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpiYWNraW5nT2JqZWN0LT5pc1NlbGVjdGVk
KCldOworCisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7CiAgICAg
ICAgICAgICBpbnQgciwgZywgYjsKLSAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5j
b2xvclZhbHVlKHIsIGcsIGIpOworICAgICAgICAgICAgYmFja2luZ09iamVjdC0+Y29sb3JWYWx1
ZShyLCBnLCBiKTsKICAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAxIiwgciAvIDI1NS4sIGcgLyAyNTUuLCBiIC8gMjU1
Ll07CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09i
amVjdC0+c3RyaW5nVmFsdWUoKTsKKworICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+c3Ry
aW5nVmFsdWUoKTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOihOU1N0cmluZyAqKWtBWE1lbnVJdGVtTWFya0NoYXJBdHRyaWJ1dGVdKSB7CiAgICAgICAg
IGNvbnN0IHVuaWNoYXIgY2ggPSAweDI3MTM7IC8vIOKckyB1c2VkIG9uIE1hYyBmb3Igc2VsZWN0
ZWQgbWVudSBpdGVtcy4KLSAgICAgICAgcmV0dXJuIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXND
aGVja2VkKCkpID8gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOiZjaCBsZW5ndGg6MV0g
OiBuaWw7CisgICAgICAgIHJldHVybiAoYmFja2luZ09iamVjdC0+aXNDaGVja2VkKCkpID8gW05T
U3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOiZjaCBsZW5ndGg6MV0gOiBuaWw7CiAgICAgfQot
ICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5TWluVmFsdWVBdHRyaWJ1dGVdKSB7CiAgICAgICAgIC8vIEluZGV0ZXJtaW5hdGUgcHJv
Z3Jlc3MgaW5kaWNhdG9yIHNob3VsZCByZXR1cm4gMC4KLSAgICAgICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9n
cmVzc0luZGljYXRvciAmJiAhc2VsZi5heEJhY2tpbmdPYmplY3QtPmhhc0FSSUFWYWx1ZU5vdygp
KQorICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBBY2Nl
c3NpYmlsaXR5Um9sZTo6UHJvZ3Jlc3NJbmRpY2F0b3IgJiYgIWJhY2tpbmdPYmplY3QtPmhhc0FS
SUFWYWx1ZU5vdygpKQogICAgICAgICAgICAgcmV0dXJuIEAwOwotICAgICAgICByZXR1cm4gW05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDpzZWxmLmF4QmFja2luZ09iamVjdC0+bWluVmFsdWVGb3JS
YW5nZSgpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6YmFja2lu
Z09iamVjdC0+bWluVmFsdWVGb3JSYW5nZSgpXTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlNYXhWYWx1ZUF0dHJp
YnV0ZV0pIHsKICAgICAgICAgLy8gSW5kZXRlcm1pbmF0ZSBwcm9ncmVzcyBpbmRpY2F0b3Igc2hv
dWxkIHJldHVybiAwLgotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFSb2xl
QXR0cmlidXRlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlByb2dyZXNzSW5kaWNhdG9yICYmICFz
ZWxmLmF4QmFja2luZ09iamVjdC0+aGFzQVJJQVZhbHVlTm93KCkpCisgICAgICAgIGlmIChiYWNr
aW5nT2JqZWN0LT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9n
cmVzc0luZGljYXRvciAmJiAhYmFja2luZ09iamVjdC0+aGFzQVJJQVZhbHVlTm93KCkpCiAgICAg
ICAgICAgICByZXR1cm4gQDA7Ci0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZs
b2F0OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXhWYWx1ZUZvclJhbmdlKCldOworICAgICAgICBy
ZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpiYWNraW5nT2JqZWN0LT5tYXhWYWx1ZUZv
clJhbmdlKCldOwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUhlbHBBdHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4g
W3NlbGYgYmFzZUFjY2Vzc2liaWxpdHlIZWxwVGV4dF07Ci0gICAgCisKICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRl
XSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzRm9jdXNlZCgpXTsKLSAgICAKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDogYmFja2luZ09iamVjdC0+aXNGb2N1c2VkKCldOworCiAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5RW5hYmxlZEF0dHJp
YnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc0VuYWJsZWQoKV07Ci0gICAgCisgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6IGJhY2tpbmdPYmplY3QtPmlzRW5hYmxlZCgpXTsKKwogICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNpemVBdHRy
aWJ1dGVdKSB7Ci0gICAgICAgIEludFNpemUgcyA9IHNuYXBwZWRJbnRSZWN0KHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5lbGVtZW50UmVjdCgpKS5zaXplKCk7CisgICAgICAgIEludFNpemUgcyA9IHNu
YXBwZWRJbnRSZWN0KGJhY2tpbmdPYmplY3QtPmVsZW1lbnRSZWN0KCkpLnNpemUoKTsKICAgICAg
ICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFNpemU6IE5TTWFrZVNpemUocy53aWR0aCgpLCBz
LmhlaWdodCgpKV07CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5UHJpbWFyeVNjcmVlbkhlaWdodEF0dHJpYnV0ZV0p
CiAgICAgICAgIHJldHVybiBbc2VsZiBwcmltYXJ5U2NyZWVuSGVpZ2h0XTsKICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0dHJp
YnV0ZV0pCkBAIC0yNjY2LDI5ICsyNjYxLDI5IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5U
QVRJT05TX0VORAogICAgICAgICByZXR1cm4gW3NlbGYgd2luZG93RWxlbWVudDphdHRyaWJ1dGVO
YW1lXTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5QWNjZXNzS2V5QXR0cmlidXRlXSkgewotICAgICAgICBBdG9tU3RyaW5nIGFjY2Vzc0tl
eSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hY2Nlc3NLZXkoKTsKKyAgICAgICAgQXRvbVN0cmlu
ZyBhY2Nlc3NLZXkgPSBiYWNraW5nT2JqZWN0LT5hY2Nlc3NLZXkoKTsKICAgICAgICAgaWYgKGFj
Y2Vzc0tleS5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIHJldHVy
biBhY2Nlc3NLZXk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlMaW5rUmVsYXRpb25zaGlwVHlwZUF0dHJpYnV0ZV0p
Ci0gICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bGlua1JlbFZhbHVlKCk7Ci0g
ICAgCisgICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5saW5rUmVsVmFsdWUoKTsKKwogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VGFic0F0
dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RhYkxpc3Qo
KSkgeworICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNUYWJMaXN0KCkpIHsKICAgICAgICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB0YWJz
Q2hpbGRyZW47Ci0gICAgICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+dGFiQ2hpbGRyZW4o
dGFic0NoaWxkcmVuKTsKKyAgICAgICAgICAgIGJhY2tpbmdPYmplY3QtPnRhYkNoaWxkcmVuKHRh
YnNDaGlsZHJlbik7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh0YWJzQ2hp
bGRyZW4pOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb250ZW50c0F0dHJpYnV0ZV0pIHsKICAg
ICAgICAgLy8gVGhlIGNvbnRlbnRzIG9mIGEgdGFiIGxpc3QgYXJlIGFsbCB0aGUgY2hpbGRyZW4g
ZXhjZXB0IHRoZSB0YWJzLgotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGFi
TGlzdCgpKSB7CisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RhYkxpc3QoKSkgewogICAg
ICAgICAgICAgYXV0byBjaGlsZHJlbiA9IHNlbGYuY2hpbGRyZW5WZWN0b3JBcnJheTsKICAgICAg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB0
YWJzOwotICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnRhYkNoaWxkcmVuKHRhYnMp
OworICAgICAgICAgICAgYmFja2luZ09iamVjdC0+dGFiQ2hpbGRyZW4odGFicyk7CiAgICAgICAg
ICAgICBhdXRvIHRhYnNDaGlsZHJlbiA9IGNvbnZlcnRUb05TQXJyYXkodGFicyk7CiAKICAgICAg
ICAgICAgIE5TTXV0YWJsZUFycmF5ICpjb250ZW50cyA9IFtOU011dGFibGVBcnJheSBhcnJheV07
CkBAIC0yNjk5LDcgKzI2OTQsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19F
TkQKICAgICAgICAgICAgIHJldHVybiBjb250ZW50czsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTY3JvbGxWaWV3KCkpIHsKKyAgICAgICAgaWYgKGJh
Y2tpbmdPYmplY3QtPmlzU2Nyb2xsVmlldygpKSB7CiAgICAgICAgICAgICAvLyBBIHNjcm9sbFZp
ZXcncyBjb250ZW50cyBhcmUgZXZlcnl0aGluZyBleGNlcHQgdGhlIHNjcm9sbCBiYXJzLgogICAg
ICAgICAgICAgYXV0byBjaGlsZHJlbiA9IHNlbGYuY2hpbGRyZW5WZWN0b3JBcnJheTsKICAgICAg
ICAgICAgIE5TTXV0YWJsZUFycmF5ICpjb250ZW50cyA9IFtOU011dGFibGVBcnJheSBhcnJheV07
CkBAIC0yNzEzLDc4ICsyNzA4LDYyIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05T
X0VORAogICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRzOwogICAgICAgICB9CiAgICAgfQotICAg
IAotICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkg
JiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpLmlz
RXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkgewotICAgICAgICBhdXRvJiB0YWJsZSA9
IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KTsKKwor
ICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RhYmxlKCkgJiYgYmFja2luZ09iamVjdC0+aXNFeHBv
c2FibGUoKSkgewogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRU
b05TQXJyYXkodGFibGUucm93cygpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZVJvd3NBdHRyaWJ1dGVd
KSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3IgdmlzaWJsZVJvd3M7Ci0gICAgICAgICAgICB0YWJsZS52aXNpYmxlUm93cyh2aXNp
YmxlUm93cyk7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh2aXNpYmxlUm93
cyk7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNB
cnJheShiYWNraW5nT2JqZWN0LT5yb3dzKCkpOworCisgICAgICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZVJvd3NBdHRyaWJ1dGVdKQor
ICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoYmFja2luZ09iamVjdC0+dmlzaWJs
ZVJvd3MoKSk7CisKICAgICAgICAgLy8gVE9ETzogZGlzdGluZ3Vpc2ggYmV0d2VlbiB2aXNpYmxl
IGFuZCBub24tdmlzaWJsZSBjb2x1bW5zCi0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29sdW1uc0F0dHJpYnV0ZV0gfHwKLSAgICAgICAg
ICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWaXNpYmxl
Q29sdW1uc0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5
KHRhYmxlLmNvbHVtbnMoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29sdW1uc0F0dHJpYnV0
ZV0KKyAgICAgICAgICAgIHx8IFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlWaXNpYmxlQ29sdW1uc0F0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gY29u
dmVydFRvTlNBcnJheShiYWNraW5nT2JqZWN0LT5jb2x1bW5zKCkpOworCiAgICAgICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRSb3dz
QXR0cmlidXRlXSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW5Db3B5OwotICAgICAgICAgICAgc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbkNvcHkp
OworICAgICAgICAgICAgYmFja2luZ09iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENo
aWxkcmVuQ29weSk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShzZWxlY3Rl
ZENoaWxkcmVuQ29weSk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEhUTUwgdGFi
bGVzIGRvbid0IHN1cHBvcnQgdGhlc2UKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENvbHVtbnNBdHRyaWJ1dGVdIHx8Ci0g
ICAgICAgICAgICBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
U2VsZWN0ZWRDZWxsc0F0dHJpYnV0ZV0pCisKKyAgICAgICAgLy8gSFRNTCB0YWJsZXMgZG9uJ3Qg
c3VwcG9ydCB0aGVzZSBhdHRyaWJ1dGVzLgorICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ29sdW1uc0F0dHJpYnV0ZV0KKyAg
ICAgICAgICAgIHx8IFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlTZWxlY3RlZENlbGxzQXR0cmlidXRlXSkKICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUNvbHVtbkhlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29sdW1uSGVh
ZGVyczsKLSAgICAgICAgICAgIHRhYmxlLmNvbHVtbkhlYWRlcnMoY29sdW1uSGVhZGVycyk7Ci0g
ICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShjb2x1bW5IZWFkZXJzKTsKLSAgICAg
ICAgfQotICAgICAgICAKKworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUNvbHVtbkhlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdKQorICAg
ICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoYmFja2luZ09iamVjdC0+Y29sdW1uSGVh
ZGVycygpKTsKKwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUhlYWRlckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGhlYWRlckNvbnRhaW5lciA9IHRhYmxlLmhlYWRlckNvbnRhaW5lcigpOwotICAg
ICAgICAgICAgaWYgKGhlYWRlckNvbnRhaW5lcikKLSAgICAgICAgICAgICAgICByZXR1cm4gaGVh
ZGVyQ29udGFpbmVyLT53cmFwcGVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eVJvd0hlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7Ci0gICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93
SGVhZGVyczsKLSAgICAgICAgICAgIHRhYmxlLnJvd0hlYWRlcnMocm93SGVhZGVycyk7Ci0gICAg
ICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShyb3dIZWFkZXJzKTsKKyAgICAgICAgICAg
IGF1dG8qIGhlYWRlckNvbnRhaW5lciA9IGJhY2tpbmdPYmplY3QtPmhlYWRlckNvbnRhaW5lcigp
OworICAgICAgICAgICAgcmV0dXJuIGhlYWRlckNvbnRhaW5lciA/IGhlYWRlckNvbnRhaW5lci0+
d3JhcHBlcigpIDogbmlsOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZpc2libGVDZWxsc0F0dHJp
YnV0ZV0pIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciBjZWxsczsKLSAgICAgICAgICAgIHRhYmxlLmNlbGxzKGNlbGxzKTsKLSAg
ICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNlbGxzKTsKLSAgICAgICAgfQotICAg
ICAgICAKKworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eVJvd0hlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb05TQXJyYXkoYmFja2luZ09iamVjdC0+cm93SGVhZGVycygpKTsKKworICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZp
c2libGVDZWxsc0F0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJh
eShiYWNraW5nT2JqZWN0LT5jZWxscygpKTsKKwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNvbHVtbkNvdW50QXR0cmlidXRlXSkKLSAg
ICAgICAgICAgIHJldHVybiBAKHRhYmxlLmNvbHVtbkNvdW50KCkpOwotICAgICAgICAKKyAgICAg
ICAgICAgIHJldHVybiBAKGJhY2tpbmdPYmplY3QtPmNvbHVtbkNvdW50KCkpOworCiAgICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93Q291
bnRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIEAodGFibGUucm93Q291bnQoKSk7Ci0g
ICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIEAoYmFja2luZ09iamVjdC0+cm93Q291bnQoKSk7
CisKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlBUklBQ29sdW1uQ291bnRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIEAodGFi
bGUuYXhDb2x1bW5Db3VudCgpKTsKLSAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gQChiYWNr
aW5nT2JqZWN0LT5heENvbHVtbkNvdW50KCkpOworCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVJvd0NvdW50QXR0cmlidXRlXSkK
LSAgICAgICAgICAgIHJldHVybiBAKHRhYmxlLmF4Um93Q291bnQoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gQChiYWNraW5nT2JqZWN0LT5heFJvd0NvdW50KCkpOwogICAgIH0KLSAgICAKLSAgICBp
ZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uPigqc2VsZi5heEJhY2tpbmdPYmplY3QpKSB7
Ci0gICAgICAgIGF1dG8mIGNvbHVtbiA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVt
bj4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KTsKKworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFi
bGVDb2x1bW4+KCpiYWNraW5nT2JqZWN0KSkgeworICAgICAgICBhdXRvJiBjb2x1bW4gPSBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4+KCpiYWNraW5nT2JqZWN0KTsKICAgICAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRleEF0
dHJpYnV0ZV0pCiAgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Y29s
dW1uLmNvbHVtbkluZGV4KCldOwotICAgICAgICAKKwogICAgICAgICAvLyByb3dzIGF0dHJpYnV0
ZSBmb3IgYSBjb2x1bW4gaXMgdGhlIGxpc3Qgb2YgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGF0IGNv
bHVtbiBhdCBlYWNoIHJvdwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdIHx8CiAgICAgICAgICAgICBbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZVJvd3NBdHRyaWJ1
dGVdKSB7CkBAIC0yNzk3LDkgKzI3NzYsOSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19FTkQKICAgICAgICAgICAgIHJldHVybiBoZWFkZXItPndyYXBwZXIoKTsKICAgICAgICAg
fQogICAgIH0KLSAgICAKLSAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKnNlbGYu
YXhCYWNraW5nT2JqZWN0KSkgewotICAgICAgICBhdXRvJiBjZWxsID0gZG93bmNhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KTsKKworICAgIGlmIChpczxB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYmFja2luZ09iamVjdCkpIHsKKyAgICAgICAgYXV0byYg
Y2VsbCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpiYWNraW5nT2JqZWN0KTsK
ICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlSb3dJbmRleFJhbmdlQXR0cmlidXRlXSkgewogICAgICAgICAgICAgc3RkOjpwYWlyPHVuc2ln
bmVkLCB1bnNpZ25lZD4gcm93UmFuZ2U7CiAgICAgICAgICAgICBjZWxsLnJvd0luZGV4UmFuZ2Uo
cm93UmFuZ2UpOwpAQCAtMjgxMCw0OSArMjc4OSw0NSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIGNlbGwuY29sdW1uSW5kZXhSYW5nZShjb2x1bW5S
YW5nZSk7CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6TlNNYWtl
UmFuZ2UoY29sdW1uUmFuZ2UuZmlyc3QsIGNvbHVtblJhbmdlLnNlY29uZCldOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5Q29sdW1uSGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5IZWFkZXJz
OwotICAgICAgICAgICAgY2VsbC5jb2x1bW5IZWFkZXJzKGNvbHVtbkhlYWRlcnMpOwotICAgICAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29sdW1uSGVhZGVycyk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlSb3dIZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRlXSkgewotICAgICAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRlcnM7Ci0gICAg
ICAgICAgICBjZWxsLnJvd0hlYWRlcnMocm93SGVhZGVycyk7Ci0gICAgICAgICAgICByZXR1cm4g
Y29udmVydFRvTlNBcnJheShyb3dIZWFkZXJzKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNvbHVtbkhlYWRlclVJ
RWxlbWVudHNBdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXko
Y2VsbC5jb2x1bW5IZWFkZXJzKCkpOworCisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93SGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0p
CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShjZWxsLnJvd0hlYWRlcnMoKSk7
CisKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlBUklBQ29sdW1uSW5kZXhBdHRyaWJ1dGVdKQogICAgICAgICAgICAgcmV0dXJuIEAoY2Vs
bC5heENvbHVtbkluZGV4KCkpOwotICAgICAgICAKKwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFSb3dJbmRleEF0dHJpYnV0ZV0p
CiAgICAgICAgICAgICByZXR1cm4gQChjZWxsLmF4Um93SW5kZXgoKSk7CiAgICAgfQotICAgIAot
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVlKCkpIHsKKworICAgIGlmIChiYWNr
aW5nT2JqZWN0LT5pc1RyZWUoKSkgewogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0pIHsKICAgICAg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBz
ZWxlY3RlZENoaWxkcmVuQ29weTsKLSAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5z
ZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKKyAgICAgICAgICAgIGJhY2tp
bmdPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOwogICAgICAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5Um93c0F0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKLSAgICAgICAgICAgIHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhVHJlZVJvd3Mocm93c0NvcHkpOworICAgICAgICAgICAg
YmFja2luZ09iamVjdC0+YXJpYVRyZWVSb3dzKHJvd3NDb3B5KTsKICAgICAgICAgICAgIHJldHVy
biBjb252ZXJ0VG9OU0FycmF5KHJvd3NDb3B5KTsKICAgICAgICAgfQotICAgICAgICAKKwogICAg
ICAgICAvLyBUcmVlUm9sZXMgZG8gbm90IHN1cHBvcnQgY29sdW1ucywgYnV0IE1hYyBBWCBleHBl
Y3RzIHRvIGJlIGFibGUgdG8gYXNrIGFib3V0IGNvbHVtbnMgYXQgdGhlIGxlYXN0LgogICAgICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNvbHVt
bnNBdHRyaWJ1dGVdKQogICAgICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKICAgICB9
Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUluZGV4QXR0cmlidXRlXSkgewotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzVHJlZUl0ZW0oKSkgewotICAgICAgICAgICAgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBz
ZWxmLmF4QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0KCk7CisgICAgICAgIGlmIChiYWNraW5n
T2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKKyAgICAgICAgICAgIEFYQ29yZU9iamVjdCogcGFyZW50
ID0gYmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0KCk7CiAgICAgICAgICAgICBmb3IgKDsgcGFy
ZW50ICYmICFwYXJlbnQtPmlzVHJlZSgpOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgp
KQogICAgICAgICAgICAgeyB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCFwYXJl
bnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAgIAorCiAgICAgICAg
ICAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGlzIGl0ZW0gYnkgaXRlcmF0aW5nIHRoZSBwYXJl
bnRzLgogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIHJvd3NDb3B5OwogICAgICAgICAgICAgcGFyZW50LT5hcmlhVHJlZVJvd3Mocm93
c0NvcHkpOwpAQCAtMjg2MCwzNCArMjgzNSwzNCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7ICsr
aykKICAgICAgICAgICAgICAgICBpZiAocm93c0NvcHlba10tPndyYXBwZXIoKSA9PSBzZWxmKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZElu
dDprXTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KCpzZWxmLmF4QmFja2luZ09i
amVjdCkpIHsKKyAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKmJhY2tpbmdP
YmplY3QpKSB7CiAgICAgICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eUluZGV4QXR0cmlidXRlXSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlUm93Pigq
c2VsZi5heEJhY2tpbmdPYmplY3QpLnJvd0luZGV4KCldOworICAgICAgICAgICAgICAgIHJldHVy
biBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+
KCpiYWNraW5nT2JqZWN0KS5yb3dJbmRleCgpXTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwog
ICAgIC8vIFRoZSByb3dzIHRoYXQgYXJlIGNvbnNpZGVyZWQgaW5zaWRlIHRoaXMgcm93LgogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xv
c2VkUm93c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c1RyZWVJdGVtKCkpIHsKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkg
ewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yIHJvd3NDb3B5OwotICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFU
cmVlSXRlbURpc2Nsb3NlZFJvd3Mocm93c0NvcHkpOworICAgICAgICAgICAgYmFja2luZ09iamVj
dC0+YXJpYVRyZWVJdGVtRGlzY2xvc2VkUm93cyhyb3dzQ29weSk7CiAgICAgICAgICAgICByZXR1
cm4gY29udmVydFRvTlNBcnJheShyb3dzQ29weSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
aXM8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93Pigqc2VsZi5heEJhY2tpbmdPYmplY3QpKSB7Cisg
ICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KCpiYWNraW5nT2JqZWN0KSkg
ewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yIHJvd3NDb3B5OwotICAgICAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUFSSUFH
cmlkUm93Pigqc2VsZi5heEJhY2tpbmdPYmplY3QpLmRpc2Nsb3NlZFJvd3Mocm93c0NvcHkpOwor
ICAgICAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93PigqYmFja2luZ09i
amVjdCkuZGlzY2xvc2VkUm93cyhyb3dzQ29weSk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVy
dFRvTlNBcnJheShyb3dzQ29weSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLyBU
aGUgcm93IHRoYXQgY29udGFpbnMgdGhpcyByb3cuIEl0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0
aGUgZmlyc3QgcGFyZW50IHRoYXQgaXMgYSB0cmVlaXRlbS4KICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3NlZEJ5Um93QXR0cmlidXRl
XSkgewotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkgewot
ICAgICAgICAgICAgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+
cGFyZW50T2JqZWN0KCk7CisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RyZWVJdGVtKCkp
IHsKKyAgICAgICAgICAgIEFYQ29yZU9iamVjdCogcGFyZW50ID0gYmFja2luZ09iamVjdC0+cGFy
ZW50T2JqZWN0KCk7CiAgICAgICAgICAgICB3aGlsZSAocGFyZW50KSB7CiAgICAgICAgICAgICAg
ICAgaWYgKHBhcmVudC0+aXNUcmVlSXRlbSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cGFyZW50LT53cmFwcGVyKCk7CkBAIC0yODk5LDc2ICsyODc0LDc2IEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KCpzZWxmLmF4QmFj
a2luZ09iamVjdCkpIHsKLSAgICAgICAgICAgIEFYQ29yZU9iamVjdCogcm93ID0gZG93bmNhc3Q8
QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93Pigqc2VsZi5heEJhY2tpbmdPYmplY3QpLmRpc2Nsb3Nl
ZEJ5Um93KCk7CisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KCpiYWNr
aW5nT2JqZWN0KSkgeworICAgICAgICAgICAgQVhDb3JlT2JqZWN0KiByb3cgPSBkb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KCpiYWNraW5nT2JqZWN0KS5kaXNjbG9zZWRCeVJvdygp
OwogICAgICAgICAgICAgaWYgKCFyb3cpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICAgICAgICAgIHJldHVybiByb3ctPndyYXBwZXIoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAK
KwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
RGlzY2xvc3VyZUxldmVsQXR0cmlidXRlXSkgewogICAgICAgICAvLyBDb252ZXJ0IGZyb20gMS1i
YXNlZCBsZXZlbCAoZnJvbSBhcmlhLWxldmVsIHNwZWMpIHRvIDAtYmFzZWQgbGV2ZWwgKE1hYykK
LSAgICAgICAgaW50IGxldmVsID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmhpZXJhcmNoaWNhbExl
dmVsKCk7CisgICAgICAgIGludCBsZXZlbCA9IGJhY2tpbmdPYmplY3QtPmhpZXJhcmNoaWNhbExl
dmVsKCk7CiAgICAgICAgIGlmIChsZXZlbCA+IDApCiAgICAgICAgICAgICBsZXZlbCAtPSAxOwog
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bGV2ZWxdOwogICAgIH0KICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Ns
b3NpbmdBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29s
OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0V4cGFuZGVkKCldOwotICAgIAotICAgIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+aXNMaXN0KCkgJiYgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJu
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpiYWNraW5nT2JqZWN0LT5pc0V4cGFuZGVkKCldOwor
CisgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzTGlzdCgpICYmIFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV0pCiAgICAgICAg
IHJldHVybiBOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbE9yaWVudGF0aW9uVmFsdWU7Ci0gICAgCisK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYU2VsZWN0ZWRUZXh0
TWFya2VyUmFuZ2UiXSkKICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZvclNl
bGVjdGlvbl07Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
OiBAIkFYU3RhcnRUZXh0TWFya2VyIl0pCi0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vy
Rm9yVmlzaWJsZVBvc2l0aW9uOnN0YXJ0T2ZEb2N1bWVudChzZWxmLmF4QmFja2luZ09iamVjdC0+
ZG9jdW1lbnQoKSldOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQ
b3NpdGlvbjpzdGFydE9mRG9jdW1lbnQoYmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSldOwogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhFbmRUZXh0TWFya2VyIl0p
Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOmVuZE9m
RG9jdW1lbnQoc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCkpXTsKLSAgICAKKyAgICAg
ICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246ZW5kT2ZEb2N1bWVu
dChiYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpKV07CisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJpYnV0ZV0p
Ci0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50OnNlbGYuYXhC
YWNraW5nT2JqZWN0LT5ibG9ja3F1b3RlTGV2ZWwoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50OmJhY2tpbmdPYmplY3QtPmJsb2NrcXVvdGVMZXZlbCgp
XTsKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhUYWJsZUxldmVs
Il0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpzZWxmLmF4QmFja2lu
Z09iamVjdC0+dGFibGVMZXZlbCgpXTsKLSAgICAKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoSW50OmJhY2tpbmdPYmplY3QtPnRhYmxlTGV2ZWwoKV07CisKICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlMaW5rZWRVSUVsZW1l
bnRzQXR0cmlidXRlXSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3IgbGlua2VkVUlFbGVtZW50czsKLSAgICAgICAgc2VsZi5heEJhY2tp
bmdPYmplY3QtPmxpbmtlZFVJRWxlbWVudHMobGlua2VkVUlFbGVtZW50cyk7CisgICAgICAgIGJh
Y2tpbmdPYmplY3QtPmxpbmtlZFVJRWxlbWVudHMobGlua2VkVUlFbGVtZW50cyk7CiAgICAgICAg
IHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGxpbmtlZFVJRWxlbWVudHMpOwogICAgIH0KLSAgICAK
KwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0
eVNlbGVjdGVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRo
Qm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTZWxlY3RlZCgpXTsKLSAgICAKKyAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpiYWNraW5nT2JqZWN0LT5pc1NlbGVjdGVk
KCldOworCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5QVJJQUN1cnJlbnRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tp
bmdPYmplY3QtPmN1cnJlbnRWYWx1ZSgpOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlcnZlc0FzVGl0bGVGb3JVSUVsZW1lbnRz
QXR0cmlidXRlXSAmJiBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNZW51QnV0dG9uKCkpIHsKLSAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdWlFbGVtZW50ID0gZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5tZW51Rm9yTWVudUJ1dHRv
bigpOworICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+Y3VycmVudFZhbHVlKCk7CisKKyAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZXJ2
ZXNBc1RpdGxlRm9yVUlFbGVtZW50c0F0dHJpYnV0ZV0gJiYgYmFja2luZ09iamVjdC0+aXNNZW51
QnV0dG9uKCkpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdWlFbGVtZW50ID0gZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdD4oKmJhY2tpbmdPYmplY3QpLm1lbnVGb3JN
ZW51QnV0dG9uKCk7CiAgICAgICAgIGlmICh1aUVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4g
W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OnVpRWxlbWVudC0+d3JhcHBlcigpXTsKICAgICB9Ci0g
ICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRlXSkgewotICAgICAgICBpZiAoIXNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5leHBvc2VzVGl0bGVVSUVsZW1lbnQoKSkKKyAgICAgICAgaWYgKCFiYWNraW5n
T2JqZWN0LT5leHBvc2VzVGl0bGVVSUVsZW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7
CiAKLSAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmogPSBzZWxmLmF4QmFja2luZ09iamVjdC0+dGl0
bGVVSUVsZW1lbnQoKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmogPSBiYWNraW5nT2JqZWN0
LT50aXRsZVVJRWxlbWVudCgpOwogICAgICAgICBpZiAob2JqKQogICAgICAgICAgICAgcmV0dXJu
IG9iai0+d3JhcHBlcigpOwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KLSAgICAKKwogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmFsdWVE
ZXNjcmlwdGlvbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc01ldGVyKCkpCisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc01ldGVyKCkpCiAgICAg
ICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVEZXNjcmlwdGlvbkZvck1ldGVyXTsKLSAgICAgICAg
cmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT52YWx1ZURlc2NyaXB0aW9uKCk7CisgICAgICAg
IHJldHVybiBiYWNraW5nT2JqZWN0LT52YWx1ZURlc2NyaXB0aW9uKCk7CiAgICAgfQotICAgIAor
CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlP
cmllbnRhdGlvbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9u
IGVsZW1lbnRPcmllbnRhdGlvbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5vcmllbnRhdGlvbigp
OworICAgICAgICBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb24gZWxlbWVudE9yaWVudGF0aW9uID0g
YmFja2luZ09iamVjdC0+b3JpZW50YXRpb24oKTsKICAgICAgICAgaWYgKGVsZW1lbnRPcmllbnRh
dGlvbiA9PSBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246OlZlcnRpY2FsKQogICAgICAgICAgICAg
cmV0dXJuIE5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsT3JpZW50YXRpb25WYWx1ZTsKICAgICAgICAg
aWYgKGVsZW1lbnRPcmllbnRhdGlvbiA9PSBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246Okhvcml6
b250YWwpCkBAIC0yOTc3LDIyICsyOTUyLDIyIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5U
QVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVua25vd25Pcmll
bnRhdGlvblZhbHVlOwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KLSAgICAKKwogICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SG9yaXpvbnRh
bFNjcm9sbEJhckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQVhDb3JlT2JqZWN0KiBzY3JvbGxCYXIg
PSBzZWxmLmF4QmFja2luZ09iamVjdC0+c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlv
bjo6SG9yaXpvbnRhbCk7CisgICAgICAgIEFYQ29yZU9iamVjdCogc2Nyb2xsQmFyID0gYmFja2lu
Z09iamVjdC0+c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCk7
CiAgICAgICAgIGlmIChzY3JvbGxCYXIpCiAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsQmFyLT53
cmFwcGVyKCk7CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmVydGljYWxTY3JvbGxCYXJBdHRy
aWJ1dGVdKSB7Ci0gICAgICAgIEFYQ29yZU9iamVjdCogc2Nyb2xsQmFyID0gc2VsZi5heEJhY2tp
bmdPYmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246OlZlcnRpY2FsKTsK
KyAgICAgICAgQVhDb3JlT2JqZWN0KiBzY3JvbGxCYXIgPSBiYWNraW5nT2JqZWN0LT5zY3JvbGxC
YXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpWZXJ0aWNhbCk7CiAgICAgICAgIGlmIChzY3Jv
bGxCYXIpCiAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsQmFyLT53cmFwcGVyKCk7CiAgICAgICAg
IHJldHVybiBuaWw7CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uQXR0cmlidXRlXSkgewotICAg
ICAgICBzd2l0Y2ggKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zb3J0RGlyZWN0aW9uKCkpIHsKKyAg
ICAgICAgc3dpdGNoIChiYWNraW5nT2JqZWN0LT5zb3J0RGlyZWN0aW9uKCkpIHsKICAgICAgICAg
Y2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6QXNjZW5kaW5nOgogICAgICAgICAgICAg
cmV0dXJuIE5TQWNjZXNzaWJpbGl0eUFzY2VuZGluZ1NvcnREaXJlY3Rpb25WYWx1ZTsKICAgICAg
ICAgY2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6RGVzY2VuZGluZzoKQEAgLTMwMDEs
NDYgKzI5NzYsNDYgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAg
ICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5rbm93blNvcnREaXJlY3Rpb25WYWx1ZTsK
ICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TGFuZ3VhZ2VBdHRyaWJ1dGVdKQotICAgICAgICByZXR1
cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmxhbmd1YWdlKCk7Ci0gICAgCisgICAgICAgIHJldHVy
biBiYWNraW5nT2JqZWN0LT5sYW5ndWFnZSgpOworCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFeHBhbmRlZEF0dHJpYnV0ZV0pCi0gICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
RXhwYW5kZWQoKV07Ci0gICAgCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6YmFja2luZ09iamVjdC0+aXNFeHBhbmRlZCgpXTsKKwogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UmVxdWlyZWRBdHRyaWJ1dGVdKQotICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc1JlcXVpcmVkKCldOwotICAgIAorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhCb29sOmJhY2tpbmdPYmplY3QtPmlzUmVxdWlyZWQoKV07CisKICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUludmFsaWRBdHRyaWJ1dGVdKQot
ICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmludmFsaWRTdGF0dXMoKTsKLSAg
ICAKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPmludmFsaWRTdGF0dXMoKTsKKwogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5T3duc0F0
dHJpYnV0ZV0pIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIGFyaWFPd25zOwotICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+YXJp
YU93bnNFbGVtZW50cyhhcmlhT3ducyk7CisgICAgICAgIGJhY2tpbmdPYmplY3QtPmFyaWFPd25z
RWxlbWVudHMoYXJpYU93bnMpOwogICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShhcmlh
T3ducyk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBUG9zSW5TZXRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1
cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPnBvc0luU2V0
KCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6YmFja2luZ09iamVj
dC0+cG9zSW5TZXQoKV07CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlBUklBU2V0U2l6ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aEludDpzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0U2l6ZSgpXTsKLSAg
ICAKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OmJhY2tpbmdPYmplY3Qt
PnNldFNpemUoKV07CisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVy
IG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0FSSUFHcmFiYmVkKCldOwot
ICAgIAorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmJhY2tpbmdPYmpl
Y3QtPmlzQVJJQUdyYWJiZWQoKV07CisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlXSkgewotICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBkcm9wRWZmZWN0cyA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kZXRlcm1p
bmVBUklBRHJvcEVmZmVjdHMoKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZHJvcEVmZmVjdHMg
PSBiYWNraW5nT2JqZWN0LT5kZXRlcm1pbmVBUklBRHJvcEVmZmVjdHMoKTsKICAgICAgICAgcmV0
dXJuIGNvbnZlcnRTdHJpbmdzVG9OU0FycmF5KGRyb3BFZmZlY3RzKTsKICAgICB9Ci0gICAgCisK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVBs
YWNlaG9sZGVyVmFsdWVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdP
YmplY3QtPnBsYWNlaG9sZGVyVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3Qt
PnBsYWNlaG9sZGVyVmFsdWUoKTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdXRvZmlsbEF2YWlsYWJsZUF0dHJpYnV0ZV0pCi0g
ICAgICAgIHJldHVybiBAKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1ZhbHVlQXV0b2ZpbGxBdmFp
bGFibGUoKSk7Ci0gICAgCisgICAgICAgIHJldHVybiBAKGJhY2tpbmdPYmplY3QtPmlzVmFsdWVB
dXRvZmlsbEF2YWlsYWJsZSgpKTsKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdXRvZmlsbFR5cGVBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgIHN3aXRjaCAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnZhbHVlQXV0b2ZpbGxCdXR0b25UeXBl
KCkpIHsKKyAgICAgICAgc3dpdGNoIChiYWNraW5nT2JqZWN0LT52YWx1ZUF1dG9maWxsQnV0dG9u
VHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXV0b0ZpbGxCdXR0b25UeXBlOjpOb25lOgogICAgICAg
ICAgICAgcmV0dXJuIEAibm9uZSI7CiAgICAgICAgIGNhc2UgQXV0b0ZpbGxCdXR0b25UeXBlOjpD
cmVkZW50aWFsczoKQEAgLTMwNTMsMTU0ICszMDI4LDE1NCBAQCBBTExPV19ERVBSRUNBVEVEX0lN
UExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIHJldHVybiBAImNyZWRpdCBjYXJkIjsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdXRvZmlsbGVkQXR0cmlidXRlXSkKLSAgICAgICAg
cmV0dXJuIEAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVmFsdWVBdXRvZmlsbGVkKCkpOworICAg
ICAgICByZXR1cm4gQChiYWNraW5nT2JqZWN0LT5pc1ZhbHVlQXV0b2ZpbGxlZCgpKTsKIAogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SGFzUG9w
dXBBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNl
bGYuYXhCYWNraW5nT2JqZWN0LT5oYXNQb3B1cCgpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpiYWNraW5nT2JqZWN0LT5oYXNQb3B1cCgpXTsKIAogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGF0ZXRpbWVWYWx1
ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+ZGF0ZXRp
bWVBdHRyaWJ1dGVWYWx1ZSgpOwotICAgIAorICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+
ZGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSgpOworCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmxpbmVUZXh0QXR0cmlidXRlXSkKLSAgICAgICAg
cmV0dXJuIEAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzSW5saW5lVGV4dCgpKTsKLSAgICAKKyAg
ICAgICAgcmV0dXJuIEAoYmFja2luZ09iamVjdC0+aXNJbmxpbmVUZXh0KCkpOworCiAgICAgLy8g
QVJJQSBMaXZlIHJlZ2lvbiBhdHRyaWJ1dGVzLgogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQUxpdmVBdHRyaWJ1dGVdKQotICAgICAgICBy
ZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmxpdmVSZWdpb25TdGF0dXMoKTsKKyAgICAgICAg
cmV0dXJuIGJhY2tpbmdPYmplY3QtPmxpdmVSZWdpb25TdGF0dXMoKTsKICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFSZWxldmFudEF0dHJp
YnV0ZV0pCi0gICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bGl2ZVJlZ2lvblJl
bGV2YW50KCk7CisgICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5saXZlUmVnaW9uUmVsZXZh
bnQoKTsKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eUFSSUFBdG9taWNBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5saXZlUmVnaW9uQXRvbWljKCldOworICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmJhY2tpbmdPYmplY3QtPmxpdmVS
ZWdpb25BdG9taWMoKV07CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlFbGVtZW50QnVzeUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQnVzeSgpXTsKLSAg
ICAKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpiYWNraW5nT2JqZWN0
LT5pc0J1c3koKV07CisKICAgICAvLyBNYXRoTUwgQXR0cmlidXRlcy4KLSAgICBpZiAoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzTWF0aEVsZW1lbnQoKSkgeworICAgIGlmIChiYWNraW5nT2JqZWN0
LT5pc01hdGhFbGVtZW50KCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdEluZGV4QXR0cmlidXRlXSkKLSAgICAgICAg
ICAgIHJldHVybiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhSb290SW5kZXhPYmplY3QoKSkg
PyBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFJvb3RJbmRleE9iamVjdCgpLT53cmFwcGVyKCkg
OiAwOworICAgICAgICAgICAgcmV0dXJuIChiYWNraW5nT2JqZWN0LT5tYXRoUm9vdEluZGV4T2Jq
ZWN0KCkpID8gYmFja2luZ09iamVjdC0+bWF0aFJvb3RJbmRleE9iamVjdCgpLT53cmFwcGVyKCkg
OiAwOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eU1hdGhSb290UmFkaWNhbmRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIChz
ZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCkpID8gc2VsZi5heEJhY2tp
bmdPYmplY3QtPm1hdGhSYWRpY2FuZE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICAg
ICAgcmV0dXJuIChiYWNraW5nT2JqZWN0LT5tYXRoUmFkaWNhbmRPYmplY3QoKSkgPyBiYWNraW5n
T2JqZWN0LT5tYXRoUmFkaWNhbmRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoRnJhY3Rp
b25OdW1lcmF0b3JBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+bWF0aE51bWVyYXRvck9iamVjdCgpKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5t
YXRoTnVtZXJhdG9yT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgICAgICByZXR1cm4g
KGJhY2tpbmdPYmplY3QtPm1hdGhOdW1lcmF0b3JPYmplY3QoKSkgPyBiYWNraW5nT2JqZWN0LT5t
YXRoTnVtZXJhdG9yT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiAgICAgICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9uRGVub21p
bmF0b3JBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIChzZWxmLmF4QmFja2luZ09iamVj
dC0+bWF0aERlbm9taW5hdG9yT2JqZWN0KCkpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhE
ZW5vbWluYXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICAgICAgcmV0dXJuIChi
YWNraW5nT2JqZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKSkgPyBiYWNraW5nT2JqZWN0LT5t
YXRoRGVub21pbmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoQmFzZUF0dHJpYnV0
ZV0pCi0gICAgICAgICAgICByZXR1cm4gKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoQmFzZU9i
amVjdCgpKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoQmFzZU9iamVjdCgpLT53cmFwcGVy
KCkgOiAwOworICAgICAgICAgICAgcmV0dXJuIChiYWNraW5nT2JqZWN0LT5tYXRoQmFzZU9iamVj
dCgpKSA/IGJhY2tpbmdPYmplY3QtPm1hdGhCYXNlT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiAg
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
TWF0aFN1YnNjcmlwdEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCkpID8gc2VsZi5heEJhY2tpbmdPYmplY3Qt
Pm1hdGhTdWJzY3JpcHRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAgICAgIHJldHVy
biAoYmFja2luZ09iamVjdC0+bWF0aFN1YnNjcmlwdE9iamVjdCgpKSA/IGJhY2tpbmdPYmplY3Qt
Pm1hdGhTdWJzY3JpcHRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoU3VwZXJzY3JpcHRB
dHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIChzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0
aFN1cGVyc2NyaXB0T2JqZWN0KCkpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhTdXBlcnNj
cmlwdE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICAgICAgcmV0dXJuIChiYWNraW5n
T2JqZWN0LT5tYXRoU3VwZXJzY3JpcHRPYmplY3QoKSkgPyBiYWNraW5nT2JqZWN0LT5tYXRoU3Vw
ZXJzY3JpcHRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoVW5kZXJBdHRyaWJ1dGVdKQot
ICAgICAgICAgICAgcmV0dXJuIChzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFVuZGVyT2JqZWN0
KCkpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhVbmRlck9iamVjdCgpLT53cmFwcGVyKCkg
OiAwOworICAgICAgICAgICAgcmV0dXJuIChiYWNraW5nT2JqZWN0LT5tYXRoVW5kZXJPYmplY3Qo
KSkgPyBiYWNraW5nT2JqZWN0LT5tYXRoVW5kZXJPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAg
ICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlN
YXRoT3ZlckF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5tYXRoT3Zlck9iamVjdCgpKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoT3Zlck9i
amVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICAgICAgcmV0dXJuIChiYWNraW5nT2JqZWN0
LT5tYXRoT3Zlck9iamVjdCgpKSA/IGJhY2tpbmdPYmplY3QtPm1hdGhPdmVyT2JqZWN0KCktPndy
YXBwZXIoKSA6IDA7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZE9wZW5BdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0
dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoRmVuY2VkT3BlblN0cmluZygpOworICAgICAg
ICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPm1hdGhGZW5jZWRPcGVuU3RyaW5nKCk7CiAgICAg
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0
aEZlbmNlZENsb3NlQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2lu
Z09iamVjdC0+bWF0aEZlbmNlZENsb3NlU3RyaW5nKCk7CisgICAgICAgICAgICByZXR1cm4gYmFj
a2luZ09iamVjdC0+bWF0aEZlbmNlZENsb3NlU3RyaW5nKCk7CiAgICAgICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aExpbmVUaGlja25lc3NB
dHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50ZWdl
cjpzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aExpbmVUaGlja25lc3MoKV07CisgICAgICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOmJhY2tpbmdPYmplY3QtPm1hdGhM
aW5lVGhpY2tuZXNzKCldOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhQb3N0c2NyaXB0c0F0dHJpYnV0ZV0pCiAgICAgICAgICAg
ICByZXR1cm4gW3NlbGYgYWNjZXNzaWJpbGl0eU1hdGhQb3N0c2NyaXB0UGFpcnNdOwogICAgICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhQ
cmVzY3JpcHRzQXR0cmlidXRlXSkKICAgICAgICAgICAgIHJldHVybiBbc2VsZiBhY2Nlc3NpYmls
aXR5TWF0aFByZXNjcmlwdFBhaXJzXTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkVGV4dFZhbHVlQXR0
cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5leHBhbmRlZFRl
eHRWYWx1ZSgpOwotICAgIAorICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+ZXhwYW5kZWRU
ZXh0VmFsdWUoKTsKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5RE9NSWRlbnRpZmllckF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBzZWxm
LmF4QmFja2luZ09iamVjdC0+aWRlbnRpZmllckF0dHJpYnV0ZSgpOworICAgICAgICByZXR1cm4g
YmFja2luZ09iamVjdC0+aWRlbnRpZmllckF0dHJpYnV0ZSgpOwogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RE9NQ2xhc3NMaXN0QXR0cmlidXRl
XSkgewogICAgICAgICBWZWN0b3I8U3RyaW5nPiBjbGFzc0xpc3Q7Ci0gICAgICAgIHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5jbGFzc0xpc3QoY2xhc3NMaXN0KTsKKyAgICAgICAgYmFja2luZ09iamVj
dC0+Y2xhc3NMaXN0KGNsYXNzTGlzdCk7CiAgICAgICAgIHJldHVybiBjb252ZXJ0U3RyaW5nc1Rv
TlNBcnJheShjbGFzc0xpc3QpOwogICAgIH0KLSAgICAKKwogICAgIC8vIFRoaXMgYWxsb3dzIHVz
IHRvIGNvbm5lY3QgdG8gYSBwbHVnaW4gdGhhdCBjcmVhdGVzIGEgc2hhZG93IG5vZGUgZm9yIGVk
aXRpbmcgKGxpa2UgUERGcykuCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpAIl9BWEFzc29jaWF0ZWRQbHVnaW5QYXJlbnQiXSkKICAgICAgICAgcmV0dXJuIFtzZWxmIGFz
c29jaWF0ZWRQbHVnaW5QYXJlbnRdOwotICAgIAorCiAgICAgLy8gdGhpcyBpcyB1c2VkIG9ubHkg
YnkgRHVtcFJlbmRlclRyZWUgZm9yIHRlc3RpbmcKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOkAiQVhDbGlja1BvaW50Il0pCi0gICAgICAgIHJldHVybiBbTlNWYWx1ZSB2
YWx1ZVdpdGhQb2ludDpzZWxmLmF4QmFja2luZ09iamVjdC0+Y2xpY2tQb2ludCgpXTsKLSAgICAK
KyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50OmJhY2tpbmdPYmplY3QtPmNs
aWNrUG9pbnQoKV07CisKICAgICAvLyBUaGlzIGlzIHVzZWQgYnkgRFJUIHRvIHZlcmlmeSBDU1Mz
IHNwZWVjaCB3b3Jrcy4KICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAi
QVhEUlRTcGVlY2hBdHRyaWJ1dGUiXSkKICAgICAgICAgcmV0dXJuIFtzZWxmIGJhc2VBY2Nlc3Np
YmlsaXR5U3BlZWNoSGludF07Ci0gICAgCisKICAgICAvLyBVc2VkIGJ5IERSVCB0byBmaW5kIGFu
IGFjY2Vzc2libGUgbm9kZSBieSBpdHMgZWxlbWVudCBpZC4KICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhEUlRFbGVtZW50SWRBdHRyaWJ1dGUiXSkKLSAgICAgICAg
cmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pZGVudGlmaWVyQXR0cmlidXRlKCk7Ci0gICAg
CisgICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5pZGVudGlmaWVyQXR0cmlidXRlKCk7CisK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhBdXRvY29tcGxldGVW
YWx1ZSJdKQotICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF1dG9Db21wbGV0
ZVZhbHVlKCk7CisgICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5hdXRvQ29tcGxldGVWYWx1
ZSgpOwogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlQb3B1cFZhbHVlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5wb3B1cFZhbHVlKCk7CisgICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5wb3B1
cFZhbHVlKCk7CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhL
ZXlTaG9ydGN1dHNWYWx1ZSJdKQotICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmtleVNob3J0Y3V0c1ZhbHVlKCk7Ci0gICAgCisgICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0
LT5rZXlTaG9ydGN1dHNWYWx1ZSgpOworCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpAIkFYQVJJQVByZXNzZWRJc1ByZXNlbnQiXSkKLSAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+cHJlc3NlZElzUHJlc2Vu
dCgpXTsKLSAgICAKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpiYWNr
aW5nT2JqZWN0LT5wcmVzc2VkSXNQcmVzZW50KCldOworCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpAIkFYSXNNdWx0aWxpbmUiXSkKLSAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+YXJpYUlzTXVsdGlsaW5l
KCldOwotICAgIAorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmJhY2tp
bmdPYmplY3QtPmFyaWFJc011bHRpbGluZSgpXTsKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6QCJBWFJlYWRPbmx5VmFsdWUiXSkKLSAgICAgICAgcmV0dXJuIHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5yZWFkT25seVZhbHVlKCk7CisgICAgICAgIHJldHVybiBiYWNraW5n
T2JqZWN0LT5yZWFkT25seVZhbHVlKCk7CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhJc0FjdGl2ZURlc2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIiXSkKLSAg
ICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVj
dC0+aXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyKCldOworICAgICAgICByZXR1
cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmJhY2tpbmdPYmplY3QtPmlzQWN0aXZlRGVzY2Vu
ZGFudE9mRm9jdXNlZENvbnRhaW5lcigpXTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6QCJBWERldGFpbHNFbGVtZW50cyJdKSB7CiAgICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBkZXRhaWxzOwotICAgICAgICBz
ZWxmLmF4QmFja2luZ09iamVjdC0+YXJpYURldGFpbHNFbGVtZW50cyhkZXRhaWxzKTsKKyAgICAg
ICAgYmFja2luZ09iamVjdC0+YXJpYURldGFpbHNFbGVtZW50cyhkZXRhaWxzKTsKICAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoZGV0YWlscyk7CiAgICAgfQogCiAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSZWxhdGl2ZUZyYW1lQXR0
cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6TlNSZWN0RnJv
bUNHUmVjdChzZWxmLmF4QmFja2luZ09iamVjdC0+cmVsYXRpdmVGcmFtZSgpKV07CisgICAgICAg
IHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0Ok5TUmVjdEZyb21DR1JlY3QoYmFja2luZ09i
amVjdC0+cmVsYXRpdmVGcmFtZSgpKV07CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhFcnJvck1lc3NhZ2VFbGVtZW50cyJdKSB7CiAgICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBlcnJvck1lc3NhZ2VzOwot
ICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzKGVy
cm9yTWVzc2FnZXMpOworICAgICAgICBiYWNraW5nT2JqZWN0LT5hcmlhRXJyb3JNZXNzYWdlRWxl
bWVudHMoZXJyb3JNZXNzYWdlcyk7CiAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGVy
cm9yTWVzc2FnZXMpOwogICAgIH0KIAogICAgIC8vIE11bHRpLXNlbGVjdGFibGUKICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUlzTXVsdGlTZWxl
Y3RhYmxlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9v
bDpzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNdWx0aVNlbGVjdGFibGUoKV07Ci0gICAgCisgICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6YmFja2luZ09iamVjdC0+aXNNdWx0
aVNlbGVjdGFibGUoKV07CisKICAgICAvLyBEb2N1bWVudCBhdHRyaWJ1dGVzCiAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEb2N1bWVudFVSSUF0
dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnRV
UkkoKTsKLSAgICAKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPmRvY3VtZW50VVJJKCk7
CisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eURvY3VtZW50RW5jb2RpbmdBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tp
bmdPYmplY3QtPmRvY3VtZW50RW5jb2RpbmcoKTsKLSAgICAKKyAgICAgICAgcmV0dXJuIGJhY2tp
bmdPYmplY3QtPmRvY3VtZW50RW5jb2RpbmcoKTsKKwogICAgIC8vIEFyaWEgY29udHJvbHMgZWxl
bWVudAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5QXJpYUNvbnRyb2xzQXR0cmlidXRlXSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYUNvbnRyb2xzOwotICAgICAgICBzZWxm
LmF4QmFja2luZ09iamVjdC0+YXJpYUNvbnRyb2xzRWxlbWVudHMoYXJpYUNvbnRyb2xzKTsKKyAg
ICAgICAgYmFja2luZ09iamVjdC0+YXJpYUNvbnRyb2xzRWxlbWVudHMoYXJpYUNvbnRyb2xzKTsK
ICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoYXJpYUNvbnRyb2xzKTsKICAgICB9CiAK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUZv
Y3VzYWJsZUFuY2VzdG9yQXR0cmlidXRlXSkgewotICAgICAgICBBWENvcmVPYmplY3QqIG9iamVj
dCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5mb2N1c2FibGVBbmNlc3RvcigpOworICAgICAgICBB
WENvcmVPYmplY3QqIG9iamVjdCA9IGJhY2tpbmdPYmplY3QtPmZvY3VzYWJsZUFuY2VzdG9yKCk7
CiAgICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPndyYXBwZXIoKSA6IG5pbDsKICAgICB9
CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eUVkaXRhYmxlQW5jZXN0b3JBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFYQ29yZU9iamVjdCogb2Jq
ZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmVkaXRhYmxlQW5jZXN0b3IoKTsKKyAgICAgICAg
QVhDb3JlT2JqZWN0KiBvYmplY3QgPSBiYWNraW5nT2JqZWN0LT5lZGl0YWJsZUFuY2VzdG9yKCk7
CiAgICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPndyYXBwZXIoKSA6IG5pbDsKICAgICB9
CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eUhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yQXR0cmlidXRlXSkgewotICAgICAgICBBWENvcmVPYmpl
Y3QqIG9iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5oaWdoZXN0RWRpdGFibGVBbmNlc3Rv
cigpOworICAgICAgICBBWENvcmVPYmplY3QqIG9iamVjdCA9IGJhY2tpbmdPYmplY3QtPmhpZ2hl
c3RFZGl0YWJsZUFuY2VzdG9yKCk7CiAgICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPndy
YXBwZXIoKSA6IG5pbDsKICAgICB9CiAKQEAgLTMzMTcsMTAgKzMyOTIsMTIgQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiB7CiAgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmpl
Y3RCYWNraW5nU3RvcmVdKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpCisgICAgLy8gRklYTUU6IG1ha2UgdXBk
YXRlT2JqZWN0QmFja2luZ1N0b3JlIGFib3ZlIHJldHVybiB0aGUgYmFja2luZyBvYmplY3QuCisg
ICAgYXV0byogYmFja2luZ09iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0OworCisgICAgaWYg
KGJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAg
IAorCiAgICAgc3RhdGljIE5TQXJyYXkqIHBhcmFtQXR0cnMgPSBuaWw7CiAgICAgc3RhdGljIE5T
QXJyYXkqIHRleHRQYXJhbUF0dHJzID0gbmlsOwogICAgIHN0YXRpYyBOU0FycmF5KiB0YWJsZVBh
cmFtQXR0cnMgPSBuaWw7CkBAIC0zMzY3LDcgKzMzNDQsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lN
UExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRp
b25QYXJhbWV0ZXJpemVkQXR0cmlidXRlLAogICAgICAgICAgICAgbmlsXTsKICAgICB9Ci0gICAg
CisKICAgICBpZiAodGV4dFBhcmFtQXR0cnMgPT0gbmlsKSB7CiAgICAgICAgIE5TTXV0YWJsZUFy
cmF5KiB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnBh
cmFtQXR0cnNdOwogICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWExp
bmVGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwpAQCAtMzM5NiwyMiArMzM3MywyMiBA
QCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgd2ViQXJlYVBh
cmFtQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKICAg
ICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKICAgICB9Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkKKworICAgIGlmIChiYWNraW5nT2JqZWN0
LT5pc1Bhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIEBbIE5TQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudHNGb3JTZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlIF07Ci0gICAg
Ci0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RleHRDb250cm9sKCkpCisKKyAgICBp
ZiAoYmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKQogICAgICAgICByZXR1cm4gdGV4dFBh
cmFtQXR0cnM7Ci0gICAgCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhC
YWNraW5nT2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFj
a2luZ09iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorCisgICAgaWYg
KGJhY2tpbmdPYmplY3QtPmlzVGFibGUoKSAmJiBiYWNraW5nT2JqZWN0LT5pc0V4cG9zYWJsZSgp
KQogICAgICAgICByZXR1cm4gdGFibGVQYXJhbUF0dHJzOwotICAgIAotICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNNZW51UmVsYXRlZCgpKQorCisgICAgaWYgKGJhY2tpbmdPYmplY3Qt
PmlzTWVudVJlbGF0ZWQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBpZiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpKQorCisgICAgaWYgKGJhY2tpbmdPYmplY3Qt
PmlzV2ViQXJlYSgpKQogICAgICAgICByZXR1cm4gd2ViQXJlYVBhcmFtQXR0cnM7Ci0gICAgCisK
ICAgICByZXR1cm4gcGFyYW1BdHRyczsKIH0KIApAQCAtMzYxMSw3MyArMzU4OCw3MSBAQCBBTExP
V19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIHsKICAgICBpZiAoIVtzZWxmIHVwZGF0
ZU9iamVjdEJhY2tpbmdTdG9yZV0pCiAgICAgICAgIHJldHVybjsKLSAgICAKKyAgICAvLyBGSVhN
RTogbWFrZSB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmUgYWJvdmUgcmV0dXJuIHRoZSBiYWNraW5n
IG9iamVjdC4KKyAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3Q7
CisKICAgICBpZCB0ZXh0TWFya2VyUmFuZ2UgPSBuaWw7CiAgICAgTlNOdW1iZXIqICAgICAgICAg
ICAgICAgbnVtYmVyID0gbmlsOwogICAgIE5TU3RyaW5nKiAgICAgICAgICAgICAgIHN0cmluZyA9
IG5pbDsKICAgICBOU1JhbmdlICAgICAgICAgICAgICAgICByYW5nZSA9IHswLCAwfTsKICAgICBO
U0FycmF5KiAgICAgICAgICAgICAgICBhcnJheSA9IG5pbDsKLSAgICAKKwogICAgIC8vIGRlY29k
ZSB0aGUgcGFyYW1ldGVyCiAgICAgaWYgKEFYT2JqZWN0SXNUZXh0TWFya2VyUmFuZ2UodmFsdWUp
KQogICAgICAgICB0ZXh0TWFya2VyUmFuZ2UgPSB2YWx1ZTsKLSAgICAKICAgICBlbHNlIGlmIChb
dmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgc2VsZl1dKQogICAgICAgICBudW1iZXIgPSB2
YWx1ZTsKLSAgICAKICAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcg
c2VsZl1dKQogICAgICAgICBzdHJpbmcgPSB2YWx1ZTsKLSAgICAKICAgICBlbHNlIGlmIChbdmFs
dWUgaXNLaW5kT2ZDbGFzczpbTlNWYWx1ZSBzZWxmXV0pCiAgICAgICAgIHJhbmdlID0gW3ZhbHVl
IHJhbmdlVmFsdWVdOwotICAgIAogICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltO
U0FycmF5IHNlbGZdXSkKICAgICAgICAgYXJyYXkgPSB2YWx1ZTsKLSAgICAKKwogICAgIC8vIGhh
bmRsZSB0aGUgY29tbWFuZAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
IEAiQVhTZWxlY3RlZFRleHRNYXJrZXJSYW5nZSJdKSB7CiAgICAgICAgIEFTU0VSVCh0ZXh0TWFy
a2VyUmFuZ2UpOwotICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0U2VsZWN0ZWRWaXNp
YmxlUG9zaXRpb25SYW5nZShbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJS
YW5nZTp0ZXh0TWFya2VyUmFuZ2VdKTsKKyAgICAgICAgYmFja2luZ09iamVjdC0+c2V0U2VsZWN0
ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRN
YXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdKTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV0pIHsK
ICAgICAgICAgW3NlbGYgYmFzZUFjY2Vzc2liaWxpdHlTZXRGb2N1czpbbnVtYmVyIGJvb2xWYWx1
ZV1dOwogICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0Fj
Y2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG51bWJlciAmJiBzZWxm
LmF4QmFja2luZ09iamVjdC0+Y2FuU2V0TnVtZXJpY1ZhbHVlKCkpCi0gICAgICAgICAgICBzZWxm
LmF4QmFja2luZ09iamVjdC0+c2V0VmFsdWUoW251bWJlciBmbG9hdFZhbHVlXSk7CisgICAgICAg
IGlmIChudW1iZXIgJiYgYmFja2luZ09iamVjdC0+Y2FuU2V0TnVtZXJpY1ZhbHVlKCkpCisgICAg
ICAgICAgICBiYWNraW5nT2JqZWN0LT5zZXRWYWx1ZShbbnVtYmVyIGZsb2F0VmFsdWVdKTsKICAg
ICAgICAgZWxzZSBpZiAoc3RyaW5nKQotICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnNldFZhbHVlKHN0cmluZyk7CisgICAgICAgICAgICBiYWNraW5nT2JqZWN0LT5zZXRWYWx1ZShz
dHJpbmcpOwogICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgaWYgKCFudW1iZXIp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRT
ZWxlY3RlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOworICAgICAgICBiYWNraW5nT2JqZWN0LT5zZXRT
ZWxlY3RlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOwogICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxkcmVuQXR0cmli
dXRlXSkgewogICAgICAgICBpZiAoIWFycmF5KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgpICE9IEFjY2Vzc2liaWxpdHlS
b2xlOjpMaXN0Qm94KQorICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCkgIT0g
QWNjZXNzaWJpbGl0eVJvbGU6Okxpc3RCb3gpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3Rl
ZENoaWxkcmVuOwogICAgICAgICBjb252ZXJ0VG9WZWN0b3IoYXJyYXksIHNlbGVjdGVkQ2hpbGRy
ZW4pOwotICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TGlzdEJveD4oKnNlbGYuYXhCYWNr
aW5nT2JqZWN0KS5zZXRTZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW4pOwotICAgIH0g
ZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgeworICAgICAg
ICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TGlzdEJveD4oKmJhY2tpbmdPYmplY3QpLnNldFNlbGVj
dGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbik7CisgICAgfSBlbHNlIGlmIChiYWNraW5nT2Jq
ZWN0LT5pc1RleHRDb250cm9sKCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRlXSkgewotICAg
ICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNldFNlbGVjdGVkVGV4dChzdHJpbmcpOwor
ICAgICAgICAgICAgYmFja2luZ09iamVjdC0+c2V0U2VsZWN0ZWRUZXh0KHN0cmluZyk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2li
aWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5zZXRTZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRSYW5nZShyYW5nZS5s
b2NhdGlvbiwgcmFuZ2UubGVuZ3RoKSk7CisgICAgICAgICAgICBiYWNraW5nT2JqZWN0LT5zZXRT
ZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVu
Z3RoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
OiBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+bWFrZVJhbmdlVmlzaWJsZShQbGFpblRleHRS
YW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKSk7CisgICAgICAgICAgICBiYWNraW5n
T2JqZWN0LT5tYWtlUmFuZ2VWaXNpYmxlKFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCBy
YW5nZS5sZW5ndGgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3NpbmdBdHRyaWJ1dGVdIHx8IFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFeHBhbmRlZEF0dHJp
YnV0ZV0pCi0gICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRJc0V4cGFuZGVkKFtudW1i
ZXIgYm9vbFZhbHVlXSk7CisgICAgICAgIGJhY2tpbmdPYmplY3QtPnNldElzRXhwYW5kZWQoW251
bWJlciBib29sVmFsdWVdKTsKICAgICBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRSb3dzQXR0cmlidXRlXSkgewogICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRS
b3dzOwogICAgICAgICBjb252ZXJ0VG9WZWN0b3IoYXJyYXksIHNlbGVjdGVkUm93cyk7Ci0gICAg
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVlKCkgfHwgKGlzPEFjY2Vzc2liaWxp
dHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5
VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJp
bGl0eSgpKSkKLSAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRTZWxlY3RlZFJv
d3Moc2VsZWN0ZWRSb3dzKTsKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVHJlZSgpIHx8
IChiYWNraW5nT2JqZWN0LT5pc1RhYmxlKCkgJiYgYmFja2luZ09iamVjdC0+aXNFeHBvc2FibGUo
KSkpCisgICAgICAgICAgICBiYWNraW5nT2JqZWN0LT5zZXRTZWxlY3RlZFJvd3Moc2VsZWN0ZWRS
b3dzKTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlHcmFiYmVkQXR0cmlidXRlXSkKLSAgICAgICAgc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPnNldEFSSUFHcmFiYmVkKFtudW1iZXIgYm9vbFZhbHVlXSk7Ci0gICAgZWxzZSBpZiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpICYmIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoQXR0
cmlidXRlXSkKLSAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNldFByZXZlbnRLZXlib2Fy
ZERPTUV2ZW50RGlzcGF0Y2goW251bWJlciBib29sVmFsdWVdKTsKLSAgICBlbHNlIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+aXNXZWJBcmVhKCkgJiYgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNhcmV0QnJvd3NpbmdFbmFibGVkQXR0cmlidXRlXSkKLSAg
ICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKFtudW1i
ZXIgYm9vbFZhbHVlXSk7CisgICAgICAgIGJhY2tpbmdPYmplY3QtPnNldEFSSUFHcmFiYmVkKFtu
dW1iZXIgYm9vbFZhbHVlXSk7CisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNXZWJBcmVh
KCkgJiYgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVByZXZl
bnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2hBdHRyaWJ1dGVdKQorICAgICAgICBiYWNraW5nT2Jq
ZWN0LT5zZXRQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoKFtudW1iZXIgYm9vbFZhbHVl
XSk7CisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNXZWJBcmVhKCkgJiYgW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNhcmV0QnJvd3NpbmdFbmFibGVk
QXR0cmlidXRlXSkKKyAgICAgICAgYmFja2luZ09iamVjdC0+c2V0Q2FyZXRCcm93c2luZ0VuYWJs
ZWQoW251bWJlciBib29sVmFsdWVdKTsKIH0KIAogLy8gVXNlZCB0byBzZXQgYXR0cmlidXRlcyBz
eW5jaHJvbm91c2x5IG9uIGFjY2Vzc2liaWxpdHkgZWxlbWVudHMgd2l0aGluIHRlc3RzLgpAQCAt
Mzg1NSw2ICszODMwLDE1IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JFR0lO
CiAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGUg
Zm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXIKIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogeworICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAvLyBGSVhNRTogbWFrZSB1cGRhdGVPYmplY3RCYWNraW5n
U3RvcmUgYWJvdmUgcmV0dXJuIHRoZSBiYWNraW5nIG9iamVjdC4KKyAgICBhdXRvKiBiYWNraW5n
T2JqZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3Q7CisKKyAgICAvLyBCYXNpYyBwYXJhbWV0ZXIg
dmFsaWRhdGlvbi4KKyAgICBpZiAoIWF0dHJpYnV0ZSB8fCAhcGFyYW1ldGVyKQorICAgICAgICBy
ZXR1cm4gbmlsOworCiAgICAgaWQgdGV4dE1hcmtlciA9IG5pbDsKICAgICBpZCB0ZXh0TWFya2Vy
UmFuZ2UgPSBuaWw7CiAgICAgTlNOdW1iZXIqIG51bWJlciA9IG5pbDsKQEAgLTM4NjYsMzkgKzM4
NTAsMjUgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgTlNSYW5n
ZSByYW5nZSA9IHswLCAwfTsKICAgICBib29sIHJhbmdlU2V0ID0gZmFsc2U7CiAgICAgTlNSZWN0
IHJlY3QgPSBOU1plcm9SZWN0OwotICAgIAotICAgIC8vIGJhc2ljIHBhcmFtZXRlciB2YWxpZGF0
aW9uCi0gICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdCB8fCAhYXR0cmlidXRlIHx8ICFwYXJh
bWV0ZXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgaWYgKCFbc2VsZiB1cGRhdGVP
YmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAorCiAgICAgLy8g
Y29tbW9uIHBhcmFtZXRlciB0eXBlIGNoZWNrL2Nhc3RpbmcuICBOaWwgY2hlY2tzIGluIGhhbmRs
ZXJzIGNhdGNoIHdyb25nIHR5cGUgY2FzZS4KICAgICAvLyBOT1RFOiBUaGlzIGFzc3VtZXMgbmls
IGlzIG5vdCBhIHZhbGlkIHBhcmFtZXRlciwgYmVjYXVzZSBpdCBpcyBpbmRpc3Rpbmd1aXNoYWJs
ZSBmcm9tCiAgICAgLy8gYSBwYXJhbWV0ZXIgb2YgdGhlIHdyb25nIHR5cGUuCiAgICAgaWYgKEFY
T2JqZWN0SXNUZXh0TWFya2VyKHBhcmFtZXRlcikpCiAgICAgICAgIHRleHRNYXJrZXIgPSBwYXJh
bWV0ZXI7Ci0gICAgCiAgICAgZWxzZSBpZiAoQVhPYmplY3RJc1RleHRNYXJrZXJSYW5nZShwYXJh
bWV0ZXIpKQogICAgICAgICB0ZXh0TWFya2VyUmFuZ2UgPSBwYXJhbWV0ZXI7Ci0gICAgCiAgICAg
ZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBzZWxmXV0pCiAgICAgICAgIHVpRWxlbWVudCA9IFsoV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqKXBhcmFtZXRlciBheEJhY2tpbmdPYmplY3RdOwotCiAgICAgZWxzZSBpZiAo
W3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU051bWJlciBzZWxmXV0pCiAgICAgICAgIG51bWJl
ciA9IHBhcmFtZXRlcjsKLSAgICAKICAgICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xh
c3M6W05TQXJyYXkgc2VsZl1dKQogICAgICAgICBhcnJheSA9IHBhcmFtZXRlcjsKLSAgICAKICAg
ICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBzZWxmXV0p
CiAgICAgICAgIGRpY3Rpb25hcnkgPSBwYXJhbWV0ZXI7Ci0gICAgCiAgICAgZWxzZSBpZiAoW3Bh
cmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU1ZhbHVlIHNlbGZdXSAmJiAhc3RyY21wKFsoTlNWYWx1
ZSopcGFyYW1ldGVyIG9iakNUeXBlXSwgQGVuY29kZShOU1BvaW50KSkpIHsKICAgICAgICAgcG9p
bnRTZXQgPSB0cnVlOwogICAgICAgICBwb2ludCA9IFsoTlNWYWx1ZSopcGFyYW1ldGVyIHBvaW50
VmFsdWVdOwotICAgICAgICAKICAgICB9IGVsc2UgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFz
czpbTlNWYWx1ZSBzZWxmXV0gJiYgIXN0cmNtcChbKE5TVmFsdWUqKXBhcmFtZXRlciBvYmpDVHlw
ZV0sIEBlbmNvZGUoTlNSYW5nZSkpKSB7CiAgICAgICAgIHJhbmdlU2V0ID0gdHJ1ZTsKICAgICAg
ICAgcmFuZ2UgPSBbKE5TVmFsdWUqKXBhcmFtZXRlciByYW5nZVZhbHVlXTsKQEAgLTM5MDgsMTUg
KzM4NzgsMTkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAg
IC8vIEF0dHJpYnV0ZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuIEFsbG93IHN1cGVyIHRvIGhhbmRs
ZS4KICAgICAgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0
cmlidXRlIGZvclBhcmFtZXRlcjpwYXJhbWV0ZXJdOwogICAgIH0KLSAgICAKKwogICAgIC8vIGRp
c3BhdGNoCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eVNlbGVjdFRleHRXaXRoQ3JpdGVyaWFQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAg
ICAvLyBUbyBiZSBkZXByZWNhdGVkLgotICAgICAgICBhdXRvIHJlc3VsdCA9IEFjY2Vzc2liaWxp
dHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxWZWN0b3I8U3RyaW5nPj4oW2RpY3Rpb25h
cnksIHNlbGZdICgpIC0+IFZlY3RvcjxTdHJpbmc+IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBB
Y2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8VmVjdG9yPFN0cmluZz4+
KFtkaWN0aW9uYXJ5LCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gVmVjdG9yPFN0cmluZz4geworICAgICAgICAgICAg
YXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0
OworICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVy
biBWZWN0b3I8U3RyaW5nPigpOworCiAgICAgICAgICAgICBhdXRvIGNyaXRlcmlhID0gYWNjZXNz
aWJpbGl0eVRleHRDcml0ZXJpYUZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUoZGljdGlvbmFyeSk7
Ci0gICAgICAgICAgICBjcml0ZXJpYS5zZWNvbmQudGV4dFJhbmdlcyA9IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5maW5kVGV4dFJhbmdlcyhjcml0ZXJpYS5maXJzdCk7CisgICAgICAgICAgICBjcml0
ZXJpYS5zZWNvbmQudGV4dFJhbmdlcyA9IGJhY2tpbmdPYmplY3QtPmZpbmRUZXh0UmFuZ2VzKGNy
aXRlcmlhLmZpcnN0KTsKICAgICAgICAgICAgIEFTU0VSVChjcml0ZXJpYS5zZWNvbmQudGV4dFJh
bmdlcy5zaXplKCkgPD0gMSk7Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPnBlcmZvcm1UZXh0T3BlcmF0aW9uKGNyaXRlcmlhLnNlY29uZCk7CisgICAgICAgICAgICBy
ZXR1cm4gYmFja2luZ09iamVjdC0+cGVyZm9ybVRleHRPcGVyYXRpb24oY3JpdGVyaWEuc2Vjb25k
KTsKICAgICAgICAgfSk7CiAgICAgICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IDEpOwogICAg
ICAgICBpZiAocmVzdWx0LnNpemUoKSA+IDApCkBAIC0zOTI2LDEzICszOTAwLDE3IEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRXaXRoQ3JpdGVyaWFQYXJhbWV0
ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICBhdXRvIGNyaXRlcmlhID0gYWNjZXNzaWJpbGl0
eVNlYXJjaFRleHRDcml0ZXJpYUZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUoZGljdGlvbmFyeSk7
Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJl
YWQ8TlNBcnJheSAqPihbJmNyaXRlcmlhLCBzZWxmXSAoKSAtPiBOU0FycmF5ICogewotICAgICAg
ICAgICAgYXV0byByYW5nZXMgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZmluZFRleHRSYW5nZXMo
Y3JpdGVyaWEpOworICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZy
b21NYWluVGhyZWFkPE5TQXJyYXkgKj4oWyZjcml0ZXJpYSwgcHJvdGVjdGVkU2VsZiA9IFJldGFp
blB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IE5TQXJyYXkg
KiB7CisgICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQo
KS5heEJhY2tpbmdPYmplY3Q7CisgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICAgICAgYXV0byByYW5nZXMgPSBiYWNr
aW5nT2JqZWN0LT5maW5kVGV4dFJhbmdlcyhjcml0ZXJpYSk7CiAgICAgICAgICAgICBpZiAocmFu
Z2VzLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAg
TlNNdXRhYmxlQXJyYXkgKm1hcmtlcnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNp
dHk6cmFuZ2VzLnNpemUoKV07CiAgICAgICAgICAgICBmb3IgKGF1dG8gcmFuZ2UgOiByYW5nZXMp
IHsKLSAgICAgICAgICAgICAgICBpZiAoaWQgbWFya2VyID0gW3NlbGYgdGV4dE1hcmtlclJhbmdl
RnJvbVJhbmdlOnJhbmdlXSkKKyAgICAgICAgICAgICAgICBpZiAoaWQgbWFya2VyID0gW3Byb3Rl
Y3RlZFNlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOnJhbmdlXSkKICAgICAgICAgICAgICAg
ICAgICAgW21hcmtlcnMgYWRkT2JqZWN0Om1hcmtlcl07CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICByZXR1cm4gbWFya2VyczsKQEAgLTM5NDAsOSArMzkxOCwxMyBAQCBBTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvblBhcmFtZXRlcml6ZWRBdHRy
aWJ1dGVdKSB7Ci0gICAgICAgIGF1dG8gb3BlcmF0aW9uUmVzdWx0ID0gQWNjZXNzaWJpbGl0eTo6
cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFZlY3RvcjxTdHJpbmc+PihbZGljdGlvbmFyeSwg
c2VsZl0gKCkgLT4gVmVjdG9yPFN0cmluZz4gewotICAgICAgICAgICAgYXV0byB0ZXh0T3BlcmF0
aW9uID0gYWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRl
KHNlbGYsIGRpY3Rpb25hcnkpOwotICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5wZXJmb3JtVGV4dE9wZXJhdGlvbih0ZXh0T3BlcmF0aW9uKTsKKyAgICAgICAgYXV0byBv
cGVyYXRpb25SZXN1bHQgPSBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJl
YWQ8VmVjdG9yPFN0cmluZz4+KFtkaWN0aW9uYXJ5LCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRy
PFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gVmVjdG9yPFN0cmlu
Zz4geworICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0
KCkuYXhCYWNraW5nT2JqZWN0OworICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQorICAg
ICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworCisgICAgICAgICAgICBhdXRv
IHRleHRPcGVyYXRpb24gPSBhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGUocHJvdGVjdGVkU2VsZi5nZXQoKSwgZGljdGlvbmFyeSk7CisgICAgICAgICAg
ICByZXR1cm4gYmFja2luZ09iamVjdC0+cGVyZm9ybVRleHRPcGVyYXRpb24odGV4dE9wZXJhdGlv
bik7CiAgICAgICAgIH0pOwogICAgICAgICBpZiAob3BlcmF0aW9uUmVzdWx0LmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBuaWw7CkBAIC0zOTU1LDE0ICszOTM3LDE0IEBAIEFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDb3VudEZvclNlYXJjaFByZWRpY2F0ZVBh
cmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlTZWFyY2hDcml0
ZXJpYSBjcml0ZXJpYSA9IGFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYUZvclNlYXJjaFByZWRp
Y2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUoZGljdGlvbmFyeSk7CiAgICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByZXN1bHRzOwotICAgICAg
ICBzZWxmLmF4QmFja2luZ09iamVjdC0+ZmluZE1hdGNoaW5nT2JqZWN0cygmY3JpdGVyaWEsIHJl
c3VsdHMpOworICAgICAgICBiYWNraW5nT2JqZWN0LT5maW5kTWF0Y2hpbmdPYmplY3RzKCZjcml0
ZXJpYSwgcmVzdWx0cyk7CiAgICAgICAgIHJldHVybiBAKHJlc3VsdHMuc2l6ZSgpKTsKICAgICB9
Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5VUlFbGVtZW50c0ZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7
CiAgICAgICAgIEFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYSBjcml0ZXJpYSA9IGFjY2Vzc2li
aWxpdHlTZWFyY2hDcml0ZXJpYUZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGUoZGljdGlvbmFyeSk7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciByZXN1bHRzOwotICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+
ZmluZE1hdGNoaW5nT2JqZWN0cygmY3JpdGVyaWEsIHJlc3VsdHMpOworICAgICAgICBiYWNraW5n
T2JqZWN0LT5maW5kTWF0Y2hpbmdPYmplY3RzKCZjcml0ZXJpYSwgcmVzdWx0cyk7CiAgICAgICAg
IHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJlc3VsdHMpOwogICAgIH0KIApAQCAtMzk5MiwxMyAr
Mzk3NCwxMyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlm
IChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlMaW5lVGV4dE1hcmtl
clJhbmdlRm9yVGV4dE1hcmtlclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24gPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyOnRleHRNYXJrZXJdOwotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNp
YmxlUG9zaXRpb25SYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5saW5lUmFuZ2VGb3JQb3Np
dGlvbih2aXNpYmxlUG9zaXRpb24pOworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNp
YmxlUG9zaXRpb25SYW5nZSA9IGJhY2tpbmdPYmplY3QtPmxpbmVSYW5nZUZvclBvc2l0aW9uKHZp
c2libGVQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9t
VmlzaWJsZVBvc2l0aW9uczp2aXNpYmxlUG9zaXRpb25SYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2
aXNpYmxlUG9zaXRpb25SYW5nZS5lbmRdOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNaXNzcGVsbGluZ1RleHRNYXJrZXJSYW5nZVBh
cmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIGF1dG8gY3JpdGVyaWEgPSBhY2Nlc3Np
YmlsaXR5TWlzc3BlbGxpbmdTZWFyY2hDcml0ZXJpYUZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUo
c2VsZiwgZGljdGlvbmFyeSk7Ci0gICAgICAgIGlmIChhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBz
ZWxmLmF4QmFja2luZ09iamVjdC0+Z2V0TWlzc3BlbGxpbmdSYW5nZShjcml0ZXJpYS5maXJzdCwg
Y3JpdGVyaWEuc2Vjb25kKSkKKyAgICAgICAgaWYgKGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IGJh
Y2tpbmdPYmplY3QtPmdldE1pc3NwZWxsaW5nUmFuZ2UoY3JpdGVyaWEuZmlyc3QsIGNyaXRlcmlh
LnNlY29uZCkpCiAgICAgICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJh
bmdlOm1pc3NwZWxsaW5nUmFuZ2VdOwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KQEAgLTQw
MTMsNyArMzk5NSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
Rm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICByZXR1cm4gW3NlbGYg
X3RleHRNYXJrZXJGb3JJbmRleDpbbnVtYmVyIGludGVnZXJWYWx1ZV1dOwogICAgIH0KLSAgICAK
KwogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVUlFbGVtZW50Rm9yVGV4
dE1hcmtlciJdKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4T2JqZWN0ID0gW3Nl
bGYgYWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CiAgICAgICAg
IGlmICghYXhPYmplY3QpCkBAIC00MDMyLDE5ICs0MDE0LDE5IEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
OkAiQVhMaW5lRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcild
OwotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDpzZWxmLmF4
QmFja2luZ09iamVjdC0+bGluZUZvclBvc2l0aW9uKHZpc2libGVQb3MpXTsKKyAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6YmFja2luZ09iamVjdC0+bGluZUZv
clBvc2l0aW9uKHZpc2libGVQb3MpXTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJSYW5nZUZvckxpbmUiXSkgewogICAgICAg
ICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlOwogICAgICAgICBpZiAoW251bWJlciB1bnNp
Z25lZEludGVnZXJWYWx1ZV0gIT0gTlNOb3RGb3VuZCkKLSAgICAgICAgICAgIHZwUmFuZ2UgPSBz
ZWxmLmF4QmFja2luZ09iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKFtudW1iZXIg
dW5zaWduZWRJbnRWYWx1ZV0pOworICAgICAgICAgICAgdnBSYW5nZSA9IGJhY2tpbmdPYmplY3Qt
PnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZShbbnVtYmVyIHVuc2lnbmVkSW50VmFsdWVdKTsK
ICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25z
OnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwogICAgIH0KLSAgICAKKwog
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3RyaW5nRm9yVGV4dE1hcmtl
clJhbmdlIl0pIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIHJhbmdlRm9y
VGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0gICAgICAgIHJldHVybiBzZWxmLmF4
QmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UocmFuZ2UpOworICAgICAgICByZXR1cm4gYmFj
a2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UocmFuZ2UpOwogICAgIH0KIAogICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4dE1hcmtlckZvclBvc2l0aW9uIl0pIHsKQEAg
LTQwNjQsNyArNDA0Niw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
CiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhCb3VuZHNGb3JUZXh0TWFy
a2VyUmFuZ2UiXSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3NlbGYgcmFuZ2VG
b3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKLSAgICAgICAgYXV0byBib3VuZHMg
PSBGbG9hdFJlY3Qoc2VsZi5heEJhY2tpbmdPYmplY3QtPmJvdW5kc0ZvclJhbmdlKHJhbmdlKSk7
CisgICAgICAgIGF1dG8gYm91bmRzID0gRmxvYXRSZWN0KGJhY2tpbmdPYmplY3QtPmJvdW5kc0Zv
clJhbmdlKHJhbmdlKSk7CiAgICAgICAgIE5TUmVjdCByZWN0ID0gW3NlbGYgY29udmVydFJlY3RU
b1NwYWNlOmJvdW5kcyBzcGFjZTpBY2Nlc3NpYmlsaXR5Q29udmVyc2lvblNwYWNlOjpTY3JlZW5d
OwogICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0XTsKICAgICB9CkBA
IC00MDkyLDkgKzQwNzQsOSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQK
ICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5U3RyaW5nRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgeworICAgICAgICBpZiAoYmFj
a2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7CiAgICAgICAgICAgICBQbGFpblRleHRSYW5n
ZSBwbGFpblRleHRSYW5nZSA9IFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5s
ZW5ndGgpOwotICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb0FYU3Ry
aW5nRm9yUmFuZ2UocGxhaW5UZXh0UmFuZ2UpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tpbmdP
YmplY3QtPmRvQVhTdHJpbmdGb3JSYW5nZShwbGFpblRleHRSYW5nZSk7CiAgICAgICAgIH0KIAog
ICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFk
PE5TU3RyaW5nICo+KFsmcmFuZ2UsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBOU1N0cmluZyAqIHsKQEAgLTQxNTcs
NyArNDEzOSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAg
ICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVyT2Zmc2V0
Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKICAgICAgICAgcmV0dXJuIFtzZWxmIG5leHRUZXh0
TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OmNoYXJhY3Rlck9mZnNldF07CiAgICAgfQotICAgIAor
CiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91c1RleHRNYXJr
ZXJGb3JUZXh0TWFya2VyIl0pIHsKICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9m
ZnNldCA9IFtzZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CiAg
ICAgICAgIHJldHVybiBbc2VsZiBwcmV2aW91c1RleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6
Y2hhcmFjdGVyT2Zmc2V0XTsKQEAgLTQxODksMTMgKzQxNzEsMTMgQEAgQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6QCJBWExlZnRMaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4
dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJh
bmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmxlZnRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
dmlzaWJsZVBvcyk7CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBiYWNr
aW5nT2JqZWN0LT5sZWZ0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3MpOwogICAg
ICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBS
YW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CiAgICAgfQotICAgIAorCiAgICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhSaWdodExpbmVUZXh0TWFya2VyUmFu
Z2VGb3JUZXh0TWFya2VyIl0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3Mg
PSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAg
ICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+
cmlnaHRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvcyk7CisgICAgICAgIFZpc2li
bGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5yaWdodExpbmVWaXNpYmxl
UG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zKTsKICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJr
ZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBS
YW5nZS5lbmRdOwogICAgIH0KIApAQCAtNDI0OSwyMCArNDIzMSwyMCBAQCBBTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpAIkFYTmV4dExpbmVFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4
dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZv
clZpc2libGVQb3NpdGlvbjpzZWxmLmF4QmFja2luZ09iamVjdC0+bmV4dExpbmVFbmRQb3NpdGlv
bih2aXNpYmxlUG9zKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJs
ZVBvc2l0aW9uOmJhY2tpbmdPYmplY3QtPm5leHRMaW5lRW5kUG9zaXRpb24odmlzaWJsZVBvcyld
OwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFY
UHJldmlvdXNMaW5lU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZp
c2libGVQb3NpdGlvbjpzZWxmLmF4QmFja2luZ09iamVjdC0+cHJldmlvdXNMaW5lU3RhcnRQb3Np
dGlvbih2aXNpYmxlUG9zKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uOmJhY2tpbmdPYmplY3QtPnByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24odmlz
aWJsZVBvcyldOwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpAIkFYTmV4dFNlbnRlbmNlRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewogICAg
ICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21N
YWluVGhyZWFkPGlkPihbdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewog
ICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09i
amVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFjYWNoZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIENoYXJhY3Rl
ck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbcHJvdGVjdGVkU2VsZiBjaGFyYWN0ZXJPZmZzZXRG
b3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwogICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IG5l
eHRFbmQgPSBjYWNoZS0+bmV4dFNlbnRlbmNlRW5kQ2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9m
ZnNldCk7CiAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlckZvckNo
YXJhY3Rlck9mZnNldDpuZXh0RW5kXTsKQEAgLTQzMDcsMTAgKzQyODksMTAgQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWFN0eWxlVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7CiAgICAg
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9y
VGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2
cFJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnN0eWxlUmFuZ2VGb3JQb3NpdGlvbih2aXNp
YmxlUG9zKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IGJhY2tpbmdP
YmplY3QtPnN0eWxlUmFuZ2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKICAgICAgICAgcmV0dXJu
IFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQg
ZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTGVuZ3RoRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKICAg
ICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdl
OnRleHRNYXJrZXJSYW5nZV07CiAgICAgICAgIGludCBsZW5ndGggPSBBWE9iamVjdENhY2hlOjps
ZW5ndGhGb3JSYW5nZShyYW5nZS5nZXQoKSk7CkBAIC00MzE4LDEzICs0MzAwLDEzIEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Omxlbmd0aF07CiAgICAgfQot
ICAgIAorCiAgICAgLy8gVXNlZCBvbmx5IGJ5IER1bXBSZW5kZXJUcmVlIChzbyBmYXIpLgogICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3RhcnRUZXh0TWFya2VyRm9yVGV4
dE1hcmtlclJhbmdlIl0pIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIHJh
bmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CiAgICAgICAgIHJldHVybiBb
c2VsZiBzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOnJhbmdlIGlzU3RhcnQ6WUVTXTsKICAg
ICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEVuZFRl
eHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKICAg
ICAgICAgcmV0dXJuIFtzZWxmIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6cmFuZ2UgaXNT
dGFydDpOT107CkBAIC00MzQ4LDcwICs0MzMwLDY3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVN
RU5UQVRJT05TX0VORAogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlU
YWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFi
bGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0
eSgpKSB7CisgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVGFibGUoKSAmJiBiYWNraW5nT2JqZWN0
LT5pc0V4cG9zYWJsZSgpKSB7CiAgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlDZWxsRm9yQ29sdW1uQW5kUm93UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZV0pIHsKICAgICAgICAgICAgIGlmIChhcnJheSA9PSBuaWwgfHwgW2FycmF5IGNvdW50XSAhPSAy
KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsKiBjZWxsID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJh
Y2tpbmdPYmplY3QpLmNlbGxGb3JDb2x1bW5BbmRSb3coW1thcnJheSBvYmplY3RBdEluZGV4OjBd
IHVuc2lnbmVkSW50VmFsdWVdLCBbW2FycmF5IG9iamVjdEF0SW5kZXg6MV0gdW5zaWduZWRJbnRW
YWx1ZV0pOwotICAgICAgICAgICAgaWYgKCFjZWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBjZWxsLT53cmFwcGVyKCk7Cisg
ICAgICAgICAgICBhdXRvKiBjZWxsID0gYmFja2luZ09iamVjdC0+Y2VsbEZvckNvbHVtbkFuZFJv
dyhbW2FycmF5IG9iamVjdEF0SW5kZXg6MF0gdW5zaWduZWRJbnRWYWx1ZV0sIFtbYXJyYXkgb2Jq
ZWN0QXRJbmRleDoxXSB1bnNpZ25lZEludFZhbHVlXSk7CisgICAgICAgICAgICByZXR1cm4gY2Vs
bCA/IGNlbGwtPndyYXBwZXIoKSA6IG5pbDsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgeworCisgICAgaWYgKGJh
Y2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgewogICAgICAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyAqKWtBWExpbmVGb3JJbmRleFBhcmFtZXRlcml6ZWRB
dHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5kb0FYTGluZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKKyAgICAgICAgICAg
IGludCBsaW5lTnVtYmVyID0gYmFja2luZ09iamVjdC0+ZG9BWExpbmVGb3JJbmRleChbbnVtYmVy
IGludFZhbHVlXSk7CiAgICAgICAgICAgICBpZiAobGluZU51bWJlciA8IDApCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0
aFVuc2lnbmVkSW50OmxpbmVOdW1iZXJdOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nICopa0FYUmFuZ2VGb3JM
aW5lUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIFBsYWluVGV4dFJhbmdl
IHRleHRSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKFtudW1i
ZXIgaW50VmFsdWVdKTsKKyAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IGJh
Y2tpbmdPYmplY3QtPmRvQVhSYW5nZUZvckxpbmUoW251bWJlciBpbnRWYWx1ZV0pOwogICAgICAg
ICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOiBOU01ha2VSYW5nZSh0ZXh0UmFu
Z2Uuc3RhcnQsIHRleHRSYW5nZS5sZW5ndGgpXTsKICAgICAgICAgfQotICAgICAgICAKKwogICAg
ICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyopa0FYU3RyaW5n
Rm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICAgICAgUGxhaW5UZXh0
UmFuZ2UgcGxhaW5UZXh0UmFuZ2UgPSBQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFu
Z2UubGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiByYW5nZVNldCA/IChpZCkoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmRvQVhTdHJpbmdGb3JSYW5nZShwbGFpblRleHRSYW5nZSkpIDogbmlsOwor
ICAgICAgICAgICAgcmV0dXJuIHJhbmdlU2V0ID8gKGlkKShiYWNraW5nT2JqZWN0LT5kb0FYU3Ry
aW5nRm9yUmFuZ2UocGxhaW5UZXh0UmFuZ2UpKSA6IG5pbDsKICAgICAgICAgfQotICAgICAgICAK
KwogICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyopa0FY
UmFuZ2VGb3JQb3NpdGlvblBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICBp
ZiAoIXBvaW50U2V0KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICBJ
bnRQb2ludCB3ZWJDb3JlUG9pbnQgPSBJbnRQb2ludChwb2ludCk7Ci0gICAgICAgICAgICBQbGFp
blRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9BWFJhbmdlRm9y
UG9zaXRpb24od2ViQ29yZVBvaW50KTsKKyAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRS
YW5nZSA9IGJhY2tpbmdPYmplY3QtPmRvQVhSYW5nZUZvclBvc2l0aW9uKHdlYkNvcmVQb2ludCk7
CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdl
KHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCldOwogICAgICAgICB9Ci0gICAgICAg
IAorCiAgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nKilr
QVhSYW5nZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIFBs
YWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb0FYUmFuZ2VG
b3JJbmRleChbbnVtYmVyIGludFZhbHVlXSk7CisgICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0
ZXh0UmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5kb0FYUmFuZ2VGb3JJbmRleChbbnVtYmVyIGludFZh
bHVlXSk7CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFr
ZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCldOwogICAgICAgICB9Ci0g
ICAgICAgIAorCiAgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3Ry
aW5nKilrQVhCb3VuZHNGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAg
ICAgICBpZiAoIXJhbmdlU2V0KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAg
ICAgICBQbGFpblRleHRSYW5nZSBwbGFpblRleHRSYW5nZSA9IFBsYWluVGV4dFJhbmdlKHJhbmdl
LmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOwotICAgICAgICAgICAgYXV0byBib3VuZHMgPSBGbG9h
dFJlY3Qoc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvQVhCb3VuZHNGb3JSYW5nZVVzaW5nQ2hhcmFj
dGVyT2Zmc2V0KHBsYWluVGV4dFJhbmdlKSk7CisgICAgICAgICAgICBhdXRvIGJvdW5kcyA9IEZs
b2F0UmVjdChiYWNraW5nT2JqZWN0LT5kb0FYQm91bmRzRm9yUmFuZ2VVc2luZ0NoYXJhY3Rlck9m
ZnNldChwbGFpblRleHRSYW5nZSkpOwogICAgICAgICAgICAgTlNSZWN0IHJlY3QgPSBbc2VsZiBj
b252ZXJ0UmVjdFRvU3BhY2U6Ym91bmRzIHNwYWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3Bh
Y2U6OlNjcmVlbl07CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpy
ZWN0XTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6IChOU1N0cmluZyopa0FYUlRGRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmli
dXRlXSkKICAgICAgICAgICAgIHJldHVybiByYW5nZVNldCA/IFtzZWxmIGRvQVhSVEZGb3JSYW5n
ZTpyYW5nZV0gOiBuaWw7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzogKE5TU3RyaW5nKilrQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2VQYXJhbWV0
ZXJpemVkQXR0cmlidXRlXSkKICAgICAgICAgICAgIHJldHVybiByYW5nZVNldCA/IFtzZWxmIGRv
QVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6cmFuZ2VdIDogbmlsOwotICAgICAgICAKKwogICAg
ICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyopa0FYU3R5bGVS
YW5nZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIFBsYWlu
VGV4dFJhbmdlIHRleHRSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb0FYU3R5bGVSYW5n
ZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKKyAgICAgICAgICAgIFBsYWluVGV4dFJhbmdl
IHRleHRSYW5nZSA9IGJhY2tpbmdPYmplY3QtPmRvQVhTdHlsZVJhbmdlRm9ySW5kZXgoW251bWJl
ciBpbnRWYWx1ZV0pOwogICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdl
OiBOU01ha2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5sZW5ndGgpXTsKICAgICAg
ICAgfQogICAgIH0KLSAgICAKKwogICAgIC8vIFRoZXJlIGFyZSBzb21lIHBhcmFtZXRlcnMgdGhh
dCBzdXBlciBoYW5kbGVzIHRoYXQgYXJlIG5vdCBleHBsaWNpdGx5IHJldHVybmVkIGJ5IHRoZSBs
aXN0IG9mIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcy4KICAgICAvLyBJbiB0aGF0IGNhc2UgaXQg
bXVzdCBiZSBwYXNzZWQgdG8gc3VwZXIuCiAgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6YXR0cmlidXRlIGZvclBhcmFtZXRlcjpwYXJhbWV0ZXJdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391492</attachid>
            <date>2020-02-23 10:33:56 -0800</date>
            <delta_ts>2020-02-23 16:54:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208074-20200223133355.patch</filename>
            <type>text/plain</type>
            <size>157731</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2OTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWNhNDFkZWNhZDdhMzRm
MDEyMzIzYWQ4NGQzNzQyZDZkYTA0ODI1My4uMGZjNTc5NTg2NTUyM2NjNTM5MWY4MTk4ZmVmNjlj
ZDdhMjZiNWVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOCBAQAorMjAyMC0wMi0yMSAgQW5k
cmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CisKKyAgICAgICAgQVhJc29sYXRl
ZE9iamVjdCBzdXBwb3J0IGZvciB0YWJsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDgwNzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNvZGUgYW5kIHNvbWUgdXRpbGl0eSBmdW5jdGlv
bnMgaW4KKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYXNzdW1lIHRoYXQgQVggb2Jq
ZWN0cyBjYW4gYmUgZG93bmNhc3QgdG8gYQorICAgICAgICBzcGVjaWFsaXplZCBzdWJjbGFzcyBs
aWtlIEFjY2Vzc2liaWxpdHlUYWJsZS4gVGhhdCBpcyBub3QgdHJ1ZSBmb3IKKyAgICAgICAgQVhJ
c29sYXRlZE9iamVjdHMsIGFuZCB0aGUgcmVhc29uIHdoeSB0YWJsZXMgZG9u4oCZdCB3b3JrIGlu
IElzb2xhdGVkVHJlZQorICAgICAgICBtb2RlLgorCisgICAgICAgIFRvIHNvbHZlIHRoaXMgcHJv
YmxlbSwgdGhpcyBwYXRjaCBleHBvc2VzIHRoZSBBY2Nlc3NpYmlsaXR5VGFibGUKKyAgICAgICAg
aW50ZXJmYWNlIGFzIHBhcnQgb2YgdGhlIEFYQ29yZU9iamVjdC4gVGh1cyBpdCBlbGltaW5hdGVz
IHRoZSBuZWVkIHRvCisgICAgICAgIGRvd25jYXN0IGFuIEFYIG9iamVjdCB0byBhbiBBY2Nlc3Np
YmlsaXR5VGFibGUuIEl0IGFsc28gaW1wbGVtZW50cyB0aGUKKyAgICAgICAgQWNjZXNzaWJpbGl0
eVRhYmxlIGludGVyZmFjZSBpbiB0aGUgQVhJc29sYXRlZE9iamVjdCBjbGFzcy4gVGhlIHNhbWUK
KyAgICAgICAgYXBwcm9hY2ggd2lsbCBiZSB1c2VkIGluIHN1YnNlcXVlbnQgcGF0Y2hlcyBmb3Ig
b3RoZXIgc3BlY2lhbGl6ZWQKKyAgICAgICAgaW50ZXJmYWNlcyB1c2VkIGJ5IGNsaWVudCBjb2Rl
LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRDaGlsZHJlbik6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaDoKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cGFyZW50VGFibGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cm93SW5kZXhSYW5n
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpj
b2x1bW5JbmRleFJhbmdlIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZFJvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWRSb3c6OmRpc2Nsb3NlZFJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRCeVJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OnBhcmVudFRhYmxlIGNvbnN0KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNob3VsZFVzZUFjY2Vzc2liaWxpdHlPYmplY3RJbm5lclRleHQpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjph
cHBlbmRDaGlsZHJlblRvQXJyYXkpOiBVc2UgQVhDb3JlT2JqZWN0IGludGVyZmFjZSBpbnN0ZWFk
IG9mIGRvd25jYXN0aW5nLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eTo6aXNBY2Nl
c3NpYmlsaXR5T2JqZWN0U2VhcmNoTWF0Y2hBdEluZGV4KTogVXNlIEFYQ29yZU9iamVjdCBpbnRl
cmZhY2UgaW5zdGVhZCBvZiBkb3duY2FzdGluZy4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3RJbnRlcmZhY2UuaDogQVhDb3JlT2JqZWN0IG5vdyBleHBvc2VzIHRoZSB0YWJsZSBp
bnRlcmZhY2UuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFy
aWFTZWxlY3RlZFJvd3MpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6QWNjZXNzaWJp
bGl0eVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aW5pdCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRXhwb3NhYmxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6YWRkQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpoZWFkZXJDb250YWluZXIpOiBS
ZXR1cm5zIGFuIEFYQ29yZU9iamVjdC4KKworICAgICAgICBUaGUgZm9sbG93aW5nIG1ldGhvZHMg
bm93IHJldHVybiBhIHZlY3RvciBvZiBvYmplY3RzIGluc3RlYWQgb2YgdGFraW5nCisgICAgICAg
IGFuZCBvdXQgcGFyYW1ldGVyLiBSVk8gZ3VhcmFudGllcyB0aGF0IHRoaXMgZG9lcyBub3QgY2F1
c2UgZXh0cmEgY29weS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y29s
dW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnJvd3MpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjpjb2x1bW5IZWFkZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6cm93SGVhZGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnZpc2libGVSb3dzKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbHMpOgorCisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5VGFibGU6OnRhYmxlTGV2ZWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVRhYmxlOjpyb2xlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVRhYmxlOjpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnRpdGxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aXNFeHBvc2FibGVUaHJvdWdoQWNjZXNz
aWJpbGl0eSBjb25zdCk6IFJlbmFtZWQgdG8ganVzdCBpc0V4cG9zYWJsZS4KKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVRhYmxlOjpzdXBwb3J0c1NlbGVjdGVkUm93cyk6IERlbGV0ZWQuCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnBhcmVudFRhYmxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmlzVGFibGVDZWxsIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmNvbHVtbkhlYWRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6cm93SGVhZGVycyk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmg6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjpoZWFkZXJPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjphZGRDaGlsZHJlbik6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVy
OjphZGRDaGlsZHJlbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGVSb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlUm93Ojppc1Rh
YmxlUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6
cGFyZW50VGFibGUgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGUuY3BwOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJs
ZS5jcHA6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5IZWFkZXIpOgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93SGVhZGVyKToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVDZWxsLmNwcDoK
KyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRDb2x1bW5IZWFkZXJDZWxscyk6
CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0Um93SGVhZGVyQ2VsbHMpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
SU9TLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZVBh
cmVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5SGVhZGVyRWxlbWVudHNdKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRP
YmplY3Q6OmluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNv
bGF0ZWRPYmplY3Q6OnNldE9iamVjdFZlY3RvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkFYSXNvbGF0ZWRPYmplY3Q6OmNlbGxGb3JDb2x1bW5BbmRSb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZE9iamVjdDo6ZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5VGFi
bGVJbnN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0Ojpp
c0RhdGFUYWJsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29s
YXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0
ZWRUcmVlOjpub2RlRm9ySUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRy
ZWU6Om9iamVjdHNGb3JJRHMgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQVhP
YmplY3RDYWNoZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RQ
bGF0Zm9ybU5vdGlmaWNhdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgIEluIGFkZGl0aW9uIHRvIHJl
cGxhY2luZyB0aGUgZG93bmNhc3QgdG8gQWNjZXNzaWJpbGl0eVRhYmxlLCBjbGVhbmVkIHVwCisg
ICAgICAgIHRoZSB1bm5lY2Vzc2FyeSBjYWxscyB0byBzZWxmLmF4QmFja2luZ09iamVjdC4gVGhp
cyB1c2VkIHRvIGJlIGEgbWFjcm8sCisgICAgICAgIGJ1dCBpdCBpcyBub3cgYSBtZXRob2QgdGhh
dCBjaGVjayBmb3IgdGhlIGV4ZWN1dGlvbiB0aHJlYWQgYW5kIHJldHVybnMKKyAgICAgICAgdGhl
IGFwcHJvcHJpYXRlIEFYIG9iamVjdC4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVNldFZhbHVlOmZvckF0dHJpYnV0ZTpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpdKToKKwogMjAyMC0wMi0xOSAgWmFsYW4gQnVq
dGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0Zsb2F0c10gRmxvYXRpbmdD
b250ZXh0Ojpjb25zdHJhaW50cyBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgZW1wdHkgY2FuZGlk
YXRlIHJhbmdlcyAocG9pbnRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCmluZGV4IDAwMGFkZDRjM2FhMjI4ZjJlM2Y2
MDUxODAxMDIwNTlmYWQxMTIzN2QuLjVhMmIzNGMyOWZmZjg3MzRiYjliMTdhNzdjZDU1NmIwYzcz
YTFmYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlBUklBR3JpZC5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIEFjY2Vzc2liaWxp
dHlBUklBR3JpZDo6YWRkQ2hpbGRyZW4oKQogewogICAgIEFTU0VSVCghbV9oYXZlQ2hpbGRyZW4p
OyAKICAgICAKLSAgICBpZiAoIWlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkgewor
ICAgIGlmICghaXNFeHBvc2FibGUoKSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphZGRDaGlsZHJlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ1LDggKzE0
NSw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRDaGlsZHJlbigpCiAgICAgICAg
IGlmICghY29sdW1uLmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKICAgICAgICAgICAgIG1fY2hp
bGRyZW4uYXBwZW5kKCZjb2x1bW4pOwogICAgIH0KLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBoZWFkZXJDb250YWluZXJPYmplY3QgPSBoZWFkZXJDb250YWluZXIoKTsKKworICAgIGF1
dG8qIGhlYWRlckNvbnRhaW5lck9iamVjdCA9IGhlYWRlckNvbnRhaW5lcigpOwogICAgIGlmICho
ZWFkZXJDb250YWluZXJPYmplY3QgJiYgIWhlYWRlckNvbnRhaW5lck9iamVjdC0+YWNjZXNzaWJp
bGl0eUlzSWdub3JlZCgpKQogICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChoZWFkZXJDb250YWlu
ZXJPYmplY3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkLmgKaW5kZXggZjcyYzkwNmFhMGNlMGY0Yjc4MTg1YWIxNWU1Zjkx
M2E5YmMzMzI0My4uMWIzNjVkNDQ2ODdmZDk3ZTJmOTNiZGFjZTI2ODYwOWJjOGRiNjBhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZC5oCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQWNjZXNzaWJp
bGl0eUFSSUFHcmlkKFJlbmRlck9iamVjdCopOwogCiAgICAgLy8gQVJJQSB0cmVlZ3JpZHMgYW5k
IGdyaWRzIHN1cHBvcnQgc2VsZWN0ZWQgcm93cy4KLSAgICBib29sIHN1cHBvcnRzU2VsZWN0ZWRS
b3dzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgc3VwcG9ydHNTZWxlY3Rl
ZFJvd3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBpc011bHRp
U2VsZWN0YWJsZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgY29tcHV0ZUlzVGFibGVFeHBv
c2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KICAgICBib29sIGlzQXJpYVRhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWRDZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkQ2VsbC5jcHAKaW5kZXggZjgxOWU5YWVlOTQ2YzVkMzU1MGY3M2IyNDllMTM5
Yzk5YjRhNDI3OC4uNmM0YWYxNTg5N2JjOTg3MGI0YzAxYzRhMTA2YWE3ZTE2MGQxNmFlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWRDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlBUklBR3JpZENlbGwuY3BwCkBAIC01Niw3ICs1Niw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZSog
QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cGFyZW50VGFibGUoKSBjb25zdAogICAgIC8vIGlu
Y2x1ZGluZyByb3dzIGFuZCBpbnRlcmFjdGl2ZSByb3dncm91cHMuIEluIGFkZGl0aW9uLCBwb29y
bHktZm9ybWVkIGdyaWRzIG1heSBjb250YWluIGVsZW1lbnRzCiAgICAgLy8gd2hpY2ggcGFzcyB0
aGUgdGVzdHMgZm9yIGluY2x1c2lvbi4KICAgICBmb3IgKGF1dG8qIHBhcmVudCA9IHBhcmVudE9i
amVjdFVuaWdub3JlZCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0VW5p
Z25vcmVkKCkpIHsKLSAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudCkg
JiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5pc0V4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpw
YXJlbnQpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudCkuaXNFeHBvc2Fi
bGUoKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KHBh
cmVudCk7CiAgICAgfQogCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFH
cmlkQ2VsbDo6cm93SW5kZXhSYW5nZShzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiYgcm93
CiAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKnBhcmVudCkpIHsKICAgICAgICAg
Ly8gV2UgYWxyZWFkeSBnb3QgYSB0YWJsZSByb3csIHVzZSBpdHMgQVBJLgogICAgICAgICByb3dS
YW5nZS5maXJzdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKnBhcmVudCkucm93
SW5kZXgoKTsKLSAgICB9IGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudCkg
JiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5pc0V4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KCkpIHsKKyAgICB9IGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJs
ZT4oKnBhcmVudCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5pc0V4
cG9zYWJsZSgpKSB7CiAgICAgICAgIC8vIFdlIHJlYWNoZWQgdGhlIHBhcmVudCB0YWJsZSwgc28g
d2UgbmVlZCB0byBpbnNwZWN0IGl0cwogICAgICAgICAvLyBjaGlsZHJlbiB0byBkZXRlcm1pbmUg
dGhlIHJvdyBpbmRleCBmb3IgdGhlIGNlbGwgaW4gaXQuCiAgICAgICAgIHVuc2lnbmVkIGNvbHVt
bkNvdW50ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5jb2x1bW5Db3Vu
dCgpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6
Y29sdW1uSW5kZXhSYW5nZShzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiYKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KCpwYXJlbnQpCi0g
ICAgICAgICYmICEoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KSAmJiBkb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxp
dHkoKSkpCisgICAgICAgICYmICEoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KSAmJiBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpLmlzRXhwb3NhYmxlKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHNp
YmxpbmdzID0gcGFyZW50LT5jaGlsZHJlbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCmluZGV4IDMyODM4
MDc2NTI5ZGQ0NWMxMGZjN2Q0YTdhYzA5YTBjN2Y1YTNkZmMuLmViYmUzMGY4M2M2YTU2ZDgwZjBj
ZTRlNjNmMjA1NzlkODlhMTBkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAKQEAgLTYwLDE3ICs2MCwx
NyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6ZGlzY2xvc2VkUm93cyhBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGRpc2NsbwogICAgIC8vIFRoZSBjb250aWd1b3VzIGRpc2Ns
b3NlZCByb3dzIHdpbGwgYmUgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIHRoYXQgCiAgICAgLy8gaGF2
ZSBhbiBhcmlhLWxldmVsIG9mIHBsdXMgMSBmcm9tIHRoaXMgcm93LgogICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdFVuaWdub3JlZCgpOwotICAgIGlmICghaXM8
QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KSB8fCAhZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlPigqcGFyZW50KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgaWYg
KCFpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpIHx8ICFkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGU+KCpwYXJlbnQpLmlzRXhwb3NhYmxlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAK
KwogICAgIC8vIFNlYXJjaCBmb3Igcm93cyB0aGF0IG1hdGNoIHRoZSBjb3JyZWN0IGxldmVsLiAK
ICAgICAvLyBPbmx5IHRha2UgdGhlIHN1YnNlcXVlbnQgcm93cyBmcm9tIHRoaXMgb25lIHRoYXQg
YXJlICsxIGZyb20gdGhpcyByb3cncyBsZXZlbC4KICAgICBpbnQgaW5kZXggPSByb3dJbmRleCgp
OwogICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIHVuc2ln
bmVkIGxldmVsID0gaGllcmFyY2hpY2FsTGV2ZWwoKTsKLSAgICBhdXRvJiBhbGxSb3dzID0gZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5yb3dzKCk7CisgICAgYXV0byBhbGxS
b3dzID0gcGFyZW50LT5yb3dzKCk7CiAgICAgaW50IHJvd0NvdW50ID0gYWxsUm93cy5zaXplKCk7
CiAgICAgZm9yIChpbnQgayA9IGluZGV4ICsgMTsgayA8IHJvd0NvdW50OyArK2spIHsKICAgICAg
ICAgYXV0byogcm93ID0gYWxsUm93c1trXS5nZXQoKTsKQEAgLTg3LDI3ICs4NywyNyBAQCBBWENv
cmVPYmplY3QqIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6ZGlzY2xvc2VkQnlSb3coKSBjb25z
dAogICAgIC8vIFRoZSByb3cgdGhhdCBkaXNjbG9zZXMgdGhpcyBvbmUgaXMgdGhlIHJvdyBpbiB0
aGUgdGFibGUKICAgICAvLyB0aGF0IGlzIGFyaWEtbGV2ZWwgc3VidHJhY3QgMSBmcm9tIHRoaXMg
cm93LgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdFVuaWdu
b3JlZCgpOwotICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KSB8fCAhZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nl
c3NpYmlsaXR5KCkpCisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpIHx8
ICFkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpLmlzRXhwb3NhYmxlKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorCiAgICAgLy8gSWYgdGhlIGxldmVsIGlzIDEg
b3IgbGVzcywgdGhhbiBub3RoaW5nIGRpc2Nsb3NlcyB0aGlzIHJvdy4KICAgICB1bnNpZ25lZCBs
ZXZlbCA9IGhpZXJhcmNoaWNhbExldmVsKCk7CiAgICAgaWYgKGxldmVsIDw9IDEpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIAorCiAgICAgLy8gU2VhcmNoIGZvciB0aGUgcHJldmlvdXMg
cm93IHRoYXQgbWF0Y2hlcyB0aGUgY29ycmVjdCBsZXZlbC4KICAgICBpbnQgaW5kZXggPSByb3dJ
bmRleCgpOwotICAgIGF1dG8mIGFsbFJvd3MgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+
KHBhcmVudCktPnJvd3MoKTsKKyAgICBhdXRvIGFsbFJvd3MgPSBwYXJlbnQtPnJvd3MoKTsKICAg
ICBpbnQgcm93Q291bnQgPSBhbGxSb3dzLnNpemUoKTsKICAgICBpZiAoaW5kZXggPj0gcm93Q291
bnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorCiAgICAgZm9yIChpbnQgayA9IGlu
ZGV4IC0gMTsgayA+PSAwOyAtLWspIHsKICAgICAgICAgYXV0byogcm93ID0gYWxsUm93c1trXS5n
ZXQoKTsKICAgICAgICAgaWYgKHJvdy0+aGllcmFyY2hpY2FsTGV2ZWwoKSA9PSBsZXZlbCAtIDEp
CiAgICAgICAgICAgICByZXR1cm4gcm93OwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBudWxs
cHRyOwogfQogICAgIApAQCAtMTI1LDcgKzEyNSw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZSogQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpwYXJlbnRUYWJsZSgpIGNvbnN0CiAgICAgICAgIC8vIFVu
bGVzcyB0aGUgcm93IGlzIGEgbmF0aXZlIHRyIGVsZW1lbnQuCiAgICAgICAgIGlmIChpczxBY2Nl
c3NpYmlsaXR5VGFibGU+KCpwYXJlbnQpKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5VGFi
bGUmIHRhYmxlUGFyZW50ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KTsK
LSAgICAgICAgICAgIGlmICh0YWJsZVBhcmVudC5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmls
aXR5KCkgJiYgKHRhYmxlUGFyZW50LmlzQXJpYVRhYmxlKCkgfHwgbm9kZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dHJUYWcpKSkKKyAgICAgICAgICAgIGlmICh0YWJsZVBhcmVudC5pc0V4cG9z
YWJsZSgpICYmICh0YWJsZVBhcmVudC5pc0FyaWFUYWJsZSgpIHx8IG5vZGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRyVGFnKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICZ0YWJsZVBhcmVu
dDsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKaW5kZXggMjA5ZWI4ZTY1OGUwYjcz
NDE4ZWMyY2QwMGNkODBhNDE2ZmEyOTMzYS4uN2VjZTA2MTdkNmZiZjg5MTQ5ZTI0YWYwZjgwZWNk
ZWU2MjIwMGE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKQEAgLTE3MzksNyArMTczOSw3IEBAIHN0YXRp
YyBib29sIHNob3VsZFVzZUFjY2Vzc2liaWxpdHlPYmplY3RJbm5lclRleHQoQWNjZXNzaWJpbGl0
eU9iamVjdCogb2JqLCBBY2NlCiAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlMaXN0Pigqb2JqKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4o
Km9iaikgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqKS5pc0V4cG9zYWJsZVRo
cm91Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9i
aikgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqKS5pc0V4cG9zYWJsZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAob2JqLT5pc1RyZWUoKSB8fCBvYmotPmlz
Q2FudmFzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAppbmRleCA4MzE0NzEyNjAyNjgzOTQyYTIxZmE0Y2RhN2RiYjUzYWJk
OWEyNjk5Li45NTJiYmQ3ZjI5Yjc5MmM3N2FjYWYwZjg4MWQ0OTc1MWQ1YmMxNGQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKQEAgLTUxMCw3ICs1MTAsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRDaGlsZHJlblRvQXJyYXko
QVhDb3JlT2JqZWN0KiBvYmplY3QsIGJvb2wgaXNGb3J3YXJkLCBBWENvcmVPYgogewogICAgIC8v
IEEgdGFibGUncyBjaGlsZHJlbiBpbmNsdWRlcyBlbGVtZW50cyB3aG9zZSBvd24gY2hpbGRyZW4g
YXJlIGFsc28gdGhlIHRhYmxlJ3MgY2hpbGRyZW4gKGR1ZSB0byB0aGUgd2F5IHRoZSBNYWMgZXhw
b3NlcyB0YWJsZXMpLgogICAgIC8vIFRoZSByb3dzIGZyb20gdGhlIHRhYmxlIHNob3VsZCBiZSBx
dWVyaWVkLCBzaW5jZSB0aG9zZSBhcmUgZGlyZWN0IGRlc2NlbmRhbnRzIG9mIHRoZSB0YWJsZSwg
YW5kIHRoZXkgY29udGFpbiBjb250ZW50LgotICAgIGNvbnN0IGF1dG8mIHNlYXJjaENoaWxkcmVu
ID0gaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGU+KCpvYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSA/IGRv
d25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9iamVjdCkucm93cygpIDogb2JqZWN0LT5jaGls
ZHJlbigpOworICAgIGNvbnN0IGF1dG8mIHNlYXJjaENoaWxkcmVuID0gb2JqZWN0LT5pc1RhYmxl
KCkgJiYgb2JqZWN0LT5pc0V4cG9zYWJsZSgpID8gb2JqZWN0LT5yb3dzKCkgOiBvYmplY3QtPmNo
aWxkcmVuKCk7CiAKICAgICBzaXplX3QgY2hpbGRyZW5TaXplID0gc2VhcmNoQ2hpbGRyZW4uc2l6
ZSgpOwogCkBAIC0zNzIzLDEwICszNzIzLDEwIEBAIHN0YXRpYyBib29sIGlzQWNjZXNzaWJpbGl0
eU9iamVjdFNlYXJjaE1hdGNoQXRJbmRleChBWENvcmVPYmplY3QqIGF4T2JqZWN0LCBBY2NlCiAg
ICAgICAgICAgICAmJiAhYXhPYmplY3QtPmhhc1NhbWVTdHlsZShjcml0ZXJpYS5zdGFydE9iamVj
dC0+cmVuZGVyZXIoKSk7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5OjpUYWJsZVNh
bWVMZXZlbDoKICAgICAgICAgcmV0dXJuIGNyaXRlcmlhLnN0YXJ0T2JqZWN0Ci0gICAgICAgICAg
ICAmJiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpheE9iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlPigqYXhPYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHko
KQotICAgICAgICAgICAgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYXhPYmplY3Qp
LnRhYmxlTGV2ZWwoKSA9PSBjcml0ZXJpYS5zdGFydE9iamVjdC0+dGFibGVMZXZlbCgpOworICAg
ICAgICAgICAgJiYgYXhPYmplY3QtPmlzVGFibGUoKSAmJiBheE9iamVjdC0+aXNFeHBvc2FibGUo
KQorICAgICAgICAgICAgJiYgYXhPYmplY3QtPnRhYmxlTGV2ZWwoKSA9PSBjcml0ZXJpYS5zdGFy
dE9iamVjdC0+dGFibGVMZXZlbCgpOwogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNlYXJjaEtleTo6
VGFibGU6Ci0gICAgICAgIHJldHVybiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpheE9iamVjdCkg
JiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYXhPYmplY3QpLmlzRXhwb3NhYmxlVGhy
b3VnaEFjY2Vzc2liaWxpdHkoKTsKKyAgICAgICAgcmV0dXJuIGF4T2JqZWN0LT5pc1RhYmxlKCkg
JiYgYXhPYmplY3QtPmlzRXhwb3NhYmxlKCk7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U2VhcmNo
S2V5OjpUZXh0RmllbGQ6CiAgICAgICAgIHJldHVybiBheE9iamVjdC0+aXNUZXh0Q29udHJvbCgp
OwogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNlYXJjaEtleTo6VW5kZXJsaW5lOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCAw
M2VmYmVkZmZhMTVkMjJjYmZiYjc2N2Q2NDdmOTMzMjQ1NGU0MDc2Li45NGNhNTlkYjY2N2EzMTIz
NTU2ZGFhYWEwZjI5MDkwYTA5ODhmYjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtMTEzLDYgKzExMyw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U1ZHUm9vdCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlTVkdF
bGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQWNj
ZXNzaWJpbGl0eVRhYmxlSW5zdGFuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgYm9vbCBpc0F0dGFjaG1lbnRFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KICAgICBib29sIGlzSGVhZGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CkBAIC0xNDgsOCArMTQ5LDI1IEBAIHB1YmxpYzoKICAgICBib29sIGlzT3JkZXJl
ZExpc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNEZXNj
cmlwdGlvbkxpc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgLy8g
VGFibGUgc3VwcG9ydC4KICAgICBib29sIGlzVGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIGJvb2wgaXNFeHBvc2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAgICAgYm9vbCBpc0RhdGFUYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgaW50IHRhYmxlTGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAw
OyB9CisgICAgYm9vbCBzdXBwb3J0c1NlbGVjdGVkUm93cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVtbnMoKSBv
dmVycmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IoKTsgfQorICAgIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzKCkgb3ZlcnJpZGUgeyByZXR1cm4gQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yKCk7IH0KKyAgICB1bnNpZ25lZCBjb2x1bW5Db3VudCgpIG92
ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICB1bnNpZ25lZCByb3dDb3VudCgpIG92ZXJyaWRlIHsg
cmV0dXJuIDA7IH0KKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHMoKSBvdmVy
cmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IoKTsgfQorICAgIEFYQ29y
ZU9iamVjdCogY2VsbEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCwgdW5zaWduZWQpIG92ZXJyaWRl
IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29s
dW1uSGVhZGVycygpIG92ZXJyaWRlIHsgcmV0dXJuIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
cigpOyB9CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRlcnMoKSBvdmVy
cmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IoKTsgfQorICAgIEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciB2aXNpYmxlUm93cygpIG92ZXJyaWRlIHsgcmV0dXJuIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvcigpOyB9CisgICAgQVhDb3JlT2JqZWN0KiBoZWFkZXJD
b250YWluZXIoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgaW50IGF4Q29sdW1u
Q291bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgaW50IGF4Um93Q291bnQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisKICAgICBib29sIGlzVGFibGVSb3coKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNUYWJsZUNvbHVtbigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBpc1RhYmxlQ2VsbCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yNDAsNyArMjU4LDYgQEAgcHVi
bGljOgogCiAgICAgdW5zaWduZWQgYmxvY2txdW90ZUxldmVsKCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgaW50IGhlYWRpbmdMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICBp
bnQgdGFibGVMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KICAgICBBY2Nlc3Np
YmlsaXR5QnV0dG9uU3RhdGUgY2hlY2tib3hPclJhZGlvVmFsdWUoKSBjb25zdCBvdmVycmlkZTsK
ICAgICBTdHJpbmcgdmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0
cmluZygpOyB9CiAgICAgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIDAuMGY7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKaW5kZXggYzE1ZjhlZmUwYjE3ODY1NTNi
MjJlMmIxNmM5NDcyMjBiMzViZTYzMi4uOGRmN2QyZmNkZjk2M2Y2ZWEzMzk1YjVjMDNkNWVhYzQ2
YjQxMDM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKQEAgLTQ4OCw2ICs0ODgsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVRhYmxlSW5zdGFuY2UoKSBjb25zdCA9
IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRhY2htZW50RWxlbWVudCgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNIZWFkaW5nKCkgY29uc3QgPSAwOwpAQCAtNTI4LDExICs1Mjks
MzEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc09yZGVyZWRMaXN0KCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBpc0Rlc2NyaXB0aW9uTGlzdCgpIGNvbnN0ID0gMDsKIAorICAg
IC8vIFRhYmxlIHN1cHBvcnQuCiAgICAgdmlydHVhbCBib29sIGlzVGFibGUoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBib29sIGlzRXhwb3NhYmxlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBpc0RhdGFUYWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCB0YWJsZUxldmVs
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGVkUm93cygpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5z
KCkgPSAwOworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3MoKSA9
IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjb2x1bW5Db3VudCgpID0gMDsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIHJvd0NvdW50KCkgPSAwOworICAgIC8vIEFsbCB0aGUgY2VsbHMgaW4gdGhlIHRh
YmxlLgorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNlbGxzKCkgPSAw
OworICAgIHZpcnR1YWwgQVhDb3JlT2JqZWN0KiBjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVk
IGNvbHVtbiwgdW5zaWduZWQgcm93KSA9IDA7CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgY29sdW1uSGVhZGVycygpID0gMDsKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciByb3dIZWFkZXJzKCkgPSAwOworICAgIHZpcnR1YWwgQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIHZpc2libGVSb3dzKCkgPSAwOworICAgIC8vIFJldHVybnMgYW4g
b2JqZWN0IHRoYXQgY29udGFpbnMsIGFzIGNoaWxkcmVuLCBhbGwgdGhlIG9iamVjdHMgdGhhdCBh
Y3QgYXMgaGVhZGVycy4KKyAgICB2aXJ0dWFsIEFYQ29yZU9iamVjdCogaGVhZGVyQ29udGFpbmVy
KCkgPSAwOworICAgIHZpcnR1YWwgaW50IGF4Q29sdW1uQ291bnQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBpbnQgYXhSb3dDb3VudCgpIGNvbnN0ID0gMDsKKwogICAgIHZpcnR1YWwgYm9vbCBp
c1RhYmxlUm93KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1RhYmxlQ29sdW1uKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1RhYmxlQ2VsbCgpIGNvbnN0ID0gMDsKKwog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZpZWxkc2V0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBpc0dyb3VwKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0FSSUFUcmVlR3JpZFJv
dygpIGNvbnN0ID0gMDsKQEAgLTY0OCw3ICs2NjksNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHVuc2lnbmVkIGJsb2NrcXVvdGVMZXZlbCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBo
ZWFkaW5nTGV2ZWwoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgdGFibGVMZXZlbCgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBjaGVja2JveE9y
UmFkaW9WYWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZURlc2NyaXB0
aW9uKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNvbnN0
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDk2ZjMzY2I3MzRhNzA4MzY5YjRmM2JhM2Q1
NDg0ODhlNTA0OTU3NzAuLmM4MjU0NDYxMmYwYjFiMmRjNTQ3NDdmYjE3YzMxOTQ4NTcwZTAwYWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMzQ3Myw3ICszNDczLDcgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhU2VsZWN0ZWRSb3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYgcmUKICAgICB9CiAKICAgICAvLyBHZXQgYWxsIHRoZSByb3dzLgotICAgIGF1dG8g
cm93c0l0ZXJhdGlvbiA9IFsmXShhdXRvJiByb3dzKSB7CisgICAgYXV0byByb3dzSXRlcmF0aW9u
ID0gWyZdKGNvbnN0IGF1dG8mIHJvd3MpIHsKICAgICAgICAgZm9yIChhdXRvJiByb3cgOiByb3dz
KSB7CiAgICAgICAgICAgICBpZiAocm93LT5pc1NlbGVjdGVkKCkgfHwgcm93LT5pc0FjdGl2ZURl
c2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIoKSkgewogICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQocm93KTsKQEAgLTM0ODgsNyArMzQ4OCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YXJpYVNlbGVjdGVkUm93cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJl
CiAgICAgICAgIHJvd3NJdGVyYXRpb24oYWxsUm93cyk7CiAgICAgfSBlbHNlIGlmIChpczxBY2Nl
c3NpYmlsaXR5VGFibGU+KCp0aGlzKSkgewogICAgICAgICBhdXRvJiB0aGlzVGFibGUgPSBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCp0aGlzKTsKLSAgICAgICAgaWYgKHRoaXNUYWJsZS5p
c0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkgJiYgdGhpc1RhYmxlLnN1cHBvcnRzU2Vs
ZWN0ZWRSb3dzKCkpCisgICAgICAgIGlmICh0aGlzVGFibGUuaXNFeHBvc2FibGUoKSAmJiB0aGlz
VGFibGUuc3VwcG9ydHNTZWxlY3RlZFJvd3MoKSkKICAgICAgICAgICAgIHJvd3NJdGVyYXRpb24o
dGhpc1RhYmxlLnJvd3MoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCmluZGV4IDI3MzFiMDc4ODZhZWY5YmMy
NzU2NmI3YjE0ZThlNjRhOGFlNzAxZGQuLjIyNWZjOGVlYWVlNTNkMWIzODUyMDJjMjdmNzEzZTY0
ZDU4NDkzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlUYWJsZS5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIEFjY2Vzc2liaWxpdHlUYWJsZTo6QWNjZXNzaWJpbGl0eVRhYmxlKFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCiAgICAgOiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KHJlbmRlcmVyKQog
ICAgICwgbV9oZWFkZXJDb250YWluZXIobnVsbHB0cikKLSAgICAsIG1faXNFeHBvc2FibGVUaHJv
dWdoQWNjZXNzaWJpbGl0eSh0cnVlKQorICAgICwgbV9pc0V4cG9zYWJsZSh0cnVlKQogewogfQog
CkBAIC02Myw3ICs2Myw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZTo6fkFjY2Vzc2liaWxpdHlUYWJs
ZSgpID0gZGVmYXVsdDsKIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjppbml0KCkKIHsKICAgICBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbml0KCk7Ci0gICAgbV9pc0V4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5ID0gY29tcHV0ZUlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJp
bGl0eSgpOworICAgIG1faXNFeHBvc2FibGUgPSBjb21wdXRlSXNUYWJsZUV4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KCk7CiB9CiAKIFJlZjxBY2Nlc3NpYmlsaXR5VGFibGU+IEFjY2Vzc2li
aWxpdHlUYWJsZTo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCkBAIC04MywxMiArODMs
MTIgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6Omhhc0FSSUFSb2xlKCkgY29uc3QKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0V4cG9zYWJsZVRo
cm91Z2hBY2Nlc3NpYmlsaXR5KCkgY29uc3QKK2Jvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0V4
cG9zYWJsZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIG1faXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0
eTsKKyAgICByZXR1cm4gbV9pc0V4cG9zYWJsZTsKIH0KIAogSFRNTFRhYmxlRWxlbWVudCogQWNj
ZXNzaWJpbGl0eVRhYmxlOjp0YWJsZUVsZW1lbnQoKSBjb25zdApAQCAtMzc3LDcgKzM3Nyw3IEBA
IHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjpjbGVhckNoaWxkcmVuKCkKIAogdm9pZCBBY2Nlc3Np
YmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKCkKIHsKLSAgICBpZiAoIWlzRXhwb3NhYmxlVGhyb3Vn
aEFjY2Vzc2liaWxpdHkoKSkgeworICAgIGlmICghaXNFeHBvc2FibGUoKSkgewogICAgICAgICBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRDaGlsZHJlbigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNDI0LDggKzQyNCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjphZGRD
aGlsZHJlbigpCiAgICAgICAgIGlmICghY29sdW1uLmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkK
ICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKCZjb2x1bW4pOwogICAgIH0KLSAgICAKLSAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJDb250YWluZXJPYmplY3QgPSBoZWFkZXJDb250
YWluZXIoKTsKKworICAgIGF1dG8qIGhlYWRlckNvbnRhaW5lck9iamVjdCA9IGhlYWRlckNvbnRh
aW5lcigpOwogICAgIGlmIChoZWFkZXJDb250YWluZXJPYmplY3QgJiYgIWhlYWRlckNvbnRhaW5l
ck9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQogICAgICAgICBtX2NoaWxkcmVuLmFw
cGVuZChoZWFkZXJDb250YWluZXJPYmplY3QpOwogCkBAIC00MzcsNyArNDM3LDYgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKCkKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBjZWxsIDogcm93LT5jaGlsZHJlbigpKQogICAgICAgICAgICAgY2VsbC0+dXBkYXRlQWNjZXNz
aWJpbGl0eVJvbGUoKTsKICAgICB9Ci0KIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFk
ZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvd09iamVjdCwgSGFzaFNldDxB
Y2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50
KQpAQCAtNTAxLDcgKzUwMCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjphZGRDaGlsZHJl
bkZyb21TZWN0aW9uKFJlbmRlclRhYmxlU2VjdGlvbiogdGFibGVTZWN0aW9uCiAgICAgbWF4Q29s
dW1uQ291bnQgPSBzdGQ6Om1heCh0YWJsZVNlY3Rpb24tPm51bUNvbHVtbnMoKSwgbWF4Q29sdW1u
Q291bnQpOwogfQogICAgIAotQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVRhYmxl
OjpoZWFkZXJDb250YWluZXIoKQorQVhDb3JlT2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGU6Omhl
YWRlckNvbnRhaW5lcigpCiB7CiAgICAgaWYgKG1faGVhZGVyQ29udGFpbmVyKQogICAgICAgICBy
ZXR1cm4gbV9oZWFkZXJDb250YWluZXIuZ2V0KCk7CkBAIC01MTMsNzQgKzUxMiw4NiBAQCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGU6OmhlYWRlckNvbnRhaW5lcigpCiAg
ICAgcmV0dXJuIG1faGVhZGVyQ29udGFpbmVyLmdldCgpOwogfQogCi1jb25zdCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIEFjY2Vzc2liaWxpdHlUYWJs
ZTo6Y29sdW1ucygpCitBWENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBB
Y2Nlc3NpYmlsaXR5VGFibGU6OmNvbHVtbnMoKQogewogICAgIHVwZGF0ZUNoaWxkcmVuSWZOZWNl
c3NhcnkoKTsKICAgICAgICAgCiAgICAgcmV0dXJuIG1fY29sdW1uczsKIH0KIAotY29uc3QgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBBY2Nlc3NpYmls
aXR5VGFibGU6OnJvd3MoKQorQVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgQWNjZXNzaWJpbGl0eVRhYmxlOjpyb3dzKCkKIHsKICAgICB1cGRhdGVDaGlsZHJlbklmTmVj
ZXNzYXJ5KCk7CiAgICAgCiAgICAgcmV0dXJuIG1fcm93czsKIH0KIAotdm9pZCBBY2Nlc3NpYmls
aXR5VGFibGU6OmNvbHVtbkhlYWRlcnMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBoZWFk
ZXJzKQorQVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgQWNjZXNzaWJp
bGl0eVRhYmxlOjpjb2x1bW5IZWFkZXJzKCkKIHsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3IgaGVhZGVyczsKICAgICBpZiAoIW1fcmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKKyAgICAgICAgcmV0dXJuIGhlYWRlcnM7CisKICAgICB1cGRhdGVDaGlsZHJlbklmTmVjZXNz
YXJ5KCk7Ci0gICAgCisKICAgICAvLyBTb21ldGltZXMgbV9jb2x1bW5zIGNhbiBiZSByZXNldCBk
dXJpbmcgdGhlIGl0ZXJhdGlvbiwgd2UgY2FjaGUgaXQgaGVyZSB0byBiZSBzYWZlLgogICAgIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5zQ29weSA9IG1fY29sdW1uczsKLSAgICAK
KwogICAgIGZvciAoY29uc3QgYXV0byYgY29sdW1uIDogY29sdW1uc0NvcHkpIHsKICAgICAgICAg
aWYgKEFYQ29yZU9iamVjdCogaGVhZGVyID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ29s
dW1uPigqY29sdW1uKS5oZWFkZXJPYmplY3QoKSkKICAgICAgICAgICAgIGhlYWRlcnMuYXBwZW5k
KGhlYWRlcik7CiAgICAgfQorCisgICAgcmV0dXJuIGhlYWRlcnM7CiB9CiAKLXZvaWQgQWNjZXNz
aWJpbGl0eVRhYmxlOjpyb3dIZWFkZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgaGVh
ZGVycykKK0FYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIEFjY2Vzc2li
aWxpdHlUYWJsZTo6cm93SGVhZGVycygpCiB7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yIGhlYWRlcnM7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAg
CisgICAgICAgIHJldHVybiBoZWFkZXJzOworCiAgICAgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2Fy
eSgpOwotICAgIAorCiAgICAgLy8gU29tZXRpbWVzIG1fcm93cyBjYW4gYmUgcmVzZXQgZHVyaW5n
IHRoZSBpdGVyYXRpb24sIHdlIGNhY2hlIGl0IGhlcmUgdG8gYmUgc2FmZS4KICAgICBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93c0NvcHkgPSBtX3Jvd3M7Ci0gICAgCisKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHJvdyA6IHJvd3NDb3B5KSB7CiAgICAgICAgIGlmIChBWENvcmVPYmplY3Qq
IGhlYWRlciA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKnJvdykuaGVhZGVyT2Jq
ZWN0KCkpCiAgICAgICAgICAgICBoZWFkZXJzLmFwcGVuZChoZWFkZXIpOwogICAgIH0KKworICAg
IHJldHVybiBoZWFkZXJzOwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlUYWJsZTo6dmlzaWJsZVJv
d3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByb3dzKQorQVhDb3JlT2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgQWNjZXNzaWJpbGl0eVRhYmxlOjp2aXNpYmxlUm93cygp
CiB7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3M7CiAgICAgaWYgKCFtX3Jl
bmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgICAgIHJldHVybiByb3dzOworCiAg
ICAgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwotICAgIAorCiAgICAgZm9yIChjb25zdCBh
dXRvJiByb3cgOiBtX3Jvd3MpIHsKICAgICAgICAgaWYgKHJvdyAmJiAhcm93LT5pc09mZlNjcmVl
bigpKQogICAgICAgICAgICAgcm93cy5hcHBlbmQocm93KTsKICAgICB9CisKKyAgICByZXR1cm4g
cm93czsKIH0KIAotdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxzKEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2VsbHMpCitBWENvcmVPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBBY2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxzKCkK
IHsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHM7CiAgICAgaWYgKCFtX3Jl
bmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgICAgIHJldHVybiBjZWxsczsKKwog
ICAgIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKLSAgICAKKwogICAgIGZvciAoY29uc3Qg
YXV0byYgcm93IDogbV9yb3dzKQogICAgICAgICBjZWxscy5hcHBlbmRWZWN0b3Iocm93LT5jaGls
ZHJlbigpKTsKKworICAgIHJldHVybiBjZWxsczsKIH0KICAgICAKIHVuc2lnbmVkIEFjY2Vzc2li
aWxpdHlUYWJsZTo6Y29sdW1uQ291bnQoKQpAQCAtNjAxLDcgKzYxMiw3IEBAIGludCBBY2Nlc3Np
YmlsaXR5VGFibGU6OnRhYmxlTGV2ZWwoKSBjb25zdAogewogICAgIGludCBsZXZlbCA9IDA7CiAg
ICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5T2JqZWN0Kj4oY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPih0aGlzKSk7IG9iajsg
b2JqID0gb2JqLT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0
eVRhYmxlPigqb2JqKSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpvYmopLmlzRXhw
b3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkKKyAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxp
dHlUYWJsZT4oKm9iaikgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqKS5pc0V4
cG9zYWJsZSgpKQogICAgICAgICAgICAgKytsZXZlbDsKICAgICB9CiAgICAgCkBAIC02NDQsNyAr
NjU1LDcgQEAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogQWNjZXNzaWJpbGl0eVRhYmxlOjpjZWxs
Rm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbiwKIAogQWNjZXNzaWJpbGl0eVJvbGUgQWNj
ZXNzaWJpbGl0eVRhYmxlOjpyb2xlVmFsdWUoKSBjb25zdAogewotICAgIGlmICghaXNFeHBvc2Fi
bGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAgIGlmICghaXNFeHBvc2FibGUoKSkKICAgICAg
ICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJvbGVWYWx1ZSgpOwogICAgIAog
ICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xlID0gYXJpYVJvbGVBdHRyaWJ1dGUoKTsKQEAg
LTY2Miw5ICs2NzMsOSBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6Y29tcHV0ZUFjY2Vzc2li
aWxpdHlJc0lnbm9yZWQoKSBjb25zdAogICAgIGlmIChkZWNpc2lvbiA9PSBBY2Nlc3NpYmlsaXR5
T2JqZWN0SW5jbHVzaW9uOjpJZ25vcmVPYmplY3QpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IAotICAgIGlmICghaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAgIGlmICgh
aXNFeHBvc2FibGUoKSkKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7Ci0gICAgICAgIAorCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCkBAIC02NzcsNyArNjg4LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6
OnRpdGxlRWxlbWVudFRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dE9yZGVyKQog
CiBTdHJpbmcgQWNjZXNzaWJpbGl0eVRhYmxlOjp0aXRsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFp
c0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgaWYgKCFpc0V4cG9zYWJsZSgp
KQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGl0bGUoKTsKICAg
ICAKICAgICBTdHJpbmcgdGl0bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGUuaAppbmRleCBjYmZjYTZhZjkwOGI2YmFjMGM4OTEwNGIwNGE3
NDE0YmRlNzI4YmE4Li4wZDhlZDM5YTQxODRhMWM4M2UxYjlhNzY2MzFmZjI5YTViNzJhOWYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
LmgKQEAgLTI5LDExICsyOSwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDsKIGNsYXNzIEhUTUxUYWJsZUVsZW1lbnQ7CiBjbGFz
cyBSZW5kZXJUYWJsZVNlY3Rpb247CiAgICAgCkBAIC00NiwzNiArNDYsMzYgQEAgcHVibGljOgog
CiAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3QgZmluYWw7CiAgICAgdmly
dHVhbCBib29sIGlzQXJpYVRhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKKwog
ICAgIHZvaWQgYWRkQ2hpbGRyZW4oKSBvdmVycmlkZTsKICAgICB2b2lkIGNsZWFyQ2hpbGRyZW4o
KSBmaW5hbDsKLSAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNv
bHVtbnMoKTsKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJvd3MoKTsK
LSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZWxlY3RlZFJvd3MoKSB7IHJldHVybiBm
YWxzZTsgfQotICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KCk7Ci0gICAgdW5zaWduZWQgcm93Q291
bnQoKTsKKworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5zKCkgb3ZlcnJp
ZGU7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3MoKSBvdmVycmlkZTsKKwor
ICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KCkgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgcm93Q291
bnQoKSBvdmVycmlkZTsKICAgICBpbnQgdGFibGVMZXZlbCgpIGNvbnN0IGZpbmFsOwotICAgIAor
CiAgICAgU3RyaW5nIHRpdGxlKCkgY29uc3QgZmluYWw7Ci0gICAgCisKICAgICAvLyBhbGwgdGhl
IGNlbGxzIGluIHRoZSB0YWJsZQotICAgIHZvaWQgY2VsbHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJik7Ci0gICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogY2VsbEZvckNvbHVtbkFuZFJv
dyh1bnNpZ25lZCBjb2x1bW4sIHVuc2lnbmVkIHJvdyk7Ci0gICAgCi0gICAgdm9pZCBjb2x1bW5I
ZWFkZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwotICAgIHZvaWQgcm93SGVhZGVy
cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsKLSAgICB2b2lkIHZpc2libGVSb3dzKEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwotICAgIAotICAgIC8vIGFuIG9iamVjdCB0aGF0
IGNvbnRhaW5zLCBhcyBjaGlsZHJlbiwgYWxsIHRoZSBvYmplY3RzIHRoYXQgYWN0IGFzIGhlYWRl
cnMKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJDb250YWluZXIoKTsKKyAgICBBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHMoKSBvdmVycmlkZTsKKyAgICBBY2Nlc3NpYmls
aXR5VGFibGVDZWxsKiBjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbiwgdW5zaWdu
ZWQgcm93KSBvdmVycmlkZTsKIAotICAgIC8vIGlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxp
dHkoKSBpcyB3aGV0aGVyIGl0IGlzIGV4cG9zZWQgYXMgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIHRv
IHRoZSBwbGF0Zm9ybS4KLSAgICBib29sIGlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHko
KSBjb25zdDsKLSAgICAKLSAgICBpbnQgYXhDb2x1bW5Db3VudCgpIGNvbnN0OwotICAgIGludCBh
eFJvd0NvdW50KCkgY29uc3Q7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVt
bkhlYWRlcnMoKSBvdmVycmlkZTsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93
SGVhZGVycygpIG92ZXJyaWRlOworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB2aXNp
YmxlUm93cygpIG92ZXJyaWRlOworCisgICAgLy8gUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250
YWlucywgYXMgY2hpbGRyZW4sIGFsbCB0aGUgb2JqZWN0cyB0aGF0IGFjdCBhcyBoZWFkZXJzLgor
ICAgIEFYQ29yZU9iamVjdCogaGVhZGVyQ29udGFpbmVyKCkgb3ZlcnJpZGU7CisKKyAgICBib29s
IGlzVGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgLy8gUmV0dXJu
cyB3aGV0aGVyIGl0IGlzIGV4cG9zZWQgYXMgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIHRvIHRoZSBw
bGF0Zm9ybS4KKyAgICBib29sIGlzRXhwb3NhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBp
bnQgYXhDb2x1bW5Db3VudCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGludCBheFJvd0NvdW50KCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBBY2Nlc3NpYmlsaXR5
VGFibGUoUmVuZGVyT2JqZWN0Kik7CkBAIC04NCwxMiArODQsMTMgQEAgcHJvdGVjdGVkOgogICAg
IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBtX2NvbHVtbnM7CiAKICAgICBSZWZQdHI8QWNj
ZXNzaWJpbGl0eU9iamVjdD4gbV9oZWFkZXJDb250YWluZXI7Ci0gICAgYm9vbCBtX2lzRXhwb3Nh
YmxlVGhyb3VnaEFjY2Vzc2liaWxpdHk7CisgICAgYm9vbCBtX2lzRXhwb3NhYmxlOwogCiAgICAg
Ym9vbCBoYXNBUklBUm9sZSgpIGNvbnN0OwogCi0gICAgLy8gaXNUYWJsZSBpcyB3aGV0aGVyIGl0
J3MgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIG9iamVjdC4KLSAgICBib29sIGlzVGFibGUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgLy8gVXNlZCBpbiB0eXBlIGNoZWNraW5nIGZ1
bmN0aW9uIGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4uCisgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlU
YWJsZUluc3RhbmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgLy8gaXNE
YXRhVGFibGUgaXMgd2hldGhlciBpdCBpcyBleHBvc2VkIGFzIGFuIEFjY2Vzc2liaWxpdHlUYWJs
ZSBiZWNhdXNlIHRoZSBoZXVyaXN0aWMKICAgICAvLyB0aGluayB0aGlzICJsb29rcyIgbGlrZSBh
IGRhdGEtYmFzZWQgdGFibGUgKGluc3RlYWQgb2YgYSB0YWJsZSB1c2VkIGZvciBsYXlvdXQpLgog
ICAgIGJvb2wgaXNEYXRhVGFibGUoKSBjb25zdCBmaW5hbDsKQEAgLTEwNSw0ICsxMDYsNCBAQCBw
cml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlIAogCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eVRhYmxlLCBpc1RhYmxlKCkpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0FDQ0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eVRhYmxlLCBpc0FjY2Vz
c2liaWxpdHlUYWJsZUluc3RhbmNlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAppbmRleCBkYjUwNDFjOTM4OTc5
MjhmYjFkNzQ0ZDc3ZGI1ZWE3ZjY5YWFlN2NmLi4wMTMyN2QyYmIwYzZjMWI0NTM3NTNlNmMzMmRi
OTIyMmExNWVlZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCBBY2Nlc3Np
YmlsaXR5VGFibGUqIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnBhcmVudFRhYmxlKCkgY29uc3QK
ICAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gY2hvb3NlIGFub3RoZXIgYW5jZXN0b3Ig
dGFibGUgYXMgdGhpcyBjZWxsJ3MgdGFibGUuCiAgICAgICAgICAgICBpZiAoaXM8QWNjZXNzaWJp
bGl0eVRhYmxlPigqcGFyZW50KSkgewogICAgICAgICAgICAgICAgIGF1dG8mIHBhcmVudFRhYmxl
ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50KTsKLSAgICAgICAgICAgICAg
ICBpZiAocGFyZW50VGFibGUuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAg
ICAgICAgICAgICAgIGlmIChwYXJlbnRUYWJsZS5pc0V4cG9zYWJsZSgpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gJnBhcmVudFRhYmxlOwogICAgICAgICAgICAgICAgIGlmIChwYXJlbnRU
YWJsZS5ub2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE5LDcgKzExOSw3
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6aXNUYWJsZUNlbGwoKSBjb25zdAogICAg
IC8vIFRoaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgdW5pZ25vcmVkUGFyZW50IHdhcyBhIHJvdywg
YnV0IHRoYXQgZXhwbG9kZWQgcGVyZm9ybWFuY2UgaWYKICAgICAvLyB0aGlzIHdhcyBpbiBuZXN0
ZWQgdGFibGVzLiBUaGlzIGNoZWNrIHNob3VsZCBiZSBqdXN0IGFzIGdvb2QuCiAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogcGFyZW50VGFibGUgPSB0aGlzLT5wYXJlbnRUYWJsZSgpOwotICAgIHJl
dHVybiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVudFRhYmxlKSAmJiBkb3duY2FzdDxBY2Nl
c3NpYmlsaXR5VGFibGU+KCpwYXJlbnRUYWJsZSkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJp
bGl0eSgpOworICAgIHJldHVybiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KHBhcmVudFRhYmxlKSAm
JiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnRUYWJsZSkuaXNFeHBvc2FibGUo
KTsKIH0KICAgICAKIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmRl
dGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCkKQEAgLTI0MywxNyArMjQzLDE4IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVRhYmxlQ2VsbDo6c3VwcG9ydHNFeHBhbmRlZFRleHRWYWx1ZSgpIGNvbnN0CiAg
ICAgcmV0dXJuIGlzVGFibGVIZWFkZXJDZWxsKCkgJiYgaGFzQXR0cmlidXRlKGFiYnJBdHRyKTsK
IH0KICAgICAKLXZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6Y29sdW1uSGVhZGVycyhBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGhlYWRlcnMpCitBWENvcmVPYmplY3Q6OkFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpjb2x1bW5IZWFkZXJz
KCkKIHsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgaGVhZGVyczsKICAgICBBY2Nl
c3NpYmlsaXR5VGFibGUqIHBhcmVudCA9IHBhcmVudFRhYmxlKCk7CiAgICAgaWYgKCFwYXJlbnQp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGhlYWRlcnM7CiAKICAgICAvLyBDaG9v
c2UgY29sdW1uSGVhZGVycyBhcyB0aGUgcGxhY2Ugd2hlcmUgdGhlICJoZWFkZXJzIiBhdHRyaWJ1
dGUgaXMgcmVwb3J0ZWQuCiAgICAgYXJpYUVsZW1lbnRzRnJvbUF0dHJpYnV0ZShoZWFkZXJzLCBo
ZWFkZXJzQXR0cik7CiAgICAgLy8gSWYgdGhlIGhlYWRlcnMgYXR0cmlidXRlIHJldHVybmVkIHZh
bGlkIHZhbHVlcywgdGhlbiBkbyBub3QgZnVydGhlciBzZWFyY2ggZm9yIGNvbHVtbiBoZWFkZXJz
LgogICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGhlYWRlcnM7CiAgICAgCiAgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4g
cm93UmFuZ2U7CiAgICAgcm93SW5kZXhSYW5nZShyb3dSYW5nZSk7CkBAIC0yNzUsMTMgKzI3Niwx
NiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmNvbHVtbkhlYWRlcnMoQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJiBoZWFkZXJzKQogICAgICAgICBlbHNlIGlmICh0YWJsZUNlbGwt
PmlzQ29sdW1uSGVhZGVyQ2VsbCgpKQogICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQodGFibGVD
ZWxsKTsKICAgICB9CisKKyAgICByZXR1cm4gaGVhZGVyczsKIH0KICAgICAKLXZvaWQgQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbDo6cm93SGVhZGVycyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Im
IGhlYWRlcnMpCitBWENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsOjpyb3dIZWFkZXJzKCkKIHsKKyAgICBBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgaGVhZGVyczsKICAgICBBY2Nlc3NpYmlsaXR5VGFibGUqIHBhcmVudCA9IHBh
cmVudFRhYmxlKCk7CiAgICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGhlYWRlcnM7CiAKICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiByb3dS
YW5nZTsKICAgICByb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsKQEAgLTMwMCw2ICszMDQsOCBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnJvd0hlYWRlcnMoQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJiBoZWFkZXJzKQogICAgICAgICBlbHNlIGlmICh0YWJsZUNlbGwtPmlzUm93SGVh
ZGVyQ2VsbCgpKQogICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQodGFibGVDZWxsKTsKICAgICB9
CisKKyAgICByZXR1cm4gaGVhZGVyczsKIH0KIAogQWNjZXNzaWJpbGl0eVRhYmxlUm93KiBBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsOjpwYXJlbnRSb3coKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaAppbmRleCAwNTIw
ZjIyOGE2NTc4YmMzNTYxMWRhMDliMzY2NTEzNDUyNDlmOTg5Li5mYTM2MWM2OTZlOGU2YWYwMDZi
NWI4ZWM4NjcwZGRlMjY5NzE0YmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaApAQCAtNDksMTAgKzQ5LDEwIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcm93SW5kZXhSYW5nZShzdGQ6OnBhaXI8dW5zaWduZWQs
IHVuc2lnbmVkPiYgcm93UmFuZ2UpIGNvbnN0OwogICAgIC8vIGZpbGxzIGluIHRoZSBzdGFydCBs
b2NhdGlvbiBhbmQgY29sdW1uIHNwYW4gb2YgY2VsbAogICAgIHZpcnR1YWwgdm9pZCBjb2x1bW5J
bmRleFJhbmdlKHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+JiBjb2x1bW5SYW5nZSkgY29u
c3Q7Ci0gICAgCi0gICAgdm9pZCBjb2x1bW5IZWFkZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYpOwotICAgIHZvaWQgcm93SGVhZGVycyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Im
KTsKLSAgICAKKworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5IZWFkZXJz
KCkgb3ZlcnJpZGU7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRlcnMo
KSBvdmVycmlkZTsKKwogICAgIGludCBheENvbHVtbkluZGV4KCkgY29uc3Q7CiAgICAgaW50IGF4
Um93SW5kZXgoKSBjb25zdDsKICAgICBpbnQgYXhDb2x1bW5TcGFuKCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVt
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNv
bHVtbi5jcHAKaW5kZXggZmRjNjdmOGFjMTU2YTVhZGJiYWE2MTM1NzZiODY4MmFlNjI3MTVhMS4u
ZWIzZjBkMjk1OTBlNTE0YmVkMmFiMmQxNTcwNTE2NmY5YzVhMjhhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1u
LmNwcApAQCAtODIsNyArODIsNyBAQCBBWENvcmVPYmplY3QqIEFjY2Vzc2liaWxpdHlUYWJsZUNv
bHVtbjo6aGVhZGVyT2JqZWN0KCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRv
JiBwYXJlbnRUYWJsZSA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fcGFyZW50KTsK
LSAgICBpZiAoIXBhcmVudFRhYmxlLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkK
KyAgICBpZiAoIXBhcmVudFRhYmxlLmlzRXhwb3NhYmxlKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAogICAgIGlmIChwYXJlbnRUYWJsZS5pc0FyaWFUYWJsZSgpKSB7CkBAIC0xOTIs
NyArMTkyLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW46OmFkZENoaWxkcmVuKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgcGFyZW50VGFibGUgPSBkb3duY2FzdDxBY2Nl
c3NpYmlsaXR5VGFibGU+KCptX3BhcmVudCk7Ci0gICAgaWYgKCFwYXJlbnRUYWJsZS5pc0V4cG9z
YWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgaWYgKCFwYXJlbnRUYWJsZS5pc0V4cG9z
YWJsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaW50IG51bVJvd3MgPSBwYXJlbnRU
YWJsZS5yb3dDb3VudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwCmluZGV4
IDk0NmVmMWMxZWJjM2RkYjU2ZjcxYmE5NTQ4ZWVlZGFlZWY2M2RkMGIuLjcyNTgxMTZmNWQxYmVk
OTgxOTNmMzE1YmQzMjU4YmRjYmU1ZTY5YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRh
aW5lci5jcHAKQEAgLTcwLDExICs3MCwxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUhlYWRl
ckNvbnRhaW5lcjo6YWRkQ2hpbGRyZW4oKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBw
YXJlbnRUYWJsZSA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fcGFyZW50KTsKLSAg
ICBpZiAoIXBhcmVudFRhYmxlLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkKKyAg
ICBpZiAoIXBhcmVudFRhYmxlLmlzRXhwb3NhYmxlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBwYXJlbnRUYWJsZS5jb2x1bW5IZWFkZXJzKG1fY2hpbGRyZW4pOwotICAgIAorCisgICAg
bV9jaGlsZHJlbiA9IHBhcmVudFRhYmxlLmNvbHVtbkhlYWRlcnMoKTsKKwogICAgIGZvciAoY29u
c3QgYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQogICAgICAgICBtX2hlYWRlclJlY3QudW5pdGUo
Y2hpbGQtPmVsZW1lbnRSZWN0KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCmluZGV4IDdiNDljMjhiYzBjZDY4
NDE0MjZkNjdkYTUzNDgyYzEzMGMzYjY3NmYuLmVjYzViNDhlMjBkMDk2MGEzZmQ5ZTNkMjc3MzVj
OTA4ZDAzYjU4MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlUm93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgQWNjZXNzaWJpbGl0
eVJvbGUgQWNjZXNzaWJpbGl0eVRhYmxlUm93OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgp
CiBib29sIEFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6aXNUYWJsZVJvdygpIGNvbnN0CiB7CiAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogdGFibGUgPSBwYXJlbnRUYWJsZSgpOwotICAgIHJldHVybiBp
czxBY2Nlc3NpYmlsaXR5VGFibGU+KHRhYmxlKSAgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlPigqdGFibGUpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKTsKKyAgICByZXR1
cm4gaXM8QWNjZXNzaWJpbGl0eVRhYmxlPih0YWJsZSkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVRhYmxlPigqdGFibGUpLmlzRXhwb3NhYmxlKCk7CiB9CiAgICAgCiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVSb3c6Om9ic2VydmFibGVPYmplY3QoKSBjb25zdApAQCAt
MTAwLDcgKzEwMCw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZSogQWNjZXNzaWJpbGl0eVRhYmxlUm93
OjpwYXJlbnRUYWJsZSgpIGNvbnN0CiAgICAgICAgIC8vIGNob29zZSBhbm90aGVyIGFuY2VzdG9y
IHRhYmxlIGFzIHRoaXMgcm93J3MgdGFibGUuCiAgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5
VGFibGU+KCpwYXJlbnQpKSB7CiAgICAgICAgICAgICBhdXRvJiBwYXJlbnRUYWJsZSA9IGRvd25j
YXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudCk7Ci0gICAgICAgICAgICBpZiAocGFyZW50
VGFibGUuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAgICAgICAgICAgaWYg
KHBhcmVudFRhYmxlLmlzRXhwb3NhYmxlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICZwYXJl
bnRUYWJsZTsKICAgICAgICAgICAgIGlmIChwYXJlbnRUYWJsZS5ub2RlKCkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRr
L1dlYktpdEFjY2Vzc2libGUuY3BwCmluZGV4IGQzMmM4MjJhZTFjNDUyMTk2OTA2ZmJmZGFhZTE5
OTg0MTY3NTBkMDEuLjEyNWMxOTJiYzBjZTNjNDRiMTAxNDEwMzViNjIxMzQ1YTg5NmVlZjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGUuY3BwCkBAIC00MjYsNyArNDI2LDcgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Vi
a2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMoQXRrT2JqZWN0KiBvYmplY3QpCiAgICAgICAgICAg
ICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJtdWx0
aXNjcmlwdC10eXBlIiwgInBvc3QiKTsKICAgICB9CiAKLSAgICBpZiAoaXM8QWNjZXNzaWJpbGl0
eVRhYmxlPigqY29yZU9iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqY29y
ZU9iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKSB7CisgICAgaWYgKGlz
PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmNvcmVPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZT4oKmNvcmVPYmplY3QpLmlzRXhwb3NhYmxlKCkpIHsKICAgICAgICAgYXV0byYgdGFi
bGUgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpjb3JlT2JqZWN0KTsKICAgICAgICAg
aW50IHJvd0NvdW50ID0gdGFibGUuYXhSb3dDb3VudCgpOwogICAgICAgICBpZiAocm93Q291bnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcAppbmRleCBhOGE4ZTkyMzVjOTUy
MDc2MmRhOTk2ZTNmNGJjZDdkODU0MzBiMjUzLi5kNzhiZjRjZjc2NGQxYjczYzExZjNkNzNkNzgy
NWZlMDUxYWZkNTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAKQEAg
LTY2LDggKzY2LDcgQEAgc3RhdGljIGdpbnQgY2VsbEluZGV4KEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGwqIGF4Q2VsbCwgQWNjZXNzaWJpbGl0eVRhYmxlKiBheFRhYmwKIHsKICAgICAvLyBDYWxjdWxh
dGUgdGhlIGNlbGwncyBpbmRleCBhcyBpZiB3ZSBoYWQgYSB0cmFkaXRpb25hbCBHdGsrIHRhYmxl
IGluCiAgICAgLy8gd2hpY2ggY2VsbHMgYXJlIGFsbCBkaXJlY3QgY2hpbGRyZW4gb2YgdGhlIHRh
YmxlLCBhcnJhbmdlZCByb3ctZmlyc3QuCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFsbENlbGxzOwotICAgIGF4VGFibGUtPmNlbGxzKGFsbENl
bGxzKTsKKyAgICBhdXRvIGFsbENlbGxzID0gYXhUYWJsZS0+Y2VsbHMoKTsKICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3I6Oml0ZXJhdG9yIHBvc2l0
aW9uOwogICAgIHBvc2l0aW9uID0gc3RkOjpmaW5kKGFsbENlbGxzLmJlZ2luKCksIGFsbENlbGxz
LmVuZCgpLCBheENlbGwpOwogICAgIGlmIChwb3NpdGlvbiA9PSBhbGxDZWxscy5lbmQoKSkKQEAg
LTc5LDggKzc4LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNlbGxBdEluZGV4
KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBpbmRleCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwogICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+
KCphY2NUYWJsZSkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIGFsbENlbGxzOwotICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5
VGFibGU+KCphY2NUYWJsZSkuY2VsbHMoYWxsQ2VsbHMpOworICAgICAgICBhdXRvIGFsbENlbGxz
ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFibGUpLmNlbGxzKCk7CiAgICAg
ICAgIGlmICgwIDw9IGluZGV4ICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPCBhbGxD
ZWxscy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbD4oYWxsQ2VsbHNbaW5kZXhdLmdldCgpKTsKICAgICB9CkBAIC0yMDgsOCArMjA2LDcg
QEAgc3RhdGljIEF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uSGVhZGVy
KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBjb2wKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFj
Y1RhYmxlID0gY29yZSh0YWJsZSk7CiAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFj
Y1RhYmxlKSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgY29sdW1uSGVhZGVyczsKLSAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVRhYmxlPigqYWNjVGFibGUpLmNvbHVtbkhlYWRlcnMoY29sdW1uSGVhZGVycyk7CisgICAgICAg
IGF1dG8gY29sdW1uSGVhZGVycyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1Rh
YmxlKS5jb2x1bW5IZWFkZXJzKCk7CiAKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjb2x1bW5I
ZWFkZXIgOiBjb2x1bW5IZWFkZXJzKSB7CiAgICAgICAgICAgICBzdGQ6OnBhaXI8dW5zaWduZWQs
IHVuc2lnbmVkPiBjb2x1bW5SYW5nZTsKQEAgLTIyOCw4ICsyMjUsNyBAQCBzdGF0aWMgQXRrT2Jq
ZWN0KiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dIZWFkZXIoQXRrVGFibGUqIHRhYmxlLCBn
aW50IHJvdykKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxlID0gY29yZSh0YWJs
ZSk7CiAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKSkgewotICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93SGVh
ZGVyczsKLSAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFibGUpLnJv
d0hlYWRlcnMocm93SGVhZGVycyk7CisgICAgICAgIGF1dG8gcm93SGVhZGVycyA9IGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKS5yb3dIZWFkZXJzKCk7CiAKICAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiByb3dIZWFkZXIgOiByb3dIZWFkZXJzKSB7CiAgICAgICAgICAgICBz
dGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiByb3dSYW5nZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJs
ZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHAKaW5kZXggOGE4YjQxYWYxYjUyODk0N2MyMjBlZTY4
ZTI2MDVjYzIyZWEzZjE2MC4uZWQxOTI1YjJhNTM5NDA5N2YwODJmNmJhNWMwZjI5Mzg3NzQ2NTNi
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHAKQEAgLTU3
LDggKzU3LDcgQEAgR1B0ckFycmF5KiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0Q29sdW1u
SGVhZGVyQ2VsbHMoQXRrVGFibGVDZWxsKiBjZWxsKQogICAgIGlmICghaXM8QWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbD4oYXhPYmplY3QpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5IZWFk
ZXJzOwotICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpheE9iamVjdCkuY29s
dW1uSGVhZGVycyhjb2x1bW5IZWFkZXJzKTsKKyAgICBhdXRvIGNvbHVtbkhlYWRlcnMgPSBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3QpLmNvbHVtbkhlYWRlcnMoKTsK
IAogICAgIHJldHVybiBjb252ZXJ0VG9HUHRyQXJyYXkoY29sdW1uSGVhZGVycyk7CiB9CkBAIC03
Miw4ICs3MSw3IEBAIEdQdHJBcnJheSogd2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldFJvd0hl
YWRlckNlbGxzKEF0a1RhYmxlQ2VsbCogY2VsbCkKICAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGw+KGF4T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93SGVhZGVyczsK
LSAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3QpLnJvd0hlYWRl
cnMocm93SGVhZGVycyk7CisgICAgYXV0byByb3dIZWFkZXJzID0gZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbD4oKmF4T2JqZWN0KS5yb3dIZWFkZXJzKCk7CiAKICAgICByZXR1cm4gY29u
dmVydFRvR1B0ckFycmF5KHJvd0hlYWRlcnMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5tbQppbmRleCA0NzRlODUzZTcxNmFjNTRiNTljMzQ0YzIxZDA4ZmM1ZmZkYTUz
YWQzLi4wYjNiMjY3MjMzOWJiMWRlZWY5MTlmNDgzMTc0OWI0ODE3OWU4MWY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQpAQCAtMTE5Myw3ICsxMTkzLDcgQEAgc3Rh
dGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5T
U3RyaW5nICpzdHJpbmcpCiB7CiAgICAgLy8gRmluZCBpZiB0aGUgcGFyZW50IHRhYmxlIGZvciB0
aGUgdGFibGUgY2VsbC4KICAgICBpZiAoQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmls
aXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0Pigqc2VsZi5heEJhY2tpbmdPYmplY3QsIHRy
dWUsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewotICAgICAgICByZXR1cm4gaXM8
QWNjZXNzaWJpbGl0eVRhYmxlPihvYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJs
ZT4ob2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCk7CisgICAgICAgIHJl
dHVybiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KG9iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eVRhYmxlPihvYmplY3QpLmlzRXhwb3NhYmxlKCk7CiAgICAgfSkpCiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihwYXJlbnQpOwogICAgIHJldHVybiBu
aWw7CkBAIC0xMjMwLDEyICsxMjMwLDEwIEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVz
dWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIHN0ZDo6
cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGNvbHVtblJhbmdlOwogICAgIHRhYmxlQ2VsbC0+cm93
SW5kZXhSYW5nZShyb3dSYW5nZSk7CiAgICAgdGFibGVDZWxsLT5jb2x1bW5JbmRleFJhbmdlKGNv
bHVtblJhbmdlKTsKLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3Igcm93SGVhZGVyczsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29sdW1uSGVhZGVyczsKLSAgICB0YWJsZS0+cm93SGVh
ZGVycyhyb3dIZWFkZXJzKTsKLSAgICB0YWJsZS0+Y29sdW1uSGVhZGVycyhjb2x1bW5IZWFkZXJz
KTsKLSAgICAKKworICAgIGF1dG8gcm93SGVhZGVycyA9IHRhYmxlLT5yb3dIZWFkZXJzKCk7Cisg
ICAgYXV0byBjb2x1bW5IZWFkZXJzID0gdGFibGUtPmNvbHVtbkhlYWRlcnMoKTsKKwogICAgIE5T
TXV0YWJsZUFycmF5ICpoZWFkZXJzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKICAgICAKICAg
ICB1bnNpZ25lZCBjb2x1bW5SYW5nZUluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvbHVt
blJhbmdlLmZpcnN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKaW5kZXggYmQ2MTAwOWNh
MTU0MzcxODYzYTU2ODNjNGE0ZTI4Y2NiZTQ1YTliOC4uOWQ1ZTdlOWJiYWQzYjY3ZTdmZDBlNzA4
ZjdlOTU3OWExNDBhMDNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKQEAgLTE0NCw3
ICsxNDQsNiBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmluaXRpYWxpemVBdHRyaWJ1dGVEYXRh
KEFYQ29yZU9iamVjdCYgb2JqZWN0LCBib29sIGlzUm9vdAogICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpWYWxpZGF0aW9uTWVzc2FnZSwgb2JqZWN0LnZhbGlkYXRpb25NZXNzYWdlKCkp
OwogICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpCbG9ja3F1b3RlTGV2ZWwsIG9iamVj
dC5ibG9ja3F1b3RlTGV2ZWwoKSk7CiAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Okhl
YWRpbmdMZXZlbCwgb2JqZWN0LmhlYWRpbmdMZXZlbCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6VGFibGVMZXZlbCwgb2JqZWN0LnRhYmxlTGV2ZWwoKSk7CiAgICAgc2V0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSwgc3RhdGljX2Nh
c3Q8aW50PihvYmplY3QuY2hlY2tib3hPclJhZGlvVmFsdWUoKSkpOwogICAgIHNldFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpWYWx1ZURlc2NyaXB0aW9uLCBvYmplY3QudmFsdWVEZXNjcmlwdGlv
bigpKTsKICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VmFsdWVGb3JSYW5nZSwgb2Jq
ZWN0LnZhbHVlRm9yUmFuZ2UoKSk7CkBAIC0yMTcsNiArMjE2LDI2IEBAIHZvaWQgQVhJc29sYXRl
ZE9iamVjdDo6aW5pdGlhbGl6ZUF0dHJpYnV0ZURhdGEoQVhDb3JlT2JqZWN0JiBvYmplY3QsIGJv
b2wgaXNSb290CiAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkxpdmVSZWdpb25TdGF0
dXMsIG9iamVjdC5saXZlUmVnaW9uU3RhdHVzKCkpOwogICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpMaXZlUmVnaW9uUmVsZXZhbnQsIG9iamVjdC5saXZlUmVnaW9uUmVsZXZhbnQoKSk7
CiAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkxpdmVSZWdpb25BdG9taWMsIG9iamVj
dC5saXZlUmVnaW9uQXRvbWljKCkpOworCisgICAgaWYgKG9iamVjdC5pc1RhYmxlKCkpIHsKKyAg
ICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzVGFibGUsIG9iamVjdC5pc1RhYmxl
KCkpOworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNFeHBvc2FibGUsIG9i
amVjdC5pc0V4cG9zYWJsZSgpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OklzRGF0YVRhYmxlLCBvYmplY3QuaXNEYXRhVGFibGUoKSk7CisgICAgICAgIHNldFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpUYWJsZUxldmVsLCBvYmplY3QudGFibGVMZXZlbCgpKTsKKyAgICAg
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzU2VsZWN0ZWRSb3dzLCBvYmpl
Y3Quc3VwcG9ydHNTZWxlY3RlZFJvd3MoKSk7CisgICAgICAgIHNldE9iamVjdFZlY3RvclByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpDb2x1bW5zLCBvYmplY3QuY29sdW1ucygpKTsKKyAgICAgICAg
c2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlJvd3MsIG9iamVjdC5yb3dz
KCkpOworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q29sdW1uQ291bnQsIG9i
amVjdC5jb2x1bW5Db3VudCgpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OlJvd0NvdW50LCBvYmplY3Qucm93Q291bnQoKSk7CisgICAgICAgIHNldE9iamVjdFZlY3RvclBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDZWxscywgb2JqZWN0LmNlbGxzKCkpOworICAgICAgICBz
ZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q29sdW1uSGVhZGVycywgb2Jq
ZWN0LmNvbHVtbkhlYWRlcnMoKSk7CisgICAgICAgIHNldE9iamVjdFZlY3RvclByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpSb3dIZWFkZXJzLCBvYmplY3Qucm93SGVhZGVycygpKTsKKyAgICAgICAg
c2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZpc2libGVSb3dzLCBvYmpl
Y3QudmlzaWJsZVJvd3MoKSk7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpI
ZWFkZXJDb250YWluZXIsIG9iamVjdC5oZWFkZXJDb250YWluZXIoKSk7CisgICAgICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBWENvbHVtbkNvdW50LCBvYmplY3QuYXhDb2x1bW5Db3Vu
dCgpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFYUm93Q291bnQsIG9i
amVjdC5heFJvd0NvdW50KCkpOworICAgIH0KKwogICAgIGlmIChvYmplY3QuaXNUZXh0Q29udHJv
bCgpKQogICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VGV4dExlbmd0aCwgb2Jq
ZWN0LnRleHRMZW5ndGgoKSk7CiAKQEAgLTM3OCwxNyArMzk3LDE2IEBAIHZvaWQgQVhJc29sYXRl
ZE9iamVjdDo6c2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBB
WENvcmVPYmplCiAgICAgICAgIHNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgbnVsbHB0ciwgdHJ1
ZSk7CiB9CiAKLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0T2JqZWN0VmVjdG9yUHJvcGVydHko
QVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Im
IGNoaWxkcmVuKQordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRPYmplY3RWZWN0b3JQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYgY2hpbGRyZW4pCiB7Ci0gICAgc2l6ZV90IGNoaWxkcmVuU2l6ZSA9IGNoaWxkcmVu
LnNpemUoKTsKLSAgICBpZiAoIWNoaWxkcmVuU2l6ZSkKKyAgICBpZiAoIWNoaWxkcmVuLnNpemUo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFZlY3RvcjxBWElEPiBjaGlsZHJlblZlY3Rv
cjsKLSAgICBjaGlsZHJlblZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkoY2hpbGRyZW5TaXplKTsKLSAg
ICBmb3IgKGF1dG8gY2hpbGRPYmplY3QgOiBjaGlsZHJlbikKLSAgICAgICAgY2hpbGRyZW5WZWN0
b3IudW5jaGVja2VkQXBwZW5kKGNoaWxkT2JqZWN0LT5vYmplY3RJRCgpKTsKLSAgICBzZXRQcm9w
ZXJ0eShwcm9wZXJ0eU5hbWUsIGNoaWxkcmVuVmVjdG9yKTsKKworICAgIFZlY3RvcjxBWElEPiBj
aGlsZElEcyhjaGlsZHJlbi5zaXplKCkpOworICAgIGZvciAoYXV0byBjaGlsZCA6IGNoaWxkcmVu
KQorICAgICAgICBjaGlsZElEcy51bmNoZWNrZWRBcHBlbmQoY2hpbGQtPm9iamVjdElEKCkpOwor
CisgICAgc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBjaGlsZElEcyk7CiB9CiAKIHZvaWQgQVhJ
c29sYXRlZE9iamVjdDo6c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBB
dHRyaWJ1dGVWYWx1ZVZhcmlhbnQmJiB2YWx1ZSwgYm9vbCBzaG91bGRSZW1vdmUpCkBAIC00NTgs
NiArNDc2LDE5IEBAIGJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNEZXRhY2hlZEZyb21QYXJlbnQo
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0
OjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbkluZGV4LCB1bnNpZ25lZCByb3dJ
bmRleCkKK3sKKyAgICBBWElEIGNlbGxJRCA9IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVG
cm9tTWFpblRocmVhZDxBWElEPihbJmNvbHVtbkluZGV4LCAmcm93SW5kZXgsIHRoaXNdICgpIC0+
IEFYSUQgeworICAgICAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIGNlbGwgPSBvYmplY3QtPmNlbGxGb3JDb2x1bW5BbmRS
b3coY29sdW1uSW5kZXgsIHJvd0luZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2VsbC0+
b2piZWN0SUQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW52YWxpZEFYSUQ7CisgICAg
fSk7CisKKyAgICByZXR1cm4gdHJlZSgpLT5ub2RlRm9ySUQoY2VsbElEKTsKK30KKwogdm9pZCBB
WElzb2xhdGVkT2JqZWN0OjphY2Nlc3NpYmlsaXR5VGV4dChWZWN0b3I8QWNjZXNzaWJpbGl0eVRl
eHQ+JiB0ZXh0cykgY29uc3QKIHsKICAgICBhdXRvIGlzb2xhdGVkVGV4dHMgPSB2ZWN0b3JBdHRy
aWJ1dGVWYWx1ZTxBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlVGV4dD4oQVhQcm9wZXJ0eU5hbWU6
OkFjY2Vzc2liaWxpdHlUZXh0KTsKQEAgLTc4NiwxMiArODE3LDcgQEAgaW50IEFYSXNvbGF0ZWRP
YmplY3Q6OmludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29u
c3QKIAogdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciYgY2hpbGRyZW4pIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEFYSUQ+IGNoaWxkSURzID0gdmVjdG9y
QXR0cmlidXRlVmFsdWU8QVhJRD4ocHJvcGVydHlOYW1lKTsKLSAgICBjaGlsZHJlbi5yZXNlcnZl
Q2FwYWNpdHkoY2hpbGRJRHMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkSUQg
OiBjaGlsZElEcykgewotICAgICAgICBpZiAoYXV0byBvYmplY3QgPSB0cmVlKCktPm5vZGVGb3JJ
RChjaGlsZElEKSkKLSAgICAgICAgICAgIGNoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChvYmplY3Qp
OwotICAgIH0KKyAgICBjaGlsZHJlbiA9IHRyZWUoKS0+b2JqZWN0c0ZvcklEcyh2ZWN0b3JBdHRy
aWJ1dGVWYWx1ZTxBWElEPihwcm9wZXJ0eU5hbWUpKTsKIH0KIAogdm9pZCBBWElzb2xhdGVkT2Jq
ZWN0Ojp1cGRhdGVCYWNraW5nU3RvcmUoKQpAQCAtOTAyLDYgKzkyOCwxMiBAQCBib29sIEFYSXNv
bGF0ZWRPYmplY3Q6OmlzQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQoKSBjb25zdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAorYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0FjY2Vzc2liaWxpdHlUYWJs
ZUluc3RhbmNlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIGJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNBdHRhY2htZW50RWxlbWVu
dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC05NjgsMTIgKzEwMDAs
NiBAQCBib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTGFiZWwoKSBjb25zdAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0RhdGFUYWJsZSgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBib29s
IEFYSXNvbGF0ZWRPYmplY3Q6OmlzSW1hZ2VNYXBMaW5rKCkgY29uc3QKIHsKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaAppbmRleCAyZjZkMmRkNTI3NmY4
ZGVhODkxM2UxZTE3MjcxYjk1YjNjZWY5NzU0Li4xMWUwOWMyMDRiY2Y5YjIyZjY2ZjA1MjUwNWJl
MDFlNWZhMmRjYzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCkBAIC05OCw2ICs5OCw4IEBA
IHByaXZhdGU6CiAgICAgICAgIEFSSUFUcmVlUm93cywKICAgICAgICAgQVJJQVJvbGVBdHRyaWJ1
dGUsCiAgICAgICAgIEFSSUFPd25zRWxlbWVudHMsCisgICAgICAgIEFYQ29sdW1uQ291bnQsCisg
ICAgICAgIEFYUm93Q291bnQsCiAgICAgICAgIEJsb2NrcXVvdGVMZXZlbCwKICAgICAgICAgQm91
bmRpbmdCb3hSZWN0LAogICAgICAgICBDYW5IYXZlU2VsZWN0ZWRDaGlsZHJlbiwKQEAgLTExMiw5
ICsxMTQsMTMgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgICAgIENhcmV0QnJvd3NpbmdFbmFibGVkLAogI2VuZGlmCisgICAgICAg
IENlbGxzLAogICAgICAgICBDbGFzc0xpc3QsCiAgICAgICAgIENsaWNrUG9pbnQsCiAgICAgICAg
IENvbG9yVmFsdWUsCisgICAgICAgIENvbHVtbnMsCisgICAgICAgIENvbHVtbkNvdW50LAorICAg
ICAgICBDb2x1bW5IZWFkZXJzLAogICAgICAgICBDb21wdXRlZExhYmVsLAogICAgICAgICBDb21w
dXRlZFJvbGVTdHJpbmcsCiAgICAgICAgIEN1cnJlbnRTdGF0ZSwKQEAgLTEzNCw2ICsxNDAsNyBA
QCBwcml2YXRlOgogICAgICAgICBIYXNBUklBVmFsdWVOb3csCiAgICAgICAgIEhhc0NoaWxkcmVu
LAogICAgICAgICBIYXNQb3B1cCwKKyAgICAgICAgSGVhZGVyQ29udGFpbmVyLAogICAgICAgICBI
ZWFkaW5nTGV2ZWwsCiAgICAgICAgIEhlbHBUZXh0LAogICAgICAgICBIaWVyYXJjaGljYWxMZXZl
bCwKQEAgLTE1Myw5ICsxNjAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgSXNDaGVja2VkLAogICAg
ICAgICBJc0NvbGxhcHNlZCwKICAgICAgICAgSXNDb250cm9sLAorICAgICAgICBJc0RhdGFUYWJs
ZSwKICAgICAgICAgSXNEZXNjcmlwdGlvbkxpc3QsCiAgICAgICAgIElzRW5hYmxlZCwKICAgICAg
ICAgSXNFeHBhbmRlZCwKKyAgICAgICAgSXNFeHBvc2FibGUsCiAgICAgICAgIElzRmllbGRzZXQs
CiAgICAgICAgIElzRmlsZVVwbG9hZEJ1dHRvbiwKICAgICAgICAgSXNGb2N1c2VkLApAQCAtMjIy
LDYgKzIzMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIElzU2hvd2luZ1ZhbGlkYXRpb25NZXNzYWdl
LAogICAgICAgICBJc1NsaWRlciwKICAgICAgICAgSXNTdHlsZUZvcm1hdEdyb3VwLAorICAgICAg
ICBJc1RhYmxlLAogICAgICAgICBJc1RhYmxlQ2VsbCwKICAgICAgICAgSXNUYWJsZUNvbHVtbiwK
ICAgICAgICAgSXNUYWJsZVJvdywKQEAgLTI2OSw2ICsyNzksOSBAQCBwcml2YXRlOgogICAgICAg
ICBSb2xlVmFsdWUsCiAgICAgICAgIFJvbGVQbGF0Zm9ybVN0cmluZywKICAgICAgICAgUm9sZURl
c2NyaXB0aW9uLAorICAgICAgICBSb3dzLAorICAgICAgICBSb3dDb3VudCwKKyAgICAgICAgUm93
SGVhZGVycywKICAgICAgICAgU2VsZWN0ZWRDaGlsZHJlbiwKICAgICAgICAgU2VsZWN0ZWRSYWRp
b0J1dHRvbiwKICAgICAgICAgU2VsZWN0ZWRUYWJJdGVtLApAQCAtMjkxLDYgKzMwNCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIFN1cHBvcnRzUHJlc3NBY3Rpb24sCiAgICAgICAgIFN1cHBvcnRzUmFu
Z2VWYWx1ZSwKICAgICAgICAgU3VwcG9ydHNSZXF1aXJlZEF0dHJpYnV0ZSwKKyAgICAgICAgU3Vw
cG9ydHNTZWxlY3RlZFJvd3MsCiAgICAgICAgIFN1cHBvcnRzU2V0U2l6ZSwKICAgICAgICAgVGFi
Q2hpbGRyZW4sCiAgICAgICAgIFRhYmxlTGV2ZWwsCkBAIC0zMDUsNiArMzE5LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgVmFsaWRhdGlvbk1lc3NhZ2UsCiAgICAgICAgIFZlcnRpY2FsU2Nyb2xsQmFy
LAogICAgICAgICBWaXNpYmxlQ2hpbGRyZW4sCisgICAgICAgIFZpc2libGVSb3dzLAogICAgIH07
CiAgICAgCiAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8QVhJRCwgQVhJRD4gQWNjZXNzaWJpbGl0eUlz
b2xhdGVkVHJlZU1hdGhNdWx0aXNjcmlwdFBhaXI7CkBAIC0zMTcsNyArMzMyLDcgQEAgcHJpdmF0
ZToKICAgICB1c2luZyBBdHRyaWJ1dGVWYWx1ZVZhcmlhbnQgPSBWYXJpYW50PHN0ZDo6bnVsbHB0
cl90LCBTdHJpbmcsIGJvb2wsIGludCwgdW5zaWduZWQsIGRvdWJsZSwgZmxvYXQsIHVpbnQ2NF90
LCBDb2xvciwgVVJMLCBMYXlvdXRSZWN0LCBBWElELCBJbnRQb2ludCwgT3B0aW9uU2V0PFNwZWFr
QXM+LCBWZWN0b3I8QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZVRleHQ+LCBWZWN0b3I8QVhJRD4s
IFZlY3RvcjxBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTWF0aE11bHRpc2NyaXB0UGFpcj4sIFZl
Y3RvcjxTdHJpbmc+PjsKICAgICB2b2lkIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lLCBBdHRy
aWJ1dGVWYWx1ZVZhcmlhbnQmJiwgYm9vbCBzaG91bGRSZW1vdmUgPSBmYWxzZSk7CiAgICAgdm9p
ZCBzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSwgQVhDb3JlT2JqZWN0Kik7Ci0gICAg
dm9pZCBzZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSwgQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJik7CisgICAgdm9pZCBzZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZSwgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJik7CiAKICAgICBi
b29sIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgY29uc3Qg
U3RyaW5nIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKQEAgLTM2
NCw3ICszNzksMjUgQEAgcHJpdmF0ZToKICAgICBib29sIGlzT3JkZXJlZExpc3QoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzT3Jk
ZXJlZExpc3QpOyB9CiAgICAgYm9vbCBpc0Rlc2NyaXB0aW9uTGlzdCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNEZXNjcmlwdGlv
bkxpc3QpOyB9CiAKLSAgICBib29sIGlzVGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIC8vIFRhYmxlIHN1cHBvcnQuCisgICAgYm9vbCBpc1RhYmxlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1Rh
YmxlKTsgfQorICAgIGJvb2wgaXNFeHBvc2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzRXhwb3NhYmxlKTsgfQorICAgIGJv
b2wgaXNEYXRhVGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OklzRGF0YVRhYmxlKTsgfQorICAgIGludCB0YWJsZUxldmVsKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OlRhYmxlTGV2ZWwpOyB9CisgICAgYm9vbCBzdXBwb3J0c1NlbGVjdGVkUm93cygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9y
dHNTZWxlY3RlZFJvd3MpOyB9CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVt
bnMoKSBvdmVycmlkZSB7IHJldHVybiB0cmVlKCktPm9iamVjdHNGb3JJRHModmVjdG9yQXR0cmli
dXRlVmFsdWU8QVhJRD4oQVhQcm9wZXJ0eU5hbWU6OkNvbHVtbnMpKTsgfQorICAgIEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciByb3dzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJlZSgpLT5vYmpl
Y3RzRm9ySURzKHZlY3RvckF0dHJpYnV0ZVZhbHVlPEFYSUQ+KEFYUHJvcGVydHlOYW1lOjpSb3dz
KSk7IH0KKyAgICB1bnNpZ25lZCBjb2x1bW5Db3VudCgpIG92ZXJyaWRlIHsgcmV0dXJuIHVuc2ln
bmVkQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbHVtbkNvdW50KTsgfQorICAgIHVu
c2lnbmVkIHJvd0NvdW50KCkgb3ZlcnJpZGUgeyByZXR1cm4gdW5zaWduZWRBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6Um93Q291bnQpOyB9CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yIGNlbGxzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJlZSgpLT5vYmplY3RzRm9ySURzKHZl
Y3RvckF0dHJpYnV0ZVZhbHVlPEFYSUQ+KEFYUHJvcGVydHlOYW1lOjpDZWxscykpOyB9CisgICAg
QVhDb3JlT2JqZWN0KiBjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkLCB1bnNpZ25lZCkgb3Zl
cnJpZGU7CisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbHVtbkhlYWRlcnMoKSBv
dmVycmlkZSB7IHJldHVybiB0cmVlKCktPm9iamVjdHNGb3JJRHModmVjdG9yQXR0cmlidXRlVmFs
dWU8QVhJRD4oQVhQcm9wZXJ0eU5hbWU6OkNvbHVtbkhlYWRlcnMpKTsgfQorICAgIEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciByb3dIZWFkZXJzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJlZSgp
LT5vYmplY3RzRm9ySURzKHZlY3RvckF0dHJpYnV0ZVZhbHVlPEFYSUQ+KEFYUHJvcGVydHlOYW1l
OjpSb3dIZWFkZXJzKSk7IH0KKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdmlzaWJs
ZVJvd3MoKSBvdmVycmlkZSB7IHJldHVybiB0cmVlKCktPm9iamVjdHNGb3JJRHModmVjdG9yQXR0
cmlidXRlVmFsdWU8QVhJRD4oQVhQcm9wZXJ0eU5hbWU6OlZpc2libGVSb3dzKSk7IH0KKyAgICBB
WENvcmVPYmplY3QqIGhlYWRlckNvbnRhaW5lcigpIG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIZWFkZXJDb250YWluZXIpOyB9CisgICAgaW50
IGF4Q29sdW1uQ291bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBpbnRBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6QVhDb2x1bW5Db3VudCk7IH0KKyAgICBpbnQgYXhSb3dDb3VudCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpBWFJvd0NvdW50KTsgfQorCiAgICAgYm9vbCBpc1RhYmxlUm93KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1RhYmxlUm93KTsg
fQogICAgIGJvb2wgaXNUYWJsZUNvbHVtbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xB
dHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNUYWJsZUNvbHVtbik7IH0KICAgICBib29s
IGlzVGFibGVDZWxsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpJc1RhYmxlQ2VsbCk7IH0KQEAgLTQwNCw3ICs0MzcsNiBAQCBwcml2
YXRlOgogICAgIFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpWYWxpZGF0aW9uTWVzc2Fn
ZSk7IH0KICAgICB1bnNpZ25lZCBibG9ja3F1b3RlTGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB1bnNpZ25lZEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpCbG9ja3F1b3RlTGV2
ZWwpOyB9CiAgICAgaW50IGhlYWRpbmdMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGlu
dEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIZWFkaW5nTGV2ZWwpOyB9Ci0gICAgaW50
IHRhYmxlTGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBpbnRBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6VGFibGVMZXZlbCk7IH0KICAgICBBY2Nlc3NpYmlsaXR5QnV0dG9uU3Rh
dGUgY2hlY2tib3hPclJhZGlvVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGU+KGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUpKTsgfQogICAgIFN0cmluZyB2YWx1ZURl
c2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6OlZhbHVlRGVzY3JpcHRpb24pOyB9CiAgICAgZmxvYXQgdmFsdWVGb3JS
YW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZsb2F0QXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OlZhbHVlRm9yUmFuZ2UpOyB9CkBAIC02NTYsNiArNjg4LDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCBvdmVycmlkZTsKICAg
ICBib29sIGlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29s
IGlzQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlz
QWNjZXNzaWJpbGl0eVRhYmxlSW5zdGFuY2UoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGlz
QXR0YWNobWVudEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGlzTmF0aXZlSW1h
Z2UoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGlzSW1hZ2VCdXR0b24oKSBjb25zdCBvdmVy
cmlkZTsKQEAgLTY2Nyw3ICs3MDAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNTbGlkZXJUaHVt
YigpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaXNJbnB1dFNsaWRlcigpIGNvbnN0IG92ZXJy
aWRlOwogICAgIGJvb2wgaXNMYWJlbCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNEYXRh
VGFibGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGlzSW1hZ2VNYXBMaW5rKCkgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgYm9vbCBpc05hdGl2ZVNwaW5CdXR0b24oKSBjb25zdCBvdmVycmlkZTsK
ICAgICBib29sIGlzU3BpbkJ1dHRvblBhcnQoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0
ZWRUcmVlLmNwcAppbmRleCAxMTQxNTY3YjAwNTA0MmZkZjNmNmRiYzc3YTE4OTUyNTU4MzQxMjll
Li5lODBjZjQzYzI5MTAxZmEyY2IxMjczMDAzMzg4MGFmZTdiMGM1ZTM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZFRyZWUuY3BwCkBAIC0xMzIsOSArMTMyLDE5IEBAIFJlZlB0cjxBWElzb2xhdGVkVHJlZT4g
QVhJc29sYXRlZFRyZWU6OnRyZWVGb3JQYWdlSUQoUGFnZUlkZW50aWZpZXIgcGFnZUlEKQogCiBS
ZWZQdHI8QVhJc29sYXRlZE9iamVjdD4gQVhJc29sYXRlZFRyZWU6Om5vZGVGb3JJRChBWElEIGF4
SUQpIGNvbnN0CiB7Ci0gICAgaWYgKCFheElEKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gbV9yZWFkZXJUaHJlYWROb2RlTWFwLmdldChheElEKTsKKyAgICByZXR1cm4gYXhJ
RCAhPSBJbnZhbGlkQVhJRCA/IG1fcmVhZGVyVGhyZWFkTm9kZU1hcC5nZXQoYXhJRCkgOiBudWxs
cHRyOworfQorCitWZWN0b3I8UmVmUHRyPEFYQ29yZU9iamVjdD4+IEFYSXNvbGF0ZWRUcmVlOjpv
YmplY3RzRm9ySURzKFZlY3RvcjxBWElEPiBheElEcykgY29uc3QKK3sKKyAgICBWZWN0b3I8UmVm
UHRyPEFYQ29yZU9iamVjdD4+IHJlc3VsdChheElEcy5zaXplKCkpOworCisgICAgZm9yIChjb25z
dCBhdXRvJiBheElEIDogYXhJRHMpIHsKKyAgICAgICAgaWYgKGF1dG8gb2JqZWN0ID0gbm9kZUZv
cklEKGF4SUQpKQorICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChvYmplY3QpOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFJlZlB0cjxBWElzb2xhdGVkT2JqZWN0
PiBBWElzb2xhdGVkVHJlZTo6Zm9jdXNlZFVJRWxlbWVudCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaApp
bmRleCBiYjhmMGQzODhlMDY2MDQ0YTUyYzMzZjZlZWI2NWNlMTkzN2QxYjEzLi5iNTBhOTVkYWY5
YWUyZTc1YmYwMTU5NDYwMmY3MWE0NGJmZTJlNTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgKQEAg
LTYwLDYgKzYwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxBWElzb2xh
dGVkT2JqZWN0PiBmb2N1c2VkVUlFbGVtZW50KCk7CiAgICAgUmVmUHRyPEFYSXNvbGF0ZWRPYmpl
Y3Q+IG5vZGVGb3JJRChBWElEKSBjb25zdDsKICAgICBzdGF0aWMgUmVmUHRyPEFYSXNvbGF0ZWRP
YmplY3Q+IG5vZGVJblRyZWVGb3JJRChBWElzb2xhdGVkVHJlZUlELCBBWElEKTsKKyAgICBWZWN0
b3I8UmVmUHRyPEFYQ29yZU9iamVjdD4+IG9iamVjdHNGb3JJRHMoVmVjdG9yPEFYSUQ+KSBjb25z
dDsKIAogICAgIHN0cnVjdCBOb2RlQ2hhbmdlIHsKICAgICAgICAgUmVmPEFYSXNvbGF0ZWRPYmpl
Y3Q+IG1faXNvbGF0ZWRPYmplY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQppbmRleCA5ZDQ5NGYxYjUzYWViNmI3ODNmYWZk
ZDJhNTYzMmIwNTBiN2EzNTgzLi5jYmI4Y2Q5ZDU4OWM5MTBmZWJjOGY3NGE4NzhjZTY1YzM2Njlh
NTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVj
dENhY2hlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2Jq
ZWN0Q2FjaGVNYWMubW0KQEAgLTMwMyw3ICszMDMsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBv
c3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihBWENvcmVPYmplY3QqIG9iaiwgQVhOb3RpZmljYXRpb24g
bgogICAgICAgICAgICAgbWFjTm90aWZpY2F0aW9uID0gQCJBWEludmFsaWRTdGF0dXNDaGFuZ2Vk
IjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFYU2VsZWN0ZWRDaGlsZHJlbkNo
YW5nZWQ6Ci0gICAgICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqKSAmJiBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpvYmopLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vz
c2liaWxpdHkoKSkKKyAgICAgICAgICAgIGlmIChvYmotPmlzVGFibGUoKSAmJiBvYmotPmlzRXhw
b3NhYmxlKCkpCiAgICAgICAgICAgICAgICAgbWFjTm90aWZpY2F0aW9uID0gTlNBY2Nlc3NpYmls
aXR5U2VsZWN0ZWRSb3dzQ2hhbmdlZE5vdGlmaWNhdGlvbjsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBtYWNOb3RpZmljYXRpb24gPSBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENo
aWxkcmVuQ2hhbmdlZE5vdGlmaWNhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KaW5kZXggNDZlMjZhNmMyYjdhNTJhYjIxODhmZGNiMjU2NjdjODQ2NmY4MTY0Mi4u
ODc1ZDNlZDgyMGE3YjUyNzQxNDEwNzIzZDhkMzljYWQ3NDNjMjMwMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTEzNzIsMTAxICsxMzcyLDEwMiBAQCBBTExP
V19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogLSAoTlNBcnJheSopYWRkaXRpb25h
bEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcwogewotICAgIGlmICghc2VsZi5heEJhY2tpbmdP
YmplY3QpCisgICAgYXV0byogYmFja2luZ09iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0Owor
ICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKKwogICAg
IE5TTXV0YWJsZUFycmF5ICphZGRpdGlvbmFsID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAg
ICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzQVJJQU93bnMoKSkKKyAgICBpZiAo
YmFja2luZ09iamVjdC0+c3VwcG9ydHNBUklBT3ducygpKQogICAgICAgICBbYWRkaXRpb25hbCBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5T3duc0F0dHJpYnV0ZV07Ci0gICAgCi0gICAgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc1RvZ2dsZUJ1dHRvbigpKQorCisgICAgaWYgKGJhY2tpbmdP
YmplY3QtPmlzVG9nZ2xlQnV0dG9uKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV07Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkKCkgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
U3VtbWFyeSgpKQorCisgICAgaWYgKGJhY2tpbmdPYmplY3QtPnN1cHBvcnRzRXhwYW5kZWQoKSB8
fCBiYWNraW5nT2JqZWN0LT5pc1N1bW1hcnkoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkQXR0cmlidXRlXTsKLSAgICAKLSAgICBpZiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmlzU2Nyb2xsYmFyKCkKLSAgICAgICAgfHwgc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzUmFkaW9Hcm91cCgpCi0gICAgICAgIHx8IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc1NwbGl0dGVyKCkKLSAgICAgICAgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVG9vbGJh
cigpKQorCisgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzU2Nyb2xsYmFyKCkKKyAgICAgICAgfHwg
YmFja2luZ09iamVjdC0+aXNSYWRpb0dyb3VwKCkKKyAgICAgICAgfHwgYmFja2luZ09iamVjdC0+
aXNTcGxpdHRlcigpCisgICAgICAgIHx8IGJhY2tpbmdPYmplY3QtPmlzVG9vbGJhcigpKQogICAg
ICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25BdHRy
aWJ1dGVdOwotICAgIAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNBUklB
RHJhZ2dpbmcoKSkKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5zdXBwb3J0c0FSSUFEcmFnZ2lu
ZygpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5R3JhYmJl
ZEF0dHJpYnV0ZV07Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0
c0FSSUFEcm9wcGluZygpKQorCisgICAgaWYgKGJhY2tpbmdPYmplY3QtPnN1cHBvcnRzQVJJQURy
b3BwaW5nKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlE
cm9wRWZmZWN0c0F0dHJpYnV0ZV07Ci0gICAgCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJs
ZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+
KCpzZWxmLmF4QmFja2luZ09iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgp
ICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5z
dXBwb3J0c1NlbGVjdGVkUm93cygpKQorCisgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVGFibGUo
KSAmJiBiYWNraW5nT2JqZWN0LT5pc0V4cG9zYWJsZSgpICYmIGJhY2tpbmdPYmplY3QtPnN1cHBv
cnRzU2VsZWN0ZWRSb3dzKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vz
c2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdOwotICAgIAotICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+c3VwcG9ydHNMaXZlUmVnaW9uKCkpIHsKKworICAgIGlmIChiYWNraW5nT2Jq
ZWN0LT5zdXBwb3J0c0xpdmVSZWdpb24oKSkgewogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5QVJJQUxpdmVBdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25h
bCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50QXR0cmlidXRlXTsKICAgICB9
Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c1NldFNpemUoKSkK
KworICAgIGlmIChiYWNraW5nT2JqZWN0LT5zdXBwb3J0c1NldFNpemUoKSkKICAgICAgICAgW2Fk
ZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFTZXRTaXplQXR0cmlidXRlXTsK
LSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzUG9zSW5TZXQoKSkKKworICAg
IGlmIChiYWNraW5nT2JqZWN0LT5zdXBwb3J0c1Bvc0luU2V0KCkpCiAgICAgICAgIFthZGRpdGlv
bmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBUklBUG9zSW5TZXRBdHRyaWJ1dGVdOwotICAg
IAotICAgIEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uIHNvcnREaXJlY3Rpb24gPSBzZWxmLmF4
QmFja2luZ09iamVjdC0+c29ydERpcmVjdGlvbigpOworCisgICAgQWNjZXNzaWJpbGl0eVNvcnRE
aXJlY3Rpb24gc29ydERpcmVjdGlvbiA9IGJhY2tpbmdPYmplY3QtPnNvcnREaXJlY3Rpb24oKTsK
ICAgICBpZiAoc29ydERpcmVjdGlvbiAhPSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6Tm9u
ZSAmJiBzb3J0RGlyZWN0aW9uICE9IEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uOjpJbnZhbGlk
KQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5U29ydERpcmVj
dGlvbkF0dHJpYnV0ZV07Ci0gICAgCisKICAgICAvLyBJZiBhbiBvYmplY3QgaXMgYSBjaGlsZCBv
ZiBhIGxpdmUgcmVnaW9uLCB0aGVuIGFkZCB0aGVzZQotICAgIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNJbnNpZGVMaXZlUmVnaW9uKCkpCisgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzSW5z
aWRlTGl2ZVJlZ2lvbigpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5QVJJQUF0b21pY0F0dHJpYnV0ZV07CisKICAgICAvLyBBbGwgb2JqZWN0cyBzaG91bGQg
ZXhwb3NlIHRoZSBBUklBIGJ1c3kgYXR0cmlidXRlIChBUklBIDEuMSB3aXRoIElTU1VFLTUzOCku
CiAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUVsZW1lbnRCdXN5QXR0
cmlidXRlXTsKLSAgICAKKwogICAgIC8vIFBvcHVwIGJ1dHRvbnMgb24gdGhlIE1hYyBleHBvc2Ug
dGhlIHZhbHVlIGF0dHJpYnV0ZS4KLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUG9w
VXBCdXR0b24oKSkgeworICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1BvcFVwQnV0dG9uKCkpCiAg
ICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0
ZV07Ci0gICAgfQogCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c0RhdGV0
aW1lQXR0cmlidXRlKCkpCisgICAgaWYgKGJhY2tpbmdPYmplY3QtPnN1cHBvcnRzRGF0ZXRpbWVB
dHRyaWJ1dGUoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eURhdGV0aW1lVmFsdWVBdHRyaWJ1dGVdOwotICAgIAotICAgIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+c3VwcG9ydHNSZXF1aXJlZEF0dHJpYnV0ZSgpKSB7CisKKyAgICBpZiAoYmFja2luZ09i
amVjdC0+c3VwcG9ydHNSZXF1aXJlZEF0dHJpYnV0ZSgpKQogICAgICAgICBbYWRkaXRpb25hbCBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5UmVxdWlyZWRBdHRyaWJ1dGVdOwotICAgIH0KLSAgICAK
LSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmhhc1BvcHVwKCkpCisKKyAgICBpZiAoYmFj
a2luZ09iamVjdC0+aGFzUG9wdXAoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eUhhc1BvcHVwQXR0cmlidXRlXTsKLSAgICAKLSAgICBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzTWF0aFJvb3QoKSkgeworCisgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlz
TWF0aFJvb3QoKSkgewogICAgICAgICAvLyBUaGUgaW5kZXggb2YgYSBzcXVhcmUgcm9vdCBpcyBh
bHdheXMga25vd24sIHNvIHRoZXJlJ3Mgbm8gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBpdC4KLSAg
ICAgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoU3F1YXJlUm9vdCgpKQorICAg
ICAgICBpZiAoIWJhY2tpbmdPYmplY3QtPmlzTWF0aFNxdWFyZVJvb3QoKSkKICAgICAgICAgICAg
IFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdEluZGV4QXR0cmli
dXRlXTsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhS
b290UmFkaWNhbmRBdHRyaWJ1dGVdOwotICAgIH0gZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzTWF0aEZyYWN0aW9uKCkpIHsKKyAgICB9IGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlz
TWF0aEZyYWN0aW9uKCkpIHsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eU1hdGhGcmFjdGlvbk51bWVyYXRvckF0dHJpYnV0ZV07CiAgICAgICAgIFthZGRpdGlv
bmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoRnJhY3Rpb25EZW5vbWluYXRvckF0dHJp
YnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRo
TGluZVRoaWNrbmVzc0F0dHJpYnV0ZV07Ci0gICAgfSBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSkgeworICAgIH0gZWxzZSBpZiAoYmFj
a2luZ09iamVjdC0+aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSkgewogICAgICAgICBbYWRk
aXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEJhc2VBdHRyaWJ1dGVdOwogICAg
ICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFN1YnNjcmlwdEF0
dHJpYnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlN
YXRoU3VwZXJzY3JpcHRBdHRyaWJ1dGVdOwotICAgIH0gZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzTWF0aFVuZGVyT3ZlcigpKSB7CisgICAgfSBlbHNlIGlmIChiYWNraW5nT2JqZWN0
LT5pc01hdGhVbmRlck92ZXIoKSkgewogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5TWF0aEJhc2VBdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25hbCBhZGRP
YmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFVuZGVyQXR0cmlidXRlXTsKICAgICAgICAgW2FkZGl0
aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhPdmVyQXR0cmlidXRlXTsKLSAgICB9
IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhGZW5jZWQoKSkgeworICAgIH0g
ZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNNYXRoRmVuY2VkKCkpIHsKICAgICAgICAgW2FkZGl0
aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRPcGVuQXR0cmlidXRlXTsK
ICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRD
bG9zZUF0dHJpYnV0ZV07Ci0gICAgfSBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNN
YXRoTXVsdGlzY3JpcHQoKSkgeworICAgIH0gZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNNYXRo
TXVsdGlzY3JpcHQoKSkgewogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5TWF0aEJhc2VBdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5TWF0aFByZXNjcmlwdHNBdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRp
b25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFBvc3RzY3JpcHRzQXR0cmlidXRlXTsK
ICAgICB9Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c1BhdGgo
KSkKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5zdXBwb3J0c1BhdGgoKSkKICAgICAgICAgW2Fk
ZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVBhdGhBdHRyaWJ1dGVdOwotICAgIAot
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNFeHBhbmRlZFRleHRWYWx1ZSgp
KQorCisgICAgaWYgKGJhY2tpbmdPYmplY3QtPnN1cHBvcnRzRXhwYW5kZWRUZXh0VmFsdWUoKSkK
ICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkVGV4
dFZhbHVlQXR0cmlidXRlXTsKLSAgICAKKwogICAgIHJldHVybiBhZGRpdGlvbmFsOwogfQogCkBA
IC0xNDc0LDEyICsxNDc1LDEzIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JF
R0lOCiAtIChOU0FycmF5KilhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKIEFMTE9XX0RFUFJF
Q0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogewotICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0
QmFja2luZ1N0b3JlXSkKKyAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gc2VsZi5heEJhY2tpbmdP
YmplY3Q7CisgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICByZXR1cm4gbmlsOwotICAg
IAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpCisKKyAgICBp
ZiAoYmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpCiAgICAgICAgIHJldHVybiBbW3NlbGYg
YXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc107Ci0gICAgCisKICAg
ICBzdGF0aWMgTlNBcnJheSogYXR0cmlidXRlcyA9IG5pbDsKICAgICBzdGF0aWMgTlNBcnJheSog
YW5jaG9yQXR0cnMgPSBuaWw7CiAgICAgc3RhdGljIE5TQXJyYXkqIHdlYkFyZWFBdHRycyA9IG5p
bDsKQEAgLTE4MDMsODYgKzE4MDUsNzcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiAgICAgICAgIHNjcm9sbFZpZXdBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdp
dGhBcnJheTp0ZW1wQXJyYXldOwogICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwogICAgIH0K
LSAgICAKKwogICAgIE5TQXJyYXkgKm9iamVjdEF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwotICAg
IAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCisKKyAg
ICBpZiAoYmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIG9iamVjdEF0
dHJpYnV0ZXMgPSBwYXNzd29yZEZpZWxkQXR0cnM7Ci0gICAgCi0gICAgZWxzZSBpZiAoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpKQorICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3Qt
PmlzV2ViQXJlYSgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gd2ViQXJlYUF0dHJzOwot
ICAgIAotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RleHRDb250cm9sKCkp
CisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKQogICAgICAgICBv
YmplY3RBdHRyaWJ1dGVzID0gdGV4dEF0dHJzOwotICAgIAotICAgIGVsc2UgaWYgKHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc0xpbmsoKSB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNJbWFnZSgp
KQorICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzTGluaygpIHx8IGJhY2tpbmdPYmplY3Qt
PmlzSW1hZ2UoKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGFuY2hvckF0dHJzOwotICAg
IAotICAgIGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2Jq
ZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVj
dCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAgIGVsc2UgaWYgKGJhY2tp
bmdPYmplY3QtPmlzVGFibGUoKSAmJiBiYWNraW5nT2JqZWN0LT5pc0V4cG9zYWJsZSgpKQogICAg
ICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFibGVBdHRyczsKLSAgICBlbHNlIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNUYWJsZUNvbHVtbigpKQorICAgIGVsc2UgaWYgKGJhY2tpbmdPYmpl
Y3QtPmlzVGFibGVDb2x1bW4oKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHRhYmxlQ29s
QXR0cnM7Ci0gICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGFibGVDZWxsKCkp
CisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNUYWJsZUNlbGwoKSkKICAgICAgICAgb2Jq
ZWN0QXR0cmlidXRlcyA9IHRhYmxlQ2VsbEF0dHJzOwotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5pc1RhYmxlUm93KCkpIHsKKyAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5p
c1RhYmxlUm93KCkpIHsKICAgICAgICAgLy8gQW4gQVJJQSB0YWJsZSByb3cgY2FuIGJlIGNvbGxh
cHNlZCBhbmQgZXhwYW5kZWQsIHNvIGl0IG5lZWRzIHRoZSBleHRyYSBhdHRyaWJ1dGVzLgotICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQVJJQVRyZWVHcmlkUm93KCkpCisgICAg
ICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc0FSSUFUcmVlR3JpZFJvdygpKQogICAgICAgICAgICAg
b2JqZWN0QXR0cmlidXRlcyA9IG91dGxpbmVSb3dBdHRyczsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHRhYmxlUm93QXR0cnM7Ci0gICAgfSBlbHNlIGlmIChz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVlKCkpCisgICAgfSBlbHNlIGlmIChiYWNraW5nT2Jq
ZWN0LT5pc1RyZWUoKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG91dGxpbmVBdHRyczsK
LSAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKQorICAgIGVs
c2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkKICAgICAgICAgb2JqZWN0QXR0cmli
dXRlcyA9IG91dGxpbmVSb3dBdHRyczsKLSAgICAKLSAgICBlbHNlIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNMaXN0Qm94KCkpCisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNMaXN0
Qm94KCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBsaXN0Qm94QXR0cnM7Ci0gICAgZWxz
ZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTGlzdCgpKQorICAgIGVsc2UgaWYgKGJhY2tp
bmdPYmplY3QtPmlzTGlzdCgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbGlzdEF0dHJz
OwotICAgIAotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0NvbWJvQm94KCkp
CisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNDb21ib0JveCgpKQogICAgICAgICBvYmpl
Y3RBdHRyaWJ1dGVzID0gY29tYm9Cb3hBdHRyczsKLSAgICAKLSAgICBlbHNlIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNQcm9ncmVzc0luZGljYXRvcigpIHx8IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc1NsaWRlcigpKQorICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzUHJvZ3Jlc3NJ
bmRpY2F0b3IoKSB8fCBiYWNraW5nT2JqZWN0LT5pc1NsaWRlcigpKQogICAgICAgICBvYmplY3RB
dHRyaWJ1dGVzID0gcmFuZ2VBdHRyczsKLSAgICAKICAgICAvLyBUaGVzZSBhcmUgcHJvY2Vzc2Vk
IGluIG9yZGVyIGJlY2F1c2UgYW4gaW5wdXQgaW1hZ2UgaXMgYSBidXR0b24sIGFuZCBhIGJ1dHRv
biBpcyBhIGNvbnRyb2wuCi0gICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzSW5w
dXRJbWFnZSgpKQorICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzSW5wdXRJbWFnZSgpKQog
ICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gaW5wdXRJbWFnZUF0dHJzOwotICAgIGVsc2UgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0J1dHRvbigpKQorICAgIGVsc2UgaWYgKGJhY2tpbmdP
YmplY3QtPmlzQnV0dG9uKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBidXR0b25BdHRy
czsKLSAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb250cm9sKCkpCisgICAg
ZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNDb250cm9sKCkpCiAgICAgICAgIG9iamVjdEF0dHJp
YnV0ZXMgPSBjb250cm9sQXR0cnM7Ci0gICAgCi0gICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzR3JvdXAoKSB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNMaXN0SXRlbSgpKQor
CisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNHcm91cCgpIHx8IGJhY2tpbmdPYmplY3Qt
PmlzTGlzdEl0ZW0oKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGdyb3VwQXR0cnM7Ci0g
ICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGFiTGlzdCgpKQorICAgIGVsc2Ug
aWYgKGJhY2tpbmdPYmplY3QtPmlzVGFiTGlzdCgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVz
ID0gdGFiTGlzdEF0dHJzOwotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Nj
cm9sbFZpZXcoKSkKKyAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkK
ICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHNjcm9sbFZpZXdBdHRyczsKLSAgICBlbHNlIGlm
IChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTcGluQnV0dG9uKCkpCisgICAgZWxzZSBpZiAoYmFj
a2luZ09iamVjdC0+aXNTcGluQnV0dG9uKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBp
bmNyZW1lbnRvckF0dHJzOwotICAgIAotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc01lbnUoKSkKKyAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc01lbnUoKSkKICAgICAg
ICAgb2JqZWN0QXR0cmlidXRlcyA9IG1lbnVBdHRyczsKLSAgICBlbHNlIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNNZW51QmFyKCkpCisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNN
ZW51QmFyKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBtZW51QmFyQXR0cnM7Ci0gICAg
ZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWVudUJ1dHRvbigpKQorICAgIGVsc2Ug
aWYgKGJhY2tpbmdPYmplY3QtPmlzTWVudUJ1dHRvbigpKQogICAgICAgICBvYmplY3RBdHRyaWJ1
dGVzID0gbWVudUJ1dHRvbkF0dHJzOwotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc01lbnVJdGVtKCkpCisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNNZW51SXRlbSgp
KQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbWVudUl0ZW1BdHRyczsKLSAgICAKKwogICAg
IE5TQXJyYXkgKmFkZGl0aW9uYWxBdHRyaWJ1dGVzID0gW3NlbGYgYWRkaXRpb25hbEFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVOYW1lc107CiAgICAgaWYgKFthZGRpdGlvbmFsQXR0cmlidXRlcyBjb3Vu
dF0pCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBbb2JqZWN0QXR0cmlidXRlcyBhcnJheUJ5
QWRkaW5nT2JqZWN0c0Zyb21BcnJheTphZGRpdGlvbmFsQXR0cmlidXRlc107Ci0gICAgCisKICAg
ICAvLyBPbmx5IGV4cG9zZSBBWEFSSUFDdXJyZW50IGF0dHJpYnV0ZSB3aGVuIHRoZSBlbGVtZW50
IGlzIHNldCB0byBiZSBjdXJyZW50IGl0ZW0uCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5jdXJyZW50U3RhdGUoKSAhPSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlOjpGYWxzZSkKKyAg
ICBpZiAoYmFja2luZ09iamVjdC0+Y3VycmVudFN0YXRlKCkgIT0gQWNjZXNzaWJpbGl0eUN1cnJl
bnRTdGF0ZTo6RmFsc2UpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBbb2JqZWN0QXR0cmli
dXRlcyBhcnJheUJ5QWRkaW5nT2JqZWN0c0Zyb21BcnJheTpAWyBOU0FjY2Vzc2liaWxpdHlBUklB
Q3VycmVudEF0dHJpYnV0ZSBdXTsKLSAgICAKKwogICAgIC8vIEFwcEtpdCBuZWVkcyB0byBrbm93
IHRoZSBzY3JlZW4gaGVpZ2h0IGluIG9yZGVyIHRvIGRvIHRoZSBjb29yZGluYXRlIGNvbnZlcnNp
b24uCiAgICAgb2JqZWN0QXR0cmlidXRlcyA9IFtvYmplY3RBdHRyaWJ1dGVzIGFycmF5QnlBZGRp
bmdPYmplY3RzRnJvbUFycmF5OkBbIE5TQWNjZXNzaWJpbGl0eVByaW1hcnlTY3JlZW5IZWlnaHRB
dHRyaWJ1dGUgXV07Ci0gICAgCisKICAgICByZXR1cm4gb2JqZWN0QXR0cmlidXRlczsKIH0KIApA
QCAtMjM3NywyMTQgKzIzNzAsMjE2IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05T
X0VORAogewogICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzRGV0
YWNoZWRGcm9tUGFyZW50KCkpCisgICAgLy8gRklYTUU6IG1ha2UgdXBkYXRlT2JqZWN0QmFja2lu
Z1N0b3JlIGFib3ZlIHJldHVybiB0aGUgYmFja2luZyBvYmplY3QuCisgICAgYXV0byogYmFja2lu
Z09iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0OworCisgICAgaWYgKGJhY2tpbmdPYmplY3Qt
PmlzRGV0YWNoZWRGcm9tUGFyZW50KCkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCisKICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlSb2xl
QXR0cmlidXRlXSkKICAgICAgICAgcmV0dXJuIFtzZWxmIHJvbGVdOwotICAgIAorCiAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U3Vicm9sZUF0
dHJpYnV0ZV0pCiAgICAgICAgIHJldHVybiBbc2VsZiBzdWJyb2xlXTsKLSAgICAKKwogICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNj
cmlwdGlvbkF0dHJpYnV0ZV0pCiAgICAgICAgIHJldHVybiBbc2VsZiByb2xlRGVzY3JpcHRpb25d
OwogCiAgICAgLy8gQVhBUklBUm9sZSBpcyBvbmx5IHVzZWQgYnkgRHVtcFJlbmRlclRyZWUgKHNv
IGZhcikuCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYQVJJQVJv
bGUiXSkKICAgICAgICAgcmV0dXJuIFtzZWxmIGNvbXB1dGVkUm9sZVN0cmluZ107Ci0gICAgCisK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlQ
YXJlbnRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFRoaXMgd2lsbCByZXR1
cm4gdGhlIHBhcmVudCBvZiB0aGUgQVhXZWJBcmVhLCBpZiB0aGlzIGlzIGEgd2ViIGFyZWEuCiAg
ICAgICAgIGlkIHNjcm9sbFZpZXdQYXJlbnQgPSBbc2VsZiBzY3JvbGxWaWV3UGFyZW50XTsKICAg
ICAgICAgaWYgKHNjcm9sbFZpZXdQYXJlbnQpCiAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsVmll
d1BhcmVudDsKLSAgICAgICAgCisKICAgICAgICAgLy8gVHJlZSBpdGVtIChjaGFuZ2VkIHRvIEFY
Um93cykgY2FuIG9ubHkgcmVwb3J0IHRoZSB0cmVlIChBWE91dGxpbmUpIGFzIGl0cyBwYXJlbnQu
Ci0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKSB7Ci0gICAg
ICAgICAgICBhdXRvIHBhcmVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wYXJlbnRPYmplY3RV
bmlnbm9yZWQoKTsKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkgewor
ICAgICAgICAgICAgYXV0byBwYXJlbnQgPSBiYWNraW5nT2JqZWN0LT5wYXJlbnRPYmplY3RVbmln
bm9yZWQoKTsKICAgICAgICAgICAgIHdoaWxlIChwYXJlbnQpIHsKICAgICAgICAgICAgICAgICBp
ZiAocGFyZW50LT5pc1RyZWUoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+
d3JhcHBlcigpOwogICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0
VW5pZ25vcmVkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGF1dG8gcGFyZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3Jl
ZCgpOworCisgICAgICAgIGF1dG8gcGFyZW50ID0gYmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0
VW5pZ25vcmVkKCk7CiAgICAgICAgIGlmICghcGFyZW50KQogICAgICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICAgICAgCisKICAgICAgICAgLy8gSW4gV2ViS2l0MSwgdGhlIHNjcm9sbCB2aWV3IGlz
IHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0gKHRoZSBhdHRhY2htZW50IHZpZXcpLCBzbyB0aGUgcGFy
ZW50CiAgICAgICAgIC8vIHNob3VsZCBiZSByZXBvcnRlZCBkaXJlY3RseSBhcyBzdWNoLgotICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpICYmIHBhcmVudC0+aXNB
dHRhY2htZW50KCkpCisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSAmJiBw
YXJlbnQtPmlzQXR0YWNobWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIFtwYXJlbnQtPndyYXBw
ZXIoKSBhdHRhY2htZW50Vmlld107Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBwYXJlbnQt
PndyYXBwZXIoKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV0gfHwgW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkluTmF2aWdhdGlv
bk9yZGVyQXR0cmlidXRlXSkgewogICAgICAgICBpZiAoIXNlbGYuY2hpbGRyZW5WZWN0b3JTaXpl
KSB7CiAgICAgICAgICAgICBOU0FycmF5KiBjaGlsZHJlbiA9IFtzZWxmIHJlbmRlcldpZGdldENo
aWxkcmVuXTsKICAgICAgICAgICAgIGlmIChjaGlsZHJlbiAhPSBuaWwpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkcmVuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFRo
ZSB0cmVlJ3MgKEFYT3V0bGluZSkgY2hpbGRyZW4gYXJlIHN1cHBvc2VkIHRvIGJlIGl0cyByb3dz
IGFuZCBjb2x1bW5zLgogICAgICAgICAvLyBUaGUgQVJJQSBzcGVjIGRvZXNuJ3QgaGF2ZSBjb2x1
bW5zLCBzbyB3ZSBqdXN0IG5lZWQgcm93cy4KLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc1RyZWUoKSkKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVHJlZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vz
c2liaWxpdHlSb3dzQXR0cmlidXRlXTsKLSAgICAgICAgCisKICAgICAgICAgLy8gQSB0cmVlIGl0
ZW0gc2hvdWxkIG9ubHkgZXhwb3NlIGl0cyBjb250ZW50IGFzIGl0cyBjaGlsZHJlbiAobm90IGl0
cyByb3dzKQotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkg
eworICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKSB7CiAgICAgICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29udGVu
dENvcHk7Ci0gICAgICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+YXJpYVRyZWVJdGVtQ29u
dGVudChjb250ZW50Q29weSk7CisgICAgICAgICAgICBiYWNraW5nT2JqZWN0LT5hcmlhVHJlZUl0
ZW1Db250ZW50KGNvbnRlbnRDb3B5KTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0Fy
cmF5KGNvbnRlbnRDb3B5KTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4g
c2VsZi5jaGlsZHJlblZlY3RvckFycmF5OwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRyZW5B
dHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+Y2FuSGF2ZVNl
bGVjdGVkQ2hpbGRyZW4oKSkgeworICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+Y2FuSGF2ZVNl
bGVjdGVkQ2hpbGRyZW4oKSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW5Db3B5OwotICAgICAgICAg
ICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJl
bkNvcHkpOworICAgICAgICAgICAgYmFja2luZ09iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxl
Y3RlZENoaWxkcmVuQ29weSk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShz
ZWxlY3RlZENoaWxkcmVuQ29weSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0Fj
Y2Vzc2liaWxpdHlWaXNpYmxlQ2hpbGRyZW5BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+aXNMaXN0Qm94KCkpIHsKKyAgICAgICAgaWYgKGJhY2tpbmdPYmpl
Y3QtPmlzTGlzdEJveCgpKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdmlzaWJsZUNoaWxkcmVuQ29weTsKLSAgICAgICAgICAg
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT52aXNpYmxlQ2hpbGRyZW4odmlzaWJsZUNoaWxkcmVuQ29w
eSk7CisgICAgICAgICAgICBiYWNraW5nT2JqZWN0LT52aXNpYmxlQ2hpbGRyZW4odmlzaWJsZUNo
aWxkcmVuQ29weSk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh2aXNpYmxl
Q2hpbGRyZW5Db3B5KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNMaXN0KCkpCisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc0xpc3QoKSkKICAg
ICAgICAgICAgIHJldHVybiBbc2VsZiBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdOwogCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
fQotICAgIAotICAgIAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNXZWJBcmVhKCkp
IHsKKworCisgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpKSB7CiAgICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExpbmtVSUVsZW1lbnRzIl0pIHsK
ICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBsaW5rczsKLSAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q+KCpzZWxmLmF4QmFja2luZ09iamVjdCkuZ2V0RG9jdW1lbnRMaW5rcyhsaW5rcyk7CisgICAg
ICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0PigqYmFja2luZ09iamVj
dCkuZ2V0RG9jdW1lbnRMaW5rcyhsaW5rcyk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRv
TlNBcnJheShsaW5rcyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpAIkFYTG9hZGVkIl0pCi0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVy
IG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xvYWRlZCgpXTsKKyAgICAg
ICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6YmFja2luZ09iamVjdC0+aXNM
b2FkZWQoKV07CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJB
WExheW91dENvdW50Il0pCi0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJ
bnQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPmxheW91dENvdW50KCldOworICAgICAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OmJhY2tpbmdPYmplY3QtPmxheW91dENvdW50KCld
OwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eUxvYWRpbmdQcm9ncmVzc0F0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gW05TTnVt
YmVyIG51bWJlcldpdGhEb3VibGU6c2VsZi5heEJhY2tpbmdPYmplY3QtPmVzdGltYXRlZExvYWRp
bmdQcm9ncmVzcygpXTsKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTpiYWNraW5nT2JqZWN0LT5lc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3MoKV07CiAgICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UHJldmVu
dEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5wcmV2ZW50S2V5
Ym9hcmRET01FdmVudERpc3BhdGNoKCldOworICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDpiYWNraW5nT2JqZWN0LT5wcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3Bh
dGNoKCldOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eUNhcmV0QnJvd3NpbmdFbmFibGVkQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJl
dHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmNhcmV0
QnJvd3NpbmdFbmFibGVkKCldOworICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDpiYWNraW5nT2JqZWN0LT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpXTsKICAgICAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlXZWJTZXNz
aW9uSURBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIEAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPnNlc3Npb25JRCgpKTsKKyAgICAgICAgICAgIHJldHVybiBAKGJhY2tpbmdPYmplY3QtPnNl
c3Npb25JRCgpKTsKICAgICB9Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c1RleHRDb250cm9sKCkpIHsKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RleHRDb250cm9s
KCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nl
c3NpYmlsaXR5TnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmlidXRlXSkgewotICAgICAgICAgICAgaW50
IGxlbmd0aCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT50ZXh0TGVuZ3RoKCk7CisgICAgICAgICAg
ICBpbnQgbGVuZ3RoID0gYmFja2luZ09iamVjdC0+dGV4dExlbmd0aCgpOwogICAgICAgICAgICAg
aWYgKGxlbmd0aCA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50Omxlbmd0aF07CiAgICAgICAg
IH0KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRlXSkgewotICAgICAgICAgICAgU3RyaW5nIHNlbGVj
dGVkVGV4dCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZWxlY3RlZFRleHQoKTsKKyAgICAgICAg
ICAgIFN0cmluZyBzZWxlY3RlZFRleHQgPSBiYWNraW5nT2JqZWN0LT5zZWxlY3RlZFRleHQoKTsK
ICAgICAgICAgICAgIGlmIChzZWxlY3RlZFRleHQuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAgICAgICAgIHJldHVybiAoTlNTdHJpbmcqKXNlbGVjdGVkVGV4dDsK
ICAgICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAg
IFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZWxlY3Rl
ZFRleHRSYW5nZSgpOworICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gYmFj
a2luZ09iamVjdC0+c2VsZWN0ZWRUZXh0UmFuZ2UoKTsKICAgICAgICAgICAgIHJldHVybiBbTlNW
YWx1ZSB2YWx1ZVdpdGhSYW5nZTpOU01ha2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5n
ZS5sZW5ndGgpXTsKICAgICAgICAgfQogICAgICAgICAvLyBUT0RPOiBHZXQgYWN0dWFsIHZpc2li
bGUgcmFuZ2UuIDxyZGFyOi8vcHJvYmxlbS80NzEyMTAxPgogICAgICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFu
Z2VBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c1Bhc3N3b3JkRmllbGQoKSA/IG5pbCA6IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOiBOU01ha2VS
YW5nZSgwLCBzZWxmLmF4QmFja2luZ09iamVjdC0+dGV4dExlbmd0aCgpKV07CisgICAgICAgICAg
ICByZXR1cm4gYmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkgPyBuaWwgOiBbTlNWYWx1
ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UoMCwgYmFja2luZ09iamVjdC0+dGV4dExlbmd0
aCgpKV07CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNj
ZXNzaWJpbGl0eUluc2VydGlvblBvaW50TGluZU51bWJlckF0dHJpYnV0ZV0pIHsKICAgICAgICAg
ICAgIC8vIGlmIHNlbGVjdGlvbkVuZCA+IDAsIHRoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgdGV4dCBh
bmQgdGhpcyBxdWVzdGlvbiBzaG91bGQgbm90IGJlIGFuc3dlcmVkCi0gICAgICAgICAgICBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpIHx8IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5zZWxlY3Rpb25FbmQoKSA+IDApCisgICAgICAgICAgICBpZiAoYmFja2luZ09iamVj
dC0+aXNQYXNzd29yZEZpZWxkKCkgfHwgYmFja2luZ09iamVjdC0+c2VsZWN0aW9uRW5kKCkgPiAw
KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGF1dG8gZm9jdXNlZE9iamVjdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3Q+KHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5mb2N1c2VkVUlFbGVtZW50KCkpOwotICAgICAgICAgICAgaWYgKGZv
Y3VzZWRPYmplY3QgIT0gc2VsZi5heEJhY2tpbmdPYmplY3QpCisKKyAgICAgICAgICAgIGF1dG8g
Zm9jdXNlZE9iamVjdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3Q+KGJhY2tpbmdPYmpl
Y3QtPmZvY3VzZWRVSUVsZW1lbnQoKSk7CisgICAgICAgICAgICBpZiAoZm9jdXNlZE9iamVjdCAh
PSBiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAg
ICAKKwogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZvY3VzZWRQb3NpdGlvbiA9IGZvY3Vz
ZWRPYmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KGZvY3VzZWRPYmplY3QtPnNlbGVjdGlv
blN0YXJ0KCksIHRydWUpOwotICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSBzZWxmLmF4QmFj
a2luZ09iamVjdC0+bGluZUZvclBvc2l0aW9uKGZvY3VzZWRQb3NpdGlvbik7CisgICAgICAgICAg
ICBpbnQgbGluZU51bWJlciA9IGJhY2tpbmdPYmplY3QtPmxpbmVGb3JQb3NpdGlvbihmb2N1c2Vk
UG9zaXRpb24pOwogICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPCAwKQogICAgICAgICAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoSW50OmxpbmVOdW1iZXJdOwogICAgICAgICB9CiAgICAgfQotICAgIAor
CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5
VVJMQXR0cmlidXRlXSkgewotICAgICAgICBVUkwgdXJsID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnVybCgpOworICAgICAgICBVUkwgdXJsID0gYmFja2luZ09iamVjdC0+dXJsKCk7CiAgICAgICAg
IGlmICh1cmwuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICByZXR1
cm4gKE5TVVJMKil1cmw7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmNyZW1lbnRCdXR0b25BdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgIGF1dG8gaW5jcmVtZW50QnV0dG9uID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmluY3JlbWVu
dEJ1dHRvbigpOworICAgICAgICBhdXRvIGluY3JlbWVudEJ1dHRvbiA9IGJhY2tpbmdPYmplY3Qt
PmluY3JlbWVudEJ1dHRvbigpOwogICAgICAgICByZXR1cm4gaW5jcmVtZW50QnV0dG9uID8gaW5j
cmVtZW50QnV0dG9uLT53cmFwcGVyKCkgOiBuaWw7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEZWNyZW1lbnRCdXR0b25BdHRy
aWJ1dGVdKSB7Ci0gICAgICAgIGF1dG8gZGVjcmVtZW50QnV0dG9uID0gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmRlY3JlbWVudEJ1dHRvbigpOworICAgICAgICBhdXRvIGRlY3JlbWVudEJ1dHRvbiA9
IGJhY2tpbmdPYmplY3QtPmRlY3JlbWVudEJ1dHRvbigpOwogICAgICAgICByZXR1cm4gZGVjcmVt
ZW50QnV0dG9uID8gZGVjcmVtZW50QnV0dG9uLT53cmFwcGVyKCkgOiBuaWw7CiAgICAgfQogCiAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogQCJBWFZpc2l0ZWQiXSkKLSAg
ICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzVmlzaXRlZCgpXTsKLSAgICAKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDogYmFja2luZ09iamVjdC0+aXNWaXNpdGVkKCldOworCiAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VGl0bGVBdHRyaWJ1dGVdKSB7
Ci0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpIHsKKyAg
ICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKSB7CiAgICAgICAgICAgICBp
ZiAoW1tbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSBj
b250YWluc09iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZUF0dHJpYnV0ZV0pCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVRpdGxlQXR0cmlidXRlXTsKICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICAvLyBNZXRlciBlbGVtZW50cyBzaG91bGQgY29tbXVuaWNhdGUgdGhlaXIg
Y29udGVudCB2aWEgQVhWYWx1ZURlc2NyaXB0aW9uLgotICAgICAgICBpZiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzTWV0ZXIoKSkKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzTWV0ZXIo
KSkKICAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nXTsKLSAgICAgICAgCisKICAg
ICAgICAgLy8gU3VtbWFyeSBlbGVtZW50IHNob3VsZCB1c2UgaXRzIHRleHQgbm9kZSBhcyBBWFRp
dGxlLgotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU3VtbWFyeSgpKQotICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT50ZXh0VW5kZXJFbGVtZW50KCk7
Ci0gICAgICAgIAorICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNTdW1tYXJ5KCkpCisgICAg
ICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpOworCiAgICAg
ICAgIHJldHVybiBbc2VsZiBiYXNlQWNjZXNzaWJpbGl0eVRpdGxlXTsKICAgICB9Ci0gICAgCisK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlE
ZXNjcmlwdGlvbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc0F0dGFjaG1lbnQoKSkgeworICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNBdHRhY2ht
ZW50KCkpIHsKICAgICAgICAgICAgIGlmIChbW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3Np
YmlsaXR5QXR0cmlidXRlTmFtZXNdIGNvbnRhaW5zT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURlc2Ny
aXB0aW9uQXR0cmlidXRlXSkKICAgICAgICAgICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1l
bnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5RGVzY3Jp
cHRpb25BdHRyaWJ1dGVdOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBbc2VsZiBiYXNlQWNj
ZXNzaWJpbGl0eURlc2NyaXB0aW9uXTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV0pIHsK
LSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkgeworICAg
ICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpIHsKICAgICAgICAgICAgIGlm
IChbW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdIGNv
bnRhaW5zT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWU6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNSYW5nZVZhbHVlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzZWxmLmF4QmFja2luZ09iamVj
dC0+dmFsdWVGb3JSYW5nZSgpXTsKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5y
b2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U2xpZGVyVGh1bWIpCi0gICAgICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzZWxmLmF4QmFja2luZ09iamVjdC0+
cGFyZW50T2JqZWN0KCktPnZhbHVlRm9yUmFuZ2UoKV07Ci0gICAgICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNIZWFkaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhJbnQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPmhlYWRpbmdMZXZlbCgpXTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDaGVja2JveE9yUmFkaW8o
KSB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNZW51SXRlbSgpIHx8IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc1N3aXRjaCgpIHx8IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RvZ2dsZUJ1dHRv
bigpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jaGVja2Jv
eE9yUmFkaW9WYWx1ZSgpKSB7CisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5zdXBwb3J0c1Jh
bmdlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0
OmJhY2tpbmdPYmplY3QtPnZhbHVlRm9yUmFuZ2UoKV07CisgICAgICAgIGlmIChiYWNraW5nT2Jq
ZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U2xpZGVyVGh1bWIpCisgICAg
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpiYWNraW5nT2JqZWN0LT5w
YXJlbnRPYmplY3QoKS0+dmFsdWVGb3JSYW5nZSgpXTsKKyAgICAgICAgaWYgKGJhY2tpbmdPYmpl
Y3QtPmlzSGVhZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRo
SW50OmJhY2tpbmdPYmplY3QtPmhlYWRpbmdMZXZlbCgpXTsKKworICAgICAgICBpZiAoYmFja2lu
Z09iamVjdC0+aXNDaGVja2JveE9yUmFkaW8oKSB8fCBiYWNraW5nT2JqZWN0LT5pc01lbnVJdGVt
KCkgfHwgYmFja2luZ09iamVjdC0+aXNTd2l0Y2goKSB8fCBiYWNraW5nT2JqZWN0LT5pc1RvZ2ds
ZUJ1dHRvbigpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJhY2tpbmdPYmplY3QtPmNoZWNrYm94
T3JSYWRpb1ZhbHVlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUJ1dHRvblN0
YXRlOjpPZmY6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50
OjBdOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGU6Ok9uOgpAQCAt
MjU5Myw2NyArMjU4OCw2NyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQK
ICAgICAgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Ml07CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gcmFkaW8gZ3JvdXBz
IHJldHVybiB0aGUgc2VsZWN0ZWQgcmFkaW8gYnV0dG9uIGFzIHRoZSBBWFZhbHVlCi0gICAgICAg
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNSYWRpb0dyb3VwKCkpIHsKLSAgICAgICAgICAg
IEFYQ29yZU9iamVjdCogcmFkaW9CdXR0b24gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+c2VsZWN0
ZWRSYWRpb0J1dHRvbigpOworICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNSYWRpb0dyb3Vw
KCkpIHsKKyAgICAgICAgICAgIEFYQ29yZU9iamVjdCogcmFkaW9CdXR0b24gPSBiYWNraW5nT2Jq
ZWN0LT5zZWxlY3RlZFJhZGlvQnV0dG9uKCk7CiAgICAgICAgICAgICBpZiAoIXJhZGlvQnV0dG9u
KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICByZXR1cm4gcmFkaW9C
dXR0b24tPndyYXBwZXIoKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc1RhYkxpc3QoKSkgewotICAgICAgICAgICAgQVhDb3JlT2JqZWN0
KiB0YWJJdGVtID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNlbGVjdGVkVGFiSXRlbSgpOworCisg
ICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RhYkxpc3QoKSkgeworICAgICAgICAgICAgQVhD
b3JlT2JqZWN0KiB0YWJJdGVtID0gYmFja2luZ09iamVjdC0+c2VsZWN0ZWRUYWJJdGVtKCk7CiAg
ICAgICAgICAgICBpZiAoIXRhYkl0ZW0pCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICAgICAgICAgIHJldHVybiB0YWJJdGVtLT53cmFwcGVyKCk7CiAgICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUYWJJdGVtKCkpCi0gICAgICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzU2VsZWN0ZWQoKV07Ci0gICAgICAgIAotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzQ29sb3JXZWxsKCkpIHsKKworICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNUYWJJ
dGVtKCkpCisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6YmFja2lu
Z09iamVjdC0+aXNTZWxlY3RlZCgpXTsKKworICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXND
b2xvcldlbGwoKSkgewogICAgICAgICAgICAgaW50IHIsIGcsIGI7Ci0gICAgICAgICAgICBzZWxm
LmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1ZShyLCBnLCBiKTsKKyAgICAgICAgICAgIGJhY2tp
bmdPYmplY3QtPmNvbG9yVmFsdWUociwgZywgYik7CiAgICAgICAgICAgICByZXR1cm4gW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIsIHIgLyAyNTUu
LCBnIC8gMjU1LiwgYiAvIDI1NS5dOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnN0cmluZ1ZhbHVlKCk7CisKKyAgICAgICAgcmV0dXJu
IGJhY2tpbmdPYmplY3QtPnN0cmluZ1ZhbHVlKCk7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrQVhNZW51SXRlbU1hcmtDaGFyQXR0
cmlidXRlXSkgewogICAgICAgICBjb25zdCB1bmljaGFyIGNoID0gMHgyNzEzOyAvLyDinJMgdXNl
ZCBvbiBNYWMgZm9yIHNlbGVjdGVkIG1lbnUgaXRlbXMuCi0gICAgICAgIHJldHVybiAoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzQ2hlY2tlZCgpKSA/IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFj
dGVyczomY2ggbGVuZ3RoOjFdIDogbmlsOworICAgICAgICByZXR1cm4gKGJhY2tpbmdPYmplY3Qt
PmlzQ2hlY2tlZCgpKSA/IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczomY2ggbGVuZ3Ro
OjFdIDogbmlsOwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eU1pblZhbHVlQXR0cmlidXRlXSkgewogICAgICAgICAv
LyBJbmRldGVybWluYXRlIHByb2dyZXNzIGluZGljYXRvciBzaG91bGQgcmV0dXJuIDAuCi0gICAg
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBBY2Nl
c3NpYmlsaXR5Um9sZTo6UHJvZ3Jlc3NJbmRpY2F0b3IgJiYgIXNlbGYuYXhCYWNraW5nT2JqZWN0
LT5oYXNBUklBVmFsdWVOb3coKSkKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmFyaWFSb2xl
QXR0cmlidXRlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlByb2dyZXNzSW5kaWNhdG9yICYmICFi
YWNraW5nT2JqZWN0LT5oYXNBUklBVmFsdWVOb3coKSkKICAgICAgICAgICAgIHJldHVybiBAMDsK
LSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2VsZi5heEJhY2tpbmdP
YmplY3QtPm1pblZhbHVlRm9yUmFuZ2UoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVt
YmVyV2l0aEZsb2F0OmJhY2tpbmdPYmplY3QtPm1pblZhbHVlRm9yUmFuZ2UoKV07CiAgICAgfQot
ICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5TWF4VmFsdWVBdHRyaWJ1dGVdKSB7CiAgICAgICAgIC8vIEluZGV0ZXJtaW5hdGUgcHJv
Z3Jlc3MgaW5kaWNhdG9yIHNob3VsZCByZXR1cm4gMC4KLSAgICAgICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9n
cmVzc0luZGljYXRvciAmJiAhc2VsZi5heEJhY2tpbmdPYmplY3QtPmhhc0FSSUFWYWx1ZU5vdygp
KQorICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBBY2Nl
c3NpYmlsaXR5Um9sZTo6UHJvZ3Jlc3NJbmRpY2F0b3IgJiYgIWJhY2tpbmdPYmplY3QtPmhhc0FS
SUFWYWx1ZU5vdygpKQogICAgICAgICAgICAgcmV0dXJuIEAwOwotICAgICAgICByZXR1cm4gW05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDpzZWxmLmF4QmFja2luZ09iamVjdC0+bWF4VmFsdWVGb3JS
YW5nZSgpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6YmFja2lu
Z09iamVjdC0+bWF4VmFsdWVGb3JSYW5nZSgpXTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlIZWxwQXR0cmlidXRl
XSkKICAgICAgICAgcmV0dXJuIFtzZWxmIGJhc2VBY2Nlc3NpYmlsaXR5SGVscFRleHRdOwotICAg
IAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmls
aXR5Rm9jdXNlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0ZvY3VzZWQoKV07Ci0gICAgCisgICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IGJhY2tpbmdPYmplY3QtPmlzRm9jdXNl
ZCgpXTsKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNz
aWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOiBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNFbmFibGVkKCldOwotICAgIAorICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiBiYWNraW5nT2JqZWN0LT5pc0Vu
YWJsZWQoKV07CisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0Fj
Y2Vzc2liaWxpdHlTaXplQXR0cmlidXRlXSkgewotICAgICAgICBJbnRTaXplIHMgPSBzbmFwcGVk
SW50UmVjdChzZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFJlY3QoKSkuc2l6ZSgpOworICAg
ICAgICBJbnRTaXplIHMgPSBzbmFwcGVkSW50UmVjdChiYWNraW5nT2JqZWN0LT5lbGVtZW50UmVj
dCgpKS5zaXplKCk7CiAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhTaXplOiBOU01h
a2VTaXplKHMud2lkdGgoKSwgcy5oZWlnaHQoKSldOwogICAgIH0KLSAgICAKKwogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVByaW1hcnlTY3Jl
ZW5IZWlnaHRBdHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gW3NlbGYgcHJpbWFyeVNjcmVlbkhl
aWdodF07CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdKQpAQCAtMjY2NiwyOSArMjY2MSwyOSBAQCBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgcmV0dXJuIFtzZWxmIHdpbmRv
d0VsZW1lbnQ6YXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFjY2Vzc0tleUF0dHJpYnV0ZV0pIHsKLSAgICAgICAg
QXRvbVN0cmluZyBhY2Nlc3NLZXkgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YWNjZXNzS2V5KCk7
CisgICAgICAgIEF0b21TdHJpbmcgYWNjZXNzS2V5ID0gYmFja2luZ09iamVjdC0+YWNjZXNzS2V5
KCk7CiAgICAgICAgIGlmIChhY2Nlc3NLZXkuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4g
bmlsOwogICAgICAgICByZXR1cm4gYWNjZXNzS2V5OwogICAgIH0KLSAgICAKKwogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TGlua1JlbGF0aW9u
c2hpcFR5cGVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmxpbmtSZWxWYWx1ZSgpOwotICAgIAorICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+bGlu
a1JlbFZhbHVlKCk7CisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eVRhYnNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNUYWJMaXN0KCkpIHsKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVGFi
TGlzdCgpKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3IgdGFic0NoaWxkcmVuOwotICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdP
YmplY3QtPnRhYkNoaWxkcmVuKHRhYnNDaGlsZHJlbik7CisgICAgICAgICAgICBiYWNraW5nT2Jq
ZWN0LT50YWJDaGlsZHJlbih0YWJzQ2hpbGRyZW4pOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb05TQXJyYXkodGFic0NoaWxkcmVuKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29udGVu
dHNBdHRyaWJ1dGVdKSB7CiAgICAgICAgIC8vIFRoZSBjb250ZW50cyBvZiBhIHRhYiBsaXN0IGFy
ZSBhbGwgdGhlIGNoaWxkcmVuIGV4Y2VwdCB0aGUgdGFicy4KLSAgICAgICAgaWYgKHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc1RhYkxpc3QoKSkgeworICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+
aXNUYWJMaXN0KCkpIHsKICAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBzZWxmLmNoaWxkcmVu
VmVjdG9yQXJyYXk7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3IgdGFiczsKLSAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0
LT50YWJDaGlsZHJlbih0YWJzKTsKKyAgICAgICAgICAgIGJhY2tpbmdPYmplY3QtPnRhYkNoaWxk
cmVuKHRhYnMpOwogICAgICAgICAgICAgYXV0byB0YWJzQ2hpbGRyZW4gPSBjb252ZXJ0VG9OU0Fy
cmF5KHRhYnMpOwogCiAgICAgICAgICAgICBOU011dGFibGVBcnJheSAqY29udGVudHMgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXldOwpAQCAtMjY5OSw3ICsyNjk0LDcgQEAgQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1cm4gY29udGVudHM7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU2Nyb2xsVmlldygp
KSB7CisgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkgewogICAgICAg
ICAgICAgLy8gQSBzY3JvbGxWaWV3J3MgY29udGVudHMgYXJlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRo
ZSBzY3JvbGwgYmFycy4KICAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBzZWxmLmNoaWxkcmVu
VmVjdG9yQXJyYXk7CiAgICAgICAgICAgICBOU011dGFibGVBcnJheSAqY29udGVudHMgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXldOwpAQCAtMjcxMyw3OCArMjcwOCw2MiBAQCBBTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIHJldHVybiBjb250ZW50czsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKLSAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2Vs
Zi5heEJhY2tpbmdPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYu
YXhCYWNraW5nT2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpIHsKLSAg
ICAgICAgYXV0byYgdGFibGUgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4
QmFja2luZ09iamVjdCk7CisKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNUYWJsZSgpICYmIGJh
Y2tpbmdPYmplY3QtPmlzRXhwb3NhYmxlKCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXSkKLSAgICAgICAg
ICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHRhYmxlLnJvd3MoKSk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZp
c2libGVSb3dzQXR0cmlidXRlXSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHZpc2libGVSb3dzOwotICAgICAgICAgICAgdGFi
bGUudmlzaWJsZVJvd3ModmlzaWJsZVJvd3MpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRU
b05TQXJyYXkodmlzaWJsZVJvd3MpOwotICAgICAgICB9Ci0gICAgICAgIAorICAgICAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoYmFja2luZ09iamVjdC0+cm93cygpKTsKKworICAgICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZpc2li
bGVSb3dzQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGJh
Y2tpbmdPYmplY3QtPnZpc2libGVSb3dzKCkpOworCiAgICAgICAgIC8vIFRPRE86IGRpc3Rpbmd1
aXNoIGJldHdlZW4gdmlzaWJsZSBhbmQgbm9uLXZpc2libGUgY29sdW1ucwotICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNvbHVtbnNBdHRy
aWJ1dGVdIHx8Ci0gICAgICAgICAgICBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5VmlzaWJsZUNvbHVtbnNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICByZXR1
cm4gY29udmVydFRvTlNBcnJheSh0YWJsZS5jb2x1bW5zKCkpOwotICAgICAgICB9Ci0gICAgICAg
IAorICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eUNvbHVtbnNBdHRyaWJ1dGVdCisgICAgICAgICAgICB8fCBbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNvbHVtbnNBdHRyaWJ1dGVdKQorICAg
ICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoYmFja2luZ09iamVjdC0+Y29sdW1ucygp
KTsKKwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuQ29w
eTsKLSAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZWxlY3RlZENoaWxkcmVuKHNl
bGVjdGVkQ2hpbGRyZW5Db3B5KTsKKyAgICAgICAgICAgIGJhY2tpbmdPYmplY3QtPnNlbGVjdGVk
Q2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb05TQXJyYXkoc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOwogICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICAvLyBIVE1MIHRhYmxlcyBkb24ndCBzdXBwb3J0IHRoZXNlCi0gICAgICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDb2x1
bW5zQXR0cmlidXRlXSB8fAotICAgICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2VsbHNBdHRyaWJ1dGVdKQorCisgICAgICAgIC8v
IEhUTUwgdGFibGVzIGRvbid0IHN1cHBvcnQgdGhlc2UgYXR0cmlidXRlcy4KKyAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENv
bHVtbnNBdHRyaWJ1dGVdCisgICAgICAgICAgICB8fCBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDZWxsc0F0dHJpYnV0ZV0pCiAgICAgICAgICAg
ICByZXR1cm4gbmlsOwotICAgICAgICAKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5IZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRl
XSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIGNvbHVtbkhlYWRlcnM7Ci0gICAgICAgICAgICB0YWJsZS5jb2x1bW5IZWFkZXJz
KGNvbHVtbkhlYWRlcnMpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29s
dW1uSGVhZGVycyk7Ci0gICAgICAgIH0KLSAgICAgICAgCisKKyAgICAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5IZWFkZXJVSUVsZW1l
bnRzQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGJhY2tp
bmdPYmplY3QtPmNvbHVtbkhlYWRlcnMoKSk7CisKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlIZWFkZXJBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJDb250YWluZXIgPSB0YWJsZS5oZWFk
ZXJDb250YWluZXIoKTsKLSAgICAgICAgICAgIGlmIChoZWFkZXJDb250YWluZXIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGhlYWRlckNvbnRhaW5lci0+d3JhcHBlcigpOwotICAgICAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dIZWFkZXJVSUVsZW1lbnRzQXR0
cmlidXRlXSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIHJvd0hlYWRlcnM7Ci0gICAgICAgICAgICB0YWJsZS5yb3dIZWFkZXJz
KHJvd0hlYWRlcnMpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocm93SGVh
ZGVycyk7CisgICAgICAgICAgICBhdXRvKiBoZWFkZXJDb250YWluZXIgPSBiYWNraW5nT2JqZWN0
LT5oZWFkZXJDb250YWluZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBoZWFkZXJDb250YWluZXIg
PyBoZWFkZXJDb250YWluZXItPndyYXBwZXIoKSA6IG5pbDsKICAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlWaXNpYmxlQ2VsbHNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHM7Ci0gICAgICAgICAgICB0YWJs
ZS5jZWxscyhjZWxscyk7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShjZWxs
cyk7Ci0gICAgICAgIH0KLSAgICAgICAgCisKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dIZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRl
XSkKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGJhY2tpbmdPYmplY3QtPnJv
d0hlYWRlcnMoKSk7CisKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2VsbHNBdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb05TQXJyYXkoYmFja2luZ09iamVjdC0+Y2VsbHMoKSk7CisKICAgICAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5D
b3VudEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gQCh0YWJsZS5jb2x1bW5Db3VudCgp
KTsKLSAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gQChiYWNraW5nT2JqZWN0LT5jb2x1bW5D
b3VudCgpKTsKKwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eVJvd0NvdW50QXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBAKHRh
YmxlLnJvd0NvdW50KCkpOwotICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBAKGJhY2tpbmdP
YmplY3QtPnJvd0NvdW50KCkpOworCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQUNvbHVtbkNvdW50QXR0cmlidXRlXSkKLSAgICAg
ICAgICAgIHJldHVybiBAKHRhYmxlLmF4Q29sdW1uQ291bnQoKSk7Ci0gICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIEAoYmFja2luZ09iamVjdC0+YXhDb2x1bW5Db3VudCgpKTsKKwogICAgICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFS
b3dDb3VudEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gQCh0YWJsZS5heFJvd0NvdW50
KCkpOworICAgICAgICAgICAgcmV0dXJuIEAoYmFja2luZ09iamVjdC0+YXhSb3dDb3VudCgpKTsK
ICAgICB9Ci0gICAgCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbj4oKnNlbGYu
YXhCYWNraW5nT2JqZWN0KSkgewotICAgICAgICBhdXRvJiBjb2x1bW4gPSBkb3duY2FzdDxBY2Nl
c3NpYmlsaXR5VGFibGVDb2x1bW4+KCpzZWxmLmF4QmFja2luZ09iamVjdCk7CisKKyAgICBpZiAo
aXM8QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uPigqYmFja2luZ09iamVjdCkpIHsKKyAgICAgICAg
YXV0byYgY29sdW1uID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uPigqYmFja2lu
Z09iamVjdCk7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKQogICAgICAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoSW50OmNvbHVtbi5jb2x1bW5JbmRleCgpXTsKLSAgICAgICAgCisKICAgICAg
ICAgLy8gcm93cyBhdHRyaWJ1dGUgZm9yIGEgY29sdW1uIGlzIHRoZSBsaXN0IG9mIGFsbCB0aGUg
ZWxlbWVudHMgaW4gdGhhdCBjb2x1bW4gYXQgZWFjaCByb3cKICAgICAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXSB8fAog
ICAgICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eVZpc2libGVSb3dzQXR0cmlidXRlXSkgewpAQCAtMjc5Nyw5ICsyNzc2LDkgQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1cm4gaGVhZGVyLT53
cmFwcGVyKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGw+KCpzZWxmLmF4QmFja2luZ09iamVjdCkpIHsKLSAgICAgICAgYXV0byYgY2Vs
bCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpzZWxmLmF4QmFja2luZ09iamVj
dCk7CisKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmJhY2tpbmdPYmplY3Qp
KSB7CisgICAgICAgIGF1dG8mIGNlbGwgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxs
PigqYmFja2luZ09iamVjdCk7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93SW5kZXhSYW5nZUF0dHJpYnV0ZV0pIHsKICAgICAgICAg
ICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IHJvd1JhbmdlOwogICAgICAgICAgICAg
Y2VsbC5yb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsKQEAgLTI4MTAsNDkgKzI3ODksNDUgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBjZWxsLmNvbHVt
bkluZGV4UmFuZ2UoY29sdW1uUmFuZ2UpOwogICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZh
bHVlV2l0aFJhbmdlOk5TTWFrZVJhbmdlKGNvbHVtblJhbmdlLmZpcnN0LCBjb2x1bW5SYW5nZS5z
ZWNvbmQpXTsKICAgICAgICAgfQotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNvbHVtbkhlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7
Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3IgY29sdW1uSGVhZGVyczsKLSAgICAgICAgICAgIGNlbGwuY29sdW1uSGVhZGVycyhjb2x1
bW5IZWFkZXJzKTsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNvbHVtbkhl
YWRlcnMpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93SGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0pIHsKLSAg
ICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciByb3dIZWFkZXJzOwotICAgICAgICAgICAgY2VsbC5yb3dIZWFkZXJzKHJvd0hlYWRlcnMpOwot
ICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocm93SGVhZGVycyk7Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlDb2x1bW5IZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVy
biBjb252ZXJ0VG9OU0FycmF5KGNlbGwuY29sdW1uSGVhZGVycygpKTsKKworICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvd0hlYWRlclVJ
RWxlbWVudHNBdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXko
Y2VsbC5yb3dIZWFkZXJzKCkpOworCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQUNvbHVtbkluZGV4QXR0cmlidXRlXSkKICAgICAg
ICAgICAgIHJldHVybiBAKGNlbGwuYXhDb2x1bW5JbmRleCgpKTsKLSAgICAgICAgCisKICAgICAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklB
Um93SW5kZXhBdHRyaWJ1dGVdKQogICAgICAgICAgICAgcmV0dXJuIEAoY2VsbC5heFJvd0luZGV4
KCkpOwogICAgIH0KLSAgICAKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZSgp
KSB7CisKKyAgICBpZiAoYmFja2luZ09iamVjdC0+aXNUcmVlKCkpIHsKICAgICAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NB
dHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbkNvcHk7Ci0gICAgICAgICAgICBzZWxm
LmF4QmFja2luZ09iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuQ29weSk7
CisgICAgICAgICAgICBiYWNraW5nT2JqZWN0LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hp
bGRyZW5Db3B5KTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHNlbGVjdGVk
Q2hpbGRyZW5Db3B5KTsKICAgICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93c0Nv
cHk7Ci0gICAgICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+YXJpYVRyZWVSb3dzKHJvd3ND
b3B5KTsKKyAgICAgICAgICAgIGJhY2tpbmdPYmplY3QtPmFyaWFUcmVlUm93cyhyb3dzQ29weSk7
CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShyb3dzQ29weSk7CiAgICAgICAg
IH0KLSAgICAgICAgCisKICAgICAgICAgLy8gVHJlZVJvbGVzIGRvIG5vdCBzdXBwb3J0IGNvbHVt
bnMsIGJ1dCBNYWMgQVggZXhwZWN0cyB0byBiZSBhYmxlIHRvIGFzayBhYm91dCBjb2x1bW5zIGF0
IHRoZSBsZWFzdC4KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlDb2x1bW5zQXR0cmlidXRlXSkKICAgICAgICAgICAgIHJldHVybiBbTlNB
cnJheSBhcnJheV07CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRleEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKLSAgICAgICAgICAgIEFYQ29y
ZU9iamVjdCogcGFyZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdCgpOwor
ICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKSB7CisgICAgICAgICAgICBB
WENvcmVPYmplY3QqIHBhcmVudCA9IGJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdCgpOwogICAg
ICAgICAgICAgZm9yICg7IHBhcmVudCAmJiAhcGFyZW50LT5pc1RyZWUoKTsgcGFyZW50ID0gcGFy
ZW50LT5wYXJlbnRPYmplY3QoKSkKICAgICAgICAgICAgIHsgfQotICAgICAgICAgICAgCisKICAg
ICAgICAgICAgIGlmICghcGFyZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
ICAgICAgICAKKwogICAgICAgICAgICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhpcyBpdGVtIGJ5
IGl0ZXJhdGluZyB0aGUgcGFyZW50cy4KICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKICAgICAgICAgICAgIHBhcmVu
dC0+YXJpYVRyZWVSb3dzKHJvd3NDb3B5KTsKQEAgLTI4NjAsMzQgKzI4MzUsMzQgQEAgQUxMT1df
REVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBmb3IgKHNpemVfdCBr
ID0gMDsgayA8IGNvdW50OyArK2spCiAgICAgICAgICAgICAgICAgaWYgKHJvd3NDb3B5W2tdLT53
cmFwcGVyKCkgPT0gc2VsZikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoVW5zaWduZWRJbnQ6a107Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICAgICAgfQotICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlUm93
Pigqc2VsZi5heEJhY2tpbmdPYmplY3QpKSB7CisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5
VGFibGVSb3c+KCpiYWNraW5nT2JqZWN0KSkgewogICAgICAgICAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRleEF0dHJpYnV0ZV0pCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OmRvd25jYXN0PEFjY2Vz
c2liaWxpdHlUYWJsZVJvdz4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5yb3dJbmRleCgpXTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6ZG93bmNhc3Q8QWNj
ZXNzaWJpbGl0eVRhYmxlUm93PigqYmFja2luZ09iamVjdCkucm93SW5kZXgoKV07CiAgICAgICAg
IH0KICAgICB9Ci0gICAgCisKICAgICAvLyBUaGUgcm93cyB0aGF0IGFyZSBjb25zaWRlcmVkIGlu
c2lkZSB0aGlzIHJvdy4KICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eURpc2Nsb3NlZFJvd3NBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKSB7CisgICAgICAgIGlmIChiYWNraW5nT2Jq
ZWN0LT5pc1RyZWVJdGVtKCkpIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKLSAgICAgICAgICAgIHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5hcmlhVHJlZUl0ZW1EaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKKyAgICAg
ICAgICAgIGJhY2tpbmdPYmplY3QtPmFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3Mocm93c0NvcHkp
OwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocm93c0NvcHkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdz4oKnNlbGYuYXhC
YWNraW5nT2JqZWN0KSkgeworICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93
PigqYmFja2luZ09iamVjdCkpIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKLSAgICAgICAgICAgIGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdz4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5kaXNjbG9z
ZWRSb3dzKHJvd3NDb3B5KTsKKyAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlBUklB
R3JpZFJvdz4oKmJhY2tpbmdPYmplY3QpLmRpc2Nsb3NlZFJvd3Mocm93c0NvcHkpOwogICAgICAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocm93c0NvcHkpOwogICAgICAgICB9CiAgICAg
fQotICAgIAorCiAgICAgLy8gVGhlIHJvdyB0aGF0IGNvbnRhaW5zIHRoaXMgcm93LiBJdCBzaG91
bGQgYmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IHBhcmVudCB0aGF0IGlzIGEgdHJlZWl0ZW0uCiAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNj
bG9zZWRCeVJvd0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc1RyZWVJdGVtKCkpIHsKLSAgICAgICAgICAgIEFYQ29yZU9iamVjdCogcGFyZW50ID0gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdCgpOworICAgICAgICBpZiAoYmFja2luZ09i
amVjdC0+aXNUcmVlSXRlbSgpKSB7CisgICAgICAgICAgICBBWENvcmVPYmplY3QqIHBhcmVudCA9
IGJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdCgpOwogICAgICAgICAgICAgd2hpbGUgKHBhcmVu
dCkgewogICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzVHJlZUl0ZW0oKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwpAQCAtMjg5OSw3NiArMjg3NCw3
NiBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIHJl
dHVybiBuaWw7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eUFSSUFH
cmlkUm93Pigqc2VsZi5heEJhY2tpbmdPYmplY3QpKSB7Ci0gICAgICAgICAgICBBWENvcmVPYmpl
Y3QqIHJvdyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdz4oKnNlbGYuYXhCYWNr
aW5nT2JqZWN0KS5kaXNjbG9zZWRCeVJvdygpOworICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0
eUFSSUFHcmlkUm93PigqYmFja2luZ09iamVjdCkpIHsKKyAgICAgICAgICAgIEFYQ29yZU9iamVj
dCogcm93ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93PigqYmFja2luZ09iamVj
dCkuZGlzY2xvc2VkQnlSb3coKTsKICAgICAgICAgICAgIGlmICghcm93KQogICAgICAgICAgICAg
ICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICByZXR1cm4gcm93LT53cmFwcGVyKCk7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3N1cmVMZXZlbEF0dHJpYnV0ZV0pIHsKICAgICAgICAg
Ly8gQ29udmVydCBmcm9tIDEtYmFzZWQgbGV2ZWwgKGZyb20gYXJpYS1sZXZlbCBzcGVjKSB0byAw
LWJhc2VkIGxldmVsIChNYWMpCi0gICAgICAgIGludCBsZXZlbCA9IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5oaWVyYXJjaGljYWxMZXZlbCgpOworICAgICAgICBpbnQgbGV2ZWwgPSBiYWNraW5nT2Jq
ZWN0LT5oaWVyYXJjaGljYWxMZXZlbCgpOwogICAgICAgICBpZiAobGV2ZWwgPiAwKQogICAgICAg
ICAgICAgbGV2ZWwgLT0gMTsKICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50
OmxldmVsXTsKICAgICB9CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlEaXNjbG9zaW5nQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+aXNFeHBhbmRlZCgpXTsK
LSAgICAKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTGlzdCgpICYmIFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0
ZV0pCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6YmFja2luZ09iamVj
dC0+aXNFeHBhbmRlZCgpXTsKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc0xpc3QoKSAmJiBb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25B
dHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VmVydGljYWxPcmllbnRh
dGlvblZhbHVlOwotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzogQCJBWFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlIl0pCiAgICAgICAgIHJldHVybiBbc2VsZiB0
ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dOwotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzogQCJBWFN0YXJ0VGV4dE1hcmtlciJdKQotICAgICAgICByZXR1
cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpzdGFydE9mRG9jdW1lbnQoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCkpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRl
eHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246c3RhcnRPZkRvY3VtZW50KGJhY2tpbmdPYmplY3Qt
PmRvY3VtZW50KCkpXTsKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBA
IkFYRW5kVGV4dE1hcmtlciJdKQotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZp
c2libGVQb3NpdGlvbjplbmRPZkRvY3VtZW50KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVu
dCgpKV07Ci0gICAgCisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBv
c2l0aW9uOmVuZE9mRG9jdW1lbnQoYmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSldOworCiAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlCbG9ja1F1
b3RlTGV2ZWxBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhV
bnNpZ25lZEludDpzZWxmLmF4QmFja2luZ09iamVjdC0+YmxvY2txdW90ZUxldmVsKCldOworICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDpiYWNraW5nT2JqZWN0
LT5ibG9ja3F1b3RlTGV2ZWwoKV07CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpAIkFYVGFibGVMZXZlbCJdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPnRhYmxlTGV2ZWwoKV07Ci0gICAgCisgICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpiYWNraW5nT2JqZWN0LT50YWJsZUxldmVs
KCldOworCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5TGlua2VkVUlFbGVtZW50c0F0dHJpYnV0ZV0pIHsKICAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGxpbmtlZFVJRWxlbWVudHM7Ci0g
ICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5saW5rZWRVSUVsZW1lbnRzKGxpbmtlZFVJRWxl
bWVudHMpOworICAgICAgICBiYWNraW5nT2JqZWN0LT5saW5rZWRVSUVsZW1lbnRzKGxpbmtlZFVJ
RWxlbWVudHMpOwogICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShsaW5rZWRVSUVsZW1l
bnRzKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU2VsZWN0ZWQo
KV07Ci0gICAgCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6YmFja2lu
Z09iamVjdC0+aXNTZWxlY3RlZCgpXTsKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUFSSUFDdXJyZW50QXR0cmlidXRlXSkKLSAgICAgICAg
cmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jdXJyZW50VmFsdWUoKTsKLSAgICAKLSAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZXJ2ZXNB
c1RpdGxlRm9yVUlFbGVtZW50c0F0dHJpYnV0ZV0gJiYgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
TWVudUJ1dHRvbigpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHVpRWxlbWVudCA9
IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09iamVj
dCkubWVudUZvck1lbnVCdXR0b24oKTsKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPmN1
cnJlbnRWYWx1ZSgpOworCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzog
TlNBY2Nlc3NpYmlsaXR5U2VydmVzQXNUaXRsZUZvclVJRWxlbWVudHNBdHRyaWJ1dGVdICYmIGJh
Y2tpbmdPYmplY3QtPmlzTWVudUJ1dHRvbigpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHVpRWxlbWVudCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KCpiYWNr
aW5nT2JqZWN0KS5tZW51Rm9yTWVudUJ1dHRvbigpOwogICAgICAgICBpZiAodWlFbGVtZW50KQog
ICAgICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDp1aUVsZW1lbnQtPndy
YXBwZXIoKV07CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV0pIHsKLSAgICAg
ICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdC0+ZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkpCisg
ICAgICAgIGlmICghYmFja2luZ09iamVjdC0+ZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkpCiAgICAg
ICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgIEFYQ29yZU9iamVjdCogb2JqID0gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPnRpdGxlVUlFbGVtZW50KCk7CisgICAgICAgIEFYQ29yZU9iamVjdCog
b2JqID0gYmFja2luZ09iamVjdC0+dGl0bGVVSUVsZW1lbnQoKTsKICAgICAgICAgaWYgKG9iaikK
ICAgICAgICAgICAgIHJldHVybiBvYmotPndyYXBwZXIoKTsKICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eVZhbHVlRGVzY3JpcHRpb25BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNNZXRlcigpKQorICAgICAgICBpZiAoYmFja2luZ09iamVj
dC0+aXNNZXRlcigpKQogICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHZhbHVlRGVzY3JpcHRpb25G
b3JNZXRlcl07Ci0gICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+dmFsdWVEZXNj
cmlwdGlvbigpOworICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+dmFsdWVEZXNjcmlwdGlv
bigpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFjY2Vz
c2liaWxpdHlPcmllbnRhdGlvbiBlbGVtZW50T3JpZW50YXRpb24gPSBzZWxmLmF4QmFja2luZ09i
amVjdC0+b3JpZW50YXRpb24oKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uIGVs
ZW1lbnRPcmllbnRhdGlvbiA9IGJhY2tpbmdPYmplY3QtPm9yaWVudGF0aW9uKCk7CiAgICAgICAg
IGlmIChlbGVtZW50T3JpZW50YXRpb24gPT0gQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpWZXJ0
aWNhbCkKICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbE9yaWVudGF0
aW9uVmFsdWU7CiAgICAgICAgIGlmIChlbGVtZW50T3JpZW50YXRpb24gPT0gQWNjZXNzaWJpbGl0
eU9yaWVudGF0aW9uOjpIb3Jpem9udGFsKQpAQCAtMjk3NywyMiArMjk1MiwyMiBAQCBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vz
c2liaWxpdHlVbmtub3duT3JpZW50YXRpb25WYWx1ZTsKICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eUhvcml6b250YWxTY3JvbGxCYXJBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFYQ29y
ZU9iamVjdCogc2Nyb2xsQmFyID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNjcm9sbEJhcihBY2Nl
c3NpYmlsaXR5T3JpZW50YXRpb246Okhvcml6b250YWwpOworICAgICAgICBBWENvcmVPYmplY3Qq
IHNjcm9sbEJhciA9IGJhY2tpbmdPYmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50
YXRpb246Okhvcml6b250YWwpOwogICAgICAgICBpZiAoc2Nyb2xsQmFyKQogICAgICAgICAgICAg
cmV0dXJuIHNjcm9sbEJhci0+d3JhcHBlcigpOwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0K
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZl
cnRpY2FsU2Nyb2xsQmFyQXR0cmlidXRlXSkgewotICAgICAgICBBWENvcmVPYmplY3QqIHNjcm9s
bEJhciA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVu
dGF0aW9uOjpWZXJ0aWNhbCk7CisgICAgICAgIEFYQ29yZU9iamVjdCogc2Nyb2xsQmFyID0gYmFj
a2luZ09iamVjdC0+c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6VmVydGljYWwp
OwogICAgICAgICBpZiAoc2Nyb2xsQmFyKQogICAgICAgICAgICAgcmV0dXJuIHNjcm9sbEJhci0+
d3JhcHBlcigpOwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KLSAgICAKKwogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlv
bkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgc3dpdGNoIChzZWxmLmF4QmFja2luZ09iamVjdC0+c29y
dERpcmVjdGlvbigpKSB7CisgICAgICAgIHN3aXRjaCAoYmFja2luZ09iamVjdC0+c29ydERpcmVj
dGlvbigpKSB7CiAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb246OkFzY2Vu
ZGluZzoKICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlBc2NlbmRpbmdTb3J0RGly
ZWN0aW9uVmFsdWU7CiAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb246OkRl
c2NlbmRpbmc6CkBAIC0zMDAxLDQ2ICsyOTc2LDQ2IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVN
RU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVua25vd25T
b3J0RGlyZWN0aW9uVmFsdWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUxhbmd1YWdlQXR0cmli
dXRlXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5sYW5ndWFnZSgpOwot
ICAgIAorICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+bGFuZ3VhZ2UoKTsKKwogICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RXhwYW5kZWRB
dHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0V4cGFuZGVkKCldOwotICAgIAorICAgICAgICByZXR1cm4gW05T
TnVtYmVyIG51bWJlcldpdGhCb29sOmJhY2tpbmdPYmplY3QtPmlzRXhwYW5kZWQoKV07CisKICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJlcXVp
cmVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNSZXF1aXJlZCgpXTsKLSAgICAKKyAgICAgICAgcmV0dXJu
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpiYWNraW5nT2JqZWN0LT5pc1JlcXVpcmVkKCldOwor
CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJ
bnZhbGlkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
bnZhbGlkU3RhdHVzKCk7Ci0gICAgCisgICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5pbnZh
bGlkU3RhdHVzKCk7CisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eU93bnNBdHRyaWJ1dGVdKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhcmlhT3duczsKLSAgICAgICAgc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmFyaWFPd25zRWxlbWVudHMoYXJpYU93bnMpOworICAgICAgICBiYWNr
aW5nT2JqZWN0LT5hcmlhT3duc0VsZW1lbnRzKGFyaWFPd25zKTsKICAgICAgICAgcmV0dXJuIGNv
bnZlcnRUb05TQXJyYXkoYXJpYU93bnMpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVBvc0luU2V0QXR0cmli
dXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OnNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5wb3NJblNldCgpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJX
aXRoSW50OmJhY2tpbmdPYmplY3QtPnBvc0luU2V0KCldOwogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVNldFNpemVBdHRyaWJ1dGVdKQot
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c2VsZi5heEJhY2tpbmdPYmpl
Y3QtPnNldFNpemUoKV07Ci0gICAgCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0
aEludDpiYWNraW5nT2JqZWN0LT5zZXRTaXplKCldOworCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlHcmFiYmVkQXR0cmlidXRlXSkKLSAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNBUklBR3JhYmJlZCgpXTsKLSAgICAKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDpiYWNraW5nT2JqZWN0LT5pc0FSSUFHcmFiYmVkKCldOworCiAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEcm9wRWZmZWN0c0F0dHJp
YnV0ZV0pIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gZHJvcEVmZmVjdHMgPSBzZWxmLmF4QmFj
a2luZ09iamVjdC0+ZGV0ZXJtaW5lQVJJQURyb3BFZmZlY3RzKCk7CisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IGRyb3BFZmZlY3RzID0gYmFja2luZ09iamVjdC0+ZGV0ZXJtaW5lQVJJQURyb3BFZmZl
Y3RzKCk7CiAgICAgICAgIHJldHVybiBjb252ZXJ0U3RyaW5nc1RvTlNBcnJheShkcm9wRWZmZWN0
cyk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlQbGFjZWhvbGRlclZhbHVlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0
dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wbGFjZWhvbGRlclZhbHVlKCk7CisgICAgICAgIHJl
dHVybiBiYWNraW5nT2JqZWN0LT5wbGFjZWhvbGRlclZhbHVlKCk7CiAKICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZhbHVlQXV0b2ZpbGxBdmFp
bGFibGVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gQChzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNWYWx1ZUF1dG9maWxsQXZhaWxhYmxlKCkpOwotICAgIAorICAgICAgICByZXR1cm4gQChiYWNr
aW5nT2JqZWN0LT5pc1ZhbHVlQXV0b2ZpbGxBdmFpbGFibGUoKSk7CisKICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZhbHVlQXV0b2ZpbGxUeXBl
QXR0cmlidXRlXSkgewotICAgICAgICBzd2l0Y2ggKHNlbGYuYXhCYWNraW5nT2JqZWN0LT52YWx1
ZUF1dG9maWxsQnV0dG9uVHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAoYmFja2luZ09iamVjdC0+
dmFsdWVBdXRvZmlsbEJ1dHRvblR5cGUoKSkgewogICAgICAgICBjYXNlIEF1dG9GaWxsQnV0dG9u
VHlwZTo6Tm9uZToKICAgICAgICAgICAgIHJldHVybiBAIm5vbmUiOwogICAgICAgICBjYXNlIEF1
dG9GaWxsQnV0dG9uVHlwZTo6Q3JlZGVudGlhbHM6CkBAIC0zMDUzLDE1NCArMzAyOCwxNTQgQEAg
QUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1cm4g
QCJjcmVkaXQgY2FyZCI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZhbHVlQXV0b2ZpbGxlZEF0
dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBAKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1ZhbHVl
QXV0b2ZpbGxlZCgpKTsKKyAgICAgICAgcmV0dXJuIEAoYmFja2luZ09iamVjdC0+aXNWYWx1ZUF1
dG9maWxsZWQoKSk7CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUhhc1BvcHVwQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+aGFzUG9wdXAoKV07CisgICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6YmFja2luZ09iamVjdC0+aGFzUG9w
dXAoKV07CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eURhdGV0aW1lVmFsdWVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmRhdGV0aW1lQXR0cmlidXRlVmFsdWUoKTsKLSAgICAKKyAgICAgICAgcmV0
dXJuIGJhY2tpbmdPYmplY3QtPmRhdGV0aW1lQXR0cmlidXRlVmFsdWUoKTsKKwogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5saW5lVGV4dEF0
dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBAKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0lubGlu
ZVRleHQoKSk7Ci0gICAgCisgICAgICAgIHJldHVybiBAKGJhY2tpbmdPYmplY3QtPmlzSW5saW5l
VGV4dCgpKTsKKwogICAgIC8vIEFSSUEgTGl2ZSByZWdpb24gYXR0cmlidXRlcy4KICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFMaXZlQXR0
cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5saXZlUmVnaW9u
U3RhdHVzKCk7CisgICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5saXZlUmVnaW9uU3RhdHVz
KCk7CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlBUklBUmVsZXZhbnRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmxpdmVSZWdpb25SZWxldmFudCgpOworICAgICAgICByZXR1cm4gYmFja2luZ09iamVj
dC0+bGl2ZVJlZ2lvblJlbGV2YW50KCk7CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBQXRvbWljQXR0cmlidXRlXSkKLSAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+bGl2ZVJl
Z2lvbkF0b21pYygpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpi
YWNraW5nT2JqZWN0LT5saXZlUmVnaW9uQXRvbWljKCldOwogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RWxlbWVudEJ1c3lBdHRyaWJ1dGVdKQot
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc0J1c3koKV07Ci0gICAgCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6YmFja2luZ09iamVjdC0+aXNCdXN5KCldOworCiAgICAgLy8gTWF0aE1MIEF0dHJpYnV0
ZXMuCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhFbGVtZW50KCkpIHsKKyAg
ICBpZiAoYmFja2luZ09iamVjdC0+aXNNYXRoRWxlbWVudCgpKSB7CiAgICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RJbmRleEF0
dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRo
Um9vdEluZGV4T2JqZWN0KCkpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhSb290SW5kZXhP
YmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAgICAgIHJldHVybiAoYmFja2luZ09iamVj
dC0+bWF0aFJvb3RJbmRleE9iamVjdCgpKSA/IGJhY2tpbmdPYmplY3QtPm1hdGhSb290SW5kZXhP
YmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdFJhZGljYW5kQXR0cmlidXRlXSkKLSAg
ICAgICAgICAgIHJldHVybiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhSYWRpY2FuZE9iamVj
dCgpKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoUmFkaWNhbmRPYmplY3QoKS0+d3JhcHBl
cigpIDogMDsKKyAgICAgICAgICAgIHJldHVybiAoYmFja2luZ09iamVjdC0+bWF0aFJhZGljYW5k
T2JqZWN0KCkpID8gYmFja2luZ09iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCktPndyYXBwZXIo
KSA6IDA7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5TWF0aEZyYWN0aW9uTnVtZXJhdG9yQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJl
dHVybiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhOdW1lcmF0b3JPYmplY3QoKSkgPyBzZWxm
LmF4QmFja2luZ09iamVjdC0+bWF0aE51bWVyYXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwor
ICAgICAgICAgICAgcmV0dXJuIChiYWNraW5nT2JqZWN0LT5tYXRoTnVtZXJhdG9yT2JqZWN0KCkp
ID8gYmFja2luZ09iamVjdC0+bWF0aE51bWVyYXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwog
ICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eU1hdGhGcmFjdGlvbkRlbm9taW5hdG9yQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhEZW5vbWluYXRvck9iamVjdCgpKSA/IHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAg
ICAgICAgICAgIHJldHVybiAoYmFja2luZ09iamVjdC0+bWF0aERlbm9taW5hdG9yT2JqZWN0KCkp
ID8gYmFja2luZ09iamVjdC0+bWF0aERlbm9taW5hdG9yT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7
CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5TWF0aEJhc2VBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+bWF0aEJhc2VPYmplY3QoKSkgPyBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aEJh
c2VPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAgICAgIHJldHVybiAoYmFja2luZ09i
amVjdC0+bWF0aEJhc2VPYmplY3QoKSkgPyBiYWNraW5nT2JqZWN0LT5tYXRoQmFzZU9iamVjdCgp
LT53cmFwcGVyKCkgOiAwOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhTdWJzY3JpcHRBdHRyaWJ1dGVdKQotICAgICAgICAgICAg
cmV0dXJuIChzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFN1YnNjcmlwdE9iamVjdCgpKSA/IHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7
CisgICAgICAgICAgICByZXR1cm4gKGJhY2tpbmdPYmplY3QtPm1hdGhTdWJzY3JpcHRPYmplY3Qo
KSkgPyBiYWNraW5nT2JqZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7
CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5TWF0aFN1cGVyc2NyaXB0QXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpKSA/IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5tYXRoU3VwZXJzY3JpcHRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAg
ICAgIHJldHVybiAoYmFja2luZ09iamVjdC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCkpID8gYmFj
a2luZ09iamVjdC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiAgICAg
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0
aFVuZGVyQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPm1hdGhVbmRlck9iamVjdCgpKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoVW5kZXJP
YmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAgICAgIHJldHVybiAoYmFja2luZ09iamVj
dC0+bWF0aFVuZGVyT2JqZWN0KCkpID8gYmFja2luZ09iamVjdC0+bWF0aFVuZGVyT2JqZWN0KCkt
PndyYXBwZXIoKSA6IDA7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5TWF0aE92ZXJBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJu
IChzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aE92ZXJPYmplY3QoKSkgPyBzZWxmLmF4QmFja2lu
Z09iamVjdC0+bWF0aE92ZXJPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAgICAgIHJl
dHVybiAoYmFja2luZ09iamVjdC0+bWF0aE92ZXJPYmplY3QoKSkgPyBiYWNraW5nT2JqZWN0LT5t
YXRoT3Zlck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRPcGVuQXR0cmlidXRl
XSkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aEZlbmNlZE9w
ZW5TdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5tYXRoRmVuY2Vk
T3BlblN0cmluZygpOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRDbG9zZUF0dHJpYnV0ZV0pCi0gICAgICAgICAgICBy
ZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhGZW5jZWRDbG9zZVN0cmluZygpOworICAg
ICAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPm1hdGhGZW5jZWRDbG9zZVN0cmluZygpOwog
ICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eU1hdGhMaW5lVGhpY2tuZXNzQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEludGVnZXI6c2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhMaW5lVGhpY2tu
ZXNzKCldOworICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpi
YWNraW5nT2JqZWN0LT5tYXRoTGluZVRoaWNrbmVzcygpXTsKICAgICAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoUG9zdHNjcmlwdHNBdHRy
aWJ1dGVdKQogICAgICAgICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlNYXRoUG9zdHNj
cmlwdFBhaXJzXTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlNYXRoUHJlc2NyaXB0c0F0dHJpYnV0ZV0pCiAgICAgICAgICAgICByZXR1
cm4gW3NlbGYgYWNjZXNzaWJpbGl0eU1hdGhQcmVzY3JpcHRQYWlyc107CiAgICAgfQotICAgIAor
CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlF
eHBhbmRlZFRleHRWYWx1ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBzZWxmLmF4QmFja2lu
Z09iamVjdC0+ZXhwYW5kZWRUZXh0VmFsdWUoKTsKLSAgICAKKyAgICAgICAgcmV0dXJuIGJhY2tp
bmdPYmplY3QtPmV4cGFuZGVkVGV4dFZhbHVlKCk7CisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURPTUlkZW50aWZpZXJBdHRyaWJ1dGVdKQot
ICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmlkZW50aWZpZXJBdHRyaWJ1dGUo
KTsKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPmlkZW50aWZpZXJBdHRyaWJ1dGUoKTsK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURP
TUNsYXNzTGlzdEF0dHJpYnV0ZV0pIHsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gY2xhc3NMaXN0
OwotICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+Y2xhc3NMaXN0KGNsYXNzTGlzdCk7Cisg
ICAgICAgIGJhY2tpbmdPYmplY3QtPmNsYXNzTGlzdChjbGFzc0xpc3QpOwogICAgICAgICByZXR1
cm4gY29udmVydFN0cmluZ3NUb05TQXJyYXkoY2xhc3NMaXN0KTsKICAgICB9Ci0gICAgCisKICAg
ICAvLyBUaGlzIGFsbG93cyB1cyB0byBjb25uZWN0IHRvIGEgcGx1Z2luIHRoYXQgY3JlYXRlcyBh
IHNoYWRvdyBub2RlIGZvciBlZGl0aW5nIChsaWtlIFBERnMpLgogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJfQVhBc3NvY2lhdGVkUGx1Z2luUGFyZW50Il0pCiAgICAg
ICAgIHJldHVybiBbc2VsZiBhc3NvY2lhdGVkUGx1Z2luUGFyZW50XTsKLSAgICAKKwogICAgIC8v
IHRoaXMgaXMgdXNlZCBvbmx5IGJ5IER1bXBSZW5kZXJUcmVlIGZvciB0ZXN0aW5nCiAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYQ2xpY2tQb2ludCJdKQotICAgICAg
ICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPmNs
aWNrUG9pbnQoKV07Ci0gICAgCisgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhQb2lu
dDpiYWNraW5nT2JqZWN0LT5jbGlja1BvaW50KCldOworCiAgICAgLy8gVGhpcyBpcyB1c2VkIGJ5
IERSVCB0byB2ZXJpZnkgQ1NTMyBzcGVlY2ggd29ya3MuCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpAIkFYRFJUU3BlZWNoQXR0cmlidXRlIl0pCiAgICAgICAgIHJldHVy
biBbc2VsZiBiYXNlQWNjZXNzaWJpbGl0eVNwZWVjaEhpbnRdOwotICAgIAorCiAgICAgLy8gVXNl
ZCBieSBEUlQgdG8gZmluZCBhbiBhY2Nlc3NpYmxlIG5vZGUgYnkgaXRzIGVsZW1lbnQgaWQuCiAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYRFJURWxlbWVudElkQXR0
cmlidXRlIl0pCi0gICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+aWRlbnRpZmll
ckF0dHJpYnV0ZSgpOwotICAgIAorICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+aWRlbnRp
ZmllckF0dHJpYnV0ZSgpOworCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYQXV0b2NvbXBsZXRlVmFsdWUiXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5hdXRvQ29tcGxldGVWYWx1ZSgpOworICAgICAgICByZXR1cm4gYmFja2luZ09iamVj
dC0+YXV0b0NvbXBsZXRlVmFsdWUoKTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UG9wdXBWYWx1ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJl
dHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+cG9wdXBWYWx1ZSgpOworICAgICAgICByZXR1cm4g
YmFja2luZ09iamVjdC0+cG9wdXBWYWx1ZSgpOwogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpAIkFYS2V5U2hvcnRjdXRzVmFsdWUiXSkKLSAgICAgICAgcmV0dXJuIHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5rZXlTaG9ydGN1dHNWYWx1ZSgpOwotICAgIAorICAgICAgICBy
ZXR1cm4gYmFja2luZ09iamVjdC0+a2V5U2hvcnRjdXRzVmFsdWUoKTsKKwogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEFSSUFQcmVzc2VkSXNQcmVzZW50Il0pCi0g
ICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmpl
Y3QtPnByZXNzZWRJc1ByZXNlbnQoKV07Ci0gICAgCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6YmFja2luZ09iamVjdC0+cHJlc3NlZElzUHJlc2VudCgpXTsKKwogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWElzTXVsdGlsaW5lIl0pCi0g
ICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmFyaWFJc011bHRpbGluZSgpXTsKLSAgICAKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDpiYWNraW5nT2JqZWN0LT5hcmlhSXNNdWx0aWxpbmUoKV07CisKICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhSZWFkT25seVZhbHVlIl0pCi0g
ICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+cmVhZE9ubHlWYWx1ZSgpOworICAg
ICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+cmVhZE9ubHlWYWx1ZSgpOwogCiAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYSXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1
c2VkQ29udGFpbmVyIl0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQWN0aXZlRGVzY2VuZGFudE9mRm9jdXNlZENvbnRhaW5l
cigpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpiYWNraW5nT2Jq
ZWN0LT5pc0FjdGl2ZURlc2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIoKV07CiAKICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhEZXRhaWxzRWxlbWVudHMiXSkgewog
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
ZGV0YWlsczsKLSAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFEZXRhaWxzRWxlbWVu
dHMoZGV0YWlscyk7CisgICAgICAgIGJhY2tpbmdPYmplY3QtPmFyaWFEZXRhaWxzRWxlbWVudHMo
ZGV0YWlscyk7CiAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGRldGFpbHMpOwogICAg
IH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5UmVsYXRpdmVGcmFtZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1
ZVdpdGhSZWN0Ok5TUmVjdEZyb21DR1JlY3Qoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJlbGF0aXZl
RnJhbWUoKSldOworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpOU1JlY3RG
cm9tQ0dSZWN0KGJhY2tpbmdPYmplY3QtPnJlbGF0aXZlRnJhbWUoKSldOwogCiAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYRXJyb3JNZXNzYWdlRWxlbWVudHMiXSkg
ewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgZXJyb3JNZXNzYWdlczsKLSAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFFcnJv
ck1lc3NhZ2VFbGVtZW50cyhlcnJvck1lc3NhZ2VzKTsKKyAgICAgICAgYmFja2luZ09iamVjdC0+
YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzKGVycm9yTWVzc2FnZXMpOwogICAgICAgICByZXR1cm4g
Y29udmVydFRvTlNBcnJheShlcnJvck1lc3NhZ2VzKTsKICAgICB9CiAKICAgICAvLyBNdWx0aS1z
ZWxlY3RhYmxlCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlJc011bHRpU2VsZWN0YWJsZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTXVsdGlTZWxlY3Rh
YmxlKCldOwotICAgIAorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmJh
Y2tpbmdPYmplY3QtPmlzTXVsdGlTZWxlY3RhYmxlKCldOworCiAgICAgLy8gRG9jdW1lbnQgYXR0
cmlidXRlcwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5RG9jdW1lbnRVUklBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tp
bmdPYmplY3QtPmRvY3VtZW50VVJJKCk7Ci0gICAgCisgICAgICAgIHJldHVybiBiYWNraW5nT2Jq
ZWN0LT5kb2N1bWVudFVSSSgpOworCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlEb2N1bWVudEVuY29kaW5nQXR0cmlidXRlXSkKLSAgICAgICAg
cmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudEVuY29kaW5nKCk7Ci0gICAgCisg
ICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5kb2N1bWVudEVuY29kaW5nKCk7CisKICAgICAv
LyBBcmlhIGNvbnRyb2xzIGVsZW1lbnQKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFyaWFDb250cm9sc0F0dHJpYnV0ZV0pIHsKICAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFDb250
cm9sczsKLSAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFDb250cm9sc0VsZW1lbnRz
KGFyaWFDb250cm9scyk7CisgICAgICAgIGJhY2tpbmdPYmplY3QtPmFyaWFDb250cm9sc0VsZW1l
bnRzKGFyaWFDb250cm9scyk7CiAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGFyaWFD
b250cm9scyk7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlGb2N1c2FibGVBbmNlc3RvckF0dHJpYnV0ZV0pIHsKLSAgICAgICAg
QVhDb3JlT2JqZWN0KiBvYmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+Zm9jdXNhYmxlQW5j
ZXN0b3IoKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmplY3QgPSBiYWNraW5nT2JqZWN0LT5m
b2N1c2FibGVBbmNlc3RvcigpOwogICAgICAgICByZXR1cm4gb2JqZWN0ID8gb2JqZWN0LT53cmFw
cGVyKCkgOiBuaWw7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlFZGl0YWJsZUFuY2VzdG9yQXR0cmlidXRlXSkgewotICAgICAg
ICBBWENvcmVPYmplY3QqIG9iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5lZGl0YWJsZUFu
Y2VzdG9yKCk7CisgICAgICAgIEFYQ29yZU9iamVjdCogb2JqZWN0ID0gYmFja2luZ09iamVjdC0+
ZWRpdGFibGVBbmNlc3RvcigpOwogICAgICAgICByZXR1cm4gb2JqZWN0ID8gb2JqZWN0LT53cmFw
cGVyKCkgOiBuaWw7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlIaWdoZXN0RWRpdGFibGVBbmNlc3RvckF0dHJpYnV0ZV0pIHsK
LSAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+aGln
aGVzdEVkaXRhYmxlQW5jZXN0b3IoKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmplY3QgPSBi
YWNraW5nT2JqZWN0LT5oaWdoZXN0RWRpdGFibGVBbmNlc3RvcigpOwogICAgICAgICByZXR1cm4g
b2JqZWN0ID8gb2JqZWN0LT53cmFwcGVyKCkgOiBuaWw7CiAgICAgfQogCkBAIC0zMzE3LDEwICsz
MjkyLDEyIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogewogICAgIGlm
ICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKICAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKQorICAg
IC8vIEZJWE1FOiBtYWtlIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZSBhYm92ZSByZXR1cm4gdGhl
IGJhY2tpbmcgb2JqZWN0LgorICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBzZWxmLmF4QmFja2lu
Z09iamVjdDsKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICAKKwogICAgIHN0YXRpYyBOU0FycmF5KiBwYXJhbUF0dHJzID0g
bmlsOwogICAgIHN0YXRpYyBOU0FycmF5KiB0ZXh0UGFyYW1BdHRycyA9IG5pbDsKICAgICBzdGF0
aWMgTlNBcnJheSogdGFibGVQYXJhbUF0dHJzID0gbmlsOwpAQCAtMzM2Nyw3ICszMzQ0LDcgQEAg
QUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBOU0FjY2Vz
c2liaWxpdHlUZXh0T3BlcmF0aW9uUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSwKICAgICAgICAgICAg
IG5pbF07CiAgICAgfQotICAgIAorCiAgICAgaWYgKHRleHRQYXJhbUF0dHJzID09IG5pbCkgewog
ICAgICAgICBOU011dGFibGVBcnJheSogdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdFdpdGhBcnJheTpwYXJhbUF0dHJzXTsKICAgICAgICAgW3RlbXBBcnJheSBhZGRPYmpl
Y3Q6KE5TU3RyaW5nKilrQVhMaW5lRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKQEAg
LTMzOTYsMjIgKzMzNzMsMjIgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5E
CiAgICAgICAgIHdlYkFyZWFQYXJhbUF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFy
cmF5OnRlbXBBcnJheV07CiAgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CiAgICAgfQotICAg
IAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCisKKyAg
ICBpZiAoYmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBA
WyBOU0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRzRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZSBdOwotICAgIAotICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0
Q29udHJvbCgpKQorCisgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKICAg
ICAgICAgcmV0dXJuIHRleHRQYXJhbUF0dHJzOwotICAgIAotICAgIGlmIChpczxBY2Nlc3NpYmls
aXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2li
aWxpdHkoKSkKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RhYmxlKCkgJiYgYmFja2luZ09i
amVjdC0+aXNFeHBvc2FibGUoKSkKICAgICAgICAgcmV0dXJuIHRhYmxlUGFyYW1BdHRyczsKLSAg
ICAKLSAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWVudVJlbGF0ZWQoKSkKKworICAg
IGlmIChiYWNraW5nT2JqZWN0LT5pc01lbnVSZWxhdGVkKCkpCiAgICAgICAgIHJldHVybiBuaWw7
Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSkKKworICAg
IGlmIChiYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSkKICAgICAgICAgcmV0dXJuIHdlYkFyZWFQ
YXJhbUF0dHJzOwotICAgIAorCiAgICAgcmV0dXJuIHBhcmFtQXR0cnM7CiB9CiAKQEAgLTM2MTEs
NzMgKzM1ODgsNzEgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiB7CiAg
ICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQogICAgICAgICByZXR1cm47
Ci0gICAgCisgICAgLy8gRklYTUU6IG1ha2UgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlIGFib3Zl
IHJldHVybiB0aGUgYmFja2luZyBvYmplY3QuCisgICAgYXV0byogYmFja2luZ09iamVjdCA9IHNl
bGYuYXhCYWNraW5nT2JqZWN0OworCiAgICAgaWQgdGV4dE1hcmtlclJhbmdlID0gbmlsOwogICAg
IE5TTnVtYmVyKiAgICAgICAgICAgICAgIG51bWJlciA9IG5pbDsKICAgICBOU1N0cmluZyogICAg
ICAgICAgICAgICBzdHJpbmcgPSBuaWw7CiAgICAgTlNSYW5nZSAgICAgICAgICAgICAgICAgcmFu
Z2UgPSB7MCwgMH07CiAgICAgTlNBcnJheSogICAgICAgICAgICAgICAgYXJyYXkgPSBuaWw7Ci0g
ICAgCisKICAgICAvLyBkZWNvZGUgdGhlIHBhcmFtZXRlcgogICAgIGlmIChBWE9iamVjdElzVGV4
dE1hcmtlclJhbmdlKHZhbHVlKSkKICAgICAgICAgdGV4dE1hcmtlclJhbmdlID0gdmFsdWU7Ci0g
ICAgCiAgICAgZWxzZSBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIHNlbGZdXSkK
ICAgICAgICAgbnVtYmVyID0gdmFsdWU7Ci0gICAgCiAgICAgZWxzZSBpZiAoW3ZhbHVlIGlzS2lu
ZE9mQ2xhc3M6W05TU3RyaW5nIHNlbGZdXSkKICAgICAgICAgc3RyaW5nID0gdmFsdWU7Ci0gICAg
CiAgICAgZWxzZSBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgc2VsZl1dKQogICAg
ICAgICByYW5nZSA9IFt2YWx1ZSByYW5nZVZhbHVlXTsKLSAgICAKICAgICBlbHNlIGlmIChbdmFs
dWUgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBzZWxmXV0pCiAgICAgICAgIGFycmF5ID0gdmFsdWU7
Ci0gICAgCisKICAgICAvLyBoYW5kbGUgdGhlIGNvbW1hbmQKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYU2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UiXSkgewogICAg
ICAgICBBU1NFUlQodGV4dE1hcmtlclJhbmdlKTsKLSAgICAgICAgc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoW3NlbGYgdmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7CisgICAgICAgIGJhY2tp
bmdPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoW3NlbGYgdmlzaWJsZVBv
c2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7CiAgICAgfSBl
bHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUZv
Y3VzZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIFtzZWxmIGJhc2VBY2Nlc3NpYmlsaXR5U2V0Rm9j
dXM6W251bWJlciBib29sVmFsdWVdXTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdKSB7Ci0gICAgICAg
IGlmIChudW1iZXIgJiYgc2VsZi5heEJhY2tpbmdPYmplY3QtPmNhblNldE51bWVyaWNWYWx1ZSgp
KQotICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNldFZhbHVlKFtudW1iZXIgZmxv
YXRWYWx1ZV0pOworICAgICAgICBpZiAobnVtYmVyICYmIGJhY2tpbmdPYmplY3QtPmNhblNldE51
bWVyaWNWYWx1ZSgpKQorICAgICAgICAgICAgYmFja2luZ09iamVjdC0+c2V0VmFsdWUoW251bWJl
ciBmbG9hdFZhbHVlXSk7CiAgICAgICAgIGVsc2UgaWYgKHN0cmluZykKLSAgICAgICAgICAgIHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5zZXRWYWx1ZShzdHJpbmcpOworICAgICAgICAgICAgYmFja2lu
Z09iamVjdC0+c2V0VmFsdWUoc3RyaW5nKTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRBdHRyaWJ1dGVdKSB7CiAg
ICAgICAgIGlmICghbnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzZWxmLmF4
QmFja2luZ09iamVjdC0+c2V0U2VsZWN0ZWQoW251bWJlciBib29sVmFsdWVdKTsKKyAgICAgICAg
YmFja2luZ09iamVjdC0+c2V0U2VsZWN0ZWQoW251bWJlciBib29sVmFsdWVdKTsKICAgICB9IGVs
c2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2Vs
ZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKICAgICAgICAgaWYgKCFhcnJheSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFsdWUo
KSAhPSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdEJveCkKKyAgICAgICAgaWYgKGJhY2tpbmdPYmpl
Y3QtPnJvbGVWYWx1ZSgpICE9IEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0Qm94KQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbjsKICAgICAgICAgY29udmVydFRvVmVjdG9yKGFy
cmF5LCBzZWxlY3RlZENoaWxkcmVuKTsKLSAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUxp
c3RCb3g+KCpzZWxmLmF4QmFja2luZ09iamVjdCkuc2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3Rl
ZENoaWxkcmVuKTsKLSAgICB9IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RleHRD
b250cm9sKCkpIHsKKyAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUxpc3RCb3g+KCpiYWNr
aW5nT2JqZWN0KS5zZXRTZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW4pOworICAgIH0g
ZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7CiAgICAgICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4
dEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRTZWxl
Y3RlZFRleHQoc3RyaW5nKTsKKyAgICAgICAgICAgIGJhY2tpbmdPYmplY3QtPnNldFNlbGVjdGVk
VGV4dChzdHJpbmcpOwogICAgICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGVdKSB7Ci0g
ICAgICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxh
aW5UZXh0UmFuZ2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkpOworICAgICAgICAgICAg
YmFja2luZ09iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxhaW5UZXh0UmFuZ2UocmFuZ2Uu
bG9jYXRpb24sIHJhbmdlLmxlbmd0aCkpOwogICAgICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdl
QXR0cmlidXRlXSkgewotICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPm1ha2VSYW5n
ZVZpc2libGUoUGxhaW5UZXh0UmFuZ2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkpOwor
ICAgICAgICAgICAgYmFja2luZ09iamVjdC0+bWFrZVJhbmdlVmlzaWJsZShQbGFpblRleHRSYW5n
ZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9z
aW5nQXR0cmlidXRlXSB8fCBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5RXhwYW5kZWRBdHRyaWJ1dGVdKQotICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+
c2V0SXNFeHBhbmRlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOworICAgICAgICBiYWNraW5nT2JqZWN0
LT5zZXRJc0V4cGFuZGVkKFtudW1iZXIgYm9vbFZhbHVlXSk7CiAgICAgZWxzZSBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJp
YnV0ZV0pIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIHNlbGVjdGVkUm93czsKICAgICAgICAgY29udmVydFRvVmVjdG9yKGFycmF5LCBz
ZWxlY3RlZFJvd3MpOwotICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZSgp
IHx8IChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkgJiYgZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpLmlzRXhwb3Nh
YmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkpCi0gICAgICAgICAgICBzZWxmLmF4QmFja2luZ09i
amVjdC0+c2V0U2VsZWN0ZWRSb3dzKHNlbGVjdGVkUm93cyk7CisgICAgICAgIGlmIChiYWNraW5n
T2JqZWN0LT5pc1RyZWUoKSB8fCAoYmFja2luZ09iamVjdC0+aXNUYWJsZSgpICYmIGJhY2tpbmdP
YmplY3QtPmlzRXhwb3NhYmxlKCkpKQorICAgICAgICAgICAgYmFja2luZ09iamVjdC0+c2V0U2Vs
ZWN0ZWRSb3dzKHNlbGVjdGVkUm93cyk7CiAgICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0ZV0pCi0gICAgICAg
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRBUklBR3JhYmJlZChbbnVtYmVyIGJvb2xWYWx1ZV0p
OwotICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSAmJiBbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UHJldmVudEtleWJvYXJk
RE9NRXZlbnREaXNwYXRjaEF0dHJpYnV0ZV0pCi0gICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5zZXRQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoKFtudW1iZXIgYm9vbFZhbHVlXSk7
Ci0gICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpICYmIFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDYXJldEJyb3dzaW5nRW5h
YmxlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRDYXJldEJy
b3dzaW5nRW5hYmxlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOworICAgICAgICBiYWNraW5nT2JqZWN0
LT5zZXRBUklBR3JhYmJlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOworICAgIGVsc2UgaWYgKGJhY2tp
bmdPYmplY3QtPmlzV2ViQXJlYSgpICYmIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoQXR0cmlidXRlXSkK
KyAgICAgICAgYmFja2luZ09iamVjdC0+c2V0UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRj
aChbbnVtYmVyIGJvb2xWYWx1ZV0pOworICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzV2Vi
QXJlYSgpICYmIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlD
YXJldEJyb3dzaW5nRW5hYmxlZEF0dHJpYnV0ZV0pCisgICAgICAgIGJhY2tpbmdPYmplY3QtPnNl
dENhcmV0QnJvd3NpbmdFbmFibGVkKFtudW1iZXIgYm9vbFZhbHVlXSk7CiB9CiAKIC8vIFVzZWQg
dG8gc2V0IGF0dHJpYnV0ZXMgc3luY2hyb25vdXNseSBvbiBhY2Nlc3NpYmlsaXR5IGVsZW1lbnRz
IHdpdGhpbiB0ZXN0cy4KQEAgLTM4NTUsNiArMzgzMCwxNSBAQCBBTExPV19ERVBSRUNBVEVEX0lN
UExFTUVOVEFUSU9OU19CRUdJTgogLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihO
U1N0cmluZyopYXR0cmlidXRlIGZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyCiBBTExPV19ERVBS
RUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIHsKKyAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVj
dEJhY2tpbmdTdG9yZV0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgLy8gRklYTUU6IG1ha2Ug
dXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlIGFib3ZlIHJldHVybiB0aGUgYmFja2luZyBvYmplY3Qu
CisgICAgYXV0byogYmFja2luZ09iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0OworCisgICAg
Ly8gQmFzaWMgcGFyYW1ldGVyIHZhbGlkYXRpb24uCisgICAgaWYgKCFhdHRyaWJ1dGUgfHwgIXBh
cmFtZXRlcikKKyAgICAgICAgcmV0dXJuIG5pbDsKKwogICAgIGlkIHRleHRNYXJrZXIgPSBuaWw7
CiAgICAgaWQgdGV4dE1hcmtlclJhbmdlID0gbmlsOwogICAgIE5TTnVtYmVyKiBudW1iZXIgPSBu
aWw7CkBAIC0zODY2LDM5ICszODUwLDI1IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogICAgIE5TUmFuZ2UgcmFuZ2UgPSB7MCwgMH07CiAgICAgYm9vbCByYW5nZVNldCA9
IGZhbHNlOwogICAgIE5TUmVjdCByZWN0ID0gTlNaZXJvUmVjdDsKLSAgICAKLSAgICAvLyBiYXNp
YyBwYXJhbWV0ZXIgdmFsaWRhdGlvbgotICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QgfHwg
IWF0dHJpYnV0ZSB8fCAhcGFyYW1ldGVyKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAg
IGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICAKKwogICAgIC8vIGNvbW1vbiBwYXJhbWV0ZXIgdHlwZSBjaGVjay9jYXN0aW5nLiAg
TmlsIGNoZWNrcyBpbiBoYW5kbGVycyBjYXRjaCB3cm9uZyB0eXBlIGNhc2UuCiAgICAgLy8gTk9U
RTogVGhpcyBhc3N1bWVzIG5pbCBpcyBub3QgYSB2YWxpZCBwYXJhbWV0ZXIsIGJlY2F1c2UgaXQg
aXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbQogICAgIC8vIGEgcGFyYW1ldGVyIG9mIHRoZSB3cm9u
ZyB0eXBlLgogICAgIGlmIChBWE9iamVjdElzVGV4dE1hcmtlcihwYXJhbWV0ZXIpKQogICAgICAg
ICB0ZXh0TWFya2VyID0gcGFyYW1ldGVyOwotICAgIAogICAgIGVsc2UgaWYgKEFYT2JqZWN0SXNU
ZXh0TWFya2VyUmFuZ2UocGFyYW1ldGVyKSkKICAgICAgICAgdGV4dE1hcmtlclJhbmdlID0gcGFy
YW1ldGVyOwotICAgIAogICAgIGVsc2UgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc2VsZl1dKQogICAgICAgICB1aUVsZW1lbnQgPSBb
KFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilwYXJhbWV0ZXIgYXhCYWNraW5nT2JqZWN0
XTsKLQogICAgIGVsc2UgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgc2Vs
Zl1dKQogICAgICAgICBudW1iZXIgPSBwYXJhbWV0ZXI7Ci0gICAgCiAgICAgZWxzZSBpZiAoW3Bh
cmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU0FycmF5IHNlbGZdXSkKICAgICAgICAgYXJyYXkgPSBw
YXJhbWV0ZXI7Ci0gICAgCiAgICAgZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltO
U0RpY3Rpb25hcnkgc2VsZl1dKQogICAgICAgICBkaWN0aW9uYXJ5ID0gcGFyYW1ldGVyOwotICAg
IAogICAgIGVsc2UgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbTlNWYWx1ZSBzZWxmXV0g
JiYgIXN0cmNtcChbKE5TVmFsdWUqKXBhcmFtZXRlciBvYmpDVHlwZV0sIEBlbmNvZGUoTlNQb2lu
dCkpKSB7CiAgICAgICAgIHBvaW50U2V0ID0gdHJ1ZTsKICAgICAgICAgcG9pbnQgPSBbKE5TVmFs
dWUqKXBhcmFtZXRlciBwb2ludFZhbHVlXTsKLSAgICAgICAgCiAgICAgfSBlbHNlIGlmIChbcGFy
YW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgc2VsZl1dICYmICFzdHJjbXAoWyhOU1ZhbHVl
KilwYXJhbWV0ZXIgb2JqQ1R5cGVdLCBAZW5jb2RlKE5TUmFuZ2UpKSkgewogICAgICAgICByYW5n
ZVNldCA9IHRydWU7CiAgICAgICAgIHJhbmdlID0gWyhOU1ZhbHVlKilwYXJhbWV0ZXIgcmFuZ2VW
YWx1ZV07CkBAIC0zOTA4LDE1ICszODc4LDE5IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5U
QVRJT05TX0VORAogICAgICAgICAvLyBBdHRyaWJ1dGUgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLiBB
bGxvdyBzdXBlciB0byBoYW5kbGUuCiAgICAgICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZSBmb3JQYXJhbWV0ZXI6cGFyYW1ldGVyXTsKICAgICB9
Ci0gICAgCisKICAgICAvLyBkaXNwYXRjaAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RUZXh0V2l0aENyaXRlcmlhUGFyYW1ldGVyaXplZEF0
dHJpYnV0ZV0pIHsKICAgICAgICAgLy8gVG8gYmUgZGVwcmVjYXRlZC4KLSAgICAgICAgYXV0byBy
ZXN1bHQgPSBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8VmVjdG9y
PFN0cmluZz4+KFtkaWN0aW9uYXJ5LCBzZWxmXSAoKSAtPiBWZWN0b3I8U3RyaW5nPiB7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhy
ZWFkPFZlY3RvcjxTdHJpbmc+PihbZGljdGlvbmFyeSwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0
cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IFZlY3RvcjxTdHJp
bmc+IHsKKyAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdl
dCgpLmF4QmFja2luZ09iamVjdDsKKyAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKwogICAgICAgICAgICAgYXV0
byBjcml0ZXJpYSA9IGFjY2Vzc2liaWxpdHlUZXh0Q3JpdGVyaWFGb3JQYXJhbWV0ZXJpemVkQXR0
cmlidXRlKGRpY3Rpb25hcnkpOwotICAgICAgICAgICAgY3JpdGVyaWEuc2Vjb25kLnRleHRSYW5n
ZXMgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZmluZFRleHRSYW5nZXMoY3JpdGVyaWEuZmlyc3Qp
OworICAgICAgICAgICAgY3JpdGVyaWEuc2Vjb25kLnRleHRSYW5nZXMgPSBiYWNraW5nT2JqZWN0
LT5maW5kVGV4dFJhbmdlcyhjcml0ZXJpYS5maXJzdCk7CiAgICAgICAgICAgICBBU1NFUlQoY3Jp
dGVyaWEuc2Vjb25kLnRleHRSYW5nZXMuc2l6ZSgpIDw9IDEpOwotICAgICAgICAgICAgcmV0dXJu
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wZXJmb3JtVGV4dE9wZXJhdGlvbihjcml0ZXJpYS5zZWNv
bmQpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPnBlcmZvcm1UZXh0T3BlcmF0
aW9uKGNyaXRlcmlhLnNlY29uZCk7CiAgICAgICAgIH0pOwogICAgICAgICBBU1NFUlQocmVzdWx0
LnNpemUoKSA8PSAxKTsKICAgICAgICAgaWYgKHJlc3VsdC5zaXplKCkgPiAwKQpAQCAtMzkyNiwx
MyArMzkwMCwxNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWFyY2hUZXh0
V2l0aENyaXRlcmlhUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgYXV0byBjcml0
ZXJpYSA9IGFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWFGb3JQYXJhbWV0ZXJpemVkQXR0
cmlidXRlKGRpY3Rpb25hcnkpOwotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmll
dmVWYWx1ZUZyb21NYWluVGhyZWFkPE5TQXJyYXkgKj4oWyZjcml0ZXJpYSwgc2VsZl0gKCkgLT4g
TlNBcnJheSAqIHsKLSAgICAgICAgICAgIGF1dG8gcmFuZ2VzID0gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmZpbmRUZXh0UmFuZ2VzKGNyaXRlcmlhKTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxOU0FycmF5ICo+KFsmY3JpdGVyaWEsIHBy
b3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNl
bGYpXSAoKSAtPiBOU0FycmF5ICogeworICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9
IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OworICAgICAgICAgICAgaWYgKCFi
YWNraW5nT2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgICAg
IGF1dG8gcmFuZ2VzID0gYmFja2luZ09iamVjdC0+ZmluZFRleHRSYW5nZXMoY3JpdGVyaWEpOwog
ICAgICAgICAgICAgaWYgKHJhbmdlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICAgICAgICAgIE5TTXV0YWJsZUFycmF5ICptYXJrZXJzID0gW05TTXV0YWJsZUFy
cmF5IGFycmF5V2l0aENhcGFjaXR5OnJhbmdlcy5zaXplKCldOwogICAgICAgICAgICAgZm9yIChh
dXRvIHJhbmdlIDogcmFuZ2VzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlkIG1hcmtlciA9IFtz
ZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTpyYW5nZV0pCisgICAgICAgICAgICAgICAgaWYg
KGlkIG1hcmtlciA9IFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTpyYW5n
ZV0pCiAgICAgICAgICAgICAgICAgICAgIFttYXJrZXJzIGFkZE9iamVjdDptYXJrZXJdOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG1hcmtlcnM7CkBAIC0zOTQwLDkgKzM5MTgs
MTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgfQogCiAgICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRp
b25QYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICBhdXRvIG9wZXJhdGlvblJlc3Vs
dCA9IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxWZWN0b3I8U3Ry
aW5nPj4oW2RpY3Rpb25hcnksIHNlbGZdICgpIC0+IFZlY3RvcjxTdHJpbmc+IHsKLSAgICAgICAg
ICAgIGF1dG8gdGV4dE9wZXJhdGlvbiA9IGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uRm9yUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZShzZWxmLCBkaWN0aW9uYXJ5KTsKLSAgICAgICAgICAgIHJldHVy
biBzZWxmLmF4QmFja2luZ09iamVjdC0+cGVyZm9ybVRleHRPcGVyYXRpb24odGV4dE9wZXJhdGlv
bik7CisgICAgICAgIGF1dG8gb3BlcmF0aW9uUmVzdWx0ID0gQWNjZXNzaWJpbGl0eTo6cmV0cmll
dmVWYWx1ZUZyb21NYWluVGhyZWFkPFZlY3RvcjxTdHJpbmc+PihbZGljdGlvbmFyeSwgcHJvdGVj
dGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZild
ICgpIC0+IFZlY3RvcjxTdHJpbmc+IHsKKyAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3Qg
PSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKKyAgICAgICAgICAgIGlmICgh
YmFja2luZ09iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsK
KworICAgICAgICAgICAgYXV0byB0ZXh0T3BlcmF0aW9uID0gYWNjZXNzaWJpbGl0eVRleHRPcGVy
YXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKHByb3RlY3RlZFNlbGYuZ2V0KCksIGRpY3Rp
b25hcnkpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPnBlcmZvcm1UZXh0T3Bl
cmF0aW9uKHRleHRPcGVyYXRpb24pOwogICAgICAgICB9KTsKICAgICAgICAgaWYgKG9wZXJhdGlv
blJlc3VsdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwpAQCAtMzk1NSwxNCAr
MzkzNywxNCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q291bnRG
b3JTZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICBBY2Nl
c3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEgY3JpdGVyaWEgPSBhY2Nlc3NpYmlsaXR5U2VhcmNoQ3Jp
dGVyaWFGb3JTZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlKGRpY3Rpb25hcnkp
OwogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgcmVzdWx0czsKLSAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmZpbmRNYXRjaGluZ09i
amVjdHMoJmNyaXRlcmlhLCByZXN1bHRzKTsKKyAgICAgICAgYmFja2luZ09iamVjdC0+ZmluZE1h
dGNoaW5nT2JqZWN0cygmY3JpdGVyaWEsIHJlc3VsdHMpOwogICAgICAgICByZXR1cm4gQChyZXN1
bHRzLnNpemUoKSk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eVVJRWxlbWVudHNGb3JTZWFyY2hQcmVkaWNhdGVQYXJhbWV0
ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEg
Y3JpdGVyaWEgPSBhY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWFGb3JTZWFyY2hQcmVkaWNhdGVQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlKGRpY3Rpb25hcnkpOwogICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgcmVzdWx0czsKLSAgICAgICAgc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmZpbmRNYXRjaGluZ09iamVjdHMoJmNyaXRlcmlhLCByZXN1bHRz
KTsKKyAgICAgICAgYmFja2luZ09iamVjdC0+ZmluZE1hdGNoaW5nT2JqZWN0cygmY3JpdGVyaWEs
IHJlc3VsdHMpOwogICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShyZXN1bHRzKTsKICAg
ICB9CiAKQEAgLTM5OTIsMTMgKzM5NzQsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5TGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXJQYXJhbWV0ZXJpemVkQXR0cmli
dXRlXSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uID0gW3NlbGYg
dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKLSAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVj
dC0+bGluZVJhbmdlRm9yUG9zaXRpb24odmlzaWJsZVBvc2l0aW9uKTsKKyAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5saW5l
UmFuZ2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gW3NlbGYg
dGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dmlzaWJsZVBvc2l0aW9uUmFuZ2Uu
c3RhcnQgZW5kUG9zaXRpb246dmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kXTsKICAgICB9CiAKICAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWlzc3BlbGxp
bmdUZXh0TWFya2VyUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICBhdXRv
IGNyaXRlcmlhID0gYWNjZXNzaWJpbGl0eU1pc3NwZWxsaW5nU2VhcmNoQ3JpdGVyaWFGb3JQYXJh
bWV0ZXJpemVkQXR0cmlidXRlKHNlbGYsIGRpY3Rpb25hcnkpOwotICAgICAgICBpZiAoYXV0byBt
aXNzcGVsbGluZ1JhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmdldE1pc3NwZWxsaW5nUmFu
Z2UoY3JpdGVyaWEuZmlyc3QsIGNyaXRlcmlhLnNlY29uZCkpCisgICAgICAgIGlmIChhdXRvIG1p
c3NwZWxsaW5nUmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5nZXRNaXNzcGVsbGluZ1JhbmdlKGNyaXRl
cmlhLmZpcnN0LCBjcml0ZXJpYS5zZWNvbmQpKQogICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHRl
eHRNYXJrZXJSYW5nZUZyb21SYW5nZTptaXNzcGVsbGluZ1JhbmdlXTsKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICB9CkBAIC00MDEzLDcgKzM5OTUsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkQKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlckZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAg
ICAgICAgcmV0dXJuIFtzZWxmIF90ZXh0TWFya2VyRm9ySW5kZXg6W251bWJlciBpbnRlZ2VyVmFs
dWVdXTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWFVJRWxlbWVudEZvclRleHRNYXJrZXIiXSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBheE9iamVjdCA9IFtzZWxmIGFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0TWFya2VyOnRl
eHRNYXJrZXJdOwogICAgICAgICBpZiAoIWF4T2JqZWN0KQpAQCAtNDAzMiwxOSArNDAxNCwxOSBA
QCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTGluZUZvclRleHRNYXJrZXIiXSkgewogICAgICAgICBW
aXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRo
VW5zaWduZWRJbnQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPmxpbmVGb3JQb3NpdGlvbih2aXNpYmxl
UG9zKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50OmJh
Y2tpbmdPYmplY3QtPmxpbmVGb3JQb3NpdGlvbih2aXNpYmxlUG9zKV07CiAgICAgfQotICAgIAor
CiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhUZXh0TWFya2VyUmFuZ2VG
b3JMaW5lIl0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZTsKICAgICAg
ICAgaWYgKFtudW1iZXIgdW5zaWduZWRJbnRlZ2VyVmFsdWVdICE9IE5TTm90Rm91bmQpCi0gICAg
ICAgICAgICB2cFJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnZpc2libGVQb3NpdGlvblJh
bmdlRm9yTGluZShbbnVtYmVyIHVuc2lnbmVkSW50VmFsdWVdKTsKKyAgICAgICAgICAgIHZwUmFu
Z2UgPSBiYWNraW5nT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUoW251bWJlciB1
bnNpZ25lZEludFZhbHVlXSk7CiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VG
cm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5k
XTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJB
WFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSJdKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwotICAg
ICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnN0cmluZ0ZvclJhbmdlKHJhbmdlKTsK
KyAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPnN0cmluZ0ZvclJhbmdlKHJhbmdlKTsKICAg
ICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJG
b3JQb3NpdGlvbiJdKSB7CkBAIC00MDY0LDcgKzQwNDYsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lN
UExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpA
IkFYQm91bmRzRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0g
ICAgICAgIGF1dG8gYm91bmRzID0gRmxvYXRSZWN0KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5ib3Vu
ZHNGb3JSYW5nZShyYW5nZSkpOworICAgICAgICBhdXRvIGJvdW5kcyA9IEZsb2F0UmVjdChiYWNr
aW5nT2JqZWN0LT5ib3VuZHNGb3JSYW5nZShyYW5nZSkpOwogICAgICAgICBOU1JlY3QgcmVjdCA9
IFtzZWxmIGNvbnZlcnRSZWN0VG9TcGFjZTpib3VuZHMgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZl
cnNpb25TcGFjZTo6U2NyZWVuXTsKICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJl
Y3Q6cmVjdF07CiAgICAgfQpAQCAtNDA5Miw5ICs0MDc0LDkgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eVN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0
ZV0pIHsKLSAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RleHRDb250cm9sKCkp
IHsKKyAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgewogICAgICAg
ICAgICAgUGxhaW5UZXh0UmFuZ2UgcGxhaW5UZXh0UmFuZ2UgPSBQbGFpblRleHRSYW5nZShyYW5n
ZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmF4QmFj
a2luZ09iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHBsYWluVGV4dFJhbmdlKTsKKyAgICAgICAg
ICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UocGxhaW5UZXh0UmFu
Z2UpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZl
VmFsdWVGcm9tTWFpblRocmVhZDxOU1N0cmluZyAqPihbJnJhbmdlLCBwcm90ZWN0ZWRTZWxmID0g
UmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gTlNT
dHJpbmcgKiB7CkBAIC00MTU3LDcgKzQxMzksNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IFtz
ZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CiAgICAgICAgIHJl
dHVybiBbc2VsZiBuZXh0VGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZz
ZXRdOwogICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpA
IkFYUHJldmlvdXNUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIENoYXJhY3Rl
ck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFy
a2VyOnRleHRNYXJrZXJdOwogICAgICAgICByZXR1cm4gW3NlbGYgcHJldmlvdXNUZXh0TWFya2Vy
Rm9yQ2hhcmFjdGVyT2Zmc2V0OmNoYXJhY3Rlck9mZnNldF07CkBAIC00MTg5LDEzICs0MTcxLDEz
IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMZWZ0TGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRN
YXJrZXIiXSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZp
c2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5sZWZ0TGluZVZp
c2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3MpOworICAgICAgICBWaXNpYmxlUG9zaXRpb25S
YW5nZSB2cFJhbmdlID0gYmFja2luZ09iamVjdC0+bGVmdExpbmVWaXNpYmxlUG9zaXRpb25SYW5n
ZSh2aXNpYmxlUG9zKTsKICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21W
aXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwog
ICAgIH0KLSAgICAKKwogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUmln
aHRMaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoo
dGV4dE1hcmtlcildOwotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnJpZ2h0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQ
b3MpOworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gYmFja2luZ09iamVj
dC0+cmlnaHRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvcyk7CiAgICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0
YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAKQEAgLTQyNDksMjAgKzQyMzEs
MjAgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRMaW5lRW5kVGV4dE1hcmtlckZvclRleHRN
YXJrZXIiXSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZp
c2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgcmV0dXJu
IFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246c2VsZi5heEJhY2tpbmdPYmplY3Qt
Pm5leHRMaW5lRW5kUG9zaXRpb24odmlzaWJsZVBvcyldOworICAgICAgICByZXR1cm4gW3NlbGYg
dGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpiYWNraW5nT2JqZWN0LT5uZXh0TGluZUVuZFBv
c2l0aW9uKHZpc2libGVQb3MpXTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzTGluZVN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJr
ZXIiXSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2li
bGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246c2VsZi5heEJhY2tpbmdPYmplY3QtPnBy
ZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24odmlzaWJsZVBvcyldOworICAgICAgICByZXR1cm4gW3Nl
bGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpiYWNraW5nT2JqZWN0LT5wcmV2aW91c0xp
bmVTdGFydFBvc2l0aW9uKHZpc2libGVQb3MpXTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRTZW50ZW5jZUVuZFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyIl0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0
b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3RleHRNYXJrZXIsIHByb3RlY3RlZFNl
bGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAt
PiBSZXRhaW5QdHI8aWQ+IHsKICAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2Vs
Zi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlm
ICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW3Byb3RlY3RlZFNl
bGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKICAgICAgICAgICAg
IENoYXJhY3Rlck9mZnNldCBuZXh0RW5kID0gY2FjaGUtPm5leHRTZW50ZW5jZUVuZENoYXJhY3Rl
ck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRT
ZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6bmV4dEVuZF07CkBAIC00MzA3LDEwICs0
Mjg5LDEwIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdHlsZVRleHRNYXJrZXJSYW5nZUZvclRl
eHRNYXJrZXIiXSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxm
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdHlsZVJh
bmdlRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdl
IHZwUmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5zdHlsZVJhbmdlRm9yUG9zaXRpb24odmlzaWJsZVBv
cyk7CiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0
aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9Ci0gICAg
CisKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExlbmd0aEZvclRleHRN
YXJrZXJSYW5nZSJdKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbc2VsZiByYW5n
ZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwogICAgICAgICBpbnQgbGVuZ3Ro
ID0gQVhPYmplY3RDYWNoZTo6bGVuZ3RoRm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOwpAQCAtNDMxOCwx
MyArNDMwMCwxMyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aElu
dDpsZW5ndGhdOwogICAgIH0KLSAgICAKKwogICAgIC8vIFVzZWQgb25seSBieSBEdW1wUmVuZGVy
VHJlZSAoc28gZmFyKS4KICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0
YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSJdKSB7CiAgICAgICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2Vd
OwogICAgICAgICByZXR1cm4gW3NlbGYgc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTpyYW5n
ZSBpc1N0YXJ0OllFU107CiAgICAgfQotICAgIAorCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKICAgICAg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRl
eHRNYXJrZXJSYW5nZV07CiAgICAgICAgIHJldHVybiBbc2VsZiBzdGFydE9yRW5kVGV4dE1hcmtl
ckZvclJhbmdlOnJhbmdlIGlzU3RhcnQ6Tk9dOwpAQCAtNDM0OCw3MCArNDMzMCw2NyBAQCBBTExP
V19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICB9CiAjZW5kaWYKIAotICAgIGlm
IChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkgJiYgZG93bmNh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpLmlzRXhwb3NhYmxl
VGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkgeworICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RhYmxl
KCkgJiYgYmFja2luZ09iamVjdC0+aXNFeHBvc2FibGUoKSkgewogICAgICAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2VsbEZvckNvbHVtbkFuZFJvd1Bh
cmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICBpZiAoYXJyYXkgPT0gbmlsIHx8
IFthcnJheSBjb3VudF0gIT0gMikKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogY2VsbCA9IGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5jZWxsRm9yQ29sdW1uQW5kUm93KFtbYXJy
YXkgb2JqZWN0QXRJbmRleDowXSB1bnNpZ25lZEludFZhbHVlXSwgW1thcnJheSBvYmplY3RBdElu
ZGV4OjFdIHVuc2lnbmVkSW50VmFsdWVdKTsKLSAgICAgICAgICAgIGlmICghY2VsbCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4g
Y2VsbC0+d3JhcHBlcigpOworICAgICAgICAgICAgYXV0byogY2VsbCA9IGJhY2tpbmdPYmplY3Qt
PmNlbGxGb3JDb2x1bW5BbmRSb3coW1thcnJheSBvYmplY3RBdEluZGV4OjBdIHVuc2lnbmVkSW50
VmFsdWVdLCBbW2FycmF5IG9iamVjdEF0SW5kZXg6MV0gdW5zaWduZWRJbnRWYWx1ZV0pOworICAg
ICAgICAgICAgcmV0dXJuIGNlbGwgPyBjZWxsLT53cmFwcGVyKCkgOiBuaWw7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgCi0gICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RleHRDb250cm9s
KCkpIHsKKworICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKICAgICAg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcgKilrQVhMaW5lRm9y
SW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICAgICAgaW50IGxpbmVOdW1i
ZXIgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9BWExpbmVGb3JJbmRleChbbnVtYmVyIGludFZh
bHVlXSk7CisgICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IGJhY2tpbmdPYmplY3QtPmRvQVhM
aW5lRm9ySW5kZXgoW251bWJlciBpbnRWYWx1ZV0pOwogICAgICAgICAgICAgaWYgKGxpbmVOdW1i
ZXIgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDpsaW5lTnVtYmVyXTsKICAgICAgICAgfQot
ICAgICAgICAKKwogICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0
cmluZyAqKWtBWFJhbmdlRm9yTGluZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAg
ICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9B
WFJhbmdlRm9yTGluZShbbnVtYmVyIGludFZhbHVlXSk7CisgICAgICAgICAgICBQbGFpblRleHRS
YW5nZSB0ZXh0UmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKFtudW1iZXIg
aW50VmFsdWVdKTsKICAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTog
TlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKV07CiAgICAgICAg
IH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAo
TlNTdHJpbmcqKWtBWFN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAg
ICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlID0gUGxhaW5UZXh0UmFuZ2Uo
cmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgICAgICByZXR1cm4gcmFuZ2VT
ZXQgPyAoaWQpKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UocGxhaW5U
ZXh0UmFuZ2UpKSA6IG5pbDsKKyAgICAgICAgICAgIHJldHVybiByYW5nZVNldCA/IChpZCkoYmFj
a2luZ09iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHBsYWluVGV4dFJhbmdlKSkgOiBuaWw7CiAg
ICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOiAoTlNTdHJpbmcqKWtBWFJhbmdlRm9yUG9zaXRpb25QYXJhbWV0ZXJpemVkQXR0cmlidXRl
XSkgewogICAgICAgICAgICAgaWYgKCFwb2ludFNldCkKICAgICAgICAgICAgICAgICByZXR1cm4g
bmlsOwogICAgICAgICAgICAgSW50UG9pbnQgd2ViQ29yZVBvaW50ID0gSW50UG9pbnQocG9pbnQp
OwotICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmRvQVhSYW5nZUZvclBvc2l0aW9uKHdlYkNvcmVQb2ludCk7CisgICAgICAgICAgICBQ
bGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5kb0FYUmFuZ2VGb3JQb3Np
dGlvbih3ZWJDb3JlUG9pbnQpOwogICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0
aFJhbmdlOiBOU01ha2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5sZW5ndGgpXTsK
ICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6IChOU1N0cmluZyopa0FYUmFuZ2VGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVd
KSB7Ci0gICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBzZWxmLmF4QmFja2lu
Z09iamVjdC0+ZG9BWFJhbmdlRm9ySW5kZXgoW251bWJlciBpbnRWYWx1ZV0pOworICAgICAgICAg
ICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gYmFja2luZ09iamVjdC0+ZG9BWFJhbmdlRm9y
SW5kZXgoW251bWJlciBpbnRWYWx1ZV0pOwogICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZh
bHVlV2l0aFJhbmdlOiBOU01ha2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5sZW5n
dGgpXTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6IChOU1N0cmluZyopa0FYQm91bmRzRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0
cmlidXRlXSkgewogICAgICAgICAgICAgaWYgKCFyYW5nZVNldCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbmlsOwogICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgcGxhaW5UZXh0UmFuZ2UgPSBQ
bGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgICAg
IGF1dG8gYm91bmRzID0gRmxvYXRSZWN0KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb0FYQm91bmRz
Rm9yUmFuZ2VVc2luZ0NoYXJhY3Rlck9mZnNldChwbGFpblRleHRSYW5nZSkpOworICAgICAgICAg
ICAgYXV0byBib3VuZHMgPSBGbG9hdFJlY3QoYmFja2luZ09iamVjdC0+ZG9BWEJvdW5kc0ZvclJh
bmdlVXNpbmdDaGFyYWN0ZXJPZmZzZXQocGxhaW5UZXh0UmFuZ2UpKTsKICAgICAgICAgICAgIE5T
UmVjdCByZWN0ID0gW3NlbGYgY29udmVydFJlY3RUb1NwYWNlOmJvdW5kcyBzcGFjZTpBY2Nlc3Np
YmlsaXR5Q29udmVyc2lvblNwYWNlOjpTY3JlZW5dOwogICAgICAgICAgICAgcmV0dXJuIFtOU1Zh
bHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF07CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcqKWtBWFJURkZvclJhbmdl
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pCiAgICAgICAgICAgICByZXR1cm4gcmFuZ2VTZXQgPyBb
c2VsZiBkb0FYUlRGRm9yUmFuZ2U6cmFuZ2VdIDogbmlsOwotICAgICAgICAKKwogICAgICAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyopa0FYQXR0cmlidXRlZFN0
cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pCiAgICAgICAgICAgICByZXR1cm4g
cmFuZ2VTZXQgPyBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlOnJhbmdlXSA6IG5p
bDsKLSAgICAgICAgCisKICAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAo
TlNTdHJpbmcqKWtBWFN0eWxlUmFuZ2VGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7
Ci0gICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBzZWxmLmF4QmFja2luZ09i
amVjdC0+ZG9BWFN0eWxlUmFuZ2VGb3JJbmRleChbbnVtYmVyIGludFZhbHVlXSk7CisgICAgICAg
ICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5kb0FYU3R5bGVS
YW5nZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKICAgICAgICAgICAgIHJldHVybiBbTlNW
YWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFu
Z2UubGVuZ3RoKV07CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLyBUaGVyZSBhcmUg
c29tZSBwYXJhbWV0ZXJzIHRoYXQgc3VwZXIgaGFuZGxlcyB0aGF0IGFyZSBub3QgZXhwbGljaXRs
eSByZXR1cm5lZCBieSB0aGUgbGlzdCBvZiB0aGUgZWxlbWVudCdzIGF0dHJpYnV0ZXMuCiAgICAg
Ly8gSW4gdGhhdCBjYXNlIGl0IG11c3QgYmUgcGFzc2VkIHRvIHN1cGVyLgogICAgIHJldHVybiBb
c3VwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZSBmb3JQYXJhbWV0ZXI6
cGFyYW1ldGVyXTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>