<?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>162571</bug_id>
          
          <creation_ts>2016-09-26 11:50:57 -0700</creation_ts>
          <short_desc>[MediaStream] Restructure MediaConstraints classes</short_desc>
          <delta_ts>2016-09-27 11:03:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>Other</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>
          
          <blocked>162147</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>dino</cc>
    
    <cc>jer.noble</cc>
    
    <cc>thiago.lacerda</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1233490</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-09-26 11:50:57 -0700</bug_when>
    <thetext>A preliminary review of bug 162147 asked for a restructuring of the MediaConstraint classes: MediaConstraint should not be reference counted, MediaTrackConstraintSetMap should not use a HashMap, clean up MediaConstraint inheritance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233552</commentid>
    <comment_count>1</comment_count>
      <attachid>289859</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-09-26 13:31:29 -0700</bug_when>
    <thetext>Created attachment 289859
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233879</commentid>
    <comment_count>2</comment_count>
      <attachid>289859</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-09-27 08:57:35 -0700</bug_when>
    <thetext>Comment on attachment 289859
Proposed patch.

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

&gt; Source/WebCore/platform/mediastream/MediaConstraints.h:49
&gt; +    static MediaConstraint&amp; create(const AtomicString&amp;);

This is really weird.  Why not just make the constructor public?

&gt; Source/WebCore/platform/mediastream/MediaConstraints.h:55
&gt; +    MediaConstraint(const MediaConstraint&amp; other)
&gt; +    {
&gt; +        m_name = other.m_name;
&gt; +        m_constraintType = other.m_constraintType;
&gt; +        m_dataType = other.m_dataType;
&gt; +    }

Won&apos;t this copy-constructor just be auto-generated if you left this out?

&gt; Source/WebCore/platform/mediastream/MediaConstraints.h:242
&gt; +    NumericConstraint(const NumericConstraint&amp; other)
&gt; +        : MediaConstraint(other)
&gt;      {
&gt; +        if (other.m_min)
&gt; +            m_min = other.m_min;
&gt; +        if (other.m_max)
&gt; +            m_max = other.m_max;
&gt; +        if (other.m_exact)
&gt; +            m_exact = other.m_exact;
&gt; +        if (other.m_ideal)
&gt; +            m_ideal = other.m_ideal;
&gt; +    }

Ditto.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.h:282
&gt; -    static Ref&lt;IntConstraint&gt; create(const String&amp; name, MediaConstraintType type) { return adoptRef(*new IntConstraint(name, type)); }
&gt; +    static IntConstraint&amp; create(const AtomicString&amp; name, MediaConstraintType type) { return *new IntConstraint(name, type); }
&gt; +    IntConstraint(const IntConstraint&amp; other)
&gt; +        : NumericConstraint&lt;int&gt;(other)
&gt; +    {
&gt; +    }

Ditto.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.h:302
&gt; -    static Ref&lt;DoubleConstraint&gt; create(const String&amp; name, MediaConstraintType type) { return adoptRef(*new DoubleConstraint(name, type)); }
&gt; +    static DoubleConstraint&amp; create(const AtomicString&amp; name, MediaConstraintType type) { return *new DoubleConstraint(name, type); }
&gt; +    DoubleConstraint(const DoubleConstraint&amp; other)
&gt; +        : NumericConstraint&lt;double&gt;(other)
&gt; +    {
&gt; +    }

Ditto.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.h:318
&gt; +    static BooleanConstraint&amp; create(const AtomicString&amp; name, MediaConstraintType type) { return *new BooleanConstraint(name, type); }

Ditto.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.h:326
&gt; +    BooleanConstraint(const BooleanConstraint&amp; other)
&gt; +        : MediaConstraint(other)
&gt; +    {
&gt; +        if (other.m_exact)
&gt; +            m_exact = other.m_exact;
&gt; +        if (other.m_ideal)
&gt; +            m_ideal = other.m_ideal;
&gt; +    }

Ditto.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.h:389
&gt; +    static StringConstraint&amp; create(const AtomicString&amp; name, MediaConstraintType type) { return *new StringConstraint(name, type); }

Ditto.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.h:397
&gt; +    StringConstraint(const StringConstraint&amp; other)
&gt; +        : MediaConstraint(other)
&gt; +    {
&gt; +        if (!other.m_exact.isEmpty())
&gt; +            m_exact = other.m_exact;
&gt; +        if (!other.m_ideal.isEmpty())
&gt; +            m_ideal = other.m_ideal;
&gt; +    }

It seems like a lot more work to initialize m_exact (e.g.) as empty, and then do an operator= on it, rather than just call the Vector copy-constructor.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.h:502
&gt; +    class iterator {
&gt; +    public:
&gt; +        iterator()
&gt; +            : m_constraint(nullptr)
&gt; +            , m_index(0)
&gt; +        {
&gt; +        }
&gt; +
&gt; +        iterator(const FlattenedConstraint* constraint, size_t index)
&gt; +            : m_constraint(constraint)
&gt; +            , m_index(index)
&gt; +        {
&gt; +        }
&gt; +
&gt; +        MediaConstraint&amp; operator*() const
&gt; +        {
&gt; +            return m_constraint-&gt;m_variants.at(m_index).constraint();
&gt; +        }
&gt;  
&gt; -    const_iterator begin() const { return m_constraints.begin(); }
&gt; -    const_iterator end() const { return m_constraints.end(); }
&gt; +        iterator&amp; operator++()
&gt; +        {
&gt; +            m_index++;
&gt; +            return *this;
&gt; +        }
&gt; +
&gt; +        bool operator==(const iterator&amp; other) const { return m_index == other.m_index; }
&gt; +        bool operator!=(const iterator&amp; other) const { return !(*this == other); }

So, you&apos;re going to have to be very, very careful with this iterator.  Because adding or removing items from the m_variants list doesn&apos;t explicitly invalidate any iterators, you can git into a situation where you walk over uninitialized memory.  Say, you&apos;ve got something like this:

for (auto iter = flattened.begin(); iter != flattened.end(); ++iter) {
  if (someCondition)
    flattened.merge(someValue);
}

If you&apos;re on the last item in flattened, and the merge operation deletes a row, then the next loop comparison will be iter (index=5) != end (index=4).  And it will keep on walking!

One cheap way to catch this kind of thing in debug builds would be for the FlattenedConstraint and it&apos;s iterator to both have a &quot;generation&quot; ivar.  And every time you modify m_variants, you bump up the generation on FlattenedConstraint.  The operator*() method on the constraint would ASSERT that its generation matches the FlattenedConstraint.  The whole generation logic could be debug only.

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp:490
&gt; +        advancedConstraint.forEach([&amp;](const MediaConstraint&amp; constraint) {

Woo! I didn&apos;t know we added forEach to Vector!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233956</commentid>
    <comment_count>3</comment_count>
      <attachid>289972</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-09-27 10:43:37 -0700</bug_when>
    <thetext>Created attachment 289972
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233964</commentid>
    <comment_count>4</comment_count>
      <attachid>289977</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-09-27 10:49:06 -0700</bug_when>
    <thetext>Created attachment 289977
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233977</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-09-27 11:03:01 -0700</bug_when>
    <thetext>Committed r206445: https://trac.webkit.org/r206445</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289859</attachid>
            <date>2016-09-26 13:31:29 -0700</date>
            <delta_ts>2016-09-27 10:43:37 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>refactor_constraints_patch_6.txt</filename>
            <type>text/plain</type>
            <size>86406</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjM4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBAQAorMjAxNi0wOS0yNiAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWVkaWFTdHJlYW1d
IFJlc3RydWN0dXJlIE1lZGlhQ29uc3RyYWludHMgY2xhc3NlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNTcxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFs
IGNoYW5nZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWlu
dHNJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHNJbXBsOjppbml0
aWFsaXplKTogRGVsZXRlZCwgbm8gbG9uZ2VyIHVzZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5oOgorCisgICAgICAgICogYmluZGluZ3MvanMv
SlNNZWRpYURldmljZXNDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU3RyaW5n
Q29uc3RyYWludCk6IFJldHVybiBPcHRpb25hbDw+IGluc3RlYWQgb2YgUmVmUHRyPD4uCisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVCb29sZWFuQ29uc3RyYWludCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlRG91YmxlQ29uc3RyYWludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlSW50Q29uc3RyYWludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VN
ZWRpYVRyYWNrQ29uc3RyYWludFNldEZvcktleSk6IERlYWwgd2l0aCBhYm92ZSBjaGFuZ2UuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHA6
CisgICAgICAgIChDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3RyYWludHNGb3JNZWRp
YVR5cGUpOiBVc2UgY29uc3RyYWludHMubWFuZGF0b3J5Q29uc3RyYWludHMuZmlsdGVyCisgICAg
ICAgICAgaW5zdGVhZCBvZiBkaXJlY3QgZW51bWVyYXRpb24uCisgICAgICAgIChDYXB0dXJlRGV2
aWNlTWFuYWdlcjo6c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludCk6IFVzZSBkb3duY2FzdDw+Lgor
ICAgICAgICAoQ2FwdHVyZURldmljZU1hbmFnZXI6OmlzU3VwcG9ydGVkRnJhbWVSYXRlKTogRGl0
dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludDo6Y3JlYXRlKTogUmV0dXJuIGEg
TWVkaWFDb25zdHJhaW50Jiwgbm90IGEgUmVmPE1lZGlhQ29uc3RyYWludD4uCisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdDb25zdHJhaW50OjpmaW5kKTogTG9zZSB0aGUgQ29uc3RyYWludFR5cGUg
cGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQ29uc3RyYWludDo6bWVyZ2UpOiBV
c2UgZG93bmNhc3Q8Pi4KKyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6OnNl
dCk6IFVzZSBDb25zdHJhaW50SG9sZGVyLgorICAgICAgICAoV2ViQ29yZTo6RmxhdHRlbmVkQ29u
c3RyYWludDo6bWVyZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhVHJhY2tDb25z
dHJhaW50U2V0TWFwOjpmb3JFYWNoKTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFUcmFj
a0NvbnN0cmFpbnRTZXRNYXA6OmZpbHRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6OmlzRW1wdHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwOjpzZXQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29uc3RyYWludDo6Y29weSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbnRDb25zdHJhaW50Ojpjb3B5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvdWJs
ZUNvbnN0cmFpbnQ6OmNvcHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qm9vbGVhbkNv
bnN0cmFpbnQ6OmNvcHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQ29uc3Ry
YWludDo6Y29weSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFDb25zdHJhaW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50OjpNZWRp
YUNvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50Ojppc0VtcHR5
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludDo6aXNNYW5kYXRvcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50OjptZXJnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnN0cmFpbnQ6OmlzSW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3Ry
YWludDo6aXNEb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50Ojppc0Jv
b2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50Ojppc1N0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnQ6OmRhdGFUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29uc3RyYWludDo6Y29uc3RyYWludFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TnVtZXJpY0NvbnN0cmFpbnQ6OmdldE1pbik6CisgICAgICAgIChXZWJDb3JlOjpOdW1lcmlj
Q29uc3RyYWludDo6Z2V0TWF4KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50
OjpnZXRFeGFjdCk6CisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6Z2V0SWRl
YWwpOgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6OmZpdG5lc3NEaXN0YW5j
ZSk6CisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6dmFsaWRGb3JSYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6ZmluZCk6CisgICAgICAgIChX
ZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6TnVtZXJpY0NvbnN0cmFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6OmlubmVyTWVyZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxhdHRlbmVkQ29uc3RyYWludDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpGbGF0
dGVuZWRDb25zdHJhaW50OjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
RmxhdHRlbmVkQ29uc3RyYWludDo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJD
b3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
IChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjppdGVyYXRvcjo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjpiZWdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjplbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxhdHRlbmVkQ29uc3RyYWludDo6Q29uc3RyYWludEhvbGRlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6OkNvbnN0cmFpbnRIb2xkZXI6On5Db25z
dHJhaW50SG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6OkNv
bnN0cmFpbnRIb2xkZXI6OmNvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxhdHRlbmVk
Q29uc3RyYWludDo6Q29uc3RyYWludEhvbGRlcjo6ZGF0YVR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxhdHRlbmVkQ29uc3RyYWludDo6Q29uc3RyYWludEhvbGRlcjo6Y29uc3RyYWludFR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6RmxhdHRlbmVkQ29uc3RyYWludDo6Q29uc3RyYWludEhvbGRl
cjo6Q29uc3RyYWludEhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnQ6
OmdldE1pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnQ6Omdl
dE1heCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnQ6OmdldEV4
YWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludDo6Z2V0SWRl
YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50Ojp2YWxpZEZv
clJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludDo6Zmlu
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnQ6OmZpdG5lc3NE
aXN0YW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnQ6OnR5
cGUpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVN
ZWRpYVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlOjpm
aXRuZXNzRGlzdGFuY2UpOiBVc2UgZG93bmNhc3Q8Pi4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5
TnVtZXJpY0NvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJj
ZTo6YXBwbHlDb25zdHJhaW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1l
ZGlhU291cmNlOjpzZWxlY3RTZXR0aW5ncyk6IERpdHRvLiBVc2UgY29uc3RyYWludHMubWFuZGF0
b3J5Q29uc3RyYWludHMuZmlsdGVyCisgICAgICAgICAgaW5zdGVhZCBvZiBkaXJlY3QgZW51bWVy
YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0
cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldFNhbXBs
ZVJhdGUpOiBTYW1wbGUgcmF0ZSBpcyBhbiBpbnQsIG5vdCBhIGRvdWJsZS4KKyAgICAgICAgKFdl
YkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldFNhbXBsZVNpemUpOiBTYW1wbGUgc2l6ZSBp
cyBhbHNvIGFuIGludC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1l
ZGlhU291cmNlLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0
dXJlRGV2aWNlTWFuYWdlci5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1h
bmFnZXI6OnNlc3Npb25TdXBwb3J0c0NvbnN0cmFpbnQpOiBVc2UgZG93bmNhc3Q8Pi4KKworICAg
ICAgICAqIHBsYXRmb3JtL21vY2svTWVkaWFDb25zdHJhaW50c01vY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aXNJbnRNZWRpYUNvbnN0cmFpbnRTYXRpc2ZpYWJsZSk6IFVzZSBkb3duY2FzdDw+
LgorICAgICAgICAoV2ViQ29yZTo6aXNEb3VibGVNZWRpYUNvbnN0cmFpbnRTYXRpc2ZpYWJsZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNCb29sZWFuTWVkaWFDb25zdHJhaW50U2F0aXNm
aWFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzU3RyaW5nTWVkaWFDb25zdHJhaW50
U2F0aXNmaWFibGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNTYXRpc2ZpYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnRzTW9jazo6dmVyaWZ5Q29uc3RyYWludHMpOiBVc2Ug
Y29uc3RyYWludHMubWFuZGF0b3J5Q29uc3RyYWludHMuZmlsdGVyCisgICAgICAgICAgaW5zdGVh
ZCBvZiBkaXJlY3QgZW51bWVyYXRpb24uCisgICAgICAgICogcGxhdGZvcm0vbW9jay9NZWRpYUNv
bnN0cmFpbnRzTW9jay5oOgorCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVB
dWRpb1NvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXI6OmNyZWF0ZU1lZGlhU3RyZWFtKToKKwogMjAxNi0wOS0yNiAgTWljaGFlbCBDYXRh
bnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgU2lsZW5jZSB1bnVzZWQg
cGFyYW1ldGVyIHdhcm5pbmdzIGZyb20gR2VvY2x1ZTJJbnRlcmZhY2UuYwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0
cmFpbnRzSW1wbC5jcHAJKHJldmlzaW9uIDIwNjI1MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50c0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMyArNDYsNiBAQCBSZWY8TWVkaWFDb25zdHJhaW50c0ltcGw+IE1lZGlhQ29uc3RyYWlu
CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFDb25zdHJhaW50c0ltcGwoKSk7CiB9CiAK
LS8vIEZJWE1FOiBSZW1vdmUgYWZ0ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MDU3OQotdm9pZCBNZWRpYUNvbnN0cmFpbnRzSW1wbDo6aW5pdGlhbGl6ZShjb25z
dCBEaWN0aW9uYXJ5JiBjb25zdHJhaW50cykKLXsKLSAgICBpZiAoY29uc3RyYWludHMuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuOwotfQotCiBSZWY8TWVkaWFDb25zdHJhaW50
c0ltcGw+IE1lZGlhQ29uc3RyYWludHNJbXBsOjpjcmVhdGUoTWVkaWFUcmFja0NvbnN0cmFpbnRT
ZXRNYXAmJiBtYW5kYXRvcnlDb25zdHJhaW50cywgVmVjdG9yPE1lZGlhVHJhY2tDb25zdHJhaW50
U2V0TWFwPiYmIGFkdmFuY2VkQ29uc3RyYWludHMsIGJvb2wgaXNWYWxpZCkKIHsKICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBNZWRpYUNvbnN0cmFpbnRzSW1wbChXVEZNb3ZlKG1hbmRhdG9yeUNv
bnN0cmFpbnRzKSwgV1RGTW92ZShhZHZhbmNlZENvbnN0cmFpbnRzKSwgaXNWYWxpZCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFDb25zdHJhaW50c0ltcGwuaAkocmV2aXNpb24gMjA2MjUzKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw3ICs0OCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE1lZGlhQ29uc3RyYWlu
dHNJbXBsPiBjcmVhdGUoTWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXAmJiBtYW5kYXRvcnlDb25z
dHJhaW50cywgVmVjdG9yPE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwPiYmIGFkdmFuY2VkQ29u
c3RyYWludHMsIGJvb2wgaXNWYWxpZCk7CiAKICAgICB2aXJ0dWFsIH5NZWRpYUNvbnN0cmFpbnRz
SW1wbCgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBEaWN0aW9uYXJ5Jik7CiAKICAgICBj
b25zdCBNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcCYgbWFuZGF0b3J5Q29uc3RyYWludHMoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX21hbmRhdG9yeUNvbnN0cmFpbnRzOyB9CiAgICAgY29uc3Qg
VmVjdG9yPE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwPiYgYWR2YW5jZWRDb25zdHJhaW50cygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYWR2YW5jZWRDb25zdHJhaW50czsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYURldmljZXNDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFEZXZpY2VzQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjA2MjUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRp
YURldmljZXNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1OCw5IEBAIHN0YXRp
YyB2b2lkIGluaXRpYWxpemVTdHJpbmdDb25zdHJhaW50V2kKICAgICB9CiB9CiAKLXN0YXRpYyBS
ZWZQdHI8U3RyaW5nQ29uc3RyYWludD4gY3JlYXRlU3RyaW5nQ29uc3RyYWludChjb25zdCBEaWN0
aW9uYXJ5JiBtZWRpYVRyYWNrQ29uc3RyYWludFNldCwgY29uc3QgU3RyaW5nJiBuYW1lLCBNZWRp
YUNvbnN0cmFpbnRUeXBlIHR5cGUsIENvbnN0cmFpbnRTZXRUeXBlIGNvbnN0cmFpbnRTZXRUeXBl
KQorc3RhdGljIE9wdGlvbmFsPFN0cmluZ0NvbnN0cmFpbnQ+IGNyZWF0ZVN0cmluZ0NvbnN0cmFp
bnQoY29uc3QgRGljdGlvbmFyeSYgbWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlLCBDb25zdHJhaW50U2V0VHlwZSBjb25z
dHJhaW50U2V0VHlwZSkKIHsKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBTdHJpbmdDb25zdHJhaW50
OjpjcmVhdGUobmFtZSwgdHlwZSk7CisgICAgYXV0byYgY29uc3RyYWludCA9IFN0cmluZ0NvbnN0
cmFpbnQ6OmNyZWF0ZShuYW1lLCB0eXBlKTsKIAogICAgIC8vIERpY3Rpb25hcnkgY29uc3RyYWlu
dCB2YWx1ZS4KICAgICBEaWN0aW9uYXJ5IGRpY3Rpb25hcnlWYWx1ZTsKQEAgLTcxLDcgKzcxLDcg
QEAgc3RhdGljIFJlZlB0cjxTdHJpbmdDb25zdHJhaW50PiBjcmVhdGVTdAogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIFN0cmluZyBleGFjdFN0cmluZ1ZhbHVlOwogICAgICAgICAgICAgaWYg
KGRpY3Rpb25hcnlWYWx1ZS5nZXQoImV4YWN0IiwgZXhhY3RTdHJpbmdWYWx1ZSkpCi0gICAgICAg
ICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3QoZXhhY3RTdHJpbmdWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgY29uc3RyYWludC5zZXRFeGFjdChleGFjdFN0cmluZ1ZhbHVlKTsKICAgICAgICAg
fQogCiAgICAgICAgIEFycmF5VmFsdWUgaWRlYWxBcnJheVZhbHVlOwpAQCAtODAsMTIgKzgwLDEy
IEBAIHN0YXRpYyBSZWZQdHI8U3RyaW5nQ29uc3RyYWludD4gY3JlYXRlU3QKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBTdHJpbmcgaWRlYWxTdHJpbmdWYWx1ZTsKICAgICAgICAgICAgIGlm
ICghZGljdGlvbmFyeVZhbHVlLmdldCgiaWRlYWwiLCBpZGVhbFN0cmluZ1ZhbHVlKSkKLSAgICAg
ICAgICAgICAgICBjb25zdHJhaW50LT5zZXRJZGVhbChpZGVhbFN0cmluZ1ZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBjb25zdHJhaW50LnNldElkZWFsKGlkZWFsU3RyaW5nVmFsdWUpOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKGNvbnN0cmFpbnQtPmlzRW1wdHkoKSkgeworICAgICAgICBpZiAo
Y29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIExPRyhNZWRpYSwgImNyZWF0ZVN0
cmluZ0NvbnN0cmFpbnQoKSAtIGlnbm9yaW5nIHN0cmluZyBjb25zdHJhaW50ICclcycgd2l0aCBk
aWN0aW9uYXJ5IHZhbHVlIHNpbmNlIGl0IGhhcyBubyB2YWxpZCBvciBzdXBwb3J0ZWQga2V5L3Zh
bHVlIHBhaXJzLiIsIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gV1RGTW92ZShjb25zdHJhaW50KTsKQEAgLTk2LDkgKzk2LDkgQEAgc3Rh
dGljIFJlZlB0cjxTdHJpbmdDb25zdHJhaW50PiBjcmVhdGVTdAogICAgIGlmIChtZWRpYVRyYWNr
Q29uc3RyYWludFNldC5nZXQobmFtZSwgYXJyYXlWYWx1ZSkgJiYgIWFycmF5VmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkgewogICAgICAgICBpbml0aWFsaXplU3RyaW5nQ29uc3RyYWludFdpdGhM
aXN0KGNvbnN0cmFpbnQsICZTdHJpbmdDb25zdHJhaW50OjphcHBlbmRJZGVhbCwgYXJyYXlWYWx1
ZSk7CiAKLSAgICAgICAgaWYgKGNvbnN0cmFpbnQtPmlzRW1wdHkoKSkgeworICAgICAgICBpZiAo
Y29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIExPRyhNZWRpYSwgImNyZWF0ZVN0
cmluZ0NvbnN0cmFpbnQoKSAtIGlnbm9yaW5nIHN0cmluZyBjb25zdHJhaW50ICclcycgd2l0aCBh
cnJheSB2YWx1ZSBzaW5jZSBpdCBpcyBlbXB0eS4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAg
ICAgICAgfQogCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKGNvbnN0cmFpbnQpOwpAQCAtMTA4LDM2
ICsxMDgsMzYgQEAgc3RhdGljIFJlZlB0cjxTdHJpbmdDb25zdHJhaW50PiBjcmVhdGVTdAogICAg
IFN0cmluZyB2YWx1ZTsKICAgICBpZiAobWVkaWFUcmFja0NvbnN0cmFpbnRTZXQuZ2V0KG5hbWUs
IHZhbHVlKSkgewogICAgICAgICBpZiAoY29uc3RyYWludFNldFR5cGUgPT0gQ29uc3RyYWludFNl
dFR5cGU6Ok1hbmRhdG9yeSkKLSAgICAgICAgICAgIGNvbnN0cmFpbnQtPnNldElkZWFsKHZhbHVl
KTsKKyAgICAgICAgICAgIGNvbnN0cmFpbnQuc2V0SWRlYWwodmFsdWUpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjb25zdHJhaW50LT5zZXRFeGFjdCh2YWx1ZSk7CisgICAgICAgICAgICBj
b25zdHJhaW50LnNldEV4YWN0KHZhbHVlKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBXVEZN
b3ZlKGNvbnN0cmFpbnQpOwogICAgIH0KIAogICAgIC8vIEludmFsaWQgY29uc3RyYWludCB2YWx1
ZS4KICAgICBMT0coTWVkaWEsICJjcmVhdGVTdHJpbmdDb25zdHJhaW50KCkgLSBpZ25vcmluZyBz
dHJpbmcgY29uc3RyYWludCAnJXMnIHNpbmNlIGl0IGhhcyBuZWl0aGVyIGEgZGljdGlvbmFyeSBu
b3Igc2VxdWVuY2Ugbm9yIHNjYWxhciB2YWx1ZS4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiBOdWxsb3B0OwogfQogCi1zdGF0aWMgUmVmUHRy
PEJvb2xlYW5Db25zdHJhaW50PiBjcmVhdGVCb29sZWFuQ29uc3RyYWludChjb25zdCBEaWN0aW9u
YXJ5JiBtZWRpYVRyYWNrQ29uc3RyYWludFNldCwgY29uc3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNv
bnN0cmFpbnRUeXBlIHR5cGUsIENvbnN0cmFpbnRTZXRUeXBlIGNvbnN0cmFpbnRTZXRUeXBlKQor
c3RhdGljIE9wdGlvbmFsPEJvb2xlYW5Db25zdHJhaW50PiBjcmVhdGVCb29sZWFuQ29uc3RyYWlu
dChjb25zdCBEaWN0aW9uYXJ5JiBtZWRpYVRyYWNrQ29uc3RyYWludFNldCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUsIENvbnN0cmFpbnRTZXRUeXBlIGNvbnN0
cmFpbnRTZXRUeXBlKQogewotICAgIGF1dG8gY29uc3RyYWludCA9IEJvb2xlYW5Db25zdHJhaW50
OjpjcmVhdGUobmFtZSwgdHlwZSk7CisgICAgYXV0byYgY29uc3RyYWludCA9IEJvb2xlYW5Db25z
dHJhaW50OjpjcmVhdGUobmFtZSwgdHlwZSk7CiAKICAgICAvLyBEaWN0aW9uYXJ5IGNvbnN0cmFp
bnQgdmFsdWUuCiAgICAgRGljdGlvbmFyeSBkaWN0aW9uYXJ5VmFsdWU7CiAgICAgaWYgKG1lZGlh
VHJhY2tDb25zdHJhaW50U2V0LmdldChuYW1lLCBkaWN0aW9uYXJ5VmFsdWUpICYmICFkaWN0aW9u
YXJ5VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBib29sIGV4YWN0VmFsdWU7
CiAgICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0KCJleGFjdCIsIGV4YWN0VmFsdWUpKQot
ICAgICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3QoZXhhY3RWYWx1ZSk7CisgICAgICAgICAg
ICBjb25zdHJhaW50LnNldEV4YWN0KGV4YWN0VmFsdWUpOwogCiAgICAgICAgIGJvb2wgaWRlYWxW
YWx1ZTsKICAgICAgICAgaWYgKGRpY3Rpb25hcnlWYWx1ZS5nZXQoImlkZWFsIiwgaWRlYWxWYWx1
ZSkpCi0gICAgICAgICAgICBjb25zdHJhaW50LT5zZXRJZGVhbChpZGVhbFZhbHVlKTsKKyAgICAg
ICAgICAgIGNvbnN0cmFpbnQuc2V0SWRlYWwoaWRlYWxWYWx1ZSk7CiAKLSAgICAgICAgaWYgKGNv
bnN0cmFpbnQtPmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoY29uc3RyYWludC5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIExPRyhNZWRpYSwgImNyZWF0ZUJvb2xlYW5Db25zdHJhaW50KCkgLSBp
Z25vcmluZyBib29sZWFuIGNvbnN0cmFpbnQgJyVzJyB3aXRoIGRpY3Rpb25hcnkgdmFsdWUgc2lu
Y2UgaXQgaGFzIG5vIHZhbGlkIG9yIHN1cHBvcnRlZCBrZXkvdmFsdWUgcGFpcnMuIiwgbmFtZS51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gV1RGTW92ZShjb25z
dHJhaW50KTsKQEAgLTE0Nyw0NCArMTQ3LDQ0IEBAIHN0YXRpYyBSZWZQdHI8Qm9vbGVhbkNvbnN0
cmFpbnQ+IGNyZWF0ZUIKICAgICBib29sIHZhbHVlOwogICAgIGlmIChtZWRpYVRyYWNrQ29uc3Ry
YWludFNldC5nZXQobmFtZSwgdmFsdWUpKSB7CiAgICAgICAgIGlmIChjb25zdHJhaW50U2V0VHlw
ZSA9PSBDb25zdHJhaW50U2V0VHlwZTo6TWFuZGF0b3J5KQotICAgICAgICAgICAgY29uc3RyYWlu
dC0+c2V0SWRlYWwodmFsdWUpOworICAgICAgICAgICAgY29uc3RyYWludC5zZXRJZGVhbCh2YWx1
ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnN0cmFpbnQtPnNldEV4YWN0KHZhbHVl
KTsKKyAgICAgICAgICAgIGNvbnN0cmFpbnQuc2V0RXhhY3QodmFsdWUpOwogICAgICAgICAKICAg
ICAgICAgcmV0dXJuIFdURk1vdmUoY29uc3RyYWludCk7CiAgICAgfQogCiAgICAgLy8gSW52YWxp
ZCBjb25zdHJhaW50IHZhbHVlLgogICAgIExPRyhNZWRpYSwgImNyZWF0ZUJvb2xlYW5Db25zdHJh
aW50KCkgLSBpZ25vcmluZyBib29sZWFuIGNvbnN0cmFpbnQgJyVzJyBzaW5jZSBpdCBoYXMgbmVp
dGhlciBhIGRpY3Rpb25hcnkgbm9yIHNjYWxhciB2YWx1ZS4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkp
OwotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBOdWxsb3B0OwogfQogCi1zdGF0aWMg
UmVmUHRyPERvdWJsZUNvbnN0cmFpbnQ+IGNyZWF0ZURvdWJsZUNvbnN0cmFpbnQoY29uc3QgRGlj
dGlvbmFyeSYgbWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIGNvbnN0IFN0cmluZyYgbmFtZSwgTWVk
aWFDb25zdHJhaW50VHlwZSB0eXBlLCBDb25zdHJhaW50U2V0VHlwZSBjb25zdHJhaW50U2V0VHlw
ZSkKK3N0YXRpYyBPcHRpb25hbDxEb3VibGVDb25zdHJhaW50PiBjcmVhdGVEb3VibGVDb25zdHJh
aW50KGNvbnN0IERpY3Rpb25hcnkmIG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSwgQ29uc3RyYWludFNldFR5cGUgY29u
c3RyYWludFNldFR5cGUpCiB7Ci0gICAgYXV0byBjb25zdHJhaW50ID0gRG91YmxlQ29uc3RyYWlu
dDo6Y3JlYXRlKG5hbWUsIHR5cGUpOworICAgIGF1dG8mIGNvbnN0cmFpbnQgPSBEb3VibGVDb25z
dHJhaW50OjpjcmVhdGUobmFtZSwgdHlwZSk7CiAKICAgICAvLyBEaWN0aW9uYXJ5IGNvbnN0cmFp
bnQgdmFsdWUuCiAgICAgRGljdGlvbmFyeSBkaWN0aW9uYXJ5VmFsdWU7CiAgICAgaWYgKG1lZGlh
VHJhY2tDb25zdHJhaW50U2V0LmdldChuYW1lLCBkaWN0aW9uYXJ5VmFsdWUpICYmICFkaWN0aW9u
YXJ5VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBkb3VibGUgbWluVmFsdWU7
CiAgICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0KCJtaW4iLCBtaW5WYWx1ZSkpCi0gICAg
ICAgICAgICBjb25zdHJhaW50LT5zZXRNaW4obWluVmFsdWUpOworICAgICAgICAgICAgY29uc3Ry
YWludC5zZXRNaW4obWluVmFsdWUpOwogCiAgICAgICAgIGRvdWJsZSBtYXhWYWx1ZTsKICAgICAg
ICAgaWYgKGRpY3Rpb25hcnlWYWx1ZS5nZXQoIm1heCIsIG1heFZhbHVlKSkKLSAgICAgICAgICAg
IGNvbnN0cmFpbnQtPnNldE1heChtYXhWYWx1ZSk7CisgICAgICAgICAgICBjb25zdHJhaW50LnNl
dE1heChtYXhWYWx1ZSk7CiAKICAgICAgICAgZG91YmxlIGV4YWN0VmFsdWU7CiAgICAgICAgIGlm
IChkaWN0aW9uYXJ5VmFsdWUuZ2V0KCJleGFjdCIsIGV4YWN0VmFsdWUpKQotICAgICAgICAgICAg
Y29uc3RyYWludC0+c2V0RXhhY3QoZXhhY3RWYWx1ZSk7CisgICAgICAgICAgICBjb25zdHJhaW50
LnNldEV4YWN0KGV4YWN0VmFsdWUpOwogCiAgICAgICAgIGRvdWJsZSBpZGVhbFZhbHVlOwogICAg
ICAgICBpZiAoZGljdGlvbmFyeVZhbHVlLmdldCgiaWRlYWwiLCBpZGVhbFZhbHVlKSkKLSAgICAg
ICAgICAgIGNvbnN0cmFpbnQtPnNldElkZWFsKGlkZWFsVmFsdWUpOworICAgICAgICAgICAgY29u
c3RyYWludC5zZXRJZGVhbChpZGVhbFZhbHVlKTsKIAotICAgICAgICBpZiAoY29uc3RyYWludC0+
aXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChjb25zdHJhaW50LmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgTE9HKE1lZGlhLCAiY3JlYXRlRG91YmxlQ29uc3RyYWludCgpIC0gaWdub3JpbmcgZG91
YmxlIGNvbnN0cmFpbnQgJyVzJyB3aXRoIGRpY3Rpb25hcnkgdmFsdWUgc2luY2UgaXQgaGFzIG5v
IHZhbGlkIG9yIHN1cHBvcnRlZCBrZXkvdmFsdWUgcGFpcnMuIiwgbmFtZS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIE51bGxv
cHQ7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gV1RGTW92ZShjb25zdHJhaW50KTsKQEAg
LTE5NCw0NCArMTk0LDQ0IEBAIHN0YXRpYyBSZWZQdHI8RG91YmxlQ29uc3RyYWludD4gY3JlYXRl
RG8KICAgICBkb3VibGUgdmFsdWU7CiAgICAgaWYgKG1lZGlhVHJhY2tDb25zdHJhaW50U2V0Lmdl
dChuYW1lLCB2YWx1ZSkpIHsKICAgICAgICAgaWYgKGNvbnN0cmFpbnRTZXRUeXBlID09IENvbnN0
cmFpbnRTZXRUeXBlOjpNYW5kYXRvcnkpCi0gICAgICAgICAgICBjb25zdHJhaW50LT5zZXRJZGVh
bCh2YWx1ZSk7CisgICAgICAgICAgICBjb25zdHJhaW50LnNldElkZWFsKHZhbHVlKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3QodmFsdWUpOworICAgICAg
ICAgICAgY29uc3RyYWludC5zZXRFeGFjdCh2YWx1ZSk7CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gV1RGTW92ZShjb25zdHJhaW50KTsKICAgICB9CiAKICAgICAvLyBJbnZhbGlkIGNvbnN0cmFp
bnQgdmFsdWUuCiAgICAgTE9HKE1lZGlhLCAiY3JlYXRlRG91YmxlQ29uc3RyYWludCgpIC0gaWdu
b3JpbmcgZG91YmxlIGNvbnN0cmFpbnQgJyVzJyBzaW5jZSBpdCBoYXMgbmVpdGhlciBhIGRpY3Rp
b25hcnkgbm9yIHNjYWxhciB2YWx1ZS4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBOdWxsb3B0OwogfQogCi1zdGF0aWMgUmVmUHRyPEludENv
bnN0cmFpbnQ+IGNyZWF0ZUludENvbnN0cmFpbnQoY29uc3QgRGljdGlvbmFyeSYgbWVkaWFUcmFj
a0NvbnN0cmFpbnRTZXQsIGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0
eXBlLCBDb25zdHJhaW50U2V0VHlwZSBjb25zdHJhaW50U2V0VHlwZSkKK3N0YXRpYyBPcHRpb25h
bDxJbnRDb25zdHJhaW50PiBjcmVhdGVJbnRDb25zdHJhaW50KGNvbnN0IERpY3Rpb25hcnkmIG1l
ZGlhVHJhY2tDb25zdHJhaW50U2V0LCBjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWlu
dFR5cGUgdHlwZSwgQ29uc3RyYWludFNldFR5cGUgY29uc3RyYWludFNldFR5cGUpCiB7Ci0gICAg
YXV0byBjb25zdHJhaW50ID0gSW50Q29uc3RyYWludDo6Y3JlYXRlKG5hbWUsIHR5cGUpOworICAg
IGF1dG8mIGNvbnN0cmFpbnQgPSBJbnRDb25zdHJhaW50OjpjcmVhdGUobmFtZSwgdHlwZSk7CiAK
ICAgICAvLyBEaWN0aW9uYXJ5IGNvbnN0cmFpbnQgdmFsdWUuCiAgICAgRGljdGlvbmFyeSBkaWN0
aW9uYXJ5VmFsdWU7CiAgICAgaWYgKG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LmdldChuYW1lLCBk
aWN0aW9uYXJ5VmFsdWUpICYmICFkaWN0aW9uYXJ5VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkg
ewogICAgICAgICBpbnQgbWluVmFsdWU7CiAgICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0
KCJtaW4iLCBtaW5WYWx1ZSkpCi0gICAgICAgICAgICBjb25zdHJhaW50LT5zZXRNaW4obWluVmFs
dWUpOworICAgICAgICAgICAgY29uc3RyYWludC5zZXRNaW4obWluVmFsdWUpOwogCiAgICAgICAg
IGludCBtYXhWYWx1ZTsKICAgICAgICAgaWYgKGRpY3Rpb25hcnlWYWx1ZS5nZXQoIm1heCIsIG1h
eFZhbHVlKSkKLSAgICAgICAgICAgIGNvbnN0cmFpbnQtPnNldE1heChtYXhWYWx1ZSk7CisgICAg
ICAgICAgICBjb25zdHJhaW50LnNldE1heChtYXhWYWx1ZSk7CiAKICAgICAgICAgaW50IGV4YWN0
VmFsdWU7CiAgICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0KCJleGFjdCIsIGV4YWN0VmFs
dWUpKQotICAgICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3QoZXhhY3RWYWx1ZSk7CisgICAg
ICAgICAgICBjb25zdHJhaW50LnNldEV4YWN0KGV4YWN0VmFsdWUpOwogCiAgICAgICAgIGludCBp
ZGVhbFZhbHVlOwogICAgICAgICBpZiAoZGljdGlvbmFyeVZhbHVlLmdldCgiaWRlYWwiLCBpZGVh
bFZhbHVlKSkKLSAgICAgICAgICAgIGNvbnN0cmFpbnQtPnNldElkZWFsKGlkZWFsVmFsdWUpOwor
ICAgICAgICAgICAgY29uc3RyYWludC5zZXRJZGVhbChpZGVhbFZhbHVlKTsKIAotICAgICAgICBp
ZiAoY29uc3RyYWludC0+aXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChjb25zdHJhaW50LmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgTE9HKE1lZGlhLCAiY3JlYXRlSW50Q29uc3RyYWludCgpIC0g
aWdub3JpbmcgbG9uZyBjb25zdHJhaW50ICclcycgd2l0aCBkaWN0aW9uYXJ5IHZhbHVlIHNpbmNl
IGl0IGhhcyBubyB2YWxpZCBvciBzdXBwb3J0ZWQga2V5L3ZhbHVlIHBhaXJzLiIsIG5hbWUudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybiBOdWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIFdURk1vdmUoY29uc3Ry
YWludCk7CkBAIC0yNDEsNTQgKzI0MSw2MyBAQCBzdGF0aWMgUmVmUHRyPEludENvbnN0cmFpbnQ+
IGNyZWF0ZUludENvCiAgICAgaW50IHZhbHVlOwogICAgIGlmIChtZWRpYVRyYWNrQ29uc3RyYWlu
dFNldC5nZXQobmFtZSwgdmFsdWUpKSB7CiAgICAgICAgIGlmIChjb25zdHJhaW50U2V0VHlwZSA9
PSBDb25zdHJhaW50U2V0VHlwZTo6TWFuZGF0b3J5KQotICAgICAgICAgICAgY29uc3RyYWludC0+
c2V0SWRlYWwodmFsdWUpOworICAgICAgICAgICAgY29uc3RyYWludC5zZXRJZGVhbCh2YWx1ZSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnN0cmFpbnQtPnNldEV4YWN0KHZhbHVlKTsK
KyAgICAgICAgICAgIGNvbnN0cmFpbnQuc2V0RXhhY3QodmFsdWUpOwogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIFdURk1vdmUoY29uc3RyYWludCk7CiAgICAgfQogCiAgICAgLy8gSW52YWxpZCBj
b25zdHJhaW50IHZhbHVlLgogICAgIExPRyhNZWRpYSwgImNyZWF0ZUludENvbnN0cmFpbnQoKSAt
IGlnbm9yaW5nIGxvbmcgY29uc3RyYWludCAnJXMnIHNpbmNlIGl0IGhhcyBuZWl0aGVyIGEgZGlj
dGlvbmFyeSBub3Igc2NhbGFyIHZhbHVlLiIsIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIE51bGxvcHQ7CiB9CiAKIHN0YXRpYyB2b2lkIHBhcnNl
TWVkaWFUcmFja0NvbnN0cmFpbnRTZXRGb3JLZXkoY29uc3QgRGljdGlvbmFyeSYgbWVkaWFUcmFj
a0NvbnN0cmFpbnRTZXQsIGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFUcmFja0NvbnN0cmFpbnRT
ZXRNYXAmIG1hcCwgQ29uc3RyYWludFNldFR5cGUgY29uc3RyYWludFNldFR5cGUpCiB7CiAgICAg
TWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJhaW50VHlwZSA9IFJlYWx0aW1lTWVkaWFTb3VyY2VT
dXBwb3J0ZWRDb25zdHJhaW50czo6Y29uc3RyYWludEZyb21OYW1lKG5hbWUpOwotCi0gICAgUmVm
UHRyPE1lZGlhQ29uc3RyYWludD4gbWVkaWFDb25zdHJhaW50OwogICAgIHN3aXRjaCAoY29uc3Ry
YWludFR5cGUpIHsKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OldpZHRoOgorICAgICAg
ICBtYXAuc2V0KGNvbnN0cmFpbnRUeXBlLCBjcmVhdGVJbnRDb25zdHJhaW50KG1lZGlhVHJhY2tD
b25zdHJhaW50U2V0LCBuYW1lLCBjb25zdHJhaW50VHlwZSwgY29uc3RyYWludFNldFR5cGUpKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQ6Cisg
ICAgICAgIG1hcC5zZXQoY29uc3RyYWludFR5cGUsIGNyZWF0ZUludENvbnN0cmFpbnQobWVkaWFU
cmFja0NvbnN0cmFpbnRTZXQsIG5hbWUsIGNvbnN0cmFpbnRUeXBlLCBjb25zdHJhaW50U2V0VHlw
ZSkpOworICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBs
ZVJhdGU6CisgICAgICAgIG1hcC5zZXQoY29uc3RyYWludFR5cGUsIGNyZWF0ZUludENvbnN0cmFp
bnQobWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIG5hbWUsIGNvbnN0cmFpbnRUeXBlLCBjb25zdHJh
aW50U2V0VHlwZSkpOworICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5
cGU6OlNhbXBsZVNpemU6Ci0gICAgICAgIG1lZGlhQ29uc3RyYWludCA9IGNyZWF0ZUludENvbnN0
cmFpbnQobWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIG5hbWUsIGNvbnN0cmFpbnRUeXBlLCBjb25z
dHJhaW50U2V0VHlwZSk7CisgICAgICAgIG1hcC5zZXQoY29uc3RyYWludFR5cGUsIGNyZWF0ZUlu
dENvbnN0cmFpbnQobWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIG5hbWUsIGNvbnN0cmFpbnRUeXBl
LCBjb25zdHJhaW50U2V0VHlwZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTWVkaWFD
b25zdHJhaW50VHlwZTo6QXNwZWN0UmF0aW86CisgICAgICAgIG1hcC5zZXQoY29uc3RyYWludFR5
cGUsIGNyZWF0ZURvdWJsZUNvbnN0cmFpbnQobWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIG5hbWUs
IGNvbnN0cmFpbnRUeXBlLCBjb25zdHJhaW50U2V0VHlwZSkpOworICAgICAgICBicmVhazsKICAg
ICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkZyYW1lUmF0ZToKKyAgICAgICAgbWFwLnNldChj
b25zdHJhaW50VHlwZSwgY3JlYXRlRG91YmxlQ29uc3RyYWludChtZWRpYVRyYWNrQ29uc3RyYWlu
dFNldCwgbmFtZSwgY29uc3RyYWludFR5cGUsIGNvbnN0cmFpbnRTZXRUeXBlKSk7CisgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6Vm9sdW1lOgotICAgICAgICBt
ZWRpYUNvbnN0cmFpbnQgPSBjcmVhdGVEb3VibGVDb25zdHJhaW50KG1lZGlhVHJhY2tDb25zdHJh
aW50U2V0LCBuYW1lLCBjb25zdHJhaW50VHlwZSwgY29uc3RyYWludFNldFR5cGUpOworICAgICAg
ICBtYXAuc2V0KGNvbnN0cmFpbnRUeXBlLCBjcmVhdGVEb3VibGVDb25zdHJhaW50KG1lZGlhVHJh
Y2tDb25zdHJhaW50U2V0LCBuYW1lLCBjb25zdHJhaW50VHlwZSwgY29uc3RyYWludFNldFR5cGUp
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkVjaG9D
YW5jZWxsYXRpb246Ci0gICAgICAgIG1lZGlhQ29uc3RyYWludCA9IGNyZWF0ZUJvb2xlYW5Db25z
dHJhaW50KG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LCBuYW1lLCBjb25zdHJhaW50VHlwZSwgY29u
c3RyYWludFNldFR5cGUpOworICAgICAgICBtYXAuc2V0KGNvbnN0cmFpbnRUeXBlLCBjcmVhdGVC
b29sZWFuQ29uc3RyYWludChtZWRpYVRyYWNrQ29uc3RyYWludFNldCwgbmFtZSwgY29uc3RyYWlu
dFR5cGUsIGNvbnN0cmFpbnRTZXRUeXBlKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdNb2RlOgorICAgICAgICBtYXAuc2V0KGNvbnN0cmFp
bnRUeXBlLCBjcmVhdGVTdHJpbmdDb25zdHJhaW50KG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LCBu
YW1lLCBjb25zdHJhaW50VHlwZSwgY29uc3RyYWludFNldFR5cGUpKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpEZXZpY2VJZDoKKyAgICAgICAgbWFwLnNl
dChjb25zdHJhaW50VHlwZSwgY3JlYXRlU3RyaW5nQ29uc3RyYWludChtZWRpYVRyYWNrQ29uc3Ry
YWludFNldCwgbmFtZSwgY29uc3RyYWludFR5cGUsIGNvbnN0cmFpbnRTZXRUeXBlKSk7CisgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6R3JvdXBJZDoKLSAgICAg
ICAgbWVkaWFDb25zdHJhaW50ID0gY3JlYXRlU3RyaW5nQ29uc3RyYWludChtZWRpYVRyYWNrQ29u
c3RyYWludFNldCwgbmFtZSwgY29uc3RyYWludFR5cGUsIGNvbnN0cmFpbnRTZXRUeXBlKTsKKyAg
ICAgICAgbWFwLnNldChjb25zdHJhaW50VHlwZSwgY3JlYXRlU3RyaW5nQ29uc3RyYWludChtZWRp
YVRyYWNrQ29uc3RyYWludFNldCwgbmFtZSwgY29uc3RyYWludFR5cGUsIGNvbnN0cmFpbnRTZXRU
eXBlKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpV
bmtub3duOgotICAgICAgICBMT0coTWVkaWEsICJwYXJzZU1lZGlhVHJhY2tDb25zdHJhaW50U2V0
Rm9yS2V5KCkgLSBmb3VuZCB1bnN1cHBvcnRlZCBjb25zdHJhaW50ICclcycuIiwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgbWVkaWFDb25zdHJhaW50ID0gVW5rbm93bkNvbnN0cmFpbnQ6
OmNyZWF0ZShuYW1lLCBjb25zdHJhaW50VHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBM
T0coTWVkaWEsICJwYXJzZU1lZGlhVHJhY2tDb25zdHJhaW50U2V0Rm9yS2V5KCkgLSBpZ25vcmlu
ZyB1bnN1cHBvcnRlZCBjb25zdHJhaW50ICclcycuIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBtYXAuYWRkKG5hbWUsIFdURk1vdmUobWVk
aWFDb25zdHJhaW50KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhcnNlQWR2YW5jZWRDb25zdHJhaW50
cyhjb25zdCBEaWN0aW9uYXJ5JiBtZWRpYVRyYWNrQ29uc3RyYWludHMsIFZlY3RvcjxNZWRpYVRy
YWNrQ29uc3RyYWludFNldE1hcD4mIGFkdmFuY2VkQ29uc3RyYWludHMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vQ2FwdHVyZURl
dmljZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyMDYyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDE2ICs3MiwxOCBAQCBib29sIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpjYXB0dXJlRGV2
aWNlCiAKIGJvb2wgQ2FwdHVyZURldmljZU1hbmFnZXI6OnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVk
aWFUeXBlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgTWVkaWFDb25zdHJh
aW50cyYgY29uc3RyYWludHMsIGNvbnN0IENhcHR1cmVTZXNzaW9uSW5mbyogc2Vzc2lvbiwgU3Ry
aW5nJiBpbnZhbGlkQ29uc3RyYWludCkKIHsKLSAgICBhdXRvJiBtYW5kYXRvcnlDb25zdHJhaW50
cyA9IGNvbnN0cmFpbnRzLm1hbmRhdG9yeUNvbnN0cmFpbnRzKCk7Ci0gICAgZm9yIChhdXRvJiBu
YW1lQ29uc3RyYWludFBhaXIgOiBtYW5kYXRvcnlDb25zdHJhaW50cykgewotICAgICAgICBpZiAo
c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChzZXNzaW9uLCB0eXBlLCAqbmFtZUNvbnN0cmFpbnRQ
YWlyLnZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGludmFsaWRDb25zdHJhaW50
ID0gZW1wdHlTdHJpbmcoKTsKKyAgICBjb25zdHJhaW50cy5tYW5kYXRvcnlDb25zdHJhaW50cygp
LmZpbHRlcihbJl0oY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KSB7CisgICAgICAg
IGlmICghc2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChzZXNzaW9uLCB0eXBlLCBjb25zdHJhaW50
KSkgeworICAgICAgICAgICAgaW52YWxpZENvbnN0cmFpbnQgPSBjb25zdHJhaW50Lm5hbWUoKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgaW52YWxpZENv
bnN0cmFpbnQgPSBuYW1lQ29uc3RyYWludFBhaXIua2V5OwogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQorICAgIH0pOworCisgICAgcmV0dXJuIGludmFsaWRDb25zdHJhaW50LmlzRW1wdHko
KTsKIAotICAgIHJldHVybiB0cnVlOwogfQogCiBWZWN0b3I8UmVmUHRyPFJlYWx0aW1lTWVkaWFT
b3VyY2U+PiBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNvdXJjZXNGb3JUeXBlQW5kQ29uc3Ry
YWludHMoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBNZWRpYUNvbnN0cmFpbnRzJiBj
b25zdHJhaW50cykKQEAgLTE1Myw3ICsxNTUsNyBAQCBzdGF0aWMgaW5saW5lIFJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5nCiBib29sIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzZXNzaW9uU3VwcG9y
dHNDb25zdHJhaW50KGNvbnN0IENhcHR1cmVTZXNzaW9uSW5mbyosIFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGUgdHlwZSwgY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KQogewogICAg
IGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cyYgc3VwcG9ydGVk
Q29uc3RyYWludHMgPSBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5zdXBw
b3J0ZWRDb25zdHJhaW50cygpOwotICAgIE1lZGlhQ29uc3RyYWludFR5cGUgY29uc3RyYWludFR5
cGUgPSBjb25zdHJhaW50LnR5cGUoKTsKKyAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0cmFp
bnRUeXBlID0gY29uc3RyYWludC5jb25zdHJhaW50VHlwZSgpOwogICAgIGlmICghc3VwcG9ydGVk
Q29uc3RyYWludHMuc3VwcG9ydHNDb25zdHJhaW50KGNvbnN0cmFpbnRUeXBlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0xNzYsNyArMTc4LDcgQEAgYm9vbCBDYXB0dXJlRGV2aWNlTWFu
YWdlcjo6c2Vzc2lvblN1cHBvcgogCiAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzkzLiBIYW5kbGUgc2VxdWVuY2Ugb2YgZmFjaW5n
TW9kZSBjb25zdHJhaW50cy4KICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXhhY3RGYWNpbmdNb2Rl
OwotICAgICAgICBpZiAoIWNvbnN0cmFpbnQuZ2V0RXhhY3QoZXhhY3RGYWNpbmdNb2RlKSkKKyAg
ICAgICAgaWYgKCFkb3duY2FzdDxjb25zdCBTdHJpbmdDb25zdHJhaW50Pihjb25zdHJhaW50KS5n
ZXRFeGFjdChleGFjdEZhY2luZ01vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIHJldHVybiBiZXN0RGV2aWNlRm9yRmFjaW5nTW9kZShmYWNpbmdNb2RlRnJvbVN0cmlu
ZyhleGFjdEZhY2luZ01vZGVbMF0pKTsKQEAgLTE5MiwxNSArMTk0LDE1IEBAIGJvb2wgQ2FwdHVy
ZURldmljZU1hbmFnZXI6OmlzU3VwcG9ydGVkRnIKICAgICBib29sIGlzU3VwcG9ydGVkID0gdHJ1
ZTsKIAogICAgIGludCBtaW4gPSAwOwotICAgIGlmIChjb25zdHJhaW50LmdldE1pbihtaW4pKQor
ICAgIGlmIChkb3duY2FzdDxjb25zdCBJbnRDb25zdHJhaW50Pihjb25zdHJhaW50KS5nZXRNaW4o
bWluKSkKICAgICAgICAgaXNTdXBwb3J0ZWQgJj0gbWluID4gNjA7CiAKICAgICBpbnQgbWF4ID0g
NjA7Ci0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0TWF4KG1heCkpCisgICAgaWYgKGRvd25jYXN0PGNv
bnN0IEludENvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmdldE1heChtYXgpKQogICAgICAgICBpc1N1
cHBvcnRlZCAmPSBtYXggPCBtaW47CiAKICAgICBpbnQgZXhhY3Q7Ci0gICAgaWYgKGNvbnN0cmFp
bnQuZ2V0RXhhY3QoZXhhY3QpKQorICAgIGlmIChkb3duY2FzdDxjb25zdCBJbnRDb25zdHJhaW50
Pihjb25zdHJhaW50KS5nZXRFeGFjdChleGFjdCkpCiAgICAgICAgIGlzU3VwcG9ydGVkICY9IChl
eGFjdCA8IG1pbiB8fCBleGFjdCA+IG1heCk7CiAKICAgICByZXR1cm4gaXNTdXBwb3J0ZWQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYUNvbnN0cmFpbnRzLmNwcAkocmV2aXNpb24gMjA2MjUzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDEwICszNCwxMSBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW5jbHVkZSAi
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdXBwb3J0ZWRDb25zdHJhaW50cy5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8TWVkaWFDb25zdHJhaW50PiBNZWRpYUNvbnN0
cmFpbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUpCitNZWRpYUNvbnN0cmFpbnQmIE1lZGlh
Q29uc3RyYWludDo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBNZWRp
YUNvbnN0cmFpbnRUeXBlIGNvbnN0cmFpbnRUeXBlID0gUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBv
cnRlZENvbnN0cmFpbnRzOjpjb25zdHJhaW50RnJvbU5hbWUobmFtZSk7CiAKQEAgLTY1LDUxICs2
Niw2IEBAIFJlZjxNZWRpYUNvbnN0cmFpbnQ+IE1lZGlhQ29uc3RyYWludDo6Y3IKICAgICByZXR1
cm4gTWVkaWFDb25zdHJhaW50OjpjcmVhdGUoU3RyaW5nKCkpOwogfQogCi1SZWY8TWVkaWFDb25z
dHJhaW50PiBNZWRpYUNvbnN0cmFpbnQ6OmNvcHkoKSBjb25zdAotewotICAgIHJldHVybiBNZWRp
YUNvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKCkpOwotfQotCi1SZWY8TWVkaWFDb25zdHJhaW50PiBJ
bnRDb25zdHJhaW50Ojpjb3B5KCkgY29uc3QKLXsKLSAgICBhdXRvIGNvcHkgPSBJbnRDb25zdHJh
aW50OjpjcmVhdGUobmFtZSgpLCB0eXBlKCkpOwotICAgIGNvcHktPm1fbWluID0gbV9taW47Ci0g
ICAgY29weS0+bV9tYXggPSBtX21heDsKLSAgICBjb3B5LT5tX2V4YWN0ID0gbV9leGFjdDsKLSAg
ICBjb3B5LT5tX2lkZWFsID0gbV9pZGVhbDsKLQotICAgIHJldHVybiBjb3B5LmxlYWtSZWYoKTsK
LX0KLQotUmVmPE1lZGlhQ29uc3RyYWludD4gRG91YmxlQ29uc3RyYWludDo6Y29weSgpIGNvbnN0
Ci17Ci0gICAgYXV0byBjb3B5ID0gRG91YmxlQ29uc3RyYWludDo6Y3JlYXRlKG5hbWUoKSwgdHlw
ZSgpKTsKLSAgICBjb3B5LT5tX21pbiA9IG1fbWluOwotICAgIGNvcHktPm1fbWF4ID0gbV9tYXg7
Ci0gICAgY29weS0+bV9leGFjdCA9IG1fZXhhY3Q7Ci0gICAgY29weS0+bV9pZGVhbCA9IG1faWRl
YWw7Ci0gICAgCi0gICAgcmV0dXJuIGNvcHkubGVha1JlZigpOwotfQotCi1SZWY8TWVkaWFDb25z
dHJhaW50PiBCb29sZWFuQ29uc3RyYWludDo6Y29weSgpIGNvbnN0Ci17Ci0gICAgYXV0byBjb3B5
ID0gQm9vbGVhbkNvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKCksIHR5cGUoKSk7Ci0gICAgY29weS0+
bV9leGFjdCA9IG1fZXhhY3Q7Ci0gICAgY29weS0+bV9pZGVhbCA9IG1faWRlYWw7Ci0KLSAgICBy
ZXR1cm4gY29weS5sZWFrUmVmKCk7Ci19Ci0KLVJlZjxNZWRpYUNvbnN0cmFpbnQ+IFN0cmluZ0Nv
bnN0cmFpbnQ6OmNvcHkoKSBjb25zdAotewotICAgIGF1dG8gY29weSA9IFN0cmluZ0NvbnN0cmFp
bnQ6OmNyZWF0ZShuYW1lKCksIHR5cGUoKSk7Ci0gICAgY29weS0+bV9leGFjdCA9IG1fZXhhY3Q7
Ci0gICAgY29weS0+bV9pZGVhbCA9IG1faWRlYWw7Ci0KLSAgICByZXR1cm4gY29weS5sZWFrUmVm
KCk7Ci19Ci0KIGJvb2wgQm9vbGVhbkNvbnN0cmFpbnQ6OmdldEV4YWN0KGJvb2wmIGV4YWN0KSBj
b25zdAogewogICAgIGlmICghbV9leGFjdCkKQEAgLTE2OSwxNSArMTI1LDE1IEBAIGJvb2wgU3Ry
aW5nQ29uc3RyYWludDo6Z2V0SWRlYWwoVmVjdG9yPFMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Y29uc3QgU3RyaW5nJiBTdHJpbmdDb25zdHJhaW50OjpmaW5kKHN0ZDo6ZnVuY3Rpb248Ym9vbChD
b25zdHJhaW50VHlwZSwgY29uc3QgU3RyaW5nJik+IGZpbHRlcikgY29uc3QKK2NvbnN0IFN0cmlu
ZyYgU3RyaW5nQ29uc3RyYWludDo6ZmluZChzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgU3RyaW5n
Jik+IGZpbHRlcikgY29uc3QKIHsKICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX2V4YWN0
KSB7Ci0gICAgICAgIGlmIChmaWx0ZXIoQ29uc3RyYWludFR5cGU6OkV4YWN0Q29uc3RyYWludCwg
Y29uc3RyYWludCkpCisgICAgICAgIGlmIChmaWx0ZXIoY29uc3RyYWludCkpCiAgICAgICAgICAg
ICByZXR1cm4gY29uc3RyYWludDsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQg
OiBtX2lkZWFsKSB7Ci0gICAgICAgIGlmIChmaWx0ZXIoQ29uc3RyYWludFR5cGU6OklkZWFsQ29u
c3RyYWludCwgY29uc3RyYWludCkpCisgICAgICAgIGlmIChmaWx0ZXIoY29uc3RyYWludCkpCiAg
ICAgICAgICAgICByZXR1cm4gY29uc3RyYWludDsKICAgICB9CiAgICAgCkBAIC0yMjIsMTEgKzE3
OCwxNCBAQCBkb3VibGUgU3RyaW5nQ29uc3RyYWludDo6Zml0bmVzc0Rpc3RhbmNlCiAKIHZvaWQg
U3RyaW5nQ29uc3RyYWludDo6bWVyZ2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBvdGhlcikKIHsK
KyAgICBBU1NFUlQob3RoZXIuaXNTdHJpbmcoKSk7CisgICAgY29uc3QgU3RyaW5nQ29uc3RyYWlu
dCYgdHlwZWRPdGhlciA9IGRvd25jYXN0PFN0cmluZ0NvbnN0cmFpbnQ+KG90aGVyKTsKKwogICAg
IGlmIChvdGhlci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxTdHJp
bmc+IHZhbHVlczsKLSAgICBpZiAob3RoZXIuZ2V0RXhhY3QodmFsdWVzKSkgeworICAgIGlmICh0
eXBlZE90aGVyLmdldEV4YWN0KHZhbHVlcykpIHsKICAgICAgICAgaWYgKG1fZXhhY3QuaXNFbXB0
eSgpKQogICAgICAgICAgICAgbV9leGFjdCA9IHZhbHVlczsKICAgICAgICAgZWxzZSB7CkBAIC0y
MzcsNyArMTk2LDcgQEAgdm9pZCBTdHJpbmdDb25zdHJhaW50OjptZXJnZShjb25zdCBNZWRpYQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG90aGVyLmdldElkZWFsKHZhbHVlcykpIHsKKyAg
ICBpZiAodHlwZWRPdGhlci5nZXRJZGVhbCh2YWx1ZXMpKSB7CiAgICAgICAgIGlmIChtX2lkZWFs
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1faWRlYWwgPSB2YWx1ZXM7CiAgICAgICAgIGVsc2Ug
ewpAQCAtMjUxLDI2ICsyMTAsMjIzIEBAIHZvaWQgU3RyaW5nQ29uc3RyYWludDo6bWVyZ2UoY29u
c3QgTWVkaWEKIAogdm9pZCBGbGF0dGVuZWRDb25zdHJhaW50OjpzZXQoY29uc3QgTWVkaWFDb25z
dHJhaW50JiBjb25zdHJhaW50KQogewotICAgIGZvciAoYXV0byBleGlzdGluZ0NvbnN0cmFpbnQg
OiBtX2NvbnN0cmFpbnRzKSB7Ci0gICAgICAgIGlmIChleGlzdGluZ0NvbnN0cmFpbnQtPnR5cGUo
KSA9PSBjb25zdHJhaW50LnR5cGUoKSkgewotICAgICAgICAgICAgZXhpc3RpbmdDb25zdHJhaW50
ID0gY29uc3RyYWludC5jb3B5KCk7CisgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50
cykgeworICAgICAgICBpZiAodmFyaWFudC5jb25zdHJhaW50VHlwZSgpID09IGNvbnN0cmFpbnQu
Y29uc3RyYWludFR5cGUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgIH0K
IAotICAgIG1fY29uc3RyYWludHMuYXBwZW5kKGNvbnN0cmFpbnQuY29weSgpKTsKKyAgICBtX3Zh
cmlhbnRzLmFwcGVuZChDb25zdHJhaW50SG9sZGVyOjpjcmVhdGUoY29uc3RyYWludCkpOwogfQog
CiB2b2lkIEZsYXR0ZW5lZENvbnN0cmFpbnQ6Om1lcmdlKGNvbnN0IE1lZGlhQ29uc3RyYWludCYg
Y29uc3RyYWludCkKIHsKLSAgICBmb3IgKGF1dG8gZXhpc3RpbmdDb25zdHJhaW50IDogbV9jb25z
dHJhaW50cykgewotICAgICAgICBpZiAoZXhpc3RpbmdDb25zdHJhaW50LT50eXBlKCkgPT0gY29u
c3RyYWludC50eXBlKCkpIHsKLSAgICAgICAgICAgIGV4aXN0aW5nQ29uc3RyYWludC0+bWVyZ2Uo
Y29uc3RyYWludCk7CisgICAgZm9yIChhdXRvJiB2YXJpYW50IDogKnRoaXMpIHsKKyAgICAgICAg
aWYgKHZhcmlhbnQuY29uc3RyYWludFR5cGUoKSAhPSBjb25zdHJhaW50LmNvbnN0cmFpbnRUeXBl
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzd2l0Y2ggKHZhcmlhbnQuZGF0
YVR5cGUoKSkgeworICAgICAgICBjYXNlIE1lZGlhQ29uc3RyYWludDo6RGF0YVR5cGU6OkludGVn
ZXI6CisgICAgICAgICAgICBBU1NFUlQoY29uc3RyYWludC5pc0ludCgpKTsKKyAgICAgICAgICAg
IGRvd25jYXN0PGNvbnN0IEludENvbnN0cmFpbnQ+KHZhcmlhbnQpLm1lcmdlKGRvd25jYXN0PGNv
bnN0IEludENvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnQ6OkRhdGFUeXBlOjpEb3VibGU6CisgICAgICAgICAg
ICBBU1NFUlQoY29uc3RyYWludC5pc0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGRvd25jYXN0PGNv
bnN0IERvdWJsZUNvbnN0cmFpbnQ+KHZhcmlhbnQpLm1lcmdlKGRvd25jYXN0PGNvbnN0IERvdWJs
ZUNvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnQ6OkRhdGFUeXBlOjpCb29sZWFuOgorICAgICAgICAgICAgQVNT
RVJUKGNvbnN0cmFpbnQuaXNCb29sZWFuKCkpOworICAgICAgICAgICAgZG93bmNhc3Q8Y29uc3Qg
Qm9vbGVhbkNvbnN0cmFpbnQ+KHZhcmlhbnQpLm1lcmdlKGRvd25jYXN0PGNvbnN0IEJvb2xlYW5D
b25zdHJhaW50Pihjb25zdHJhaW50KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNh
c2UgTWVkaWFDb25zdHJhaW50OjpEYXRhVHlwZTo6U3RyaW5nOgorICAgICAgICAgICAgQVNTRVJU
KGNvbnN0cmFpbnQuaXNTdHJpbmcoKSk7CisgICAgICAgICAgICBkb3duY2FzdDxjb25zdCBTdHJp
bmdDb25zdHJhaW50Pih2YXJpYW50KS5tZXJnZShkb3duY2FzdDxjb25zdCBTdHJpbmdDb25zdHJh
aW50Pihjb25zdHJhaW50KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgTWVk
aWFDb25zdHJhaW50OjpEYXRhVHlwZTo6Tm9uZToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9j
b25zdHJhaW50cy5hcHBlbmQoY29uc3RyYWludC5jb3B5KCkpOworICAgIG1fdmFyaWFudHMuYXBw
ZW5kKENvbnN0cmFpbnRIb2xkZXI6OmNyZWF0ZShjb25zdHJhaW50KSk7Cit9CisKK3ZvaWQgTWVk
aWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6OmZvckVhY2goc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0
IE1lZGlhQ29uc3RyYWludCYpPiBjYWxsYmFjaykgY29uc3QKK3sKKyAgICBpZiAobV93aWR0aCAm
JiAhbV93aWR0aC0+aXNFbXB0eSgpKQorICAgICAgICBjYWxsYmFjaygqbV93aWR0aCk7CisgICAg
aWYgKG1faGVpZ2h0ICYmICFtX2hlaWdodC0+aXNFbXB0eSgpKQorICAgICAgICBjYWxsYmFjaygq
bV9oZWlnaHQpOworICAgIGlmIChtX3NhbXBsZVJhdGUgJiYgIW1fc2FtcGxlUmF0ZS0+aXNFbXB0
eSgpKQorICAgICAgICBjYWxsYmFjaygqbV9zYW1wbGVSYXRlKTsKKyAgICBpZiAobV9zYW1wbGVT
aXplICYmICFtX3NhbXBsZVNpemUtPmlzRW1wdHkoKSkKKyAgICAgICAgY2FsbGJhY2soKm1fc2Ft
cGxlU2l6ZSk7CisKKyAgICBpZiAobV9hc3BlY3RSYXRpbyAmJiAhbV9hc3BlY3RSYXRpby0+aXNF
bXB0eSgpKQorICAgICAgICBjYWxsYmFjaygqbV9hc3BlY3RSYXRpbyk7CisgICAgaWYgKG1fZnJh
bWVSYXRlICYmICFtX2ZyYW1lUmF0ZS0+aXNFbXB0eSgpKQorICAgICAgICBjYWxsYmFjaygqbV9m
cmFtZVJhdGUpOworICAgIGlmIChtX3ZvbHVtZSAmJiAhbV92b2x1bWUtPmlzRW1wdHkoKSkKKyAg
ICAgICAgY2FsbGJhY2soKm1fdm9sdW1lKTsKKworICAgIGlmIChtX2VjaG9DYW5jZWxsYXRpb24g
JiYgIW1fZWNob0NhbmNlbGxhdGlvbi0+aXNFbXB0eSgpKQorICAgICAgICBjYWxsYmFjaygqbV9l
Y2hvQ2FuY2VsbGF0aW9uKTsKKworICAgIGlmIChtX2ZhY2luZ01vZGUgJiYgIW1fZmFjaW5nTW9k
ZS0+aXNFbXB0eSgpKQorICAgICAgICBjYWxsYmFjaygqbV9mYWNpbmdNb2RlKTsKKyAgICBpZiAo
bV9kZXZpY2VJZCAmJiAhbV9kZXZpY2VJZC0+aXNFbXB0eSgpKQorICAgICAgICBjYWxsYmFjaygq
bV9kZXZpY2VJZCk7CisgICAgaWYgKG1fZ3JvdXBJZCAmJiAhbV9ncm91cElkLT5pc0VtcHR5KCkp
CisgICAgICAgIGNhbGxiYWNrKCptX2dyb3VwSWQpOworfQorCit2b2lkIE1lZGlhVHJhY2tDb25z
dHJhaW50U2V0TWFwOjpmaWx0ZXIoc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IE1lZGlhQ29uc3Ry
YWludCYpPiBjYWxsYmFjaykgY29uc3QKK3sKKyAgICBpZiAobV93aWR0aCAmJiAhbV93aWR0aC0+
aXNFbXB0eSgpICYmIGNhbGxiYWNrKCptX3dpZHRoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChtX2hlaWdodCAmJiAhbV9oZWlnaHQtPmlzRW1wdHkoKSAmJiBjYWxsYmFjaygqbV9oZWlnaHQp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc2FtcGxlUmF0ZSAmJiAhbV9zYW1wbGVSYXRl
LT5pc0VtcHR5KCkgJiYgY2FsbGJhY2soKm1fc2FtcGxlUmF0ZSkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAobV9zYW1wbGVTaXplICYmICFtX3NhbXBsZVNpemUtPmlzRW1wdHkoKSAmJiBjYWxs
YmFjaygqbV9zYW1wbGVTaXplKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fYXNwZWN0
UmF0aW8gJiYgIW1fYXNwZWN0UmF0aW8tPmlzRW1wdHkoKSAmJiBjYWxsYmFjaygqbV9hc3BlY3RS
YXRpbykpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9mcmFtZVJhdGUgJiYgIW1fZnJhbWVS
YXRlLT5pc0VtcHR5KCkgJiYgY2FsbGJhY2soKm1fZnJhbWVSYXRlKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChtX3ZvbHVtZSAmJiAhbV92b2x1bWUtPmlzRW1wdHkoKSAmJiBjYWxsYmFjaygq
bV92b2x1bWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9lY2hvQ2FuY2VsbGF0aW9u
ICYmICFtX2VjaG9DYW5jZWxsYXRpb24tPmlzRW1wdHkoKSAmJiBjYWxsYmFjaygqbV9lY2hvQ2Fu
Y2VsbGF0aW9uKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZmFjaW5nTW9kZSAmJiAh
bV9mYWNpbmdNb2RlLT5pc0VtcHR5KCkgJiYgY2FsbGJhY2soKm1fZmFjaW5nTW9kZSkpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAobV9kZXZpY2VJZCAmJiAhbV9kZXZpY2VJZC0+aXNFbXB0eSgp
ICYmIGNhbGxiYWNrKCptX2RldmljZUlkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2dy
b3VwSWQgJiYgIW1fZ3JvdXBJZC0+aXNFbXB0eSgpICYmIGNhbGxiYWNrKCptX2dyb3VwSWQpKQor
ICAgICAgICByZXR1cm47Cit9CisKK2Jvb2wgTWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6Omlz
RW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiAoIW1fd2lkdGggfHwgbV93aWR0aC0+aXNFbXB0
eSgpKQorICAgICAgICAmJiAoIW1faGVpZ2h0IHx8IG1faGVpZ2h0LT5pc0VtcHR5KCkpCisgICAg
ICAgICYmICghbV9zYW1wbGVSYXRlIHx8IG1fc2FtcGxlUmF0ZS0+aXNFbXB0eSgpKQorICAgICAg
ICAmJiAoIW1fc2FtcGxlU2l6ZSB8fCBtX3NhbXBsZVNpemUtPmlzRW1wdHkoKSkKKyAgICAgICAg
JiYgKCFtX2FzcGVjdFJhdGlvIHx8IG1fYXNwZWN0UmF0aW8tPmlzRW1wdHkoKSkKKyAgICAgICAg
JiYgKCFtX2ZyYW1lUmF0ZSB8fCBtX2ZyYW1lUmF0ZS0+aXNFbXB0eSgpKQorICAgICAgICAmJiAo
IW1fdm9sdW1lIHx8IG1fdm9sdW1lLT5pc0VtcHR5KCkpCisgICAgICAgICYmICghbV9lY2hvQ2Fu
Y2VsbGF0aW9uIHx8IG1fZWNob0NhbmNlbGxhdGlvbi0+aXNFbXB0eSgpKQorICAgICAgICAmJiAo
IW1fZmFjaW5nTW9kZSB8fCBtX2ZhY2luZ01vZGUtPmlzRW1wdHkoKSkKKyAgICAgICAgJiYgKCFt
X2RldmljZUlkIHx8IG1fZGV2aWNlSWQtPmlzRW1wdHkoKSkKKyAgICAgICAgJiYgKCFtX2dyb3Vw
SWQgfHwgbV9ncm91cElkLT5pc0VtcHR5KCkpOworfQorCit2b2lkIE1lZGlhVHJhY2tDb25zdHJh
aW50U2V0TWFwOjpzZXQoTWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJhaW50VHlwZSwgT3B0aW9u
YWw8SW50Q29uc3RyYWludD4mJiBjb25zdHJhaW50KQoreworICAgIHN3aXRjaCAoY29uc3RyYWlu
dFR5cGUpIHsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OldpZHRoOgorICAgICAgICBt
X3dpZHRoID0gV1RGTW92ZShjb25zdHJhaW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQ6CisgICAgICAgIG1faGVpZ2h0ID0gV1RGTW92ZShj
b25zdHJhaW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBl
OjpTYW1wbGVSYXRlOgorICAgICAgICBtX3NhbXBsZVJhdGUgPSBXVEZNb3ZlKGNvbnN0cmFpbnQp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVNp
emU6CisgICAgICAgIG1fc2FtcGxlU2l6ZSA9IFdURk1vdmUoY29uc3RyYWludCk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpBc3BlY3RSYXRpbzoKKyAg
ICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkZyYW1lUmF0ZToKKyAgICBjYXNlIE1lZGlhQ29u
c3RyYWludFR5cGU6OlZvbHVtZToKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkVjaG9D
YW5jZWxsYXRpb246CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdNb2RlOgor
ICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RGV2aWNlSWQ6CisgICAgY2FzZSBNZWRpYUNv
bnN0cmFpbnRUeXBlOjpHcm91cElkOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6VW5r
bm93bjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKwordm9pZCBNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcDo6c2V0KE1lZGlhQ29uc3Ry
YWludFR5cGUgY29uc3RyYWludFR5cGUsIE9wdGlvbmFsPERvdWJsZUNvbnN0cmFpbnQ+JiYgY29u
c3RyYWludCkKK3sKKyAgICBzd2l0Y2ggKGNvbnN0cmFpbnRUeXBlKSB7CisgICAgY2FzZSBNZWRp
YUNvbnN0cmFpbnRUeXBlOjpBc3BlY3RSYXRpbzoKKyAgICAgICAgbV9hc3BlY3RSYXRpbyA9IFdU
Rk1vdmUoY29uc3RyYWludCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFDb25zdHJh
aW50VHlwZTo6RnJhbWVSYXRlOgorICAgICAgICBtX2ZyYW1lUmF0ZSA9IFdURk1vdmUoY29uc3Ry
YWludCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6Vm9s
dW1lOgorICAgICAgICBtX3ZvbHVtZSA9IFdURk1vdmUoY29uc3RyYWludCk7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpXaWR0aDoKKyAgICBjYXNlIE1l
ZGlhQ29uc3RyYWludFR5cGU6OkhlaWdodDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6
OlNhbXBsZVJhdGU6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVTaXplOgor
ICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RWNob0NhbmNlbGxhdGlvbjoKKyAgICBjYXNl
IE1lZGlhQ29uc3RyYWludFR5cGU6OkZhY2luZ01vZGU6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFp
bnRUeXBlOjpEZXZpY2VJZDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Okdyb3VwSWQ6
CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpVbmtub3duOgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIE1lZGlhVHJh
Y2tDb25zdHJhaW50U2V0TWFwOjpzZXQoTWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJhaW50VHlw
ZSwgT3B0aW9uYWw8Qm9vbGVhbkNvbnN0cmFpbnQ+JiYgY29uc3RyYWludCkKK3sKKyAgICBzd2l0
Y2ggKGNvbnN0cmFpbnRUeXBlKSB7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpFY2hv
Q2FuY2VsbGF0aW9uOgorICAgICAgICBtX2VjaG9DYW5jZWxsYXRpb24gPSBXVEZNb3ZlKGNvbnN0
cmFpbnQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6
V2lkdGg6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQ6CisgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVSYXRlOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50
VHlwZTo6U2FtcGxlU2l6ZToKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkFzcGVjdFJh
dGlvOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RnJhbWVSYXRlOgorICAgIGNhc2Ug
TWVkaWFDb25zdHJhaW50VHlwZTo6Vm9sdW1lOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlw
ZTo6RmFjaW5nTW9kZToKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkRldmljZUlkOgor
ICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6R3JvdXBJZDoKKyAgICBjYXNlIE1lZGlhQ29u
c3RyYWludFR5cGU6OlVua25vd246CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6
OnNldChNZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0cmFpbnRUeXBlLCBPcHRpb25hbDxTdHJpbmdD
b25zdHJhaW50PiYmIGNvbnN0cmFpbnQpCit7CisgICAgc3dpdGNoIChjb25zdHJhaW50VHlwZSkg
eworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RmFjaW5nTW9kZToKKyAgICAgICAgbV9m
YWNpbmdNb2RlID0gV1RGTW92ZShjb25zdHJhaW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpEZXZpY2VJZDoKKyAgICAgICAgbV9kZXZpY2VJZCA9IFdU
Rk1vdmUoY29uc3RyYWludCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFDb25zdHJh
aW50VHlwZTo6R3JvdXBJZDoKKyAgICAgICAgbV9ncm91cElkID0gV1RGTW92ZShjb25zdHJhaW50
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OldpZHRo
OgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6SGVpZ2h0OgorICAgIGNhc2UgTWVkaWFD
b25zdHJhaW50VHlwZTo6U2FtcGxlUmF0ZToKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6
OlNhbXBsZVNpemU6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpBc3BlY3RSYXRpbzoK
KyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkZyYW1lUmF0ZToKKyAgICBjYXNlIE1lZGlh
Q29uc3RyYWludFR5cGU6OlZvbHVtZToKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkVj
aG9DYW5jZWxsYXRpb246CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpVbmtub3duOgor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0
cmFpbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFDb25zdHJhaW50cy5oCShyZXZpc2lvbiAyMDYyNTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDgzICszOCw2MyBAQAogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJp
YW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE1lZGlhQ29u
c3RyYWludCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhQ29uc3RyYWludD4geworY2xhc3MgTWVk
aWFDb25zdHJhaW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhQ29uc3RyYWludD4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBNZWRpYUNvbnN0cmFpbnQmIGNyZWF0
ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICBNZWRpYUNvbnN0cmFpbnQoY29uc3QgTWVkaWFD
b25zdHJhaW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fbmFtZSA9IG90aGVyLm1fbmFtZTsK
KyAgICAgICAgbV9jb25zdHJhaW50VHlwZSA9IG90aGVyLm1fY29uc3RyYWludFR5cGU7CisgICAg
ICAgIG1fZGF0YVR5cGUgPSBvdGhlci5tX2RhdGFUeXBlOworICAgIH0KIAotICAgIGVudW0gY2xh
c3MgQ29uc3RyYWludFR5cGUgeyBFeGFjdENvbnN0cmFpbnQsIElkZWFsQ29uc3RyYWludCwgTWlu
Q29uc3RyYWludCwgTWF4Q29uc3RyYWludCB9OworICAgIGVudW0gY2xhc3MgRGF0YVR5cGUgeyBO
b25lLCBJbnRlZ2VyLCBEb3VibGUsIEJvb2xlYW4sIFN0cmluZyB9OwogCiAgICAgdmlydHVhbCB+
TWVkaWFDb25zdHJhaW50KCkgeyB9OwogCi0gICAgdmlydHVhbCBSZWY8TWVkaWFDb25zdHJhaW50
PiBjb3B5KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGlzTWFuZGF0b3J5KCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBi
b29sIGdldE1pbihpbnQmKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0TWF4KGludCYpIGNvbnN0IHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRFeGFjdChpbnQm
KSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0SWRlYWwoaW50JikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZhbGlkRm9yUmFuZ2UoaW50LCBpbnQpIGNv
bnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
aW50IGZpbmQoc3RkOjpmdW5jdGlvbjxib29sKENvbnN0cmFpbnRUeXBlLCBpbnQpPikgY29uc3Qg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBm
aXRuZXNzRGlzdGFuY2UoaW50LCBpbnQpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiAwOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0TWluKGRvdWJsZSYpIGNvbnN0IHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRN
YXgoZG91YmxlJikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBib29sIGdldEV4YWN0KGRvdWJsZSYpIGNvbnN0IHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRJZGVhbChkb3Vi
bGUmKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgdmFsaWRGb3JSYW5nZShkb3VibGUsIGRvdWJsZSkgY29uc3QgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBkb3VibGUgZmluZChz
dGQ6OmZ1bmN0aW9uPGJvb2woQ29uc3RyYWludFR5cGUsIGRvdWJsZSk+KSBjb25zdCB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgZG91YmxlIGZpdG5lc3NE
aXN0YW5jZShkb3VibGUsIGRvdWJsZSkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBnZXRNaW4oYm9vbCYpIGNvbnN0IHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRNYXgo
Ym9vbCYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBnZXRFeGFjdChib29sJikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGdldElkZWFsKGJvb2wmKSBjb25z
dCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGRv
dWJsZSBmaXRuZXNzRGlzdGFuY2UoYm9vbCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
cmV0dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBnZXRNaW4oVmVjdG9yPFN0cmluZz4mKSBj
b25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgZ2V0TWF4KFZlY3RvcjxTdHJpbmc+JikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGdldEV4YWN0KFZlY3RvcjxTdHJp
bmc+JikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGdldElkZWFsKFZlY3RvcjxTdHJpbmc+JikgY29uc3QgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIGZp
bmQoc3RkOjpmdW5jdGlvbjxib29sKENvbnN0cmFpbnRUeXBlLCBjb25zdCBTdHJpbmcmKT4pIGNv
bnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBlbXB0eVN0cmluZygpOyB9Ci0KLSAg
ICB2aXJ0dWFsIGRvdWJsZSBmaXRuZXNzRGlzdGFuY2UoY29uc3QgU3RyaW5nJikgY29uc3QgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBmaXRu
ZXNzRGlzdGFuY2UoY29uc3QgVmVjdG9yPFN0cmluZz4mKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gMDsgfQotCi0gICAgdmlydHVhbCB2b2lkIG1lcmdlKGNvbnN0IE1lZGlh
Q29uc3RyYWludCYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNNYW5k
YXRvcnkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBtZXJnZShj
b25zdCBNZWRpYUNvbnN0cmFpbnQmKSB7IH0KKworICAgIGJvb2wgaXNJbnQoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGFUeXBlID09IERhdGFUeXBlOjpJbnRlZ2VyOyB9CisgICAgYm9vbCBpc0RvdWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVR5cGUgPT0gRGF0YVR5cGU6OkRvdWJsZTsgfQorICAg
IGJvb2wgaXNCb29sZWFuKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhVHlwZSA9PSBEYXRhVHlwZTo6
Qm9vbGVhbjsgfQorICAgIGJvb2wgaXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2RhdGFUeXBl
ID09IERhdGFUeXBlOjpTdHJpbmc7IH0KIAotICAgIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIERhdGFUeXBlIGRhdGFUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhVHlwZTsgfQorICAgIE1lZGlhQ29uc3RyYWludFR5cGUgY29uc3RyYWlu
dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cmFpbnRUeXBlOyB9CiAgICAgY29uc3QgU3Ry
aW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAKIHByb3RlY3RlZDoKLSAgICBl
eHBsaWNpdCBNZWRpYUNvbnN0cmFpbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFp
bnRUeXBlIHR5cGUpCisgICAgZXhwbGljaXQgTWVkaWFDb25zdHJhaW50KGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJhaW50VHlwZSwgRGF0YVR5cGUg
ZGF0YVR5cGUpCiAgICAgICAgIDogbV9uYW1lKG5hbWUpCi0gICAgICAgICwgbV90eXBlKHR5cGUp
CisgICAgICAgICwgbV9jb25zdHJhaW50VHlwZShjb25zdHJhaW50VHlwZSkKKyAgICAgICAgLCBt
X2RhdGFUeXBlKGRhdGFUeXBlKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5n
IG1fbmFtZTsKLSAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIG1fdHlwZTsKKyAgICBBdG9taWNTdHJp
bmcgbV9uYW1lOworICAgIE1lZGlhQ29uc3RyYWludFR5cGUgbV9jb25zdHJhaW50VHlwZTsKKyAg
ICBEYXRhVHlwZSBtX2RhdGFUeXBlOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgVmFsdWVUeXBlPgog
Y2xhc3MgTnVtZXJpY0NvbnN0cmFpbnQgOiBwdWJsaWMgTWVkaWFDb25zdHJhaW50IHsKIHB1Ymxp
YzoKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhbV9taW4gJiYg
IW1fbWF4ICYmICFtX2V4YWN0ICYmICFtX2lkZWFsOyB9Ci0gICAgYm9vbCBpc01hbmRhdG9yeSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fbWluIHx8IG1fbWF4IHx8IG1fZXhhY3Q7IH0KLQog
ICAgIHZvaWQgc2V0TWluKFZhbHVlVHlwZSB2YWx1ZSkgeyBtX21pbiA9IHZhbHVlOyB9CiAgICAg
dm9pZCBzZXRNYXgoVmFsdWVUeXBlIHZhbHVlKSB7IG1fbWF4ID0gdmFsdWU7IH0KICAgICB2b2lk
IHNldEV4YWN0KFZhbHVlVHlwZSB2YWx1ZSkgeyBtX2V4YWN0ID0gdmFsdWU7IH0KICAgICB2b2lk
IHNldElkZWFsKFZhbHVlVHlwZSB2YWx1ZSkgeyBtX2lkZWFsID0gdmFsdWU7IH0KIAotICAgIGJv
b2wgZ2V0TWluKFZhbHVlVHlwZSYgbWluKSBjb25zdCBmaW5hbCB7CisgICAgYm9vbCBnZXRNaW4o
VmFsdWVUeXBlJiBtaW4pIGNvbnN0CisgICAgewogICAgICAgICBpZiAoIW1fbWluKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMjIsNyArMTAyLDggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIGdldE1heChWYWx1ZVR5cGUmIG1heCkg
Y29uc3QgZmluYWwgeworICAgIGJvb2wgZ2V0TWF4KFZhbHVlVHlwZSYgbWF4KSBjb25zdAorICAg
IHsKICAgICAgICAgaWYgKCFtX21heCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
MTMwLDcgKzExMSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgYm9vbCBnZXRFeGFjdChWYWx1ZVR5cGUmIGV4YWN0KSBjb25zdCBmaW5hbCB7CisgICAgYm9v
bCBnZXRFeGFjdChWYWx1ZVR5cGUmIGV4YWN0KSBjb25zdAorICAgIHsKICAgICAgICAgaWYgKCFt
X2V4YWN0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMzgsNyArMTIwLDggQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIGdldElkZWFs
KFZhbHVlVHlwZSYgaWRlYWwpIGNvbnN0IGZpbmFsIHsKKyAgICBib29sIGdldElkZWFsKFZhbHVl
VHlwZSYgaWRlYWwpIGNvbnN0CisgICAgewogICAgICAgICBpZiAoIW1faWRlYWwpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE1NCw3ICsxMzcsOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBzdGQ6OmFicyhhIC0gYikgPD0gZXBzaWxvbjsKICAgICB9CiAKLSAgICBkb3VibGUg
Zml0bmVzc0Rpc3RhbmNlKFZhbHVlVHlwZSByYW5nZU1pbiwgVmFsdWVUeXBlIHJhbmdlTWF4KSBj
b25zdCBmaW5hbCB7CisgICAgZG91YmxlIGZpdG5lc3NEaXN0YW5jZShWYWx1ZVR5cGUgcmFuZ2VN
aW4sIFZhbHVlVHlwZSByYW5nZU1heCkgY29uc3QKKyAgICB7CiAgICAgICAgIC8vIGh0dHBzOi8v
dzNjLmdpdGh1Yi5pby9tZWRpYWNhcHR1cmUtbWFpbi8jZGZuLWFwcGx5Y29uc3RyYWludHMKICAg
ICAgICAgLy8gMS4gSWYgdGhlIGNvbnN0cmFpbnQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYnJv
d3NlciwgdGhlIGZpdG5lc3MgZGlzdGFuY2UgaXMgMC4KICAgICAgICAgaWYgKGlzRW1wdHkoKSkK
QEAgLTE4OSwzMiArMTczLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGQ6OmFicyhpZGVhbCAtIG1faWRlYWwudmFsdWUoKSkpIC8gc3RkOjptYXgoc3Rk
OjphYnMoaWRlYWwpLCBzdGQ6OmFicyhtX2lkZWFsLnZhbHVlKCkpKTsKICAgICB9CiAKLSAgICB2
b2lkIG1lcmdlKGNvbnN0IE1lZGlhQ29uc3RyYWludCYgb3RoZXIpIGZpbmFsIHsKLSAgICAgICAg
aWYgKG90aGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBWYWx1
ZVR5cGUgdmFsdWU7Ci0gICAgICAgIGlmIChvdGhlci5nZXRFeGFjdCh2YWx1ZSkpCi0gICAgICAg
ICAgICBtX2V4YWN0ID0gdmFsdWU7Ci0KLSAgICAgICAgaWYgKG90aGVyLmdldE1pbih2YWx1ZSkp
Ci0gICAgICAgICAgICBtX21pbiA9IHZhbHVlOwotCi0gICAgICAgIGlmIChvdGhlci5nZXRNYXgo
dmFsdWUpKQotICAgICAgICAgICAgbV9tYXggPSB2YWx1ZTsKLQotICAgICAgICAvLyBodHRwczov
L3czYy5naXRodWIuaW8vbWVkaWFjYXB0dXJlLW1haW4vI2NvbnN0cmFpbmFibGUtaW50ZXJmYWNl
Ci0gICAgICAgIC8vIFdoZW4gcHJvY2Vzc2luZyBhZHZhbmNlZCBjb25zdHJhaW50czoKLSAgICAg
ICAgLy8gICAuLi4gdGhlIFVzZXIgQWdlbnQgbXVzdCBhdHRlbXB0IHRvIGFwcGx5LCBpbmRpdmlk
dWFsbHksIGFueSAnaWRlYWwnIGNvbnN0cmFpbnRzIG9yCi0gICAgICAgIC8vICAgYSBjb25zdHJh
aW50IGdpdmVuIGFzIGEgYmFyZSB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LiBPZiB0aGVzZSBwcm9w
ZXJ0aWVzLCBpdCBtdXN0Ci0gICAgICAgIC8vICAgc2F0aXNmeSB0aGUgbGFyZ2VzdCBudW1iZXIg
dGhhdCBpdCBjYW4sIGluIGFueSBvcmRlci4KLSAgICAgICAgaWYgKG90aGVyLmdldElkZWFsKHZh
bHVlKSkgewotICAgICAgICAgICAgaWYgKCFtX2lkZWFsIHx8IHZhbHVlID4gbV9pZGVhbC52YWx1
ZSgpKQotICAgICAgICAgICAgICAgIG1faWRlYWwgPSB2YWx1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGJvb2wgdmFsaWRGb3JSYW5nZShWYWx1ZVR5cGUgcmFuZ2VNaW4sIFZhbHVlVHlwZSBy
YW5nZU1heCkgY29uc3QgZmluYWwgeworICAgIGJvb2wgdmFsaWRGb3JSYW5nZShWYWx1ZVR5cGUg
cmFuZ2VNaW4sIFZhbHVlVHlwZSByYW5nZU1heCkgY29uc3QKKyAgICB7CiAgICAgICAgIGlmIChp
c0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI0MiwyNyArMjAyLDY5
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgVmFsdWVUeXBl
IGZpbmQoc3RkOjpmdW5jdGlvbjxib29sKENvbnN0cmFpbnRUeXBlLCBWYWx1ZVR5cGUpPiBmdW5j
dGlvbikgY29uc3QgZmluYWwgewotICAgICAgICBpZiAobV9taW4gJiYgZnVuY3Rpb24oQ29uc3Ry
YWludFR5cGU6Ok1pbkNvbnN0cmFpbnQsIG1fbWluLnZhbHVlKCkpKQorICAgIFZhbHVlVHlwZSBm
aW5kKHN0ZDo6ZnVuY3Rpb248Ym9vbChWYWx1ZVR5cGUpPiBmdW5jdGlvbikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChtX21pbiAmJiBmdW5jdGlvbihtX21pbi52YWx1ZSgpKSkKICAgICAgICAg
ICAgIHJldHVybiBtX21pbi52YWx1ZSgpOwogCi0gICAgICAgIGlmIChtX21heCAmJiBmdW5jdGlv
bihDb25zdHJhaW50VHlwZTo6TWF4Q29uc3RyYWludCwgbV9tYXgudmFsdWUoKSkpCisgICAgICAg
IGlmIChtX21heCAmJiBmdW5jdGlvbihtX21heC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVy
biBtX21heC52YWx1ZSgpOwogCi0gICAgICAgIGlmIChtX2V4YWN0ICYmIGZ1bmN0aW9uKENvbnN0
cmFpbnRUeXBlOjpFeGFjdENvbnN0cmFpbnQsIG1fZXhhY3QudmFsdWUoKSkpCisgICAgICAgIGlm
IChtX2V4YWN0ICYmIGZ1bmN0aW9uKG1fZXhhY3QudmFsdWUoKSkpCiAgICAgICAgICAgICByZXR1
cm4gbV9leGFjdC52YWx1ZSgpOwogCi0gICAgICAgIGlmIChtX2lkZWFsICYmIGZ1bmN0aW9uKENv
bnN0cmFpbnRUeXBlOjpJZGVhbENvbnN0cmFpbnQsIG1faWRlYWwudmFsdWUoKSkpCisgICAgICAg
IGlmIChtX2lkZWFsICYmIGZ1bmN0aW9uKG1faWRlYWwudmFsdWUoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gbV9pZGVhbC52YWx1ZSgpOwogCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAK
KworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX21pbiAmJiAh
bV9tYXggJiYgIW1fZXhhY3QgJiYgIW1faWRlYWw7IH0KKyAgICBib29sIGlzTWFuZGF0b3J5KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9taW4gfHwgbV9tYXggfHwgbV9leGFjdDsgfQogCiBw
cm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTnVtZXJpY0NvbnN0cmFpbnQoY29uc3QgU3RyaW5nJiBu
YW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpCi0gICAgICAgIDogTWVkaWFDb25zdHJhaW50
KG5hbWUsIHR5cGUpCisgICAgZXhwbGljaXQgTnVtZXJpY0NvbnN0cmFpbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUsIERhdGFUeXBlIGRhdGFUeXBl
KQorICAgICAgICA6IE1lZGlhQ29uc3RyYWludChuYW1lLCB0eXBlLCBkYXRhVHlwZSkKKyAgICB7
CisgICAgfQorCisgICAgTnVtZXJpY0NvbnN0cmFpbnQoY29uc3QgTnVtZXJpY0NvbnN0cmFpbnQm
IG90aGVyKQorICAgICAgICA6IE1lZGlhQ29uc3RyYWludChvdGhlcikKICAgICB7CisgICAgICAg
IGlmIChvdGhlci5tX21pbikKKyAgICAgICAgICAgIG1fbWluID0gb3RoZXIubV9taW47CisgICAg
ICAgIGlmIChvdGhlci5tX21heCkKKyAgICAgICAgICAgIG1fbWF4ID0gb3RoZXIubV9tYXg7Cisg
ICAgICAgIGlmIChvdGhlci5tX2V4YWN0KQorICAgICAgICAgICAgbV9leGFjdCA9IG90aGVyLm1f
ZXhhY3Q7CisgICAgICAgIGlmIChvdGhlci5tX2lkZWFsKQorICAgICAgICAgICAgbV9pZGVhbCA9
IG90aGVyLm1faWRlYWw7CisgICAgfQorCisgICAgdm9pZCBpbm5lck1lcmdlKGNvbnN0IE51bWVy
aWNDb25zdHJhaW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChvdGhlci5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgVmFsdWVUeXBlIHZhbHVlOworICAgICAg
ICBpZiAob3RoZXIuZ2V0RXhhY3QodmFsdWUpKQorICAgICAgICAgICAgbV9leGFjdCA9IHZhbHVl
OworCisgICAgICAgIGlmIChvdGhlci5nZXRNaW4odmFsdWUpKQorICAgICAgICAgICAgbV9taW4g
PSB2YWx1ZTsKKworICAgICAgICBpZiAob3RoZXIuZ2V0TWF4KHZhbHVlKSkKKyAgICAgICAgICAg
IG1fbWF4ID0gdmFsdWU7CisKKyAgICAgICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL21lZGlh
Y2FwdHVyZS1tYWluLyNjb25zdHJhaW5hYmxlLWludGVyZmFjZQorICAgICAgICAvLyBXaGVuIHBy
b2Nlc3NpbmcgYWR2YW5jZWQgY29uc3RyYWludHM6CisgICAgICAgIC8vICAgLi4uIHRoZSBVc2Vy
IEFnZW50IG11c3QgYXR0ZW1wdCB0byBhcHBseSwgaW5kaXZpZHVhbGx5LCBhbnkgJ2lkZWFsJyBj
b25zdHJhaW50cyBvcgorICAgICAgICAvLyAgIGEgY29uc3RyYWludCBnaXZlbiBhcyBhIGJhcmUg
dmFsdWUgZm9yIHRoZSBwcm9wZXJ0eS4gT2YgdGhlc2UgcHJvcGVydGllcywgaXQgbXVzdAorICAg
ICAgICAvLyAgIHNhdGlzZnkgdGhlIGxhcmdlc3QgbnVtYmVyIHRoYXQgaXQgY2FuLCBpbiBhbnkg
b3JkZXIuCisgICAgICAgIGlmIChvdGhlci5nZXRJZGVhbCh2YWx1ZSkpIHsKKyAgICAgICAgICAg
IGlmICghbV9pZGVhbCB8fCB2YWx1ZSA+IG1faWRlYWwudmFsdWUoKSkKKyAgICAgICAgICAgICAg
ICBtX2lkZWFsID0gdmFsdWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICBPcHRpb25hbDxWYWx1
ZVR5cGU+IG1fbWluOwpAQCAtMjczLDQ2ICsyNzUsNjQgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBJ
bnRDb25zdHJhaW50IGZpbmFsIDogcHVibGljIE51bWVyaWNDb25zdHJhaW50PGludD4gewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8SW50Q29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
bmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IElu
dENvbnN0cmFpbnQobmFtZSwgdHlwZSkpOyB9CisgICAgc3RhdGljIEludENvbnN0cmFpbnQmIGNy
ZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSkg
eyByZXR1cm4gKm5ldyBJbnRDb25zdHJhaW50KG5hbWUsIHR5cGUpOyB9CisgICAgSW50Q29uc3Ry
YWludChjb25zdCBJbnRDb25zdHJhaW50JiBvdGhlcikKKyAgICAgICAgOiBOdW1lcmljQ29uc3Ry
YWludDxpbnQ+KG90aGVyKQorICAgIHsKKyAgICB9CiAKLSAgICBSZWY8TWVkaWFDb25zdHJhaW50
PiBjb3B5KCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBtZXJnZShjb25zdCBNZWRpYUNvbnN0cmFp
bnQmIG90aGVyKSBmaW5hbCB7CisgICAgICAgIEFTU0VSVChvdGhlci5pc0ludCgpKTsKKyAgICAg
ICAgTnVtZXJpY0NvbnN0cmFpbnQ6OmlubmVyTWVyZ2UoZG93bmNhc3Q8Y29uc3QgSW50Q29uc3Ry
YWludD4ob3RoZXIpKTsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgSW50Q29uc3Ry
YWludChjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSkKLSAgICAg
ICAgOiBOdW1lcmljQ29uc3RyYWludDxpbnQ+KG5hbWUsIHR5cGUpCisgICAgZXhwbGljaXQgSW50
Q29uc3RyYWludChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUg
dHlwZSkKKyAgICAgICAgOiBOdW1lcmljQ29uc3RyYWludDxpbnQ+KG5hbWUsIHR5cGUsIERhdGFU
eXBlOjpJbnRlZ2VyKQogICAgIHsKICAgICB9CiB9OwogCiBjbGFzcyBEb3VibGVDb25zdHJhaW50
IGZpbmFsIDogcHVibGljIE51bWVyaWNDb25zdHJhaW50PGRvdWJsZT4gewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RG91YmxlQ29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwg
TWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERvdWJsZUNv
bnN0cmFpbnQobmFtZSwgdHlwZSkpOyB9CisgICAgc3RhdGljIERvdWJsZUNvbnN0cmFpbnQmIGNy
ZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSkg
eyByZXR1cm4gKm5ldyBEb3VibGVDb25zdHJhaW50KG5hbWUsIHR5cGUpOyB9CisgICAgRG91Ymxl
Q29uc3RyYWludChjb25zdCBEb3VibGVDb25zdHJhaW50JiBvdGhlcikKKyAgICAgICAgOiBOdW1l
cmljQ29uc3RyYWludDxkb3VibGU+KG90aGVyKQorICAgIHsKKyAgICB9CiAKLSAgICBSZWY8TWVk
aWFDb25zdHJhaW50PiBjb3B5KCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBtZXJnZShjb25zdCBN
ZWRpYUNvbnN0cmFpbnQmIG90aGVyKSBmaW5hbCB7CisgICAgICAgIEFTU0VSVChvdGhlci5pc0Rv
dWJsZSgpKTsKKyAgICAgICAgTnVtZXJpY0NvbnN0cmFpbnQ6OmlubmVyTWVyZ2UoZG93bmNhc3Q8
RG91YmxlQ29uc3RyYWludD4ob3RoZXIpKTsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgRG91YmxlQ29uc3RyYWludChjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5
cGUgdHlwZSkKLSAgICAgICAgOiBOdW1lcmljQ29uc3RyYWludDxkb3VibGU+KG5hbWUsIHR5cGUp
CisgICAgZXhwbGljaXQgRG91YmxlQ29uc3RyYWludChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSkKKyAgICAgICAgOiBOdW1lcmljQ29uc3RyYWludDxk
b3VibGU+KG5hbWUsIHR5cGUsIERhdGFUeXBlOjpEb3VibGUpCiAgICAgewogICAgIH0KIH07CiAK
IGNsYXNzIEJvb2xlYW5Db25zdHJhaW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29uc3RyYWludCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxCb29sZWFuQ29uc3RyYWludD4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IEJvb2xlYW5Db25zdHJhaW50KG5hbWUsIHR5cGUpKTsgfQotCi0gICAgUmVmPE1lZGlh
Q29uc3RyYWludD4gY29weSgpIGNvbnN0IGZpbmFsOworICAgIHN0YXRpYyBCb29sZWFuQ29uc3Ry
YWludCYgY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlw
ZSB0eXBlKSB7IHJldHVybiAqbmV3IEJvb2xlYW5Db25zdHJhaW50KG5hbWUsIHR5cGUpOyB9Cisg
ICAgQm9vbGVhbkNvbnN0cmFpbnQoY29uc3QgQm9vbGVhbkNvbnN0cmFpbnQmIG90aGVyKQorICAg
ICAgICA6IE1lZGlhQ29uc3RyYWludChvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChvdGhlci5t
X2V4YWN0KQorICAgICAgICAgICAgbV9leGFjdCA9IG90aGVyLm1fZXhhY3Q7CisgICAgICAgIGlm
IChvdGhlci5tX2lkZWFsKQorICAgICAgICAgICAgbV9pZGVhbCA9IG90aGVyLm1faWRlYWw7Cisg
ICAgfQogCiAgICAgdm9pZCBzZXRFeGFjdChib29sIHZhbHVlKSB7IG1fZXhhY3QgPSB2YWx1ZTsg
fQogICAgIHZvaWQgc2V0SWRlYWwoYm9vbCB2YWx1ZSkgeyBtX2lkZWFsID0gdmFsdWU7IH0KIAot
ICAgIGJvb2wgZ2V0RXhhY3QoYm9vbCYpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZ2V0SWRlYWwo
Ym9vbCYpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIW1fZXhhY3QgJiYgIW1faWRlYWw7IH07Ci0gICAgYm9vbCBpc01hbmRhdG9yeSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIGJvb2wobV9leGFjdCk7IH0KKyAgICBib29sIGdldEV4YWN0KGJv
b2wmKSBjb25zdDsKKyAgICBib29sIGdldElkZWFsKGJvb2wmKSBjb25zdDsKIAotICAgIGRvdWJs
ZSBmaXRuZXNzRGlzdGFuY2UoYm9vbCB2YWx1ZSkgY29uc3QgZmluYWwgeworICAgIGRvdWJsZSBm
aXRuZXNzRGlzdGFuY2UoYm9vbCB2YWx1ZSkgY29uc3QKKyAgICB7CiAgICAgICAgIC8vIGh0dHBz
Oi8vdzNjLmdpdGh1Yi5pby9tZWRpYWNhcHR1cmUtbWFpbi8jZGZuLWFwcGx5Y29uc3RyYWludHMK
ICAgICAgICAgLy8gMS4gSWYgdGhlIGNvbnN0cmFpbnQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUg
YnJvd3NlciwgdGhlIGZpdG5lc3MgZGlzdGFuY2UgaXMgMC4KICAgICAgICAgaWYgKGlzRW1wdHko
KSkKQEAgLTMzNSwyMiArMzU1LDI4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIG1lcmdl
KGNvbnN0IE1lZGlhQ29uc3RyYWludCYgb3RoZXIpIGZpbmFsIHsKLSAgICAgICAgaWYgKG90aGVy
LmlzRW1wdHkoKSkKKyAgICAgICAgQVNTRVJUKG90aGVyLmlzQm9vbGVhbigpKTsKKyAgICAgICAg
Y29uc3QgQm9vbGVhbkNvbnN0cmFpbnQmIHR5cGVkT3RoZXIgPSBkb3duY2FzdDxCb29sZWFuQ29u
c3RyYWludD4ob3RoZXIpOworCisgICAgICAgIGlmICh0eXBlZE90aGVyLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBib29sIHZhbHVlOwotICAgICAgICBpZiAob3Ro
ZXIuZ2V0RXhhY3QodmFsdWUpKQorICAgICAgICBpZiAodHlwZWRPdGhlci5nZXRFeGFjdCh2YWx1
ZSkpCiAgICAgICAgICAgICBtX2V4YWN0ID0gdmFsdWU7CiAKLSAgICAgICAgaWYgKG90aGVyLmdl
dElkZWFsKHZhbHVlKSkgeworICAgICAgICBpZiAodHlwZWRPdGhlci5nZXRJZGVhbCh2YWx1ZSkp
IHsKICAgICAgICAgICAgIGlmICghbV9pZGVhbCB8fCAodmFsdWUgJiYgIW1faWRlYWwudmFsdWUo
KSkpCiAgICAgICAgICAgICAgICAgbV9pZGVhbCA9IHZhbHVlOwogICAgICAgICB9CiAgICAgfQog
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIW1fZXhhY3QgJiYgIW1f
aWRlYWw7IH07CisgICAgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJv
b2wobV9leGFjdCk7IH0KKwogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBCb29sZWFuQ29uc3RyYWlu
dChjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSkKLSAgICAgICAg
OiBNZWRpYUNvbnN0cmFpbnQobmFtZSwgdHlwZSkKKyAgICBleHBsaWNpdCBCb29sZWFuQ29uc3Ry
YWludChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSkK
KyAgICAgICAgOiBNZWRpYUNvbnN0cmFpbnQobmFtZSwgdHlwZSwgRGF0YVR5cGU6OkJvb2xlYW4p
CiAgICAgewogICAgIH0KIApAQCAtMzYwLDMwICszODYsMzYgQEAgcHJpdmF0ZToKIAogY2xhc3Mg
U3RyaW5nQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnN0cmFpbnQgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8U3RyaW5nQ29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
bmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0
cmluZ0NvbnN0cmFpbnQobmFtZSwgdHlwZSkpOyB9Ci0KLSAgICBSZWY8TWVkaWFDb25zdHJhaW50
PiBjb3B5KCkgY29uc3QgZmluYWw7CisgICAgc3RhdGljIFN0cmluZ0NvbnN0cmFpbnQmIGNyZWF0
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSkgeyBy
ZXR1cm4gKm5ldyBTdHJpbmdDb25zdHJhaW50KG5hbWUsIHR5cGUpOyB9CisgICAgU3RyaW5nQ29u
c3RyYWludChjb25zdCBTdHJpbmdDb25zdHJhaW50JiBvdGhlcikKKyAgICAgICAgOiBNZWRpYUNv
bnN0cmFpbnQob3RoZXIpCisgICAgeworICAgICAgICBpZiAoIW90aGVyLm1fZXhhY3QuaXNFbXB0
eSgpKQorICAgICAgICAgICAgbV9leGFjdCA9IG90aGVyLm1fZXhhY3Q7CisgICAgICAgIGlmICgh
b3RoZXIubV9pZGVhbC5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2lkZWFsID0gb3RoZXIubV9p
ZGVhbDsKKyAgICB9CiAKICAgICB2b2lkIHNldEV4YWN0KGNvbnN0IFN0cmluZyYpOwogICAgIHZv
aWQgYXBwZW5kRXhhY3QoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRJZGVhbChjb25zdCBT
dHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZElkZWFsKGNvbnN0IFN0cmluZyYpOwogCi0gICAgYm9v
bCBnZXRFeGFjdChWZWN0b3I8U3RyaW5nPiYpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZ2V0SWRl
YWwoVmVjdG9yPFN0cmluZz4mKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fZXhhY3QuaXNFbXB0eSgpICYmIG1faWRlYWwuaXNFbXB0eSgp
OyB9Ci0gICAgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICFtX2V4YWN0
LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgZ2V0RXhhY3QoVmVjdG9yPFN0cmluZz4mKSBjb25zdDsK
KyAgICBib29sIGdldElkZWFsKFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7CiAKLSAgICBkb3VibGUg
Zml0bmVzc0Rpc3RhbmNlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJsZSBm
aXRuZXNzRGlzdGFuY2UoY29uc3QgVmVjdG9yPFN0cmluZz4mKSBjb25zdCBmaW5hbDsKKyAgICBk
b3VibGUgZml0bmVzc0Rpc3RhbmNlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIGRvdWJsZSBm
aXRuZXNzRGlzdGFuY2UoY29uc3QgVmVjdG9yPFN0cmluZz4mKSBjb25zdDsKIAotICAgIGNvbnN0
IFN0cmluZyYgZmluZChzdGQ6OmZ1bmN0aW9uPGJvb2woQ29uc3RyYWludFR5cGUsIGNvbnN0IFN0
cmluZyYpPikgY29uc3QgZmluYWw7CisgICAgY29uc3QgU3RyaW5nJiBmaW5kKHN0ZDo6ZnVuY3Rp
b248Ym9vbChjb25zdCBTdHJpbmcmKT4pIGNvbnN0OwogICAgIHZvaWQgbWVyZ2UoY29uc3QgTWVk
aWFDb25zdHJhaW50JikgZmluYWw7CiAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2V4YWN0LmlzRW1wdHkoKSAmJiBtX2lkZWFsLmlzRW1wdHkoKTsgfQorICAgIGJv
b2wgaXNNYW5kYXRvcnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhbV9leGFjdC5pc0VtcHR5KCk7
IH0KKwogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBTdHJpbmdDb25zdHJhaW50KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKQotICAgICAgICA6IE1lZGlhQ29uc3Ry
YWludChuYW1lLCB0eXBlKQorICAgIGV4cGxpY2l0IFN0cmluZ0NvbnN0cmFpbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpCisgICAgICAgIDogTWVk
aWFDb25zdHJhaW50KG5hbWUsIHR5cGUsIERhdGFUeXBlOjpTdHJpbmcpCiAgICAgewogICAgIH0K
IApAQCAtMzkzLDM0ICs0MjUsMTU2IEBAIHByaXZhdGU6CiAKIGNsYXNzIFVua25vd25Db25zdHJh
aW50IGZpbmFsIDogcHVibGljIE1lZGlhQ29uc3RyYWludCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxVbmtub3duQ29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFD
b25zdHJhaW50VHlwZSB0eXBlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFVua25vd25Db25zdHJh
aW50KG5hbWUsIHR5cGUpKTsgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHN0YXRpYyBVbmtub3duQ29uc3RyYWludCYgY3JlYXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKSB7IHJldHVybiAqbmV3
IFVua25vd25Db25zdHJhaW50KG5hbWUsIHR5cGUpOyB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgVW5rbm93bkNvbnN0cmFpbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRU
eXBlIHR5cGUpCi0gICAgICAgIDogTWVkaWFDb25zdHJhaW50KG5hbWUsIHR5cGUpCisgICAgZXhw
bGljaXQgVW5rbm93bkNvbnN0cmFpbnQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBNZWRpYUNv
bnN0cmFpbnRUeXBlIHR5cGUpCisgICAgICAgIDogTWVkaWFDb25zdHJhaW50KG5hbWUsIHR5cGUs
IERhdGFUeXBlOjpOb25lKQogICAgIHsKICAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBtZXJnZShjb25zdCBNZWRpYUNvbnN0cmFp
bnQmKSBmaW5hbCB7IH0KIH07CiAKLXVzaW5nIE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwID0g
SGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYUNvbnN0cmFpbnQ+PjsKK2NsYXNzIE1lZGlhVHJh
Y2tDb25zdHJhaW50U2V0TWFwIHsKK3B1YmxpYzoKKyAgICB2b2lkIGZvckVhY2goc3RkOjpmdW5j
dGlvbjx2b2lkKGNvbnN0IE1lZGlhQ29uc3RyYWludCYpPikgY29uc3Q7CisgICAgdm9pZCBmaWx0
ZXIoc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IE1lZGlhQ29uc3RyYWludCYpPikgY29uc3Q7Cisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldChNZWRpYUNvbnN0cmFpbnRU
eXBlLCBPcHRpb25hbDxJbnRDb25zdHJhaW50PiYmKTsKKyAgICB2b2lkIHNldChNZWRpYUNvbnN0
cmFpbnRUeXBlLCBPcHRpb25hbDxEb3VibGVDb25zdHJhaW50PiYmKTsKKyAgICB2b2lkIHNldChN
ZWRpYUNvbnN0cmFpbnRUeXBlLCBPcHRpb25hbDxCb29sZWFuQ29uc3RyYWludD4mJik7CisgICAg
dm9pZCBzZXQoTWVkaWFDb25zdHJhaW50VHlwZSwgT3B0aW9uYWw8U3RyaW5nQ29uc3RyYWludD4m
Jik7CisKK3ByaXZhdGU6CisgICAgT3B0aW9uYWw8SW50Q29uc3RyYWludD4gbV93aWR0aDsKKyAg
ICBPcHRpb25hbDxJbnRDb25zdHJhaW50PiBtX2hlaWdodDsKKyAgICBPcHRpb25hbDxJbnRDb25z
dHJhaW50PiBtX3NhbXBsZVJhdGU7CisgICAgT3B0aW9uYWw8SW50Q29uc3RyYWludD4gbV9zYW1w
bGVTaXplOworCisgICAgT3B0aW9uYWw8RG91YmxlQ29uc3RyYWludD4gbV9hc3BlY3RSYXRpbzsK
KyAgICBPcHRpb25hbDxEb3VibGVDb25zdHJhaW50PiBtX2ZyYW1lUmF0ZTsKKyAgICBPcHRpb25h
bDxEb3VibGVDb25zdHJhaW50PiBtX3ZvbHVtZTsKKworICAgIE9wdGlvbmFsPEJvb2xlYW5Db25z
dHJhaW50PiBtX2VjaG9DYW5jZWxsYXRpb247CisKKyAgICBPcHRpb25hbDxTdHJpbmdDb25zdHJh
aW50PiBtX2ZhY2luZ01vZGU7CisgICAgT3B0aW9uYWw8U3RyaW5nQ29uc3RyYWludD4gbV9kZXZp
Y2VJZDsKKyAgICBPcHRpb25hbDxTdHJpbmdDb25zdHJhaW50PiBtX2dyb3VwSWQ7Cit9OwogCiBj
bGFzcyBGbGF0dGVuZWRDb25zdHJhaW50IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8TWVkaWFDb25zdHJhaW50Pj46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwog
CiAgICAgdm9pZCBzZXQoY29uc3QgTWVkaWFDb25zdHJhaW50Jik7CiAgICAgdm9pZCBtZXJnZShj
b25zdCBNZWRpYUNvbnN0cmFpbnQmKTsKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0cmFpbnRzLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFyaWFudHMuaXNFbXB0eSgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7Cisg
ICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fY29uc3RyYWlu
dChudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IEZsYXR0ZW5lZENvbnN0cmFpbnQqIGNvbnN0cmFp
bnQsIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb25zdHJhaW50KGNvbnN0cmFpbnQp
CisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIE1lZGlhQ29uc3RyYWludCYgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fY29uc3RyYWludC0+bV92YXJpYW50cy5hdChtX2luZGV4KS5jb25z
dHJhaW50KCk7CisgICAgICAgIH0KIAotICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9jb25zdHJhaW50cy5iZWdpbigpOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJhaW50cy5lbmQoKTsgfQorICAgICAgICBpdGVyYXRv
ciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIu
bV9pbmRleDsgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgY29uc3QgRmxhdHRlbmVkQ29uc3RyYWludCogbV9jb25zdHJhaW50OworICAgICAgICBz
aXplX3QgbV9pbmRleDsKKyAgICB9OworCisgICAgY29uc3QgaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCAwKTsgfQorICAgIGNvbnN0IGl0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIG1fdmFyaWFudHMuc2l6ZSgpKTsgfQogCiBw
cml2YXRlOgorICAgIGNsYXNzIENvbnN0cmFpbnRIb2xkZXIgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIENvbnN0cmFpbnRIb2xkZXImIGNyZWF0ZShjb25zdCBNZWRpYUNvbnN0cmFpbnQm
IHZhbHVlKSB7IHJldHVybiAqbmV3IENvbnN0cmFpbnRIb2xkZXIodmFsdWUpOyB9CisKKyAgICAg
ICAgfkNvbnN0cmFpbnRIb2xkZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGRh
dGFUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTWVkaWFDb25zdHJhaW50OjpEYXRhVHlwZTo6
SW50ZWdlcjoKKyAgICAgICAgICAgICAgICBkZWxldGUgbV92YWx1ZS5hc0ludGVnZXI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lZGlhQ29uc3RyYWludDo6RGF0
YVR5cGU6OkRvdWJsZToKKyAgICAgICAgICAgICAgICBkZWxldGUgbV92YWx1ZS5hc0RvdWJsZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTWVkaWFDb25zdHJhaW50
OjpEYXRhVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgICAgICAgICBkZWxldGUgbV92YWx1ZS5hc0Jv
b2xlYW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lZGlhQ29u
c3RyYWludDo6RGF0YVR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgICAgICBkZWxldGUgbV92YWx1
ZS5hc1N0cmluZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTWVk
aWFDb25zdHJhaW50OjpEYXRhVHlwZTo6Tm9uZToKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworI2lm
bmRlZiBOREVCVUcKKyAgICAgICAgICAgIG1fdmFsdWUuYXNSYXcgPSByZWludGVycHJldF9jYXN0
PE1lZGlhQ29uc3RyYWludCo+KDB4YmJhZGJlZWYpOworI2VuZGlmCisgICAgICAgIH0KIAotICAg
IFZlY3RvcjxSZWZQdHI8TWVkaWFDb25zdHJhaW50Pj4gbV9jb25zdHJhaW50czsKKyAgICAgICAg
TWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KCkgY29uc3QgeyByZXR1cm4gKm1fdmFsdWUuYXNS
YXc7IH0KKyAgICAgICAgTWVkaWFDb25zdHJhaW50OjpEYXRhVHlwZSBkYXRhVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0cmFpbnQoKS5kYXRhVHlwZSgpOyB9CisgICAgICAgIE1lZGlhQ29uc3Ry
YWludFR5cGUgY29uc3RyYWludFR5cGUoKSBjb25zdCB7IHJldHVybiBjb25zdHJhaW50KCkuY29u
c3RyYWludFR5cGUoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZXhwbGljaXQgQ29uc3Ry
YWludEhvbGRlcihjb25zdCBNZWRpYUNvbnN0cmFpbnQmIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBzd2l0Y2ggKHZhbHVlLmRhdGFUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTWVk
aWFDb25zdHJhaW50OjpEYXRhVHlwZTo6SW50ZWdlcjoKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
LmFzSW50ZWdlciA9IG5ldyBJbnRDb25zdHJhaW50KGRvd25jYXN0PGNvbnN0IEludENvbnN0cmFp
bnQ+KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1l
ZGlhQ29uc3RyYWludDo6RGF0YVR5cGU6OkRvdWJsZToKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
LmFzRG91YmxlID0gbmV3IERvdWJsZUNvbnN0cmFpbnQoZG93bmNhc3Q8RG91YmxlQ29uc3RyYWlu
dD4odmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTWVk
aWFDb25zdHJhaW50OjpEYXRhVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
LmFzQm9vbGVhbiA9IG5ldyBCb29sZWFuQ29uc3RyYWludChkb3duY2FzdDxCb29sZWFuQ29uc3Ry
YWludD4odmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
TWVkaWFDb25zdHJhaW50OjpEYXRhVHlwZTo6U3RyaW5nOgorICAgICAgICAgICAgICAgIG1fdmFs
dWUuYXNTdHJpbmcgPSBuZXcgU3RyaW5nQ29uc3RyYWludChkb3duY2FzdDxTdHJpbmdDb25zdHJh
aW50Pih2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnQ6OkRhdGFUeXBlOjpOb25lOgorICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBNZWRpYUNvbnN0
cmFpbnQqIGFzUmF3OworICAgICAgICAgICAgSW50Q29uc3RyYWludCogYXNJbnRlZ2VyOworICAg
ICAgICAgICAgRG91YmxlQ29uc3RyYWludCogYXNEb3VibGU7CisgICAgICAgICAgICBCb29sZWFu
Q29uc3RyYWludCogYXNCb29sZWFuOworICAgICAgICAgICAgU3RyaW5nQ29uc3RyYWludCogYXNT
dHJpbmc7CisgICAgICAgIH0gbV92YWx1ZTsKKyAgICB9OworCisgICAgVmVjdG9yPENvbnN0cmFp
bnRIb2xkZXI+IG1fdmFyaWFudHM7CiB9OwogCiBjbGFzcyBNZWRpYUNvbnN0cmFpbnRzIDogcHVi
bGljIFJlZkNvdW50ZWQ8TWVkaWFDb25zdHJhaW50cz4gewpAQCAtNDM3LDYgKzU5MSwxNiBAQCBw
cm90ZWN0ZWQ6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX01FRElBQ09OU1RSQUlOVChDb25zdHJhaW50VHlwZSwgcHJlZGljYXRlKSBc
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNvbnN0cmFpbnRUeXBlKSBc
CitzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50JiBjb25z
dHJhaW50KSB7IHJldHVybiBjb25zdHJhaW50LnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTUVESUFDT05TVFJBSU5U
KEludENvbnN0cmFpbnQsIGlzSW50KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX01FRElBQ09O
U1RSQUlOVChEb3VibGVDb25zdHJhaW50LCBpc0RvdWJsZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19NRURJQUNPTlNUUkFJTlQoU3RyaW5nQ29uc3RyYWludCwgaXNTdHJpbmcoKSkKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfTUVESUFDT05TVFJBSU5UKEJvb2xlYW5Db25zdHJhaW50LCBpc0Jv
b2xlYW4oKSkKKwogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNlbmRpZiAvLyBN
ZWRpYUNvbnN0cmFpbnRzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCShyZXZpc2lvbiAy
MDYyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1l
ZGlhU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDc1ICsxNTAsODQgQEAgdm9pZCBS
ZWFsdGltZU1lZGlhU291cmNlOjpyZXF1ZXN0U3RvcChPYgogICAgIHN0b3AoY2FsbGluZ09ic2Vy
dmVyKTsKIH0KIAorI2lmIDEKIGRvdWJsZSBSZWFsdGltZU1lZGlhU291cmNlOjpmaXRuZXNzRGlz
dGFuY2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KQogewogICAgIFJlYWx0aW1l
TWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcyA9ICp0aGlzLT5jYXBhYmlsaXRp
ZXMoKTsKIAotICAgIHN3aXRjaCAoY29uc3RyYWludC50eXBlKCkpIHsKKyAgICBzd2l0Y2ggKGNv
bnN0cmFpbnQuY29uc3RyYWludFR5cGUoKSkgewogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlw
ZTo6V2lkdGg6IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNJbnQoKSk7CiAgICAgICAg
IGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzV2lkdGgoKSkKICAgICAgICAgICAgIHJldHVybiAw
OwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMud2lkdGgoKTsKLSAgICAgICAg
cmV0dXJuIGNvbnN0cmFpbnQuZml0bmVzc0Rpc3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNJbnQs
IHJhbmdlLnJhbmdlTWF4KCkuYXNJbnQpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SW50Q29u
c3RyYWludD4oY29uc3RyYWludCkuZml0bmVzc0Rpc3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNJ
bnQsIHJhbmdlLnJhbmdlTWF4KCkuYXNJbnQpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkhlaWdodDogeworICAgICAgICBBU1NFUlQoY29u
c3RyYWludC5pc0ludCgpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNIZWln
aHQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBh
YmlsaXRpZXMuaGVpZ2h0KCk7Ci0gICAgICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0
YW5jZShyYW5nZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50KTsKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEludENvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmZpdG5lc3NE
aXN0YW5jZShyYW5nZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpG
cmFtZVJhdGU6IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNEb3VibGUoKSk7CiAgICAg
ICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzRnJhbWVSYXRlKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKIAogICAgICAgICBhdXRvIHJhbmdlID0gY2FwYWJpbGl0aWVzLmZyYW1lUmF0ZSgp
OwotICAgICAgICByZXR1cm4gY29uc3RyYWludC5maXRuZXNzRGlzdGFuY2UocmFuZ2UucmFuZ2VN
aW4oKS5hc0RvdWJsZSwgcmFuZ2UucmFuZ2VNYXgoKS5hc0RvdWJsZSk7CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxEb3VibGVDb25zdHJhaW50Pihjb25zdHJhaW50KS5maXRuZXNzRGlzdGFuY2Uo
cmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmFuZ2UucmFuZ2VNYXgoKS5hc0RvdWJsZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6QXNw
ZWN0UmF0aW86IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNEb3VibGUoKSk7CiAgICAg
ICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzQXNwZWN0UmF0aW8oKSkKICAgICAgICAgICAg
IHJldHVybiAwOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuYXNwZWN0UmF0
aW8oKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuZml0bmVzc0Rpc3RhbmNlKHJhbmdlLnJh
bmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUpOworICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8RG91YmxlQ29uc3RyYWludD4oY29uc3RyYWludCkuZml0bmVzc0Rpc3Rh
bmNlKHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6
OlZvbHVtZTogeworICAgICAgICBBU1NFUlQoY29uc3RyYWludC5pc0RvdWJsZSgpKTsKICAgICAg
ICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNWb2x1bWUoKSkKICAgICAgICAgICAgIHJldHVy
biAwOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMudm9sdW1lKCk7Ci0gICAg
ICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0YW5jZShyYW5nZS5yYW5nZU1pbigpLmFz
RG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlKTsKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PERvdWJsZUNvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmZpdG5lc3NEaXN0YW5jZShyYW5nZS5y
YW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVSYXRl
OiB7CisgICAgICAgIEFTU0VSVChjb25zdHJhaW50LmlzSW50KCkpOwogICAgICAgICBpZiAoIWNh
cGFiaWxpdGllcy5zdXBwb3J0c1NhbXBsZVJhdGUoKSkKICAgICAgICAgICAgIHJldHVybiAwOwog
CiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuc2FtcGxlUmF0ZSgpOwotICAgICAg
ICByZXR1cm4gY29uc3RyYWludC5maXRuZXNzRGlzdGFuY2UocmFuZ2UucmFuZ2VNaW4oKS5hc0Rv
dWJsZSwgcmFuZ2UucmFuZ2VNYXgoKS5hc0RvdWJsZSk7CisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxJbnRDb25zdHJhaW50Pihjb25zdHJhaW50KS5maXRuZXNzRGlzdGFuY2UocmFuZ2UucmFuZ2VN
aW4oKS5hc0ludCwgcmFuZ2UucmFuZ2VNYXgoKS5hc0ludCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6U2FtcGxlU2l6ZTogeworICAgICAg
ICBBU1NFUlQoY29uc3RyYWludC5pc0ludCgpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMu
c3VwcG9ydHNTYW1wbGVTaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBh
dXRvIHJhbmdlID0gY2FwYWJpbGl0aWVzLnNhbXBsZVNpemUoKTsKLSAgICAgICAgcmV0dXJuIGNv
bnN0cmFpbnQuZml0bmVzc0Rpc3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdl
LnJhbmdlTWF4KCkuYXNEb3VibGUpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SW50Q29uc3Ry
YWludD4oY29uc3RyYWludCkuZml0bmVzc0Rpc3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNJbnQs
IHJhbmdlLnJhbmdlTWF4KCkuYXNJbnQpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBj
YXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkZhY2luZ01vZGU6IHsKKyAgICAgICAgQVNTRVJUKGNv
bnN0cmFpbnQuaXNTdHJpbmcoKSk7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRz
RmFjaW5nTW9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTIyNywzMiArMjM2LDM1
IEBAIGRvdWJsZSBSZWFsdGltZU1lZGlhU291cmNlOjpmaXRuZXNzRGlzdGEKICAgICAgICAgc3Vw
cG9ydGVkTW9kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtb2Rlcy5zaXplKCkpOwogICAgICAg
ICBmb3IgKGF1dG8mIG1vZGUgOiBtb2RlcykKICAgICAgICAgICAgIHN1cHBvcnRlZE1vZGVzLmFw
cGVuZChSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OmZhY2luZ01vZGUobW9kZSkpOwotICAg
ICAgICByZXR1cm4gY29uc3RyYWludC5maXRuZXNzRGlzdGFuY2Uoc3VwcG9ydGVkTW9kZXMpOwor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8U3RyaW5nQ29uc3RyYWludD4oY29uc3RyYWludCkuZml0
bmVzc0Rpc3RhbmNlKHN1cHBvcnRlZE1vZGVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpFY2hvQ2FuY2VsbGF0aW9uOiB7CisgICAgICAg
IEFTU0VSVChjb25zdHJhaW50LmlzQm9vbGVhbigpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRp
ZXMuc3VwcG9ydHNFY2hvQ2FuY2VsbGF0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAog
ICAgICAgICBib29sIGVjaG9DYW5jZWxsYXRpb25SZWFkV3JpdGUgPSBjYXBhYmlsaXRpZXMuZWNo
b0NhbmNlbGxhdGlvbigpID09IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OkVjaG9D
YW5jZWxsYXRpb246OlJlYWRXcml0ZTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuZml0bmVz
c0Rpc3RhbmNlKGVjaG9DYW5jZWxsYXRpb25SZWFkV3JpdGUpOworICAgICAgICByZXR1cm4gZG93
bmNhc3Q8Qm9vbGVhbkNvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmZpdG5lc3NEaXN0YW5jZShlY2hv
Q2FuY2VsbGF0aW9uUmVhZFdyaXRlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2Fz
ZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpEZXZpY2VJZDogeworICAgICAgICBBU1NFUlQoY29uc3Ry
YWludC5pc1N0cmluZygpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNEZXZp
Y2VJZCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFp
bnQuZml0bmVzc0Rpc3RhbmNlKG1faWQpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8U3RyaW5n
Q29uc3RyYWludD4oY29uc3RyYWludCkuZml0bmVzc0Rpc3RhbmNlKG1faWQpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Okdyb3VwSWQ6IHsK
KyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNTdHJpbmcoKSk7CiAgICAgICAgIGlmICghY2Fw
YWJpbGl0aWVzLnN1cHBvcnRzRGV2aWNlSWQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0YW5jZShzZXR0aW5ncygpLmdyb3Vw
SWQoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxTdHJpbmdDb25zdHJhaW50Pihjb25zdHJh
aW50KS5maXRuZXNzRGlzdGFuY2Uoc2V0dGluZ3MoKS5ncm91cElkKCkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTI2Myw5ICsyNzUsMTAgQEAgZG91YmxlIFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OmZpdG5lc3NEaXN0YQogCiAgICAgcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogdGVtcGxhdGUg
PHR5cGVuYW1lIFZhbHVlVHlwZT4KLXN0YXRpYyB2b2lkIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQo
Y29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50LCBWYWx1ZVR5cGUgY3VycmVudCwgVmFs
dWVUeXBlIGNhcGFiaWxpdHlNaW4sIFZhbHVlVHlwZSBjYXBhYmlsaXR5TWF4LCBSZWFsdGltZU1l
ZGlhU291cmNlKiBzb3VyY2UsIHZvaWQgKFJlYWx0aW1lTWVkaWFTb3VyY2U6OipmdW5jdGlvbiko
VmFsdWVUeXBlKSkKK3N0YXRpYyB2b2lkIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoY29uc3QgTnVt
ZXJpY0NvbnN0cmFpbnQ8VmFsdWVUeXBlPiYgY29uc3RyYWludCwgVmFsdWVUeXBlIGN1cnJlbnQs
IFZhbHVlVHlwZSBjYXBhYmlsaXR5TWluLCBWYWx1ZVR5cGUgY2FwYWJpbGl0eU1heCwgUmVhbHRp
bWVNZWRpYVNvdXJjZSogc291cmNlLCB2b2lkIChSZWFsdGltZU1lZGlhU291cmNlOjoqYXBwbGll
cikoVmFsdWVUeXBlKSkKIHsKICAgICBWYWx1ZVR5cGUgdmFsdWU7CiAgICAgVmFsdWVUeXBlIG1p
biA9IGNhcGFiaWxpdHlNaW47CkBAIC0yNzMsNyArMjg2LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlO
dW1lcmljQ29uc3RyYWludChjb25zdAogCiAgICAgaWYgKGNvbnN0cmFpbnQuZ2V0RXhhY3QodmFs
dWUpKSB7CiAgICAgICAgIEFTU0VSVChjb25zdHJhaW50LnZhbGlkRm9yUmFuZ2UoY2FwYWJpbGl0
eU1pbiwgY2FwYWJpbGl0eU1heCkpOwotICAgICAgICAoc291cmNlLT4qZnVuY3Rpb24pKHZhbHVl
KTsKKyAgICAgICAgKHNvdXJjZS0+KmFwcGxpZXIpKHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMzAyLDkxICszMTUsMTAyIEBAIHN0YXRpYyB2b2lkIGFwcGx5TnVtZXJpY0Nv
bnN0cmFpbnQoY29uc3QKICAgICB9CiAKICAgICBpZiAodmFsdWUgIT0gY3VycmVudCkKLSAgICAg
ICAgKHNvdXJjZS0+KmZ1bmN0aW9uKSh2YWx1ZSk7CisgICAgICAgIChzb3VyY2UtPiphcHBsaWVy
KSh2YWx1ZSk7CiB9CiAKIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6YXBwbHlDb25zdHJhaW50
KGNvbnN0IE1lZGlhQ29uc3RyYWludCYgY29uc3RyYWludCkKIHsKICAgICBSZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMgPSAqdGhpcy0+Y2FwYWJpbGl0aWVzKCk7
Ci0gICAgc3dpdGNoIChjb25zdHJhaW50LnR5cGUoKSkgeworICAgIHN3aXRjaCAoY29uc3RyYWlu
dC5jb25zdHJhaW50VHlwZSgpKSB7CiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpXaWR0
aDogeworICAgICAgICBBU1NFUlQoY29uc3RyYWludC5pc0ludCgpKTsKICAgICAgICAgaWYgKCFj
YXBhYmlsaXRpZXMuc3VwcG9ydHNXaWR0aCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMud2lkdGgoKTsKLSAgICAgICAgYXBwbHlOdW1l
cmljQ29uc3RyYWludChjb25zdHJhaW50LCBzaXplKCkud2lkdGgoKSwgcmFuZ2UucmFuZ2VNaW4o
KS5hc0ludCwgcmFuZ2UucmFuZ2VNYXgoKS5hc0ludCwgdGhpcywgJlJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OnNldFdpZHRoKTsKKyAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWludChkb3duY2FzdDxJ
bnRDb25zdHJhaW50Pihjb25zdHJhaW50KSwgc2l6ZSgpLndpZHRoKCksIHJhbmdlLnJhbmdlTWlu
KCkuYXNJbnQsIHJhbmdlLnJhbmdlTWF4KCkuYXNJbnQsIHRoaXMsICZSZWFsdGltZU1lZGlhU291
cmNlOjpzZXRXaWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTWVkaWFD
b25zdHJhaW50VHlwZTo6SGVpZ2h0OiB7CisgICAgICAgIEFTU0VSVChjb25zdHJhaW50LmlzSW50
KCkpOwogICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c0hlaWdodCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuaGVpZ2h0
KCk7Ci0gICAgICAgIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoY29uc3RyYWludCwgc2l6ZSgpLmhl
aWdodCgpLCByYW5nZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50LCB0
aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0SGVpZ2h0KTsKKyAgICAgICAgYXBwbHlOdW1l
cmljQ29uc3RyYWludChkb3duY2FzdDxJbnRDb25zdHJhaW50Pihjb25zdHJhaW50KSwgc2l6ZSgp
LmhlaWdodCgpLCByYW5nZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50
LCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0SGVpZ2h0KTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGcmFtZVJhdGU6IHsKKyAg
ICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNEb3VibGUoKSk7CiAgICAgICAgIGlmICghY2FwYWJp
bGl0aWVzLnN1cHBvcnRzRnJhbWVSYXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgYXV0byByYW5nZSA9IGNhcGFiaWxpdGllcy5mcmFtZVJhdGUoKTsKLSAgICAgICAgYXBwbHlO
dW1lcmljQ29uc3RyYWludChjb25zdHJhaW50LCBmcmFtZVJhdGUoKSwgcmFuZ2UucmFuZ2VNaW4o
KS5hc0RvdWJsZSwgcmFuZ2UucmFuZ2VNYXgoKS5hc0RvdWJsZSwgdGhpcywgJlJlYWx0aW1lTWVk
aWFTb3VyY2U6OnNldEZyYW1lUmF0ZSk7CisgICAgICAgIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQo
ZG93bmNhc3Q8RG91YmxlQ29uc3RyYWludD4oY29uc3RyYWludCksIGZyYW1lUmF0ZSgpLCByYW5n
ZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlLCB0aGlzLCAm
UmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0RnJhbWVSYXRlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpBc3BlY3RSYXRpbzogeworICAgICAg
ICBBU1NFUlQoY29uc3RyYWludC5pc0RvdWJsZSgpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRp
ZXMuc3VwcG9ydHNBc3BlY3RSYXRpbygpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuYXNwZWN0UmF0aW8oKTsKLSAgICAgICAgYXBwbHlO
dW1lcmljQ29uc3RyYWludChjb25zdHJhaW50LCBhc3BlY3RSYXRpbygpLCByYW5nZS5yYW5nZU1p
bigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlLCB0aGlzLCAmUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6c2V0QXNwZWN0UmF0aW8pOworICAgICAgICBhcHBseU51bWVyaWNDb25zdHJh
aW50KGRvd25jYXN0PERvdWJsZUNvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLCBhc3BlY3RSYXRpbygp
LCByYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlLCB0
aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0QXNwZWN0UmF0aW8pOwogICAgICAgICBicmVh
azsKICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlZvbHVtZTogeworICAg
ICAgICBBU1NFUlQoY29uc3RyYWludC5pc0RvdWJsZSgpKTsKICAgICAgICAgaWYgKCFjYXBhYmls
aXRpZXMuc3VwcG9ydHNWb2x1bWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBh
dXRvIHJhbmdlID0gY2FwYWJpbGl0aWVzLnZvbHVtZSgpOwotICAgICAgICBhcHBseU51bWVyaWND
b25zdHJhaW50KGNvbnN0cmFpbnQsIHZvbHVtZSgpLCByYW5nZS5yYW5nZU1pbigpLmFzRG91Ymxl
LCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlLCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6
c2V0Vm9sdW1lKTsKKyAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWludChkb3duY2FzdDxEb3Vi
bGVDb25zdHJhaW50Pihjb25zdHJhaW50KSwgdm9sdW1lKCksIHJhbmdlLnJhbmdlTWluKCkuYXNE
b3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUsIHRoaXMsICZSZWFsdGltZU1lZGlhU291
cmNlOjpzZXRWb2x1bWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1lZGlh
Q29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGU6IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQu
aXNJbnQoKSk7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzU2FtcGxlUmF0ZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRp
ZXMuc2FtcGxlUmF0ZSgpOwotICAgICAgICBhcHBseU51bWVyaWNDb25zdHJhaW50KGNvbnN0cmFp
bnQsIHNhbXBsZVJhdGUoKSwgcmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmFuZ2UucmFuZ2VN
YXgoKS5hc0RvdWJsZSwgdGhpcywgJlJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldFNhbXBsZVJhdGUp
OworICAgICAgICBhcHBseU51bWVyaWNDb25zdHJhaW50KGRvd25jYXN0PEludENvbnN0cmFpbnQ+
KGNvbnN0cmFpbnQpLCBzYW1wbGVSYXRlKCksIHJhbmdlLnJhbmdlTWluKCkuYXNJbnQsIHJhbmdl
LnJhbmdlTWF4KCkuYXNJbnQsIHRoaXMsICZSZWFsdGltZU1lZGlhU291cmNlOjpzZXRTYW1wbGVS
YXRlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRU
eXBlOjpTYW1wbGVTaXplOiB7CisgICAgICAgIEFTU0VSVChjb25zdHJhaW50LmlzSW50KCkpOwog
ICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c1NhbXBsZVNpemUoKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBhdXRvIHJhbmdlID0gY2FwYWJpbGl0aWVzLnNhbXBsZVNp
emUoKTsKLSAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWludChjb25zdHJhaW50LCBzYW1wbGVT
aXplKCksIHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3Vi
bGUsIHRoaXMsICZSZWFsdGltZU1lZGlhU291cmNlOjpzZXRTYW1wbGVTaXplKTsKKyAgICAgICAg
YXBwbHlOdW1lcmljQ29uc3RyYWludChkb3duY2FzdDxJbnRDb25zdHJhaW50Pihjb25zdHJhaW50
KSwgc2FtcGxlU2l6ZSgpLCByYW5nZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgp
LmFzSW50LCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0U2FtcGxlU2l6ZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RWNob0Nh
bmNlbGxhdGlvbjoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkVjaG9DYW5jZWxsYXRp
b246IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNCb29sZWFuKCkpOwogICAgICAgICBp
ZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c0VjaG9DYW5jZWxsYXRpb24oKSkKICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICBib29sIHNldHRpbmc7Ci0gICAgICAgIGlmIChjb25zdHJhaW50
LmdldEV4YWN0KHNldHRpbmcpIHx8IGNvbnN0cmFpbnQuZ2V0SWRlYWwoc2V0dGluZykpCisgICAg
ICAgIGNvbnN0IEJvb2xlYW5Db25zdHJhaW50JiBib29sQ29uc3RyYWludCA9IGRvd25jYXN0PEJv
b2xlYW5Db25zdHJhaW50Pihjb25zdHJhaW50KTsKKyAgICAgICAgaWYgKGJvb2xDb25zdHJhaW50
LmdldEV4YWN0KHNldHRpbmcpIHx8IGJvb2xDb25zdHJhaW50LmdldElkZWFsKHNldHRpbmcpKQog
ICAgICAgICAgICAgc2V0RWNob0NhbmNlbGxhdGlvbihzZXR0aW5nKTsKICAgICAgICAgYnJlYWs7
CisgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdNb2RlOiB7Cisg
ICAgICAgIEFTU0VSVChjb25zdHJhaW50LmlzU3RyaW5nKCkpOwogICAgICAgICBpZiAoIWNhcGFi
aWxpdGllcy5zdXBwb3J0c0ZhY2luZ01vZGUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBhdXRvJiBzdXBwb3J0ZWRNb2RlcyA9IGNhcGFiaWxpdGllcy5mYWNpbmdNb2RlKCk7Ci0g
ICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbChNZWRpYUNvbnN0cmFpbnQ6OkNvbnN0cmFpbnRUeXBl
LCBjb25zdCBTdHJpbmcmKT4gZmlsdGVyID0gW3N1cHBvcnRlZE1vZGVzXShNZWRpYUNvbnN0cmFp
bnQ6OkNvbnN0cmFpbnRUeXBlLCBjb25zdCBTdHJpbmcmIG1vZGVTdHJpbmcpIHsKKyAgICAgICAg
YXV0byBmaWx0ZXIgPSBbc3VwcG9ydGVkTW9kZXNdKGNvbnN0IFN0cmluZyYgbW9kZVN0cmluZykg
ewogICAgICAgICAgICAgYXV0byBtb2RlID0gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjp2
aWRlb0ZhY2luZ01vZGVFbnVtKG1vZGVTdHJpbmcpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBz
dXBwb3J0ZWRNb2RlIDogc3VwcG9ydGVkTW9kZXMpIHsKICAgICAgICAgICAgICAgICBpZiAobW9k
ZSA9PSBzdXBwb3J0ZWRNb2RlKQpAQCAtMzk1LDcgKzQxOSw3IEBAIHZvaWQgUmVhbHRpbWVNZWRp
YVNvdXJjZTo6YXBwbHlDb25zdHJhaW4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfTsKIAotICAgICAgICBhdXRvIG1vZGVTdHJpbmcgPSBjb25zdHJhaW50LmZpbmQoZmlsdGVy
KTsKKyAgICAgICAgYXV0byBtb2RlU3RyaW5nID0gZG93bmNhc3Q8U3RyaW5nQ29uc3RyYWludD4o
Y29uc3RyYWludCkuZmluZChmaWx0ZXIpOwogICAgICAgICBpZiAoIW1vZGVTdHJpbmcuaXNFbXB0
eSgpKQogICAgICAgICAgICAgc2V0RmFjaW5nTW9kZShSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3M6OnZpZGVvRmFjaW5nTW9kZUVudW0obW9kZVN0cmluZykpOwogICAgICAgICBicmVhazsKQEAg
LTQwMyw2ICs0MjcsNyBAQCB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmFwcGx5Q29uc3RyYWlu
CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkRldmljZUlkOgogICAgIGNhc2UgTWVk
aWFDb25zdHJhaW50VHlwZTo6R3JvdXBJZDoKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNT
dHJpbmcoKSk7CiAgICAgICAgIC8vIFRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZSwgbmVpdGhl
ciBjYW4gYmUgY2hhbmdlZC4KICAgICAgICAgYnJlYWs7CiAKQEAgLTQzMSwxNiArNDU2LDIwIEBA
IGJvb2wgUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2VsZWN0U2V0dGluZ3MKICAgICAvLyAzLiBGb3Ig
ZXZlcnkgcG9zc2libGUgc2V0dGluZ3MgZGljdGlvbmFyeSBvZiBjb3B5IGNvbXB1dGUgaXRzIGZp
dG5lc3MgZGlzdGFuY2UsIHRyZWF0aW5nIGJhcmUgdmFsdWVzIG9mCiAgICAgLy8gICAgcHJvcGVy
dGllcyBhcyBpZGVhbCB2YWx1ZXMuIExldCBjYW5kaWRhdGVzIGJlIHRoZSBzZXQgb2Ygc2V0dGlu
Z3MgZGljdGlvbmFyaWVzIGZvciB3aGljaCB0aGUgZml0bmVzcwogICAgIC8vICAgIGRpc3RhbmNl
IGlzIGZpbml0ZS4KLSAgICBhdXRvJiBtYW5kYXRvcnlDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRz
Lm1hbmRhdG9yeUNvbnN0cmFpbnRzKCk7Ci0gICAgZm9yIChhdXRvJiBuYW1lQ29uc3RyYWludFBh
aXIgOiBtYW5kYXRvcnlDb25zdHJhaW50cykgewotICAgICAgICBjb25zdCBhdXRvJiBjb25zdHJh
aW50ID0gbmFtZUNvbnN0cmFpbnRQYWlyLnZhbHVlOwotICAgICAgICBpZiAoZml0bmVzc0Rpc3Rh
bmNlKCpjb25zdHJhaW50KSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5
KCkpIHsKLSAgICAgICAgICAgIGZhaWxlZENvbnN0cmFpbnQgPSBjb25zdHJhaW50LT5uYW1lKCk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmYWlsZWRDb25zdHJhaW50ID0gZW1w
dHlTdHJpbmcoKTsKKyAgICBjb25zdHJhaW50cy5tYW5kYXRvcnlDb25zdHJhaW50cygpLmZpbHRl
cihbJl0oY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KSB7CisgICAgICAgIGlmIChm
aXRuZXNzRGlzdGFuY2UoY29uc3RyYWludCkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjppbmZpbml0eSgpKSB7CisgICAgICAgICAgICBmYWlsZWRDb25zdHJhaW50ID0gY29uc3RyYWlu
dC5uYW1lKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAg
IGNhbmRpZGF0ZXMuc2V0KCpjb25zdHJhaW50KTsKLSAgICB9CisgICAgICAgIGNhbmRpZGF0ZXMu
c2V0KGNvbnN0cmFpbnQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisKKyAgICBp
ZiAoIWZhaWxlZENvbnN0cmFpbnQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAvLyA0LiBJZiBjYW5kaWRhdGVzIGlzIGVtcHR5LCByZXR1cm4gdW5kZWZpbmVkIGFzIHRo
ZSByZXN1bHQgb2YgdGhlIFNlbGVjdFNldHRpbmdzKCkgYWxnb3JpdGhtLgogICAgIGlmIChjYW5k
aWRhdGVzLmlzRW1wdHkoKSkKQEAgLTQ1MywxNSArNDgyLDE3IEBAIGJvb2wgUmVhbHRpbWVNZWRp
YVNvdXJjZTo6c2VsZWN0U2V0dGluZ3MKICAgICAvLyAgICAgdmFsdWVzIG9mIHByb3BlcnRpZXMg
YXMgZXhhY3QuCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIE1lZGlhVHJhY2tDb25zdHJh
aW50U2V0TWFwPj4gc3VwcG9ydGVkQ29uc3RyYWludHM7CiAgICAgZG91YmxlIG1pbmltdW1EaXN0
YW5jZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKwogICAgIGZv
ciAoY29uc3QgYXV0byYgYWR2YW5jZWRDb25zdHJhaW50IDogY29uc3RyYWludHMuYWR2YW5jZWRD
b25zdHJhaW50cygpKSB7CiAgICAgICAgIGRvdWJsZSBjb25zdHJhaW50RGlzdGFuY2UgPSAwOwog
ICAgICAgICBib29sIHN1cHBvcnRlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGF1dG8mIG5hbWVD
b25zdHJhaW50UGFpciA6IGFkdmFuY2VkQ29uc3RyYWludCkgewotICAgICAgICAgICAgZG91Ymxl
IGRpc3RhbmNlID0gZml0bmVzc0Rpc3RhbmNlKCpuYW1lQ29uc3RyYWludFBhaXIudmFsdWUpOwor
CisgICAgICAgIGFkdmFuY2VkQ29uc3RyYWludC5mb3JFYWNoKFsmXShjb25zdCBNZWRpYUNvbnN0
cmFpbnQmIGNvbnN0cmFpbnQpIHsKKyAgICAgICAgICAgIGRvdWJsZSBkaXN0YW5jZSA9IGZpdG5l
c3NEaXN0YW5jZShjb25zdHJhaW50KTsKICAgICAgICAgICAgIGNvbnN0cmFpbnREaXN0YW5jZSAr
PSBkaXN0YW5jZTsKICAgICAgICAgICAgIGlmIChkaXN0YW5jZSAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OmluZmluaXR5KCkpCiAgICAgICAgICAgICAgICAgc3VwcG9ydGVkID0gdHJ1
ZTsKLSAgICAgICAgfQorICAgICAgICB9KTsKIAogICAgICAgICBpZiAoY29uc3RyYWludERpc3Rh
bmNlIDwgbWluaW11bURpc3RhbmNlKQogICAgICAgICAgICAgbWluaW11bURpc3RhbmNlID0gY29u
c3RyYWludERpc3RhbmNlOwpAQCAtNDc2LDM1ICs1MDcsMzQgQEAgYm9vbCBSZWFsdGltZU1lZGlh
U291cmNlOjpzZWxlY3RTZXR0aW5ncwogICAgIC8vIDYuIFNlbGVjdCBvbmUgc2V0dGluZ3MgZGlj
dGlvbmFyeSBmcm9tIGNhbmRpZGF0ZXMsIGFuZCByZXR1cm4gaXQgYXMgdGhlIHJlc3VsdCBvZiB0
aGUgU2VsZWN0U2V0dGluZ3MoKSBhbGdvcml0aG0uCiAgICAgLy8gICAgVGhlIFVBIHNob3VsZCB1
c2UgdGhlIG9uZSB3aXRoIHRoZSBzbWFsbGVzdCBmaXRuZXNzIGRpc3RhbmNlLCBhcyBjYWxjdWxh
dGVkIGluIHN0ZXAgMy4KICAgICBpZiAobWluaW11bURpc3RhbmNlICE9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkgewotICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50
cy5yZW1vdmVBbGxNYXRjaGluZyggWyZdIChzdGQ6OnBhaXI8ZG91YmxlLCBNZWRpYVRyYWNrQ29u
c3RyYWludFNldE1hcD4gcGFpcikgLT4gYm9vbCB7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFp
bnRzLnJlbW92ZUFsbE1hdGNoaW5nKFsmXShzdGQ6OnBhaXI8ZG91YmxlLCBNZWRpYVRyYWNrQ29u
c3RyYWludFNldE1hcD4gcGFpcikgLT4gYm9vbCB7CiAgICAgICAgICAgICByZXR1cm4gcGFpci5m
aXJzdCA+IG1pbmltdW1EaXN0YW5jZTsKICAgICAgICAgfSk7CiAKICAgICAgICAgaWYgKCFzdXBw
b3J0ZWRDb25zdHJhaW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGF1dG8mIGFkdmFuY2Vk
Q29uc3RyYWludCA9IHN1cHBvcnRlZENvbnN0cmFpbnRzWzBdLnNlY29uZDsKLSAgICAgICAgICAg
IGZvciAoYXV0byYgbmFtZUNvbnN0cmFpbnRQYWlyIDogYWR2YW5jZWRDb25zdHJhaW50KQotICAg
ICAgICAgICAgICAgIGNhbmRpZGF0ZXMubWVyZ2UoKm5hbWVDb25zdHJhaW50UGFpci52YWx1ZSk7
CisgICAgICAgICAgICBhZHZhbmNlZENvbnN0cmFpbnQuZm9yRWFjaChbJl0oY29uc3QgTWVkaWFD
b25zdHJhaW50JiBjb25zdHJhaW50KSB7CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5tZXJn
ZShjb25zdHJhaW50KTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLQogdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0
cmFpbnRzKGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIGNvbnN0cmFpbnRzLCBTdWNjZXNzSGFuZGxl
ciBzdWNjZXNzSGFuZGxlciwgRmFpbHVyZUhhbmRsZXIgZmFpbHVyZUhhbmRsZXIpCiB7CiAgICAg
QVNTRVJUKGNvbnN0cmFpbnRzLmlzVmFsaWQoKSk7CiAKICAgICBGbGF0dGVuZWRDb25zdHJhaW50
IGNhbmRpZGF0ZXM7Ci0KICAgICBTdHJpbmcgZmFpbGVkQ29uc3RyYWludDsKICAgICBpZiAoIXNl
bGVjdFNldHRpbmdzKGNvbnN0cmFpbnRzLCBjYW5kaWRhdGVzLCBmYWlsZWRDb25zdHJhaW50KSkg
ewogICAgICAgICBmYWlsdXJlSGFuZGxlcihmYWlsZWRDb25zdHJhaW50LCAiQ29uc3RyYWludCBu
b3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8g
Y29uc3RyYWludCA6IGNhbmRpZGF0ZXMpCi0gICAgICAgIGFwcGx5Q29uc3RyYWludCgqY29uc3Ry
YWludCk7CisgICAgZm9yIChhdXRvJiB2YXJpYW50IDogY2FuZGlkYXRlcykKKyAgICAgICAgYXBw
bHlDb25zdHJhaW50KHZhcmlhbnQpOwogCiAgICAgc3VjY2Vzc0hhbmRsZXIoKTsKIH0KQEAgLTU3
OCw3ICs2MDgsNyBAQCB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldFZvbHVtZShkb3ViCiAg
ICAgc2V0dGluZ3NEaWRDaGFuZ2UoKTsKIH0KIAotdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpz
ZXRTYW1wbGVSYXRlKGRvdWJsZSByYXRlKQordm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpzZXRT
YW1wbGVSYXRlKGludCByYXRlKQogewogICAgIGlmIChtX3NhbXBsZVJhdGUgPT0gcmF0ZSB8fCAh
YXBwbHlTYW1wbGVSYXRlKHJhdGUpKQogICAgICAgICByZXR1cm47CkBAIC01ODcsNyArNjE3LDcg
QEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpzZXRTYW1wbGVSYXRlKAogICAgIHNldHRpbmdz
RGlkQ2hhbmdlKCk7CiB9CiAKLXZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0U2FtcGxlU2l6
ZShkb3VibGUgc2l6ZSkKK3ZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0U2FtcGxlU2l6ZShp
bnQgc2l6ZSkKIHsKICAgICBpZiAobV9zYW1wbGVTaXplID09IHNpemUgfHwgIWFwcGx5U2FtcGxl
U2l6ZShzaXplKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAkocmV2
aXNpb24gMjA2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVNZWRpYVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsMTMgKzE0OCwxMyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRWb2x1bWUoZG91YmxlKTsKICAgICB2aXJ0dWFsIGJvb2wgYXBw
bHlWb2x1bWUoZG91YmxlKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgZG91YmxlIHNhbXBsZVJh
dGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KLSAgICB2b2lkIHNldFNhbXBsZVJh
dGUoZG91YmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTYW1wbGVSYXRlKGRvdWJsZSkgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotICAgIGRvdWJsZSBzYW1wbGVTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zYW1wbGVTaXplOyB9Ci0gICAgdm9pZCBzZXRTYW1wbGVTaXplKGRvdWJsZSk7Ci0gICAgdmly
dHVhbCBib29sIGFwcGx5U2FtcGxlU2l6ZShkb3VibGUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
aW50IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KKyAgICB2b2lk
IHNldFNhbXBsZVJhdGUoaW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTYW1wbGVSYXRlKGlu
dCkgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIGludCBzYW1wbGVTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zYW1wbGVTaXplOyB9CisgICAgdm9pZCBzZXRTYW1wbGVTaXplKGludCk7CisgICAgdmly
dHVhbCBib29sIGFwcGx5U2FtcGxlU2l6ZShpbnQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBi
b29sIGVjaG9DYW5jZWxsYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2VjaG9DYW5jZWxsYXRpb247
IH0KICAgICB2b2lkIHNldEVjaG9DYW5jZWxsYXRpb24oYm9vbCk7CkBAIC0xNzAsNyArMTcwLDYg
QEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBXZWFrUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+
IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIo
KTsgfQogCi0gICAgYm9vbCBzdXBwb3J0c0NvbnN0cmFpbnRzKGNvbnN0IE1lZGlhVHJhY2tDb25z
dHJhaW50U2V0TWFwJik7CiAgICAgYm9vbCBzZWxlY3RTZXR0aW5ncyhjb25zdCBNZWRpYUNvbnN0
cmFpbnRzJiwgRmxhdHRlbmVkQ29uc3RyYWludCYsIFN0cmluZyYpOwogICAgIGRvdWJsZSBmaXRu
ZXNzRGlzdGFuY2UoY29uc3QgTWVkaWFDb25zdHJhaW50Jik7CiAgICAgdm9pZCBhcHBseUNvbnN0
cmFpbnQoY29uc3QgTWVkaWFDb25zdHJhaW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2
aWNlTWFuYWdlci5tbQkocmV2aXNpb24gMjA2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI2Nyw3ICsyNjcsNyBAQCBDYXB0dXJlU2Vzc2lvbkluZm8gQVZDYXB0dXJlRGV2aWNl
TWFuYWdlCiBib29sIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNlc3Npb25TdXBwb3J0c0NvbnN0
cmFpbnQoY29uc3QgQ2FwdHVyZVNlc3Npb25JbmZvKiBzZXNzaW9uLCBSZWFsdGltZU1lZGlhU291
cmNlOjpUeXBlIHR5cGUsIGNvbnN0IE1lZGlhQ29uc3RyYWludCYgY29uc3RyYWludCkKIHsKICAg
ICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmIHN1cHBvcnRl
ZENvbnN0cmFpbnRzID0gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuc3Vw
cG9ydGVkQ29uc3RyYWludHMoKTsKLSAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0cmFpbnRU
eXBlID0gY29uc3RyYWludC50eXBlKCk7CisgICAgTWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJh
aW50VHlwZSA9IGNvbnN0cmFpbnQuY29uc3RyYWludFR5cGUoKTsKICAgICBpZiAoIXN1cHBvcnRl
ZENvbnN0cmFpbnRzLnN1cHBvcnRzQ29uc3RyYWludChjb25zdHJhaW50VHlwZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMjc5LDcgKzI3OSw3IEBAIGJvb2wgQVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c2Vzc2lvblN1cHAKICAgICAgICAgaWYgKGNvbnN0cmFpbnRUeXBlID09IE1lZGlh
Q29uc3RyYWludFR5cGU6OldpZHRoKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDU3OC4gU3VwcG9ydCBtaW4sIG1heCBj
b25zdHJhaW50cy4KICAgICAgICAgICAgIGludCBleGFjdDsKLSAgICAgICAgICAgIGlmICghY29u
c3RyYWludC5nZXRFeGFjdChleGFjdCkpCisgICAgICAgICAgICBpZiAoIWRvd25jYXN0PGNvbnN0
IEludENvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmdldEV4YWN0KGV4YWN0KSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHJldHVybiAhc2Vzc2lvbi0+YmVzdFNl
c3Npb25QcmVzZXRGb3JWaWRlb0RpbWVuc2lvbnMoZXhhY3QsIDApLmlzRW1wdHkoKTsKQEAgLTI4
OCw3ICsyODgsNyBAQCBib29sIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNlc3Npb25TdXBwCiAg
ICAgICAgIGlmIChjb25zdHJhaW50VHlwZSA9PSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQp
IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwNTc4LiBTdXBwb3J0IG1pbiwgbWF4IGNvbnN0cmFpbnRzLgogICAgICAgICAg
ICAgaW50IGV4YWN0OwotICAgICAgICAgICAgaWYgKCFjb25zdHJhaW50LmdldEV4YWN0KGV4YWN0
KSkKKyAgICAgICAgICAgIGlmICghZG93bmNhc3Q8Y29uc3QgSW50Q29uc3RyYWludD4oY29uc3Ry
YWludCkuZ2V0RXhhY3QoZXhhY3QpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICAgICAgcmV0dXJuICFzZXNzaW9uLT5iZXN0U2Vzc2lvblByZXNldEZvclZpZGVvRGlt
ZW5zaW9ucygwLCBleGFjdCkuaXNFbXB0eSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9NZWRpYUNvbnN0cmFpbnRzTW9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9NZWRpYUNvbnN0cmFpbnRzTW9jay5jcHAJKHJldmlzaW9uIDIw
NjI1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTWVkaWFDb25zdHJhaW50c01v
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNSArNDMsMTUgQEAgc3RhdGljIGJvb2wgaXNJ
bnRNZWRpYUNvbnN0cmFpbnRTYXRpc2ZpYQogICAgIGludCBmbG9vciA9IDA7CiAKICAgICBpbnQg
bWluID0gZmxvb3I7Ci0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0TWluKG1pbikgJiYgbWluID4gY2Vp
bGluZykKKyAgICBpZiAoZG93bmNhc3Q8Y29uc3QgSW50Q29uc3RyYWludD4oY29uc3RyYWludCku
Z2V0TWluKG1pbikgJiYgbWluID4gY2VpbGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaW50IG1heCA9IGNlaWxpbmc7Ci0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0TWF4KG1heCkgJiYg
bWF4IDwgbWluKQorICAgIGlmIChkb3duY2FzdDxjb25zdCBJbnRDb25zdHJhaW50Pihjb25zdHJh
aW50KS5nZXRNYXgobWF4KSAmJiBtYXggPCBtaW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGludCBleGFjdDsKLSAgICBpZiAoY29uc3RyYWludC5nZXRFeGFjdChleGFjdCkgJiYgKGV4
YWN0IDwgbWluIHx8IGV4YWN0ID4gbWF4KSkKKyAgICBpZiAoZG93bmNhc3Q8Y29uc3QgSW50Q29u
c3RyYWludD4oY29uc3RyYWludCkuZ2V0RXhhY3QoZXhhY3QpICYmIChleGFjdCA8IG1pbiB8fCBl
eGFjdCA+IG1heCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpA
QCAtNjMsMTUgKzYzLDE1IEBAIHN0YXRpYyBib29sIGlzRG91YmxlTWVkaWFDb25zdHJhaW50U2F0
aXMKICAgICBkb3VibGUgZmxvb3IgPSAwOwogCiAgICAgZG91YmxlIG1pbiA9IGZsb29yOwotICAg
IGlmIChjb25zdHJhaW50LmdldE1pbihtaW4pICYmIG1pbiA+IGNlaWxpbmcpCisgICAgaWYgKGRv
d25jYXN0PGNvbnN0IERvdWJsZUNvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmdldE1pbihtaW4pICYm
IG1pbiA+IGNlaWxpbmcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGRvdWJsZSBtYXgg
PSBjZWlsaW5nOwotICAgIGlmIChjb25zdHJhaW50LmdldE1heChtYXgpICYmIG1heCA8IG1pbikK
KyAgICBpZiAoZG93bmNhc3Q8Y29uc3QgRG91YmxlQ29uc3RyYWludD4oY29uc3RyYWludCkuZ2V0
TWF4KG1heCkgJiYgbWF4IDwgbWluKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBkb3Vi
bGUgZXhhY3Q7Ci0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0RXhhY3QoZXhhY3QpICYmIChleGFjdCA8
IG1pbiB8fCBleGFjdCA+IG1heCkpCisgICAgaWYgKGRvd25jYXN0PGNvbnN0IERvdWJsZUNvbnN0
cmFpbnQ+KGNvbnN0cmFpbnQpLmdldEV4YWN0KGV4YWN0KSAmJiAoZXhhY3QgPCBtaW4gfHwgZXhh
Y3QgPiBtYXgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTgwLDcgKzgwLDcgQEAgc3RhdGljIGJvb2wgaXNEb3VibGVNZWRpYUNvbnN0cmFpbnRTYXRpcwog
c3RhdGljIGJvb2wgaXNCb29sZWFuTWVkaWFDb25zdHJhaW50U2F0aXNmaWFibGUoY29uc3QgTWVk
aWFDb25zdHJhaW50JiBjb25zdHJhaW50KQogewogICAgIGJvb2wgZXhhY3Q7Ci0gICAgaWYgKGNv
bnN0cmFpbnQuZ2V0RXhhY3QoZXhhY3QpKQorICAgIGlmIChkb3duY2FzdDxjb25zdCBCb29sZWFu
Q29uc3RyYWludD4oY29uc3RyYWludCkuZ2V0RXhhY3QoZXhhY3QpKQogICAgICAgICByZXR1cm4g
ZXhhY3Q7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg5LDcgKzg5LDcgQEAgc3RhdGljIGJvb2wg
aXNCb29sZWFuTWVkaWFDb25zdHJhaW50U2F0aQogc3RhdGljIGJvb2wgaXNTdHJpbmdNZWRpYUNv
bnN0cmFpbnRTYXRpc2ZpYWJsZShjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7
CiAgICAgVmVjdG9yPFN0cmluZz4gZXhhY3Q7Ci0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0RXhhY3Qo
ZXhhY3QpKSB7CisgICAgaWYgKGRvd25jYXN0PGNvbnN0IFN0cmluZ0NvbnN0cmFpbnQ+KGNvbnN0
cmFpbnQpLmdldEV4YWN0KGV4YWN0KSkgewogICAgICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnRW
YWx1ZSA6IGV4YWN0KSB7CiAgICAgICAgICAgICBpZiAoY29uc3RyYWludFZhbHVlLmZpbmQoImlu
dmFsaWQiKSAhPSBub3RGb3VuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MDEsNyArMTAxLDcgQEAgc3RhdGljIGJvb2wgaXNTdHJpbmdNZWRpYUNvbnN0cmFpbnRTYXRpcwog
CiBzdGF0aWMgYm9vbCBpc1NhdGlzZmlhYmxlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlw
ZSwgY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KQogewotICAgIE1lZGlhQ29uc3Ry
YWludFR5cGUgY29uc3RyYWludFR5cGUgPSBjb25zdHJhaW50LnR5cGUoKTsKKyAgICBNZWRpYUNv
bnN0cmFpbnRUeXBlIGNvbnN0cmFpbnRUeXBlID0gY29uc3RyYWludC5jb25zdHJhaW50VHlwZSgp
OwogCiAgICAgaWYgKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8pIHsKICAgICAg
ICAgaWYgKGNvbnN0cmFpbnRUeXBlID09IE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGUg
fHwgY29uc3RyYWludFR5cGUgPT0gTWVkaWFDb25zdHJhaW50VHlwZTo6U2FtcGxlU2l6ZSkKQEAg
LTEyNCwxNSArMTI0LDIwIEBAIHN0YXRpYyBib29sIGlzU2F0aXNmaWFibGUoUmVhbHRpbWVNZWRp
YVMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWNvbnN0IFN0cmluZyYgTWVkaWFDb25zdHJhaW50
c01vY2s6OnZlcmlmeUNvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwg
Y29uc3QgTWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWludHMpCitjb25zdCBTdHJpbmcgTWVkaWFD
b25zdHJhaW50c01vY2s6OnZlcmlmeUNvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGUgdHlwZSwgY29uc3QgTWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWludHMpCiB7Ci0gICAgYXV0
byYgbWFuZGF0b3J5Q29uc3RyYWludHMgPSBjb25zdHJhaW50cy5tYW5kYXRvcnlDb25zdHJhaW50
cygpOwotICAgIGZvciAoYXV0byYgbmFtZUNvbnN0cmFpbnRQYWlyIDogbWFuZGF0b3J5Q29uc3Ry
YWludHMpIHsKLSAgICAgICAgaWYgKCFpc1NhdGlzZmlhYmxlKHR5cGUsICpuYW1lQ29uc3RyYWlu
dFBhaXIudmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIG5hbWVDb25zdHJhaW50UGFpci5rZXk7
Ci0gICAgfQorICAgIFN0cmluZyBpbnZhbGlkQ29uc3RyYWludCA9IGVtcHR5U3RyaW5nKCk7Cisg
ICAgY29uc3RyYWludHMubWFuZGF0b3J5Q29uc3RyYWludHMoKS5maWx0ZXIoWyZdKGNvbnN0IE1l
ZGlhQ29uc3RyYWludCYgY29uc3RyYWludCkgeworICAgICAgICBpZiAoIWlzU2F0aXNmaWFibGUo
dHlwZSwgY29uc3RyYWludCkpIHsKKyAgICAgICAgICAgIGludmFsaWRDb25zdHJhaW50ID0gY29u
c3RyYWludC5uYW1lKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9KTsKKworICAgIHJldHVybiBpbnZhbGlkQ29uc3Ry
YWludDsKIAotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01lZGlhQ29uc3RyYWlu
dHNNb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9NZWRp
YUNvbnN0cmFpbnRzTW9jay5oCShyZXZpc2lvbiAyMDYyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tb2NrL01lZGlhQ29uc3RyYWludHNNb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDcgQEAgY2xhc3MgTWVkaWFDb25zdHJhaW50czsKIAogY2xhc3MgTWVkaWFDb25zdHJh
aW50c01vY2sgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIHZlcmlmeUNvbnN0
cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMm
KTsKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nIHZlcmlmeUNvbnN0cmFpbnRzKFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlR5cGUsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMmKTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1Jl
YWx0aW1lQXVkaW9Tb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tb2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmgJKHJldmlzaW9uIDIwNjI1MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogCiAgICAg
Ym9vbCBhcHBseVZvbHVtZShkb3VibGUpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICBi
b29sIGFwcGx5U2FtcGxlUmF0ZShkb3VibGUpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICBib29sIGFwcGx5U2FtcGxlU2l6ZShkb3VibGUpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
KyAgICBib29sIGFwcGx5U2FtcGxlUmF0ZShpbnQpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
KyAgICBib29sIGFwcGx5U2FtcGxlU2l6ZShpbnQpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
ICAgICBib29sIGFwcGx5RWNob0NhbmNlbGxhdGlvbihib29sKSBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CiAKICAgICB2b2lkIHVwZGF0ZVNldHRpbmdzKFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5ncyYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAJKHJldmlz
aW9uIDIwNjI1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAg
dm9pZCBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6Y3JlYQogICAgIFZlY3RvcjxSZWZQ
dHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+IHZpZGVvU291cmNlczsKIAogICAgIGlmIChhdWRpb0Nv
bnN0cmFpbnRzLmlzVmFsaWQoKSkgewotICAgICAgICBjb25zdCBTdHJpbmcmIGludmFsaWRRdWVy
eSA9IE1lZGlhQ29uc3RyYWludHNNb2NrOjp2ZXJpZnlDb25zdHJhaW50cyhSZWFsdGltZU1lZGlh
U291cmNlOjpBdWRpbywgYXVkaW9Db25zdHJhaW50cyk7CisgICAgICAgIGNvbnN0IFN0cmluZyBp
bnZhbGlkUXVlcnkgPSBNZWRpYUNvbnN0cmFpbnRzTW9jazo6dmVyaWZ5Q29uc3RyYWludHMoUmVh
bHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8sIGF1ZGlvQ29uc3RyYWludHMpOwogICAgICAgICBpZiAo
IWludmFsaWRRdWVyeS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNsaWVudC0+ZmFpbGVkVG9D
cmVhdGVTdHJlYW1XaXRoQ29uc3RyYWludHNFcnJvcihpbnZhbGlkUXVlcnkpOwogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgTW9ja1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXI6OmNyZWEKICAgICB9CiAKICAgICBpZiAodmlkZW9Db25zdHJhaW50cy5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBpbnZhbGlkUXVlcnkgPSBNZWRpYUNvbnN0cmFp
bnRzTW9jazo6dmVyaWZ5Q29uc3RyYWludHMoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8sIHZp
ZGVvQ29uc3RyYWludHMpOworICAgICAgICBjb25zdCBTdHJpbmcgaW52YWxpZFF1ZXJ5ID0gTWVk
aWFDb25zdHJhaW50c01vY2s6OnZlcmlmeUNvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlZpZGVvLCB2aWRlb0NvbnN0cmFpbnRzKTsKICAgICAgICAgaWYgKCFpbnZhbGlkUXVlcnkuaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICBjbGllbnQtPmZhaWxlZFRvQ3JlYXRlU3RyZWFtV2l0aENv
bnN0cmFpbnRzRXJyb3IoaW52YWxpZFF1ZXJ5KTsKICAgICAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289972</attachid>
            <date>2016-09-27 10:43:37 -0700</date>
            <delta_ts>2016-09-27 10:49:06 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>access_from_ui_process_patch_10.txt</filename>
            <type>text/plain</type>
            <size>85353</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjQzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBAQAorMjAxNi0wOS0yNyAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWVkaWFTdHJlYW1d
IFJlc3RydWN0dXJlIE1lZGlhQ29uc3RyYWludHMgY2xhc3NlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNTcxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFs
IGNoYW5nZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWlu
dHNJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHNJbXBsOjppbml0
aWFsaXplKTogRGVsZXRlZCwgbm8gbG9uZ2VyIHVzZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5oOgorCisgICAgICAgICogYmluZGluZ3MvanMv
SlNNZWRpYURldmljZXNDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU3RyaW5n
Q29uc3RyYWludCk6IFJldHVybiBPcHRpb25hbDw+IGluc3RlYWQgb2YgUmVmUHRyPD4uCisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVCb29sZWFuQ29uc3RyYWludCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlRG91YmxlQ29uc3RyYWludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlSW50Q29uc3RyYWludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VN
ZWRpYVRyYWNrQ29uc3RyYWludFNldEZvcktleSk6IERlYWwgd2l0aCBhYm92ZSBjaGFuZ2UuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHA6
CisgICAgICAgIChDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3RyYWludHNGb3JNZWRp
YVR5cGUpOiBVc2UgY29uc3RyYWludHMubWFuZGF0b3J5Q29uc3RyYWludHMuZmlsdGVyCisgICAg
ICAgICAgaW5zdGVhZCBvZiBkaXJlY3QgZW51bWVyYXRpb24uCisgICAgICAgIChDYXB0dXJlRGV2
aWNlTWFuYWdlcjo6c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludCk6IFVzZSBkb3duY2FzdDw+Lgor
ICAgICAgICAoQ2FwdHVyZURldmljZU1hbmFnZXI6OmlzU3VwcG9ydGVkRnJhbWVSYXRlKTogRGl0
dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0NvbnN0cmFpbnQ6OmZpbmQpOiBMb3NlIHRoZSBD
b25zdHJhaW50VHlwZSBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdDb25zdHJh
aW50OjptZXJnZSk6IFVzZSBkb3duY2FzdDw+LgorICAgICAgICAoV2ViQ29yZTo6RmxhdHRlbmVk
Q29uc3RyYWludDo6c2V0KTogVXNlIENvbnN0cmFpbnRIb2xkZXIuCisgICAgICAgIChXZWJDb3Jl
OjpGbGF0dGVuZWRDb25zdHJhaW50OjptZXJnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6OmZvckVhY2gpOiBOZXcuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcDo6ZmlsdGVyKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcDo6aXNFbXB0eSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6OnNldCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50Ojpjb3B5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkludENvbnN0cmFpbnQ6OmNvcHkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RG91YmxlQ29uc3RyYWludDo6Y29weSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpCb29sZWFuQ29uc3RyYWludDo6Y29weSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdHJpbmdDb25zdHJhaW50Ojpjb3B5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnN0cmFpbnQ6Ok1lZGlhQ29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0
cmFpbnQ6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50Ojppc01h
bmRhdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnQ6Om1lcmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludDo6aXNJbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb25zdHJhaW50Ojppc0RvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnN0cmFpbnQ6OmlzQm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnQ6
OmlzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludDo6ZGF0YVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50Ojpjb25zdHJhaW50VHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6Z2V0TWluKToKKyAgICAgICAgKFdl
YkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpnZXRNYXgpOgorICAgICAgICAoV2ViQ29yZTo6TnVt
ZXJpY0NvbnN0cmFpbnQ6OmdldEV4YWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25z
dHJhaW50OjpnZXRJZGVhbCk6CisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6
Zml0bmVzc0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50Ojp2
YWxpZEZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpmaW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpOdW1lcmljQ29uc3RyYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6aW5uZXJNZXJnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50Ojppc0VtcHR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjppdGVyYXRvcjo6b3BlcmF0b3IqKToK
KyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6Oml0ZXJhdG9yOjpvcGVyYXRv
cisrKToKKyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6Oml0ZXJhdG9yOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6Oml0ZXJh
dG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6
OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6OmVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjpDb25zdHJhaW50SG9sZGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmxhdHRlbmVkQ29uc3RyYWludDo6Q29uc3RyYWlu
dEhvbGRlcjo6fkNvbnN0cmFpbnRIb2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmxhdHRlbmVk
Q29uc3RyYWludDo6Q29uc3RyYWludEhvbGRlcjo6Y29uc3RyYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjpDb25zdHJhaW50SG9sZGVyOjpkYXRhVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjpDb25zdHJhaW50SG9sZGVyOjpj
b25zdHJhaW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjpD
b25zdHJhaW50SG9sZGVyOjpDb25zdHJhaW50SG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29uc3RyYWludDo6Z2V0TWluKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29uc3RyYWludDo6Z2V0TWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29u
c3RyYWludDo6Z2V0RXhhY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25z
dHJhaW50OjpnZXRJZGVhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0
cmFpbnQ6OnZhbGlkRm9yUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b25zdHJhaW50OjpmaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3Ry
YWludDo6Zml0bmVzc0Rpc3RhbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29uc3RyYWludDo6dHlwZSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1l
TWVkaWFTb3VyY2U6OmZpdG5lc3NEaXN0YW5jZSk6IFVzZSBkb3duY2FzdDw+LgorICAgICAgICAo
V2ViQ29yZTo6YXBwbHlOdW1lcmljQ29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFs
dGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lTWVkaWFTb3VyY2U6OnNlbGVjdFNldHRpbmdzKTogRGl0dG8uIFVzZSBjb25z
dHJhaW50cy5tYW5kYXRvcnlDb25zdHJhaW50cy5maWx0ZXIKKyAgICAgICAgICBpbnN0ZWFkIG9m
IGRpcmVjdCBlbnVtZXJhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OmFwcGx5Q29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNv
dXJjZTo6c2V0U2FtcGxlUmF0ZSk6IFNhbXBsZSByYXRlIGlzIGFuIGludCwgbm90IGEgZG91Ymxl
LgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0U2FtcGxlU2l6ZSk6
IFNhbXBsZSBzaXplIGlzIGFsc28gYW4gaW50LgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaDoKKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVZD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludCk6IFVzZSBkb3du
Y2FzdDw+LgorCisgICAgICAgICogcGxhdGZvcm0vbW9jay9NZWRpYUNvbnN0cmFpbnRzTW9jay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjppc0ludE1lZGlhQ29uc3RyYWludFNhdGlzZmlhYmxlKTog
VXNlIGRvd25jYXN0PD4uCisgICAgICAgIChXZWJDb3JlOjppc0RvdWJsZU1lZGlhQ29uc3RyYWlu
dFNhdGlzZmlhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc0Jvb2xlYW5NZWRpYUNv
bnN0cmFpbnRTYXRpc2ZpYWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNTdHJpbmdN
ZWRpYUNvbnN0cmFpbnRTYXRpc2ZpYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjppc1NhdGlzZmlh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHNNb2NrOjp2ZXJpZnlDb25z
dHJhaW50cyk6IFVzZSBjb25zdHJhaW50cy5tYW5kYXRvcnlDb25zdHJhaW50cy5maWx0ZXIKKyAg
ICAgICAgICBpbnN0ZWFkIG9mIGRpcmVjdCBlbnVtZXJhdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9y
bS9tb2NrL01lZGlhQ29uc3RyYWludHNNb2NrLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2Nr
L01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6Y3JlYXRlTWVkaWFTdHJlYW0pOgorCiAyMDE2LTA5LTI3
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbi11cCBD
YWNoZWRJbWFnZSBjb25zdHJ1Y3RvcgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5jcHAJKHJldmlz
aW9uIDIwNjQzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFD
b25zdHJhaW50c0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsNiBAQCBSZWY8
TWVkaWFDb25zdHJhaW50c0ltcGw+IE1lZGlhQ29uc3RyYWluCiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTWVkaWFDb25zdHJhaW50c0ltcGwoKSk7CiB9CiAKLS8vIEZJWE1FOiBSZW1vdmUgYWZ0
ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDU3OQotdm9pZCBN
ZWRpYUNvbnN0cmFpbnRzSW1wbDo6aW5pdGlhbGl6ZShjb25zdCBEaWN0aW9uYXJ5JiBjb25zdHJh
aW50cykKLXsKLSAgICBpZiAoY29uc3RyYWludHMuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgcmV0dXJuOwotfQotCiBSZWY8TWVkaWFDb25zdHJhaW50c0ltcGw+IE1lZGlhQ29uc3RyYWlu
dHNJbXBsOjpjcmVhdGUoTWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXAmJiBtYW5kYXRvcnlDb25z
dHJhaW50cywgVmVjdG9yPE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwPiYmIGFkdmFuY2VkQ29u
c3RyYWludHMsIGJvb2wgaXNWYWxpZCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRp
YUNvbnN0cmFpbnRzSW1wbChXVEZNb3ZlKG1hbmRhdG9yeUNvbnN0cmFpbnRzKSwgV1RGTW92ZShh
ZHZhbmNlZENvbnN0cmFpbnRzKSwgaXNWYWxpZCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50c0ltcGwuaAko
cmV2aXNpb24gMjA2NDM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUNvbnN0cmFpbnRzSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw2IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPE1lZGlhQ29uc3RyYWludHNJbXBsPiBjcmVhdGUoTWVkaWFU
cmFja0NvbnN0cmFpbnRTZXRNYXAmJiBtYW5kYXRvcnlDb25zdHJhaW50cywgVmVjdG9yPE1lZGlh
VHJhY2tDb25zdHJhaW50U2V0TWFwPiYmIGFkdmFuY2VkQ29uc3RyYWludHMsIGJvb2wgaXNWYWxp
ZCk7CiAKICAgICB2aXJ0dWFsIH5NZWRpYUNvbnN0cmFpbnRzSW1wbCgpOwotICAgIHZvaWQgaW5p
dGlhbGl6ZShjb25zdCBEaWN0aW9uYXJ5Jik7CiAKICAgICBjb25zdCBNZWRpYVRyYWNrQ29uc3Ry
YWludFNldE1hcCYgbWFuZGF0b3J5Q29uc3RyYWludHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X21hbmRhdG9yeUNvbnN0cmFpbnRzOyB9CiAgICAgY29uc3QgVmVjdG9yPE1lZGlhVHJhY2tDb25z
dHJhaW50U2V0TWFwPiYgYWR2YW5jZWRDb25zdHJhaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fYWR2YW5jZWRDb25zdHJhaW50czsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZWRpYURldmljZXNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVkaWFEZXZpY2VzQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA2NDM1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYURldmljZXNDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1OCw5IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTdHJp
bmdDb25zdHJhaW50V2kKICAgICB9CiB9CiAKLXN0YXRpYyBSZWZQdHI8U3RyaW5nQ29uc3RyYWlu
dD4gY3JlYXRlU3RyaW5nQ29uc3RyYWludChjb25zdCBEaWN0aW9uYXJ5JiBtZWRpYVRyYWNrQ29u
c3RyYWludFNldCwgY29uc3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUs
IENvbnN0cmFpbnRTZXRUeXBlIGNvbnN0cmFpbnRTZXRUeXBlKQorc3RhdGljIE9wdGlvbmFsPFN0
cmluZ0NvbnN0cmFpbnQ+IGNyZWF0ZVN0cmluZ0NvbnN0cmFpbnQoY29uc3QgRGljdGlvbmFyeSYg
bWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJh
aW50VHlwZSB0eXBlLCBDb25zdHJhaW50U2V0VHlwZSBjb25zdHJhaW50U2V0VHlwZSkKIHsKLSAg
ICBhdXRvIGNvbnN0cmFpbnQgPSBTdHJpbmdDb25zdHJhaW50OjpjcmVhdGUobmFtZSwgdHlwZSk7
CisgICAgYXV0byBjb25zdHJhaW50ID0gU3RyaW5nQ29uc3RyYWludChuYW1lLCB0eXBlKTsKIAog
ICAgIC8vIERpY3Rpb25hcnkgY29uc3RyYWludCB2YWx1ZS4KICAgICBEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlWYWx1ZTsKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIFJlZlB0cjxTdHJpbmdDb25zdHJh
aW50PiBjcmVhdGVTdAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFN0cmluZyBleGFjdFN0
cmluZ1ZhbHVlOwogICAgICAgICAgICAgaWYgKGRpY3Rpb25hcnlWYWx1ZS5nZXQoImV4YWN0Iiwg
ZXhhY3RTdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3Qo
ZXhhY3RTdHJpbmdWYWx1ZSk7CisgICAgICAgICAgICAgICAgY29uc3RyYWludC5zZXRFeGFjdChl
eGFjdFN0cmluZ1ZhbHVlKTsKICAgICAgICAgfQogCiAgICAgICAgIEFycmF5VmFsdWUgaWRlYWxB
cnJheVZhbHVlOwpAQCAtODAsMTIgKzgwLDEyIEBAIHN0YXRpYyBSZWZQdHI8U3RyaW5nQ29uc3Ry
YWludD4gY3JlYXRlU3QKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgaWRlYWxT
dHJpbmdWYWx1ZTsKICAgICAgICAgICAgIGlmICghZGljdGlvbmFyeVZhbHVlLmdldCgiaWRlYWwi
LCBpZGVhbFN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgICAgICBjb25zdHJhaW50LT5zZXRJZGVh
bChpZGVhbFN0cmluZ1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBjb25zdHJhaW50LnNldElkZWFs
KGlkZWFsU3RyaW5nVmFsdWUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGNvbnN0cmFpbnQt
PmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoY29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIExPRyhNZWRpYSwgImNyZWF0ZVN0cmluZ0NvbnN0cmFpbnQoKSAtIGlnbm9yaW5nIHN0
cmluZyBjb25zdHJhaW50ICclcycgd2l0aCBkaWN0aW9uYXJ5IHZhbHVlIHNpbmNlIGl0IGhhcyBu
byB2YWxpZCBvciBzdXBwb3J0ZWQga2V5L3ZhbHVlIHBhaXJzLiIsIG5hbWUudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBOdWxs
b3B0OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gV1RGTW92ZShjb25zdHJh
aW50KTsKQEAgLTk2LDkgKzk2LDkgQEAgc3RhdGljIFJlZlB0cjxTdHJpbmdDb25zdHJhaW50PiBj
cmVhdGVTdAogICAgIGlmIChtZWRpYVRyYWNrQ29uc3RyYWludFNldC5nZXQobmFtZSwgYXJyYXlW
YWx1ZSkgJiYgIWFycmF5VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBpbml0
aWFsaXplU3RyaW5nQ29uc3RyYWludFdpdGhMaXN0KGNvbnN0cmFpbnQsICZTdHJpbmdDb25zdHJh
aW50OjphcHBlbmRJZGVhbCwgYXJyYXlWYWx1ZSk7CiAKLSAgICAgICAgaWYgKGNvbnN0cmFpbnQt
PmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoY29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIExPRyhNZWRpYSwgImNyZWF0ZVN0cmluZ0NvbnN0cmFpbnQoKSAtIGlnbm9yaW5nIHN0
cmluZyBjb25zdHJhaW50ICclcycgd2l0aCBhcnJheSB2YWx1ZSBzaW5jZSBpdCBpcyBlbXB0eS4i
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBXVEZN
b3ZlKGNvbnN0cmFpbnQpOwpAQCAtMTA4LDM2ICsxMDgsMzYgQEAgc3RhdGljIFJlZlB0cjxTdHJp
bmdDb25zdHJhaW50PiBjcmVhdGVTdAogICAgIFN0cmluZyB2YWx1ZTsKICAgICBpZiAobWVkaWFU
cmFja0NvbnN0cmFpbnRTZXQuZ2V0KG5hbWUsIHZhbHVlKSkgewogICAgICAgICBpZiAoY29uc3Ry
YWludFNldFR5cGUgPT0gQ29uc3RyYWludFNldFR5cGU6Ok1hbmRhdG9yeSkKLSAgICAgICAgICAg
IGNvbnN0cmFpbnQtPnNldElkZWFsKHZhbHVlKTsKKyAgICAgICAgICAgIGNvbnN0cmFpbnQuc2V0
SWRlYWwodmFsdWUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb25zdHJhaW50LT5zZXRF
eGFjdCh2YWx1ZSk7CisgICAgICAgICAgICBjb25zdHJhaW50LnNldEV4YWN0KHZhbHVlKTsKICAg
ICAgICAgCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKGNvbnN0cmFpbnQpOwogICAgIH0KIAogICAg
IC8vIEludmFsaWQgY29uc3RyYWludCB2YWx1ZS4KICAgICBMT0coTWVkaWEsICJjcmVhdGVTdHJp
bmdDb25zdHJhaW50KCkgLSBpZ25vcmluZyBzdHJpbmcgY29uc3RyYWludCAnJXMnIHNpbmNlIGl0
IGhhcyBuZWl0aGVyIGEgZGljdGlvbmFyeSBub3Igc2VxdWVuY2Ugbm9yIHNjYWxhciB2YWx1ZS4i
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBO
dWxsb3B0OwogfQogCi1zdGF0aWMgUmVmUHRyPEJvb2xlYW5Db25zdHJhaW50PiBjcmVhdGVCb29s
ZWFuQ29uc3RyYWludChjb25zdCBEaWN0aW9uYXJ5JiBtZWRpYVRyYWNrQ29uc3RyYWludFNldCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUsIENvbnN0cmFpbnRT
ZXRUeXBlIGNvbnN0cmFpbnRTZXRUeXBlKQorc3RhdGljIE9wdGlvbmFsPEJvb2xlYW5Db25zdHJh
aW50PiBjcmVhdGVCb29sZWFuQ29uc3RyYWludChjb25zdCBEaWN0aW9uYXJ5JiBtZWRpYVRyYWNr
Q29uc3RyYWludFNldCwgY29uc3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5
cGUsIENvbnN0cmFpbnRTZXRUeXBlIGNvbnN0cmFpbnRTZXRUeXBlKQogewotICAgIGF1dG8gY29u
c3RyYWludCA9IEJvb2xlYW5Db25zdHJhaW50OjpjcmVhdGUobmFtZSwgdHlwZSk7CisgICAgYXV0
byBjb25zdHJhaW50ID0gQm9vbGVhbkNvbnN0cmFpbnQobmFtZSwgdHlwZSk7CiAKICAgICAvLyBE
aWN0aW9uYXJ5IGNvbnN0cmFpbnQgdmFsdWUuCiAgICAgRGljdGlvbmFyeSBkaWN0aW9uYXJ5VmFs
dWU7CiAgICAgaWYgKG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LmdldChuYW1lLCBkaWN0aW9uYXJ5
VmFsdWUpICYmICFkaWN0aW9uYXJ5VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAg
ICBib29sIGV4YWN0VmFsdWU7CiAgICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0KCJleGFj
dCIsIGV4YWN0VmFsdWUpKQotICAgICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3QoZXhhY3RW
YWx1ZSk7CisgICAgICAgICAgICBjb25zdHJhaW50LnNldEV4YWN0KGV4YWN0VmFsdWUpOwogCiAg
ICAgICAgIGJvb2wgaWRlYWxWYWx1ZTsKICAgICAgICAgaWYgKGRpY3Rpb25hcnlWYWx1ZS5nZXQo
ImlkZWFsIiwgaWRlYWxWYWx1ZSkpCi0gICAgICAgICAgICBjb25zdHJhaW50LT5zZXRJZGVhbChp
ZGVhbFZhbHVlKTsKKyAgICAgICAgICAgIGNvbnN0cmFpbnQuc2V0SWRlYWwoaWRlYWxWYWx1ZSk7
CiAKLSAgICAgICAgaWYgKGNvbnN0cmFpbnQtPmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoY29u
c3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIExPRyhNZWRpYSwgImNyZWF0ZUJvb2xl
YW5Db25zdHJhaW50KCkgLSBpZ25vcmluZyBib29sZWFuIGNvbnN0cmFpbnQgJyVzJyB3aXRoIGRp
Y3Rpb25hcnkgdmFsdWUgc2luY2UgaXQgaGFzIG5vIHZhbGlkIG9yIHN1cHBvcnRlZCBrZXkvdmFs
dWUgcGFpcnMuIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgICAgIH0KIAogICAgICAgICBy
ZXR1cm4gV1RGTW92ZShjb25zdHJhaW50KTsKQEAgLTE0Nyw0NCArMTQ3LDQ0IEBAIHN0YXRpYyBS
ZWZQdHI8Qm9vbGVhbkNvbnN0cmFpbnQ+IGNyZWF0ZUIKICAgICBib29sIHZhbHVlOwogICAgIGlm
IChtZWRpYVRyYWNrQ29uc3RyYWludFNldC5nZXQobmFtZSwgdmFsdWUpKSB7CiAgICAgICAgIGlm
IChjb25zdHJhaW50U2V0VHlwZSA9PSBDb25zdHJhaW50U2V0VHlwZTo6TWFuZGF0b3J5KQotICAg
ICAgICAgICAgY29uc3RyYWludC0+c2V0SWRlYWwodmFsdWUpOworICAgICAgICAgICAgY29uc3Ry
YWludC5zZXRJZGVhbCh2YWx1ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnN0cmFp
bnQtPnNldEV4YWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGNvbnN0cmFpbnQuc2V0RXhhY3QodmFs
dWUpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIFdURk1vdmUoY29uc3RyYWludCk7CiAgICAg
fQogCiAgICAgLy8gSW52YWxpZCBjb25zdHJhaW50IHZhbHVlLgogICAgIExPRyhNZWRpYSwgImNy
ZWF0ZUJvb2xlYW5Db25zdHJhaW50KCkgLSBpZ25vcmluZyBib29sZWFuIGNvbnN0cmFpbnQgJyVz
JyBzaW5jZSBpdCBoYXMgbmVpdGhlciBhIGRpY3Rpb25hcnkgbm9yIHNjYWxhciB2YWx1ZS4iLCBu
YW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBOdWxs
b3B0OwogfQogCi1zdGF0aWMgUmVmUHRyPERvdWJsZUNvbnN0cmFpbnQ+IGNyZWF0ZURvdWJsZUNv
bnN0cmFpbnQoY29uc3QgRGljdGlvbmFyeSYgbWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlLCBDb25zdHJhaW50U2V0VHlw
ZSBjb25zdHJhaW50U2V0VHlwZSkKK3N0YXRpYyBPcHRpb25hbDxEb3VibGVDb25zdHJhaW50PiBj
cmVhdGVEb3VibGVDb25zdHJhaW50KGNvbnN0IERpY3Rpb25hcnkmIG1lZGlhVHJhY2tDb25zdHJh
aW50U2V0LCBjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSwgQ29u
c3RyYWludFNldFR5cGUgY29uc3RyYWludFNldFR5cGUpCiB7Ci0gICAgYXV0byBjb25zdHJhaW50
ID0gRG91YmxlQ29uc3RyYWludDo6Y3JlYXRlKG5hbWUsIHR5cGUpOworICAgIGF1dG8gY29uc3Ry
YWludCA9IERvdWJsZUNvbnN0cmFpbnQobmFtZSwgdHlwZSk7CiAKICAgICAvLyBEaWN0aW9uYXJ5
IGNvbnN0cmFpbnQgdmFsdWUuCiAgICAgRGljdGlvbmFyeSBkaWN0aW9uYXJ5VmFsdWU7CiAgICAg
aWYgKG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LmdldChuYW1lLCBkaWN0aW9uYXJ5VmFsdWUpICYm
ICFkaWN0aW9uYXJ5VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBkb3VibGUg
bWluVmFsdWU7CiAgICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0KCJtaW4iLCBtaW5WYWx1
ZSkpCi0gICAgICAgICAgICBjb25zdHJhaW50LT5zZXRNaW4obWluVmFsdWUpOworICAgICAgICAg
ICAgY29uc3RyYWludC5zZXRNaW4obWluVmFsdWUpOwogCiAgICAgICAgIGRvdWJsZSBtYXhWYWx1
ZTsKICAgICAgICAgaWYgKGRpY3Rpb25hcnlWYWx1ZS5nZXQoIm1heCIsIG1heFZhbHVlKSkKLSAg
ICAgICAgICAgIGNvbnN0cmFpbnQtPnNldE1heChtYXhWYWx1ZSk7CisgICAgICAgICAgICBjb25z
dHJhaW50LnNldE1heChtYXhWYWx1ZSk7CiAKICAgICAgICAgZG91YmxlIGV4YWN0VmFsdWU7CiAg
ICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0KCJleGFjdCIsIGV4YWN0VmFsdWUpKQotICAg
ICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3QoZXhhY3RWYWx1ZSk7CisgICAgICAgICAgICBj
b25zdHJhaW50LnNldEV4YWN0KGV4YWN0VmFsdWUpOwogCiAgICAgICAgIGRvdWJsZSBpZGVhbFZh
bHVlOwogICAgICAgICBpZiAoZGljdGlvbmFyeVZhbHVlLmdldCgiaWRlYWwiLCBpZGVhbFZhbHVl
KSkKLSAgICAgICAgICAgIGNvbnN0cmFpbnQtPnNldElkZWFsKGlkZWFsVmFsdWUpOworICAgICAg
ICAgICAgY29uc3RyYWludC5zZXRJZGVhbChpZGVhbFZhbHVlKTsKIAotICAgICAgICBpZiAoY29u
c3RyYWludC0+aXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChjb25zdHJhaW50LmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgTE9HKE1lZGlhLCAiY3JlYXRlRG91YmxlQ29uc3RyYWludCgpIC0gaWdu
b3JpbmcgZG91YmxlIGNvbnN0cmFpbnQgJyVzJyB3aXRoIGRpY3Rpb25hcnkgdmFsdWUgc2luY2Ug
aXQgaGFzIG5vIHZhbGlkIG9yIHN1cHBvcnRlZCBrZXkvdmFsdWUgcGFpcnMuIiwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0
dXJuIE51bGxvcHQ7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gV1RGTW92ZShjb25zdHJh
aW50KTsKQEAgLTE5NCw0NCArMTk0LDQ0IEBAIHN0YXRpYyBSZWZQdHI8RG91YmxlQ29uc3RyYWlu
dD4gY3JlYXRlRG8KICAgICBkb3VibGUgdmFsdWU7CiAgICAgaWYgKG1lZGlhVHJhY2tDb25zdHJh
aW50U2V0LmdldChuYW1lLCB2YWx1ZSkpIHsKICAgICAgICAgaWYgKGNvbnN0cmFpbnRTZXRUeXBl
ID09IENvbnN0cmFpbnRTZXRUeXBlOjpNYW5kYXRvcnkpCi0gICAgICAgICAgICBjb25zdHJhaW50
LT5zZXRJZGVhbCh2YWx1ZSk7CisgICAgICAgICAgICBjb25zdHJhaW50LnNldElkZWFsKHZhbHVl
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3QodmFsdWUp
OworICAgICAgICAgICAgY29uc3RyYWludC5zZXRFeGFjdCh2YWx1ZSk7CiAgICAgICAgIAogICAg
ICAgICByZXR1cm4gV1RGTW92ZShjb25zdHJhaW50KTsKICAgICB9CiAKICAgICAvLyBJbnZhbGlk
IGNvbnN0cmFpbnQgdmFsdWUuCiAgICAgTE9HKE1lZGlhLCAiY3JlYXRlRG91YmxlQ29uc3RyYWlu
dCgpIC0gaWdub3JpbmcgZG91YmxlIGNvbnN0cmFpbnQgJyVzJyBzaW5jZSBpdCBoYXMgbmVpdGhl
ciBhIGRpY3Rpb25hcnkgbm9yIHNjYWxhciB2YWx1ZS4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwot
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBOdWxsb3B0OwogfQogCi1zdGF0aWMgUmVm
UHRyPEludENvbnN0cmFpbnQ+IGNyZWF0ZUludENvbnN0cmFpbnQoY29uc3QgRGljdGlvbmFyeSYg
bWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJh
aW50VHlwZSB0eXBlLCBDb25zdHJhaW50U2V0VHlwZSBjb25zdHJhaW50U2V0VHlwZSkKK3N0YXRp
YyBPcHRpb25hbDxJbnRDb25zdHJhaW50PiBjcmVhdGVJbnRDb25zdHJhaW50KGNvbnN0IERpY3Rp
b25hcnkmIG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LCBjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlh
Q29uc3RyYWludFR5cGUgdHlwZSwgQ29uc3RyYWludFNldFR5cGUgY29uc3RyYWludFNldFR5cGUp
CiB7Ci0gICAgYXV0byBjb25zdHJhaW50ID0gSW50Q29uc3RyYWludDo6Y3JlYXRlKG5hbWUsIHR5
cGUpOworICAgIGF1dG8gY29uc3RyYWludCA9IEludENvbnN0cmFpbnQobmFtZSwgdHlwZSk7CiAK
ICAgICAvLyBEaWN0aW9uYXJ5IGNvbnN0cmFpbnQgdmFsdWUuCiAgICAgRGljdGlvbmFyeSBkaWN0
aW9uYXJ5VmFsdWU7CiAgICAgaWYgKG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LmdldChuYW1lLCBk
aWN0aW9uYXJ5VmFsdWUpICYmICFkaWN0aW9uYXJ5VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkg
ewogICAgICAgICBpbnQgbWluVmFsdWU7CiAgICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0
KCJtaW4iLCBtaW5WYWx1ZSkpCi0gICAgICAgICAgICBjb25zdHJhaW50LT5zZXRNaW4obWluVmFs
dWUpOworICAgICAgICAgICAgY29uc3RyYWludC5zZXRNaW4obWluVmFsdWUpOwogCiAgICAgICAg
IGludCBtYXhWYWx1ZTsKICAgICAgICAgaWYgKGRpY3Rpb25hcnlWYWx1ZS5nZXQoIm1heCIsIG1h
eFZhbHVlKSkKLSAgICAgICAgICAgIGNvbnN0cmFpbnQtPnNldE1heChtYXhWYWx1ZSk7CisgICAg
ICAgICAgICBjb25zdHJhaW50LnNldE1heChtYXhWYWx1ZSk7CiAKICAgICAgICAgaW50IGV4YWN0
VmFsdWU7CiAgICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0KCJleGFjdCIsIGV4YWN0VmFs
dWUpKQotICAgICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3QoZXhhY3RWYWx1ZSk7CisgICAg
ICAgICAgICBjb25zdHJhaW50LnNldEV4YWN0KGV4YWN0VmFsdWUpOwogCiAgICAgICAgIGludCBp
ZGVhbFZhbHVlOwogICAgICAgICBpZiAoZGljdGlvbmFyeVZhbHVlLmdldCgiaWRlYWwiLCBpZGVh
bFZhbHVlKSkKLSAgICAgICAgICAgIGNvbnN0cmFpbnQtPnNldElkZWFsKGlkZWFsVmFsdWUpOwor
ICAgICAgICAgICAgY29uc3RyYWludC5zZXRJZGVhbChpZGVhbFZhbHVlKTsKIAotICAgICAgICBp
ZiAoY29uc3RyYWludC0+aXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChjb25zdHJhaW50LmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgTE9HKE1lZGlhLCAiY3JlYXRlSW50Q29uc3RyYWludCgpIC0g
aWdub3JpbmcgbG9uZyBjb25zdHJhaW50ICclcycgd2l0aCBkaWN0aW9uYXJ5IHZhbHVlIHNpbmNl
IGl0IGhhcyBubyB2YWxpZCBvciBzdXBwb3J0ZWQga2V5L3ZhbHVlIHBhaXJzLiIsIG5hbWUudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybiBOdWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIFdURk1vdmUoY29uc3Ry
YWludCk7CkBAIC0yNDEsNTQgKzI0MSw2MyBAQCBzdGF0aWMgUmVmUHRyPEludENvbnN0cmFpbnQ+
IGNyZWF0ZUludENvCiAgICAgaW50IHZhbHVlOwogICAgIGlmIChtZWRpYVRyYWNrQ29uc3RyYWlu
dFNldC5nZXQobmFtZSwgdmFsdWUpKSB7CiAgICAgICAgIGlmIChjb25zdHJhaW50U2V0VHlwZSA9
PSBDb25zdHJhaW50U2V0VHlwZTo6TWFuZGF0b3J5KQotICAgICAgICAgICAgY29uc3RyYWludC0+
c2V0SWRlYWwodmFsdWUpOworICAgICAgICAgICAgY29uc3RyYWludC5zZXRJZGVhbCh2YWx1ZSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnN0cmFpbnQtPnNldEV4YWN0KHZhbHVlKTsK
KyAgICAgICAgICAgIGNvbnN0cmFpbnQuc2V0RXhhY3QodmFsdWUpOwogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIFdURk1vdmUoY29uc3RyYWludCk7CiAgICAgfQogCiAgICAgLy8gSW52YWxpZCBj
b25zdHJhaW50IHZhbHVlLgogICAgIExPRyhNZWRpYSwgImNyZWF0ZUludENvbnN0cmFpbnQoKSAt
IGlnbm9yaW5nIGxvbmcgY29uc3RyYWludCAnJXMnIHNpbmNlIGl0IGhhcyBuZWl0aGVyIGEgZGlj
dGlvbmFyeSBub3Igc2NhbGFyIHZhbHVlLiIsIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIE51bGxvcHQ7CiB9CiAKIHN0YXRpYyB2b2lkIHBhcnNl
TWVkaWFUcmFja0NvbnN0cmFpbnRTZXRGb3JLZXkoY29uc3QgRGljdGlvbmFyeSYgbWVkaWFUcmFj
a0NvbnN0cmFpbnRTZXQsIGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFUcmFja0NvbnN0cmFpbnRT
ZXRNYXAmIG1hcCwgQ29uc3RyYWludFNldFR5cGUgY29uc3RyYWludFNldFR5cGUpCiB7CiAgICAg
TWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJhaW50VHlwZSA9IFJlYWx0aW1lTWVkaWFTb3VyY2VT
dXBwb3J0ZWRDb25zdHJhaW50czo6Y29uc3RyYWludEZyb21OYW1lKG5hbWUpOwotCi0gICAgUmVm
UHRyPE1lZGlhQ29uc3RyYWludD4gbWVkaWFDb25zdHJhaW50OwogICAgIHN3aXRjaCAoY29uc3Ry
YWludFR5cGUpIHsKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OldpZHRoOgorICAgICAg
ICBtYXAuc2V0KGNvbnN0cmFpbnRUeXBlLCBjcmVhdGVJbnRDb25zdHJhaW50KG1lZGlhVHJhY2tD
b25zdHJhaW50U2V0LCBuYW1lLCBjb25zdHJhaW50VHlwZSwgY29uc3RyYWludFNldFR5cGUpKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQ6Cisg
ICAgICAgIG1hcC5zZXQoY29uc3RyYWludFR5cGUsIGNyZWF0ZUludENvbnN0cmFpbnQobWVkaWFU
cmFja0NvbnN0cmFpbnRTZXQsIG5hbWUsIGNvbnN0cmFpbnRUeXBlLCBjb25zdHJhaW50U2V0VHlw
ZSkpOworICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBs
ZVJhdGU6CisgICAgICAgIG1hcC5zZXQoY29uc3RyYWludFR5cGUsIGNyZWF0ZUludENvbnN0cmFp
bnQobWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIG5hbWUsIGNvbnN0cmFpbnRUeXBlLCBjb25zdHJh
aW50U2V0VHlwZSkpOworICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5
cGU6OlNhbXBsZVNpemU6Ci0gICAgICAgIG1lZGlhQ29uc3RyYWludCA9IGNyZWF0ZUludENvbnN0
cmFpbnQobWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIG5hbWUsIGNvbnN0cmFpbnRUeXBlLCBjb25z
dHJhaW50U2V0VHlwZSk7CisgICAgICAgIG1hcC5zZXQoY29uc3RyYWludFR5cGUsIGNyZWF0ZUlu
dENvbnN0cmFpbnQobWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIG5hbWUsIGNvbnN0cmFpbnRUeXBl
LCBjb25zdHJhaW50U2V0VHlwZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTWVkaWFD
b25zdHJhaW50VHlwZTo6QXNwZWN0UmF0aW86CisgICAgICAgIG1hcC5zZXQoY29uc3RyYWludFR5
cGUsIGNyZWF0ZURvdWJsZUNvbnN0cmFpbnQobWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIG5hbWUs
IGNvbnN0cmFpbnRUeXBlLCBjb25zdHJhaW50U2V0VHlwZSkpOworICAgICAgICBicmVhazsKICAg
ICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkZyYW1lUmF0ZToKKyAgICAgICAgbWFwLnNldChj
b25zdHJhaW50VHlwZSwgY3JlYXRlRG91YmxlQ29uc3RyYWludChtZWRpYVRyYWNrQ29uc3RyYWlu
dFNldCwgbmFtZSwgY29uc3RyYWludFR5cGUsIGNvbnN0cmFpbnRTZXRUeXBlKSk7CisgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6Vm9sdW1lOgotICAgICAgICBt
ZWRpYUNvbnN0cmFpbnQgPSBjcmVhdGVEb3VibGVDb25zdHJhaW50KG1lZGlhVHJhY2tDb25zdHJh
aW50U2V0LCBuYW1lLCBjb25zdHJhaW50VHlwZSwgY29uc3RyYWludFNldFR5cGUpOworICAgICAg
ICBtYXAuc2V0KGNvbnN0cmFpbnRUeXBlLCBjcmVhdGVEb3VibGVDb25zdHJhaW50KG1lZGlhVHJh
Y2tDb25zdHJhaW50U2V0LCBuYW1lLCBjb25zdHJhaW50VHlwZSwgY29uc3RyYWludFNldFR5cGUp
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkVjaG9D
YW5jZWxsYXRpb246Ci0gICAgICAgIG1lZGlhQ29uc3RyYWludCA9IGNyZWF0ZUJvb2xlYW5Db25z
dHJhaW50KG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LCBuYW1lLCBjb25zdHJhaW50VHlwZSwgY29u
c3RyYWludFNldFR5cGUpOworICAgICAgICBtYXAuc2V0KGNvbnN0cmFpbnRUeXBlLCBjcmVhdGVC
b29sZWFuQ29uc3RyYWludChtZWRpYVRyYWNrQ29uc3RyYWludFNldCwgbmFtZSwgY29uc3RyYWlu
dFR5cGUsIGNvbnN0cmFpbnRTZXRUeXBlKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdNb2RlOgorICAgICAgICBtYXAuc2V0KGNvbnN0cmFp
bnRUeXBlLCBjcmVhdGVTdHJpbmdDb25zdHJhaW50KG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LCBu
YW1lLCBjb25zdHJhaW50VHlwZSwgY29uc3RyYWludFNldFR5cGUpKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpEZXZpY2VJZDoKKyAgICAgICAgbWFwLnNl
dChjb25zdHJhaW50VHlwZSwgY3JlYXRlU3RyaW5nQ29uc3RyYWludChtZWRpYVRyYWNrQ29uc3Ry
YWludFNldCwgbmFtZSwgY29uc3RyYWludFR5cGUsIGNvbnN0cmFpbnRTZXRUeXBlKSk7CisgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6R3JvdXBJZDoKLSAgICAg
ICAgbWVkaWFDb25zdHJhaW50ID0gY3JlYXRlU3RyaW5nQ29uc3RyYWludChtZWRpYVRyYWNrQ29u
c3RyYWludFNldCwgbmFtZSwgY29uc3RyYWludFR5cGUsIGNvbnN0cmFpbnRTZXRUeXBlKTsKKyAg
ICAgICAgbWFwLnNldChjb25zdHJhaW50VHlwZSwgY3JlYXRlU3RyaW5nQ29uc3RyYWludChtZWRp
YVRyYWNrQ29uc3RyYWludFNldCwgbmFtZSwgY29uc3RyYWludFR5cGUsIGNvbnN0cmFpbnRTZXRU
eXBlKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpV
bmtub3duOgotICAgICAgICBMT0coTWVkaWEsICJwYXJzZU1lZGlhVHJhY2tDb25zdHJhaW50U2V0
Rm9yS2V5KCkgLSBmb3VuZCB1bnN1cHBvcnRlZCBjb25zdHJhaW50ICclcycuIiwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgbWVkaWFDb25zdHJhaW50ID0gVW5rbm93bkNvbnN0cmFpbnQ6
OmNyZWF0ZShuYW1lLCBjb25zdHJhaW50VHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBM
T0coTWVkaWEsICJwYXJzZU1lZGlhVHJhY2tDb25zdHJhaW50U2V0Rm9yS2V5KCkgLSBpZ25vcmlu
ZyB1bnN1cHBvcnRlZCBjb25zdHJhaW50ICclcycuIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBtYXAuYWRkKG5hbWUsIFdURk1vdmUobWVk
aWFDb25zdHJhaW50KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhcnNlQWR2YW5jZWRDb25zdHJhaW50
cyhjb25zdCBEaWN0aW9uYXJ5JiBtZWRpYVRyYWNrQ29uc3RyYWludHMsIFZlY3RvcjxNZWRpYVRy
YWNrQ29uc3RyYWludFNldE1hcD4mIGFkdmFuY2VkQ29uc3RyYWludHMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vQ2FwdHVyZURl
dmljZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyMDY0MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDE2ICs3MiwxOCBAQCBib29sIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpjYXB0dXJlRGV2
aWNlCiAKIGJvb2wgQ2FwdHVyZURldmljZU1hbmFnZXI6OnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVk
aWFUeXBlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgTWVkaWFDb25zdHJh
aW50cyYgY29uc3RyYWludHMsIGNvbnN0IENhcHR1cmVTZXNzaW9uSW5mbyogc2Vzc2lvbiwgU3Ry
aW5nJiBpbnZhbGlkQ29uc3RyYWludCkKIHsKLSAgICBhdXRvJiBtYW5kYXRvcnlDb25zdHJhaW50
cyA9IGNvbnN0cmFpbnRzLm1hbmRhdG9yeUNvbnN0cmFpbnRzKCk7Ci0gICAgZm9yIChhdXRvJiBu
YW1lQ29uc3RyYWludFBhaXIgOiBtYW5kYXRvcnlDb25zdHJhaW50cykgewotICAgICAgICBpZiAo
c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChzZXNzaW9uLCB0eXBlLCAqbmFtZUNvbnN0cmFpbnRQ
YWlyLnZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGludmFsaWRDb25zdHJhaW50
ID0gZW1wdHlTdHJpbmcoKTsKKyAgICBjb25zdHJhaW50cy5tYW5kYXRvcnlDb25zdHJhaW50cygp
LmZpbHRlcihbJl0oY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KSB7CisgICAgICAg
IGlmICghc2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChzZXNzaW9uLCB0eXBlLCBjb25zdHJhaW50
KSkgeworICAgICAgICAgICAgaW52YWxpZENvbnN0cmFpbnQgPSBjb25zdHJhaW50Lm5hbWUoKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgaW52YWxpZENv
bnN0cmFpbnQgPSBuYW1lQ29uc3RyYWludFBhaXIua2V5OwogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQorICAgIH0pOworCisgICAgcmV0dXJuIGludmFsaWRDb25zdHJhaW50LmlzRW1wdHko
KTsKIAotICAgIHJldHVybiB0cnVlOwogfQogCiBWZWN0b3I8UmVmUHRyPFJlYWx0aW1lTWVkaWFT
b3VyY2U+PiBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNvdXJjZXNGb3JUeXBlQW5kQ29uc3Ry
YWludHMoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBNZWRpYUNvbnN0cmFpbnRzJiBj
b25zdHJhaW50cykKQEAgLTE1Myw3ICsxNTUsNyBAQCBzdGF0aWMgaW5saW5lIFJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5nCiBib29sIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzZXNzaW9uU3VwcG9y
dHNDb25zdHJhaW50KGNvbnN0IENhcHR1cmVTZXNzaW9uSW5mbyosIFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGUgdHlwZSwgY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KQogewogICAg
IGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cyYgc3VwcG9ydGVk
Q29uc3RyYWludHMgPSBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5zdXBw
b3J0ZWRDb25zdHJhaW50cygpOwotICAgIE1lZGlhQ29uc3RyYWludFR5cGUgY29uc3RyYWludFR5
cGUgPSBjb25zdHJhaW50LnR5cGUoKTsKKyAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0cmFp
bnRUeXBlID0gY29uc3RyYWludC5jb25zdHJhaW50VHlwZSgpOwogICAgIGlmICghc3VwcG9ydGVk
Q29uc3RyYWludHMuc3VwcG9ydHNDb25zdHJhaW50KGNvbnN0cmFpbnRUeXBlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0xNzYsNyArMTc4LDcgQEAgYm9vbCBDYXB0dXJlRGV2aWNlTWFu
YWdlcjo6c2Vzc2lvblN1cHBvcgogCiAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzkzLiBIYW5kbGUgc2VxdWVuY2Ugb2YgZmFjaW5n
TW9kZSBjb25zdHJhaW50cy4KICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXhhY3RGYWNpbmdNb2Rl
OwotICAgICAgICBpZiAoIWNvbnN0cmFpbnQuZ2V0RXhhY3QoZXhhY3RGYWNpbmdNb2RlKSkKKyAg
ICAgICAgaWYgKCFkb3duY2FzdDxjb25zdCBTdHJpbmdDb25zdHJhaW50Pihjb25zdHJhaW50KS5n
ZXRFeGFjdChleGFjdEZhY2luZ01vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIHJldHVybiBiZXN0RGV2aWNlRm9yRmFjaW5nTW9kZShmYWNpbmdNb2RlRnJvbVN0cmlu
ZyhleGFjdEZhY2luZ01vZGVbMF0pKTsKQEAgLTE5MiwxNSArMTk0LDE1IEBAIGJvb2wgQ2FwdHVy
ZURldmljZU1hbmFnZXI6OmlzU3VwcG9ydGVkRnIKICAgICBib29sIGlzU3VwcG9ydGVkID0gdHJ1
ZTsKIAogICAgIGludCBtaW4gPSAwOwotICAgIGlmIChjb25zdHJhaW50LmdldE1pbihtaW4pKQor
ICAgIGlmIChkb3duY2FzdDxjb25zdCBJbnRDb25zdHJhaW50Pihjb25zdHJhaW50KS5nZXRNaW4o
bWluKSkKICAgICAgICAgaXNTdXBwb3J0ZWQgJj0gbWluID4gNjA7CiAKICAgICBpbnQgbWF4ID0g
NjA7Ci0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0TWF4KG1heCkpCisgICAgaWYgKGRvd25jYXN0PGNv
bnN0IEludENvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmdldE1heChtYXgpKQogICAgICAgICBpc1N1
cHBvcnRlZCAmPSBtYXggPCBtaW47CiAKICAgICBpbnQgZXhhY3Q7Ci0gICAgaWYgKGNvbnN0cmFp
bnQuZ2V0RXhhY3QoZXhhY3QpKQorICAgIGlmIChkb3duY2FzdDxjb25zdCBJbnRDb25zdHJhaW50
Pihjb25zdHJhaW50KS5nZXRFeGFjdChleGFjdCkpCiAgICAgICAgIGlzU3VwcG9ydGVkICY9IChl
eGFjdCA8IG1pbiB8fCBleGFjdCA+IG1heCk7CiAKICAgICByZXR1cm4gaXNTdXBwb3J0ZWQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYUNvbnN0cmFpbnRzLmNwcAkocmV2aXNpb24gMjA2NDM1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDgyICszNCwxMCBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW5jbHVkZSAi
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdXBwb3J0ZWRDb25zdHJhaW50cy5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8TWVkaWFDb25zdHJhaW50PiBNZWRpYUNvbnN0
cmFpbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgTWVkaWFDb25zdHJhaW50
VHlwZSBjb25zdHJhaW50VHlwZSA9IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJh
aW50czo6Y29uc3RyYWludEZyb21OYW1lKG5hbWUpOwotCi0gICAgc3dpdGNoIChjb25zdHJhaW50
VHlwZSkgewotICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6V2lkdGg6Ci0gICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQ6Ci0gICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBl
OjpTYW1wbGVSYXRlOgotICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6U2FtcGxlU2l6ZToK
LSAgICAgICAgcmV0dXJuIEludENvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lLCBjb25zdHJhaW50VHlw
ZSk7Ci0gICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpBc3BlY3RSYXRpbzoKLSAgICBjYXNl
IE1lZGlhQ29uc3RyYWludFR5cGU6OkZyYW1lUmF0ZToKLSAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OlZvbHVtZToKLSAgICAgICAgcmV0dXJuIERvdWJsZUNvbnN0cmFpbnQ6OmNyZWF0ZShu
YW1lLCBjb25zdHJhaW50VHlwZSk7Ci0gICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpFY2hv
Q2FuY2VsbGF0aW9uOgotICAgICAgICByZXR1cm4gQm9vbGVhbkNvbnN0cmFpbnQ6OmNyZWF0ZShu
YW1lLCBjb25zdHJhaW50VHlwZSk7Ci0gICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNp
bmdNb2RlOgotICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RGV2aWNlSWQ6Ci0gICAgY2Fz
ZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpHcm91cElkOgotICAgICAgICByZXR1cm4gU3RyaW5nQ29u
c3RyYWludDo6Y3JlYXRlKG5hbWUsIGNvbnN0cmFpbnRUeXBlKTsKLSAgICBjYXNlIE1lZGlhQ29u
c3RyYWludFR5cGU6OlVua25vd246Ci0gICAgICAgIHJldHVybiBVbmtub3duQ29uc3RyYWludDo6
Y3JlYXRlKG5hbWUsIGNvbnN0cmFpbnRUeXBlKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gTWVkaWFDb25zdHJhaW50OjpjcmVhdGUoU3RyaW5nKCkpOwot
fQotCi1SZWY8TWVkaWFDb25zdHJhaW50PiBNZWRpYUNvbnN0cmFpbnQ6OmNvcHkoKSBjb25zdAot
ewotICAgIHJldHVybiBNZWRpYUNvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKCkpOwotfQotCi1SZWY8
TWVkaWFDb25zdHJhaW50PiBJbnRDb25zdHJhaW50Ojpjb3B5KCkgY29uc3QKLXsKLSAgICBhdXRv
IGNvcHkgPSBJbnRDb25zdHJhaW50OjpjcmVhdGUobmFtZSgpLCB0eXBlKCkpOwotICAgIGNvcHkt
Pm1fbWluID0gbV9taW47Ci0gICAgY29weS0+bV9tYXggPSBtX21heDsKLSAgICBjb3B5LT5tX2V4
YWN0ID0gbV9leGFjdDsKLSAgICBjb3B5LT5tX2lkZWFsID0gbV9pZGVhbDsKLQotICAgIHJldHVy
biBjb3B5LmxlYWtSZWYoKTsKLX0KLQotUmVmPE1lZGlhQ29uc3RyYWludD4gRG91YmxlQ29uc3Ry
YWludDo6Y29weSgpIGNvbnN0Ci17Ci0gICAgYXV0byBjb3B5ID0gRG91YmxlQ29uc3RyYWludDo6
Y3JlYXRlKG5hbWUoKSwgdHlwZSgpKTsKLSAgICBjb3B5LT5tX21pbiA9IG1fbWluOwotICAgIGNv
cHktPm1fbWF4ID0gbV9tYXg7Ci0gICAgY29weS0+bV9leGFjdCA9IG1fZXhhY3Q7Ci0gICAgY29w
eS0+bV9pZGVhbCA9IG1faWRlYWw7Ci0gICAgCi0gICAgcmV0dXJuIGNvcHkubGVha1JlZigpOwot
fQotCi1SZWY8TWVkaWFDb25zdHJhaW50PiBCb29sZWFuQ29uc3RyYWludDo6Y29weSgpIGNvbnN0
Ci17Ci0gICAgYXV0byBjb3B5ID0gQm9vbGVhbkNvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKCksIHR5
cGUoKSk7Ci0gICAgY29weS0+bV9leGFjdCA9IG1fZXhhY3Q7Ci0gICAgY29weS0+bV9pZGVhbCA9
IG1faWRlYWw7Ci0KLSAgICByZXR1cm4gY29weS5sZWFrUmVmKCk7Ci19Ci0KLVJlZjxNZWRpYUNv
bnN0cmFpbnQ+IFN0cmluZ0NvbnN0cmFpbnQ6OmNvcHkoKSBjb25zdAotewotICAgIGF1dG8gY29w
eSA9IFN0cmluZ0NvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKCksIHR5cGUoKSk7Ci0gICAgY29weS0+
bV9leGFjdCA9IG1fZXhhY3Q7Ci0gICAgY29weS0+bV9pZGVhbCA9IG1faWRlYWw7Ci0KLSAgICBy
ZXR1cm4gY29weS5sZWFrUmVmKCk7Ci19Ci0KIGJvb2wgQm9vbGVhbkNvbnN0cmFpbnQ6OmdldEV4
YWN0KGJvb2wmIGV4YWN0KSBjb25zdAogewogICAgIGlmICghbV9leGFjdCkKQEAgLTE2OSwxNSAr
OTcsMTUgQEAgYm9vbCBTdHJpbmdDb25zdHJhaW50OjpnZXRJZGVhbChWZWN0b3I8UwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1jb25zdCBTdHJpbmcmIFN0cmluZ0NvbnN0cmFpbnQ6OmZpbmQoc3Rk
OjpmdW5jdGlvbjxib29sKENvbnN0cmFpbnRUeXBlLCBjb25zdCBTdHJpbmcmKT4gZmlsdGVyKSBj
b25zdAorY29uc3QgU3RyaW5nJiBTdHJpbmdDb25zdHJhaW50OjpmaW5kKHN0ZDo6ZnVuY3Rpb248
Ym9vbChjb25zdCBTdHJpbmcmKT4gZmlsdGVyKSBjb25zdAogewogICAgIGZvciAoYXV0byYgY29u
c3RyYWludCA6IG1fZXhhY3QpIHsKLSAgICAgICAgaWYgKGZpbHRlcihDb25zdHJhaW50VHlwZTo6
RXhhY3RDb25zdHJhaW50LCBjb25zdHJhaW50KSkKKyAgICAgICAgaWYgKGZpbHRlcihjb25zdHJh
aW50KSkKICAgICAgICAgICAgIHJldHVybiBjb25zdHJhaW50OwogICAgIH0KIAogICAgIGZvciAo
YXV0byYgY29uc3RyYWludCA6IG1faWRlYWwpIHsKLSAgICAgICAgaWYgKGZpbHRlcihDb25zdHJh
aW50VHlwZTo6SWRlYWxDb25zdHJhaW50LCBjb25zdHJhaW50KSkKKyAgICAgICAgaWYgKGZpbHRl
cihjb25zdHJhaW50KSkKICAgICAgICAgICAgIHJldHVybiBjb25zdHJhaW50OwogICAgIH0KICAg
ICAKQEAgLTIyMiwxMSArMTUwLDE0IEBAIGRvdWJsZSBTdHJpbmdDb25zdHJhaW50OjpmaXRuZXNz
RGlzdGFuY2UKIAogdm9pZCBTdHJpbmdDb25zdHJhaW50OjptZXJnZShjb25zdCBNZWRpYUNvbnN0
cmFpbnQmIG90aGVyKQogeworICAgIEFTU0VSVChvdGhlci5pc1N0cmluZygpKTsKKyAgICBjb25z
dCBTdHJpbmdDb25zdHJhaW50JiB0eXBlZE90aGVyID0gZG93bmNhc3Q8U3RyaW5nQ29uc3RyYWlu
dD4ob3RoZXIpOworCiAgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzOwotICAgIGlmIChvdGhlci5nZXRFeGFjdCh2YWx1
ZXMpKSB7CisgICAgaWYgKHR5cGVkT3RoZXIuZ2V0RXhhY3QodmFsdWVzKSkgewogICAgICAgICBp
ZiAobV9leGFjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2V4YWN0ID0gdmFsdWVzOwogICAg
ICAgICBlbHNlIHsKQEAgLTIzNyw3ICsxNjgsNyBAQCB2b2lkIFN0cmluZ0NvbnN0cmFpbnQ6Om1l
cmdlKGNvbnN0IE1lZGlhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAob3RoZXIuZ2V0SWRl
YWwodmFsdWVzKSkgeworICAgIGlmICh0eXBlZE90aGVyLmdldElkZWFsKHZhbHVlcykpIHsKICAg
ICAgICAgaWYgKG1faWRlYWwuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9pZGVhbCA9IHZhbHVl
czsKICAgICAgICAgZWxzZSB7CkBAIC0yNTEsMjYgKzE4MiwyMzMgQEAgdm9pZCBTdHJpbmdDb25z
dHJhaW50OjptZXJnZShjb25zdCBNZWRpYQogCiB2b2lkIEZsYXR0ZW5lZENvbnN0cmFpbnQ6OnNl
dChjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7Ci0gICAgZm9yIChhdXRvIGV4
aXN0aW5nQ29uc3RyYWludCA6IG1fY29uc3RyYWludHMpIHsKLSAgICAgICAgaWYgKGV4aXN0aW5n
Q29uc3RyYWludC0+dHlwZSgpID09IGNvbnN0cmFpbnQudHlwZSgpKSB7Ci0gICAgICAgICAgICBl
eGlzdGluZ0NvbnN0cmFpbnQgPSBjb25zdHJhaW50LmNvcHkoKTsKKyAgICBmb3IgKGF1dG8mIHZh
cmlhbnQgOiBtX3ZhcmlhbnRzKSB7CisgICAgICAgIGlmICh2YXJpYW50LmNvbnN0cmFpbnRUeXBl
KCkgPT0gY29uc3RyYWludC5jb25zdHJhaW50VHlwZSgpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CiAgICAgfQogCi0gICAgbV9jb25zdHJhaW50cy5hcHBlbmQoY29uc3RyYWludC5j
b3B5KCkpOworICAgIGFwcGVuZChjb25zdHJhaW50KTsKIH0KIAogdm9pZCBGbGF0dGVuZWRDb25z
dHJhaW50OjptZXJnZShjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7Ci0gICAg
Zm9yIChhdXRvIGV4aXN0aW5nQ29uc3RyYWludCA6IG1fY29uc3RyYWludHMpIHsKLSAgICAgICAg
aWYgKGV4aXN0aW5nQ29uc3RyYWludC0+dHlwZSgpID09IGNvbnN0cmFpbnQudHlwZSgpKSB7Ci0g
ICAgICAgICAgICBleGlzdGluZ0NvbnN0cmFpbnQtPm1lcmdlKGNvbnN0cmFpbnQpOworICAgIGZv
ciAoYXV0byYgdmFyaWFudCA6ICp0aGlzKSB7CisgICAgICAgIGlmICh2YXJpYW50LmNvbnN0cmFp
bnRUeXBlKCkgIT0gY29uc3RyYWludC5jb25zdHJhaW50VHlwZSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgc3dpdGNoICh2YXJpYW50LmRhdGFUeXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnQ6OkRhdGFUeXBlOjpJbnRlZ2VyOgorICAgICAgICAgICAgQVNT
RVJUKGNvbnN0cmFpbnQuaXNJbnQoKSk7CisgICAgICAgICAgICBkb3duY2FzdDxjb25zdCBJbnRD
b25zdHJhaW50Pih2YXJpYW50KS5tZXJnZShkb3duY2FzdDxjb25zdCBJbnRDb25zdHJhaW50Pihj
b25zdHJhaW50KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgTWVkaWFDb25z
dHJhaW50OjpEYXRhVHlwZTo6RG91YmxlOgorICAgICAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQu
aXNEb3VibGUoKSk7CisgICAgICAgICAgICBkb3duY2FzdDxjb25zdCBEb3VibGVDb25zdHJhaW50
Pih2YXJpYW50KS5tZXJnZShkb3duY2FzdDxjb25zdCBEb3VibGVDb25zdHJhaW50Pihjb25zdHJh
aW50KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgTWVkaWFDb25zdHJhaW50
OjpEYXRhVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgICAgIEFTU0VSVChjb25zdHJhaW50LmlzQm9v
bGVhbigpKTsKKyAgICAgICAgICAgIGRvd25jYXN0PGNvbnN0IEJvb2xlYW5Db25zdHJhaW50Pih2
YXJpYW50KS5tZXJnZShkb3duY2FzdDxjb25zdCBCb29sZWFuQ29uc3RyYWludD4oY29uc3RyYWlu
dCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE1lZGlhQ29uc3RyYWludDo6
RGF0YVR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIEFTU0VSVChjb25zdHJhaW50LmlzU3RyaW5n
KCkpOworICAgICAgICAgICAgZG93bmNhc3Q8Y29uc3QgU3RyaW5nQ29uc3RyYWludD4odmFyaWFu
dCkubWVyZ2UoZG93bmNhc3Q8Y29uc3QgU3RyaW5nQ29uc3RyYWludD4oY29uc3RyYWludCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE1lZGlhQ29uc3RyYWludDo6RGF0YVR5
cGU6Ok5vbmU6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fY29uc3RyYWludHMuYXBwZW5kKGNv
bnN0cmFpbnQuY29weSgpKTsKKyAgICBhcHBlbmQoY29uc3RyYWludCk7Cit9CisKK3ZvaWQgRmxh
dHRlbmVkQ29uc3RyYWludDo6YXBwZW5kKGNvbnN0IE1lZGlhQ29uc3RyYWludCYgY29uc3RyYWlu
dCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgKyttX2dlbmVyYXRpb247CisjZW5kaWYKKworICAg
IG1fdmFyaWFudHMuYXBwZW5kKENvbnN0cmFpbnRIb2xkZXI6OmNyZWF0ZShjb25zdHJhaW50KSk7
CisKK30KKwordm9pZCBNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcDo6Zm9yRWFjaChzdGQ6OmZ1
bmN0aW9uPHZvaWQoY29uc3QgTWVkaWFDb25zdHJhaW50Jik+IGNhbGxiYWNrKSBjb25zdAorewor
ICAgIGlmIChtX3dpZHRoICYmICFtX3dpZHRoLT5pc0VtcHR5KCkpCisgICAgICAgIGNhbGxiYWNr
KCptX3dpZHRoKTsKKyAgICBpZiAobV9oZWlnaHQgJiYgIW1faGVpZ2h0LT5pc0VtcHR5KCkpCisg
ICAgICAgIGNhbGxiYWNrKCptX2hlaWdodCk7CisgICAgaWYgKG1fc2FtcGxlUmF0ZSAmJiAhbV9z
YW1wbGVSYXRlLT5pc0VtcHR5KCkpCisgICAgICAgIGNhbGxiYWNrKCptX3NhbXBsZVJhdGUpOwor
ICAgIGlmIChtX3NhbXBsZVNpemUgJiYgIW1fc2FtcGxlU2l6ZS0+aXNFbXB0eSgpKQorICAgICAg
ICBjYWxsYmFjaygqbV9zYW1wbGVTaXplKTsKKworICAgIGlmIChtX2FzcGVjdFJhdGlvICYmICFt
X2FzcGVjdFJhdGlvLT5pc0VtcHR5KCkpCisgICAgICAgIGNhbGxiYWNrKCptX2FzcGVjdFJhdGlv
KTsKKyAgICBpZiAobV9mcmFtZVJhdGUgJiYgIW1fZnJhbWVSYXRlLT5pc0VtcHR5KCkpCisgICAg
ICAgIGNhbGxiYWNrKCptX2ZyYW1lUmF0ZSk7CisgICAgaWYgKG1fdm9sdW1lICYmICFtX3ZvbHVt
ZS0+aXNFbXB0eSgpKQorICAgICAgICBjYWxsYmFjaygqbV92b2x1bWUpOworCisgICAgaWYgKG1f
ZWNob0NhbmNlbGxhdGlvbiAmJiAhbV9lY2hvQ2FuY2VsbGF0aW9uLT5pc0VtcHR5KCkpCisgICAg
ICAgIGNhbGxiYWNrKCptX2VjaG9DYW5jZWxsYXRpb24pOworCisgICAgaWYgKG1fZmFjaW5nTW9k
ZSAmJiAhbV9mYWNpbmdNb2RlLT5pc0VtcHR5KCkpCisgICAgICAgIGNhbGxiYWNrKCptX2ZhY2lu
Z01vZGUpOworICAgIGlmIChtX2RldmljZUlkICYmICFtX2RldmljZUlkLT5pc0VtcHR5KCkpCisg
ICAgICAgIGNhbGxiYWNrKCptX2RldmljZUlkKTsKKyAgICBpZiAobV9ncm91cElkICYmICFtX2dy
b3VwSWQtPmlzRW1wdHkoKSkKKyAgICAgICAgY2FsbGJhY2soKm1fZ3JvdXBJZCk7Cit9CisKK3Zv
aWQgTWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6OmZpbHRlcihzdGQ6OmZ1bmN0aW9uPGJvb2wo
Y29uc3QgTWVkaWFDb25zdHJhaW50Jik+IGNhbGxiYWNrKSBjb25zdAoreworICAgIGlmIChtX3dp
ZHRoICYmICFtX3dpZHRoLT5pc0VtcHR5KCkgJiYgY2FsbGJhY2soKm1fd2lkdGgpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKG1faGVpZ2h0ICYmICFtX2hlaWdodC0+aXNFbXB0eSgpICYmIGNh
bGxiYWNrKCptX2hlaWdodCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9zYW1wbGVSYXRl
ICYmICFtX3NhbXBsZVJhdGUtPmlzRW1wdHkoKSAmJiBjYWxsYmFjaygqbV9zYW1wbGVSYXRlKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3NhbXBsZVNpemUgJiYgIW1fc2FtcGxlU2l6ZS0+
aXNFbXB0eSgpICYmIGNhbGxiYWNrKCptX3NhbXBsZVNpemUpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobV9hc3BlY3RSYXRpbyAmJiAhbV9hc3BlY3RSYXRpby0+aXNFbXB0eSgpICYmIGNh
bGxiYWNrKCptX2FzcGVjdFJhdGlvKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2ZyYW1l
UmF0ZSAmJiAhbV9mcmFtZVJhdGUtPmlzRW1wdHkoKSAmJiBjYWxsYmFjaygqbV9mcmFtZVJhdGUp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fdm9sdW1lICYmICFtX3ZvbHVtZS0+aXNFbXB0
eSgpICYmIGNhbGxiYWNrKCptX3ZvbHVtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X2VjaG9DYW5jZWxsYXRpb24gJiYgIW1fZWNob0NhbmNlbGxhdGlvbi0+aXNFbXB0eSgpICYmIGNh
bGxiYWNrKCptX2VjaG9DYW5jZWxsYXRpb24pKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9mYWNpbmdNb2RlICYmICFtX2ZhY2luZ01vZGUtPmlzRW1wdHkoKSAmJiBjYWxsYmFjaygqbV9m
YWNpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2RldmljZUlkICYmICFtX2Rl
dmljZUlkLT5pc0VtcHR5KCkgJiYgY2FsbGJhY2soKm1fZGV2aWNlSWQpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKG1fZ3JvdXBJZCAmJiAhbV9ncm91cElkLT5pc0VtcHR5KCkgJiYgY2FsbGJh
Y2soKm1fZ3JvdXBJZCkpCisgICAgICAgIHJldHVybjsKK30KKworYm9vbCBNZWRpYVRyYWNrQ29u
c3RyYWludFNldE1hcDo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICghbV93aWR0aCB8
fCBtX3dpZHRoLT5pc0VtcHR5KCkpCisgICAgICAgICYmICghbV9oZWlnaHQgfHwgbV9oZWlnaHQt
PmlzRW1wdHkoKSkKKyAgICAgICAgJiYgKCFtX3NhbXBsZVJhdGUgfHwgbV9zYW1wbGVSYXRlLT5p
c0VtcHR5KCkpCisgICAgICAgICYmICghbV9zYW1wbGVTaXplIHx8IG1fc2FtcGxlU2l6ZS0+aXNF
bXB0eSgpKQorICAgICAgICAmJiAoIW1fYXNwZWN0UmF0aW8gfHwgbV9hc3BlY3RSYXRpby0+aXNF
bXB0eSgpKQorICAgICAgICAmJiAoIW1fZnJhbWVSYXRlIHx8IG1fZnJhbWVSYXRlLT5pc0VtcHR5
KCkpCisgICAgICAgICYmICghbV92b2x1bWUgfHwgbV92b2x1bWUtPmlzRW1wdHkoKSkKKyAgICAg
ICAgJiYgKCFtX2VjaG9DYW5jZWxsYXRpb24gfHwgbV9lY2hvQ2FuY2VsbGF0aW9uLT5pc0VtcHR5
KCkpCisgICAgICAgICYmICghbV9mYWNpbmdNb2RlIHx8IG1fZmFjaW5nTW9kZS0+aXNFbXB0eSgp
KQorICAgICAgICAmJiAoIW1fZGV2aWNlSWQgfHwgbV9kZXZpY2VJZC0+aXNFbXB0eSgpKQorICAg
ICAgICAmJiAoIW1fZ3JvdXBJZCB8fCBtX2dyb3VwSWQtPmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQg
TWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6OnNldChNZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0
cmFpbnRUeXBlLCBPcHRpb25hbDxJbnRDb25zdHJhaW50PiYmIGNvbnN0cmFpbnQpCit7CisgICAg
c3dpdGNoIChjb25zdHJhaW50VHlwZSkgeworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6
V2lkdGg6CisgICAgICAgIG1fd2lkdGggPSBXVEZNb3ZlKGNvbnN0cmFpbnQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkhlaWdodDoKKyAgICAgICAgbV9o
ZWlnaHQgPSBXVEZNb3ZlKGNvbnN0cmFpbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1l
ZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGU6CisgICAgICAgIG1fc2FtcGxlUmF0ZSA9IFdU
Rk1vdmUoY29uc3RyYWludCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFDb25zdHJh
aW50VHlwZTo6U2FtcGxlU2l6ZToKKyAgICAgICAgbV9zYW1wbGVTaXplID0gV1RGTW92ZShjb25z
dHJhaW50KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6
OkFzcGVjdFJhdGlvOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RnJhbWVSYXRlOgor
ICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6Vm9sdW1lOgorICAgIGNhc2UgTWVkaWFDb25z
dHJhaW50VHlwZTo6RWNob0NhbmNlbGxhdGlvbjoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5
cGU6OkZhY2luZ01vZGU6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpEZXZpY2VJZDoK
KyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Okdyb3VwSWQ6CisgICAgY2FzZSBNZWRpYUNv
bnN0cmFpbnRUeXBlOjpVbmtub3duOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFw
OjpzZXQoTWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJhaW50VHlwZSwgT3B0aW9uYWw8RG91Ymxl
Q29uc3RyYWludD4mJiBjb25zdHJhaW50KQoreworICAgIHN3aXRjaCAoY29uc3RyYWludFR5cGUp
IHsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkFzcGVjdFJhdGlvOgorICAgICAgICBt
X2FzcGVjdFJhdGlvID0gV1RGTW92ZShjb25zdHJhaW50KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGcmFtZVJhdGU6CisgICAgICAgIG1fZnJhbWVSYXRl
ID0gV1RGTW92ZShjb25zdHJhaW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRpYUNv
bnN0cmFpbnRUeXBlOjpWb2x1bWU6CisgICAgICAgIG1fdm9sdW1lID0gV1RGTW92ZShjb25zdHJh
aW50KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Oldp
ZHRoOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6SGVpZ2h0OgorICAgIGNhc2UgTWVk
aWFDb25zdHJhaW50VHlwZTo6U2FtcGxlUmF0ZToKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5
cGU6OlNhbXBsZVNpemU6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpFY2hvQ2FuY2Vs
bGF0aW9uOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RmFjaW5nTW9kZToKKyAgICBj
YXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkRldmljZUlkOgorICAgIGNhc2UgTWVkaWFDb25zdHJh
aW50VHlwZTo6R3JvdXBJZDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlVua25vd246
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3ZvaWQgTWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6OnNldChNZWRpYUNvbnN0cmFpbnRU
eXBlIGNvbnN0cmFpbnRUeXBlLCBPcHRpb25hbDxCb29sZWFuQ29uc3RyYWludD4mJiBjb25zdHJh
aW50KQoreworICAgIHN3aXRjaCAoY29uc3RyYWludFR5cGUpIHsKKyAgICBjYXNlIE1lZGlhQ29u
c3RyYWludFR5cGU6OkVjaG9DYW5jZWxsYXRpb246CisgICAgICAgIG1fZWNob0NhbmNlbGxhdGlv
biA9IFdURk1vdmUoY29uc3RyYWludCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRp
YUNvbnN0cmFpbnRUeXBlOjpXaWR0aDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Okhl
aWdodDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGU6CisgICAgY2Fz
ZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVTaXplOgorICAgIGNhc2UgTWVkaWFDb25zdHJh
aW50VHlwZTo6QXNwZWN0UmF0aW86CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGcmFt
ZVJhdGU6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpWb2x1bWU6CisgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdNb2RlOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50
VHlwZTo6RGV2aWNlSWQ6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpHcm91cElkOgor
ICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6VW5rbm93bjoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBNZWRpYVRyYWNr
Q29uc3RyYWludFNldE1hcDo6c2V0KE1lZGlhQ29uc3RyYWludFR5cGUgY29uc3RyYWludFR5cGUs
IE9wdGlvbmFsPFN0cmluZ0NvbnN0cmFpbnQ+JiYgY29uc3RyYWludCkKK3sKKyAgICBzd2l0Y2gg
KGNvbnN0cmFpbnRUeXBlKSB7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdN
b2RlOgorICAgICAgICBtX2ZhY2luZ01vZGUgPSBXVEZNb3ZlKGNvbnN0cmFpbnQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkRldmljZUlkOgorICAgICAg
ICBtX2RldmljZUlkID0gV1RGTW92ZShjb25zdHJhaW50KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpHcm91cElkOgorICAgICAgICBtX2dyb3VwSWQgPSBX
VEZNb3ZlKGNvbnN0cmFpbnQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFDb25z
dHJhaW50VHlwZTo6V2lkdGg6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQ6
CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVSYXRlOgorICAgIGNhc2UgTWVk
aWFDb25zdHJhaW50VHlwZTo6U2FtcGxlU2l6ZToKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5
cGU6OkFzcGVjdFJhdGlvOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RnJhbWVSYXRl
OgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6Vm9sdW1lOgorICAgIGNhc2UgTWVkaWFD
b25zdHJhaW50VHlwZTo6RWNob0NhbmNlbGxhdGlvbjoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OlVua25vd246CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhQ29uc3RyYWludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmgJKHJldmlzaW9uIDIwNjQzNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsODMgKzM4LDU2IEBACiAjaW5jbHVkZSA8Y3N0ZGxpYj4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgTWVkaWFDb25zdHJhaW50IDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFDb25zdHJh
aW50PiB7CitjbGFzcyBNZWRpYUNvbnN0cmFpbnQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
TWVkaWFDb25zdHJhaW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBlbnVtIGNsYXNz
IENvbnN0cmFpbnRUeXBlIHsgRXhhY3RDb25zdHJhaW50LCBJZGVhbENvbnN0cmFpbnQsIE1pbkNv
bnN0cmFpbnQsIE1heENvbnN0cmFpbnQgfTsKKyAgICBlbnVtIGNsYXNzIERhdGFUeXBlIHsgTm9u
ZSwgSW50ZWdlciwgRG91YmxlLCBCb29sZWFuLCBTdHJpbmcgfTsKIAogICAgIHZpcnR1YWwgfk1l
ZGlhQ29uc3RyYWludCgpIHsgfTsKIAotICAgIHZpcnR1YWwgUmVmPE1lZGlhQ29uc3RyYWludD4g
Y29weSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9v
bCBnZXRNaW4oaW50JikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdmlydHVhbCBib29sIGdldE1heChpbnQmKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXhhY3QoaW50Jikg
Y29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBib29sIGdldElkZWFsKGludCYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCB2YWxpZEZvclJhbmdlKGludCwgaW50KSBjb25z
dCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGlu
dCBmaW5kKHN0ZDo6ZnVuY3Rpb248Ym9vbChDb25zdHJhaW50VHlwZSwgaW50KT4pIGNvbnN0IHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBkb3VibGUgZml0
bmVzc0Rpc3RhbmNlKGludCwgaW50KSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1
cm4gMDsgfQotCi0gICAgdmlydHVhbCBib29sIGdldE1pbihkb3VibGUmKSBjb25zdCB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0TWF4
KGRvdWJsZSYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBnZXRFeGFjdChkb3VibGUmKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0SWRlYWwoZG91Ymxl
JikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIHZhbGlkRm9yUmFuZ2UoZG91YmxlLCBkb3VibGUpIGNvbnN0IHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgZG91YmxlIGZpbmQoc3Rk
OjpmdW5jdGlvbjxib29sKENvbnN0cmFpbnRUeXBlLCBkb3VibGUpPikgY29uc3QgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBmaXRuZXNzRGlz
dGFuY2UoZG91YmxlLCBkb3VibGUpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biAwOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0TWluKGJvb2wmKSBjb25zdCB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0TWF4KGJv
b2wmKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgZ2V0RXhhY3QoYm9vbCYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRJZGVhbChib29sJikgY29uc3Qg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBkb3Vi
bGUgZml0bmVzc0Rpc3RhbmNlKGJvb2wpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiAwOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0TWluKFZlY3RvcjxTdHJpbmc+JikgY29u
c3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBi
b29sIGdldE1heChWZWN0b3I8U3RyaW5nPiYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRFeGFjdChWZWN0b3I8U3RyaW5n
PiYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBnZXRJZGVhbChWZWN0b3I8U3RyaW5nPiYpIGNvbnN0IHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBmaW5k
KHN0ZDo6ZnVuY3Rpb248Ym9vbChDb25zdHJhaW50VHlwZSwgY29uc3QgU3RyaW5nJik+KSBjb25z
dCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQotCi0gICAg
dmlydHVhbCBkb3VibGUgZml0bmVzc0Rpc3RhbmNlKGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBkb3VibGUgZml0bmVz
c0Rpc3RhbmNlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBtZXJnZShjb25zdCBNZWRpYUNvbnN0cmFpbnQm
KSB7IH0KKworICAgIGJvb2wgaXNJbnQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFUeXBlID09IERh
dGFUeXBlOjpJbnRlZ2VyOyB9CisgICAgYm9vbCBpc0RvdWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YVR5cGUgPT0gRGF0YVR5cGU6OkRvdWJsZTsgfQorICAgIGJvb2wgaXNCb29sZWFuKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhVHlwZSA9PSBEYXRhVHlwZTo6Qm9vbGVhbjsgfQorICAgIGJvb2wg
aXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2RhdGFUeXBlID09IERhdGFUeXBlOjpTdHJpbmc7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCBtZXJnZShjb25zdCBNZWRpYUNvbnN0cmFpbnQmKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0KLSAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBEYXRhVHlwZSBkYXRhVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YVR5cGU7IH0KKyAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0cmFpbnRU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJhaW50VHlwZTsgfQogICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhw
bGljaXQgTWVkaWFDb25zdHJhaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50
VHlwZSB0eXBlKQorICAgIGV4cGxpY2l0IE1lZGlhQ29uc3RyYWludChjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgY29uc3RyYWludFR5cGUsIERhdGFUeXBlIGRh
dGFUeXBlKQogICAgICAgICA6IG1fbmFtZShuYW1lKQotICAgICAgICAsIG1fdHlwZSh0eXBlKQor
ICAgICAgICAsIG1fY29uc3RyYWludFR5cGUoY29uc3RyYWludFR5cGUpCisgICAgICAgICwgbV9k
YXRhVHlwZShkYXRhVHlwZSkKICAgICB7CiAgICAgfQogCisKIHByaXZhdGU6Ci0gICAgU3RyaW5n
IG1fbmFtZTsKLSAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIG1fdHlwZTsKKyAgICBBdG9taWNTdHJp
bmcgbV9uYW1lOworICAgIE1lZGlhQ29uc3RyYWludFR5cGUgbV9jb25zdHJhaW50VHlwZTsKKyAg
ICBEYXRhVHlwZSBtX2RhdGFUeXBlOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgVmFsdWVUeXBlPgog
Y2xhc3MgTnVtZXJpY0NvbnN0cmFpbnQgOiBwdWJsaWMgTWVkaWFDb25zdHJhaW50IHsKIHB1Ymxp
YzoKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhbV9taW4gJiYg
IW1fbWF4ICYmICFtX2V4YWN0ICYmICFtX2lkZWFsOyB9Ci0gICAgYm9vbCBpc01hbmRhdG9yeSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fbWluIHx8IG1fbWF4IHx8IG1fZXhhY3Q7IH0KLQog
ICAgIHZvaWQgc2V0TWluKFZhbHVlVHlwZSB2YWx1ZSkgeyBtX21pbiA9IHZhbHVlOyB9CiAgICAg
dm9pZCBzZXRNYXgoVmFsdWVUeXBlIHZhbHVlKSB7IG1fbWF4ID0gdmFsdWU7IH0KICAgICB2b2lk
IHNldEV4YWN0KFZhbHVlVHlwZSB2YWx1ZSkgeyBtX2V4YWN0ID0gdmFsdWU7IH0KICAgICB2b2lk
IHNldElkZWFsKFZhbHVlVHlwZSB2YWx1ZSkgeyBtX2lkZWFsID0gdmFsdWU7IH0KIAotICAgIGJv
b2wgZ2V0TWluKFZhbHVlVHlwZSYgbWluKSBjb25zdCBmaW5hbCB7CisgICAgYm9vbCBnZXRNaW4o
VmFsdWVUeXBlJiBtaW4pIGNvbnN0CisgICAgewogICAgICAgICBpZiAoIW1fbWluKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMjIsNyArOTUsOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgZ2V0TWF4KFZhbHVlVHlwZSYgbWF4KSBj
b25zdCBmaW5hbCB7CisgICAgYm9vbCBnZXRNYXgoVmFsdWVUeXBlJiBtYXgpIGNvbnN0CisgICAg
ewogICAgICAgICBpZiAoIW1fbWF4KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0x
MzAsNyArMTA0LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICBib29sIGdldEV4YWN0KFZhbHVlVHlwZSYgZXhhY3QpIGNvbnN0IGZpbmFsIHsKKyAgICBib29s
IGdldEV4YWN0KFZhbHVlVHlwZSYgZXhhY3QpIGNvbnN0CisgICAgewogICAgICAgICBpZiAoIW1f
ZXhhY3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEzOCw3ICsxMTMsOCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgZ2V0SWRlYWwo
VmFsdWVUeXBlJiBpZGVhbCkgY29uc3QgZmluYWwgeworICAgIGJvb2wgZ2V0SWRlYWwoVmFsdWVU
eXBlJiBpZGVhbCkgY29uc3QKKyAgICB7CiAgICAgICAgIGlmICghbV9pZGVhbCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTU0LDcgKzEzMCw4IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHN0ZDo6YWJzKGEgLSBiKSA8PSBlcHNpbG9uOwogICAgIH0KIAotICAgIGRvdWJsZSBm
aXRuZXNzRGlzdGFuY2UoVmFsdWVUeXBlIHJhbmdlTWluLCBWYWx1ZVR5cGUgcmFuZ2VNYXgpIGNv
bnN0IGZpbmFsIHsKKyAgICBkb3VibGUgZml0bmVzc0Rpc3RhbmNlKFZhbHVlVHlwZSByYW5nZU1p
biwgVmFsdWVUeXBlIHJhbmdlTWF4KSBjb25zdAorICAgIHsKICAgICAgICAgLy8gaHR0cHM6Ly93
M2MuZ2l0aHViLmlvL21lZGlhY2FwdHVyZS1tYWluLyNkZm4tYXBwbHljb25zdHJhaW50cwogICAg
ICAgICAvLyAxLiBJZiB0aGUgY29uc3RyYWludCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBicm93
c2VyLCB0aGUgZml0bmVzcyBkaXN0YW5jZSBpcyAwLgogICAgICAgICBpZiAoaXNFbXB0eSgpKQpA
QCAtMTg5LDMyICsxNjYsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxk
b3VibGU+KHN0ZDo6YWJzKGlkZWFsIC0gbV9pZGVhbC52YWx1ZSgpKSkgLyBzdGQ6Om1heChzdGQ6
OmFicyhpZGVhbCksIHN0ZDo6YWJzKG1faWRlYWwudmFsdWUoKSkpOwogICAgIH0KIAotICAgIHZv
aWQgbWVyZ2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBvdGhlcikgZmluYWwgewotICAgICAgICBp
ZiAob3RoZXIuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFZhbHVl
VHlwZSB2YWx1ZTsKLSAgICAgICAgaWYgKG90aGVyLmdldEV4YWN0KHZhbHVlKSkKLSAgICAgICAg
ICAgIG1fZXhhY3QgPSB2YWx1ZTsKLQotICAgICAgICBpZiAob3RoZXIuZ2V0TWluKHZhbHVlKSkK
LSAgICAgICAgICAgIG1fbWluID0gdmFsdWU7Ci0KLSAgICAgICAgaWYgKG90aGVyLmdldE1heCh2
YWx1ZSkpCi0gICAgICAgICAgICBtX21heCA9IHZhbHVlOwotCi0gICAgICAgIC8vIGh0dHBzOi8v
dzNjLmdpdGh1Yi5pby9tZWRpYWNhcHR1cmUtbWFpbi8jY29uc3RyYWluYWJsZS1pbnRlcmZhY2UK
LSAgICAgICAgLy8gV2hlbiBwcm9jZXNzaW5nIGFkdmFuY2VkIGNvbnN0cmFpbnRzOgotICAgICAg
ICAvLyAgIC4uLiB0aGUgVXNlciBBZ2VudCBtdXN0IGF0dGVtcHQgdG8gYXBwbHksIGluZGl2aWR1
YWxseSwgYW55ICdpZGVhbCcgY29uc3RyYWludHMgb3IKLSAgICAgICAgLy8gICBhIGNvbnN0cmFp
bnQgZ2l2ZW4gYXMgYSBiYXJlIHZhbHVlIGZvciB0aGUgcHJvcGVydHkuIE9mIHRoZXNlIHByb3Bl
cnRpZXMsIGl0IG11c3QKLSAgICAgICAgLy8gICBzYXRpc2Z5IHRoZSBsYXJnZXN0IG51bWJlciB0
aGF0IGl0IGNhbiwgaW4gYW55IG9yZGVyLgotICAgICAgICBpZiAob3RoZXIuZ2V0SWRlYWwodmFs
dWUpKSB7Ci0gICAgICAgICAgICBpZiAoIW1faWRlYWwgfHwgdmFsdWUgPiBtX2lkZWFsLnZhbHVl
KCkpCi0gICAgICAgICAgICAgICAgbV9pZGVhbCA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgYm9vbCB2YWxpZEZvclJhbmdlKFZhbHVlVHlwZSByYW5nZU1pbiwgVmFsdWVUeXBlIHJh
bmdlTWF4KSBjb25zdCBmaW5hbCB7CisgICAgYm9vbCB2YWxpZEZvclJhbmdlKFZhbHVlVHlwZSBy
YW5nZU1pbiwgVmFsdWVUeXBlIHJhbmdlTWF4KSBjb25zdAorICAgIHsKICAgICAgICAgaWYgKGlz
RW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjQyLDI3ICsxOTUsNTYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBWYWx1ZVR5cGUg
ZmluZChzdGQ6OmZ1bmN0aW9uPGJvb2woQ29uc3RyYWludFR5cGUsIFZhbHVlVHlwZSk+IGZ1bmN0
aW9uKSBjb25zdCBmaW5hbCB7Ci0gICAgICAgIGlmIChtX21pbiAmJiBmdW5jdGlvbihDb25zdHJh
aW50VHlwZTo6TWluQ29uc3RyYWludCwgbV9taW4udmFsdWUoKSkpCisgICAgVmFsdWVUeXBlIGZp
bmQoc3RkOjpmdW5jdGlvbjxib29sKFZhbHVlVHlwZSk+IGZ1bmN0aW9uKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKG1fbWluICYmIGZ1bmN0aW9uKG1fbWluLnZhbHVlKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIG1fbWluLnZhbHVlKCk7CiAKLSAgICAgICAgaWYgKG1fbWF4ICYmIGZ1bmN0aW9u
KENvbnN0cmFpbnRUeXBlOjpNYXhDb25zdHJhaW50LCBtX21heC52YWx1ZSgpKSkKKyAgICAgICAg
aWYgKG1fbWF4ICYmIGZ1bmN0aW9uKG1fbWF4LnZhbHVlKCkpKQogICAgICAgICAgICAgcmV0dXJu
IG1fbWF4LnZhbHVlKCk7CiAKLSAgICAgICAgaWYgKG1fZXhhY3QgJiYgZnVuY3Rpb24oQ29uc3Ry
YWludFR5cGU6OkV4YWN0Q29uc3RyYWludCwgbV9leGFjdC52YWx1ZSgpKSkKKyAgICAgICAgaWYg
KG1fZXhhY3QgJiYgZnVuY3Rpb24obV9leGFjdC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVy
biBtX2V4YWN0LnZhbHVlKCk7CiAKLSAgICAgICAgaWYgKG1faWRlYWwgJiYgZnVuY3Rpb24oQ29u
c3RyYWludFR5cGU6OklkZWFsQ29uc3RyYWludCwgbV9pZGVhbC52YWx1ZSgpKSkKKyAgICAgICAg
aWYgKG1faWRlYWwgJiYgZnVuY3Rpb24obV9pZGVhbC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJl
dHVybiBtX2lkZWFsLnZhbHVlKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAor
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1fbWluICYmICFt
X21heCAmJiAhbV9leGFjdCAmJiAhbV9pZGVhbDsgfQorICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX21pbiB8fCBtX21heCB8fCBtX2V4YWN0OyB9CiAKIHBy
b3RlY3RlZDoKLSAgICBleHBsaWNpdCBOdW1lcmljQ29uc3RyYWludChjb25zdCBTdHJpbmcmIG5h
bWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSkKLSAgICAgICAgOiBNZWRpYUNvbnN0cmFpbnQo
bmFtZSwgdHlwZSkKKyAgICBleHBsaWNpdCBOdW1lcmljQ29uc3RyYWludChjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSwgRGF0YVR5cGUgZGF0YVR5cGUp
CisgICAgICAgIDogTWVkaWFDb25zdHJhaW50KG5hbWUsIHR5cGUsIGRhdGFUeXBlKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGlubmVyTWVyZ2UoY29uc3QgTnVtZXJpY0NvbnN0cmFpbnQmIG90
aGVyKQogICAgIHsKKyAgICAgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBWYWx1ZVR5cGUgdmFsdWU7CisgICAgICAgIGlmIChvdGhlci5nZXRF
eGFjdCh2YWx1ZSkpCisgICAgICAgICAgICBtX2V4YWN0ID0gdmFsdWU7CisKKyAgICAgICAgaWYg
KG90aGVyLmdldE1pbih2YWx1ZSkpCisgICAgICAgICAgICBtX21pbiA9IHZhbHVlOworCisgICAg
ICAgIGlmIChvdGhlci5nZXRNYXgodmFsdWUpKQorICAgICAgICAgICAgbV9tYXggPSB2YWx1ZTsK
KworICAgICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vbWVkaWFjYXB0dXJlLW1haW4vI2Nv
bnN0cmFpbmFibGUtaW50ZXJmYWNlCisgICAgICAgIC8vIFdoZW4gcHJvY2Vzc2luZyBhZHZhbmNl
ZCBjb25zdHJhaW50czoKKyAgICAgICAgLy8gICAuLi4gdGhlIFVzZXIgQWdlbnQgbXVzdCBhdHRl
bXB0IHRvIGFwcGx5LCBpbmRpdmlkdWFsbHksIGFueSAnaWRlYWwnIGNvbnN0cmFpbnRzIG9yCisg
ICAgICAgIC8vICAgYSBjb25zdHJhaW50IGdpdmVuIGFzIGEgYmFyZSB2YWx1ZSBmb3IgdGhlIHBy
b3BlcnR5LiBPZiB0aGVzZSBwcm9wZXJ0aWVzLCBpdCBtdXN0CisgICAgICAgIC8vICAgc2F0aXNm
eSB0aGUgbGFyZ2VzdCBudW1iZXIgdGhhdCBpdCBjYW4sIGluIGFueSBvcmRlci4KKyAgICAgICAg
aWYgKG90aGVyLmdldElkZWFsKHZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFtX2lkZWFsIHx8
IHZhbHVlID4gbV9pZGVhbC52YWx1ZSgpKQorICAgICAgICAgICAgICAgIG1faWRlYWwgPSB2YWx1
ZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIE9wdGlvbmFsPFZhbHVlVHlwZT4gbV9taW47CkBA
IC0yNzMsNDYgKzI1NSw0NSBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEludENvbnN0cmFpbnQgZmlu
YWwgOiBwdWJsaWMgTnVtZXJpY0NvbnN0cmFpbnQ8aW50PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxJbnRDb25zdHJhaW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0
cmFpbnRUeXBlIHR5cGUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW50Q29uc3RyYWludChuYW1l
LCB0eXBlKSk7IH0KLQotICAgIFJlZjxNZWRpYUNvbnN0cmFpbnQ+IGNvcHkoKSBjb25zdCBmaW5h
bDsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBJbnRDb25zdHJhaW50KGNvbnN0IFN0cmluZyYg
bmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKQotICAgICAgICA6IE51bWVyaWNDb25zdHJh
aW50PGludD4obmFtZSwgdHlwZSkKKyAgICBleHBsaWNpdCBJbnRDb25zdHJhaW50KGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKQorICAgICAgICA6IE51
bWVyaWNDb25zdHJhaW50PGludD4obmFtZSwgdHlwZSwgRGF0YVR5cGU6OkludGVnZXIpCiAgICAg
ewogICAgIH0KKworICAgIHZvaWQgbWVyZ2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBvdGhlcikg
ZmluYWwgeworICAgICAgICBBU1NFUlQob3RoZXIuaXNJbnQoKSk7CisgICAgICAgIE51bWVyaWND
b25zdHJhaW50Ojppbm5lck1lcmdlKGRvd25jYXN0PGNvbnN0IEludENvbnN0cmFpbnQ+KG90aGVy
KSk7CisgICAgfQogfTsKIAogY2xhc3MgRG91YmxlQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBO
dW1lcmljQ29uc3RyYWludDxkb3VibGU+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERvdWJs
ZUNvbnN0cmFpbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5
cGUgdHlwZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb3VibGVDb25zdHJhaW50KG5hbWUsIHR5
cGUpKTsgfQotCi0gICAgUmVmPE1lZGlhQ29uc3RyYWludD4gY29weSgpIGNvbnN0IGZpbmFsOwot
Ci1wcml2YXRlOgotICAgIGV4cGxpY2l0IERvdWJsZUNvbnN0cmFpbnQoY29uc3QgU3RyaW5nJiBu
YW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpCi0gICAgICAgIDogTnVtZXJpY0NvbnN0cmFp
bnQ8ZG91YmxlPihuYW1lLCB0eXBlKQorICAgIGV4cGxpY2l0IERvdWJsZUNvbnN0cmFpbnQoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpCisgICAgICAg
IDogTnVtZXJpY0NvbnN0cmFpbnQ8ZG91YmxlPihuYW1lLCB0eXBlLCBEYXRhVHlwZTo6RG91Ymxl
KQogICAgIHsKICAgICB9CisKKyAgICB2b2lkIG1lcmdlKGNvbnN0IE1lZGlhQ29uc3RyYWludCYg
b3RoZXIpIGZpbmFsIHsKKyAgICAgICAgQVNTRVJUKG90aGVyLmlzRG91YmxlKCkpOworICAgICAg
ICBOdW1lcmljQ29uc3RyYWludDo6aW5uZXJNZXJnZShkb3duY2FzdDxEb3VibGVDb25zdHJhaW50
PihvdGhlcikpOworICAgIH0KIH07CiAKIGNsYXNzIEJvb2xlYW5Db25zdHJhaW50IGZpbmFsIDog
cHVibGljIE1lZGlhQ29uc3RyYWludCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxCb29sZWFu
Q29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlw
ZSB0eXBlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEJvb2xlYW5Db25zdHJhaW50KG5hbWUsIHR5
cGUpKTsgfQotCi0gICAgUmVmPE1lZGlhQ29uc3RyYWludD4gY29weSgpIGNvbnN0IGZpbmFsOwor
ICAgIGV4cGxpY2l0IEJvb2xlYW5Db25zdHJhaW50KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
TWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKQorICAgICAgICA6IE1lZGlhQ29uc3RyYWludChuYW1l
LCB0eXBlLCBEYXRhVHlwZTo6Qm9vbGVhbikKKyAgICB7CisgICAgfQogCiAgICAgdm9pZCBzZXRF
eGFjdChib29sIHZhbHVlKSB7IG1fZXhhY3QgPSB2YWx1ZTsgfQogICAgIHZvaWQgc2V0SWRlYWwo
Ym9vbCB2YWx1ZSkgeyBtX2lkZWFsID0gdmFsdWU7IH0KIAotICAgIGJvb2wgZ2V0RXhhY3QoYm9v
bCYpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZ2V0SWRlYWwoYm9vbCYpIGNvbnN0IGZpbmFsOwot
Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIW1fZXhhY3QgJiYgIW1f
aWRlYWw7IH07Ci0gICAgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJv
b2wobV9leGFjdCk7IH0KKyAgICBib29sIGdldEV4YWN0KGJvb2wmKSBjb25zdDsKKyAgICBib29s
IGdldElkZWFsKGJvb2wmKSBjb25zdDsKIAotICAgIGRvdWJsZSBmaXRuZXNzRGlzdGFuY2UoYm9v
bCB2YWx1ZSkgY29uc3QgZmluYWwgeworICAgIGRvdWJsZSBmaXRuZXNzRGlzdGFuY2UoYm9vbCB2
YWx1ZSkgY29uc3QKKyAgICB7CiAgICAgICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9tZWRp
YWNhcHR1cmUtbWFpbi8jZGZuLWFwcGx5Y29uc3RyYWludHMKICAgICAgICAgLy8gMS4gSWYgdGhl
IGNvbnN0cmFpbnQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlciwgdGhlIGZpdG5lc3Mg
ZGlzdGFuY2UgaXMgMC4KICAgICAgICAgaWYgKGlzRW1wdHkoKSkKQEAgLTMzNSw5MiArMzE2LDIx
NCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBtZXJnZShjb25zdCBNZWRpYUNvbnN0cmFp
bnQmIG90aGVyKSBmaW5hbCB7Ci0gICAgICAgIGlmIChvdGhlci5pc0VtcHR5KCkpCisgICAgICAg
IEFTU0VSVChvdGhlci5pc0Jvb2xlYW4oKSk7CisgICAgICAgIGNvbnN0IEJvb2xlYW5Db25zdHJh
aW50JiB0eXBlZE90aGVyID0gZG93bmNhc3Q8Qm9vbGVhbkNvbnN0cmFpbnQ+KG90aGVyKTsKKwor
ICAgICAgICBpZiAodHlwZWRPdGhlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgYm9vbCB2YWx1ZTsKLSAgICAgICAgaWYgKG90aGVyLmdldEV4YWN0KHZhbHVlKSkK
KyAgICAgICAgaWYgKHR5cGVkT3RoZXIuZ2V0RXhhY3QodmFsdWUpKQogICAgICAgICAgICAgbV9l
eGFjdCA9IHZhbHVlOwogCi0gICAgICAgIGlmIChvdGhlci5nZXRJZGVhbCh2YWx1ZSkpIHsKKyAg
ICAgICAgaWYgKHR5cGVkT3RoZXIuZ2V0SWRlYWwodmFsdWUpKSB7CiAgICAgICAgICAgICBpZiAo
IW1faWRlYWwgfHwgKHZhbHVlICYmICFtX2lkZWFsLnZhbHVlKCkpKQogICAgICAgICAgICAgICAg
IG1faWRlYWwgPSB2YWx1ZTsKICAgICAgICAgfQogICAgIH0KIAotcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBCb29sZWFuQ29uc3RyYWludChjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWlu
dFR5cGUgdHlwZSkKLSAgICAgICAgOiBNZWRpYUNvbnN0cmFpbnQobmFtZSwgdHlwZSkKLSAgICB7
Ci0gICAgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICFtX2V4YWN0
ICYmICFtX2lkZWFsOyB9OworICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBib29sKG1fZXhhY3QpOyB9CiAKK3ByaXZhdGU6CiAgICAgT3B0aW9uYWw8Ym9vbD4gbV9l
eGFjdDsKICAgICBPcHRpb25hbDxib29sPiBtX2lkZWFsOwogfTsKIAogY2xhc3MgU3RyaW5nQ29u
c3RyYWludCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnN0cmFpbnQgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8U3RyaW5nQ29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgTWVk
aWFDb25zdHJhaW50VHlwZSB0eXBlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0cmluZ0NvbnN0
cmFpbnQobmFtZSwgdHlwZSkpOyB9Ci0KLSAgICBSZWY8TWVkaWFDb25zdHJhaW50PiBjb3B5KCkg
Y29uc3QgZmluYWw7CisgICAgZXhwbGljaXQgU3RyaW5nQ29uc3RyYWludChjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSkKKyAgICAgICAgOiBNZWRpYUNv
bnN0cmFpbnQobmFtZSwgdHlwZSwgRGF0YVR5cGU6OlN0cmluZykKKyAgICB7CisgICAgfQogCiAg
ICAgdm9pZCBzZXRFeGFjdChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZEV4YWN0KGNv
bnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0SWRlYWwoY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCBhcHBlbmRJZGVhbChjb25zdCBTdHJpbmcmKTsKIAotICAgIGJvb2wgZ2V0RXhhY3QoVmVjdG9y
PFN0cmluZz4mKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGdldElkZWFsKFZlY3RvcjxTdHJpbmc+
JikgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2V4YWN0LmlzRW1wdHkoKSAmJiBtX2lkZWFsLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaXNN
YW5kYXRvcnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhbV9leGFjdC5pc0VtcHR5KCk7IH0KKyAg
ICBib29sIGdldEV4YWN0KFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7CisgICAgYm9vbCBnZXRJZGVh
bChWZWN0b3I8U3RyaW5nPiYpIGNvbnN0OwogCi0gICAgZG91YmxlIGZpdG5lc3NEaXN0YW5jZShj
b25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKLSAgICBkb3VibGUgZml0bmVzc0Rpc3RhbmNlKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JikgY29uc3QgZmluYWw7CisgICAgZG91YmxlIGZpdG5lc3NEaXN0
YW5jZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBkb3VibGUgZml0bmVzc0Rpc3RhbmNlKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7CiAKLSAgICBjb25zdCBTdHJpbmcmIGZpbmQoc3Rk
OjpmdW5jdGlvbjxib29sKENvbnN0cmFpbnRUeXBlLCBjb25zdCBTdHJpbmcmKT4pIGNvbnN0IGZp
bmFsOworICAgIGNvbnN0IFN0cmluZyYgZmluZChzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgU3Ry
aW5nJik+KSBjb25zdDsKICAgICB2b2lkIG1lcmdlKGNvbnN0IE1lZGlhQ29uc3RyYWludCYpIGZp
bmFsOwogCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFN0cmluZ0NvbnN0cmFpbnQoY29uc3QgU3Ry
aW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpCi0gICAgICAgIDogTWVkaWFDb25z
dHJhaW50KG5hbWUsIHR5cGUpCi0gICAgewotICAgIH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2V4YWN0LmlzRW1wdHkoKSAmJiBtX2lkZWFsLmlzRW1wdHkoKTsg
fQorICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhbV9leGFjdC5p
c0VtcHR5KCk7IH0KIAorcHJpdmF0ZToKICAgICBWZWN0b3I8U3RyaW5nPiBtX2V4YWN0OwogICAg
IFZlY3RvcjxTdHJpbmc+IG1faWRlYWw7CiB9OwogCiBjbGFzcyBVbmtub3duQ29uc3RyYWludCBm
aW5hbCA6IHB1YmxpYyBNZWRpYUNvbnN0cmFpbnQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
VW5rbm93bkNvbnN0cmFpbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3Ry
YWludFR5cGUgdHlwZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmtub3duQ29uc3RyYWludChu
YW1lLCB0eXBlKSk7IH0KKyAgICBleHBsaWNpdCBVbmtub3duQ29uc3RyYWludChjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSkKKyAgICAgICAgOiBNZWRp
YUNvbnN0cmFpbnQobmFtZSwgdHlwZSwgRGF0YVR5cGU6Ok5vbmUpCisgICAgeworICAgIH0KIAor
cHJpdmF0ZToKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
CiAgICAgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdm9pZCBtZXJnZShjb25zdCBNZWRpYUNvbnN0cmFpbnQmKSBmaW5hbCB7IH0KK307CisKK2Ns
YXNzIE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwIHsKK3B1YmxpYzoKKyAgICB2b2lkIGZvckVh
Y2goc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IE1lZGlhQ29uc3RyYWludCYpPikgY29uc3Q7Cisg
ICAgdm9pZCBmaWx0ZXIoc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IE1lZGlhQ29uc3RyYWludCYp
PikgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldChNZWRp
YUNvbnN0cmFpbnRUeXBlLCBPcHRpb25hbDxJbnRDb25zdHJhaW50PiYmKTsKKyAgICB2b2lkIHNl
dChNZWRpYUNvbnN0cmFpbnRUeXBlLCBPcHRpb25hbDxEb3VibGVDb25zdHJhaW50PiYmKTsKKyAg
ICB2b2lkIHNldChNZWRpYUNvbnN0cmFpbnRUeXBlLCBPcHRpb25hbDxCb29sZWFuQ29uc3RyYWlu
dD4mJik7CisgICAgdm9pZCBzZXQoTWVkaWFDb25zdHJhaW50VHlwZSwgT3B0aW9uYWw8U3RyaW5n
Q29uc3RyYWludD4mJik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgVW5rbm93bkNvbnN0cmFp
bnQoY29uc3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpCi0gICAgICAg
IDogTWVkaWFDb25zdHJhaW50KG5hbWUsIHR5cGUpCi0gICAgewotICAgIH0KKyAgICBPcHRpb25h
bDxJbnRDb25zdHJhaW50PiBtX3dpZHRoOworICAgIE9wdGlvbmFsPEludENvbnN0cmFpbnQ+IG1f
aGVpZ2h0OworICAgIE9wdGlvbmFsPEludENvbnN0cmFpbnQ+IG1fc2FtcGxlUmF0ZTsKKyAgICBP
cHRpb25hbDxJbnRDb25zdHJhaW50PiBtX3NhbXBsZVNpemU7CisKKyAgICBPcHRpb25hbDxEb3Vi
bGVDb25zdHJhaW50PiBtX2FzcGVjdFJhdGlvOworICAgIE9wdGlvbmFsPERvdWJsZUNvbnN0cmFp
bnQ+IG1fZnJhbWVSYXRlOworICAgIE9wdGlvbmFsPERvdWJsZUNvbnN0cmFpbnQ+IG1fdm9sdW1l
OworCisgICAgT3B0aW9uYWw8Qm9vbGVhbkNvbnN0cmFpbnQ+IG1fZWNob0NhbmNlbGxhdGlvbjsK
KworICAgIE9wdGlvbmFsPFN0cmluZ0NvbnN0cmFpbnQ+IG1fZmFjaW5nTW9kZTsKKyAgICBPcHRp
b25hbDxTdHJpbmdDb25zdHJhaW50PiBtX2RldmljZUlkOworICAgIE9wdGlvbmFsPFN0cmluZ0Nv
bnN0cmFpbnQ+IG1fZ3JvdXBJZDsKIH07CiAKLXVzaW5nIE1lZGlhVHJhY2tDb25zdHJhaW50U2V0
TWFwID0gSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYUNvbnN0cmFpbnQ+PjsKLQogY2xhc3Mg
RmxhdHRlbmVkQ29uc3RyYWludCB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PE1lZGlhQ29uc3RyYWludD4+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKIAogICAg
IHZvaWQgc2V0KGNvbnN0IE1lZGlhQ29uc3RyYWludCYpOwogICAgIHZvaWQgbWVyZ2UoY29uc3Qg
TWVkaWFDb25zdHJhaW50Jik7Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9j
b25zdHJhaW50cy5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCBNZWRpYUNvbnN0
cmFpbnQmKTsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLmlz
RW1wdHkoKTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAg
aXRlcmF0b3IoY29uc3QgRmxhdHRlbmVkQ29uc3RyYWludCogY29uc3RyYWludCwgc2l6ZV90IGlu
ZGV4KQorICAgICAgICAgICAgOiBtX2NvbnN0cmFpbnQoY29uc3RyYWludCkKKyAgICAgICAgICAg
ICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgICwgbV9nZW5lcmF0aW9uKGNvbnN0cmFpbnQt
Pm1fZ2VuZXJhdGlvbikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgTWVkaWFDb25z
dHJhaW50JiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9jb25zdHJhaW50LT5tX3ZhcmlhbnRzLmF0KG1faW5kZXgpLmNvbnN0cmFpbnQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworI2lmbmRl
ZiBOREVCVUcKKyAgICAgICAgICAgIEFTU0VSVChtX2dlbmVyYXRpb24gPT0gbV9jb25zdHJhaW50
LT5tX2dlbmVyYXRpb24pOworI2VuZGlmCisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1f
aW5kZXg7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KIAotICAgIGNvbnN0X2l0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJhaW50cy5iZWdpbigpOyB9Ci0gICAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJhaW50cy5lbmQoKTsgfQor
ICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IEZsYXR0ZW5lZENvbnN0cmFpbnQqIG1fY29uc3Ry
YWludCB7IG51bGxwdHIgfTsKKyAgICAgICAgc2l6ZV90IG1faW5kZXggeyAwIH07CisjaWZuZGVm
IE5ERUJVRworICAgICAgICBpbnQgbV9nZW5lcmF0aW9uIHsgMCB9OworI2VuZGlmCisgICAgfTsK
KworICAgIGNvbnN0IGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IodGhp
cywgMCk7IH0KKyAgICBjb25zdCBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cih0aGlzLCBtX3ZhcmlhbnRzLnNpemUoKSk7IH0KIAogcHJpdmF0ZToKKyAgICBjbGFzcyBDb25z
dHJhaW50SG9sZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBDb25zdHJhaW50SG9s
ZGVyJiBjcmVhdGUoY29uc3QgTWVkaWFDb25zdHJhaW50JiB2YWx1ZSkgeyByZXR1cm4gKm5ldyBD
b25zdHJhaW50SG9sZGVyKHZhbHVlKTsgfQorCisgICAgICAgIH5Db25zdHJhaW50SG9sZGVyKCkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChkYXRhVHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIE1lZGlhQ29uc3RyYWludDo6RGF0YVR5cGU6OkludGVnZXI6CisgICAgICAgICAgICAg
ICAgZGVsZXRlIG1fdmFsdWUuYXNJbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnQ6OkRhdGFUeXBlOjpEb3VibGU6CisgICAgICAg
ICAgICAgICAgZGVsZXRlIG1fdmFsdWUuYXNEb3VibGU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIE1lZGlhQ29uc3RyYWludDo6RGF0YVR5cGU6OkJvb2xlYW46Cisg
ICAgICAgICAgICAgICAgZGVsZXRlIG1fdmFsdWUuYXNCb29sZWFuOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnQ6OkRhdGFUeXBlOjpTdHJp
bmc6CisgICAgICAgICAgICAgICAgZGVsZXRlIG1fdmFsdWUuYXNTdHJpbmc7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lZGlhQ29uc3RyYWludDo6RGF0YVR5cGU6
Ok5vbmU6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAg
ICBtX3ZhbHVlLmFzUmF3ID0gcmVpbnRlcnByZXRfY2FzdDxNZWRpYUNvbnN0cmFpbnQqPigweGJi
YWRiZWVmKTsKKyNlbmRpZgorICAgICAgICB9CiAKLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhQ29u
c3RyYWludD4+IG1fY29uc3RyYWludHM7CisgICAgICAgIE1lZGlhQ29uc3RyYWludCYgY29uc3Ry
YWludCgpIGNvbnN0IHsgcmV0dXJuICptX3ZhbHVlLmFzUmF3OyB9CisgICAgICAgIE1lZGlhQ29u
c3RyYWludDo6RGF0YVR5cGUgZGF0YVR5cGUoKSBjb25zdCB7IHJldHVybiBjb25zdHJhaW50KCku
ZGF0YVR5cGUoKTsgfQorICAgICAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0cmFpbnRUeXBl
KCkgY29uc3QgeyByZXR1cm4gY29uc3RyYWludCgpLmNvbnN0cmFpbnRUeXBlKCk7IH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIGV4cGxpY2l0IENvbnN0cmFpbnRIb2xkZXIoY29uc3QgTWVkaWFD
b25zdHJhaW50JiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5k
YXRhVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE1lZGlhQ29uc3RyYWludDo6RGF0YVR5cGU6
OkludGVnZXI6CisgICAgICAgICAgICAgICAgbV92YWx1ZS5hc0ludGVnZXIgPSBuZXcgSW50Q29u
c3RyYWludChkb3duY2FzdDxjb25zdCBJbnRDb25zdHJhaW50Pih2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnQ6OkRhdGFUeXBl
OjpEb3VibGU6CisgICAgICAgICAgICAgICAgbV92YWx1ZS5hc0RvdWJsZSA9IG5ldyBEb3VibGVD
b25zdHJhaW50KGRvd25jYXN0PERvdWJsZUNvbnN0cmFpbnQ+KHZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lZGlhQ29uc3RyYWludDo6RGF0YVR5cGU6
OkJvb2xlYW46CisgICAgICAgICAgICAgICAgbV92YWx1ZS5hc0Jvb2xlYW4gPSBuZXcgQm9vbGVh
bkNvbnN0cmFpbnQoZG93bmNhc3Q8Qm9vbGVhbkNvbnN0cmFpbnQ+KHZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lZGlhQ29uc3RyYWludDo6RGF0YVR5
cGU6OlN0cmluZzoKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLmFzU3RyaW5nID0gbmV3IFN0cmlu
Z0NvbnN0cmFpbnQoZG93bmNhc3Q8U3RyaW5nQ29uc3RyYWludD4odmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTWVkaWFDb25zdHJhaW50OjpEYXRhVHlw
ZTo6Tm9uZToKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdW5pb24geworICAgICAgICAgICAgTWVkaWFDb25zdHJhaW50KiBhc1JhdzsKKyAgICAgICAg
ICAgIEludENvbnN0cmFpbnQqIGFzSW50ZWdlcjsKKyAgICAgICAgICAgIERvdWJsZUNvbnN0cmFp
bnQqIGFzRG91YmxlOworICAgICAgICAgICAgQm9vbGVhbkNvbnN0cmFpbnQqIGFzQm9vbGVhbjsK
KyAgICAgICAgICAgIFN0cmluZ0NvbnN0cmFpbnQqIGFzU3RyaW5nOworICAgICAgICB9IG1fdmFs
dWU7CisgICAgfTsKKworICAgIFZlY3RvcjxDb25zdHJhaW50SG9sZGVyPiBtX3ZhcmlhbnRzOwor
I2lmbmRlZiBOREVCVUcKKyAgICBpbnQgbV9nZW5lcmF0aW9uIHsgMCB9OworI2VuZGlmCiB9Owog
CiBjbGFzcyBNZWRpYUNvbnN0cmFpbnRzIDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFDb25zdHJh
aW50cz4gewpAQCAtNDM3LDYgKzU0MCwxNiBAQCBwcm90ZWN0ZWQ6CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX01FRElBQ09OU1RSQUlO
VChDb25zdHJhaW50VHlwZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYkNvcmU6OkNvbnN0cmFpbnRUeXBlKSBcCitzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6TWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KSB7IHJldHVybiBjb25zdHJhaW50
LnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfTUVESUFDT05TVFJBSU5UKEludENvbnN0cmFpbnQsIGlzSW50KCkpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX01FRElBQ09OU1RSQUlOVChEb3VibGVDb25zdHJhaW50LCBp
c0RvdWJsZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19NRURJQUNPTlNUUkFJTlQoU3RyaW5n
Q29uc3RyYWludCwgaXNTdHJpbmcoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTUVESUFDT05T
VFJBSU5UKEJvb2xlYW5Db25zdHJhaW50LCBpc0Jvb2xlYW4oKSkKKwogI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pCiAKICNlbmRpZiAvLyBNZWRpYUNvbnN0cmFpbnRzX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2UuY3BwCShyZXZpc2lvbiAyMDY0MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTUwLDc1ICsxNTAsODQgQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpyZXF1ZXN0
U3RvcChPYgogICAgIHN0b3AoY2FsbGluZ09ic2VydmVyKTsKIH0KIAorI2lmIDEKIGRvdWJsZSBS
ZWFsdGltZU1lZGlhU291cmNlOjpmaXRuZXNzRGlzdGFuY2UoY29uc3QgTWVkaWFDb25zdHJhaW50
JiBjb25zdHJhaW50KQogewogICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNh
cGFiaWxpdGllcyA9ICp0aGlzLT5jYXBhYmlsaXRpZXMoKTsKIAotICAgIHN3aXRjaCAoY29uc3Ry
YWludC50eXBlKCkpIHsKKyAgICBzd2l0Y2ggKGNvbnN0cmFpbnQuY29uc3RyYWludFR5cGUoKSkg
ewogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6V2lkdGg6IHsKKyAgICAgICAgQVNTRVJU
KGNvbnN0cmFpbnQuaXNJbnQoKSk7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRz
V2lkdGgoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBj
YXBhYmlsaXRpZXMud2lkdGgoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuZml0bmVzc0Rp
c3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNJbnQsIHJhbmdlLnJhbmdlTWF4KCkuYXNJbnQpOwor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8SW50Q29uc3RyYWludD4oY29uc3RyYWludCkuZml0bmVz
c0Rpc3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNJbnQsIHJhbmdlLnJhbmdlTWF4KCkuYXNJbnQp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6
OkhlaWdodDogeworICAgICAgICBBU1NFUlQoY29uc3RyYWludC5pc0ludCgpKTsKICAgICAgICAg
aWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNIZWlnaHQoKSkKICAgICAgICAgICAgIHJldHVybiAw
OwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuaGVpZ2h0KCk7Ci0gICAgICAg
IHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0YW5jZShyYW5nZS5yYW5nZU1pbigpLmFzSW50
LCByYW5nZS5yYW5nZU1heCgpLmFzSW50KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEludENv
bnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmZpdG5lc3NEaXN0YW5jZShyYW5nZS5yYW5nZU1pbigpLmFz
SW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGcmFtZVJhdGU6IHsKKyAgICAgICAgQVNTRVJU
KGNvbnN0cmFpbnQuaXNEb3VibGUoKSk7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBv
cnRzRnJhbWVSYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBhdXRvIHJh
bmdlID0gY2FwYWJpbGl0aWVzLmZyYW1lUmF0ZSgpOwotICAgICAgICByZXR1cm4gY29uc3RyYWlu
dC5maXRuZXNzRGlzdGFuY2UocmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmFuZ2UucmFuZ2VN
YXgoKS5hc0RvdWJsZSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxEb3VibGVDb25zdHJhaW50
Pihjb25zdHJhaW50KS5maXRuZXNzRGlzdGFuY2UocmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwg
cmFuZ2UucmFuZ2VNYXgoKS5hc0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6QXNwZWN0UmF0aW86IHsKKyAgICAgICAgQVNTRVJU
KGNvbnN0cmFpbnQuaXNEb3VibGUoKSk7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBv
cnRzQXNwZWN0UmF0aW8oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGF1dG8g
cmFuZ2UgPSBjYXBhYmlsaXRpZXMuYXNwZWN0UmF0aW8oKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0
cmFpbnQuZml0bmVzc0Rpc3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJh
bmdlTWF4KCkuYXNEb3VibGUpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8RG91YmxlQ29uc3Ry
YWludD4oY29uc3RyYWludCkuZml0bmVzc0Rpc3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNEb3Vi
bGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlZvbHVtZTogeworICAgICAgICBBU1NFUlQo
Y29uc3RyYWludC5pc0RvdWJsZSgpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9y
dHNWb2x1bWUoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGF1dG8gcmFuZ2Ug
PSBjYXBhYmlsaXRpZXMudm9sdW1lKCk7Ci0gICAgICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5l
c3NEaXN0YW5jZShyYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFz
RG91YmxlKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PERvdWJsZUNvbnN0cmFpbnQ+KGNvbnN0
cmFpbnQpLmZpdG5lc3NEaXN0YW5jZShyYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5y
YW5nZU1heCgpLmFzRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVSYXRlOiB7CisgICAgICAgIEFTU0VSVChjb25zdHJh
aW50LmlzSW50KCkpOwogICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c1NhbXBsZVJh
dGUoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBh
YmlsaXRpZXMuc2FtcGxlUmF0ZSgpOwotICAgICAgICByZXR1cm4gY29uc3RyYWludC5maXRuZXNz
RGlzdGFuY2UocmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmFuZ2UucmFuZ2VNYXgoKS5hc0Rv
dWJsZSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxJbnRDb25zdHJhaW50Pihjb25zdHJhaW50
KS5maXRuZXNzRGlzdGFuY2UocmFuZ2UucmFuZ2VNaW4oKS5hc0ludCwgcmFuZ2UucmFuZ2VNYXgo
KS5hc0ludCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTWVkaWFDb25zdHJh
aW50VHlwZTo6U2FtcGxlU2l6ZTogeworICAgICAgICBBU1NFUlQoY29uc3RyYWludC5pc0ludCgp
KTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNTYW1wbGVTaXplKCkpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBhdXRvIHJhbmdlID0gY2FwYWJpbGl0aWVzLnNh
bXBsZVNpemUoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuZml0bmVzc0Rpc3RhbmNlKHJh
bmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8SW50Q29uc3RyYWludD4oY29uc3RyYWludCkuZml0bmVzc0Rp
c3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNJbnQsIHJhbmdlLnJhbmdlTWF4KCkuYXNJbnQpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkZh
Y2luZ01vZGU6IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNTdHJpbmcoKSk7CiAgICAg
ICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzRmFjaW5nTW9kZSgpKQogICAgICAgICAgICAg
cmV0dXJuIDA7CiAKQEAgLTIyNywzMiArMjM2LDM1IEBAIGRvdWJsZSBSZWFsdGltZU1lZGlhU291
cmNlOjpmaXRuZXNzRGlzdGEKICAgICAgICAgc3VwcG9ydGVkTW9kZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShtb2Rlcy5zaXplKCkpOwogICAgICAgICBmb3IgKGF1dG8mIG1vZGUgOiBtb2RlcykK
ICAgICAgICAgICAgIHN1cHBvcnRlZE1vZGVzLmFwcGVuZChSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3M6OmZhY2luZ01vZGUobW9kZSkpOwotICAgICAgICByZXR1cm4gY29uc3RyYWludC5maXRu
ZXNzRGlzdGFuY2Uoc3VwcG9ydGVkTW9kZXMpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8U3Ry
aW5nQ29uc3RyYWludD4oY29uc3RyYWludCkuZml0bmVzc0Rpc3RhbmNlKHN1cHBvcnRlZE1vZGVz
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBl
OjpFY2hvQ2FuY2VsbGF0aW9uOiB7CisgICAgICAgIEFTU0VSVChjb25zdHJhaW50LmlzQm9vbGVh
bigpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNFY2hvQ2FuY2VsbGF0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBib29sIGVjaG9DYW5jZWxsYXRp
b25SZWFkV3JpdGUgPSBjYXBhYmlsaXRpZXMuZWNob0NhbmNlbGxhdGlvbigpID09IFJlYWx0aW1l
TWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OkVjaG9DYW5jZWxsYXRpb246OlJlYWRXcml0ZTsKLSAg
ICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuZml0bmVzc0Rpc3RhbmNlKGVjaG9DYW5jZWxsYXRpb25S
ZWFkV3JpdGUpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Qm9vbGVhbkNvbnN0cmFpbnQ+KGNv
bnN0cmFpbnQpLmZpdG5lc3NEaXN0YW5jZShlY2hvQ2FuY2VsbGF0aW9uUmVhZFdyaXRlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpEZXZp
Y2VJZDogeworICAgICAgICBBU1NFUlQoY29uc3RyYWludC5pc1N0cmluZygpKTsKICAgICAgICAg
aWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNEZXZpY2VJZCgpKQogICAgICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuZml0bmVzc0Rpc3RhbmNlKG1faWQpOwor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8U3RyaW5nQ29uc3RyYWludD4oY29uc3RyYWludCkuZml0
bmVzc0Rpc3RhbmNlKG1faWQpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1l
ZGlhQ29uc3RyYWludFR5cGU6Okdyb3VwSWQ6IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQu
aXNTdHJpbmcoKSk7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzRGV2aWNlSWQo
KSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIHJldHVybiBjb25zdHJhaW50LmZp
dG5lc3NEaXN0YW5jZShzZXR0aW5ncygpLmdyb3VwSWQoKSk7CisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxTdHJpbmdDb25zdHJhaW50Pihjb25zdHJhaW50KS5maXRuZXNzRGlzdGFuY2Uoc2V0dGlu
Z3MoKS5ncm91cElkKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI2Myw5ICsyNzUs
MTAgQEAgZG91YmxlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmZpdG5lc3NEaXN0YQogCiAgICAgcmV0
dXJuIDA7CiB9CisjZW5kaWYKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZT4KLXN0YXRp
YyB2b2lkIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25z
dHJhaW50LCBWYWx1ZVR5cGUgY3VycmVudCwgVmFsdWVUeXBlIGNhcGFiaWxpdHlNaW4sIFZhbHVl
VHlwZSBjYXBhYmlsaXR5TWF4LCBSZWFsdGltZU1lZGlhU291cmNlKiBzb3VyY2UsIHZvaWQgKFJl
YWx0aW1lTWVkaWFTb3VyY2U6OipmdW5jdGlvbikoVmFsdWVUeXBlKSkKK3N0YXRpYyB2b2lkIGFw
cGx5TnVtZXJpY0NvbnN0cmFpbnQoY29uc3QgTnVtZXJpY0NvbnN0cmFpbnQ8VmFsdWVUeXBlPiYg
Y29uc3RyYWludCwgVmFsdWVUeXBlIGN1cnJlbnQsIFZhbHVlVHlwZSBjYXBhYmlsaXR5TWluLCBW
YWx1ZVR5cGUgY2FwYWJpbGl0eU1heCwgUmVhbHRpbWVNZWRpYVNvdXJjZSogc291cmNlLCB2b2lk
IChSZWFsdGltZU1lZGlhU291cmNlOjoqYXBwbGllcikoVmFsdWVUeXBlKSkKIHsKICAgICBWYWx1
ZVR5cGUgdmFsdWU7CiAgICAgVmFsdWVUeXBlIG1pbiA9IGNhcGFiaWxpdHlNaW47CkBAIC0yNzMs
NyArMjg2LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlOdW1lcmljQ29uc3RyYWludChjb25zdAogCiAg
ICAgaWYgKGNvbnN0cmFpbnQuZ2V0RXhhY3QodmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChjb25z
dHJhaW50LnZhbGlkRm9yUmFuZ2UoY2FwYWJpbGl0eU1pbiwgY2FwYWJpbGl0eU1heCkpOwotICAg
ICAgICAoc291cmNlLT4qZnVuY3Rpb24pKHZhbHVlKTsKKyAgICAgICAgKHNvdXJjZS0+KmFwcGxp
ZXIpKHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzAyLDkxICszMTUsMTAy
IEBAIHN0YXRpYyB2b2lkIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoY29uc3QKICAgICB9CiAKICAg
ICBpZiAodmFsdWUgIT0gY3VycmVudCkKLSAgICAgICAgKHNvdXJjZS0+KmZ1bmN0aW9uKSh2YWx1
ZSk7CisgICAgICAgIChzb3VyY2UtPiphcHBsaWVyKSh2YWx1ZSk7CiB9CiAKIHZvaWQgUmVhbHRp
bWVNZWRpYVNvdXJjZTo6YXBwbHlDb25zdHJhaW50KGNvbnN0IE1lZGlhQ29uc3RyYWludCYgY29u
c3RyYWludCkKIHsKICAgICBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmls
aXRpZXMgPSAqdGhpcy0+Y2FwYWJpbGl0aWVzKCk7Ci0gICAgc3dpdGNoIChjb25zdHJhaW50LnR5
cGUoKSkgeworICAgIHN3aXRjaCAoY29uc3RyYWludC5jb25zdHJhaW50VHlwZSgpKSB7CiAgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpXaWR0aDogeworICAgICAgICBBU1NFUlQoY29uc3Ry
YWludC5pc0ludCgpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNXaWR0aCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRp
ZXMud2lkdGgoKTsKLSAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWludChjb25zdHJhaW50LCBz
aXplKCkud2lkdGgoKSwgcmFuZ2UucmFuZ2VNaW4oKS5hc0ludCwgcmFuZ2UucmFuZ2VNYXgoKS5h
c0ludCwgdGhpcywgJlJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldFdpZHRoKTsKKyAgICAgICAgYXBw
bHlOdW1lcmljQ29uc3RyYWludChkb3duY2FzdDxJbnRDb25zdHJhaW50Pihjb25zdHJhaW50KSwg
c2l6ZSgpLndpZHRoKCksIHJhbmdlLnJhbmdlTWluKCkuYXNJbnQsIHJhbmdlLnJhbmdlTWF4KCku
YXNJbnQsIHRoaXMsICZSZWFsdGltZU1lZGlhU291cmNlOjpzZXRXaWR0aCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6SGVpZ2h0OiB7Cisg
ICAgICAgIEFTU0VSVChjb25zdHJhaW50LmlzSW50KCkpOwogICAgICAgICBpZiAoIWNhcGFiaWxp
dGllcy5zdXBwb3J0c0hlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1
dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuaGVpZ2h0KCk7Ci0gICAgICAgIGFwcGx5TnVtZXJpY0Nv
bnN0cmFpbnQoY29uc3RyYWludCwgc2l6ZSgpLmhlaWdodCgpLCByYW5nZS5yYW5nZU1pbigpLmFz
SW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50LCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6
c2V0SGVpZ2h0KTsKKyAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWludChkb3duY2FzdDxJbnRD
b25zdHJhaW50Pihjb25zdHJhaW50KSwgc2l6ZSgpLmhlaWdodCgpLCByYW5nZS5yYW5nZU1pbigp
LmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50LCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6c2V0SGVpZ2h0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNv
bnN0cmFpbnRUeXBlOjpGcmFtZVJhdGU6IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNE
b3VibGUoKSk7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzRnJhbWVSYXRlKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0byByYW5nZSA9IGNhcGFiaWxpdGll
cy5mcmFtZVJhdGUoKTsKLSAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWludChjb25zdHJhaW50
LCBmcmFtZVJhdGUoKSwgcmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmFuZ2UucmFuZ2VNYXgo
KS5hc0RvdWJsZSwgdGhpcywgJlJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldEZyYW1lUmF0ZSk7Cisg
ICAgICAgIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoZG93bmNhc3Q8RG91YmxlQ29uc3RyYWludD4o
Y29uc3RyYWludCksIGZyYW1lUmF0ZSgpLCByYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5n
ZS5yYW5nZU1heCgpLmFzRG91YmxlLCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0RnJh
bWVSYXRlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFp
bnRUeXBlOjpBc3BlY3RSYXRpbzogeworICAgICAgICBBU1NFUlQoY29uc3RyYWludC5pc0RvdWJs
ZSgpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNBc3BlY3RSYXRpbygpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMu
YXNwZWN0UmF0aW8oKTsKLSAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWludChjb25zdHJhaW50
LCBhc3BlY3RSYXRpbygpLCByYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1h
eCgpLmFzRG91YmxlLCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0QXNwZWN0UmF0aW8p
OworICAgICAgICBhcHBseU51bWVyaWNDb25zdHJhaW50KGRvd25jYXN0PERvdWJsZUNvbnN0cmFp
bnQ+KGNvbnN0cmFpbnQpLCBhc3BlY3RSYXRpbygpLCByYW5nZS5yYW5nZU1pbigpLmFzRG91Ymxl
LCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlLCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6
c2V0QXNwZWN0UmF0aW8pOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1lZGlh
Q29uc3RyYWludFR5cGU6OlZvbHVtZTogeworICAgICAgICBBU1NFUlQoY29uc3RyYWludC5pc0Rv
dWJsZSgpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNWb2x1bWUoKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBhdXRvIHJhbmdlID0gY2FwYWJpbGl0aWVzLnZv
bHVtZSgpOwotICAgICAgICBhcHBseU51bWVyaWNDb25zdHJhaW50KGNvbnN0cmFpbnQsIHZvbHVt
ZSgpLCByYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91Ymxl
LCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0Vm9sdW1lKTsKKyAgICAgICAgYXBwbHlO
dW1lcmljQ29uc3RyYWludChkb3duY2FzdDxEb3VibGVDb25zdHJhaW50Pihjb25zdHJhaW50KSwg
dm9sdW1lKCksIHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNE
b3VibGUsIHRoaXMsICZSZWFsdGltZU1lZGlhU291cmNlOjpzZXRWb2x1bWUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGU6
IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNJbnQoKSk7CiAgICAgICAgIGlmICghY2Fw
YWJpbGl0aWVzLnN1cHBvcnRzU2FtcGxlUmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuc2FtcGxlUmF0ZSgpOwotICAgICAgICBh
cHBseU51bWVyaWNDb25zdHJhaW50KGNvbnN0cmFpbnQsIHNhbXBsZVJhdGUoKSwgcmFuZ2UucmFu
Z2VNaW4oKS5hc0RvdWJsZSwgcmFuZ2UucmFuZ2VNYXgoKS5hc0RvdWJsZSwgdGhpcywgJlJlYWx0
aW1lTWVkaWFTb3VyY2U6OnNldFNhbXBsZVJhdGUpOworICAgICAgICBhcHBseU51bWVyaWNDb25z
dHJhaW50KGRvd25jYXN0PEludENvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLCBzYW1wbGVSYXRlKCks
IHJhbmdlLnJhbmdlTWluKCkuYXNJbnQsIHJhbmdlLnJhbmdlTWF4KCkuYXNJbnQsIHRoaXMsICZS
ZWFsdGltZU1lZGlhU291cmNlOjpzZXRTYW1wbGVSYXRlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVTaXplOiB7CisgICAgICAg
IEFTU0VSVChjb25zdHJhaW50LmlzSW50KCkpOwogICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5z
dXBwb3J0c1NhbXBsZVNpemUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBhdXRv
IHJhbmdlID0gY2FwYWJpbGl0aWVzLnNhbXBsZVNpemUoKTsKLSAgICAgICAgYXBwbHlOdW1lcmlj
Q29uc3RyYWludChjb25zdHJhaW50LCBzYW1wbGVTaXplKCksIHJhbmdlLnJhbmdlTWluKCkuYXNE
b3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUsIHRoaXMsICZSZWFsdGltZU1lZGlhU291
cmNlOjpzZXRTYW1wbGVTaXplKTsKKyAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWludChkb3du
Y2FzdDxJbnRDb25zdHJhaW50Pihjb25zdHJhaW50KSwgc2FtcGxlU2l6ZSgpLCByYW5nZS5yYW5n
ZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50LCB0aGlzLCAmUmVhbHRpbWVNZWRp
YVNvdXJjZTo6c2V0U2FtcGxlU2l6ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNh
c2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RWNob0NhbmNlbGxhdGlvbjoKKyAgICBjYXNlIE1lZGlh
Q29uc3RyYWludFR5cGU6OkVjaG9DYW5jZWxsYXRpb246IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0
cmFpbnQuaXNCb29sZWFuKCkpOwogICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c0Vj
aG9DYW5jZWxsYXRpb24oKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBib29sIHNl
dHRpbmc7Ci0gICAgICAgIGlmIChjb25zdHJhaW50LmdldEV4YWN0KHNldHRpbmcpIHx8IGNvbnN0
cmFpbnQuZ2V0SWRlYWwoc2V0dGluZykpCisgICAgICAgIGNvbnN0IEJvb2xlYW5Db25zdHJhaW50
JiBib29sQ29uc3RyYWludCA9IGRvd25jYXN0PEJvb2xlYW5Db25zdHJhaW50Pihjb25zdHJhaW50
KTsKKyAgICAgICAgaWYgKGJvb2xDb25zdHJhaW50LmdldEV4YWN0KHNldHRpbmcpIHx8IGJvb2xD
b25zdHJhaW50LmdldElkZWFsKHNldHRpbmcpKQogICAgICAgICAgICAgc2V0RWNob0NhbmNlbGxh
dGlvbihzZXR0aW5nKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBNZWRpYUNv
bnN0cmFpbnRUeXBlOjpGYWNpbmdNb2RlOiB7CisgICAgICAgIEFTU0VSVChjb25zdHJhaW50Lmlz
U3RyaW5nKCkpOwogICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c0ZhY2luZ01vZGUo
KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBhdXRvJiBzdXBwb3J0ZWRNb2RlcyA9
IGNhcGFiaWxpdGllcy5mYWNpbmdNb2RlKCk7Ci0gICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbChN
ZWRpYUNvbnN0cmFpbnQ6OkNvbnN0cmFpbnRUeXBlLCBjb25zdCBTdHJpbmcmKT4gZmlsdGVyID0g
W3N1cHBvcnRlZE1vZGVzXShNZWRpYUNvbnN0cmFpbnQ6OkNvbnN0cmFpbnRUeXBlLCBjb25zdCBT
dHJpbmcmIG1vZGVTdHJpbmcpIHsKKyAgICAgICAgYXV0byBmaWx0ZXIgPSBbc3VwcG9ydGVkTW9k
ZXNdKGNvbnN0IFN0cmluZyYgbW9kZVN0cmluZykgewogICAgICAgICAgICAgYXV0byBtb2RlID0g
UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjp2aWRlb0ZhY2luZ01vZGVFbnVtKG1vZGVTdHJp
bmcpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBzdXBwb3J0ZWRNb2RlIDogc3VwcG9ydGVkTW9k
ZXMpIHsKICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBzdXBwb3J0ZWRNb2RlKQpAQCAtMzk1
LDcgKzQxOSw3IEBAIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6YXBwbHlDb25zdHJhaW4KICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfTsKIAotICAgICAgICBhdXRvIG1vZGVT
dHJpbmcgPSBjb25zdHJhaW50LmZpbmQoZmlsdGVyKTsKKyAgICAgICAgYXV0byBtb2RlU3RyaW5n
ID0gZG93bmNhc3Q8U3RyaW5nQ29uc3RyYWludD4oY29uc3RyYWludCkuZmluZChmaWx0ZXIpOwog
ICAgICAgICBpZiAoIW1vZGVTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAgc2V0RmFjaW5n
TW9kZShSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OnZpZGVvRmFjaW5nTW9kZUVudW0obW9k
ZVN0cmluZykpOwogICAgICAgICBicmVhazsKQEAgLTQwMyw2ICs0MjcsNyBAQCB2b2lkIFJlYWx0
aW1lTWVkaWFTb3VyY2U6OmFwcGx5Q29uc3RyYWluCiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OkRldmljZUlkOgogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6R3JvdXBJZDoK
KyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNTdHJpbmcoKSk7CiAgICAgICAgIC8vIFRoZXJl
IGlzIG5vdGhpbmcgdG8gZG8gaGVyZSwgbmVpdGhlciBjYW4gYmUgY2hhbmdlZC4KICAgICAgICAg
YnJlYWs7CiAKQEAgLTQzMSwxNiArNDU2LDIwIEBAIGJvb2wgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
c2VsZWN0U2V0dGluZ3MKICAgICAvLyAzLiBGb3IgZXZlcnkgcG9zc2libGUgc2V0dGluZ3MgZGlj
dGlvbmFyeSBvZiBjb3B5IGNvbXB1dGUgaXRzIGZpdG5lc3MgZGlzdGFuY2UsIHRyZWF0aW5nIGJh
cmUgdmFsdWVzIG9mCiAgICAgLy8gICAgcHJvcGVydGllcyBhcyBpZGVhbCB2YWx1ZXMuIExldCBj
YW5kaWRhdGVzIGJlIHRoZSBzZXQgb2Ygc2V0dGluZ3MgZGljdGlvbmFyaWVzIGZvciB3aGljaCB0
aGUgZml0bmVzcwogICAgIC8vICAgIGRpc3RhbmNlIGlzIGZpbml0ZS4KLSAgICBhdXRvJiBtYW5k
YXRvcnlDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzLm1hbmRhdG9yeUNvbnN0cmFpbnRzKCk7Ci0g
ICAgZm9yIChhdXRvJiBuYW1lQ29uc3RyYWludFBhaXIgOiBtYW5kYXRvcnlDb25zdHJhaW50cykg
ewotICAgICAgICBjb25zdCBhdXRvJiBjb25zdHJhaW50ID0gbmFtZUNvbnN0cmFpbnRQYWlyLnZh
bHVlOwotICAgICAgICBpZiAoZml0bmVzc0Rpc3RhbmNlKCpjb25zdHJhaW50KSA9PSBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpIHsKLSAgICAgICAgICAgIGZhaWxlZENv
bnN0cmFpbnQgPSBjb25zdHJhaW50LT5uYW1lKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBmYWlsZWRDb25zdHJhaW50ID0gZW1wdHlTdHJpbmcoKTsKKyAgICBjb25zdHJhaW50
cy5tYW5kYXRvcnlDb25zdHJhaW50cygpLmZpbHRlcihbJl0oY29uc3QgTWVkaWFDb25zdHJhaW50
JiBjb25zdHJhaW50KSB7CisgICAgICAgIGlmIChmaXRuZXNzRGlzdGFuY2UoY29uc3RyYWludCkg
PT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSB7CisgICAgICAgICAg
ICBmYWlsZWRDb25zdHJhaW50ID0gY29uc3RyYWludC5uYW1lKCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGNhbmRpZGF0ZXMuc2V0KCpjb25zdHJhaW50
KTsKLSAgICB9CisgICAgICAgIGNhbmRpZGF0ZXMuc2V0KGNvbnN0cmFpbnQpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfSk7CisKKyAgICBpZiAoIWZhaWxlZENvbnN0cmFpbnQuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyA0LiBJZiBjYW5kaWRhdGVzIGlz
IGVtcHR5LCByZXR1cm4gdW5kZWZpbmVkIGFzIHRoZSByZXN1bHQgb2YgdGhlIFNlbGVjdFNldHRp
bmdzKCkgYWxnb3JpdGhtLgogICAgIGlmIChjYW5kaWRhdGVzLmlzRW1wdHkoKSkKQEAgLTQ1Mywx
NSArNDgyLDE3IEBAIGJvb2wgUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2VsZWN0U2V0dGluZ3MKICAg
ICAvLyAgICAgdmFsdWVzIG9mIHByb3BlcnRpZXMgYXMgZXhhY3QuCiAgICAgVmVjdG9yPHN0ZDo6
cGFpcjxkb3VibGUsIE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwPj4gc3VwcG9ydGVkQ29uc3Ry
YWludHM7CiAgICAgZG91YmxlIG1pbmltdW1EaXN0YW5jZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6aW5maW5pdHkoKTsKKwogICAgIGZvciAoY29uc3QgYXV0byYgYWR2YW5jZWRDb25z
dHJhaW50IDogY29uc3RyYWludHMuYWR2YW5jZWRDb25zdHJhaW50cygpKSB7CiAgICAgICAgIGRv
dWJsZSBjb25zdHJhaW50RGlzdGFuY2UgPSAwOwogICAgICAgICBib29sIHN1cHBvcnRlZCA9IGZh
bHNlOwotICAgICAgICBmb3IgKGF1dG8mIG5hbWVDb25zdHJhaW50UGFpciA6IGFkdmFuY2VkQ29u
c3RyYWludCkgewotICAgICAgICAgICAgZG91YmxlIGRpc3RhbmNlID0gZml0bmVzc0Rpc3RhbmNl
KCpuYW1lQ29uc3RyYWludFBhaXIudmFsdWUpOworCisgICAgICAgIGFkdmFuY2VkQ29uc3RyYWlu
dC5mb3JFYWNoKFsmXShjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQpIHsKKyAgICAg
ICAgICAgIGRvdWJsZSBkaXN0YW5jZSA9IGZpdG5lc3NEaXN0YW5jZShjb25zdHJhaW50KTsKICAg
ICAgICAgICAgIGNvbnN0cmFpbnREaXN0YW5jZSArPSBkaXN0YW5jZTsKICAgICAgICAgICAgIGlm
IChkaXN0YW5jZSAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCiAg
ICAgICAgICAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICB9KTsK
IAogICAgICAgICBpZiAoY29uc3RyYWludERpc3RhbmNlIDwgbWluaW11bURpc3RhbmNlKQogICAg
ICAgICAgICAgbWluaW11bURpc3RhbmNlID0gY29uc3RyYWludERpc3RhbmNlOwpAQCAtNDc2LDM1
ICs1MDcsMzQgQEAgYm9vbCBSZWFsdGltZU1lZGlhU291cmNlOjpzZWxlY3RTZXR0aW5ncwogICAg
IC8vIDYuIFNlbGVjdCBvbmUgc2V0dGluZ3MgZGljdGlvbmFyeSBmcm9tIGNhbmRpZGF0ZXMsIGFu
ZCByZXR1cm4gaXQgYXMgdGhlIHJlc3VsdCBvZiB0aGUgU2VsZWN0U2V0dGluZ3MoKSBhbGdvcml0
aG0uCiAgICAgLy8gICAgVGhlIFVBIHNob3VsZCB1c2UgdGhlIG9uZSB3aXRoIHRoZSBzbWFsbGVz
dCBmaXRuZXNzIGRpc3RhbmNlLCBhcyBjYWxjdWxhdGVkIGluIHN0ZXAgMy4KICAgICBpZiAobWlu
aW11bURpc3RhbmNlICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkg
ewotICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5yZW1vdmVBbGxNYXRjaGluZyggWyZdIChz
dGQ6OnBhaXI8ZG91YmxlLCBNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcD4gcGFpcikgLT4gYm9v
bCB7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnJlbW92ZUFsbE1hdGNoaW5nKFsmXShz
dGQ6OnBhaXI8ZG91YmxlLCBNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcD4gcGFpcikgLT4gYm9v
bCB7CiAgICAgICAgICAgICByZXR1cm4gcGFpci5maXJzdCA+IG1pbmltdW1EaXN0YW5jZTsKICAg
ICAgICAgfSk7CiAKICAgICAgICAgaWYgKCFzdXBwb3J0ZWRDb25zdHJhaW50cy5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGF1dG8mIGFkdmFuY2VkQ29uc3RyYWludCA9IHN1cHBvcnRlZENvbnN0
cmFpbnRzWzBdLnNlY29uZDsKLSAgICAgICAgICAgIGZvciAoYXV0byYgbmFtZUNvbnN0cmFpbnRQ
YWlyIDogYWR2YW5jZWRDb25zdHJhaW50KQotICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMubWVy
Z2UoKm5hbWVDb25zdHJhaW50UGFpci52YWx1ZSk7CisgICAgICAgICAgICBhZHZhbmNlZENvbnN0
cmFpbnQuZm9yRWFjaChbJl0oY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KSB7Cisg
ICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5tZXJnZShjb25zdHJhaW50KTsKKyAgICAgICAgICAg
IH0pOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLQogdm9pZCBS
ZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbnRzKGNvbnN0IE1lZGlhQ29uc3RyYWlu
dHMmIGNvbnN0cmFpbnRzLCBTdWNjZXNzSGFuZGxlciBzdWNjZXNzSGFuZGxlciwgRmFpbHVyZUhh
bmRsZXIgZmFpbHVyZUhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKGNvbnN0cmFpbnRzLmlzVmFsaWQo
KSk7CiAKICAgICBGbGF0dGVuZWRDb25zdHJhaW50IGNhbmRpZGF0ZXM7Ci0KICAgICBTdHJpbmcg
ZmFpbGVkQ29uc3RyYWludDsKICAgICBpZiAoIXNlbGVjdFNldHRpbmdzKGNvbnN0cmFpbnRzLCBj
YW5kaWRhdGVzLCBmYWlsZWRDb25zdHJhaW50KSkgewogICAgICAgICBmYWlsdXJlSGFuZGxlcihm
YWlsZWRDb25zdHJhaW50LCAiQ29uc3RyYWludCBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8gY29uc3RyYWludCA6IGNhbmRpZGF0ZXMpCi0g
ICAgICAgIGFwcGx5Q29uc3RyYWludCgqY29uc3RyYWludCk7CisgICAgZm9yIChhdXRvJiB2YXJp
YW50IDogY2FuZGlkYXRlcykKKyAgICAgICAgYXBwbHlDb25zdHJhaW50KHZhcmlhbnQpOwogCiAg
ICAgc3VjY2Vzc0hhbmRsZXIoKTsKIH0KQEAgLTU3OCw3ICs2MDgsNyBAQCB2b2lkIFJlYWx0aW1l
TWVkaWFTb3VyY2U6OnNldFZvbHVtZShkb3ViCiAgICAgc2V0dGluZ3NEaWRDaGFuZ2UoKTsKIH0K
IAotdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpzZXRTYW1wbGVSYXRlKGRvdWJsZSByYXRlKQor
dm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpzZXRTYW1wbGVSYXRlKGludCByYXRlKQogewogICAg
IGlmIChtX3NhbXBsZVJhdGUgPT0gcmF0ZSB8fCAhYXBwbHlTYW1wbGVSYXRlKHJhdGUpKQogICAg
ICAgICByZXR1cm47CkBAIC01ODcsNyArNjE3LDcgQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNl
OjpzZXRTYW1wbGVSYXRlKAogICAgIHNldHRpbmdzRGlkQ2hhbmdlKCk7CiB9CiAKLXZvaWQgUmVh
bHRpbWVNZWRpYVNvdXJjZTo6c2V0U2FtcGxlU2l6ZShkb3VibGUgc2l6ZSkKK3ZvaWQgUmVhbHRp
bWVNZWRpYVNvdXJjZTo6c2V0U2FtcGxlU2l6ZShpbnQgc2l6ZSkKIHsKICAgICBpZiAobV9zYW1w
bGVTaXplID09IHNpemUgfHwgIWFwcGx5U2FtcGxlU2l6ZShzaXplKSkKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRp
YVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAkocmV2aXNpb24gMjA2NDM1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDgsMTMgKzE0OCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWb2x1bWUo
ZG91YmxlKTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlWb2x1bWUoZG91YmxlKSB7IHJldHVybiBm
YWxzZTsgfQogCi0gICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBs
ZVJhdGU7IH0KLSAgICB2b2lkIHNldFNhbXBsZVJhdGUoZG91YmxlKTsKLSAgICB2aXJ0dWFsIGJv
b2wgYXBwbHlTYW1wbGVSYXRlKGRvdWJsZSkgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGRvdWJs
ZSBzYW1wbGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVTaXplOyB9Ci0gICAgdm9pZCBz
ZXRTYW1wbGVTaXplKGRvdWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5U2FtcGxlU2l6ZShk
b3VibGUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgaW50IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3NhbXBsZVJhdGU7IH0KKyAgICB2b2lkIHNldFNhbXBsZVJhdGUoaW50KTsKKyAgICB2
aXJ0dWFsIGJvb2wgYXBwbHlTYW1wbGVSYXRlKGludCkgeyByZXR1cm4gZmFsc2U7IH0KKworICAg
IGludCBzYW1wbGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVTaXplOyB9CisgICAgdm9p
ZCBzZXRTYW1wbGVTaXplKGludCk7CisgICAgdmlydHVhbCBib29sIGFwcGx5U2FtcGxlU2l6ZShp
bnQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBib29sIGVjaG9DYW5jZWxsYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2VjaG9DYW5jZWxsYXRpb247IH0KICAgICB2b2lkIHNldEVjaG9DYW5jZWxs
YXRpb24oYm9vbCk7CkBAIC0xNzAsNyArMTcwLDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAg
ICBXZWFrUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBt
X3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQogCi0gICAgYm9vbCBzdXBwb3J0c0Nv
bnN0cmFpbnRzKGNvbnN0IE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwJik7CiAgICAgYm9vbCBz
ZWxlY3RTZXR0aW5ncyhjb25zdCBNZWRpYUNvbnN0cmFpbnRzJiwgRmxhdHRlbmVkQ29uc3RyYWlu
dCYsIFN0cmluZyYpOwogICAgIGRvdWJsZSBmaXRuZXNzRGlzdGFuY2UoY29uc3QgTWVkaWFDb25z
dHJhaW50Jik7CiAgICAgdm9pZCBhcHBseUNvbnN0cmFpbnQoY29uc3QgTWVkaWFDb25zdHJhaW50
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0
dXJlRGV2aWNlTWFuYWdlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbQkocmV2aXNpb24gMjA2
NDM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVy
ZURldmljZU1hbmFnZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2Nyw3ICsyNjcsNyBAQCBDYXB0
dXJlU2Vzc2lvbkluZm8gQVZDYXB0dXJlRGV2aWNlTWFuYWdlCiBib29sIEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OnNlc3Npb25TdXBwb3J0c0NvbnN0cmFpbnQoY29uc3QgQ2FwdHVyZVNlc3Npb25J
bmZvKiBzZXNzaW9uLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IE1lZGlh
Q29uc3RyYWludCYgY29uc3RyYWludCkKIHsKICAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNl
U3VwcG9ydGVkQ29uc3RyYWludHMmIHN1cHBvcnRlZENvbnN0cmFpbnRzID0gUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuc3VwcG9ydGVkQ29uc3RyYWludHMoKTsKLSAgICBN
ZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0cmFpbnRUeXBlID0gY29uc3RyYWludC50eXBlKCk7Cisg
ICAgTWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJhaW50VHlwZSA9IGNvbnN0cmFpbnQuY29uc3Ry
YWludFR5cGUoKTsKICAgICBpZiAoIXN1cHBvcnRlZENvbnN0cmFpbnRzLnN1cHBvcnRzQ29uc3Ry
YWludChjb25zdHJhaW50VHlwZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjc5LDcg
KzI3OSw3IEBAIGJvb2wgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2Vzc2lvblN1cHAKICAgICAg
ICAgaWYgKGNvbnN0cmFpbnRUeXBlID09IE1lZGlhQ29uc3RyYWludFR5cGU6OldpZHRoKSB7CiAg
ICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MDU3OC4gU3VwcG9ydCBtaW4sIG1heCBjb25zdHJhaW50cy4KICAgICAgICAgICAgIGlu
dCBleGFjdDsKLSAgICAgICAgICAgIGlmICghY29uc3RyYWludC5nZXRFeGFjdChleGFjdCkpCisg
ICAgICAgICAgICBpZiAoIWRvd25jYXN0PGNvbnN0IEludENvbnN0cmFpbnQ+KGNvbnN0cmFpbnQp
LmdldEV4YWN0KGV4YWN0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgICAgIHJldHVybiAhc2Vzc2lvbi0+YmVzdFNlc3Npb25QcmVzZXRGb3JWaWRlb0RpbWVuc2lv
bnMoZXhhY3QsIDApLmlzRW1wdHkoKTsKQEAgLTI4OCw3ICsyODgsNyBAQCBib29sIEFWQ2FwdHVy
ZURldmljZU1hbmFnZXI6OnNlc3Npb25TdXBwCiAgICAgICAgIGlmIChjb25zdHJhaW50VHlwZSA9
PSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTc4LiBTdXBwb3J0IG1p
biwgbWF4IGNvbnN0cmFpbnRzLgogICAgICAgICAgICAgaW50IGV4YWN0OwotICAgICAgICAgICAg
aWYgKCFjb25zdHJhaW50LmdldEV4YWN0KGV4YWN0KSkKKyAgICAgICAgICAgIGlmICghZG93bmNh
c3Q8Y29uc3QgSW50Q29uc3RyYWludD4oY29uc3RyYWludCkuZ2V0RXhhY3QoZXhhY3QpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcmV0dXJuICFzZXNzaW9u
LT5iZXN0U2Vzc2lvblByZXNldEZvclZpZGVvRGltZW5zaW9ucygwLCBleGFjdCkuaXNFbXB0eSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9NZWRpYUNvbnN0cmFpbnRzTW9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9NZWRpYUNv
bnN0cmFpbnRzTW9jay5jcHAJKHJldmlzaW9uIDIwNjQzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svTWVkaWFDb25zdHJhaW50c01vY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxNSArNDMsMTUgQEAgc3RhdGljIGJvb2wgaXNJbnRNZWRpYUNvbnN0cmFpbnRTYXRpc2ZpYQog
ICAgIGludCBmbG9vciA9IDA7CiAKICAgICBpbnQgbWluID0gZmxvb3I7Ci0gICAgaWYgKGNvbnN0
cmFpbnQuZ2V0TWluKG1pbikgJiYgbWluID4gY2VpbGluZykKKyAgICBpZiAoZG93bmNhc3Q8Y29u
c3QgSW50Q29uc3RyYWludD4oY29uc3RyYWludCkuZ2V0TWluKG1pbikgJiYgbWluID4gY2VpbGlu
ZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaW50IG1heCA9IGNlaWxpbmc7Ci0gICAg
aWYgKGNvbnN0cmFpbnQuZ2V0TWF4KG1heCkgJiYgbWF4IDwgbWluKQorICAgIGlmIChkb3duY2Fz
dDxjb25zdCBJbnRDb25zdHJhaW50Pihjb25zdHJhaW50KS5nZXRNYXgobWF4KSAmJiBtYXggPCBt
aW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludCBleGFjdDsKLSAgICBpZiAoY29u
c3RyYWludC5nZXRFeGFjdChleGFjdCkgJiYgKGV4YWN0IDwgbWluIHx8IGV4YWN0ID4gbWF4KSkK
KyAgICBpZiAoZG93bmNhc3Q8Y29uc3QgSW50Q29uc3RyYWludD4oY29uc3RyYWludCkuZ2V0RXhh
Y3QoZXhhY3QpICYmIChleGFjdCA8IG1pbiB8fCBleGFjdCA+IG1heCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtNjMsMTUgKzYzLDE1IEBAIHN0YXRpYyBi
b29sIGlzRG91YmxlTWVkaWFDb25zdHJhaW50U2F0aXMKICAgICBkb3VibGUgZmxvb3IgPSAwOwog
CiAgICAgZG91YmxlIG1pbiA9IGZsb29yOwotICAgIGlmIChjb25zdHJhaW50LmdldE1pbihtaW4p
ICYmIG1pbiA+IGNlaWxpbmcpCisgICAgaWYgKGRvd25jYXN0PGNvbnN0IERvdWJsZUNvbnN0cmFp
bnQ+KGNvbnN0cmFpbnQpLmdldE1pbihtaW4pICYmIG1pbiA+IGNlaWxpbmcpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGRvdWJsZSBtYXggPSBjZWlsaW5nOwotICAgIGlmIChjb25zdHJh
aW50LmdldE1heChtYXgpICYmIG1heCA8IG1pbikKKyAgICBpZiAoZG93bmNhc3Q8Y29uc3QgRG91
YmxlQ29uc3RyYWludD4oY29uc3RyYWludCkuZ2V0TWF4KG1heCkgJiYgbWF4IDwgbWluKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBkb3VibGUgZXhhY3Q7Ci0gICAgaWYgKGNvbnN0cmFp
bnQuZ2V0RXhhY3QoZXhhY3QpICYmIChleGFjdCA8IG1pbiB8fCBleGFjdCA+IG1heCkpCisgICAg
aWYgKGRvd25jYXN0PGNvbnN0IERvdWJsZUNvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmdldEV4YWN0
KGV4YWN0KSAmJiAoZXhhY3QgPCBtaW4gfHwgZXhhY3QgPiBtYXgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIGJvb2wg
aXNEb3VibGVNZWRpYUNvbnN0cmFpbnRTYXRpcwogc3RhdGljIGJvb2wgaXNCb29sZWFuTWVkaWFD
b25zdHJhaW50U2F0aXNmaWFibGUoY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KQog
ewogICAgIGJvb2wgZXhhY3Q7Ci0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0RXhhY3QoZXhhY3QpKQor
ICAgIGlmIChkb3duY2FzdDxjb25zdCBCb29sZWFuQ29uc3RyYWludD4oY29uc3RyYWludCkuZ2V0
RXhhY3QoZXhhY3QpKQogICAgICAgICByZXR1cm4gZXhhY3Q7CiAKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTg5LDcgKzg5LDcgQEAgc3RhdGljIGJvb2wgaXNCb29sZWFuTWVkaWFDb25zdHJhaW50U2F0
aQogc3RhdGljIGJvb2wgaXNTdHJpbmdNZWRpYUNvbnN0cmFpbnRTYXRpc2ZpYWJsZShjb25zdCBN
ZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gZXhhY3Q7
Ci0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0RXhhY3QoZXhhY3QpKSB7CisgICAgaWYgKGRvd25jYXN0
PGNvbnN0IFN0cmluZ0NvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmdldEV4YWN0KGV4YWN0KSkgewog
ICAgICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnRWYWx1ZSA6IGV4YWN0KSB7CiAgICAgICAgICAg
ICBpZiAoY29uc3RyYWludFZhbHVlLmZpbmQoImludmFsaWQiKSAhPSBub3RGb3VuZCkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIGJvb2wg
aXNTdHJpbmdNZWRpYUNvbnN0cmFpbnRTYXRpcwogCiBzdGF0aWMgYm9vbCBpc1NhdGlzZmlhYmxl
KFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgTWVkaWFDb25zdHJhaW50JiBj
b25zdHJhaW50KQogewotICAgIE1lZGlhQ29uc3RyYWludFR5cGUgY29uc3RyYWludFR5cGUgPSBj
b25zdHJhaW50LnR5cGUoKTsKKyAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0cmFpbnRUeXBl
ID0gY29uc3RyYWludC5jb25zdHJhaW50VHlwZSgpOwogCiAgICAgaWYgKHR5cGUgPT0gUmVhbHRp
bWVNZWRpYVNvdXJjZTo6QXVkaW8pIHsKICAgICAgICAgaWYgKGNvbnN0cmFpbnRUeXBlID09IE1l
ZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGUgfHwgY29uc3RyYWludFR5cGUgPT0gTWVkaWFD
b25zdHJhaW50VHlwZTo6U2FtcGxlU2l6ZSkKQEAgLTEyNCwxNSArMTI0LDIwIEBAIHN0YXRpYyBi
b29sIGlzU2F0aXNmaWFibGUoUmVhbHRpbWVNZWRpYVMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWNvbnN0IFN0cmluZyYgTWVkaWFDb25zdHJhaW50c01vY2s6OnZlcmlmeUNvbnN0cmFpbnRzKFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgTWVkaWFDb25zdHJhaW50cyYgY29u
c3RyYWludHMpCitjb25zdCBTdHJpbmcgTWVkaWFDb25zdHJhaW50c01vY2s6OnZlcmlmeUNvbnN0
cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgTWVkaWFDb25zdHJh
aW50cyYgY29uc3RyYWludHMpCiB7Ci0gICAgYXV0byYgbWFuZGF0b3J5Q29uc3RyYWludHMgPSBj
b25zdHJhaW50cy5tYW5kYXRvcnlDb25zdHJhaW50cygpOwotICAgIGZvciAoYXV0byYgbmFtZUNv
bnN0cmFpbnRQYWlyIDogbWFuZGF0b3J5Q29uc3RyYWludHMpIHsKLSAgICAgICAgaWYgKCFpc1Nh
dGlzZmlhYmxlKHR5cGUsICpuYW1lQ29uc3RyYWludFBhaXIudmFsdWUpKQotICAgICAgICAgICAg
cmV0dXJuIG5hbWVDb25zdHJhaW50UGFpci5rZXk7Ci0gICAgfQorICAgIFN0cmluZyBpbnZhbGlk
Q29uc3RyYWludCA9IGVtcHR5U3RyaW5nKCk7CisgICAgY29uc3RyYWludHMubWFuZGF0b3J5Q29u
c3RyYWludHMoKS5maWx0ZXIoWyZdKGNvbnN0IE1lZGlhQ29uc3RyYWludCYgY29uc3RyYWludCkg
eworICAgICAgICBpZiAoIWlzU2F0aXNmaWFibGUodHlwZSwgY29uc3RyYWludCkpIHsKKyAgICAg
ICAgICAgIGludmFsaWRDb25zdHJhaW50ID0gY29uc3RyYWludC5uYW1lKCk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
KTsKKworICAgIHJldHVybiBpbnZhbGlkQ29uc3RyYWludDsKIAotICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL01lZGlhQ29uc3RyYWludHNNb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9NZWRpYUNvbnN0cmFpbnRzTW9jay5oCShyZXZpc2lv
biAyMDY0MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01lZGlhQ29uc3RyYWlu
dHNNb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgTWVkaWFDb25z
dHJhaW50czsKIAogY2xhc3MgTWVkaWFDb25zdHJhaW50c01vY2sgewogcHVibGljOgotICAgIHN0
YXRpYyBjb25zdCBTdHJpbmcmIHZlcmlmeUNvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGUsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMmKTsKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5n
IHZlcmlmeUNvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIGNvbnN0IE1lZGlh
Q29uc3RyYWludHMmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZUF1ZGlvU291
cmNlLmgJKHJldmlzaW9uIDIwNjQzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBA
QCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogCiAgICAgYm9vbCBhcHBseVZvbHVtZShkb3VibGUpIG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIGFwcGx5U2FtcGxlUmF0ZShkb3VibGUp
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIGFwcGx5U2FtcGxlU2l6ZShkb3Vi
bGUpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGFwcGx5U2FtcGxlUmF0ZShp
bnQpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGFwcGx5U2FtcGxlU2l6ZShp
bnQpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICBib29sIGFwcGx5RWNob0NhbmNlbGxh
dGlvbihib29sKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2b2lkIHVwZGF0ZVNl
dHRpbmdzKFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYpIG92ZXJyaWRlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5jcHAJKHJldmlzaW9uIDIwNjQzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBNb2NrUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlcjo6Y3JlYQogICAgIFZlY3RvcjxSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+IHZp
ZGVvU291cmNlczsKIAogICAgIGlmIChhdWRpb0NvbnN0cmFpbnRzLmlzVmFsaWQoKSkgewotICAg
ICAgICBjb25zdCBTdHJpbmcmIGludmFsaWRRdWVyeSA9IE1lZGlhQ29uc3RyYWludHNNb2NrOjp2
ZXJpZnlDb25zdHJhaW50cyhSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbywgYXVkaW9Db25zdHJh
aW50cyk7CisgICAgICAgIGNvbnN0IFN0cmluZyBpbnZhbGlkUXVlcnkgPSBNZWRpYUNvbnN0cmFp
bnRzTW9jazo6dmVyaWZ5Q29uc3RyYWludHMoUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8sIGF1
ZGlvQ29uc3RyYWludHMpOwogICAgICAgICBpZiAoIWludmFsaWRRdWVyeS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIGNsaWVudC0+ZmFpbGVkVG9DcmVhdGVTdHJlYW1XaXRoQ29uc3RyYWludHNF
cnJvcihpbnZhbGlkUXVlcnkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIwLDcgKzEyMCw3
IEBAIHZvaWQgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OmNyZWEKICAgICB9CiAKICAg
ICBpZiAodmlkZW9Db25zdHJhaW50cy5pc1ZhbGlkKCkpIHsKLSAgICAgICAgY29uc3QgU3RyaW5n
JiBpbnZhbGlkUXVlcnkgPSBNZWRpYUNvbnN0cmFpbnRzTW9jazo6dmVyaWZ5Q29uc3RyYWludHMo
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMpOworICAgICAgICBj
b25zdCBTdHJpbmcgaW52YWxpZFF1ZXJ5ID0gTWVkaWFDb25zdHJhaW50c01vY2s6OnZlcmlmeUNv
bnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvLCB2aWRlb0NvbnN0cmFpbnRzKTsK
ICAgICAgICAgaWYgKCFpbnZhbGlkUXVlcnkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjbGll
bnQtPmZhaWxlZFRvQ3JlYXRlU3RyZWFtV2l0aENvbnN0cmFpbnRzRXJyb3IoaW52YWxpZFF1ZXJ5
KTsKICAgICAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289977</attachid>
            <date>2016-09-27 10:49:06 -0700</date>
            <delta_ts>2016-09-27 10:53:11 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>access_from_ui_process_patch_10.txt</filename>
            <type>text/plain</type>
            <size>85377</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjQzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBAQAorMjAxNi0wOS0yNyAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWVkaWFTdHJlYW1d
IFJlc3RydWN0dXJlIE1lZGlhQ29uc3RyYWludHMgY2xhc3NlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNTcxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFs
IGNoYW5nZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWlu
dHNJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHNJbXBsOjppbml0
aWFsaXplKTogRGVsZXRlZCwgbm8gbG9uZ2VyIHVzZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5oOgorCisgICAgICAgICogYmluZGluZ3MvanMv
SlNNZWRpYURldmljZXNDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU3RyaW5n
Q29uc3RyYWludCk6IFJldHVybiBPcHRpb25hbDw+IGluc3RlYWQgb2YgUmVmUHRyPD4uCisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVCb29sZWFuQ29uc3RyYWludCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlRG91YmxlQ29uc3RyYWludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlSW50Q29uc3RyYWludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VN
ZWRpYVRyYWNrQ29uc3RyYWludFNldEZvcktleSk6IERlYWwgd2l0aCBhYm92ZSBjaGFuZ2UuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHA6
CisgICAgICAgIChDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3RyYWludHNGb3JNZWRp
YVR5cGUpOiBVc2UgY29uc3RyYWludHMubWFuZGF0b3J5Q29uc3RyYWludHMuZmlsdGVyCisgICAg
ICAgICAgaW5zdGVhZCBvZiBkaXJlY3QgZW51bWVyYXRpb24uCisgICAgICAgIChDYXB0dXJlRGV2
aWNlTWFuYWdlcjo6c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludCk6IFVzZSBkb3duY2FzdDw+Lgor
ICAgICAgICAoQ2FwdHVyZURldmljZU1hbmFnZXI6OmlzU3VwcG9ydGVkRnJhbWVSYXRlKTogRGl0
dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0NvbnN0cmFpbnQ6OmZpbmQpOiBMb3NlIHRoZSBD
b25zdHJhaW50VHlwZSBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdDb25zdHJh
aW50OjptZXJnZSk6IFVzZSBkb3duY2FzdDw+LgorICAgICAgICAoV2ViQ29yZTo6RmxhdHRlbmVk
Q29uc3RyYWludDo6c2V0KTogVXNlIENvbnN0cmFpbnRIb2xkZXIuCisgICAgICAgIChXZWJDb3Jl
OjpGbGF0dGVuZWRDb25zdHJhaW50OjptZXJnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6OmZvckVhY2gpOiBOZXcuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcDo6ZmlsdGVyKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcDo6aXNFbXB0eSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6OnNldCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50Ojpjb3B5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkludENvbnN0cmFpbnQ6OmNvcHkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RG91YmxlQ29uc3RyYWludDo6Y29weSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpCb29sZWFuQ29uc3RyYWludDo6Y29weSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdHJpbmdDb25zdHJhaW50Ojpjb3B5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnN0cmFpbnQ6Ok1lZGlhQ29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0
cmFpbnQ6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50Ojppc01h
bmRhdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnQ6Om1lcmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludDo6aXNJbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb25zdHJhaW50Ojppc0RvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnN0cmFpbnQ6OmlzQm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnQ6
OmlzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludDo6ZGF0YVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50Ojpjb25zdHJhaW50VHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6Z2V0TWluKToKKyAgICAgICAgKFdl
YkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpnZXRNYXgpOgorICAgICAgICAoV2ViQ29yZTo6TnVt
ZXJpY0NvbnN0cmFpbnQ6OmdldEV4YWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25z
dHJhaW50OjpnZXRJZGVhbCk6CisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6
Zml0bmVzc0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50Ojp2
YWxpZEZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpmaW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpOdW1lcmljQ29uc3RyYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6aW5uZXJNZXJnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50Ojppc0VtcHR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjppdGVyYXRvcjo6b3BlcmF0b3IqKToK
KyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6Oml0ZXJhdG9yOjpvcGVyYXRv
cisrKToKKyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6Oml0ZXJhdG9yOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6Oml0ZXJh
dG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6
OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6OmVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjpDb25zdHJhaW50SG9sZGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmxhdHRlbmVkQ29uc3RyYWludDo6Q29uc3RyYWlu
dEhvbGRlcjo6fkNvbnN0cmFpbnRIb2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmxhdHRlbmVk
Q29uc3RyYWludDo6Q29uc3RyYWludEhvbGRlcjo6Y29uc3RyYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjpDb25zdHJhaW50SG9sZGVyOjpkYXRhVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjpDb25zdHJhaW50SG9sZGVyOjpj
b25zdHJhaW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjpD
b25zdHJhaW50SG9sZGVyOjpDb25zdHJhaW50SG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29uc3RyYWludDo6Z2V0TWluKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29uc3RyYWludDo6Z2V0TWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29u
c3RyYWludDo6Z2V0RXhhY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25z
dHJhaW50OjpnZXRJZGVhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0
cmFpbnQ6OnZhbGlkRm9yUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b25zdHJhaW50OjpmaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3Ry
YWludDo6Zml0bmVzc0Rpc3RhbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29uc3RyYWludDo6dHlwZSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1l
TWVkaWFTb3VyY2U6OmZpdG5lc3NEaXN0YW5jZSk6IFVzZSBkb3duY2FzdDw+LgorICAgICAgICAo
V2ViQ29yZTo6YXBwbHlOdW1lcmljQ29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFs
dGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lTWVkaWFTb3VyY2U6OnNlbGVjdFNldHRpbmdzKTogRGl0dG8uIFVzZSBjb25z
dHJhaW50cy5tYW5kYXRvcnlDb25zdHJhaW50cy5maWx0ZXIKKyAgICAgICAgICBpbnN0ZWFkIG9m
IGRpcmVjdCBlbnVtZXJhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OmFwcGx5Q29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNv
dXJjZTo6c2V0U2FtcGxlUmF0ZSk6IFNhbXBsZSByYXRlIGlzIGFuIGludCwgbm90IGEgZG91Ymxl
LgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0U2FtcGxlU2l6ZSk6
IFNhbXBsZSBzaXplIGlzIGFsc28gYW4gaW50LgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaDoKKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVZD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludCk6IFVzZSBkb3du
Y2FzdDw+LgorCisgICAgICAgICogcGxhdGZvcm0vbW9jay9NZWRpYUNvbnN0cmFpbnRzTW9jay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjppc0ludE1lZGlhQ29uc3RyYWludFNhdGlzZmlhYmxlKTog
VXNlIGRvd25jYXN0PD4uCisgICAgICAgIChXZWJDb3JlOjppc0RvdWJsZU1lZGlhQ29uc3RyYWlu
dFNhdGlzZmlhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc0Jvb2xlYW5NZWRpYUNv
bnN0cmFpbnRTYXRpc2ZpYWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNTdHJpbmdN
ZWRpYUNvbnN0cmFpbnRTYXRpc2ZpYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjppc1NhdGlzZmlh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHNNb2NrOjp2ZXJpZnlDb25z
dHJhaW50cyk6IFVzZSBjb25zdHJhaW50cy5tYW5kYXRvcnlDb25zdHJhaW50cy5maWx0ZXIKKyAg
ICAgICAgICBpbnN0ZWFkIG9mIGRpcmVjdCBlbnVtZXJhdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9y
bS9tb2NrL01lZGlhQ29uc3RyYWludHNNb2NrLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2Nr
L01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6Y3JlYXRlTWVkaWFTdHJlYW0pOgorCiAyMDE2LTA5LTI3
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbi11cCBD
YWNoZWRJbWFnZSBjb25zdHJ1Y3RvcgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5jcHAJKHJldmlz
aW9uIDIwNjQzNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFD
b25zdHJhaW50c0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsNiBAQCBSZWY8
TWVkaWFDb25zdHJhaW50c0ltcGw+IE1lZGlhQ29uc3RyYWluCiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTWVkaWFDb25zdHJhaW50c0ltcGwoKSk7CiB9CiAKLS8vIEZJWE1FOiBSZW1vdmUgYWZ0
ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDU3OQotdm9pZCBN
ZWRpYUNvbnN0cmFpbnRzSW1wbDo6aW5pdGlhbGl6ZShjb25zdCBEaWN0aW9uYXJ5JiBjb25zdHJh
aW50cykKLXsKLSAgICBpZiAoY29uc3RyYWludHMuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgcmV0dXJuOwotfQotCiBSZWY8TWVkaWFDb25zdHJhaW50c0ltcGw+IE1lZGlhQ29uc3RyYWlu
dHNJbXBsOjpjcmVhdGUoTWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXAmJiBtYW5kYXRvcnlDb25z
dHJhaW50cywgVmVjdG9yPE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwPiYmIGFkdmFuY2VkQ29u
c3RyYWludHMsIGJvb2wgaXNWYWxpZCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRp
YUNvbnN0cmFpbnRzSW1wbChXVEZNb3ZlKG1hbmRhdG9yeUNvbnN0cmFpbnRzKSwgV1RGTW92ZShh
ZHZhbmNlZENvbnN0cmFpbnRzKSwgaXNWYWxpZCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzSW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50c0ltcGwuaAko
cmV2aXNpb24gMjA2NDM1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUNvbnN0cmFpbnRzSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw2IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPE1lZGlhQ29uc3RyYWludHNJbXBsPiBjcmVhdGUoTWVkaWFU
cmFja0NvbnN0cmFpbnRTZXRNYXAmJiBtYW5kYXRvcnlDb25zdHJhaW50cywgVmVjdG9yPE1lZGlh
VHJhY2tDb25zdHJhaW50U2V0TWFwPiYmIGFkdmFuY2VkQ29uc3RyYWludHMsIGJvb2wgaXNWYWxp
ZCk7CiAKICAgICB2aXJ0dWFsIH5NZWRpYUNvbnN0cmFpbnRzSW1wbCgpOwotICAgIHZvaWQgaW5p
dGlhbGl6ZShjb25zdCBEaWN0aW9uYXJ5Jik7CiAKICAgICBjb25zdCBNZWRpYVRyYWNrQ29uc3Ry
YWludFNldE1hcCYgbWFuZGF0b3J5Q29uc3RyYWludHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X21hbmRhdG9yeUNvbnN0cmFpbnRzOyB9CiAgICAgY29uc3QgVmVjdG9yPE1lZGlhVHJhY2tDb25z
dHJhaW50U2V0TWFwPiYgYWR2YW5jZWRDb25zdHJhaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fYWR2YW5jZWRDb25zdHJhaW50czsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZWRpYURldmljZXNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVkaWFEZXZpY2VzQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA2NDM1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYURldmljZXNDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1OCw5IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTdHJp
bmdDb25zdHJhaW50V2kKICAgICB9CiB9CiAKLXN0YXRpYyBSZWZQdHI8U3RyaW5nQ29uc3RyYWlu
dD4gY3JlYXRlU3RyaW5nQ29uc3RyYWludChjb25zdCBEaWN0aW9uYXJ5JiBtZWRpYVRyYWNrQ29u
c3RyYWludFNldCwgY29uc3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUs
IENvbnN0cmFpbnRTZXRUeXBlIGNvbnN0cmFpbnRTZXRUeXBlKQorc3RhdGljIE9wdGlvbmFsPFN0
cmluZ0NvbnN0cmFpbnQ+IGNyZWF0ZVN0cmluZ0NvbnN0cmFpbnQoY29uc3QgRGljdGlvbmFyeSYg
bWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJh
aW50VHlwZSB0eXBlLCBDb25zdHJhaW50U2V0VHlwZSBjb25zdHJhaW50U2V0VHlwZSkKIHsKLSAg
ICBhdXRvIGNvbnN0cmFpbnQgPSBTdHJpbmdDb25zdHJhaW50OjpjcmVhdGUobmFtZSwgdHlwZSk7
CisgICAgYXV0byBjb25zdHJhaW50ID0gU3RyaW5nQ29uc3RyYWludChuYW1lLCB0eXBlKTsKIAog
ICAgIC8vIERpY3Rpb25hcnkgY29uc3RyYWludCB2YWx1ZS4KICAgICBEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlWYWx1ZTsKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIFJlZlB0cjxTdHJpbmdDb25zdHJh
aW50PiBjcmVhdGVTdAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFN0cmluZyBleGFjdFN0
cmluZ1ZhbHVlOwogICAgICAgICAgICAgaWYgKGRpY3Rpb25hcnlWYWx1ZS5nZXQoImV4YWN0Iiwg
ZXhhY3RTdHJpbmdWYWx1ZSkpCi0gICAgICAgICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3Qo
ZXhhY3RTdHJpbmdWYWx1ZSk7CisgICAgICAgICAgICAgICAgY29uc3RyYWludC5zZXRFeGFjdChl
eGFjdFN0cmluZ1ZhbHVlKTsKICAgICAgICAgfQogCiAgICAgICAgIEFycmF5VmFsdWUgaWRlYWxB
cnJheVZhbHVlOwpAQCAtODAsMTIgKzgwLDEyIEBAIHN0YXRpYyBSZWZQdHI8U3RyaW5nQ29uc3Ry
YWludD4gY3JlYXRlU3QKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgaWRlYWxT
dHJpbmdWYWx1ZTsKICAgICAgICAgICAgIGlmICghZGljdGlvbmFyeVZhbHVlLmdldCgiaWRlYWwi
LCBpZGVhbFN0cmluZ1ZhbHVlKSkKLSAgICAgICAgICAgICAgICBjb25zdHJhaW50LT5zZXRJZGVh
bChpZGVhbFN0cmluZ1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBjb25zdHJhaW50LnNldElkZWFs
KGlkZWFsU3RyaW5nVmFsdWUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGNvbnN0cmFpbnQt
PmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoY29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIExPRyhNZWRpYSwgImNyZWF0ZVN0cmluZ0NvbnN0cmFpbnQoKSAtIGlnbm9yaW5nIHN0
cmluZyBjb25zdHJhaW50ICclcycgd2l0aCBkaWN0aW9uYXJ5IHZhbHVlIHNpbmNlIGl0IGhhcyBu
byB2YWxpZCBvciBzdXBwb3J0ZWQga2V5L3ZhbHVlIHBhaXJzLiIsIG5hbWUudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBOdWxs
b3B0OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gV1RGTW92ZShjb25zdHJh
aW50KTsKQEAgLTk2LDkgKzk2LDkgQEAgc3RhdGljIFJlZlB0cjxTdHJpbmdDb25zdHJhaW50PiBj
cmVhdGVTdAogICAgIGlmIChtZWRpYVRyYWNrQ29uc3RyYWludFNldC5nZXQobmFtZSwgYXJyYXlW
YWx1ZSkgJiYgIWFycmF5VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBpbml0
aWFsaXplU3RyaW5nQ29uc3RyYWludFdpdGhMaXN0KGNvbnN0cmFpbnQsICZTdHJpbmdDb25zdHJh
aW50OjphcHBlbmRJZGVhbCwgYXJyYXlWYWx1ZSk7CiAKLSAgICAgICAgaWYgKGNvbnN0cmFpbnQt
PmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoY29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIExPRyhNZWRpYSwgImNyZWF0ZVN0cmluZ0NvbnN0cmFpbnQoKSAtIGlnbm9yaW5nIHN0
cmluZyBjb25zdHJhaW50ICclcycgd2l0aCBhcnJheSB2YWx1ZSBzaW5jZSBpdCBpcyBlbXB0eS4i
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBXVEZN
b3ZlKGNvbnN0cmFpbnQpOwpAQCAtMTA4LDM2ICsxMDgsMzYgQEAgc3RhdGljIFJlZlB0cjxTdHJp
bmdDb25zdHJhaW50PiBjcmVhdGVTdAogICAgIFN0cmluZyB2YWx1ZTsKICAgICBpZiAobWVkaWFU
cmFja0NvbnN0cmFpbnRTZXQuZ2V0KG5hbWUsIHZhbHVlKSkgewogICAgICAgICBpZiAoY29uc3Ry
YWludFNldFR5cGUgPT0gQ29uc3RyYWludFNldFR5cGU6Ok1hbmRhdG9yeSkKLSAgICAgICAgICAg
IGNvbnN0cmFpbnQtPnNldElkZWFsKHZhbHVlKTsKKyAgICAgICAgICAgIGNvbnN0cmFpbnQuc2V0
SWRlYWwodmFsdWUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb25zdHJhaW50LT5zZXRF
eGFjdCh2YWx1ZSk7CisgICAgICAgICAgICBjb25zdHJhaW50LnNldEV4YWN0KHZhbHVlKTsKICAg
ICAgICAgCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKGNvbnN0cmFpbnQpOwogICAgIH0KIAogICAg
IC8vIEludmFsaWQgY29uc3RyYWludCB2YWx1ZS4KICAgICBMT0coTWVkaWEsICJjcmVhdGVTdHJp
bmdDb25zdHJhaW50KCkgLSBpZ25vcmluZyBzdHJpbmcgY29uc3RyYWludCAnJXMnIHNpbmNlIGl0
IGhhcyBuZWl0aGVyIGEgZGljdGlvbmFyeSBub3Igc2VxdWVuY2Ugbm9yIHNjYWxhciB2YWx1ZS4i
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBO
dWxsb3B0OwogfQogCi1zdGF0aWMgUmVmUHRyPEJvb2xlYW5Db25zdHJhaW50PiBjcmVhdGVCb29s
ZWFuQ29uc3RyYWludChjb25zdCBEaWN0aW9uYXJ5JiBtZWRpYVRyYWNrQ29uc3RyYWludFNldCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUsIENvbnN0cmFpbnRT
ZXRUeXBlIGNvbnN0cmFpbnRTZXRUeXBlKQorc3RhdGljIE9wdGlvbmFsPEJvb2xlYW5Db25zdHJh
aW50PiBjcmVhdGVCb29sZWFuQ29uc3RyYWludChjb25zdCBEaWN0aW9uYXJ5JiBtZWRpYVRyYWNr
Q29uc3RyYWludFNldCwgY29uc3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5
cGUsIENvbnN0cmFpbnRTZXRUeXBlIGNvbnN0cmFpbnRTZXRUeXBlKQogewotICAgIGF1dG8gY29u
c3RyYWludCA9IEJvb2xlYW5Db25zdHJhaW50OjpjcmVhdGUobmFtZSwgdHlwZSk7CisgICAgYXV0
byBjb25zdHJhaW50ID0gQm9vbGVhbkNvbnN0cmFpbnQobmFtZSwgdHlwZSk7CiAKICAgICAvLyBE
aWN0aW9uYXJ5IGNvbnN0cmFpbnQgdmFsdWUuCiAgICAgRGljdGlvbmFyeSBkaWN0aW9uYXJ5VmFs
dWU7CiAgICAgaWYgKG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LmdldChuYW1lLCBkaWN0aW9uYXJ5
VmFsdWUpICYmICFkaWN0aW9uYXJ5VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAg
ICBib29sIGV4YWN0VmFsdWU7CiAgICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0KCJleGFj
dCIsIGV4YWN0VmFsdWUpKQotICAgICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3QoZXhhY3RW
YWx1ZSk7CisgICAgICAgICAgICBjb25zdHJhaW50LnNldEV4YWN0KGV4YWN0VmFsdWUpOwogCiAg
ICAgICAgIGJvb2wgaWRlYWxWYWx1ZTsKICAgICAgICAgaWYgKGRpY3Rpb25hcnlWYWx1ZS5nZXQo
ImlkZWFsIiwgaWRlYWxWYWx1ZSkpCi0gICAgICAgICAgICBjb25zdHJhaW50LT5zZXRJZGVhbChp
ZGVhbFZhbHVlKTsKKyAgICAgICAgICAgIGNvbnN0cmFpbnQuc2V0SWRlYWwoaWRlYWxWYWx1ZSk7
CiAKLSAgICAgICAgaWYgKGNvbnN0cmFpbnQtPmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoY29u
c3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIExPRyhNZWRpYSwgImNyZWF0ZUJvb2xl
YW5Db25zdHJhaW50KCkgLSBpZ25vcmluZyBib29sZWFuIGNvbnN0cmFpbnQgJyVzJyB3aXRoIGRp
Y3Rpb25hcnkgdmFsdWUgc2luY2UgaXQgaGFzIG5vIHZhbGlkIG9yIHN1cHBvcnRlZCBrZXkvdmFs
dWUgcGFpcnMuIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgICAgIH0KIAogICAgICAgICBy
ZXR1cm4gV1RGTW92ZShjb25zdHJhaW50KTsKQEAgLTE0Nyw0NCArMTQ3LDQ0IEBAIHN0YXRpYyBS
ZWZQdHI8Qm9vbGVhbkNvbnN0cmFpbnQ+IGNyZWF0ZUIKICAgICBib29sIHZhbHVlOwogICAgIGlm
IChtZWRpYVRyYWNrQ29uc3RyYWludFNldC5nZXQobmFtZSwgdmFsdWUpKSB7CiAgICAgICAgIGlm
IChjb25zdHJhaW50U2V0VHlwZSA9PSBDb25zdHJhaW50U2V0VHlwZTo6TWFuZGF0b3J5KQotICAg
ICAgICAgICAgY29uc3RyYWludC0+c2V0SWRlYWwodmFsdWUpOworICAgICAgICAgICAgY29uc3Ry
YWludC5zZXRJZGVhbCh2YWx1ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnN0cmFp
bnQtPnNldEV4YWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGNvbnN0cmFpbnQuc2V0RXhhY3QodmFs
dWUpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIFdURk1vdmUoY29uc3RyYWludCk7CiAgICAg
fQogCiAgICAgLy8gSW52YWxpZCBjb25zdHJhaW50IHZhbHVlLgogICAgIExPRyhNZWRpYSwgImNy
ZWF0ZUJvb2xlYW5Db25zdHJhaW50KCkgLSBpZ25vcmluZyBib29sZWFuIGNvbnN0cmFpbnQgJyVz
JyBzaW5jZSBpdCBoYXMgbmVpdGhlciBhIGRpY3Rpb25hcnkgbm9yIHNjYWxhciB2YWx1ZS4iLCBu
YW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBOdWxs
b3B0OwogfQogCi1zdGF0aWMgUmVmUHRyPERvdWJsZUNvbnN0cmFpbnQ+IGNyZWF0ZURvdWJsZUNv
bnN0cmFpbnQoY29uc3QgRGljdGlvbmFyeSYgbWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlLCBDb25zdHJhaW50U2V0VHlw
ZSBjb25zdHJhaW50U2V0VHlwZSkKK3N0YXRpYyBPcHRpb25hbDxEb3VibGVDb25zdHJhaW50PiBj
cmVhdGVEb3VibGVDb25zdHJhaW50KGNvbnN0IERpY3Rpb25hcnkmIG1lZGlhVHJhY2tDb25zdHJh
aW50U2V0LCBjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSwgQ29u
c3RyYWludFNldFR5cGUgY29uc3RyYWludFNldFR5cGUpCiB7Ci0gICAgYXV0byBjb25zdHJhaW50
ID0gRG91YmxlQ29uc3RyYWludDo6Y3JlYXRlKG5hbWUsIHR5cGUpOworICAgIGF1dG8gY29uc3Ry
YWludCA9IERvdWJsZUNvbnN0cmFpbnQobmFtZSwgdHlwZSk7CiAKICAgICAvLyBEaWN0aW9uYXJ5
IGNvbnN0cmFpbnQgdmFsdWUuCiAgICAgRGljdGlvbmFyeSBkaWN0aW9uYXJ5VmFsdWU7CiAgICAg
aWYgKG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LmdldChuYW1lLCBkaWN0aW9uYXJ5VmFsdWUpICYm
ICFkaWN0aW9uYXJ5VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBkb3VibGUg
bWluVmFsdWU7CiAgICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0KCJtaW4iLCBtaW5WYWx1
ZSkpCi0gICAgICAgICAgICBjb25zdHJhaW50LT5zZXRNaW4obWluVmFsdWUpOworICAgICAgICAg
ICAgY29uc3RyYWludC5zZXRNaW4obWluVmFsdWUpOwogCiAgICAgICAgIGRvdWJsZSBtYXhWYWx1
ZTsKICAgICAgICAgaWYgKGRpY3Rpb25hcnlWYWx1ZS5nZXQoIm1heCIsIG1heFZhbHVlKSkKLSAg
ICAgICAgICAgIGNvbnN0cmFpbnQtPnNldE1heChtYXhWYWx1ZSk7CisgICAgICAgICAgICBjb25z
dHJhaW50LnNldE1heChtYXhWYWx1ZSk7CiAKICAgICAgICAgZG91YmxlIGV4YWN0VmFsdWU7CiAg
ICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0KCJleGFjdCIsIGV4YWN0VmFsdWUpKQotICAg
ICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3QoZXhhY3RWYWx1ZSk7CisgICAgICAgICAgICBj
b25zdHJhaW50LnNldEV4YWN0KGV4YWN0VmFsdWUpOwogCiAgICAgICAgIGRvdWJsZSBpZGVhbFZh
bHVlOwogICAgICAgICBpZiAoZGljdGlvbmFyeVZhbHVlLmdldCgiaWRlYWwiLCBpZGVhbFZhbHVl
KSkKLSAgICAgICAgICAgIGNvbnN0cmFpbnQtPnNldElkZWFsKGlkZWFsVmFsdWUpOworICAgICAg
ICAgICAgY29uc3RyYWludC5zZXRJZGVhbChpZGVhbFZhbHVlKTsKIAotICAgICAgICBpZiAoY29u
c3RyYWludC0+aXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChjb25zdHJhaW50LmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgTE9HKE1lZGlhLCAiY3JlYXRlRG91YmxlQ29uc3RyYWludCgpIC0gaWdu
b3JpbmcgZG91YmxlIGNvbnN0cmFpbnQgJyVzJyB3aXRoIGRpY3Rpb25hcnkgdmFsdWUgc2luY2Ug
aXQgaGFzIG5vIHZhbGlkIG9yIHN1cHBvcnRlZCBrZXkvdmFsdWUgcGFpcnMuIiwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0
dXJuIE51bGxvcHQ7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gV1RGTW92ZShjb25zdHJh
aW50KTsKQEAgLTE5NCw0NCArMTk0LDQ0IEBAIHN0YXRpYyBSZWZQdHI8RG91YmxlQ29uc3RyYWlu
dD4gY3JlYXRlRG8KICAgICBkb3VibGUgdmFsdWU7CiAgICAgaWYgKG1lZGlhVHJhY2tDb25zdHJh
aW50U2V0LmdldChuYW1lLCB2YWx1ZSkpIHsKICAgICAgICAgaWYgKGNvbnN0cmFpbnRTZXRUeXBl
ID09IENvbnN0cmFpbnRTZXRUeXBlOjpNYW5kYXRvcnkpCi0gICAgICAgICAgICBjb25zdHJhaW50
LT5zZXRJZGVhbCh2YWx1ZSk7CisgICAgICAgICAgICBjb25zdHJhaW50LnNldElkZWFsKHZhbHVl
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3QodmFsdWUp
OworICAgICAgICAgICAgY29uc3RyYWludC5zZXRFeGFjdCh2YWx1ZSk7CiAgICAgICAgIAogICAg
ICAgICByZXR1cm4gV1RGTW92ZShjb25zdHJhaW50KTsKICAgICB9CiAKICAgICAvLyBJbnZhbGlk
IGNvbnN0cmFpbnQgdmFsdWUuCiAgICAgTE9HKE1lZGlhLCAiY3JlYXRlRG91YmxlQ29uc3RyYWlu
dCgpIC0gaWdub3JpbmcgZG91YmxlIGNvbnN0cmFpbnQgJyVzJyBzaW5jZSBpdCBoYXMgbmVpdGhl
ciBhIGRpY3Rpb25hcnkgbm9yIHNjYWxhciB2YWx1ZS4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwot
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBOdWxsb3B0OwogfQogCi1zdGF0aWMgUmVm
UHRyPEludENvbnN0cmFpbnQ+IGNyZWF0ZUludENvbnN0cmFpbnQoY29uc3QgRGljdGlvbmFyeSYg
bWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJh
aW50VHlwZSB0eXBlLCBDb25zdHJhaW50U2V0VHlwZSBjb25zdHJhaW50U2V0VHlwZSkKK3N0YXRp
YyBPcHRpb25hbDxJbnRDb25zdHJhaW50PiBjcmVhdGVJbnRDb25zdHJhaW50KGNvbnN0IERpY3Rp
b25hcnkmIG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LCBjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlh
Q29uc3RyYWludFR5cGUgdHlwZSwgQ29uc3RyYWludFNldFR5cGUgY29uc3RyYWludFNldFR5cGUp
CiB7Ci0gICAgYXV0byBjb25zdHJhaW50ID0gSW50Q29uc3RyYWludDo6Y3JlYXRlKG5hbWUsIHR5
cGUpOworICAgIGF1dG8gY29uc3RyYWludCA9IEludENvbnN0cmFpbnQobmFtZSwgdHlwZSk7CiAK
ICAgICAvLyBEaWN0aW9uYXJ5IGNvbnN0cmFpbnQgdmFsdWUuCiAgICAgRGljdGlvbmFyeSBkaWN0
aW9uYXJ5VmFsdWU7CiAgICAgaWYgKG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LmdldChuYW1lLCBk
aWN0aW9uYXJ5VmFsdWUpICYmICFkaWN0aW9uYXJ5VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkg
ewogICAgICAgICBpbnQgbWluVmFsdWU7CiAgICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0
KCJtaW4iLCBtaW5WYWx1ZSkpCi0gICAgICAgICAgICBjb25zdHJhaW50LT5zZXRNaW4obWluVmFs
dWUpOworICAgICAgICAgICAgY29uc3RyYWludC5zZXRNaW4obWluVmFsdWUpOwogCiAgICAgICAg
IGludCBtYXhWYWx1ZTsKICAgICAgICAgaWYgKGRpY3Rpb25hcnlWYWx1ZS5nZXQoIm1heCIsIG1h
eFZhbHVlKSkKLSAgICAgICAgICAgIGNvbnN0cmFpbnQtPnNldE1heChtYXhWYWx1ZSk7CisgICAg
ICAgICAgICBjb25zdHJhaW50LnNldE1heChtYXhWYWx1ZSk7CiAKICAgICAgICAgaW50IGV4YWN0
VmFsdWU7CiAgICAgICAgIGlmIChkaWN0aW9uYXJ5VmFsdWUuZ2V0KCJleGFjdCIsIGV4YWN0VmFs
dWUpKQotICAgICAgICAgICAgY29uc3RyYWludC0+c2V0RXhhY3QoZXhhY3RWYWx1ZSk7CisgICAg
ICAgICAgICBjb25zdHJhaW50LnNldEV4YWN0KGV4YWN0VmFsdWUpOwogCiAgICAgICAgIGludCBp
ZGVhbFZhbHVlOwogICAgICAgICBpZiAoZGljdGlvbmFyeVZhbHVlLmdldCgiaWRlYWwiLCBpZGVh
bFZhbHVlKSkKLSAgICAgICAgICAgIGNvbnN0cmFpbnQtPnNldElkZWFsKGlkZWFsVmFsdWUpOwor
ICAgICAgICAgICAgY29uc3RyYWludC5zZXRJZGVhbChpZGVhbFZhbHVlKTsKIAotICAgICAgICBp
ZiAoY29uc3RyYWludC0+aXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChjb25zdHJhaW50LmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgTE9HKE1lZGlhLCAiY3JlYXRlSW50Q29uc3RyYWludCgpIC0g
aWdub3JpbmcgbG9uZyBjb25zdHJhaW50ICclcycgd2l0aCBkaWN0aW9uYXJ5IHZhbHVlIHNpbmNl
IGl0IGhhcyBubyB2YWxpZCBvciBzdXBwb3J0ZWQga2V5L3ZhbHVlIHBhaXJzLiIsIG5hbWUudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybiBOdWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIFdURk1vdmUoY29uc3Ry
YWludCk7CkBAIC0yNDEsNTQgKzI0MSw2MyBAQCBzdGF0aWMgUmVmUHRyPEludENvbnN0cmFpbnQ+
IGNyZWF0ZUludENvCiAgICAgaW50IHZhbHVlOwogICAgIGlmIChtZWRpYVRyYWNrQ29uc3RyYWlu
dFNldC5nZXQobmFtZSwgdmFsdWUpKSB7CiAgICAgICAgIGlmIChjb25zdHJhaW50U2V0VHlwZSA9
PSBDb25zdHJhaW50U2V0VHlwZTo6TWFuZGF0b3J5KQotICAgICAgICAgICAgY29uc3RyYWludC0+
c2V0SWRlYWwodmFsdWUpOworICAgICAgICAgICAgY29uc3RyYWludC5zZXRJZGVhbCh2YWx1ZSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnN0cmFpbnQtPnNldEV4YWN0KHZhbHVlKTsK
KyAgICAgICAgICAgIGNvbnN0cmFpbnQuc2V0RXhhY3QodmFsdWUpOwogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIFdURk1vdmUoY29uc3RyYWludCk7CiAgICAgfQogCiAgICAgLy8gSW52YWxpZCBj
b25zdHJhaW50IHZhbHVlLgogICAgIExPRyhNZWRpYSwgImNyZWF0ZUludENvbnN0cmFpbnQoKSAt
IGlnbm9yaW5nIGxvbmcgY29uc3RyYWludCAnJXMnIHNpbmNlIGl0IGhhcyBuZWl0aGVyIGEgZGlj
dGlvbmFyeSBub3Igc2NhbGFyIHZhbHVlLiIsIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIE51bGxvcHQ7CiB9CiAKIHN0YXRpYyB2b2lkIHBhcnNl
TWVkaWFUcmFja0NvbnN0cmFpbnRTZXRGb3JLZXkoY29uc3QgRGljdGlvbmFyeSYgbWVkaWFUcmFj
a0NvbnN0cmFpbnRTZXQsIGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFUcmFja0NvbnN0cmFpbnRT
ZXRNYXAmIG1hcCwgQ29uc3RyYWludFNldFR5cGUgY29uc3RyYWludFNldFR5cGUpCiB7CiAgICAg
TWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJhaW50VHlwZSA9IFJlYWx0aW1lTWVkaWFTb3VyY2VT
dXBwb3J0ZWRDb25zdHJhaW50czo6Y29uc3RyYWludEZyb21OYW1lKG5hbWUpOwotCi0gICAgUmVm
UHRyPE1lZGlhQ29uc3RyYWludD4gbWVkaWFDb25zdHJhaW50OwogICAgIHN3aXRjaCAoY29uc3Ry
YWludFR5cGUpIHsKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OldpZHRoOgorICAgICAg
ICBtYXAuc2V0KGNvbnN0cmFpbnRUeXBlLCBjcmVhdGVJbnRDb25zdHJhaW50KG1lZGlhVHJhY2tD
b25zdHJhaW50U2V0LCBuYW1lLCBjb25zdHJhaW50VHlwZSwgY29uc3RyYWludFNldFR5cGUpKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQ6Cisg
ICAgICAgIG1hcC5zZXQoY29uc3RyYWludFR5cGUsIGNyZWF0ZUludENvbnN0cmFpbnQobWVkaWFU
cmFja0NvbnN0cmFpbnRTZXQsIG5hbWUsIGNvbnN0cmFpbnRUeXBlLCBjb25zdHJhaW50U2V0VHlw
ZSkpOworICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBs
ZVJhdGU6CisgICAgICAgIG1hcC5zZXQoY29uc3RyYWludFR5cGUsIGNyZWF0ZUludENvbnN0cmFp
bnQobWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIG5hbWUsIGNvbnN0cmFpbnRUeXBlLCBjb25zdHJh
aW50U2V0VHlwZSkpOworICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5
cGU6OlNhbXBsZVNpemU6Ci0gICAgICAgIG1lZGlhQ29uc3RyYWludCA9IGNyZWF0ZUludENvbnN0
cmFpbnQobWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIG5hbWUsIGNvbnN0cmFpbnRUeXBlLCBjb25z
dHJhaW50U2V0VHlwZSk7CisgICAgICAgIG1hcC5zZXQoY29uc3RyYWludFR5cGUsIGNyZWF0ZUlu
dENvbnN0cmFpbnQobWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIG5hbWUsIGNvbnN0cmFpbnRUeXBl
LCBjb25zdHJhaW50U2V0VHlwZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTWVkaWFD
b25zdHJhaW50VHlwZTo6QXNwZWN0UmF0aW86CisgICAgICAgIG1hcC5zZXQoY29uc3RyYWludFR5
cGUsIGNyZWF0ZURvdWJsZUNvbnN0cmFpbnQobWVkaWFUcmFja0NvbnN0cmFpbnRTZXQsIG5hbWUs
IGNvbnN0cmFpbnRUeXBlLCBjb25zdHJhaW50U2V0VHlwZSkpOworICAgICAgICBicmVhazsKICAg
ICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkZyYW1lUmF0ZToKKyAgICAgICAgbWFwLnNldChj
b25zdHJhaW50VHlwZSwgY3JlYXRlRG91YmxlQ29uc3RyYWludChtZWRpYVRyYWNrQ29uc3RyYWlu
dFNldCwgbmFtZSwgY29uc3RyYWludFR5cGUsIGNvbnN0cmFpbnRTZXRUeXBlKSk7CisgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6Vm9sdW1lOgotICAgICAgICBt
ZWRpYUNvbnN0cmFpbnQgPSBjcmVhdGVEb3VibGVDb25zdHJhaW50KG1lZGlhVHJhY2tDb25zdHJh
aW50U2V0LCBuYW1lLCBjb25zdHJhaW50VHlwZSwgY29uc3RyYWludFNldFR5cGUpOworICAgICAg
ICBtYXAuc2V0KGNvbnN0cmFpbnRUeXBlLCBjcmVhdGVEb3VibGVDb25zdHJhaW50KG1lZGlhVHJh
Y2tDb25zdHJhaW50U2V0LCBuYW1lLCBjb25zdHJhaW50VHlwZSwgY29uc3RyYWludFNldFR5cGUp
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkVjaG9D
YW5jZWxsYXRpb246Ci0gICAgICAgIG1lZGlhQ29uc3RyYWludCA9IGNyZWF0ZUJvb2xlYW5Db25z
dHJhaW50KG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LCBuYW1lLCBjb25zdHJhaW50VHlwZSwgY29u
c3RyYWludFNldFR5cGUpOworICAgICAgICBtYXAuc2V0KGNvbnN0cmFpbnRUeXBlLCBjcmVhdGVC
b29sZWFuQ29uc3RyYWludChtZWRpYVRyYWNrQ29uc3RyYWludFNldCwgbmFtZSwgY29uc3RyYWlu
dFR5cGUsIGNvbnN0cmFpbnRTZXRUeXBlKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdNb2RlOgorICAgICAgICBtYXAuc2V0KGNvbnN0cmFp
bnRUeXBlLCBjcmVhdGVTdHJpbmdDb25zdHJhaW50KG1lZGlhVHJhY2tDb25zdHJhaW50U2V0LCBu
YW1lLCBjb25zdHJhaW50VHlwZSwgY29uc3RyYWludFNldFR5cGUpKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpEZXZpY2VJZDoKKyAgICAgICAgbWFwLnNl
dChjb25zdHJhaW50VHlwZSwgY3JlYXRlU3RyaW5nQ29uc3RyYWludChtZWRpYVRyYWNrQ29uc3Ry
YWludFNldCwgbmFtZSwgY29uc3RyYWludFR5cGUsIGNvbnN0cmFpbnRTZXRUeXBlKSk7CisgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6R3JvdXBJZDoKLSAgICAg
ICAgbWVkaWFDb25zdHJhaW50ID0gY3JlYXRlU3RyaW5nQ29uc3RyYWludChtZWRpYVRyYWNrQ29u
c3RyYWludFNldCwgbmFtZSwgY29uc3RyYWludFR5cGUsIGNvbnN0cmFpbnRTZXRUeXBlKTsKKyAg
ICAgICAgbWFwLnNldChjb25zdHJhaW50VHlwZSwgY3JlYXRlU3RyaW5nQ29uc3RyYWludChtZWRp
YVRyYWNrQ29uc3RyYWludFNldCwgbmFtZSwgY29uc3RyYWludFR5cGUsIGNvbnN0cmFpbnRTZXRU
eXBlKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpV
bmtub3duOgotICAgICAgICBMT0coTWVkaWEsICJwYXJzZU1lZGlhVHJhY2tDb25zdHJhaW50U2V0
Rm9yS2V5KCkgLSBmb3VuZCB1bnN1cHBvcnRlZCBjb25zdHJhaW50ICclcycuIiwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgbWVkaWFDb25zdHJhaW50ID0gVW5rbm93bkNvbnN0cmFpbnQ6
OmNyZWF0ZShuYW1lLCBjb25zdHJhaW50VHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBM
T0coTWVkaWEsICJwYXJzZU1lZGlhVHJhY2tDb25zdHJhaW50U2V0Rm9yS2V5KCkgLSBpZ25vcmlu
ZyB1bnN1cHBvcnRlZCBjb25zdHJhaW50ICclcycuIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBtYXAuYWRkKG5hbWUsIFdURk1vdmUobWVk
aWFDb25zdHJhaW50KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhcnNlQWR2YW5jZWRDb25zdHJhaW50
cyhjb25zdCBEaWN0aW9uYXJ5JiBtZWRpYVRyYWNrQ29uc3RyYWludHMsIFZlY3RvcjxNZWRpYVRy
YWNrQ29uc3RyYWludFNldE1hcD4mIGFkdmFuY2VkQ29uc3RyYWludHMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vQ2FwdHVyZURl
dmljZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyMDY0MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDE2ICs3MiwxOCBAQCBib29sIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpjYXB0dXJlRGV2
aWNlCiAKIGJvb2wgQ2FwdHVyZURldmljZU1hbmFnZXI6OnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVk
aWFUeXBlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgTWVkaWFDb25zdHJh
aW50cyYgY29uc3RyYWludHMsIGNvbnN0IENhcHR1cmVTZXNzaW9uSW5mbyogc2Vzc2lvbiwgU3Ry
aW5nJiBpbnZhbGlkQ29uc3RyYWludCkKIHsKLSAgICBhdXRvJiBtYW5kYXRvcnlDb25zdHJhaW50
cyA9IGNvbnN0cmFpbnRzLm1hbmRhdG9yeUNvbnN0cmFpbnRzKCk7Ci0gICAgZm9yIChhdXRvJiBu
YW1lQ29uc3RyYWludFBhaXIgOiBtYW5kYXRvcnlDb25zdHJhaW50cykgewotICAgICAgICBpZiAo
c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChzZXNzaW9uLCB0eXBlLCAqbmFtZUNvbnN0cmFpbnRQ
YWlyLnZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGludmFsaWRDb25zdHJhaW50
ID0gZW1wdHlTdHJpbmcoKTsKKyAgICBjb25zdHJhaW50cy5tYW5kYXRvcnlDb25zdHJhaW50cygp
LmZpbHRlcihbJl0oY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KSB7CisgICAgICAg
IGlmICghc2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChzZXNzaW9uLCB0eXBlLCBjb25zdHJhaW50
KSkgeworICAgICAgICAgICAgaW52YWxpZENvbnN0cmFpbnQgPSBjb25zdHJhaW50Lm5hbWUoKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgaW52YWxpZENv
bnN0cmFpbnQgPSBuYW1lQ29uc3RyYWludFBhaXIua2V5OwogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQorICAgIH0pOworCisgICAgcmV0dXJuIGludmFsaWRDb25zdHJhaW50LmlzRW1wdHko
KTsKIAotICAgIHJldHVybiB0cnVlOwogfQogCiBWZWN0b3I8UmVmUHRyPFJlYWx0aW1lTWVkaWFT
b3VyY2U+PiBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNvdXJjZXNGb3JUeXBlQW5kQ29uc3Ry
YWludHMoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBNZWRpYUNvbnN0cmFpbnRzJiBj
b25zdHJhaW50cykKQEAgLTE1Myw3ICsxNTUsNyBAQCBzdGF0aWMgaW5saW5lIFJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5nCiBib29sIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzZXNzaW9uU3VwcG9y
dHNDb25zdHJhaW50KGNvbnN0IENhcHR1cmVTZXNzaW9uSW5mbyosIFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGUgdHlwZSwgY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KQogewogICAg
IGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cyYgc3VwcG9ydGVk
Q29uc3RyYWludHMgPSBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5zdXBw
b3J0ZWRDb25zdHJhaW50cygpOwotICAgIE1lZGlhQ29uc3RyYWludFR5cGUgY29uc3RyYWludFR5
cGUgPSBjb25zdHJhaW50LnR5cGUoKTsKKyAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0cmFp
bnRUeXBlID0gY29uc3RyYWludC5jb25zdHJhaW50VHlwZSgpOwogICAgIGlmICghc3VwcG9ydGVk
Q29uc3RyYWludHMuc3VwcG9ydHNDb25zdHJhaW50KGNvbnN0cmFpbnRUeXBlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0xNzYsNyArMTc4LDcgQEAgYm9vbCBDYXB0dXJlRGV2aWNlTWFu
YWdlcjo6c2Vzc2lvblN1cHBvcgogCiAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzkzLiBIYW5kbGUgc2VxdWVuY2Ugb2YgZmFjaW5n
TW9kZSBjb25zdHJhaW50cy4KICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXhhY3RGYWNpbmdNb2Rl
OwotICAgICAgICBpZiAoIWNvbnN0cmFpbnQuZ2V0RXhhY3QoZXhhY3RGYWNpbmdNb2RlKSkKKyAg
ICAgICAgaWYgKCFkb3duY2FzdDxjb25zdCBTdHJpbmdDb25zdHJhaW50Pihjb25zdHJhaW50KS5n
ZXRFeGFjdChleGFjdEZhY2luZ01vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIHJldHVybiBiZXN0RGV2aWNlRm9yRmFjaW5nTW9kZShmYWNpbmdNb2RlRnJvbVN0cmlu
ZyhleGFjdEZhY2luZ01vZGVbMF0pKTsKQEAgLTE5MiwxNSArMTk0LDE1IEBAIGJvb2wgQ2FwdHVy
ZURldmljZU1hbmFnZXI6OmlzU3VwcG9ydGVkRnIKICAgICBib29sIGlzU3VwcG9ydGVkID0gdHJ1
ZTsKIAogICAgIGludCBtaW4gPSAwOwotICAgIGlmIChjb25zdHJhaW50LmdldE1pbihtaW4pKQor
ICAgIGlmIChkb3duY2FzdDxjb25zdCBJbnRDb25zdHJhaW50Pihjb25zdHJhaW50KS5nZXRNaW4o
bWluKSkKICAgICAgICAgaXNTdXBwb3J0ZWQgJj0gbWluID4gNjA7CiAKICAgICBpbnQgbWF4ID0g
NjA7Ci0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0TWF4KG1heCkpCisgICAgaWYgKGRvd25jYXN0PGNv
bnN0IEludENvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmdldE1heChtYXgpKQogICAgICAgICBpc1N1
cHBvcnRlZCAmPSBtYXggPCBtaW47CiAKICAgICBpbnQgZXhhY3Q7Ci0gICAgaWYgKGNvbnN0cmFp
bnQuZ2V0RXhhY3QoZXhhY3QpKQorICAgIGlmIChkb3duY2FzdDxjb25zdCBJbnRDb25zdHJhaW50
Pihjb25zdHJhaW50KS5nZXRFeGFjdChleGFjdCkpCiAgICAgICAgIGlzU3VwcG9ydGVkICY9IChl
eGFjdCA8IG1pbiB8fCBleGFjdCA+IG1heCk7CiAKICAgICByZXR1cm4gaXNTdXBwb3J0ZWQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYUNvbnN0cmFpbnRzLmNwcAkocmV2aXNpb24gMjA2NDM1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDgyICszNCwxMCBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW5jbHVkZSAi
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdXBwb3J0ZWRDb25zdHJhaW50cy5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8TWVkaWFDb25zdHJhaW50PiBNZWRpYUNvbnN0
cmFpbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgTWVkaWFDb25zdHJhaW50
VHlwZSBjb25zdHJhaW50VHlwZSA9IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJh
aW50czo6Y29uc3RyYWludEZyb21OYW1lKG5hbWUpOwotCi0gICAgc3dpdGNoIChjb25zdHJhaW50
VHlwZSkgewotICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6V2lkdGg6Ci0gICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQ6Ci0gICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBl
OjpTYW1wbGVSYXRlOgotICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6U2FtcGxlU2l6ZToK
LSAgICAgICAgcmV0dXJuIEludENvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lLCBjb25zdHJhaW50VHlw
ZSk7Ci0gICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpBc3BlY3RSYXRpbzoKLSAgICBjYXNl
IE1lZGlhQ29uc3RyYWludFR5cGU6OkZyYW1lUmF0ZToKLSAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OlZvbHVtZToKLSAgICAgICAgcmV0dXJuIERvdWJsZUNvbnN0cmFpbnQ6OmNyZWF0ZShu
YW1lLCBjb25zdHJhaW50VHlwZSk7Ci0gICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpFY2hv
Q2FuY2VsbGF0aW9uOgotICAgICAgICByZXR1cm4gQm9vbGVhbkNvbnN0cmFpbnQ6OmNyZWF0ZShu
YW1lLCBjb25zdHJhaW50VHlwZSk7Ci0gICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNp
bmdNb2RlOgotICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RGV2aWNlSWQ6Ci0gICAgY2Fz
ZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpHcm91cElkOgotICAgICAgICByZXR1cm4gU3RyaW5nQ29u
c3RyYWludDo6Y3JlYXRlKG5hbWUsIGNvbnN0cmFpbnRUeXBlKTsKLSAgICBjYXNlIE1lZGlhQ29u
c3RyYWludFR5cGU6OlVua25vd246Ci0gICAgICAgIHJldHVybiBVbmtub3duQ29uc3RyYWludDo6
Y3JlYXRlKG5hbWUsIGNvbnN0cmFpbnRUeXBlKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gTWVkaWFDb25zdHJhaW50OjpjcmVhdGUoU3RyaW5nKCkpOwot
fQotCi1SZWY8TWVkaWFDb25zdHJhaW50PiBNZWRpYUNvbnN0cmFpbnQ6OmNvcHkoKSBjb25zdAot
ewotICAgIHJldHVybiBNZWRpYUNvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKCkpOwotfQotCi1SZWY8
TWVkaWFDb25zdHJhaW50PiBJbnRDb25zdHJhaW50Ojpjb3B5KCkgY29uc3QKLXsKLSAgICBhdXRv
IGNvcHkgPSBJbnRDb25zdHJhaW50OjpjcmVhdGUobmFtZSgpLCB0eXBlKCkpOwotICAgIGNvcHkt
Pm1fbWluID0gbV9taW47Ci0gICAgY29weS0+bV9tYXggPSBtX21heDsKLSAgICBjb3B5LT5tX2V4
YWN0ID0gbV9leGFjdDsKLSAgICBjb3B5LT5tX2lkZWFsID0gbV9pZGVhbDsKLQotICAgIHJldHVy
biBjb3B5LmxlYWtSZWYoKTsKLX0KLQotUmVmPE1lZGlhQ29uc3RyYWludD4gRG91YmxlQ29uc3Ry
YWludDo6Y29weSgpIGNvbnN0Ci17Ci0gICAgYXV0byBjb3B5ID0gRG91YmxlQ29uc3RyYWludDo6
Y3JlYXRlKG5hbWUoKSwgdHlwZSgpKTsKLSAgICBjb3B5LT5tX21pbiA9IG1fbWluOwotICAgIGNv
cHktPm1fbWF4ID0gbV9tYXg7Ci0gICAgY29weS0+bV9leGFjdCA9IG1fZXhhY3Q7Ci0gICAgY29w
eS0+bV9pZGVhbCA9IG1faWRlYWw7Ci0gICAgCi0gICAgcmV0dXJuIGNvcHkubGVha1JlZigpOwot
fQotCi1SZWY8TWVkaWFDb25zdHJhaW50PiBCb29sZWFuQ29uc3RyYWludDo6Y29weSgpIGNvbnN0
Ci17Ci0gICAgYXV0byBjb3B5ID0gQm9vbGVhbkNvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKCksIHR5
cGUoKSk7Ci0gICAgY29weS0+bV9leGFjdCA9IG1fZXhhY3Q7Ci0gICAgY29weS0+bV9pZGVhbCA9
IG1faWRlYWw7Ci0KLSAgICByZXR1cm4gY29weS5sZWFrUmVmKCk7Ci19Ci0KLVJlZjxNZWRpYUNv
bnN0cmFpbnQ+IFN0cmluZ0NvbnN0cmFpbnQ6OmNvcHkoKSBjb25zdAotewotICAgIGF1dG8gY29w
eSA9IFN0cmluZ0NvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKCksIHR5cGUoKSk7Ci0gICAgY29weS0+
bV9leGFjdCA9IG1fZXhhY3Q7Ci0gICAgY29weS0+bV9pZGVhbCA9IG1faWRlYWw7Ci0KLSAgICBy
ZXR1cm4gY29weS5sZWFrUmVmKCk7Ci19Ci0KIGJvb2wgQm9vbGVhbkNvbnN0cmFpbnQ6OmdldEV4
YWN0KGJvb2wmIGV4YWN0KSBjb25zdAogewogICAgIGlmICghbV9leGFjdCkKQEAgLTE2OSwxNSAr
OTcsMTUgQEAgYm9vbCBTdHJpbmdDb25zdHJhaW50OjpnZXRJZGVhbChWZWN0b3I8UwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1jb25zdCBTdHJpbmcmIFN0cmluZ0NvbnN0cmFpbnQ6OmZpbmQoc3Rk
OjpmdW5jdGlvbjxib29sKENvbnN0cmFpbnRUeXBlLCBjb25zdCBTdHJpbmcmKT4gZmlsdGVyKSBj
b25zdAorY29uc3QgU3RyaW5nJiBTdHJpbmdDb25zdHJhaW50OjpmaW5kKHN0ZDo6ZnVuY3Rpb248
Ym9vbChjb25zdCBTdHJpbmcmKT4gZmlsdGVyKSBjb25zdAogewogICAgIGZvciAoYXV0byYgY29u
c3RyYWludCA6IG1fZXhhY3QpIHsKLSAgICAgICAgaWYgKGZpbHRlcihDb25zdHJhaW50VHlwZTo6
RXhhY3RDb25zdHJhaW50LCBjb25zdHJhaW50KSkKKyAgICAgICAgaWYgKGZpbHRlcihjb25zdHJh
aW50KSkKICAgICAgICAgICAgIHJldHVybiBjb25zdHJhaW50OwogICAgIH0KIAogICAgIGZvciAo
YXV0byYgY29uc3RyYWludCA6IG1faWRlYWwpIHsKLSAgICAgICAgaWYgKGZpbHRlcihDb25zdHJh
aW50VHlwZTo6SWRlYWxDb25zdHJhaW50LCBjb25zdHJhaW50KSkKKyAgICAgICAgaWYgKGZpbHRl
cihjb25zdHJhaW50KSkKICAgICAgICAgICAgIHJldHVybiBjb25zdHJhaW50OwogICAgIH0KICAg
ICAKQEAgLTIyMiwxMSArMTUwLDE0IEBAIGRvdWJsZSBTdHJpbmdDb25zdHJhaW50OjpmaXRuZXNz
RGlzdGFuY2UKIAogdm9pZCBTdHJpbmdDb25zdHJhaW50OjptZXJnZShjb25zdCBNZWRpYUNvbnN0
cmFpbnQmIG90aGVyKQogeworICAgIEFTU0VSVChvdGhlci5pc1N0cmluZygpKTsKKyAgICBjb25z
dCBTdHJpbmdDb25zdHJhaW50JiB0eXBlZE90aGVyID0gZG93bmNhc3Q8U3RyaW5nQ29uc3RyYWlu
dD4ob3RoZXIpOworCiAgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzOwotICAgIGlmIChvdGhlci5nZXRFeGFjdCh2YWx1
ZXMpKSB7CisgICAgaWYgKHR5cGVkT3RoZXIuZ2V0RXhhY3QodmFsdWVzKSkgewogICAgICAgICBp
ZiAobV9leGFjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2V4YWN0ID0gdmFsdWVzOwogICAg
ICAgICBlbHNlIHsKQEAgLTIzNyw3ICsxNjgsNyBAQCB2b2lkIFN0cmluZ0NvbnN0cmFpbnQ6Om1l
cmdlKGNvbnN0IE1lZGlhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAob3RoZXIuZ2V0SWRl
YWwodmFsdWVzKSkgeworICAgIGlmICh0eXBlZE90aGVyLmdldElkZWFsKHZhbHVlcykpIHsKICAg
ICAgICAgaWYgKG1faWRlYWwuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9pZGVhbCA9IHZhbHVl
czsKICAgICAgICAgZWxzZSB7CkBAIC0yNTEsMjYgKzE4MiwyMzMgQEAgdm9pZCBTdHJpbmdDb25z
dHJhaW50OjptZXJnZShjb25zdCBNZWRpYQogCiB2b2lkIEZsYXR0ZW5lZENvbnN0cmFpbnQ6OnNl
dChjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7Ci0gICAgZm9yIChhdXRvIGV4
aXN0aW5nQ29uc3RyYWludCA6IG1fY29uc3RyYWludHMpIHsKLSAgICAgICAgaWYgKGV4aXN0aW5n
Q29uc3RyYWludC0+dHlwZSgpID09IGNvbnN0cmFpbnQudHlwZSgpKSB7Ci0gICAgICAgICAgICBl
eGlzdGluZ0NvbnN0cmFpbnQgPSBjb25zdHJhaW50LmNvcHkoKTsKKyAgICBmb3IgKGF1dG8mIHZh
cmlhbnQgOiBtX3ZhcmlhbnRzKSB7CisgICAgICAgIGlmICh2YXJpYW50LmNvbnN0cmFpbnRUeXBl
KCkgPT0gY29uc3RyYWludC5jb25zdHJhaW50VHlwZSgpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CiAgICAgfQogCi0gICAgbV9jb25zdHJhaW50cy5hcHBlbmQoY29uc3RyYWludC5j
b3B5KCkpOworICAgIGFwcGVuZChjb25zdHJhaW50KTsKIH0KIAogdm9pZCBGbGF0dGVuZWRDb25z
dHJhaW50OjptZXJnZShjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7Ci0gICAg
Zm9yIChhdXRvIGV4aXN0aW5nQ29uc3RyYWludCA6IG1fY29uc3RyYWludHMpIHsKLSAgICAgICAg
aWYgKGV4aXN0aW5nQ29uc3RyYWludC0+dHlwZSgpID09IGNvbnN0cmFpbnQudHlwZSgpKSB7Ci0g
ICAgICAgICAgICBleGlzdGluZ0NvbnN0cmFpbnQtPm1lcmdlKGNvbnN0cmFpbnQpOworICAgIGZv
ciAoYXV0byYgdmFyaWFudCA6ICp0aGlzKSB7CisgICAgICAgIGlmICh2YXJpYW50LmNvbnN0cmFp
bnRUeXBlKCkgIT0gY29uc3RyYWludC5jb25zdHJhaW50VHlwZSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgc3dpdGNoICh2YXJpYW50LmRhdGFUeXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnQ6OkRhdGFUeXBlOjpJbnRlZ2VyOgorICAgICAgICAgICAgQVNT
RVJUKGNvbnN0cmFpbnQuaXNJbnQoKSk7CisgICAgICAgICAgICBkb3duY2FzdDxjb25zdCBJbnRD
b25zdHJhaW50Pih2YXJpYW50KS5tZXJnZShkb3duY2FzdDxjb25zdCBJbnRDb25zdHJhaW50Pihj
b25zdHJhaW50KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgTWVkaWFDb25z
dHJhaW50OjpEYXRhVHlwZTo6RG91YmxlOgorICAgICAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQu
aXNEb3VibGUoKSk7CisgICAgICAgICAgICBkb3duY2FzdDxjb25zdCBEb3VibGVDb25zdHJhaW50
Pih2YXJpYW50KS5tZXJnZShkb3duY2FzdDxjb25zdCBEb3VibGVDb25zdHJhaW50Pihjb25zdHJh
aW50KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgTWVkaWFDb25zdHJhaW50
OjpEYXRhVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgICAgIEFTU0VSVChjb25zdHJhaW50LmlzQm9v
bGVhbigpKTsKKyAgICAgICAgICAgIGRvd25jYXN0PGNvbnN0IEJvb2xlYW5Db25zdHJhaW50Pih2
YXJpYW50KS5tZXJnZShkb3duY2FzdDxjb25zdCBCb29sZWFuQ29uc3RyYWludD4oY29uc3RyYWlu
dCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE1lZGlhQ29uc3RyYWludDo6
RGF0YVR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIEFTU0VSVChjb25zdHJhaW50LmlzU3RyaW5n
KCkpOworICAgICAgICAgICAgZG93bmNhc3Q8Y29uc3QgU3RyaW5nQ29uc3RyYWludD4odmFyaWFu
dCkubWVyZ2UoZG93bmNhc3Q8Y29uc3QgU3RyaW5nQ29uc3RyYWludD4oY29uc3RyYWludCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE1lZGlhQ29uc3RyYWludDo6RGF0YVR5
cGU6Ok5vbmU6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fY29uc3RyYWludHMuYXBwZW5kKGNv
bnN0cmFpbnQuY29weSgpKTsKKyAgICBhcHBlbmQoY29uc3RyYWludCk7Cit9CisKK3ZvaWQgRmxh
dHRlbmVkQ29uc3RyYWludDo6YXBwZW5kKGNvbnN0IE1lZGlhQ29uc3RyYWludCYgY29uc3RyYWlu
dCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgKyttX2dlbmVyYXRpb247CisjZW5kaWYKKworICAg
IG1fdmFyaWFudHMuYXBwZW5kKENvbnN0cmFpbnRIb2xkZXI6OmNyZWF0ZShjb25zdHJhaW50KSk7
CisKK30KKwordm9pZCBNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcDo6Zm9yRWFjaChzdGQ6OmZ1
bmN0aW9uPHZvaWQoY29uc3QgTWVkaWFDb25zdHJhaW50Jik+IGNhbGxiYWNrKSBjb25zdAorewor
ICAgIGlmIChtX3dpZHRoICYmICFtX3dpZHRoLT5pc0VtcHR5KCkpCisgICAgICAgIGNhbGxiYWNr
KCptX3dpZHRoKTsKKyAgICBpZiAobV9oZWlnaHQgJiYgIW1faGVpZ2h0LT5pc0VtcHR5KCkpCisg
ICAgICAgIGNhbGxiYWNrKCptX2hlaWdodCk7CisgICAgaWYgKG1fc2FtcGxlUmF0ZSAmJiAhbV9z
YW1wbGVSYXRlLT5pc0VtcHR5KCkpCisgICAgICAgIGNhbGxiYWNrKCptX3NhbXBsZVJhdGUpOwor
ICAgIGlmIChtX3NhbXBsZVNpemUgJiYgIW1fc2FtcGxlU2l6ZS0+aXNFbXB0eSgpKQorICAgICAg
ICBjYWxsYmFjaygqbV9zYW1wbGVTaXplKTsKKworICAgIGlmIChtX2FzcGVjdFJhdGlvICYmICFt
X2FzcGVjdFJhdGlvLT5pc0VtcHR5KCkpCisgICAgICAgIGNhbGxiYWNrKCptX2FzcGVjdFJhdGlv
KTsKKyAgICBpZiAobV9mcmFtZVJhdGUgJiYgIW1fZnJhbWVSYXRlLT5pc0VtcHR5KCkpCisgICAg
ICAgIGNhbGxiYWNrKCptX2ZyYW1lUmF0ZSk7CisgICAgaWYgKG1fdm9sdW1lICYmICFtX3ZvbHVt
ZS0+aXNFbXB0eSgpKQorICAgICAgICBjYWxsYmFjaygqbV92b2x1bWUpOworCisgICAgaWYgKG1f
ZWNob0NhbmNlbGxhdGlvbiAmJiAhbV9lY2hvQ2FuY2VsbGF0aW9uLT5pc0VtcHR5KCkpCisgICAg
ICAgIGNhbGxiYWNrKCptX2VjaG9DYW5jZWxsYXRpb24pOworCisgICAgaWYgKG1fZmFjaW5nTW9k
ZSAmJiAhbV9mYWNpbmdNb2RlLT5pc0VtcHR5KCkpCisgICAgICAgIGNhbGxiYWNrKCptX2ZhY2lu
Z01vZGUpOworICAgIGlmIChtX2RldmljZUlkICYmICFtX2RldmljZUlkLT5pc0VtcHR5KCkpCisg
ICAgICAgIGNhbGxiYWNrKCptX2RldmljZUlkKTsKKyAgICBpZiAobV9ncm91cElkICYmICFtX2dy
b3VwSWQtPmlzRW1wdHkoKSkKKyAgICAgICAgY2FsbGJhY2soKm1fZ3JvdXBJZCk7Cit9CisKK3Zv
aWQgTWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6OmZpbHRlcihzdGQ6OmZ1bmN0aW9uPGJvb2wo
Y29uc3QgTWVkaWFDb25zdHJhaW50Jik+IGNhbGxiYWNrKSBjb25zdAoreworICAgIGlmIChtX3dp
ZHRoICYmICFtX3dpZHRoLT5pc0VtcHR5KCkgJiYgY2FsbGJhY2soKm1fd2lkdGgpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKG1faGVpZ2h0ICYmICFtX2hlaWdodC0+aXNFbXB0eSgpICYmIGNh
bGxiYWNrKCptX2hlaWdodCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9zYW1wbGVSYXRl
ICYmICFtX3NhbXBsZVJhdGUtPmlzRW1wdHkoKSAmJiBjYWxsYmFjaygqbV9zYW1wbGVSYXRlKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3NhbXBsZVNpemUgJiYgIW1fc2FtcGxlU2l6ZS0+
aXNFbXB0eSgpICYmIGNhbGxiYWNrKCptX3NhbXBsZVNpemUpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobV9hc3BlY3RSYXRpbyAmJiAhbV9hc3BlY3RSYXRpby0+aXNFbXB0eSgpICYmIGNh
bGxiYWNrKCptX2FzcGVjdFJhdGlvKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2ZyYW1l
UmF0ZSAmJiAhbV9mcmFtZVJhdGUtPmlzRW1wdHkoKSAmJiBjYWxsYmFjaygqbV9mcmFtZVJhdGUp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fdm9sdW1lICYmICFtX3ZvbHVtZS0+aXNFbXB0
eSgpICYmIGNhbGxiYWNrKCptX3ZvbHVtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X2VjaG9DYW5jZWxsYXRpb24gJiYgIW1fZWNob0NhbmNlbGxhdGlvbi0+aXNFbXB0eSgpICYmIGNh
bGxiYWNrKCptX2VjaG9DYW5jZWxsYXRpb24pKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9mYWNpbmdNb2RlICYmICFtX2ZhY2luZ01vZGUtPmlzRW1wdHkoKSAmJiBjYWxsYmFjaygqbV9m
YWNpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2RldmljZUlkICYmICFtX2Rl
dmljZUlkLT5pc0VtcHR5KCkgJiYgY2FsbGJhY2soKm1fZGV2aWNlSWQpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKG1fZ3JvdXBJZCAmJiAhbV9ncm91cElkLT5pc0VtcHR5KCkgJiYgY2FsbGJh
Y2soKm1fZ3JvdXBJZCkpCisgICAgICAgIHJldHVybjsKK30KKworYm9vbCBNZWRpYVRyYWNrQ29u
c3RyYWludFNldE1hcDo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICghbV93aWR0aCB8
fCBtX3dpZHRoLT5pc0VtcHR5KCkpCisgICAgICAgICYmICghbV9oZWlnaHQgfHwgbV9oZWlnaHQt
PmlzRW1wdHkoKSkKKyAgICAgICAgJiYgKCFtX3NhbXBsZVJhdGUgfHwgbV9zYW1wbGVSYXRlLT5p
c0VtcHR5KCkpCisgICAgICAgICYmICghbV9zYW1wbGVTaXplIHx8IG1fc2FtcGxlU2l6ZS0+aXNF
bXB0eSgpKQorICAgICAgICAmJiAoIW1fYXNwZWN0UmF0aW8gfHwgbV9hc3BlY3RSYXRpby0+aXNF
bXB0eSgpKQorICAgICAgICAmJiAoIW1fZnJhbWVSYXRlIHx8IG1fZnJhbWVSYXRlLT5pc0VtcHR5
KCkpCisgICAgICAgICYmICghbV92b2x1bWUgfHwgbV92b2x1bWUtPmlzRW1wdHkoKSkKKyAgICAg
ICAgJiYgKCFtX2VjaG9DYW5jZWxsYXRpb24gfHwgbV9lY2hvQ2FuY2VsbGF0aW9uLT5pc0VtcHR5
KCkpCisgICAgICAgICYmICghbV9mYWNpbmdNb2RlIHx8IG1fZmFjaW5nTW9kZS0+aXNFbXB0eSgp
KQorICAgICAgICAmJiAoIW1fZGV2aWNlSWQgfHwgbV9kZXZpY2VJZC0+aXNFbXB0eSgpKQorICAg
ICAgICAmJiAoIW1fZ3JvdXBJZCB8fCBtX2dyb3VwSWQtPmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQg
TWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6OnNldChNZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0
cmFpbnRUeXBlLCBPcHRpb25hbDxJbnRDb25zdHJhaW50PiYmIGNvbnN0cmFpbnQpCit7CisgICAg
c3dpdGNoIChjb25zdHJhaW50VHlwZSkgeworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6
V2lkdGg6CisgICAgICAgIG1fd2lkdGggPSBXVEZNb3ZlKGNvbnN0cmFpbnQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkhlaWdodDoKKyAgICAgICAgbV9o
ZWlnaHQgPSBXVEZNb3ZlKGNvbnN0cmFpbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1l
ZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGU6CisgICAgICAgIG1fc2FtcGxlUmF0ZSA9IFdU
Rk1vdmUoY29uc3RyYWludCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFDb25zdHJh
aW50VHlwZTo6U2FtcGxlU2l6ZToKKyAgICAgICAgbV9zYW1wbGVTaXplID0gV1RGTW92ZShjb25z
dHJhaW50KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6
OkFzcGVjdFJhdGlvOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RnJhbWVSYXRlOgor
ICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6Vm9sdW1lOgorICAgIGNhc2UgTWVkaWFDb25z
dHJhaW50VHlwZTo6RWNob0NhbmNlbGxhdGlvbjoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5
cGU6OkZhY2luZ01vZGU6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpEZXZpY2VJZDoK
KyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Okdyb3VwSWQ6CisgICAgY2FzZSBNZWRpYUNv
bnN0cmFpbnRUeXBlOjpVbmtub3duOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFw
OjpzZXQoTWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJhaW50VHlwZSwgT3B0aW9uYWw8RG91Ymxl
Q29uc3RyYWludD4mJiBjb25zdHJhaW50KQoreworICAgIHN3aXRjaCAoY29uc3RyYWludFR5cGUp
IHsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkFzcGVjdFJhdGlvOgorICAgICAgICBt
X2FzcGVjdFJhdGlvID0gV1RGTW92ZShjb25zdHJhaW50KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGcmFtZVJhdGU6CisgICAgICAgIG1fZnJhbWVSYXRl
ID0gV1RGTW92ZShjb25zdHJhaW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRpYUNv
bnN0cmFpbnRUeXBlOjpWb2x1bWU6CisgICAgICAgIG1fdm9sdW1lID0gV1RGTW92ZShjb25zdHJh
aW50KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Oldp
ZHRoOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6SGVpZ2h0OgorICAgIGNhc2UgTWVk
aWFDb25zdHJhaW50VHlwZTo6U2FtcGxlUmF0ZToKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5
cGU6OlNhbXBsZVNpemU6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpFY2hvQ2FuY2Vs
bGF0aW9uOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RmFjaW5nTW9kZToKKyAgICBj
YXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkRldmljZUlkOgorICAgIGNhc2UgTWVkaWFDb25zdHJh
aW50VHlwZTo6R3JvdXBJZDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlVua25vd246
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3ZvaWQgTWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA6OnNldChNZWRpYUNvbnN0cmFpbnRU
eXBlIGNvbnN0cmFpbnRUeXBlLCBPcHRpb25hbDxCb29sZWFuQ29uc3RyYWludD4mJiBjb25zdHJh
aW50KQoreworICAgIHN3aXRjaCAoY29uc3RyYWludFR5cGUpIHsKKyAgICBjYXNlIE1lZGlhQ29u
c3RyYWludFR5cGU6OkVjaG9DYW5jZWxsYXRpb246CisgICAgICAgIG1fZWNob0NhbmNlbGxhdGlv
biA9IFdURk1vdmUoY29uc3RyYWludCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRp
YUNvbnN0cmFpbnRUeXBlOjpXaWR0aDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Okhl
aWdodDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGU6CisgICAgY2Fz
ZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVTaXplOgorICAgIGNhc2UgTWVkaWFDb25zdHJh
aW50VHlwZTo6QXNwZWN0UmF0aW86CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGcmFt
ZVJhdGU6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpWb2x1bWU6CisgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdNb2RlOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50
VHlwZTo6RGV2aWNlSWQ6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpHcm91cElkOgor
ICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6VW5rbm93bjoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBNZWRpYVRyYWNr
Q29uc3RyYWludFNldE1hcDo6c2V0KE1lZGlhQ29uc3RyYWludFR5cGUgY29uc3RyYWludFR5cGUs
IE9wdGlvbmFsPFN0cmluZ0NvbnN0cmFpbnQ+JiYgY29uc3RyYWludCkKK3sKKyAgICBzd2l0Y2gg
KGNvbnN0cmFpbnRUeXBlKSB7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdN
b2RlOgorICAgICAgICBtX2ZhY2luZ01vZGUgPSBXVEZNb3ZlKGNvbnN0cmFpbnQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkRldmljZUlkOgorICAgICAg
ICBtX2RldmljZUlkID0gV1RGTW92ZShjb25zdHJhaW50KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpHcm91cElkOgorICAgICAgICBtX2dyb3VwSWQgPSBX
VEZNb3ZlKGNvbnN0cmFpbnQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFDb25z
dHJhaW50VHlwZTo6V2lkdGg6CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQ6
CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVSYXRlOgorICAgIGNhc2UgTWVk
aWFDb25zdHJhaW50VHlwZTo6U2FtcGxlU2l6ZToKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5
cGU6OkFzcGVjdFJhdGlvOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RnJhbWVSYXRl
OgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6Vm9sdW1lOgorICAgIGNhc2UgTWVkaWFD
b25zdHJhaW50VHlwZTo6RWNob0NhbmNlbGxhdGlvbjoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OlVua25vd246CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhQ29uc3RyYWludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmgJKHJldmlzaW9uIDIwNjQzNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsODMgKzM4LDU2IEBACiAjaW5jbHVkZSA8Y3N0ZGxpYj4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgTWVkaWFDb25zdHJhaW50IDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFDb25zdHJh
aW50PiB7CitjbGFzcyBNZWRpYUNvbnN0cmFpbnQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
TWVkaWFDb25zdHJhaW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBlbnVtIGNsYXNz
IENvbnN0cmFpbnRUeXBlIHsgRXhhY3RDb25zdHJhaW50LCBJZGVhbENvbnN0cmFpbnQsIE1pbkNv
bnN0cmFpbnQsIE1heENvbnN0cmFpbnQgfTsKKyAgICBlbnVtIGNsYXNzIERhdGFUeXBlIHsgTm9u
ZSwgSW50ZWdlciwgRG91YmxlLCBCb29sZWFuLCBTdHJpbmcgfTsKIAogICAgIHZpcnR1YWwgfk1l
ZGlhQ29uc3RyYWludCgpIHsgfTsKIAotICAgIHZpcnR1YWwgUmVmPE1lZGlhQ29uc3RyYWludD4g
Y29weSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9v
bCBnZXRNaW4oaW50JikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdmlydHVhbCBib29sIGdldE1heChpbnQmKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXhhY3QoaW50Jikg
Y29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBib29sIGdldElkZWFsKGludCYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCB2YWxpZEZvclJhbmdlKGludCwgaW50KSBjb25z
dCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGlu
dCBmaW5kKHN0ZDo6ZnVuY3Rpb248Ym9vbChDb25zdHJhaW50VHlwZSwgaW50KT4pIGNvbnN0IHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBkb3VibGUgZml0
bmVzc0Rpc3RhbmNlKGludCwgaW50KSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1
cm4gMDsgfQotCi0gICAgdmlydHVhbCBib29sIGdldE1pbihkb3VibGUmKSBjb25zdCB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0TWF4
KGRvdWJsZSYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBnZXRFeGFjdChkb3VibGUmKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0SWRlYWwoZG91Ymxl
JikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIHZhbGlkRm9yUmFuZ2UoZG91YmxlLCBkb3VibGUpIGNvbnN0IHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgZG91YmxlIGZpbmQoc3Rk
OjpmdW5jdGlvbjxib29sKENvbnN0cmFpbnRUeXBlLCBkb3VibGUpPikgY29uc3QgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBmaXRuZXNzRGlz
dGFuY2UoZG91YmxlLCBkb3VibGUpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biAwOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0TWluKGJvb2wmKSBjb25zdCB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0TWF4KGJv
b2wmKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgZ2V0RXhhY3QoYm9vbCYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRJZGVhbChib29sJikgY29uc3Qg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBkb3Vi
bGUgZml0bmVzc0Rpc3RhbmNlKGJvb2wpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiAwOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0TWluKFZlY3RvcjxTdHJpbmc+JikgY29u
c3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBi
b29sIGdldE1heChWZWN0b3I8U3RyaW5nPiYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRFeGFjdChWZWN0b3I8U3RyaW5n
PiYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBnZXRJZGVhbChWZWN0b3I8U3RyaW5nPiYpIGNvbnN0IHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBmaW5k
KHN0ZDo6ZnVuY3Rpb248Ym9vbChDb25zdHJhaW50VHlwZSwgY29uc3QgU3RyaW5nJik+KSBjb25z
dCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQotCi0gICAg
dmlydHVhbCBkb3VibGUgZml0bmVzc0Rpc3RhbmNlKGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBkb3VibGUgZml0bmVz
c0Rpc3RhbmNlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBtZXJnZShjb25zdCBNZWRpYUNvbnN0cmFpbnQm
KSB7IH0KKworICAgIGJvb2wgaXNJbnQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFUeXBlID09IERh
dGFUeXBlOjpJbnRlZ2VyOyB9CisgICAgYm9vbCBpc0RvdWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YVR5cGUgPT0gRGF0YVR5cGU6OkRvdWJsZTsgfQorICAgIGJvb2wgaXNCb29sZWFuKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhVHlwZSA9PSBEYXRhVHlwZTo6Qm9vbGVhbjsgfQorICAgIGJvb2wg
aXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2RhdGFUeXBlID09IERhdGFUeXBlOjpTdHJpbmc7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCBtZXJnZShjb25zdCBNZWRpYUNvbnN0cmFpbnQmKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0KLSAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBEYXRhVHlwZSBkYXRhVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YVR5cGU7IH0KKyAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0cmFpbnRU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJhaW50VHlwZTsgfQogICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhw
bGljaXQgTWVkaWFDb25zdHJhaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50
VHlwZSB0eXBlKQorICAgIGV4cGxpY2l0IE1lZGlhQ29uc3RyYWludChjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgY29uc3RyYWludFR5cGUsIERhdGFUeXBlIGRh
dGFUeXBlKQogICAgICAgICA6IG1fbmFtZShuYW1lKQotICAgICAgICAsIG1fdHlwZSh0eXBlKQor
ICAgICAgICAsIG1fY29uc3RyYWludFR5cGUoY29uc3RyYWludFR5cGUpCisgICAgICAgICwgbV9k
YXRhVHlwZShkYXRhVHlwZSkKICAgICB7CiAgICAgfQogCisKIHByaXZhdGU6Ci0gICAgU3RyaW5n
IG1fbmFtZTsKLSAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIG1fdHlwZTsKKyAgICBBdG9taWNTdHJp
bmcgbV9uYW1lOworICAgIE1lZGlhQ29uc3RyYWludFR5cGUgbV9jb25zdHJhaW50VHlwZTsKKyAg
ICBEYXRhVHlwZSBtX2RhdGFUeXBlOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgVmFsdWVUeXBlPgog
Y2xhc3MgTnVtZXJpY0NvbnN0cmFpbnQgOiBwdWJsaWMgTWVkaWFDb25zdHJhaW50IHsKIHB1Ymxp
YzoKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhbV9taW4gJiYg
IW1fbWF4ICYmICFtX2V4YWN0ICYmICFtX2lkZWFsOyB9Ci0gICAgYm9vbCBpc01hbmRhdG9yeSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fbWluIHx8IG1fbWF4IHx8IG1fZXhhY3Q7IH0KLQog
ICAgIHZvaWQgc2V0TWluKFZhbHVlVHlwZSB2YWx1ZSkgeyBtX21pbiA9IHZhbHVlOyB9CiAgICAg
dm9pZCBzZXRNYXgoVmFsdWVUeXBlIHZhbHVlKSB7IG1fbWF4ID0gdmFsdWU7IH0KICAgICB2b2lk
IHNldEV4YWN0KFZhbHVlVHlwZSB2YWx1ZSkgeyBtX2V4YWN0ID0gdmFsdWU7IH0KICAgICB2b2lk
IHNldElkZWFsKFZhbHVlVHlwZSB2YWx1ZSkgeyBtX2lkZWFsID0gdmFsdWU7IH0KIAotICAgIGJv
b2wgZ2V0TWluKFZhbHVlVHlwZSYgbWluKSBjb25zdCBmaW5hbCB7CisgICAgYm9vbCBnZXRNaW4o
VmFsdWVUeXBlJiBtaW4pIGNvbnN0CisgICAgewogICAgICAgICBpZiAoIW1fbWluKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMjIsNyArOTUsOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgZ2V0TWF4KFZhbHVlVHlwZSYgbWF4KSBj
b25zdCBmaW5hbCB7CisgICAgYm9vbCBnZXRNYXgoVmFsdWVUeXBlJiBtYXgpIGNvbnN0CisgICAg
ewogICAgICAgICBpZiAoIW1fbWF4KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0x
MzAsNyArMTA0LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICBib29sIGdldEV4YWN0KFZhbHVlVHlwZSYgZXhhY3QpIGNvbnN0IGZpbmFsIHsKKyAgICBib29s
IGdldEV4YWN0KFZhbHVlVHlwZSYgZXhhY3QpIGNvbnN0CisgICAgewogICAgICAgICBpZiAoIW1f
ZXhhY3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEzOCw3ICsxMTMsOCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgZ2V0SWRlYWwo
VmFsdWVUeXBlJiBpZGVhbCkgY29uc3QgZmluYWwgeworICAgIGJvb2wgZ2V0SWRlYWwoVmFsdWVU
eXBlJiBpZGVhbCkgY29uc3QKKyAgICB7CiAgICAgICAgIGlmICghbV9pZGVhbCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTU0LDcgKzEzMCw4IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHN0ZDo6YWJzKGEgLSBiKSA8PSBlcHNpbG9uOwogICAgIH0KIAotICAgIGRvdWJsZSBm
aXRuZXNzRGlzdGFuY2UoVmFsdWVUeXBlIHJhbmdlTWluLCBWYWx1ZVR5cGUgcmFuZ2VNYXgpIGNv
bnN0IGZpbmFsIHsKKyAgICBkb3VibGUgZml0bmVzc0Rpc3RhbmNlKFZhbHVlVHlwZSByYW5nZU1p
biwgVmFsdWVUeXBlIHJhbmdlTWF4KSBjb25zdAorICAgIHsKICAgICAgICAgLy8gaHR0cHM6Ly93
M2MuZ2l0aHViLmlvL21lZGlhY2FwdHVyZS1tYWluLyNkZm4tYXBwbHljb25zdHJhaW50cwogICAg
ICAgICAvLyAxLiBJZiB0aGUgY29uc3RyYWludCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBicm93
c2VyLCB0aGUgZml0bmVzcyBkaXN0YW5jZSBpcyAwLgogICAgICAgICBpZiAoaXNFbXB0eSgpKQpA
QCAtMTg5LDMyICsxNjYsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxk
b3VibGU+KHN0ZDo6YWJzKGlkZWFsIC0gbV9pZGVhbC52YWx1ZSgpKSkgLyBzdGQ6Om1heChzdGQ6
OmFicyhpZGVhbCksIHN0ZDo6YWJzKG1faWRlYWwudmFsdWUoKSkpOwogICAgIH0KIAotICAgIHZv
aWQgbWVyZ2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBvdGhlcikgZmluYWwgewotICAgICAgICBp
ZiAob3RoZXIuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFZhbHVl
VHlwZSB2YWx1ZTsKLSAgICAgICAgaWYgKG90aGVyLmdldEV4YWN0KHZhbHVlKSkKLSAgICAgICAg
ICAgIG1fZXhhY3QgPSB2YWx1ZTsKLQotICAgICAgICBpZiAob3RoZXIuZ2V0TWluKHZhbHVlKSkK
LSAgICAgICAgICAgIG1fbWluID0gdmFsdWU7Ci0KLSAgICAgICAgaWYgKG90aGVyLmdldE1heCh2
YWx1ZSkpCi0gICAgICAgICAgICBtX21heCA9IHZhbHVlOwotCi0gICAgICAgIC8vIGh0dHBzOi8v
dzNjLmdpdGh1Yi5pby9tZWRpYWNhcHR1cmUtbWFpbi8jY29uc3RyYWluYWJsZS1pbnRlcmZhY2UK
LSAgICAgICAgLy8gV2hlbiBwcm9jZXNzaW5nIGFkdmFuY2VkIGNvbnN0cmFpbnRzOgotICAgICAg
ICAvLyAgIC4uLiB0aGUgVXNlciBBZ2VudCBtdXN0IGF0dGVtcHQgdG8gYXBwbHksIGluZGl2aWR1
YWxseSwgYW55ICdpZGVhbCcgY29uc3RyYWludHMgb3IKLSAgICAgICAgLy8gICBhIGNvbnN0cmFp
bnQgZ2l2ZW4gYXMgYSBiYXJlIHZhbHVlIGZvciB0aGUgcHJvcGVydHkuIE9mIHRoZXNlIHByb3Bl
cnRpZXMsIGl0IG11c3QKLSAgICAgICAgLy8gICBzYXRpc2Z5IHRoZSBsYXJnZXN0IG51bWJlciB0
aGF0IGl0IGNhbiwgaW4gYW55IG9yZGVyLgotICAgICAgICBpZiAob3RoZXIuZ2V0SWRlYWwodmFs
dWUpKSB7Ci0gICAgICAgICAgICBpZiAoIW1faWRlYWwgfHwgdmFsdWUgPiBtX2lkZWFsLnZhbHVl
KCkpCi0gICAgICAgICAgICAgICAgbV9pZGVhbCA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgYm9vbCB2YWxpZEZvclJhbmdlKFZhbHVlVHlwZSByYW5nZU1pbiwgVmFsdWVUeXBlIHJh
bmdlTWF4KSBjb25zdCBmaW5hbCB7CisgICAgYm9vbCB2YWxpZEZvclJhbmdlKFZhbHVlVHlwZSBy
YW5nZU1pbiwgVmFsdWVUeXBlIHJhbmdlTWF4KSBjb25zdAorICAgIHsKICAgICAgICAgaWYgKGlz
RW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjQyLDI3ICsxOTUsNTYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBWYWx1ZVR5cGUg
ZmluZChzdGQ6OmZ1bmN0aW9uPGJvb2woQ29uc3RyYWludFR5cGUsIFZhbHVlVHlwZSk+IGZ1bmN0
aW9uKSBjb25zdCBmaW5hbCB7Ci0gICAgICAgIGlmIChtX21pbiAmJiBmdW5jdGlvbihDb25zdHJh
aW50VHlwZTo6TWluQ29uc3RyYWludCwgbV9taW4udmFsdWUoKSkpCisgICAgVmFsdWVUeXBlIGZp
bmQoc3RkOjpmdW5jdGlvbjxib29sKFZhbHVlVHlwZSk+IGZ1bmN0aW9uKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKG1fbWluICYmIGZ1bmN0aW9uKG1fbWluLnZhbHVlKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIG1fbWluLnZhbHVlKCk7CiAKLSAgICAgICAgaWYgKG1fbWF4ICYmIGZ1bmN0aW9u
KENvbnN0cmFpbnRUeXBlOjpNYXhDb25zdHJhaW50LCBtX21heC52YWx1ZSgpKSkKKyAgICAgICAg
aWYgKG1fbWF4ICYmIGZ1bmN0aW9uKG1fbWF4LnZhbHVlKCkpKQogICAgICAgICAgICAgcmV0dXJu
IG1fbWF4LnZhbHVlKCk7CiAKLSAgICAgICAgaWYgKG1fZXhhY3QgJiYgZnVuY3Rpb24oQ29uc3Ry
YWludFR5cGU6OkV4YWN0Q29uc3RyYWludCwgbV9leGFjdC52YWx1ZSgpKSkKKyAgICAgICAgaWYg
KG1fZXhhY3QgJiYgZnVuY3Rpb24obV9leGFjdC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVy
biBtX2V4YWN0LnZhbHVlKCk7CiAKLSAgICAgICAgaWYgKG1faWRlYWwgJiYgZnVuY3Rpb24oQ29u
c3RyYWludFR5cGU6OklkZWFsQ29uc3RyYWludCwgbV9pZGVhbC52YWx1ZSgpKSkKKyAgICAgICAg
aWYgKG1faWRlYWwgJiYgZnVuY3Rpb24obV9pZGVhbC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJl
dHVybiBtX2lkZWFsLnZhbHVlKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAor
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1fbWluICYmICFt
X21heCAmJiAhbV9leGFjdCAmJiAhbV9pZGVhbDsgfQorICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX21pbiB8fCBtX21heCB8fCBtX2V4YWN0OyB9CiAKIHBy
b3RlY3RlZDoKLSAgICBleHBsaWNpdCBOdW1lcmljQ29uc3RyYWludChjb25zdCBTdHJpbmcmIG5h
bWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSkKLSAgICAgICAgOiBNZWRpYUNvbnN0cmFpbnQo
bmFtZSwgdHlwZSkKKyAgICBleHBsaWNpdCBOdW1lcmljQ29uc3RyYWludChjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSwgRGF0YVR5cGUgZGF0YVR5cGUp
CisgICAgICAgIDogTWVkaWFDb25zdHJhaW50KG5hbWUsIHR5cGUsIGRhdGFUeXBlKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGlubmVyTWVyZ2UoY29uc3QgTnVtZXJpY0NvbnN0cmFpbnQmIG90
aGVyKQogICAgIHsKKyAgICAgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBWYWx1ZVR5cGUgdmFsdWU7CisgICAgICAgIGlmIChvdGhlci5nZXRF
eGFjdCh2YWx1ZSkpCisgICAgICAgICAgICBtX2V4YWN0ID0gdmFsdWU7CisKKyAgICAgICAgaWYg
KG90aGVyLmdldE1pbih2YWx1ZSkpCisgICAgICAgICAgICBtX21pbiA9IHZhbHVlOworCisgICAg
ICAgIGlmIChvdGhlci5nZXRNYXgodmFsdWUpKQorICAgICAgICAgICAgbV9tYXggPSB2YWx1ZTsK
KworICAgICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vbWVkaWFjYXB0dXJlLW1haW4vI2Nv
bnN0cmFpbmFibGUtaW50ZXJmYWNlCisgICAgICAgIC8vIFdoZW4gcHJvY2Vzc2luZyBhZHZhbmNl
ZCBjb25zdHJhaW50czoKKyAgICAgICAgLy8gICAuLi4gdGhlIFVzZXIgQWdlbnQgbXVzdCBhdHRl
bXB0IHRvIGFwcGx5LCBpbmRpdmlkdWFsbHksIGFueSAnaWRlYWwnIGNvbnN0cmFpbnRzIG9yCisg
ICAgICAgIC8vICAgYSBjb25zdHJhaW50IGdpdmVuIGFzIGEgYmFyZSB2YWx1ZSBmb3IgdGhlIHBy
b3BlcnR5LiBPZiB0aGVzZSBwcm9wZXJ0aWVzLCBpdCBtdXN0CisgICAgICAgIC8vICAgc2F0aXNm
eSB0aGUgbGFyZ2VzdCBudW1iZXIgdGhhdCBpdCBjYW4sIGluIGFueSBvcmRlci4KKyAgICAgICAg
aWYgKG90aGVyLmdldElkZWFsKHZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFtX2lkZWFsIHx8
IHZhbHVlID4gbV9pZGVhbC52YWx1ZSgpKQorICAgICAgICAgICAgICAgIG1faWRlYWwgPSB2YWx1
ZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIE9wdGlvbmFsPFZhbHVlVHlwZT4gbV9taW47CkBA
IC0yNzMsNDYgKzI1NSw0NSBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIEludENvbnN0cmFpbnQgZmlu
YWwgOiBwdWJsaWMgTnVtZXJpY0NvbnN0cmFpbnQ8aW50PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxJbnRDb25zdHJhaW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0
cmFpbnRUeXBlIHR5cGUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW50Q29uc3RyYWludChuYW1l
LCB0eXBlKSk7IH0KLQotICAgIFJlZjxNZWRpYUNvbnN0cmFpbnQ+IGNvcHkoKSBjb25zdCBmaW5h
bDsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBJbnRDb25zdHJhaW50KGNvbnN0IFN0cmluZyYg
bmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKQotICAgICAgICA6IE51bWVyaWNDb25zdHJh
aW50PGludD4obmFtZSwgdHlwZSkKKyAgICBleHBsaWNpdCBJbnRDb25zdHJhaW50KGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKQorICAgICAgICA6IE51
bWVyaWNDb25zdHJhaW50PGludD4obmFtZSwgdHlwZSwgRGF0YVR5cGU6OkludGVnZXIpCiAgICAg
ewogICAgIH0KKworICAgIHZvaWQgbWVyZ2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBvdGhlcikg
ZmluYWwgeworICAgICAgICBBU1NFUlQob3RoZXIuaXNJbnQoKSk7CisgICAgICAgIE51bWVyaWND
b25zdHJhaW50Ojppbm5lck1lcmdlKGRvd25jYXN0PGNvbnN0IEludENvbnN0cmFpbnQ+KG90aGVy
KSk7CisgICAgfQogfTsKIAogY2xhc3MgRG91YmxlQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBO
dW1lcmljQ29uc3RyYWludDxkb3VibGU+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERvdWJs
ZUNvbnN0cmFpbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5
cGUgdHlwZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb3VibGVDb25zdHJhaW50KG5hbWUsIHR5
cGUpKTsgfQotCi0gICAgUmVmPE1lZGlhQ29uc3RyYWludD4gY29weSgpIGNvbnN0IGZpbmFsOwot
Ci1wcml2YXRlOgotICAgIGV4cGxpY2l0IERvdWJsZUNvbnN0cmFpbnQoY29uc3QgU3RyaW5nJiBu
YW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpCi0gICAgICAgIDogTnVtZXJpY0NvbnN0cmFp
bnQ8ZG91YmxlPihuYW1lLCB0eXBlKQorICAgIGV4cGxpY2l0IERvdWJsZUNvbnN0cmFpbnQoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpCisgICAgICAg
IDogTnVtZXJpY0NvbnN0cmFpbnQ8ZG91YmxlPihuYW1lLCB0eXBlLCBEYXRhVHlwZTo6RG91Ymxl
KQogICAgIHsKICAgICB9CisKKyAgICB2b2lkIG1lcmdlKGNvbnN0IE1lZGlhQ29uc3RyYWludCYg
b3RoZXIpIGZpbmFsIHsKKyAgICAgICAgQVNTRVJUKG90aGVyLmlzRG91YmxlKCkpOworICAgICAg
ICBOdW1lcmljQ29uc3RyYWludDo6aW5uZXJNZXJnZShkb3duY2FzdDxEb3VibGVDb25zdHJhaW50
PihvdGhlcikpOworICAgIH0KIH07CiAKIGNsYXNzIEJvb2xlYW5Db25zdHJhaW50IGZpbmFsIDog
cHVibGljIE1lZGlhQ29uc3RyYWludCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxCb29sZWFu
Q29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlw
ZSB0eXBlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEJvb2xlYW5Db25zdHJhaW50KG5hbWUsIHR5
cGUpKTsgfQotCi0gICAgUmVmPE1lZGlhQ29uc3RyYWludD4gY29weSgpIGNvbnN0IGZpbmFsOwor
ICAgIGV4cGxpY2l0IEJvb2xlYW5Db25zdHJhaW50KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
TWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKQorICAgICAgICA6IE1lZGlhQ29uc3RyYWludChuYW1l
LCB0eXBlLCBEYXRhVHlwZTo6Qm9vbGVhbikKKyAgICB7CisgICAgfQogCiAgICAgdm9pZCBzZXRF
eGFjdChib29sIHZhbHVlKSB7IG1fZXhhY3QgPSB2YWx1ZTsgfQogICAgIHZvaWQgc2V0SWRlYWwo
Ym9vbCB2YWx1ZSkgeyBtX2lkZWFsID0gdmFsdWU7IH0KIAotICAgIGJvb2wgZ2V0RXhhY3QoYm9v
bCYpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZ2V0SWRlYWwoYm9vbCYpIGNvbnN0IGZpbmFsOwot
Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIW1fZXhhY3QgJiYgIW1f
aWRlYWw7IH07Ci0gICAgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJv
b2wobV9leGFjdCk7IH0KKyAgICBib29sIGdldEV4YWN0KGJvb2wmKSBjb25zdDsKKyAgICBib29s
IGdldElkZWFsKGJvb2wmKSBjb25zdDsKIAotICAgIGRvdWJsZSBmaXRuZXNzRGlzdGFuY2UoYm9v
bCB2YWx1ZSkgY29uc3QgZmluYWwgeworICAgIGRvdWJsZSBmaXRuZXNzRGlzdGFuY2UoYm9vbCB2
YWx1ZSkgY29uc3QKKyAgICB7CiAgICAgICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9tZWRp
YWNhcHR1cmUtbWFpbi8jZGZuLWFwcGx5Y29uc3RyYWludHMKICAgICAgICAgLy8gMS4gSWYgdGhl
IGNvbnN0cmFpbnQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlciwgdGhlIGZpdG5lc3Mg
ZGlzdGFuY2UgaXMgMC4KICAgICAgICAgaWYgKGlzRW1wdHkoKSkKQEAgLTMzNSw5MiArMzE2LDIx
NiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBtZXJnZShjb25zdCBNZWRpYUNvbnN0cmFp
bnQmIG90aGVyKSBmaW5hbCB7Ci0gICAgICAgIGlmIChvdGhlci5pc0VtcHR5KCkpCisgICAgICAg
IEFTU0VSVChvdGhlci5pc0Jvb2xlYW4oKSk7CisgICAgICAgIGNvbnN0IEJvb2xlYW5Db25zdHJh
aW50JiB0eXBlZE90aGVyID0gZG93bmNhc3Q8Qm9vbGVhbkNvbnN0cmFpbnQ+KG90aGVyKTsKKwor
ICAgICAgICBpZiAodHlwZWRPdGhlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgYm9vbCB2YWx1ZTsKLSAgICAgICAgaWYgKG90aGVyLmdldEV4YWN0KHZhbHVlKSkK
KyAgICAgICAgaWYgKHR5cGVkT3RoZXIuZ2V0RXhhY3QodmFsdWUpKQogICAgICAgICAgICAgbV9l
eGFjdCA9IHZhbHVlOwogCi0gICAgICAgIGlmIChvdGhlci5nZXRJZGVhbCh2YWx1ZSkpIHsKKyAg
ICAgICAgaWYgKHR5cGVkT3RoZXIuZ2V0SWRlYWwodmFsdWUpKSB7CiAgICAgICAgICAgICBpZiAo
IW1faWRlYWwgfHwgKHZhbHVlICYmICFtX2lkZWFsLnZhbHVlKCkpKQogICAgICAgICAgICAgICAg
IG1faWRlYWwgPSB2YWx1ZTsKICAgICAgICAgfQogICAgIH0KIAotcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBCb29sZWFuQ29uc3RyYWludChjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWlu
dFR5cGUgdHlwZSkKLSAgICAgICAgOiBNZWRpYUNvbnN0cmFpbnQobmFtZSwgdHlwZSkKLSAgICB7
Ci0gICAgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICFtX2V4YWN0
ICYmICFtX2lkZWFsOyB9OworICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBib29sKG1fZXhhY3QpOyB9CiAKK3ByaXZhdGU6CiAgICAgT3B0aW9uYWw8Ym9vbD4gbV9l
eGFjdDsKICAgICBPcHRpb25hbDxib29sPiBtX2lkZWFsOwogfTsKIAogY2xhc3MgU3RyaW5nQ29u
c3RyYWludCBmaW5hbCA6IHB1YmxpYyBNZWRpYUNvbnN0cmFpbnQgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8U3RyaW5nQ29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgTWVk
aWFDb25zdHJhaW50VHlwZSB0eXBlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0cmluZ0NvbnN0
cmFpbnQobmFtZSwgdHlwZSkpOyB9Ci0KLSAgICBSZWY8TWVkaWFDb25zdHJhaW50PiBjb3B5KCkg
Y29uc3QgZmluYWw7CisgICAgZXhwbGljaXQgU3RyaW5nQ29uc3RyYWludChjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSkKKyAgICAgICAgOiBNZWRpYUNv
bnN0cmFpbnQobmFtZSwgdHlwZSwgRGF0YVR5cGU6OlN0cmluZykKKyAgICB7CisgICAgfQogCiAg
ICAgdm9pZCBzZXRFeGFjdChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZEV4YWN0KGNv
bnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0SWRlYWwoY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCBhcHBlbmRJZGVhbChjb25zdCBTdHJpbmcmKTsKIAotICAgIGJvb2wgZ2V0RXhhY3QoVmVjdG9y
PFN0cmluZz4mKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGdldElkZWFsKFZlY3RvcjxTdHJpbmc+
JikgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2V4YWN0LmlzRW1wdHkoKSAmJiBtX2lkZWFsLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaXNN
YW5kYXRvcnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhbV9leGFjdC5pc0VtcHR5KCk7IH0KKyAg
ICBib29sIGdldEV4YWN0KFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7CisgICAgYm9vbCBnZXRJZGVh
bChWZWN0b3I8U3RyaW5nPiYpIGNvbnN0OwogCi0gICAgZG91YmxlIGZpdG5lc3NEaXN0YW5jZShj
b25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKLSAgICBkb3VibGUgZml0bmVzc0Rpc3RhbmNlKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JikgY29uc3QgZmluYWw7CisgICAgZG91YmxlIGZpdG5lc3NEaXN0
YW5jZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBkb3VibGUgZml0bmVzc0Rpc3RhbmNlKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7CiAKLSAgICBjb25zdCBTdHJpbmcmIGZpbmQoc3Rk
OjpmdW5jdGlvbjxib29sKENvbnN0cmFpbnRUeXBlLCBjb25zdCBTdHJpbmcmKT4pIGNvbnN0IGZp
bmFsOworICAgIGNvbnN0IFN0cmluZyYgZmluZChzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgU3Ry
aW5nJik+KSBjb25zdDsKICAgICB2b2lkIG1lcmdlKGNvbnN0IE1lZGlhQ29uc3RyYWludCYpIGZp
bmFsOwogCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFN0cmluZ0NvbnN0cmFpbnQoY29uc3QgU3Ry
aW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpCi0gICAgICAgIDogTWVkaWFDb25z
dHJhaW50KG5hbWUsIHR5cGUpCi0gICAgewotICAgIH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2V4YWN0LmlzRW1wdHkoKSAmJiBtX2lkZWFsLmlzRW1wdHkoKTsg
fQorICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhbV9leGFjdC5p
c0VtcHR5KCk7IH0KIAorcHJpdmF0ZToKICAgICBWZWN0b3I8U3RyaW5nPiBtX2V4YWN0OwogICAg
IFZlY3RvcjxTdHJpbmc+IG1faWRlYWw7CiB9OwogCiBjbGFzcyBVbmtub3duQ29uc3RyYWludCBm
aW5hbCA6IHB1YmxpYyBNZWRpYUNvbnN0cmFpbnQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
VW5rbm93bkNvbnN0cmFpbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3Ry
YWludFR5cGUgdHlwZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmtub3duQ29uc3RyYWludChu
YW1lLCB0eXBlKSk7IH0KKyAgICBleHBsaWNpdCBVbmtub3duQ29uc3RyYWludChjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIE1lZGlhQ29uc3RyYWludFR5cGUgdHlwZSkKKyAgICAgICAgOiBNZWRp
YUNvbnN0cmFpbnQobmFtZSwgdHlwZSwgRGF0YVR5cGU6Ok5vbmUpCisgICAgeworICAgIH0KIAor
cHJpdmF0ZToKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
CiAgICAgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdm9pZCBtZXJnZShjb25zdCBNZWRpYUNvbnN0cmFpbnQmKSBmaW5hbCB7IH0KK307CisKK2Ns
YXNzIE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwIHsKK3B1YmxpYzoKKyAgICB2b2lkIGZvckVh
Y2goc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IE1lZGlhQ29uc3RyYWludCYpPikgY29uc3Q7Cisg
ICAgdm9pZCBmaWx0ZXIoc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IE1lZGlhQ29uc3RyYWludCYp
PikgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldChNZWRp
YUNvbnN0cmFpbnRUeXBlLCBPcHRpb25hbDxJbnRDb25zdHJhaW50PiYmKTsKKyAgICB2b2lkIHNl
dChNZWRpYUNvbnN0cmFpbnRUeXBlLCBPcHRpb25hbDxEb3VibGVDb25zdHJhaW50PiYmKTsKKyAg
ICB2b2lkIHNldChNZWRpYUNvbnN0cmFpbnRUeXBlLCBPcHRpb25hbDxCb29sZWFuQ29uc3RyYWlu
dD4mJik7CisgICAgdm9pZCBzZXQoTWVkaWFDb25zdHJhaW50VHlwZSwgT3B0aW9uYWw8U3RyaW5n
Q29uc3RyYWludD4mJik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgVW5rbm93bkNvbnN0cmFp
bnQoY29uc3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpCi0gICAgICAg
IDogTWVkaWFDb25zdHJhaW50KG5hbWUsIHR5cGUpCi0gICAgewotICAgIH0KKyAgICBPcHRpb25h
bDxJbnRDb25zdHJhaW50PiBtX3dpZHRoOworICAgIE9wdGlvbmFsPEludENvbnN0cmFpbnQ+IG1f
aGVpZ2h0OworICAgIE9wdGlvbmFsPEludENvbnN0cmFpbnQ+IG1fc2FtcGxlUmF0ZTsKKyAgICBP
cHRpb25hbDxJbnRDb25zdHJhaW50PiBtX3NhbXBsZVNpemU7CisKKyAgICBPcHRpb25hbDxEb3Vi
bGVDb25zdHJhaW50PiBtX2FzcGVjdFJhdGlvOworICAgIE9wdGlvbmFsPERvdWJsZUNvbnN0cmFp
bnQ+IG1fZnJhbWVSYXRlOworICAgIE9wdGlvbmFsPERvdWJsZUNvbnN0cmFpbnQ+IG1fdm9sdW1l
OworCisgICAgT3B0aW9uYWw8Qm9vbGVhbkNvbnN0cmFpbnQ+IG1fZWNob0NhbmNlbGxhdGlvbjsK
KworICAgIE9wdGlvbmFsPFN0cmluZ0NvbnN0cmFpbnQ+IG1fZmFjaW5nTW9kZTsKKyAgICBPcHRp
b25hbDxTdHJpbmdDb25zdHJhaW50PiBtX2RldmljZUlkOworICAgIE9wdGlvbmFsPFN0cmluZ0Nv
bnN0cmFpbnQ+IG1fZ3JvdXBJZDsKIH07CiAKLXVzaW5nIE1lZGlhVHJhY2tDb25zdHJhaW50U2V0
TWFwID0gSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYUNvbnN0cmFpbnQ+PjsKLQogY2xhc3Mg
RmxhdHRlbmVkQ29uc3RyYWludCB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PE1lZGlhQ29uc3RyYWludD4+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKIAogICAg
IHZvaWQgc2V0KGNvbnN0IE1lZGlhQ29uc3RyYWludCYpOwogICAgIHZvaWQgbWVyZ2UoY29uc3Qg
TWVkaWFDb25zdHJhaW50Jik7Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9j
b25zdHJhaW50cy5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCBNZWRpYUNvbnN0
cmFpbnQmKTsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLmlz
RW1wdHkoKTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAg
aXRlcmF0b3IoY29uc3QgRmxhdHRlbmVkQ29uc3RyYWludCogY29uc3RyYWludCwgc2l6ZV90IGlu
ZGV4KQorICAgICAgICAgICAgOiBtX2NvbnN0cmFpbnQoY29uc3RyYWludCkKKyAgICAgICAgICAg
ICwgbV9pbmRleChpbmRleCkKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICAsIG1fZ2VuZXJh
dGlvbihjb25zdHJhaW50LT5tX2dlbmVyYXRpb24pCisjZW5kaWYKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgTWVkaWFDb25zdHJhaW50JiBvcGVyYXRvciooKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb25zdHJhaW50LT5tX3ZhcmlhbnRzLmF0KG1faW5k
ZXgpLmNvbnN0cmFpbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRv
cisrKCkKKyAgICAgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIEFTU0VSVChtX2dl
bmVyYXRpb24gPT0gbV9jb25zdHJhaW50LT5tX2dlbmVyYXRpb24pOworI2VuZGlmCisgICAgICAg
ICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
IH0KIAotICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJh
aW50cy5iZWdpbigpOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9jb25zdHJhaW50cy5lbmQoKTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IEZsYXR0
ZW5lZENvbnN0cmFpbnQqIG1fY29uc3RyYWludCB7IG51bGxwdHIgfTsKKyAgICAgICAgc2l6ZV90
IG1faW5kZXggeyAwIH07CisjaWZuZGVmIE5ERUJVRworICAgICAgICBpbnQgbV9nZW5lcmF0aW9u
IHsgMCB9OworI2VuZGlmCisgICAgfTsKKworICAgIGNvbnN0IGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgMCk7IH0KKyAgICBjb25zdCBpdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBtX3ZhcmlhbnRzLnNpemUoKSk7IH0KIAog
cHJpdmF0ZToKKyAgICBjbGFzcyBDb25zdHJhaW50SG9sZGVyIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBDb25zdHJhaW50SG9sZGVyJiBjcmVhdGUoY29uc3QgTWVkaWFDb25zdHJhaW50
JiB2YWx1ZSkgeyByZXR1cm4gKm5ldyBDb25zdHJhaW50SG9sZGVyKHZhbHVlKTsgfQorCisgICAg
ICAgIH5Db25zdHJhaW50SG9sZGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChk
YXRhVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE1lZGlhQ29uc3RyYWludDo6RGF0YVR5cGU6
OkludGVnZXI6CisgICAgICAgICAgICAgICAgZGVsZXRlIG1fdmFsdWUuYXNJbnRlZ2VyOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnQ6OkRh
dGFUeXBlOjpEb3VibGU6CisgICAgICAgICAgICAgICAgZGVsZXRlIG1fdmFsdWUuYXNEb3VibGU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dDo6RGF0YVR5cGU6OkJvb2xlYW46CisgICAgICAgICAgICAgICAgZGVsZXRlIG1fdmFsdWUuYXNC
b29sZWFuOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNZWRpYUNv
bnN0cmFpbnQ6OkRhdGFUeXBlOjpTdHJpbmc6CisgICAgICAgICAgICAgICAgZGVsZXRlIG1fdmFs
dWUuYXNTdHJpbmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1l
ZGlhQ29uc3RyYWludDo6RGF0YVR5cGU6Ok5vbmU6CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyNp
Zm5kZWYgTkRFQlVHCisgICAgICAgICAgICBtX3ZhbHVlLmFzUmF3ID0gcmVpbnRlcnByZXRfY2Fz
dDxNZWRpYUNvbnN0cmFpbnQqPigweGJiYWRiZWVmKTsKKyNlbmRpZgorICAgICAgICB9CiAKLSAg
ICBWZWN0b3I8UmVmUHRyPE1lZGlhQ29uc3RyYWludD4+IG1fY29uc3RyYWludHM7CisgICAgICAg
IE1lZGlhQ29uc3RyYWludCYgY29uc3RyYWludCgpIGNvbnN0IHsgcmV0dXJuICptX3ZhbHVlLmFz
UmF3OyB9CisgICAgICAgIE1lZGlhQ29uc3RyYWludDo6RGF0YVR5cGUgZGF0YVR5cGUoKSBjb25z
dCB7IHJldHVybiBjb25zdHJhaW50KCkuZGF0YVR5cGUoKTsgfQorICAgICAgICBNZWRpYUNvbnN0
cmFpbnRUeXBlIGNvbnN0cmFpbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gY29uc3RyYWludCgpLmNv
bnN0cmFpbnRUeXBlKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGV4cGxpY2l0IENvbnN0
cmFpbnRIb2xkZXIoY29uc3QgTWVkaWFDb25zdHJhaW50JiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoICh2YWx1ZS5kYXRhVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE1l
ZGlhQ29uc3RyYWludDo6RGF0YVR5cGU6OkludGVnZXI6CisgICAgICAgICAgICAgICAgbV92YWx1
ZS5hc0ludGVnZXIgPSBuZXcgSW50Q29uc3RyYWludChkb3duY2FzdDxjb25zdCBJbnRDb25zdHJh
aW50Pih2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnQ6OkRhdGFUeXBlOjpEb3VibGU6CisgICAgICAgICAgICAgICAgbV92YWx1
ZS5hc0RvdWJsZSA9IG5ldyBEb3VibGVDb25zdHJhaW50KGRvd25jYXN0PERvdWJsZUNvbnN0cmFp
bnQ+KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1l
ZGlhQ29uc3RyYWludDo6RGF0YVR5cGU6OkJvb2xlYW46CisgICAgICAgICAgICAgICAgbV92YWx1
ZS5hc0Jvb2xlYW4gPSBuZXcgQm9vbGVhbkNvbnN0cmFpbnQoZG93bmNhc3Q8Qm9vbGVhbkNvbnN0
cmFpbnQ+KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IE1lZGlhQ29uc3RyYWludDo6RGF0YVR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlLmFzU3RyaW5nID0gbmV3IFN0cmluZ0NvbnN0cmFpbnQoZG93bmNhc3Q8U3RyaW5nQ29uc3Ry
YWludD4odmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
TWVkaWFDb25zdHJhaW50OjpEYXRhVHlwZTo6Tm9uZToKKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgTWVkaWFDb25z
dHJhaW50KiBhc1JhdzsKKyAgICAgICAgICAgIEludENvbnN0cmFpbnQqIGFzSW50ZWdlcjsKKyAg
ICAgICAgICAgIERvdWJsZUNvbnN0cmFpbnQqIGFzRG91YmxlOworICAgICAgICAgICAgQm9vbGVh
bkNvbnN0cmFpbnQqIGFzQm9vbGVhbjsKKyAgICAgICAgICAgIFN0cmluZ0NvbnN0cmFpbnQqIGFz
U3RyaW5nOworICAgICAgICB9IG1fdmFsdWU7CisgICAgfTsKKworICAgIFZlY3RvcjxDb25zdHJh
aW50SG9sZGVyPiBtX3ZhcmlhbnRzOworI2lmbmRlZiBOREVCVUcKKyAgICBpbnQgbV9nZW5lcmF0
aW9uIHsgMCB9OworI2VuZGlmCiB9OwogCiBjbGFzcyBNZWRpYUNvbnN0cmFpbnRzIDogcHVibGlj
IFJlZkNvdW50ZWQ8TWVkaWFDb25zdHJhaW50cz4gewpAQCAtNDM3LDYgKzU0MiwxNiBAQCBwcm90
ZWN0ZWQ6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX01FRElBQ09OU1RSQUlOVChDb25zdHJhaW50VHlwZSwgcHJlZGljYXRlKSBcCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNvbnN0cmFpbnRUeXBlKSBcCitz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50JiBjb25zdHJh
aW50KSB7IHJldHVybiBjb25zdHJhaW50LnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTUVESUFDT05TVFJBSU5UKElu
dENvbnN0cmFpbnQsIGlzSW50KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX01FRElBQ09OU1RS
QUlOVChEb3VibGVDb25zdHJhaW50LCBpc0RvdWJsZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19NRURJQUNPTlNUUkFJTlQoU3RyaW5nQ29uc3RyYWludCwgaXNTdHJpbmcoKSkKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfTUVESUFDT05TVFJBSU5UKEJvb2xlYW5Db25zdHJhaW50LCBpc0Jvb2xl
YW4oKSkKKwogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNlbmRpZiAvLyBNZWRp
YUNvbnN0cmFpbnRzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCShyZXZpc2lvbiAyMDY0
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDc1ICsxNTAsODQgQEAgdm9pZCBSZWFs
dGltZU1lZGlhU291cmNlOjpyZXF1ZXN0U3RvcChPYgogICAgIHN0b3AoY2FsbGluZ09ic2VydmVy
KTsKIH0KIAorI2lmIDEKIGRvdWJsZSBSZWFsdGltZU1lZGlhU291cmNlOjpmaXRuZXNzRGlzdGFu
Y2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KQogewogICAgIFJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcyA9ICp0aGlzLT5jYXBhYmlsaXRpZXMo
KTsKIAotICAgIHN3aXRjaCAoY29uc3RyYWludC50eXBlKCkpIHsKKyAgICBzd2l0Y2ggKGNvbnN0
cmFpbnQuY29uc3RyYWludFR5cGUoKSkgewogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6
V2lkdGg6IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNJbnQoKSk7CiAgICAgICAgIGlm
ICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzV2lkdGgoKSkKICAgICAgICAgICAgIHJldHVybiAwOwog
CiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMud2lkdGgoKTsKLSAgICAgICAgcmV0
dXJuIGNvbnN0cmFpbnQuZml0bmVzc0Rpc3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNJbnQsIHJh
bmdlLnJhbmdlTWF4KCkuYXNJbnQpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SW50Q29uc3Ry
YWludD4oY29uc3RyYWludCkuZml0bmVzc0Rpc3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNJbnQs
IHJhbmdlLnJhbmdlTWF4KCkuYXNJbnQpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBj
YXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkhlaWdodDogeworICAgICAgICBBU1NFUlQoY29uc3Ry
YWludC5pc0ludCgpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNIZWlnaHQo
KSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmls
aXRpZXMuaGVpZ2h0KCk7Ci0gICAgICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0YW5j
ZShyYW5nZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50KTsKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PEludENvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmZpdG5lc3NEaXN0
YW5jZShyYW5nZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGcmFt
ZVJhdGU6IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNEb3VibGUoKSk7CiAgICAgICAg
IGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzRnJhbWVSYXRlKCkpCiAgICAgICAgICAgICByZXR1
cm4gMDsKIAogICAgICAgICBhdXRvIHJhbmdlID0gY2FwYWJpbGl0aWVzLmZyYW1lUmF0ZSgpOwot
ICAgICAgICByZXR1cm4gY29uc3RyYWludC5maXRuZXNzRGlzdGFuY2UocmFuZ2UucmFuZ2VNaW4o
KS5hc0RvdWJsZSwgcmFuZ2UucmFuZ2VNYXgoKS5hc0RvdWJsZSk7CisgICAgICAgIHJldHVybiBk
b3duY2FzdDxEb3VibGVDb25zdHJhaW50Pihjb25zdHJhaW50KS5maXRuZXNzRGlzdGFuY2UocmFu
Z2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmFuZ2UucmFuZ2VNYXgoKS5hc0RvdWJsZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6QXNwZWN0
UmF0aW86IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNEb3VibGUoKSk7CiAgICAgICAg
IGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzQXNwZWN0UmF0aW8oKSkKICAgICAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuYXNwZWN0UmF0aW8o
KTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuZml0bmVzc0Rpc3RhbmNlKHJhbmdlLnJhbmdl
TWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUpOworICAgICAgICByZXR1
cm4gZG93bmNhc3Q8RG91YmxlQ29uc3RyYWludD4oY29uc3RyYWludCkuZml0bmVzc0Rpc3RhbmNl
KHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlZv
bHVtZTogeworICAgICAgICBBU1NFUlQoY29uc3RyYWludC5pc0RvdWJsZSgpKTsKICAgICAgICAg
aWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNWb2x1bWUoKSkKICAgICAgICAgICAgIHJldHVybiAw
OwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMudm9sdW1lKCk7Ci0gICAgICAg
IHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0YW5jZShyYW5nZS5yYW5nZU1pbigpLmFzRG91
YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PERvdWJsZUNvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmZpdG5lc3NEaXN0YW5jZShyYW5nZS5yYW5n
ZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVSYXRlOiB7
CisgICAgICAgIEFTU0VSVChjb25zdHJhaW50LmlzSW50KCkpOwogICAgICAgICBpZiAoIWNhcGFi
aWxpdGllcy5zdXBwb3J0c1NhbXBsZVJhdGUoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuc2FtcGxlUmF0ZSgpOwotICAgICAgICBy
ZXR1cm4gY29uc3RyYWludC5maXRuZXNzRGlzdGFuY2UocmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJs
ZSwgcmFuZ2UucmFuZ2VNYXgoKS5hc0RvdWJsZSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxJ
bnRDb25zdHJhaW50Pihjb25zdHJhaW50KS5maXRuZXNzRGlzdGFuY2UocmFuZ2UucmFuZ2VNaW4o
KS5hc0ludCwgcmFuZ2UucmFuZ2VNYXgoKS5hc0ludCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6U2FtcGxlU2l6ZTogeworICAgICAgICBB
U1NFUlQoY29uc3RyYWludC5pc0ludCgpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3Vw
cG9ydHNTYW1wbGVTaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBhdXRv
IHJhbmdlID0gY2FwYWJpbGl0aWVzLnNhbXBsZVNpemUoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0
cmFpbnQuZml0bmVzc0Rpc3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJh
bmdlTWF4KCkuYXNEb3VibGUpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8SW50Q29uc3RyYWlu
dD4oY29uc3RyYWludCkuZml0bmVzc0Rpc3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNJbnQsIHJh
bmdlLnJhbmdlTWF4KCkuYXNJbnQpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNl
IE1lZGlhQ29uc3RyYWludFR5cGU6OkZhY2luZ01vZGU6IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0
cmFpbnQuaXNTdHJpbmcoKSk7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzRmFj
aW5nTW9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTIyNywzMiArMjM2LDM1IEBA
IGRvdWJsZSBSZWFsdGltZU1lZGlhU291cmNlOjpmaXRuZXNzRGlzdGEKICAgICAgICAgc3VwcG9y
dGVkTW9kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtb2Rlcy5zaXplKCkpOwogICAgICAgICBm
b3IgKGF1dG8mIG1vZGUgOiBtb2RlcykKICAgICAgICAgICAgIHN1cHBvcnRlZE1vZGVzLmFwcGVu
ZChSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OmZhY2luZ01vZGUobW9kZSkpOwotICAgICAg
ICByZXR1cm4gY29uc3RyYWludC5maXRuZXNzRGlzdGFuY2Uoc3VwcG9ydGVkTW9kZXMpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8U3RyaW5nQ29uc3RyYWludD4oY29uc3RyYWludCkuZml0bmVz
c0Rpc3RhbmNlKHN1cHBvcnRlZE1vZGVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpFY2hvQ2FuY2VsbGF0aW9uOiB7CisgICAgICAgIEFT
U0VSVChjb25zdHJhaW50LmlzQm9vbGVhbigpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMu
c3VwcG9ydHNFY2hvQ2FuY2VsbGF0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAg
ICAgICBib29sIGVjaG9DYW5jZWxsYXRpb25SZWFkV3JpdGUgPSBjYXBhYmlsaXRpZXMuZWNob0Nh
bmNlbGxhdGlvbigpID09IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OkVjaG9DYW5j
ZWxsYXRpb246OlJlYWRXcml0ZTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuZml0bmVzc0Rp
c3RhbmNlKGVjaG9DYW5jZWxsYXRpb25SZWFkV3JpdGUpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Qm9vbGVhbkNvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmZpdG5lc3NEaXN0YW5jZShlY2hvQ2Fu
Y2VsbGF0aW9uUmVhZFdyaXRlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpEZXZpY2VJZDogeworICAgICAgICBBU1NFUlQoY29uc3RyYWlu
dC5pc1N0cmluZygpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNEZXZpY2VJ
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQu
Zml0bmVzc0Rpc3RhbmNlKG1faWQpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8U3RyaW5nQ29u
c3RyYWludD4oY29uc3RyYWludCkuZml0bmVzc0Rpc3RhbmNlKG1faWQpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Okdyb3VwSWQ6IHsKKyAg
ICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNTdHJpbmcoKSk7CiAgICAgICAgIGlmICghY2FwYWJp
bGl0aWVzLnN1cHBvcnRzRGV2aWNlSWQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAg
ICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0YW5jZShzZXR0aW5ncygpLmdyb3VwSWQo
KSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxTdHJpbmdDb25zdHJhaW50Pihjb25zdHJhaW50
KS5maXRuZXNzRGlzdGFuY2Uoc2V0dGluZ3MoKS5ncm91cElkKCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKQEAgLTI2Myw5ICsyNzUsMTAgQEAgZG91YmxlIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OmZpdG5lc3NEaXN0YQogCiAgICAgcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogdGVtcGxhdGUgPHR5
cGVuYW1lIFZhbHVlVHlwZT4KLXN0YXRpYyB2b2lkIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoY29u
c3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50LCBWYWx1ZVR5cGUgY3VycmVudCwgVmFsdWVU
eXBlIGNhcGFiaWxpdHlNaW4sIFZhbHVlVHlwZSBjYXBhYmlsaXR5TWF4LCBSZWFsdGltZU1lZGlh
U291cmNlKiBzb3VyY2UsIHZvaWQgKFJlYWx0aW1lTWVkaWFTb3VyY2U6OipmdW5jdGlvbikoVmFs
dWVUeXBlKSkKK3N0YXRpYyB2b2lkIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoY29uc3QgTnVtZXJp
Y0NvbnN0cmFpbnQ8VmFsdWVUeXBlPiYgY29uc3RyYWludCwgVmFsdWVUeXBlIGN1cnJlbnQsIFZh
bHVlVHlwZSBjYXBhYmlsaXR5TWluLCBWYWx1ZVR5cGUgY2FwYWJpbGl0eU1heCwgUmVhbHRpbWVN
ZWRpYVNvdXJjZSogc291cmNlLCB2b2lkIChSZWFsdGltZU1lZGlhU291cmNlOjoqYXBwbGllciko
VmFsdWVUeXBlKSkKIHsKICAgICBWYWx1ZVR5cGUgdmFsdWU7CiAgICAgVmFsdWVUeXBlIG1pbiA9
IGNhcGFiaWxpdHlNaW47CkBAIC0yNzMsNyArMjg2LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlOdW1l
cmljQ29uc3RyYWludChjb25zdAogCiAgICAgaWYgKGNvbnN0cmFpbnQuZ2V0RXhhY3QodmFsdWUp
KSB7CiAgICAgICAgIEFTU0VSVChjb25zdHJhaW50LnZhbGlkRm9yUmFuZ2UoY2FwYWJpbGl0eU1p
biwgY2FwYWJpbGl0eU1heCkpOwotICAgICAgICAoc291cmNlLT4qZnVuY3Rpb24pKHZhbHVlKTsK
KyAgICAgICAgKHNvdXJjZS0+KmFwcGxpZXIpKHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMzAyLDkxICszMTUsMTAyIEBAIHN0YXRpYyB2b2lkIGFwcGx5TnVtZXJpY0NvbnN0
cmFpbnQoY29uc3QKICAgICB9CiAKICAgICBpZiAodmFsdWUgIT0gY3VycmVudCkKLSAgICAgICAg
KHNvdXJjZS0+KmZ1bmN0aW9uKSh2YWx1ZSk7CisgICAgICAgIChzb3VyY2UtPiphcHBsaWVyKSh2
YWx1ZSk7CiB9CiAKIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6YXBwbHlDb25zdHJhaW50KGNv
bnN0IE1lZGlhQ29uc3RyYWludCYgY29uc3RyYWludCkKIHsKICAgICBSZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMgPSAqdGhpcy0+Y2FwYWJpbGl0aWVzKCk7Ci0g
ICAgc3dpdGNoIChjb25zdHJhaW50LnR5cGUoKSkgeworICAgIHN3aXRjaCAoY29uc3RyYWludC5j
b25zdHJhaW50VHlwZSgpKSB7CiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpXaWR0aDog
eworICAgICAgICBBU1NFUlQoY29uc3RyYWludC5pc0ludCgpKTsKICAgICAgICAgaWYgKCFjYXBh
YmlsaXRpZXMuc3VwcG9ydHNXaWR0aCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMud2lkdGgoKTsKLSAgICAgICAgYXBwbHlOdW1lcmlj
Q29uc3RyYWludChjb25zdHJhaW50LCBzaXplKCkud2lkdGgoKSwgcmFuZ2UucmFuZ2VNaW4oKS5h
c0ludCwgcmFuZ2UucmFuZ2VNYXgoKS5hc0ludCwgdGhpcywgJlJlYWx0aW1lTWVkaWFTb3VyY2U6
OnNldFdpZHRoKTsKKyAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWludChkb3duY2FzdDxJbnRD
b25zdHJhaW50Pihjb25zdHJhaW50KSwgc2l6ZSgpLndpZHRoKCksIHJhbmdlLnJhbmdlTWluKCku
YXNJbnQsIHJhbmdlLnJhbmdlTWF4KCkuYXNJbnQsIHRoaXMsICZSZWFsdGltZU1lZGlhU291cmNl
OjpzZXRXaWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTWVkaWFDb25z
dHJhaW50VHlwZTo6SGVpZ2h0OiB7CisgICAgICAgIEFTU0VSVChjb25zdHJhaW50LmlzSW50KCkp
OwogICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c0hlaWdodCgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuaGVpZ2h0KCk7
Ci0gICAgICAgIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoY29uc3RyYWludCwgc2l6ZSgpLmhlaWdo
dCgpLCByYW5nZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50LCB0aGlz
LCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0SGVpZ2h0KTsKKyAgICAgICAgYXBwbHlOdW1lcmlj
Q29uc3RyYWludChkb3duY2FzdDxJbnRDb25zdHJhaW50Pihjb25zdHJhaW50KSwgc2l6ZSgpLmhl
aWdodCgpLCByYW5nZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50LCB0
aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0SGVpZ2h0KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGcmFtZVJhdGU6IHsKKyAgICAg
ICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNEb3VibGUoKSk7CiAgICAgICAgIGlmICghY2FwYWJpbGl0
aWVzLnN1cHBvcnRzRnJhbWVSYXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
YXV0byByYW5nZSA9IGNhcGFiaWxpdGllcy5mcmFtZVJhdGUoKTsKLSAgICAgICAgYXBwbHlOdW1l
cmljQ29uc3RyYWludChjb25zdHJhaW50LCBmcmFtZVJhdGUoKSwgcmFuZ2UucmFuZ2VNaW4oKS5h
c0RvdWJsZSwgcmFuZ2UucmFuZ2VNYXgoKS5hc0RvdWJsZSwgdGhpcywgJlJlYWx0aW1lTWVkaWFT
b3VyY2U6OnNldEZyYW1lUmF0ZSk7CisgICAgICAgIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoZG93
bmNhc3Q8RG91YmxlQ29uc3RyYWludD4oY29uc3RyYWludCksIGZyYW1lUmF0ZSgpLCByYW5nZS5y
YW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlLCB0aGlzLCAmUmVh
bHRpbWVNZWRpYVNvdXJjZTo6c2V0RnJhbWVSYXRlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpBc3BlY3RSYXRpbzogeworICAgICAgICBB
U1NFUlQoY29uc3RyYWludC5pc0RvdWJsZSgpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMu
c3VwcG9ydHNBc3BlY3RSYXRpbygpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1
dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuYXNwZWN0UmF0aW8oKTsKLSAgICAgICAgYXBwbHlOdW1l
cmljQ29uc3RyYWludChjb25zdHJhaW50LCBhc3BlY3RSYXRpbygpLCByYW5nZS5yYW5nZU1pbigp
LmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlLCB0aGlzLCAmUmVhbHRpbWVNZWRp
YVNvdXJjZTo6c2V0QXNwZWN0UmF0aW8pOworICAgICAgICBhcHBseU51bWVyaWNDb25zdHJhaW50
KGRvd25jYXN0PERvdWJsZUNvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLCBhc3BlY3RSYXRpbygpLCBy
YW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlLCB0aGlz
LCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0QXNwZWN0UmF0aW8pOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlZvbHVtZTogeworICAgICAg
ICBBU1NFUlQoY29uc3RyYWludC5pc0RvdWJsZSgpKTsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRp
ZXMuc3VwcG9ydHNWb2x1bWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBhdXRv
IHJhbmdlID0gY2FwYWJpbGl0aWVzLnZvbHVtZSgpOwotICAgICAgICBhcHBseU51bWVyaWNDb25z
dHJhaW50KGNvbnN0cmFpbnQsIHZvbHVtZSgpLCByYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCBy
YW5nZS5yYW5nZU1heCgpLmFzRG91YmxlLCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0
Vm9sdW1lKTsKKyAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWludChkb3duY2FzdDxEb3VibGVD
b25zdHJhaW50Pihjb25zdHJhaW50KSwgdm9sdW1lKCksIHJhbmdlLnJhbmdlTWluKCkuYXNEb3Vi
bGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUsIHRoaXMsICZSZWFsdGltZU1lZGlhU291cmNl
OjpzZXRWb2x1bWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29u
c3RyYWludFR5cGU6OlNhbXBsZVJhdGU6IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNJ
bnQoKSk7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzU2FtcGxlUmF0ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMu
c2FtcGxlUmF0ZSgpOwotICAgICAgICBhcHBseU51bWVyaWNDb25zdHJhaW50KGNvbnN0cmFpbnQs
IHNhbXBsZVJhdGUoKSwgcmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmFuZ2UucmFuZ2VNYXgo
KS5hc0RvdWJsZSwgdGhpcywgJlJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldFNhbXBsZVJhdGUpOwor
ICAgICAgICBhcHBseU51bWVyaWNDb25zdHJhaW50KGRvd25jYXN0PEludENvbnN0cmFpbnQ+KGNv
bnN0cmFpbnQpLCBzYW1wbGVSYXRlKCksIHJhbmdlLnJhbmdlTWluKCkuYXNJbnQsIHJhbmdlLnJh
bmdlTWF4KCkuYXNJbnQsIHRoaXMsICZSZWFsdGltZU1lZGlhU291cmNlOjpzZXRTYW1wbGVSYXRl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBl
OjpTYW1wbGVTaXplOiB7CisgICAgICAgIEFTU0VSVChjb25zdHJhaW50LmlzSW50KCkpOwogICAg
ICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c1NhbXBsZVNpemUoKSkKICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICBhdXRvIHJhbmdlID0gY2FwYWJpbGl0aWVzLnNhbXBsZVNpemUo
KTsKLSAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWludChjb25zdHJhaW50LCBzYW1wbGVTaXpl
KCksIHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUs
IHRoaXMsICZSZWFsdGltZU1lZGlhU291cmNlOjpzZXRTYW1wbGVTaXplKTsKKyAgICAgICAgYXBw
bHlOdW1lcmljQ29uc3RyYWludChkb3duY2FzdDxJbnRDb25zdHJhaW50Pihjb25zdHJhaW50KSwg
c2FtcGxlU2l6ZSgpLCByYW5nZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFz
SW50LCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0U2FtcGxlU2l6ZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RWNob0NhbmNl
bGxhdGlvbjoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkVjaG9DYW5jZWxsYXRpb246
IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNCb29sZWFuKCkpOwogICAgICAgICBpZiAo
IWNhcGFiaWxpdGllcy5zdXBwb3J0c0VjaG9DYW5jZWxsYXRpb24oKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBib29sIHNldHRpbmc7Ci0gICAgICAgIGlmIChjb25zdHJhaW50Lmdl
dEV4YWN0KHNldHRpbmcpIHx8IGNvbnN0cmFpbnQuZ2V0SWRlYWwoc2V0dGluZykpCisgICAgICAg
IGNvbnN0IEJvb2xlYW5Db25zdHJhaW50JiBib29sQ29uc3RyYWludCA9IGRvd25jYXN0PEJvb2xl
YW5Db25zdHJhaW50Pihjb25zdHJhaW50KTsKKyAgICAgICAgaWYgKGJvb2xDb25zdHJhaW50Lmdl
dEV4YWN0KHNldHRpbmcpIHx8IGJvb2xDb25zdHJhaW50LmdldElkZWFsKHNldHRpbmcpKQogICAg
ICAgICAgICAgc2V0RWNob0NhbmNlbGxhdGlvbihzZXR0aW5nKTsKICAgICAgICAgYnJlYWs7Cisg
ICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdNb2RlOiB7CisgICAg
ICAgIEFTU0VSVChjb25zdHJhaW50LmlzU3RyaW5nKCkpOwogICAgICAgICBpZiAoIWNhcGFiaWxp
dGllcy5zdXBwb3J0c0ZhY2luZ01vZGUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBhdXRvJiBzdXBwb3J0ZWRNb2RlcyA9IGNhcGFiaWxpdGllcy5mYWNpbmdNb2RlKCk7Ci0gICAg
ICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbChNZWRpYUNvbnN0cmFpbnQ6OkNvbnN0cmFpbnRUeXBlLCBj
b25zdCBTdHJpbmcmKT4gZmlsdGVyID0gW3N1cHBvcnRlZE1vZGVzXShNZWRpYUNvbnN0cmFpbnQ6
OkNvbnN0cmFpbnRUeXBlLCBjb25zdCBTdHJpbmcmIG1vZGVTdHJpbmcpIHsKKyAgICAgICAgYXV0
byBmaWx0ZXIgPSBbc3VwcG9ydGVkTW9kZXNdKGNvbnN0IFN0cmluZyYgbW9kZVN0cmluZykgewog
ICAgICAgICAgICAgYXV0byBtb2RlID0gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjp2aWRl
b0ZhY2luZ01vZGVFbnVtKG1vZGVTdHJpbmcpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBzdXBw
b3J0ZWRNb2RlIDogc3VwcG9ydGVkTW9kZXMpIHsKICAgICAgICAgICAgICAgICBpZiAobW9kZSA9
PSBzdXBwb3J0ZWRNb2RlKQpAQCAtMzk1LDcgKzQxOSw3IEBAIHZvaWQgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6YXBwbHlDb25zdHJhaW4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fTsKIAotICAgICAgICBhdXRvIG1vZGVTdHJpbmcgPSBjb25zdHJhaW50LmZpbmQoZmlsdGVyKTsK
KyAgICAgICAgYXV0byBtb2RlU3RyaW5nID0gZG93bmNhc3Q8U3RyaW5nQ29uc3RyYWludD4oY29u
c3RyYWludCkuZmluZChmaWx0ZXIpOwogICAgICAgICBpZiAoIW1vZGVTdHJpbmcuaXNFbXB0eSgp
KQogICAgICAgICAgICAgc2V0RmFjaW5nTW9kZShSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6
OnZpZGVvRmFjaW5nTW9kZUVudW0obW9kZVN0cmluZykpOwogICAgICAgICBicmVhazsKQEAgLTQw
Myw2ICs0MjcsNyBAQCB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmFwcGx5Q29uc3RyYWluCiAK
ICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkRldmljZUlkOgogICAgIGNhc2UgTWVkaWFD
b25zdHJhaW50VHlwZTo6R3JvdXBJZDoKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQuaXNTdHJp
bmcoKSk7CiAgICAgICAgIC8vIFRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZSwgbmVpdGhlciBj
YW4gYmUgY2hhbmdlZC4KICAgICAgICAgYnJlYWs7CiAKQEAgLTQzMSwxNiArNDU2LDIwIEBAIGJv
b2wgUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2VsZWN0U2V0dGluZ3MKICAgICAvLyAzLiBGb3IgZXZl
cnkgcG9zc2libGUgc2V0dGluZ3MgZGljdGlvbmFyeSBvZiBjb3B5IGNvbXB1dGUgaXRzIGZpdG5l
c3MgZGlzdGFuY2UsIHRyZWF0aW5nIGJhcmUgdmFsdWVzIG9mCiAgICAgLy8gICAgcHJvcGVydGll
cyBhcyBpZGVhbCB2YWx1ZXMuIExldCBjYW5kaWRhdGVzIGJlIHRoZSBzZXQgb2Ygc2V0dGluZ3Mg
ZGljdGlvbmFyaWVzIGZvciB3aGljaCB0aGUgZml0bmVzcwogICAgIC8vICAgIGRpc3RhbmNlIGlz
IGZpbml0ZS4KLSAgICBhdXRvJiBtYW5kYXRvcnlDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzLm1h
bmRhdG9yeUNvbnN0cmFpbnRzKCk7Ci0gICAgZm9yIChhdXRvJiBuYW1lQ29uc3RyYWludFBhaXIg
OiBtYW5kYXRvcnlDb25zdHJhaW50cykgewotICAgICAgICBjb25zdCBhdXRvJiBjb25zdHJhaW50
ID0gbmFtZUNvbnN0cmFpbnRQYWlyLnZhbHVlOwotICAgICAgICBpZiAoZml0bmVzc0Rpc3RhbmNl
KCpjb25zdHJhaW50KSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkp
IHsKLSAgICAgICAgICAgIGZhaWxlZENvbnN0cmFpbnQgPSBjb25zdHJhaW50LT5uYW1lKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmYWlsZWRDb25zdHJhaW50ID0gZW1wdHlT
dHJpbmcoKTsKKyAgICBjb25zdHJhaW50cy5tYW5kYXRvcnlDb25zdHJhaW50cygpLmZpbHRlcihb
Jl0oY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KSB7CisgICAgICAgIGlmIChmaXRu
ZXNzRGlzdGFuY2UoY29uc3RyYWludCkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpKSB7CisgICAgICAgICAgICBmYWlsZWRDb25zdHJhaW50ID0gY29uc3RyYWludC5u
YW1lKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGNh
bmRpZGF0ZXMuc2V0KCpjb25zdHJhaW50KTsKLSAgICB9CisgICAgICAgIGNhbmRpZGF0ZXMuc2V0
KGNvbnN0cmFpbnQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisKKyAgICBpZiAo
IWZhaWxlZENvbnN0cmFpbnQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAvLyA0LiBJZiBjYW5kaWRhdGVzIGlzIGVtcHR5LCByZXR1cm4gdW5kZWZpbmVkIGFzIHRoZSBy
ZXN1bHQgb2YgdGhlIFNlbGVjdFNldHRpbmdzKCkgYWxnb3JpdGhtLgogICAgIGlmIChjYW5kaWRh
dGVzLmlzRW1wdHkoKSkKQEAgLTQ1MywxNSArNDgyLDE3IEBAIGJvb2wgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6c2VsZWN0U2V0dGluZ3MKICAgICAvLyAgICAgdmFsdWVzIG9mIHByb3BlcnRpZXMgYXMg
ZXhhY3QuCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIE1lZGlhVHJhY2tDb25zdHJhaW50
U2V0TWFwPj4gc3VwcG9ydGVkQ29uc3RyYWludHM7CiAgICAgZG91YmxlIG1pbmltdW1EaXN0YW5j
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKwogICAgIGZvciAo
Y29uc3QgYXV0byYgYWR2YW5jZWRDb25zdHJhaW50IDogY29uc3RyYWludHMuYWR2YW5jZWRDb25z
dHJhaW50cygpKSB7CiAgICAgICAgIGRvdWJsZSBjb25zdHJhaW50RGlzdGFuY2UgPSAwOwogICAg
ICAgICBib29sIHN1cHBvcnRlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGF1dG8mIG5hbWVDb25z
dHJhaW50UGFpciA6IGFkdmFuY2VkQ29uc3RyYWludCkgewotICAgICAgICAgICAgZG91YmxlIGRp
c3RhbmNlID0gZml0bmVzc0Rpc3RhbmNlKCpuYW1lQ29uc3RyYWludFBhaXIudmFsdWUpOworCisg
ICAgICAgIGFkdmFuY2VkQ29uc3RyYWludC5mb3JFYWNoKFsmXShjb25zdCBNZWRpYUNvbnN0cmFp
bnQmIGNvbnN0cmFpbnQpIHsKKyAgICAgICAgICAgIGRvdWJsZSBkaXN0YW5jZSA9IGZpdG5lc3NE
aXN0YW5jZShjb25zdHJhaW50KTsKICAgICAgICAgICAgIGNvbnN0cmFpbnREaXN0YW5jZSArPSBk
aXN0YW5jZTsKICAgICAgICAgICAgIGlmIChkaXN0YW5jZSAhPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGRvdWJsZT46OmluZmluaXR5KCkpCiAgICAgICAgICAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTsK
LSAgICAgICAgfQorICAgICAgICB9KTsKIAogICAgICAgICBpZiAoY29uc3RyYWludERpc3RhbmNl
IDwgbWluaW11bURpc3RhbmNlKQogICAgICAgICAgICAgbWluaW11bURpc3RhbmNlID0gY29uc3Ry
YWludERpc3RhbmNlOwpAQCAtNDc2LDM1ICs1MDcsMzQgQEAgYm9vbCBSZWFsdGltZU1lZGlhU291
cmNlOjpzZWxlY3RTZXR0aW5ncwogICAgIC8vIDYuIFNlbGVjdCBvbmUgc2V0dGluZ3MgZGljdGlv
bmFyeSBmcm9tIGNhbmRpZGF0ZXMsIGFuZCByZXR1cm4gaXQgYXMgdGhlIHJlc3VsdCBvZiB0aGUg
U2VsZWN0U2V0dGluZ3MoKSBhbGdvcml0aG0uCiAgICAgLy8gICAgVGhlIFVBIHNob3VsZCB1c2Ug
dGhlIG9uZSB3aXRoIHRoZSBzbWFsbGVzdCBmaXRuZXNzIGRpc3RhbmNlLCBhcyBjYWxjdWxhdGVk
IGluIHN0ZXAgMy4KICAgICBpZiAobWluaW11bURpc3RhbmNlICE9IHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6aW5maW5pdHkoKSkgewotICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5y
ZW1vdmVBbGxNYXRjaGluZyggWyZdIChzdGQ6OnBhaXI8ZG91YmxlLCBNZWRpYVRyYWNrQ29uc3Ry
YWludFNldE1hcD4gcGFpcikgLT4gYm9vbCB7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRz
LnJlbW92ZUFsbE1hdGNoaW5nKFsmXShzdGQ6OnBhaXI8ZG91YmxlLCBNZWRpYVRyYWNrQ29uc3Ry
YWludFNldE1hcD4gcGFpcikgLT4gYm9vbCB7CiAgICAgICAgICAgICByZXR1cm4gcGFpci5maXJz
dCA+IG1pbmltdW1EaXN0YW5jZTsKICAgICAgICAgfSk7CiAKICAgICAgICAgaWYgKCFzdXBwb3J0
ZWRDb25zdHJhaW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGF1dG8mIGFkdmFuY2VkQ29u
c3RyYWludCA9IHN1cHBvcnRlZENvbnN0cmFpbnRzWzBdLnNlY29uZDsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgbmFtZUNvbnN0cmFpbnRQYWlyIDogYWR2YW5jZWRDb25zdHJhaW50KQotICAgICAg
ICAgICAgICAgIGNhbmRpZGF0ZXMubWVyZ2UoKm5hbWVDb25zdHJhaW50UGFpci52YWx1ZSk7Cisg
ICAgICAgICAgICBhZHZhbmNlZENvbnN0cmFpbnQuZm9yRWFjaChbJl0oY29uc3QgTWVkaWFDb25z
dHJhaW50JiBjb25zdHJhaW50KSB7CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5tZXJnZShj
b25zdHJhaW50KTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLQogdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFp
bnRzKGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIGNvbnN0cmFpbnRzLCBTdWNjZXNzSGFuZGxlciBz
dWNjZXNzSGFuZGxlciwgRmFpbHVyZUhhbmRsZXIgZmFpbHVyZUhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKGNvbnN0cmFpbnRzLmlzVmFsaWQoKSk7CiAKICAgICBGbGF0dGVuZWRDb25zdHJhaW50IGNh
bmRpZGF0ZXM7Ci0KICAgICBTdHJpbmcgZmFpbGVkQ29uc3RyYWludDsKICAgICBpZiAoIXNlbGVj
dFNldHRpbmdzKGNvbnN0cmFpbnRzLCBjYW5kaWRhdGVzLCBmYWlsZWRDb25zdHJhaW50KSkgewog
ICAgICAgICBmYWlsdXJlSGFuZGxlcihmYWlsZWRDb25zdHJhaW50LCAiQ29uc3RyYWludCBub3Qg
c3VwcG9ydGVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8gY29u
c3RyYWludCA6IGNhbmRpZGF0ZXMpCi0gICAgICAgIGFwcGx5Q29uc3RyYWludCgqY29uc3RyYWlu
dCk7CisgICAgZm9yIChhdXRvJiB2YXJpYW50IDogY2FuZGlkYXRlcykKKyAgICAgICAgYXBwbHlD
b25zdHJhaW50KHZhcmlhbnQpOwogCiAgICAgc3VjY2Vzc0hhbmRsZXIoKTsKIH0KQEAgLTU3OCw3
ICs2MDgsNyBAQCB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldFZvbHVtZShkb3ViCiAgICAg
c2V0dGluZ3NEaWRDaGFuZ2UoKTsKIH0KIAotdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpzZXRT
YW1wbGVSYXRlKGRvdWJsZSByYXRlKQordm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpzZXRTYW1w
bGVSYXRlKGludCByYXRlKQogewogICAgIGlmIChtX3NhbXBsZVJhdGUgPT0gcmF0ZSB8fCAhYXBw
bHlTYW1wbGVSYXRlKHJhdGUpKQogICAgICAgICByZXR1cm47CkBAIC01ODcsNyArNjE3LDcgQEAg
dm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpzZXRTYW1wbGVSYXRlKAogICAgIHNldHRpbmdzRGlk
Q2hhbmdlKCk7CiB9CiAKLXZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0U2FtcGxlU2l6ZShk
b3VibGUgc2l6ZSkKK3ZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0U2FtcGxlU2l6ZShpbnQg
c2l6ZSkKIHsKICAgICBpZiAobV9zYW1wbGVTaXplID09IHNpemUgfHwgIWFwcGx5U2FtcGxlU2l6
ZShzaXplKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAkocmV2aXNp
b24gMjA2NDM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsMTMgKzE0OCwxMyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRWb2x1bWUoZG91YmxlKTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlW
b2x1bWUoZG91YmxlKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgZG91YmxlIHNhbXBsZVJhdGUo
KSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KLSAgICB2b2lkIHNldFNhbXBsZVJhdGUo
ZG91YmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTYW1wbGVSYXRlKGRvdWJsZSkgeyByZXR1
cm4gZmFsc2U7IH0KLQotICAgIGRvdWJsZSBzYW1wbGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
YW1wbGVTaXplOyB9Ci0gICAgdm9pZCBzZXRTYW1wbGVTaXplKGRvdWJsZSk7Ci0gICAgdmlydHVh
bCBib29sIGFwcGx5U2FtcGxlU2l6ZShkb3VibGUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgaW50
IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KKyAgICB2b2lkIHNl
dFNhbXBsZVJhdGUoaW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTYW1wbGVSYXRlKGludCkg
eyByZXR1cm4gZmFsc2U7IH0KKworICAgIGludCBzYW1wbGVTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zYW1wbGVTaXplOyB9CisgICAgdm9pZCBzZXRTYW1wbGVTaXplKGludCk7CisgICAgdmlydHVh
bCBib29sIGFwcGx5U2FtcGxlU2l6ZShpbnQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBib29s
IGVjaG9DYW5jZWxsYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2VjaG9DYW5jZWxsYXRpb247IH0K
ICAgICB2b2lkIHNldEVjaG9DYW5jZWxsYXRpb24oYm9vbCk7CkBAIC0xNzAsNyArMTcwLDYgQEAg
cHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBXZWFrUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNy
ZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsg
fQogCi0gICAgYm9vbCBzdXBwb3J0c0NvbnN0cmFpbnRzKGNvbnN0IE1lZGlhVHJhY2tDb25zdHJh
aW50U2V0TWFwJik7CiAgICAgYm9vbCBzZWxlY3RTZXR0aW5ncyhjb25zdCBNZWRpYUNvbnN0cmFp
bnRzJiwgRmxhdHRlbmVkQ29uc3RyYWludCYsIFN0cmluZyYpOwogICAgIGRvdWJsZSBmaXRuZXNz
RGlzdGFuY2UoY29uc3QgTWVkaWFDb25zdHJhaW50Jik7CiAgICAgdm9pZCBhcHBseUNvbnN0cmFp
bnQoY29uc3QgTWVkaWFDb25zdHJhaW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNl
TWFuYWdlci5tbQkocmV2aXNpb24gMjA2NDM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI2Nyw3ICsyNjcsNyBAQCBDYXB0dXJlU2Vzc2lvbkluZm8gQVZDYXB0dXJlRGV2aWNlTWFu
YWdlCiBib29sIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNlc3Npb25TdXBwb3J0c0NvbnN0cmFp
bnQoY29uc3QgQ2FwdHVyZVNlc3Npb25JbmZvKiBzZXNzaW9uLCBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlIHR5cGUsIGNvbnN0IE1lZGlhQ29uc3RyYWludCYgY29uc3RyYWludCkKIHsKICAgICBj
b25zdCBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMmIHN1cHBvcnRlZENv
bnN0cmFpbnRzID0gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuc3VwcG9y
dGVkQ29uc3RyYWludHMoKTsKLSAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0cmFpbnRUeXBl
ID0gY29uc3RyYWludC50eXBlKCk7CisgICAgTWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJhaW50
VHlwZSA9IGNvbnN0cmFpbnQuY29uc3RyYWludFR5cGUoKTsKICAgICBpZiAoIXN1cHBvcnRlZENv
bnN0cmFpbnRzLnN1cHBvcnRzQ29uc3RyYWludChjb25zdHJhaW50VHlwZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMjc5LDcgKzI3OSw3IEBAIGJvb2wgQVZDYXB0dXJlRGV2aWNlTWFu
YWdlcjo6c2Vzc2lvblN1cHAKICAgICAgICAgaWYgKGNvbnN0cmFpbnRUeXBlID09IE1lZGlhQ29u
c3RyYWludFR5cGU6OldpZHRoKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDU3OC4gU3VwcG9ydCBtaW4sIG1heCBjb25z
dHJhaW50cy4KICAgICAgICAgICAgIGludCBleGFjdDsKLSAgICAgICAgICAgIGlmICghY29uc3Ry
YWludC5nZXRFeGFjdChleGFjdCkpCisgICAgICAgICAgICBpZiAoIWRvd25jYXN0PGNvbnN0IElu
dENvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmdldEV4YWN0KGV4YWN0KSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHJldHVybiAhc2Vzc2lvbi0+YmVzdFNlc3Np
b25QcmVzZXRGb3JWaWRlb0RpbWVuc2lvbnMoZXhhY3QsIDApLmlzRW1wdHkoKTsKQEAgLTI4OCw3
ICsyODgsNyBAQCBib29sIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNlc3Npb25TdXBwCiAgICAg
ICAgIGlmIChjb25zdHJhaW50VHlwZSA9PSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQpIHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYwNTc4LiBTdXBwb3J0IG1pbiwgbWF4IGNvbnN0cmFpbnRzLgogICAgICAgICAgICAg
aW50IGV4YWN0OwotICAgICAgICAgICAgaWYgKCFjb25zdHJhaW50LmdldEV4YWN0KGV4YWN0KSkK
KyAgICAgICAgICAgIGlmICghZG93bmNhc3Q8Y29uc3QgSW50Q29uc3RyYWludD4oY29uc3RyYWlu
dCkuZ2V0RXhhY3QoZXhhY3QpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICAgICAgcmV0dXJuICFzZXNzaW9uLT5iZXN0U2Vzc2lvblByZXNldEZvclZpZGVvRGltZW5z
aW9ucygwLCBleGFjdCkuaXNFbXB0eSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bW9jay9NZWRpYUNvbnN0cmFpbnRzTW9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9NZWRpYUNvbnN0cmFpbnRzTW9jay5jcHAJKHJldmlzaW9uIDIwNjQz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTWVkaWFDb25zdHJhaW50c01vY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNSArNDMsMTUgQEAgc3RhdGljIGJvb2wgaXNJbnRN
ZWRpYUNvbnN0cmFpbnRTYXRpc2ZpYQogICAgIGludCBmbG9vciA9IDA7CiAKICAgICBpbnQgbWlu
ID0gZmxvb3I7Ci0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0TWluKG1pbikgJiYgbWluID4gY2VpbGlu
ZykKKyAgICBpZiAoZG93bmNhc3Q8Y29uc3QgSW50Q29uc3RyYWludD4oY29uc3RyYWludCkuZ2V0
TWluKG1pbikgJiYgbWluID4gY2VpbGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aW50IG1heCA9IGNlaWxpbmc7Ci0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0TWF4KG1heCkgJiYgbWF4
IDwgbWluKQorICAgIGlmIChkb3duY2FzdDxjb25zdCBJbnRDb25zdHJhaW50Pihjb25zdHJhaW50
KS5nZXRNYXgobWF4KSAmJiBtYXggPCBtaW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGludCBleGFjdDsKLSAgICBpZiAoY29uc3RyYWludC5nZXRFeGFjdChleGFjdCkgJiYgKGV4YWN0
IDwgbWluIHx8IGV4YWN0ID4gbWF4KSkKKyAgICBpZiAoZG93bmNhc3Q8Y29uc3QgSW50Q29uc3Ry
YWludD4oY29uc3RyYWludCkuZ2V0RXhhY3QoZXhhY3QpICYmIChleGFjdCA8IG1pbiB8fCBleGFj
dCA+IG1heCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAt
NjMsMTUgKzYzLDE1IEBAIHN0YXRpYyBib29sIGlzRG91YmxlTWVkaWFDb25zdHJhaW50U2F0aXMK
ICAgICBkb3VibGUgZmxvb3IgPSAwOwogCiAgICAgZG91YmxlIG1pbiA9IGZsb29yOwotICAgIGlm
IChjb25zdHJhaW50LmdldE1pbihtaW4pICYmIG1pbiA+IGNlaWxpbmcpCisgICAgaWYgKGRvd25j
YXN0PGNvbnN0IERvdWJsZUNvbnN0cmFpbnQ+KGNvbnN0cmFpbnQpLmdldE1pbihtaW4pICYmIG1p
biA+IGNlaWxpbmcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGRvdWJsZSBtYXggPSBj
ZWlsaW5nOwotICAgIGlmIChjb25zdHJhaW50LmdldE1heChtYXgpICYmIG1heCA8IG1pbikKKyAg
ICBpZiAoZG93bmNhc3Q8Y29uc3QgRG91YmxlQ29uc3RyYWludD4oY29uc3RyYWludCkuZ2V0TWF4
KG1heCkgJiYgbWF4IDwgbWluKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBkb3VibGUg
ZXhhY3Q7Ci0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0RXhhY3QoZXhhY3QpICYmIChleGFjdCA8IG1p
biB8fCBleGFjdCA+IG1heCkpCisgICAgaWYgKGRvd25jYXN0PGNvbnN0IERvdWJsZUNvbnN0cmFp
bnQ+KGNvbnN0cmFpbnQpLmdldEV4YWN0KGV4YWN0KSAmJiAoZXhhY3QgPCBtaW4gfHwgZXhhY3Qg
PiBtYXgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTgw
LDcgKzgwLDcgQEAgc3RhdGljIGJvb2wgaXNEb3VibGVNZWRpYUNvbnN0cmFpbnRTYXRpcwogc3Rh
dGljIGJvb2wgaXNCb29sZWFuTWVkaWFDb25zdHJhaW50U2F0aXNmaWFibGUoY29uc3QgTWVkaWFD
b25zdHJhaW50JiBjb25zdHJhaW50KQogewogICAgIGJvb2wgZXhhY3Q7Ci0gICAgaWYgKGNvbnN0
cmFpbnQuZ2V0RXhhY3QoZXhhY3QpKQorICAgIGlmIChkb3duY2FzdDxjb25zdCBCb29sZWFuQ29u
c3RyYWludD4oY29uc3RyYWludCkuZ2V0RXhhY3QoZXhhY3QpKQogICAgICAgICByZXR1cm4gZXhh
Y3Q7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg5LDcgKzg5LDcgQEAgc3RhdGljIGJvb2wgaXNC
b29sZWFuTWVkaWFDb25zdHJhaW50U2F0aQogc3RhdGljIGJvb2wgaXNTdHJpbmdNZWRpYUNvbnN0
cmFpbnRTYXRpc2ZpYWJsZShjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7CiAg
ICAgVmVjdG9yPFN0cmluZz4gZXhhY3Q7Ci0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0RXhhY3QoZXhh
Y3QpKSB7CisgICAgaWYgKGRvd25jYXN0PGNvbnN0IFN0cmluZ0NvbnN0cmFpbnQ+KGNvbnN0cmFp
bnQpLmdldEV4YWN0KGV4YWN0KSkgewogICAgICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnRWYWx1
ZSA6IGV4YWN0KSB7CiAgICAgICAgICAgICBpZiAoY29uc3RyYWludFZhbHVlLmZpbmQoImludmFs
aWQiKSAhPSBub3RGb3VuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDEs
NyArMTAxLDcgQEAgc3RhdGljIGJvb2wgaXNTdHJpbmdNZWRpYUNvbnN0cmFpbnRTYXRpcwogCiBz
dGF0aWMgYm9vbCBpc1NhdGlzZmlhYmxlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwg
Y29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KQogewotICAgIE1lZGlhQ29uc3RyYWlu
dFR5cGUgY29uc3RyYWludFR5cGUgPSBjb25zdHJhaW50LnR5cGUoKTsKKyAgICBNZWRpYUNvbnN0
cmFpbnRUeXBlIGNvbnN0cmFpbnRUeXBlID0gY29uc3RyYWludC5jb25zdHJhaW50VHlwZSgpOwog
CiAgICAgaWYgKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8pIHsKICAgICAgICAg
aWYgKGNvbnN0cmFpbnRUeXBlID09IE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGUgfHwg
Y29uc3RyYWludFR5cGUgPT0gTWVkaWFDb25zdHJhaW50VHlwZTo6U2FtcGxlU2l6ZSkKQEAgLTEy
NCwxNSArMTI0LDIwIEBAIHN0YXRpYyBib29sIGlzU2F0aXNmaWFibGUoUmVhbHRpbWVNZWRpYVMK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWNvbnN0IFN0cmluZyYgTWVkaWFDb25zdHJhaW50c01v
Y2s6OnZlcmlmeUNvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29u
c3QgTWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWludHMpCitjb25zdCBTdHJpbmcgTWVkaWFDb25z
dHJhaW50c01vY2s6OnZlcmlmeUNvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUg
dHlwZSwgY29uc3QgTWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWludHMpCiB7Ci0gICAgYXV0byYg
bWFuZGF0b3J5Q29uc3RyYWludHMgPSBjb25zdHJhaW50cy5tYW5kYXRvcnlDb25zdHJhaW50cygp
OwotICAgIGZvciAoYXV0byYgbmFtZUNvbnN0cmFpbnRQYWlyIDogbWFuZGF0b3J5Q29uc3RyYWlu
dHMpIHsKLSAgICAgICAgaWYgKCFpc1NhdGlzZmlhYmxlKHR5cGUsICpuYW1lQ29uc3RyYWludFBh
aXIudmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIG5hbWVDb25zdHJhaW50UGFpci5rZXk7Ci0g
ICAgfQorICAgIFN0cmluZyBpbnZhbGlkQ29uc3RyYWludCA9IGVtcHR5U3RyaW5nKCk7CisgICAg
Y29uc3RyYWludHMubWFuZGF0b3J5Q29uc3RyYWludHMoKS5maWx0ZXIoWyZdKGNvbnN0IE1lZGlh
Q29uc3RyYWludCYgY29uc3RyYWludCkgeworICAgICAgICBpZiAoIWlzU2F0aXNmaWFibGUodHlw
ZSwgY29uc3RyYWludCkpIHsKKyAgICAgICAgICAgIGludmFsaWRDb25zdHJhaW50ID0gY29uc3Ry
YWludC5uYW1lKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9KTsKKworICAgIHJldHVybiBpbnZhbGlkQ29uc3RyYWlu
dDsKIAotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01lZGlhQ29uc3RyYWludHNN
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9NZWRpYUNv
bnN0cmFpbnRzTW9jay5oCShyZXZpc2lvbiAyMDY0MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL01lZGlhQ29uc3RyYWludHNNb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDcgQEAgY2xhc3MgTWVkaWFDb25zdHJhaW50czsKIAogY2xhc3MgTWVkaWFDb25zdHJhaW50
c01vY2sgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIHZlcmlmeUNvbnN0cmFp
bnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMmKTsK
KyAgICBzdGF0aWMgY29uc3QgU3RyaW5nIHZlcmlmeUNvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGUsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMmKTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0
aW1lQXVkaW9Tb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL01vY2tSZWFsdGltZUF1ZGlvU291cmNlLmgJKHJldmlzaW9uIDIwNjQzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogCiAgICAgYm9v
bCBhcHBseVZvbHVtZShkb3VibGUpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29s
IGFwcGx5U2FtcGxlUmF0ZShkb3VibGUpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICBi
b29sIGFwcGx5U2FtcGxlU2l6ZShkb3VibGUpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICBib29sIGFwcGx5U2FtcGxlUmF0ZShpbnQpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICBib29sIGFwcGx5U2FtcGxlU2l6ZShpbnQpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAg
ICBib29sIGFwcGx5RWNob0NhbmNlbGxhdGlvbihib29sKSBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CiAKICAgICB2b2lkIHVwZGF0ZVNldHRpbmdzKFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5n
cyYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAJKHJldmlzaW9u
IDIwNjQzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgdm9p
ZCBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6Y3JlYQogICAgIFZlY3RvcjxSZWZQdHI8
UmVhbHRpbWVNZWRpYVNvdXJjZT4+IHZpZGVvU291cmNlczsKIAogICAgIGlmIChhdWRpb0NvbnN0
cmFpbnRzLmlzVmFsaWQoKSkgewotICAgICAgICBjb25zdCBTdHJpbmcmIGludmFsaWRRdWVyeSA9
IE1lZGlhQ29uc3RyYWludHNNb2NrOjp2ZXJpZnlDb25zdHJhaW50cyhSZWFsdGltZU1lZGlhU291
cmNlOjpBdWRpbywgYXVkaW9Db25zdHJhaW50cyk7CisgICAgICAgIGNvbnN0IFN0cmluZyBpbnZh
bGlkUXVlcnkgPSBNZWRpYUNvbnN0cmFpbnRzTW9jazo6dmVyaWZ5Q29uc3RyYWludHMoUmVhbHRp
bWVNZWRpYVNvdXJjZTo6QXVkaW8sIGF1ZGlvQ29uc3RyYWludHMpOwogICAgICAgICBpZiAoIWlu
dmFsaWRRdWVyeS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNsaWVudC0+ZmFpbGVkVG9DcmVh
dGVTdHJlYW1XaXRoQ29uc3RyYWludHNFcnJvcihpbnZhbGlkUXVlcnkpOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXI6OmNyZWEKICAgICB9CiAKICAgICBpZiAodmlkZW9Db25zdHJhaW50cy5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBpbnZhbGlkUXVlcnkgPSBNZWRpYUNvbnN0cmFpbnRz
TW9jazo6dmVyaWZ5Q29uc3RyYWludHMoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8sIHZpZGVv
Q29uc3RyYWludHMpOworICAgICAgICBjb25zdCBTdHJpbmcgaW52YWxpZFF1ZXJ5ID0gTWVkaWFD
b25zdHJhaW50c01vY2s6OnZlcmlmeUNvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZp
ZGVvLCB2aWRlb0NvbnN0cmFpbnRzKTsKICAgICAgICAgaWYgKCFpbnZhbGlkUXVlcnkuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBjbGllbnQtPmZhaWxlZFRvQ3JlYXRlU3RyZWFtV2l0aENvbnN0
cmFpbnRzRXJyb3IoaW52YWxpZFF1ZXJ5KTsKICAgICAgICAgICAgIHJldHVybjsK
</data>
<flag name="review"
          id="313174"
          type_id="1"
          status="+"
          setter="jer.noble"
    />
          </attachment>
      

    </bug>

</bugzilla>