<?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>164075</bug_id>
          
          <creation_ts>2016-10-27 13:40:56 -0700</creation_ts>
          <short_desc>[CSS Parser] Implement CSS variables</short_desc>
          <delta_ts>2016-10-27 15:08:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1245241</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-10-27 13:40:56 -0700</bug_when>
    <thetext>[CSS Parser] Implement CSS variables</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245244</commentid>
    <comment_count>1</comment_count>
      <attachid>293052</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-10-27 13:54:32 -0700</bug_when>
    <thetext>Created attachment 293052
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245245</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-27 13:55:48 -0700</bug_when>
    <thetext>Attachment 293052 did not pass style-queue:


ERROR: Source/WebCore/css/CSSVariableData.h:63:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245246</commentid>
    <comment_count>3</comment_count>
      <attachid>293053</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-10-27 13:57:08 -0700</bug_when>
    <thetext>Created attachment 293053
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245250</commentid>
    <comment_count>4</comment_count>
      <attachid>293053</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-27 14:08:47 -0700</bug_when>
    <thetext>Comment on attachment 293053
Patch

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

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:3425
&gt; -		9444CBE81D8861C20073A074 /* CSSVariableData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9444CBDD1D8861580073A074 /* CSSVariableData.h */; };
&gt; +		9444CBE81D8861C20073A074 /* CSSVariableData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9444CBDD1D8861580073A074 /* CSSVariableData.h */; settings = {ATTRIBUTES = (Private, ); }; };

Was this intentional?

&gt; Source/WebCore/css/CSSVariableData.cpp:109
&gt; +            AtomicString variableName =
&gt; +            block.consumeIncludingWhitespace().value().toAtomicString();

Typo. Accidental newline.

&gt; Source/WebCore/css/parser/CSSParser.cpp:1809
&gt; +        const CSSVariableDependentValue&amp; dependentValue = downcast&lt;CSSVariableDependentValue&gt;(value);

You could probably auto this.

&gt; Source/WebCore/css/parser/CSSParser.cpp:1814
&gt; +        CSSPropertyID dependentValuePropertyID = dependentValue.propertyID();

And this. etc.

&gt; Source/WebCore/css/parser/CSSParser.cpp:1858
&gt; +        const CSSVariableReferenceValue&amp; valueWithReferences = downcast&lt;CSSVariableReferenceValue&gt;(value);
&gt; +        const CSSVariableData* variableData = valueWithReferences.variableDataValue();

More autos.

&gt; Source/WebCore/css/parser/CSSParserImpl.cpp:95
&gt; -            CSSCustomPropertyValue* customValue = downcast&lt;CSSCustomPropertyValue&gt;(property.value());
&gt; -            const AtomicString&amp; name = customValue-&gt;name();
&gt; -            if (seenCustomProperties.contains(name))
&gt; +            auto&amp; name = downcast&lt;CSSCustomPropertyValue&gt;(*property.value()).name();
&gt; +            if (!seenCustomProperties.add(name).isNewEntry)
&gt;                  continue;
&gt; -            seenCustomProperties.add(name);
&gt; +            output[--unusedEntries] = property;
&gt;              continue;
&gt;          }

I don&apos;t understand this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245251</commentid>
    <comment_count>5</comment_count>
      <attachid>293054</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-10-27 14:12:07 -0700</bug_when>
    <thetext>Created attachment 293054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245263</commentid>
    <comment_count>6</comment_count>
      <attachid>293054</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-27 14:31:39 -0700</bug_when>
    <thetext>Comment on attachment 293054
Patch

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

&gt; Source/WebCore/css/CSSVariableData.cpp:108
&gt; +            AtomicString variableName =

This still needs fixing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245276</commentid>
    <comment_count>7</comment_count>
      <attachid>293062</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-10-27 14:46:03 -0700</bug_when>
    <thetext>Created attachment 293062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245288</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-10-27 15:08:11 -0700</bug_when>
    <thetext>Landed in r208006.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293052</attachid>
            <date>2016-10-27 13:54:32 -0700</date>
            <delta_ts>2016-10-27 13:57:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>59719</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODAwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyOCBAQAorMjAxNi0xMC0yNyAgRGF2ZSBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBbQ1NTIFBhcnNlcl0gSW1wbGVtZW50
IENTUyB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDA3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAgdG8g
dGhlIHByb2plY3QuCisKKyAgICAgICAgKiBjc3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y2hlY2tW
YXJpYWJsZXNGb3JDeWNsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyk6CisgICAgICAgICogY3NzL0NTU0N1c3Rv
bVByb3BlcnR5VmFsdWUuaDoKKyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFic3RyYWN0IHRoZSBv
bGQgYW5kIG5ldyBpbXBsZW1lbnRhdGlvbnMgb2YgQ1NTCisgICAgICAgIHZhcmlhYmxlcyBzbyB0
aGF0IHRoZSBjYWxsZXJzIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgaXQuCisKKyAgICAgICAg
KiBjc3MvQ1NTVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6OmVxdWFscyk6
CisgICAgICAgIE1ha2Ugc3VyZSBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlIGFuZCBDU1NQZW5k
aW5nU3Vic3RpdHV0aW9uVmFsdWUKKyAgICAgICAgaGF2ZSBlcXVhbHMgaW1wbGVtZW50ZWQuCisK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjppc0ludmFsaWRDdXN0b21Qcm9wZXJ0eVZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgVGhpcyBjb2RlIHdhcyBkZWFkIGFuZCBuZXZlciBjYWxsZWQu
CisKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVl
Ojppc0N1c3RvbVByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6Omhh
c1ZhcmlhYmxlUmVmZXJlbmNlcyk6CisgICAgICAgIEFkZCBhIGhlbHBlciBmdW5jdGlvbiBmb3Ig
YXNraW5nIGlmIGEgQ1NTVmFsdWUgaGFzIHZhcmlhYmxlIHJlZmVyZW5jZXMuCisgICAgICAgIFRo
aXMgYWJzdHJhY3RzIHRoZSBvbGQgYW5kIG5ldyBpbXBsZW1lbnRhdGlvbnMgc28gdGhhdCBjYWxs
ZXJzIGNhbgorICAgICAgICBhc2sgaWYgdGhlIHZhbHVlIGhhcyB2YXJpYWJsZXMgd2l0aG91dCBj
YXJpbmcgd2hpY2ggaW1wbGVtZW50YXRpb24gaXMKKyAgICAgICAgYmVpbmcgdXNlZC4KKworICAg
ICAgICAqIGNzcy9DU1NWYWx1ZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVM
aXN0OjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlz
dC5oOgorICAgICAgICBJbiBvcmRlciB0byBhYnN0cmFjdCB0aGUgb2xkIGFuZCBuZXcgdmFyaWFi
bGVzIGltcGxlbWVudGF0aW9ucywgY3VzdG9tCisgICAgICAgIHByb3BlcnRpZXMgbm93IHN0b3Jl
IENTU0N1c3RvbVByb3BlcnR5VmFsdWUgYXMgdGhlaXIgdmFsdWVzIGluc3RlYWQgb2YKKyAgICAg
ICAgcmF3IHZhbHVlcy4gVGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBiZSBwYXRjaGVk
IHRvIGRlYWwgd2l0aCB0aGlzCisgICAgICAgIHdyYXBwZXIgYmVpbmcgcHJlc2VudCBub3cuCisK
KyAgICAgICAgKiBjc3MvQ1NTVmFyaWFibGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1ZhcmlhYmxlRGF0YTo6Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVmFyaWFibGVEYXRhOjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlc1dpdGhSYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NWYXJpYWJsZURhdGE6OnJlc29sdmVWYXJpYWJsZUZhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxlRGF0YTo6cmVzb2x2ZVZhcmlhYmxlUmVm
ZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxlRGF0YTo6cmVzb2x2ZVZhcmlh
YmxlUmVmZXJlbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYXJpYWJsZURhdGE6OnJlc29s
dmVUb2tlblJhbmdlKToKKyAgICAgICAgKiBjc3MvQ1NTVmFyaWFibGVEYXRhLmg6CisgICAgICAg
IEltcGxlbWVudGF0aW9uIG9mIGN5Y2xlIGNoZWNraW5nIGFuZCB2YXJpYWJsZSByZXNvbHV0aW9u
LiBUaGUgbG9naWMgb2YKKyAgICAgICAgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgc2FtZSBh
cyB0aGUgb2xkLiBJdCB3YWxrcyBDU1NQYXJzZXJUb2tlbnMKKyAgICAgICAgaW5zdGVhZCBvZiB0
aGUgb2xkIENTU1BhcnNlciBzdHJ1Y3R1cmVzLgorCisgICAgICAgICogY3NzL0NTU1ZhcmlhYmxl
UmVmZXJlbmNlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFyaWFibGVSZWZlcmVu
Y2VWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCk6CisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBzZXJpYWxp
emF0aW9uIGNhY2hpbmcsIGp1c3QgbGlrZSB0aGUgb2xkIGltcGxlbWVudGF0aW9uCisgICAgICAg
IGhhZCBpbiBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlLgorCisgICAgICAgIChXZWJDb3JlOjpD
U1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlOjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyk6CisgICAg
ICAgICogY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuaDoKKyAgICAgICAgQWRkIGN5Y2xl
IGNoZWNraW5nIGFuZCB2YXJpYWJsZSByZXNvbHV0aW9uIGhlbHBlciBmdW5jdGlvbnMuCisKKyAg
ICAgICAgKiBjc3MvQ1NTVmFyaWFibGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NW
YXJpYWJsZVZhbHVlOjpidWlsZFBhcnNlclZhbHVlTGlzdFN1YnN0aXR1dGluZ1ZhcmlhYmxlcyk6
CisgICAgICAgIFBhdGNoZWQgdG8gYWNjb3VudCBmb3IgdGhlIGNoYW5nZSBpbiBzdG9yYWdlIG9m
IGN1c3RvbSBwcm9wZXJ0aWVzIHRvCisgICAgICAgIGhhdmUgY3VzdG9tIHByb3BlcnR5IHZhbHVl
IHdyYXBwZXJzLgorCisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydGllcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6OmdldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpib3JkZXJTcGFjaW5nVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpnZXRTaG9ydGhhbmRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6OmdldENvbW1vblZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydGllczo6Z2V0UHJvcGVydHlDU1NWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6OmFzVGV4dCk6CisgICAgICAgIENsZWFuIHVwIHRo
ZSByZXNvbHV0aW9uIG9mIHBlbmRpbmcgc3Vic3RpdHV0aW9uIHZhbHVlcy4gSW5zdGVhZCBvZiBo
YWNraW5nCisgICAgICAgIGl0IGludG8gZXZlcnkgcG9zc2libGUgU3R5bGVTaG9ydGhhbmRQcm9w
ZXJ0eSBjcmF3bGluZyBmdW5jdGlvbiwgb2J0YWluCisgICAgICAgIHRoZSBzaG9ydGhhbmQgZm9y
IHRoZSBwcm9wZXJ0eSB1cCBmcm9udCwgYWNjZXNzIHRoZSBmaXJzdCBsb25naGFuZCwgYW5kCisg
ICAgICAgIGlmIHdlIHNlZSBhIHBlbmRpbmcgc3Vic3RpdHV0aW9uIHZhbHVlLCBwZXJmb3JtIHRo
ZSBzdWJzdGl0dXRpb24uCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6YWRkTWF0Y2hlZFByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlZFZhcmlhYmxlVmFsdWUp
OgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciB0aGUgbmV3IGltcGxlbWVudGF0aW9uIGluIGFsbCB0aGUgc2FtZSBwbGFjZXMgYXMgdGhlIG9s
ZC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VJbmxpbmVTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUpOiBE
ZWxldGVkLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6CisgICAgICAgIFJlbmFt
ZSBwYXJzZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUgdG8gcGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJl
ZmVyZW5jZXMsCisgICAgICAgIHNpbmNlIGl0IGlzIG9wZXJhdGluZyBvbiB0aHJlZSBkaXN0aW5j
dCB2YWx1ZSB0eXBlcyBub3cuIFR1cm4gb24gbmV3CisgICAgICAgIHBhcnNlciBzdXBwb3J0IGZv
ciBwYXJzZUlubGluZVN0eWxlRGVjbGFyYXRpb24uCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1BhcnNlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJJbXBsOjpwYXJzZVZhcmlhYmxlVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VySW1wbDo6cGFyc2VDdXN0b21Qcm9wZXJ0
eVNldCk6IERlbGV0ZWQuCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmg6Cisg
ICAgICAgIFJlbW92ZSBwYXJzZXIgZnVuY3Rpb25zIHRoYXQgYXJlbid0IHJlbGV2YW50IHRvIG91
ciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBvZiBDU1MgdmFyaWFibGVzLgorCisgICAgICAgICog
Y3NzL3BhcnNlci9DU1NWYXJpYWJsZVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjbGFz
c2lmeVZhcmlhYmxlUmFuZ2UpOgorICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIENTUzQgJ3Jl
dmVydCcga2V5d29yZCB0byB0aGUgbmV3IHZhcmlhYmxlIHBhcnNlci4KKworICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6Y2hlY2tWYXJpYWJsZXNJbkN1c3RvbVByb3BlcnRpZXMpOgorICAgICAgICBNb2RpZmll
ZCB0byBzdG9yZSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlcyBhcyB0aGUgdmFsdWVzIGFsd2F5cyBu
b3cgYW5kCisgICAgICAgIHRvIHVzZSB0aGUgbWV0aG9kIGFic3RyYWN0aW9ucyBvbiBDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlIHRvIHJlc29sdmUKKyAgICAgICAgY3ljbGVzIGFuZCBwZXJmb3JtIHN1
YnN0aXR1dGlvbnMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpnZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhOjpzZXRDdXN0b21Qcm9wZXJ0
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhOjpnZXRD
dXN0b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgVGlnaHRlbiB1cCB0aGUgbWFwIHRvIHN0b3Jl
IENTU0N1c3RvbVByb3BlcnR5VmFsdWUgaW5zdGVhZCBvZiBqdXN0CisgICAgICAgIENTU1ZhbHVl
LgorCiAyMDE2LTEwLTI3ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBCdWZmZXJTb3VyY2Ugc2hvdWxkIGJlaGF2ZSBhcyBhbiB1bmlvbgpJbmRleDogU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjY5LDYgKzEyNjksNyBAQCBzZXQoV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcAogICAgIGNzcy9DU1NDdXJz
b3JJbWFnZVZhbHVlLmNwcAogICAgIGNzcy9DU1NDdXN0b21JZGVudFZhbHVlLmNwcAorICAgIGNz
cy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcAogICAgIGNzcy9DU1NEZWZhdWx0U3R5bGVTaGVl
dHMuY3BwCiAgICAgY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCiAgICAgY3NzL0ZvbnRGYWNl
U2V0LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIyLDcgKzM0
MjIsNyBAQAogCQk5NDQ0Q0JFMzFEODg2MTk4MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDQ0
Q0JFMjFEODg2MTU4MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1ZS5jcHAgKi87IH07CiAJ
CTk0NDRDQkU0MUQ4ODYxOTkwMDczQTA3NCAvKiBDU1NDdXN0b21JZGVudFZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDQ0Q0JFMTFEODg2MTU4
MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1ZS5oICovOyB9OwogCQk5NDQ0Q0JFNzFEODg2
MUMyMDA3M0EwNzQgLyogQ1NTVmFyaWFibGVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NDRDQkRFMUQ4ODYxNTgwMDczQTA3NCAvKiBDU1NW
YXJpYWJsZURhdGEuY3BwICovOyB9OwotCQk5NDQ0Q0JFODFEODg2MUMyMDA3M0EwNzQgLyogQ1NT
VmFyaWFibGVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NDQ0Q0JERDFEODg2MTU4MDA3M0EwNzQgLyogQ1NTVmFyaWFibGVEYXRhLmggKi87IH07
CisJCTk0NDRDQkU4MUQ4ODYxQzIwMDczQTA3NCAvKiBDU1NWYXJpYWJsZURhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NDRDQkREMUQ4ODYxNTgw
MDczQTA3NCAvKiBDU1NWYXJpYWJsZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk5NDQ0Q0JFOTFEODg2MUNBMDA3M0EwNzQgLyogQ1NTVmFy
aWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NDQ0Q0JEQzFEODg2MTU4MDA3M0EwNzQgLyogQ1NTVmFyaWFibGVSZWZl
cmVuY2VWYWx1ZS5jcHAgKi87IH07CiAJCTk0NDRDQkVBMUQ4ODYxQ0EwMDczQTA3NCAvKiBDU1NW
YXJpYWJsZVJlZmVyZW5jZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NDQ0Q0JEQjFEODg2MTU4MDA3M0EwNzQgLyogQ1NTVmFyaWFibGVSZWZl
cmVuY2VWYWx1ZS5oICovOyB9OwogCQk5NDZEMzcyRDFENkNCMjk0MDA3NzA4NEYgLyogQ1NTUGFy
c2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0
NkQzNzI4MUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXIuY3BwICovOyB9OwpAQCAtMzQ0Myw3
ICszNDQzLDcgQEAKIAkJOTQ2RDM3NDkxRDZEMDYyODAwNzcwODRGIC8qIENTU01hcmt1cC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0NzFE
NkQwNjBDMDA3NzA4NEYgLyogQ1NTTWFya3VwLmNwcCAqLzsgfTsKIAkJOTQ2RDM3NEExRDZEMDYy
ODAwNzcwODRGIC8qIENTU01hcmt1cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTQ2RDM3NDgxRDZEMDYwQzAwNzcwODRGIC8qIENTU01hcmt1cC5oICov
OyB9OwogCQk5NDZEMzc0RDFENkQwOEE2MDA3NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW5SYW5nZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0
QjFENkQwN0Y1MDA3NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW5SYW5nZS5jcHAgKi87IH07Ci0JCTk0
NkQzNzRFMUQ2RDA4QUEwMDc3MDg0RiAvKiBDU1NQYXJzZXJUb2tlblJhbmdlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0QzFENkQwN0Y1MDA3
NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW5SYW5nZS5oICovOyB9OworCQk5NDZEMzc0RTFENkQwOEFB
MDA3NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW5SYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3NEMxRDZEMDdGNTAwNzcwODRGIC8qIENTU1Bh
cnNlclRva2VuUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5NDkzQjZCRTFENzRCNDEyMDA4OEU3ODAgLyogTWVkaWFRdWVyeUJsb2NrV2F0
Y2hlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NDkzQjZCNjFENzRCMzk1MDA4OEU3ODAgLyogTWVkaWFRdWVyeUJsb2NrV2F0Y2hlci5jcHAgKi87
IH07CiAJCTk0OTNCNkJGMUQ3NEI0MTIwMDg4RTc4MCAvKiBNZWRpYVF1ZXJ5QmxvY2tXYXRjaGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDkzQjZC
NzFENzRCMzk1MDA4OEU3ODAgLyogTWVkaWFRdWVyeUJsb2NrV2F0Y2hlci5oICovOyB9OwogCQk5
NDkzQjZDMDFENzRCNDEyMDA4OEU3ODAgLyogTWVkaWFRdWVyeVBhcnNlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDkzQjZCODFENzRCMzk1MDA4
OEU3ODAgLyogTWVkaWFRdWVyeVBhcnNlci5jcHAgKi87IH07CkBAIC0zNDU1LDYgKzM0NTUsNyBA
QAogCQk5NDlDNzcwODFENkU0OTg3MDBDMERFNEYgLyogQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0OUM3
NzA2MUQ2RTQ4RUQwMEMwREU0RiAvKiBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIuY3BwICovOyB9
OwogCQk5NDlDNzcwOTFENkU0OTg3MDBDMERFNEYgLyogQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDlDNzcw
NzFENkU0OEVEMDBDMERFNEYgLyogQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyLmggKi87IH07CiAJ
CTk0OUM3NzBCMUQ2RTQ5RUQwMEMwREU0RiAvKiBDU1NQYXJzZXJPYnNlcnZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ5Qzc3MEExRDZFNDlDMzAw
QzBERTRGIC8qIENTU1BhcnNlck9ic2VydmVyLmggKi87IH07CisJCTk0RDRBQzYyMURDMjRDOEUw
MDgwRjAyRCAvKiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0RDRBQzYxMURDMjRDODEwMDgwRjAyRCAvKiBD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcCAqLzsgfTsKIAkJOTRERTVDN0UxRDc4Q0IyRTAwMTY0
RjJBIC8qIENTU1BhcnNlcklkaW9tcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NERFNUM3RDFENzhDQjI1MDAxNjRGMkEgLyogQ1NTUGFyc2VySWRp
b21zLmNwcCAqLzsgfTsKIAkJOTRERTVDODExRDdGM0ExNDAwMTY0RjJBIC8qIENTU0F0UnVsZUlE
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0REU1
QzdGMUQ3RjM5RDAwMDE2NEYyQSAvKiBDU1NBdFJ1bGVJRC5jcHAgKi87IH07CiAJCTk0REU1Qzgy
MUQ3RjNBMTQwMDE2NEYyQSAvKiBDU1NBdFJ1bGVJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTRERTVDODAxRDdGMzlEMDAwMTY0RjJBIC8qIENTU0F0
UnVsZUlELmggKi87IH07CkBAIC0xMDg0NCw2ICsxMDg0NSw3IEBACiAJCTk0OUM3NzA2MUQ2RTQ4
RUQwMEMwREU0RiAvKiBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyLmNwcDsgcGF0
aCA9IHBhcnNlci9DU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5NDlDNzcwNzFENkU0OEVEMDBDMERFNEYgLyogQ1NTUGFyc2VyT2JzZXJ2
ZXJXcmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENTU1BhcnNlck9i
c2VydmVyV3JhcHBlci5oOyBwYXRoID0gcGFyc2VyL0NTU1BhcnNlck9ic2VydmVyV3JhcHBlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NDlDNzcwQTFENkU0OUMzMDBDMERFNEYg
LyogQ1NTUGFyc2VyT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q1NTUGFyc2VyT2JzZXJ2ZXIuaDsgcGF0aCA9IHBhcnNlci9DU1NQYXJzZXJPYnNlcnZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NEQ0QUM2MTFEQzI0QzgxMDA4MEYwMkQgLyog
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTRERTVDN0QxRDc4Q0IyNTAwMTY0RjJBIC8qIENTU1BhcnNlcklkaW9tcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDU1NQYXJzZXJJZGlvbXMuY3Bw
OyBwYXRoID0gcGFyc2VyL0NTU1BhcnNlcklkaW9tcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk0REU1QzdGMUQ3RjM5RDAwMDE2NEYyQSAvKiBDU1NBdFJ1bGVJRC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDU1NBdFJ1bGVJRC5jcHA7IHBhdGgg
PSBwYXJzZXIvQ1NTQXRSdWxlSUQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
NERFNUM4MDFEN0YzOUQwMDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQ1NTQXRSdWxlSUQuaDsgcGF0aCA9IHBhcnNlci9DU1NBdFJ1bGVJ
RC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI4NTksNiArMjI4NjEsNyBAQAog
CQkJCUFBMDk3OEVFMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggKi8s
CiAJCQkJOTQ0NENCRTIxRDg4NjE1ODAwNzNBMDc0IC8qIENTU0N1c3RvbUlkZW50VmFsdWUuY3Bw
ICovLAogCQkJCTk0NDRDQkUxMUQ4ODYxNTgwMDczQTA3NCAvKiBDU1NDdXN0b21JZGVudFZhbHVl
LmggKi8sCisJCQkJOTRENEFDNjExREMyNEM4MTAwODBGMDJEIC8qIENTU0N1c3RvbVByb3BlcnR5
VmFsdWUuY3BwICovLAogCQkJCUJDNzc5RTEzMUJCMjE1QkIwMENBQThCRiAvKiBDU1NDdXN0b21Q
cm9wZXJ0eVZhbHVlLmggKi8sCiAJCQkJNEE5Q0M4MTUxNkJCOUFDNjAwRUM2NDVBIC8qIENTU0Rl
ZmF1bHRTdHlsZVNoZWV0cy5jcHAgKi8sCiAJCQkJNEE5Q0M4MTYxNkJCOUFDNjAwRUM2NDVBIC8q
IENTU0RlZmF1bHRTdHlsZVNoZWV0cy5oICovLApAQCAtMjk2NTcsNiArMjk2NjAsNyBAQAogCQkJ
CUIyRkEzRDVBMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0NsaXBQYXRoRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMkZBM0Q1QzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdDb2xvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q1RTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5
NEQ0QUM2MjFEQzI0QzhFMDA4MEYwMkQgLyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMkZBM0Q2MDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdDdXJzb3JF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDYyMEFCNzVBNkYwMDBFNUFDNCAv
KiBKU1NWR0RlZnNFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDY0MEFCNzVB
NkYwMDBFNUFDNCAvKiBKU1NWR0Rlc2NFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL0NTU0N1c3RvbVByb3BlcnR5VmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NT
Q3VzdG9tUHJvcGVydHlWYWx1ZS5oIgorCisjaW5jbHVkZSAiQ1NTUGFyc2VyVmFsdWVzLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjaGVj
a1ZhcmlhYmxlc0ZvckN5Y2xlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEN1c3RvbVByb3Bl
cnR5VmFsdWVNYXAmIGN1c3RvbVByb3BlcnRpZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgc2Vl
blByb3BlcnRpZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgaW52YWxpZFByb3BlcnRpZXMpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGNvbnRhaW5zVmFyaWFibGVzKCkpOworICAgIGlmIChtX2RlcHJl
Y2F0ZWRWYWx1ZSAmJiBtX2RlcHJlY2F0ZWRWYWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVl
KCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlPigq
bV9kZXByZWNhdGVkVmFsdWUpLmNoZWNrVmFyaWFibGVzRm9yQ3ljbGVzKG5hbWUsIGN1c3RvbVBy
b3BlcnRpZXMsIHNlZW5Qcm9wZXJ0aWVzLCBpbnZhbGlkUHJvcGVydGllcyk7CisgICAgaWYgKG1f
dmFsdWUpCisgICAgICAgIHJldHVybiBtX3ZhbHVlLT5jaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyhu
YW1lLCBjdXN0b21Qcm9wZXJ0aWVzLCBzZWVuUHJvcGVydGllcywgaW52YWxpZFByb3BlcnRpZXMp
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OnJl
c29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoY29uc3QgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3Vz
dG9tUHJvcGVydGllcywgVmVjdG9yPFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPj4mIHJlc29s
dmVkVmFsdWVzKSBjb25zdAoreworICAgIEFTU0VSVChjb250YWluc1ZhcmlhYmxlcygpKTsKKyAg
ICBpZiAobV9kZXByZWNhdGVkVmFsdWUgJiYgbV9kZXByZWNhdGVkVmFsdWUtPmlzVmFyaWFibGVE
ZXBlbmRlbnRWYWx1ZSgpKSB7CisgICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCBwYXJzZXJMaXN0
OworICAgICAgICBpZiAoIWRvd25jYXN0PENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWU+KCptX2Rl
cHJlY2F0ZWRWYWx1ZSkudmFsdWVMaXN0KCkuYnVpbGRQYXJzZXJWYWx1ZUxpc3RTdWJzdGl0dXRp
bmdWYXJpYWJsZXMoJnBhcnNlckxpc3QsIGN1c3RvbVByb3BlcnRpZXMpKQorICAgICAgICAgICAg
cmVzb2x2ZWRWYWx1ZXMuYXBwZW5kKENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShtX25h
bWUsIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZUludmFsaWQoKSkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXNvbHZlZFZhbHVlcy5hcHBlbmQoQ1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZTo6Y3JlYXRlKG1fbmFtZSwgQ1NTVmFsdWVMaXN0OjpjcmVhdGVGcm9tUGFyc2VyVmFsdWVM
aXN0KHBhcnNlckxpc3QpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYg
KCFtX3ZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKG1fdmFsdWUtPm5l
ZWRzVmFyaWFibGVSZXNvbHV0aW9uKCkpOworICAgIFJlZlB0cjxDU1NWYXJpYWJsZURhdGE+IHJl
c29sdmVkRGF0YSA9IG1fdmFsdWUtPnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoY3VzdG9tUHJv
cGVydGllcyk7CisgICAgaWYgKHJlc29sdmVkRGF0YSkKKyAgICAgICAgcmVzb2x2ZWRWYWx1ZXMu
YXBwZW5kKENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZVdpdGhWYXJpYWJsZURhdGEobV9u
YW1lLCByZXNvbHZlZERhdGEucmVsZWFzZU5vbk51bGwoKSkpOworICAgIGVsc2UKKyAgICAgICAg
cmVzb2x2ZWRWYWx1ZXMuYXBwZW5kKENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShtX25h
bWUsIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZUludmFsaWQoKSkpOworfQorCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmgJKHJldmlz
aW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNTU1ZhbHVl
LmgiCiAjaW5jbHVkZSAiQ1NTVmFyaWFibGVEYXRhLmgiCisjaW5jbHVkZSAiQ1NTVmFyaWFibGVE
ZXBlbmRlbnRWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNzMsMTMgKzc0LDE3IEBAIHB1YmxpYzoKIAogICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIAot
ICAgIC8vIEZJWE1FOiBTaG91bGQgYXJndWFibHkgaW1wbGVtZW50IGVxdWFscyBvbiBvdXIgaW50
ZXJuYWwgdmFsdWVzLCBidXQgc2VyaWFsaXphdGlvbiB0byBjb21wYXJlIGlzIHByb2JhYmx5IGZp
bmUuCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fbmFtZSA9PSBvdGhlci5tX25hbWUgJiYgY3VzdG9tQ1NTVGV4dCgp
ID09IG90aGVyLmN1c3RvbUNTU1RleHQoKTsgfQorICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU0N1
c3RvbVByb3BlcnR5VmFsdWUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX25hbWUgPT0gb3RoZXIu
bV9uYW1lICYmIG1fZGVwcmVjYXRlZFZhbHVlID09IG90aGVyLm1fZGVwcmVjYXRlZFZhbHVlICYm
IG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZSAmJiBtX3ZhbHVlSWQgPT0gb3RoZXIubV92YWx1ZUlk
OyB9CiAKLSAgICBib29sIGlzSW52YWxpZCgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CiAg
ICAgYm9vbCBjb250YWluc1ZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNWYXJp
YWJsZXM7IH0KKyAgICBib29sIGNoZWNrVmFyaWFibGVzRm9yQ3ljbGVzKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYsIEhhc2hTZXQ8QXRvbWljU3RyaW5n
PiYgc2VlblByb3BlcnRpZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgaW52YWxpZFByb3BlcnRp
ZXMpIGNvbnN0OworCisgICAgdm9pZCByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGNvbnN0IEN1
c3RvbVByb3BlcnR5VmFsdWVNYXAmLCBWZWN0b3I8UmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+
PiYpIGNvbnN0OwogCiAgICAgY29uc3QgUmVmUHRyPENTU1ZhbHVlPiBkZXByZWNhdGVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX2RlcHJlY2F0ZWRWYWx1ZS5nZXQoKTsgfQorICAgIAorICAgIENT
U1ZhbHVlSUQgdmFsdWVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVJZDsgfQorICAgIENTU1Zh
cmlhYmxlRGF0YSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CiAKIHBy
aXZhdGU6CiAgICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUsIFJlZjxDU1NWYWx1ZT4mJiB2YWx1ZSkKQEAgLTg3LDcgKzkyLDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgLCBtX25hbWUobmFtZSkKICAgICAgICAgLCBtX2RlcHJlY2F0ZWRWYWx1ZShXVEZNb3Zl
KHZhbHVlKSkKICAgICAgICAgLCBtX2NvbnRhaW5zVmFyaWFibGVzKG1fZGVwcmVjYXRlZFZhbHVl
LT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSkKLSAgICAgICAgLCBtX3NlcmlhbGl6ZWQoZmFs
c2UpCiAgICAgewogICAgIH0KICAgICAKQEAgLTEyNCw3ICsxMjgsNyBAQCBwcml2YXRlOgogICAg
IAogICAgIG11dGFibGUgU3RyaW5nIG1fc3RyaW5nVmFsdWU7CiAgICAgYm9vbCBtX2NvbnRhaW5z
VmFyaWFibGVzIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIGJvb2wgbV9zZXJpYWxpemVkOworICAg
IG11dGFibGUgYm9vbCBtX3NlcmlhbGl6ZWQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCShyZXZpc2lvbiAyMDc5MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDUsNiArMjQ1LDEwIEBAIGJvb2wgQ1NTVmFsdWU6OmVxdWFscyhjb25zdCBDU1NWYWx1ZSYgb3QK
ICAgICAgICAgICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVzPENTU0NvbnRlbnREaXN0cmlidXRp
b25WYWx1ZT4oKnRoaXMsIG90aGVyKTsKICAgICAgICAgY2FzZSBDdXN0b21Qcm9wZXJ0eUNsYXNz
OgogICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZXM8Q1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZT4oKnRoaXMsIG90aGVyKTsKKyAgICAgICAgY2FzZSBWYXJpYWJsZVJlZmVyZW5jZUNsYXNz
OgorICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZXM8Q1NTVmFyaWFibGVSZWZlcmVu
Y2VWYWx1ZT4oKnRoaXMsIG90aGVyKTsKKyAgICAgICAgY2FzZSBQZW5kaW5nU3Vic3RpdHV0aW9u
VmFsdWVDbGFzczoKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVzPENTU1BlbmRp
bmdTdWJzdGl0dXRpb25WYWx1ZT4oKnRoaXMsIG90aGVyKTsKICAgICAgICAgY2FzZSBWYXJpYWJs
ZURlcGVuZGVudENsYXNzOgogICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZXM8Q1NT
VmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4oKnRoaXMsIG90aGVyKTsKICAgICAgICAgY2FzZSBWYXJp
YWJsZUNsYXNzOgpAQCAtNTUyLDExICs1NTYsNiBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1ZhbHVl
OjpjbG9uZUZvckNTU09NCiAgICAgfQogfQogCi1ib29sIENTU1ZhbHVlOjppc0ludmFsaWRDdXN0
b21Qcm9wZXJ0eVZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0eVZh
bHVlKCkgJiYgZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnRoaXMpLmlzSW52YWxp
ZCgpOwotfQotCiBib29sIENTU1ZhbHVlOjp0cmVhdEFzSW5oZXJpdGVkVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlEKSBjb25zdAogewogICAgIHJldHVybiBjbGFzc1R5cGUoKSA9PSBJbmhl
cml0ZWRDbGFzcyB8fCAoY2xhc3NUeXBlKCkgPT0gVW5zZXRDbGFzcyAmJiBDU1NQcm9wZXJ0eTo6
aXNJbmhlcml0ZWRQcm9wZXJ0eShwcm9wZXJ0eUlEKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUu
aAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiBjbGFz
cyBTdHlsZVNoZWV0Q29udGVudHM7CiAKQEAgLTc4LDcgKzc5LDYgQEAgcHVibGljOgogICAgIGJv
b2wgaXNDcm9zc2ZhZGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NUeXBlID09IENyb3Nz
ZmFkZUNsYXNzOyB9CiAgICAgYm9vbCBpc0N1cnNvckltYWdlVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX2NsYXNzVHlwZSA9PSBDdXJzb3JJbWFnZUNsYXNzOyB9CiAgICAgYm9vbCBpc0N1c3RvbVBy
b3BlcnR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzVHlwZSA9PSBDdXN0b21Qcm9wZXJ0
eUNsYXNzOyB9Ci0gICAgYm9vbCBpc0ludmFsaWRDdXN0b21Qcm9wZXJ0eVZhbHVlKCkgY29uc3Q7
CiAgICAgYm9vbCBpc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Ns
YXNzVHlwZSA9PSBWYXJpYWJsZURlcGVuZGVudENsYXNzOyB9CiAgICAgYm9vbCBpc1ZhcmlhYmxl
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzVHlwZSA9PSBWYXJpYWJsZUNsYXNzOyB9CiAg
ICAgYm9vbCBpc0Z1bmN0aW9uVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzVHlwZSA9PSBG
dW5jdGlvbkNsYXNzOyB9CkBAIC0xMjksNiArMTI5LDggQEAgcHVibGljOgogICAgIGJvb2wgaXND
dXN0b21JZGVudFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1R5cGUgPT0gQ3VzdG9tSWRl
bnRDbGFzczsgfQogICAgIGJvb2wgaXNWYXJpYWJsZVJlZmVyZW5jZVZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGFzc1R5cGUgPT0gVmFyaWFibGVSZWZlcmVuY2VDbGFzczsgfQogICAgIGJvb2wg
aXNQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzVHlwZSA9
PSBQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWVDbGFzczsgfQorICAgIAorICAgIGJvb2wgaGFzVmFy
aWFibGVSZWZlcmVuY2VzKCkgY29uc3QgeyByZXR1cm4gaXNWYXJpYWJsZURlcGVuZGVudFZhbHVl
KCkgfHwgaXNWYXJpYWJsZVJlZmVyZW5jZVZhbHVlKCkgfHwgaXNQZW5kaW5nU3Vic3RpdHV0aW9u
VmFsdWUoKTsgfQogCiAgICAgYm9vbCBpc0NTU09NU2FmZSgpIGNvbnN0IHsgcmV0dXJuIG1faXND
U1NPTVNhZmU7IH0KICAgICBib29sIGlzU3VidHlwZUV4cG9zZWRUb0NTU09NKCkgY29uc3QKQEAg
LTMwMCw3ICszMDIsNyBAQCBpbmxpbmUgYm9vbCBjb21wYXJlQ1NTVmFsdWUoY29uc3QgUmVmPENT
CiAgICAgcmV0dXJuIGZpcnN0LmdldCgpLmVxdWFscyhzZWNvbmQpOwogfQogCi10eXBlZGVmIEhh
c2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8Q1NTVmFsdWU+PiBDdXN0b21Qcm9wZXJ0eVZhbHVl
TWFwOwordHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU+PiBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCShyZXZpc2lvbiAyMDc5
MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlTGlzdC5oIgogCisjaW5jbHVkZSAiQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIgogI2luY2x1
ZGUgIkNTU0Z1bmN0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXJWYWx1ZXMuaCIKICNp
bmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgpAQCAtMjA2LDggKzIwNyw4IEBAIGJvb2wgQ1NT
VmFsdWVMaXN0OjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2wKICAgICAgICAgICAgIGF1dG8mIHZhcmlh
YmxlVmFsdWUgPSBkb3duY2FzdDxDU1NWYXJpYWJsZVZhbHVlPigqdmFsdWUpOwogICAgICAgICAg
ICAgaWYgKHNlZW5Qcm9wZXJ0aWVzLmNvbnRhaW5zKHZhcmlhYmxlVmFsdWUubmFtZSgpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlID0gY3VzdG9tUHJvcGVydGllcy5nZXQodmFyaWFibGVWYWx1ZS5uYW1lKCkpOwotICAg
ICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSAm
JiAhZG93bmNhc3Q8Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4oKnZhbHVlKS5jaGVja1Zhcmlh
Ymxlc0ZvckN5Y2xlcyh2YXJpYWJsZVZhbHVlLm5hbWUoKSwgY3VzdG9tUHJvcGVydGllcywgc2Vl
blByb3BlcnRpZXMsIGludmFsaWRQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgIFJlZlB0cjxDU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlPiB2YWx1ZSA9IGN1c3RvbVByb3BlcnRpZXMuZ2V0KHZhcmlhYmxl
VmFsdWUubmFtZSgpKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+Y29udGFpbnNW
YXJpYWJsZXMoKSAmJiAhZG93bmNhc3Q8Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4oKih2YWx1
ZS0+ZGVwcmVjYXRlZFZhbHVlKCkpKS5jaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyh2YXJpYWJsZVZh
bHVlLm5hbWUoKSwgY3VzdG9tUHJvcGVydGllcywgc2VlblByb3BlcnRpZXMsIGludmFsaWRQcm9w
ZXJ0aWVzKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIC8v
IEhhdmUgdG8gY2hlY2sgdGhlIGZhbGxiYWNrIHZhbHVlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYWx1ZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFsdWVMaXN0LmgJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NW
YWx1ZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIENTU0N1c3RvbVByb3BlcnR5VmFsdWU7CiBzdHJ1Y3QgQ1NTUGFy
c2VyVmFsdWU7CiBjbGFzcyBDU1NQYXJzZXJWYWx1ZUxpc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NWYXJpYWJsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYXJpYWJsZURhdGEuY3BwCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVmFyaWFibGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU1ZhcmlhYmxlRGF0YS5oIgog
CisjaW5jbHVkZSAiQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1BhcnNl
ci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlclRva2VuUmFuZ2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CkBAIC04MSw0ICs4MiwxMDEgQEAgQ1NTVmFyaWFibGVEYXRhOjpD
U1NWYXJpYWJsZURhdGEoY29uc3QgQwogICAgIGNvbnN1bWVBbmRVcGRhdGVUb2tlbnMocmFuZ2Up
OwogfQogCitib29sIENTU1ZhcmlhYmxlRGF0YTo6Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9w
ZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0
b21pY1N0cmluZz4mIGludmFsaWRQcm9wZXJ0aWVzKSBjb25zdAoreworICAgIGlmIChpbnZhbGlk
UHJvcGVydGllcy5jb250YWlucyhuYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBuZXdTZWVuUHJvcGVydGllcyA9IHNlZW5Qcm9wZXJ0
aWVzOworICAgIG5ld1NlZW5Qcm9wZXJ0aWVzLmFkZChuYW1lKTsKKyAgICAKKyAgICBib29sIHZh
bGlkID0gY2hlY2tWYXJpYWJsZXNGb3JDeWNsZXNXaXRoUmFuZ2UobV90b2tlbnMsIGN1c3RvbVBy
b3BlcnRpZXMsIG5ld1NlZW5Qcm9wZXJ0aWVzLCBpbnZhbGlkUHJvcGVydGllcyk7CisgICAgaWYg
KCF2YWxpZCkKKyAgICAgICAgaW52YWxpZFByb3BlcnRpZXMuYWRkKG5hbWUpOworICAgIAorICAg
IHJldHVybiB2YWxpZDsKK30KKyAgICAKK2Jvb2wgQ1NTVmFyaWFibGVEYXRhOjpjaGVja1Zhcmlh
Ymxlc0ZvckN5Y2xlc1dpdGhSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBDdXN0b21Q
cm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4m
IHNlZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGludmFsaWRQcm9wZXJ0aWVz
KSBjb25zdAoreworICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgeworICAgICAgICBpZiAocmFu
Z2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZVZhcikgeworICAgICAgICAgICAgQ1NT
UGFyc2VyVG9rZW5SYW5nZSBibG9jayA9IHJhbmdlLmNvbnN1bWVCbG9jaygpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBibG9jay5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgICAgICAgICAg
QVNTRVJUKGJsb2NrLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbik7CisgICAgICAgICAgICBB
dG9taWNTdHJpbmcgdmFyaWFibGVOYW1lID0KKyAgICAgICAgICAgIGJsb2NrLmNvbnN1bWVJbmNs
dWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50b0F0b21pY1N0cmluZygpOworICAgICAgICAgICAg
QVNTRVJUKGJsb2NrLmF0RW5kKCkgfHwgYmxvY2sucGVlaygpLnR5cGUoKSA9PSBDb21tYVRva2Vu
KTsKKyAgICAgICAgICAgIGlmIChzZWVuUHJvcGVydGllcy5jb250YWlucyh2YXJpYWJsZU5hbWUp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgUmVmUHRyPENT
U0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVlID0gY3VzdG9tUHJvcGVydGllcy5nZXQodmFyaWFi
bGVOYW1lKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+Y29udGFpbnNWYXJpYWJs
ZXMoKSAmJiAhdmFsdWUtPmNoZWNrVmFyaWFibGVzRm9yQ3ljbGVzKHZhcmlhYmxlTmFtZSwgY3Vz
dG9tUHJvcGVydGllcywgc2VlblByb3BlcnRpZXMsIGludmFsaWRQcm9wZXJ0aWVzKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChyYW5nZS5wZWVrKCku
dHlwZSgpID09IENvbW1hVG9rZW4pIHsKKyAgICAgICAgICAgICAgICAvLyBGYWxsYmFjay4KKyAg
ICAgICAgICAgICAgICByYW5nZS5jb25zdW1lKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNo
ZWNrVmFyaWFibGVzRm9yQ3ljbGVzV2l0aFJhbmdlKGJsb2NrLCBjdXN0b21Qcm9wZXJ0aWVzLCBz
ZWVuUHJvcGVydGllcywgaW52YWxpZFByb3BlcnRpZXMpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIHJhbmdlLmNvbnN1bWUoKTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgQ1NTVmFyaWFibGVEYXRhOjpyZXNvbHZlVmFyaWFibGVGYWxsYmFj
ayhjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBDU1NQYXJz
ZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgaWYgKHJhbmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBDb21tYVRva2VuKTsKKyAgICByYW5nZS5jb25z
dW1lKCk7CisgICAgcmV0dXJuIHJlc29sdmVUb2tlblJhbmdlKGN1c3RvbVByb3BlcnRpZXMsIHJh
bmdlLCByZXN1bHQpOworfQorICAgIAorYm9vbCBDU1NWYXJpYWJsZURhdGE6OnJlc29sdmVWYXJp
YWJsZVJlZmVyZW5jZShjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0
aWVzLCBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiBy
ZXN1bHQpIGNvbnN0Cit7CisgICAgcmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICBBU1NF
UlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKTsKKyAgICBBdG9taWNTdHJpbmcg
dmFyaWFibGVOYW1lID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgp
LnRvQXRvbWljU3RyaW5nKCk7CisgICAgQVNTRVJUKHJhbmdlLmF0RW5kKCkgfHwgKHJhbmdlLnBl
ZWsoKS50eXBlKCkgPT0gQ29tbWFUb2tlbikpOworICAgIAorICAgIFJlZlB0cjxDU1NDdXN0b21Q
cm9wZXJ0eVZhbHVlPiBwcm9wZXJ0eSA9IGN1c3RvbVByb3BlcnRpZXMuZ2V0KHZhcmlhYmxlTmFt
ZSk7CisgICAgaWYgKCFwcm9wZXJ0eSB8fCAhcHJvcGVydHktPnZhbHVlKCkpCisgICAgICAgIHJl
dHVybiByZXNvbHZlVmFyaWFibGVGYWxsYmFjayhjdXN0b21Qcm9wZXJ0aWVzLCByYW5nZSwgcmVz
dWx0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHktPmNvbnRhaW5zVmFyaWFibGVzKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IEF2b2lkIGRvaW5nIHRoaXMgd29yayBtb3JlIHRoYW4gb25jZS4KKyAg
ICAgICAgUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gcmVzb2x2ZWREYXRhID0gcHJvcGVydHktPnZh
bHVlKCktPnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoY3VzdG9tUHJvcGVydGllcyk7CisgICAg
ICAgIGlmICghcmVzb2x2ZWREYXRhKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXN1bHQuYXBwZW5kVmVjdG9yKHJlc29sdmVkRGF0YS0+dG9rZW5zKCkpOworICAgIH0gZWxz
ZQorICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKHByb3BlcnR5LT52YWx1ZSgpLT50b2tlbnMo
KSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JlZlB0cjxDU1NWYXJpYWJsZURhdGE+
IENTU1ZhcmlhYmxlRGF0YTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjb25zdCBDdXN0b21Q
cm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzKSBjb25zdAoreworICAgIFZlY3RvcjxD
U1NQYXJzZXJUb2tlbj4gcmVzb2x2ZWRUb2tlbnM7CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBy
YW5nZSA9IG1fdG9rZW5zOworICAgIGlmICghcmVzb2x2ZVRva2VuUmFuZ2UoY3VzdG9tUHJvcGVy
dGllcywgcmFuZ2UsIHJlc29sdmVkVG9rZW5zKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIENTU1ZhcmlhYmxlRGF0YTo6Y3JlYXRlUmVzb2x2ZWQocmVzb2x2ZWRUb2tlbnMs
ICp0aGlzKTsKK30KKyAgICAKK2Jvb2wgQ1NTVmFyaWFibGVEYXRhOjpyZXNvbHZlVG9rZW5SYW5n
ZShjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBDU1NQYXJz
ZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICB3aGlsZSAoIXJhbmdlLmF0RW5kKCkp
IHsKKyAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVWYXIp
CisgICAgICAgICAgICBzdWNjZXNzICY9IHJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZShjdXN0b21Q
cm9wZXJ0aWVzLCByYW5nZS5jb25zdW1lQmxvY2soKSwgcmVzdWx0KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyYW5nZS5jb25zdW1lKCkpOworICAgIH0KKyAgICBy
ZXR1cm4gc3VjY2VzczsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NWYXJpYWJsZURhdGEuaAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ZhcmlhYmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSwx
MSBAQCBwdWJsaWM6CiAKICAgICBib29sIG5lZWRzVmFyaWFibGVSZXNvbHV0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9uZWVkc1ZhcmlhYmxlUmVzb2x1dGlvbjsgfQogCisgICAgYm9vbCBjaGVja1Zh
cmlhYmxlc0ZvckN5Y2xlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEN1c3RvbVByb3BlcnR5
VmFsdWVNYXAmLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0
PEF0b21pY1N0cmluZz4mIGludmFsaWRQcm9wZXJ0aWVzKSBjb25zdDsKKyAgCisgICAgUmVmUHRy
PENTU1ZhcmlhYmxlRGF0YT4gcmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjb25zdCBDdXN0b21Q
cm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzKSBjb25zdDsKKyAgICBib29sIHJlc29s
dmVUb2tlblJhbmdlKGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmLCBDU1NQYXJzZXJUb2tl
blJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JikgY29uc3Q7CisKIHByaXZhdGU6CiAgICAg
Q1NTVmFyaWFibGVEYXRhKGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmLCBib29sIG5lZWRzVmFy
aWFibGVSZXNvbHV0aW9uKTsKIApAQCAtNzQsNiArNzksMTAgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgY29uc3VtZUFuZFVwZGF0ZVRva2Vucyhjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJik7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB1cGRhdGVUb2tlbnMoY29u
c3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworICAgIAorICAgIGJvb2wgY2hlY2tWYXJpYWJsZXNG
b3JDeWNsZXNXaXRoUmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSwgQ3VzdG9tUHJvcGVydHlWYWx1
ZU1hcCYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgc2VlblByb3BlcnRpZXMsIEhhc2hTZXQ8QXRv
bWljU3RyaW5nPiYgaW52YWxpZFByb3BlcnRpZXMpIGNvbnN0OworICAgIGJvb2wgcmVzb2x2ZVZh
cmlhYmxlUmVmZXJlbmNlKGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmLCBDU1NQYXJzZXJU
b2tlblJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JikgY29uc3Q7CisgICAgYm9vbCByZXNv
bHZlVmFyaWFibGVGYWxsYmFjayhjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiwgQ1NTUGFy
c2VyVG9rZW5SYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYpIGNvbnN0OwogCiAgICAgU3Ry
aW5nIG1fYmFja2luZ1N0cmluZzsKICAgICBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+IG1fdG9rZW5z
OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZh
bHVlLmNwcAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1Zhcmlh
YmxlUmVmZXJlbmNlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFN0cmluZyBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlOjpj
dXN0b21DU1NUZXh0KCkgY29uc3QKIHsKLSAgICAvLyBXZSBtYXkgd2FudCB0byBjb25zaWRlciBj
YWNoaW5nIHRoaXMgdmFsdWUuCi0gICAgcmV0dXJuIG1fZGF0YS0+dG9rZW5SYW5nZSgpLnNlcmlh
bGl6ZSgpOworICAgIGlmICghbV9zZXJpYWxpemVkKSB7CisgICAgICAgIG1fc2VyaWFsaXplZCA9
IHRydWU7CisgICAgICAgIG1fc3RyaW5nVmFsdWUgPSBtX2RhdGEtPnRva2VuUmFuZ2UoKS5zZXJp
YWxpemUoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fc3RyaW5nVmFsdWU7Cit9CisgICAgCitib29s
IENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU6OmNoZWNrVmFyaWFibGVzRm9yQ3ljbGVzKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSwgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9tUHJvcGVy
dGllcywgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBzZWVuUHJvcGVydGllcywgSGFzaFNldDxBdG9t
aWNTdHJpbmc+JiBpbnZhbGlkUHJvcGVydGllcykgY29uc3QKK3sKKyAgICBBU1NFUlQobV9kYXRh
KTsKKyAgICByZXR1cm4gbV9kYXRhLT5jaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyhuYW1lLCBjdXN0
b21Qcm9wZXJ0aWVzLCBzZWVuUHJvcGVydGllcywgaW52YWxpZFByb3BlcnRpZXMpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFi
bGVSZWZlcmVuY2VWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NW
YXJpYWJsZVJlZmVyZW5jZVZhbHVlLmgJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDYgKzUwLDggQEAgcHVibGljOgogICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU1ZhcmlhYmxlUmVm
ZXJlbmNlVmFsdWUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2RhdGEgPT0gb3RoZXIubV9kYXRh
OyB9CiAgICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdDsKIAorICAgIGJvb2wgY2hlY2tW
YXJpYWJsZXNGb3JDeWNsZXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBDdXN0b21Qcm9wZXJ0
eVZhbHVlTWFwJiwgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBzZWVuUHJvcGVydGllcywgSGFzaFNl
dDxBdG9taWNTdHJpbmc+JiBpbnZhbGlkUHJvcGVydGllcykgY29uc3Q7CisKIHByaXZhdGU6CiAg
ICAgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZShSZWY8Q1NTVmFyaWFibGVEYXRhPiYmIGRhdGEp
CiAgICAgICAgIDogQ1NTVmFsdWUoVmFyaWFibGVSZWZlcmVuY2VDbGFzcykKQEAgLTU4LDYgKzYw
LDggQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBSZWZQdHI8Q1NTVmFyaWFibGVEYXRhPiBtX2Rh
dGE7CisgICAgbXV0YWJsZSBTdHJpbmcgbV9zdHJpbmdWYWx1ZTsKKyAgICBtdXRhYmxlIGJvb2wg
bV9zZXJpYWxpemVkIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNzkw
MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksMTAgKzY5LDExIEBAIGJvb2wgQ1NTVmFyaWFibGVWYWx1ZTo6ZXF1YWxzKGNv
bnN0IENTU1YKIAogYm9vbCBDU1NWYXJpYWJsZVZhbHVlOjpidWlsZFBhcnNlclZhbHVlTGlzdFN1
YnN0aXR1dGluZ1ZhcmlhYmxlcyhDU1NQYXJzZXJWYWx1ZUxpc3QqIHJlc3VsdExpc3QsIGNvbnN0
IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmIGN1c3RvbVByb3BlcnRpZXMpIGNvbnN0CiB7Ci0gICAg
aWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBjdXN0b21Qcm9wZXJ0aWVzLmdldChtX25hbWUp
KSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICBpZiAoUmVmUHRyPENT
U0N1c3RvbVByb3BlcnR5VmFsdWU+IGN1c3RvbVByb3BlcnR5VmFsdWUgPSBjdXN0b21Qcm9wZXJ0
aWVzLmdldChtX25hbWUpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBjdXN0b21Qcm9wZXJ0eVZh
bHVlLT5kZXByZWNhdGVkVmFsdWUoKTsKKyAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLT5pc1Zh
bHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZh
bHVlKS5idWlsZFBhcnNlclZhbHVlTGlzdFN1YnN0aXR1dGluZ1ZhcmlhYmxlcyhyZXN1bHRMaXN0
LCBjdXN0b21Qcm9wZXJ0aWVzKTsKLSAgICAgICAgaWYgKHZhbHVlLT5pc1ZhcmlhYmxlRGVwZW5k
ZW50VmFsdWUoKSkKKyAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLT5pc1ZhcmlhYmxlRGVwZW5k
ZW50VmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NWYXJpYWJsZURlcGVu
ZGVudFZhbHVlPigqdmFsdWUpLnZhbHVlTGlzdCgpLmJ1aWxkUGFyc2VyVmFsdWVMaXN0U3Vic3Rp
dHV0aW5nVmFyaWFibGVzKHJlc3VsdExpc3QsIGN1c3RvbVByb3BlcnRpZXMpOwogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAJKHJldmlzaW9uIDIwNzkw
MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmgiCiAjaW5jbHVkZSAiQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIgogI2luY2x1ZGUgIkNT
U1BhcnNlci5oIgorI2luY2x1ZGUgIkNTU1BlbmRpbmdTdWJzdGl0dXRpb25WYWx1ZS5oIgogI2lu
Y2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNp
bmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKQEAgLTEyNiw2ICsxMjcsMTcgQEAgU3RyaW5nIFN0eWxl
UHJvcGVydGllczo6Z2V0UHJvcGVydHlWYWx1ZQogICAgIGlmICh2YWx1ZSkKICAgICAgICAgcmV0
dXJuIHZhbHVlLT5jc3NUZXh0KCk7CiAKKyAgICBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5k
JiBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKKyAgICBpZiAo
c2hvcnRoYW5kLmxlbmd0aCgpKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVswXSk7Cisg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAg
IGlmICh2YWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkpCisgICAgICAgICAgICByZXR1
cm4gdmFsdWUtPmNzc1RleHQoKTsKKyAgICAgICAgaWYgKHZhbHVlLT5pc1BlbmRpbmdTdWJzdGl0
dXRpb25WYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1BlbmRpbmdTdWJz
dGl0dXRpb25WYWx1ZT4oKnZhbHVlKS5zaG9ydGhhbmRWYWx1ZSgpLT5jc3NUZXh0KCk7CisgICAg
fQorCiAgICAgLy8gU2hvcnRoYW5kIGFuZCA0LXZhbHVlcyBwcm9wZXJ0aWVzCiAgICAgc3dpdGNo
IChwcm9wZXJ0eUlEKSB7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUFsbDoKQEAgLTIzMiw5ICsyNDQs
NiBAQCBTdHJpbmcgU3R5bGVQcm9wZXJ0aWVzOjpnZXRDdXN0b21Qcm9wZXJ0CiBTdHJpbmcgU3R5
bGVQcm9wZXJ0aWVzOjpib3JkZXJTcGFjaW5nVmFsdWUoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0
aGFuZCYgc2hvcnRoYW5kKSBjb25zdAogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gaG9yaXpvbnRh
bFZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKHNob3J0aGFuZC5wcm9wZXJ0aWVz
KClbMF0pOwotICAgIGlmIChob3Jpem9udGFsVmFsdWUgJiYgaG9yaXpvbnRhbFZhbHVlLT5pc1Zh
cmlhYmxlRGVwZW5kZW50VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGhvcml6b250YWxWYWx1ZS0+
Y3NzVGV4dCgpOwotICAgIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmVydGljYWxWYWx1ZSA9IGdl
dFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChzaG9ydGhhbmQucHJvcGVydGllcygpWzFdKTsKIAog
ICAgIC8vIFdoaWxlIHN0YW5kYXJkIGJvcmRlci1zcGFjaW5nIHByb3BlcnR5IGRvZXMgbm90IGFs
bG93IHNwZWNpZnlpbmcgYm9yZGVyLXNwYWNpbmctdmVydGljYWwgd2l0aG91dApAQCAtMzg1LDgg
KzM5NCw2IEBAIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmdldExheWVyZWRTaG9ydGgKICAgICAg
ICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2Nzc29tLTEvI3NlcmlhbGl6ZS1hLWNzcy1k
ZWNsYXJhdGlvbi1ibG9jay4KICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAg
fQotICAgICAgICBpZiAodmFsdWVzW2ldLT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSkKLSAg
ICAgICAgICAgIHJldHVybiB2YWx1ZXNbaV0tPmNzc1RleHQoKTsKICAgICAgICAgaWYgKHZhbHVl
c1tpXS0+aXNCYXNlVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICBudW1MYXllcnMgPSBzdGQ6Om1h
eChkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZXNbaV0pLmxlbmd0aCgpLCBudW1MYXllcnMp
OwogICAgICAgICBlbHNlCkBAIC01MjUsOCArNTMyLDYgQEAgU3RyaW5nIFN0eWxlUHJvcGVydGll
czo6Z2V0U2hvcnRoYW5kVmFsdQogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9
IGdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChzaG9ydGhhbmQucHJvcGVydGllcygpW2ldKTsK
ICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWUtPmNzc1RleHQoKTsKICAgICAgICAgICAgIFN0cmlu
ZyB2YWx1ZVRleHQgPSB2YWx1ZS0+Y3NzVGV4dCgpOwogICAgICAgICAgICAgaWYgKCFpKQogICAg
ICAgICAgICAgICAgIGNvbW1vblZhbHVlID0gdmFsdWVUZXh0OwpAQCAtNTU1LDEwICs1NjAsNiBA
QCBTdHJpbmcgU3R5bGVQcm9wZXJ0aWVzOjpnZXRDb21tb25WYWx1ZShjCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNob3J0aGFuZC5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoc2hvcnRoYW5k
LnByb3BlcnRpZXMoKVtpXSk7CiAgICAgICAgIC8vIEZJWE1FOiBDU1NJbml0aWFsVmFsdWU6OmNz
c1RleHQgc2hvdWxkIGdlbmVyYXRlIHRoZSByaWdodCB2YWx1ZS4KLSAgICAgICAgaWYgKCF2YWx1
ZSkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgaWYgKHZhbHVlLT5pc1Zh
cmlhYmxlRGVwZW5kZW50VmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS0+Y3NzVGV4
dCgpOwogICAgICAgICBTdHJpbmcgdGV4dCA9IHZhbHVlLT5jc3NUZXh0KCk7CiAgICAgICAgIGlm
ICh0ZXh0LmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtNjExLDYg
KzYxMiw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gU3R5bGVQcm9wZXJ0aWVzOjpnZXRQcm8KICAgICAg
ICAgaWYgKGRlcGVuZGVudFZhbHVlLnByb3BlcnR5SUQoKSAhPSBwcm9wZXJ0eUlEKQogICAgICAg
ICAgICAgcmV0dXJuIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZUludmFsaWQoKTsgLy8g
SGF2ZSB0byByZXR1cm4gc3BlY2lhbCAicGVuZGluZy1zdWJzdGl0dXRpb24iIHZhbHVlLgogICAg
IH0KKwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtODY4LDYgKzg3MCwxMCBAQCBTdHJpbmcg
U3R5bGVQcm9wZXJ0aWVzOjphc1RleHQoKSBjb25zdAogICAgICAgICAgICAgYXV0byYgZGVwZW5k
ZW50VmFsdWUgPSBkb3duY2FzdDxDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlPigqcHJvcGVydHku
dmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoZGVwZW5kZW50VmFsdWUucHJvcGVydHlJRCgpICE9
IHByb3BlcnR5SUQpCiAgICAgICAgICAgICAgICAgc2hvcnRoYW5kUHJvcGVydHlJRCA9IGRlcGVu
ZGVudFZhbHVlLnByb3BlcnR5SUQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS52YWx1
ZSgpICYmIHByb3BlcnR5LnZhbHVlKCktPmlzUGVuZGluZ1N1YnN0aXR1dGlvblZhbHVlKCkpIHsK
KyAgICAgICAgICAgIGF1dG8mIHN1YnN0aXR1dGlvblZhbHVlID0gZG93bmNhc3Q8Q1NTUGVuZGlu
Z1N1YnN0aXR1dGlvblZhbHVlPigqcHJvcGVydHkudmFsdWUoKSk7CisgICAgICAgICAgICBzaG9y
dGhhbmRQcm9wZXJ0eUlEID0gc3Vic3RpdHV0aW9uVmFsdWUuc2hvcnRoYW5kUHJvcGVydHlJZCgp
OworICAgICAgICAgICAgdmFsdWUgPSBzdWJzdGl0dXRpb25WYWx1ZS5zaG9ydGhhbmRWYWx1ZSgp
LT5jc3NUZXh0KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHByb3Bl
cnR5SUQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25OYW1lOgpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjA3OTAzKQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzMsNyArMjMzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6YWRkTWF0Ywog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICBpZiAodmFsdWUuaXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodmFsdWUuaGFzVmFyaWFibGVSZWZlcmVuY2VzKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMTU4Niw4ICsxNTg2LDggQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1BybwogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAg
ICAgCiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZVRvQXBwbHkgPSB2YWx1ZTsKLSAgICBpZiAo
dmFsdWUtPmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKSB7Ci0gICAgICAgIHZhbHVlVG9BcHBs
eSA9IHJlc29sdmVkVmFyaWFibGVWYWx1ZShpZCwgKmRvd25jYXN0PENTU1ZhcmlhYmxlRGVwZW5k
ZW50VmFsdWU+KHZhbHVlKSk7CisgICAgaWYgKHZhbHVlLT5oYXNWYXJpYWJsZVJlZmVyZW5jZXMo
KSkgeworICAgICAgICB2YWx1ZVRvQXBwbHkgPSByZXNvbHZlZFZhcmlhYmxlVmFsdWUoaWQsICp2
YWx1ZSk7CiAgICAgICAgIGlmICghdmFsdWVUb0FwcGx5KSB7CiAgICAgICAgICAgICBpZiAoQ1NT
UHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQogICAgICAgICAgICAgICAgIHZhbHVl
VG9BcHBseSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW5oZXJpdGVkVmFsdWUo
KTsKQEAgLTE2MDQsMTcgKzE2MDQsMjMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1BybwogICAgIAogICAgIENTU1ZhbHVlKiB2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5p
dGlhbCA9IHZhbHVlVG9BcHBseS5nZXQoKTsKICAgICBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKiBj
dXN0b21Qcm9wZXJ0eVZhbHVlID0gbnVsbHB0cjsKKyAgICBDU1NWYWx1ZUlEIGN1c3RvbVByb3Bl
cnR5VmFsdWVJRCA9IENTU1ZhbHVlSW52YWxpZDsKICAgICAKICAgICBpZiAoaWQgPT0gQ1NTUHJv
cGVydHlDdXN0b20pIHsKKyAgICAgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBDYW4gY2xlYW4gdGhp
cyB1cCBvbmNlIG9sZCBwYXJzZXIgaXMgZ29uZSBhbmQgcmVtb3ZlCisgICAgICAgIC8vIHRoZSBk
ZXByZWNhdGVkVmFsdWUgY2FsbCBhbmQgdGhlIHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFs
IHZhcmlhYmxlLgogICAgICAgICBjdXN0b21Qcm9wZXJ0eVZhbHVlID0gJmRvd25jYXN0PENTU0N1
c3RvbVByb3BlcnR5VmFsdWU+KCp2YWx1ZVRvQXBwbHkpOwogICAgICAgICB2YWx1ZVRvQ2hlY2tG
b3JJbmhlcml0SW5pdGlhbCA9IGN1c3RvbVByb3BlcnR5VmFsdWUtPmRlcHJlY2F0ZWRWYWx1ZSgp
LmdldCgpOworICAgICAgICBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPSBjdXN0b21Qcm9wZXJ0eVZh
bHVlLT52YWx1ZUlEKCk7CisgICAgICAgIGlmIChjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgIT0gQ1NT
VmFsdWVJbnZhbGlkKQorICAgICAgICAgICAgdmFsdWVUb0NoZWNrRm9ySW5oZXJpdEluaXRpYWwg
PSB2YWx1ZVRvQXBwbHkuZ2V0KCk7CiAgICAgfQogCi0gICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0
ZS5wYXJlbnRTdHlsZSgpICYmIHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFsLT5pc0luaGVy
aXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0
SW5pdGlhbC0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIXN0YXRlLnBhcmVudFN0eWxlKCkgJiYgdmFs
dWVUb0NoZWNrRm9ySW5oZXJpdEluaXRpYWwtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CisgICAgYm9v
bCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpID8gdmFsdWVUb0NoZWNrRm9ySW5oZXJp
dEluaXRpYWwtPmlzSW5oZXJpdGVkVmFsdWUoKSB8fCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0g
Q1NTVmFsdWVJbmhlcml0IDogZmFsc2U7CisgICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZVRvQ2hl
Y2tGb3JJbmhlcml0SW5pdGlhbC0+aXNJbml0aWFsVmFsdWUoKSB8fCBjdXN0b21Qcm9wZXJ0eVZh
bHVlSUQgPT0gQ1NTVmFsdWVJbml0aWFsIHx8ICghc3RhdGUucGFyZW50U3R5bGUoKSAmJiAodmFs
dWVUb0NoZWNrRm9ySW5oZXJpdEluaXRpYWwtPmlzSW5oZXJpdGVkVmFsdWUoKSB8fCBjdXN0b21Q
cm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVJbmhlcml0KSk7CiAgICAgCi0gICAgYm9vbCBpc1Vu
c2V0ID0gdmFsdWVUb0NoZWNrRm9ySW5oZXJpdEluaXRpYWwtPmlzVW5zZXRWYWx1ZSgpOwotICAg
IGJvb2wgaXNSZXZlcnQgPSB2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5pdGlhbC0+aXNSZXZlcnRW
YWx1ZSgpOworICAgIGJvb2wgaXNVbnNldCA9IHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFs
LT5pc1Vuc2V0VmFsdWUoKSB8fCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVVbnNl
dDsKKyAgICBib29sIGlzUmV2ZXJ0ID0gdmFsdWVUb0NoZWNrRm9ySW5oZXJpdEluaXRpYWwtPmlz
UmV2ZXJ0VmFsdWUoKSB8fCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVSZXZlcnQ7
CiAKICAgICBpZiAoaXNSZXZlcnQpIHsKICAgICAgICAgaWYgKGNhc2NhZGVMZXZlbCgpID09IFVz
ZXJBZ2VudExldmVsIHx8ICFtYXRjaFJlc3VsdCkKQEAgLTE2NjYsMTQgKzE2NzIsMTQgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1BybwogICAgIGlmIChpZCA9PSBDU1NQ
cm9wZXJ0eUN1c3RvbSkgewogICAgICAgICBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKiBjdXN0b21Q
cm9wZXJ0eSA9ICZkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqdmFsdWVUb0FwcGx5
KTsKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVl
PiBjdXN0b21WYWwgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5nZXRDdXN0b21Qcm9wZXJ0eVZhbHVl
KGN1c3RvbVByb3BlcnR5LT5uYW1lKCkpOworICAgICAgICAgICAgUmVmUHRyPENTU0N1c3RvbVBy
b3BlcnR5VmFsdWU+IGN1c3RvbVZhbCA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmdldEN1c3RvbVBy
b3BlcnR5VmFsdWUoY3VzdG9tUHJvcGVydHktPm5hbWUoKSk7CiAgICAgICAgICAgICBpZiAoIWN1
c3RvbVZhbCkKICAgICAgICAgICAgICAgICBjdXN0b21WYWwgPSBDU1NDdXN0b21Qcm9wZXJ0eVZh
bHVlOjpjcmVhdGVJbnZhbGlkKCk7CiAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXN0
b21Qcm9wZXJ0eVZhbHVlKGN1c3RvbVByb3BlcnR5LT5uYW1lKCksIGN1c3RvbVZhbCk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKQogICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
Q3VzdG9tUHJvcGVydHlWYWx1ZShjdXN0b21Qcm9wZXJ0eS0+bmFtZSgpLCBDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlOjpjcmVhdGVJbnZhbGlkKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGN1c3RvbVByb3BlcnR5LT5uYW1l
KCksIGN1c3RvbVByb3BlcnR5LT5kZXByZWNhdGVkVmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGN1c3RvbVByb3BlcnR5LT5uYW1lKCks
IGN1c3RvbVByb3BlcnR5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTY4MSwxMCAr
MTY4NywxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvCiAgICAg
U3R5bGVCdWlsZGVyOjphcHBseVByb3BlcnR5KGlkLCAqdGhpcywgKnZhbHVlVG9BcHBseSwgaXNJ
bml0aWFsLCBpc0luaGVyaXQpOwogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUmVzb2x2ZXI6
OnJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NTVmFy
aWFibGVEZXBlbmRlbnRWYWx1ZSYgdmFsdWUpCitSZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUmVzb2x2
ZXI6OnJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQogewogICAgIENTU1BhcnNlciBwYXJzZXIobV9zdGF0ZS5kb2N1bWVudCgp
KTsKLSAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFyaWFibGVEZXBlbmRlbnRWYWx1ZShwcm9wSUQs
IHZhbHVlLCBtX3N0YXRlLnN0eWxlKCktPmN1c3RvbVByb3BlcnRpZXMoKSwgbV9zdGF0ZS5zdHls
ZSgpLT5kaXJlY3Rpb24oKSwgbV9zdGF0ZS5zdHlsZSgpLT53cml0aW5nTW9kZSgpKTsKKyAgICBy
ZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKHByb3BJRCwgdmFs
dWUsIG1fc3RhdGUuc3R5bGUoKS0+Y3VzdG9tUHJvcGVydGllcygpLCBtX3N0YXRlLnN0eWxlKCkt
PmRpcmVjdGlvbigpLCBtX3N0YXRlLnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOwogfQogCiBSZWZQ
dHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NWYWx1ZSYgdmFsdWUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHJldmlzaW9uIDIwNzkwMykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
OSw3ICs0NjksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5k
KCk7CiAKICAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBT
ZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVm
YXVsdCwgY29uc3QgTWF0Y2hSZXN1bHQqID0gbnVsbHB0cik7Ci0gICAgUmVmUHRyPENTU1ZhbHVl
PiByZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTVmFyaWFibGVE
ZXBlbmRlbnRWYWx1ZSYpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmVzb2x2ZWRWYXJpYWJsZVZh
bHVlKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhbHVlJik7CiAKICAgICB2b2lkIGFwcGx5U1ZH
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1
OCwxMCBAQAogI2luY2x1ZGUgIkNTU1BhZ2VSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyRmFz
dFBhdGhzLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VySW1wbC5oIgorI2luY2x1ZGUgIkNTU1BlbmRp
bmdTdWJzdGl0dXRpb25WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5UGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCiAjaW5jbHVk
ZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUmV2ZXJ0VmFsdWUuaCIKQEAgLTc1
LDYgKzc3LDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJDU1NWYWx1
ZVBvb2wuaCIKICNpbmNsdWRlICJDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlLmgiCisjaW5jbHVk
ZSAiQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNvdW50ZXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgpAQCAtMTQz
Miw2ICsxNDM1LDEwIEBAIFJlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IENTU1BhcnNlcjoK
IHsKICAgICBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQoZWxlbWVudC0+ZG9jdW1lbnQoKSk7CiAg
ICAgY29udGV4dC5tb2RlID0gc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGVsZW1lbnQtPmlzSFRNTEVs
ZW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSk7CisKKyAgICBp
ZiAoY29udGV4dC51c2VOZXdQYXJzZXIpCisgICAgICAgIHJldHVybiBDU1NQYXJzZXJJbXBsOjpw
YXJzZUlubGluZVN0eWxlRGVjbGFyYXRpb24oc3RyaW5nLCBlbGVtZW50KTsKKwogICAgIHJldHVy
biBDU1NQYXJzZXIoY29udGV4dCkucGFyc2VEZWNsYXJhdGlvbihzdHJpbmcsIG51bGxwdHIpOwog
fQogCkBAIC0xNzk2LDIzICsxODAzLDY4IEBAIHZvaWQgQ1NTUGFyc2VyOjphZGRFeHBhbmRlZFBy
b3BlcnR5Rm9yVmEKICAgICAgICAgYWRkUHJvcGVydHkobG9uZ2hhbmRzW2ldLCB2YWx1ZS5jb3B5
UmVmKCksIGltcG9ydGFudCk7CiB9CiAKLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJz
ZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENTU1Zh
cmlhYmxlRGVwZW5kZW50VmFsdWUmIGRlcGVuZGVudFZhbHVlLCBjb25zdCBDdXN0b21Qcm9wZXJ0
eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpCitSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VW
YWx1ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSwgY29uc3QgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9tUHJvcGVy
dGllcywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQog
ewotICAgIG1fdmFsdWVMaXN0LnJlc2V0KG5ldyBDU1NQYXJzZXJWYWx1ZUxpc3QoKSk7Ci0gICAg
aWYgKCFkZXBlbmRlbnRWYWx1ZS52YWx1ZUxpc3QoKS5idWlsZFBhcnNlclZhbHVlTGlzdFN1YnN0
aXR1dGluZ1ZhcmlhYmxlcyhtX3ZhbHVlTGlzdC5nZXQoKSwgY3VzdG9tUHJvcGVydGllcykpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICh2YWx1ZS5pc1ZhcmlhYmxlRGVwZW5kZW50
VmFsdWUoKSkgeworICAgICAgICBjb25zdCBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlJiBkZXBl
bmRlbnRWYWx1ZSA9IGRvd25jYXN0PENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWU+KHZhbHVlKTsK
KyAgICAgICAgbV92YWx1ZUxpc3QucmVzZXQobmV3IENTU1BhcnNlclZhbHVlTGlzdCgpKTsKKyAg
ICAgICAgaWYgKCFkZXBlbmRlbnRWYWx1ZS52YWx1ZUxpc3QoKS5idWlsZFBhcnNlclZhbHVlTGlz
dFN1YnN0aXR1dGluZ1ZhcmlhYmxlcyhtX3ZhbHVlTGlzdC5nZXQoKSwgY3VzdG9tUHJvcGVydGll
cykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBDU1NQcm9wZXJ0eUlE
IGRlcGVuZGVudFZhbHVlUHJvcGVydHlJRCA9IGRlcGVuZGVudFZhbHVlLnByb3BlcnR5SUQoKTsK
KyAgICAgICAgaWYgKENTU1Byb3BlcnR5Ojppc0RpcmVjdGlvbkF3YXJlUHJvcGVydHkoZGVwZW5k
ZW50VmFsdWVQcm9wZXJ0eUlEKSkKKyAgICAgICAgICAgIGRlcGVuZGVudFZhbHVlUHJvcGVydHlJ
RCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShkZXBlbmRlbnRW
YWx1ZVByb3BlcnR5SUQsIGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwogCi0gICAgQ1NTUHJvcGVy
dHlJRCBkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQgPSBkZXBlbmRlbnRWYWx1ZS5wcm9wZXJ0eUlE
KCk7Ci0gICAgaWYgKENTU1Byb3BlcnR5Ojppc0RpcmVjdGlvbkF3YXJlUHJvcGVydHkoZGVwZW5k
ZW50VmFsdWVQcm9wZXJ0eUlEKSkKLSAgICAgICAgZGVwZW5kZW50VmFsdWVQcm9wZXJ0eUlEID0g
Q1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGRlcGVuZGVudFZhbHVl
UHJvcGVydHlJRCwgZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7CisgICAgICAgIGlmICghcGFyc2VW
YWx1ZShkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQsIGZhbHNlKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgaWYgKCFwYXJzZVZhbHVlKGRlcGVuZGVudFZhbHVlUHJvcGVydHlJ
RCwgZmFsc2UpKQorICAgICAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogbV9wYXJzZWRQcm9wZXJ0
aWVzKSB7CisgICAgICAgICAgICBpZiAocHJvcGVydHkuaWQoKSA9PSBwcm9wSUQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHByb3BlcnR5LnZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBpZiAodmFsdWUuaXNQZW5k
aW5nU3Vic3RpdHV0aW9uVmFsdWUoKSkgeworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIGhhdmUg
YSByZXNvbHZlZFNob3J0aGFuZHMgY2FjaGUgdG8gc3RvcCB0aGlzIGZyb20gYmVpbmcgZG9uZQor
ICAgICAgICAvLyBvdmVyIGFuZCBvdmVyIGZvciBlYWNoIGxvbmdoYW5kIHZhbHVlLgorICAgICAg
ICBjb25zdCBDU1NQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWUmIHBlbmRpbmdTdWJzdGl0dXRpb24g
PSBkb3duY2FzdDxDU1NQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWU+KHZhbHVlKTsKKyAgICAgICAg
Q1NTUHJvcGVydHlJRCBzaG9ydGhhbmRJRCA9IHBlbmRpbmdTdWJzdGl0dXRpb24uc2hvcnRoYW5k
UHJvcGVydHlJZCgpOworICAgICAgICBpZiAoQ1NTUHJvcGVydHk6OmlzRGlyZWN0aW9uQXdhcmVQ
cm9wZXJ0eShzaG9ydGhhbmRJRCkpCisgICAgICAgICAgICBzaG9ydGhhbmRJRCA9IENTU1Byb3Bl
cnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShzaG9ydGhhbmRJRCwgZGlyZWN0aW9u
LCB3cml0aW5nTW9kZSk7CisgICAgICAgIENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUqIHNob3J0
aGFuZFZhbHVlID0gcGVuZGluZ1N1YnN0aXR1dGlvbi5zaG9ydGhhbmRWYWx1ZSgpOworICAgICAg
ICBjb25zdCBDU1NWYXJpYWJsZURhdGEqIHZhcmlhYmxlRGF0YSA9IHNob3J0aGFuZFZhbHVlLT52
YXJpYWJsZURhdGFWYWx1ZSgpOworICAgICAgICBBU1NFUlQodmFyaWFibGVEYXRhKTsKKyAgICAg
ICAgCisgICAgICAgIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4gcmVzb2x2ZWRUb2tlbnM7CisgICAg
ICAgIGlmICghdmFyaWFibGVEYXRhLT5yZXNvbHZlVG9rZW5SYW5nZShjdXN0b21Qcm9wZXJ0aWVz
LCB2YXJpYWJsZURhdGEtPnRva2VucygpLCByZXNvbHZlZFRva2VucykpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIFBhcnNlZFByb3BlcnR5VmVjdG9yIHBh
cnNlZFByb3BlcnRpZXM7CisgICAgICAgIGlmICghQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVmFs
dWUoc2hvcnRoYW5kSUQsIGZhbHNlLCByZXNvbHZlZFRva2VucywgbV9jb250ZXh0LCBwYXJzZWRQ
cm9wZXJ0aWVzLCBTdHlsZVJ1bGU6OlN0eWxlKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAKKyAgICAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IHBhcnNlZFByb3BlcnRp
ZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5pZCgpID09IHByb3BJRCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcHJvcGVydHkudmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6
IG1fcGFyc2VkUHJvcGVydGllcykgewotICAgICAgICBpZiAocHJvcGVydHkuaWQoKSA9PSBwcm9w
SUQpCi0gICAgICAgICAgICByZXR1cm4gcHJvcGVydHkudmFsdWUoKTsKKyAgICBpZiAodmFsdWUu
aXNWYXJpYWJsZVJlZmVyZW5jZVZhbHVlKCkpIHsKKyAgICAgICAgY29uc3QgQ1NTVmFyaWFibGVS
ZWZlcmVuY2VWYWx1ZSYgdmFsdWVXaXRoUmVmZXJlbmNlcyA9IGRvd25jYXN0PENTU1ZhcmlhYmxl
UmVmZXJlbmNlVmFsdWU+KHZhbHVlKTsKKyAgICAgICAgY29uc3QgQ1NTVmFyaWFibGVEYXRhKiB2
YXJpYWJsZURhdGEgPSB2YWx1ZVdpdGhSZWZlcmVuY2VzLnZhcmlhYmxlRGF0YVZhbHVlKCk7Cisg
ICAgICAgIEFTU0VSVCh2YXJpYWJsZURhdGEpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPENT
U1BhcnNlclRva2VuPiByZXNvbHZlZFRva2VuczsKKyAgICAgICAgaWYgKCF2YXJpYWJsZURhdGEt
PnJlc29sdmVUb2tlblJhbmdlKGN1c3RvbVByb3BlcnRpZXMsIHZhcmlhYmxlRGF0YS0+dG9rZW5z
KCksIHJlc29sdmVkVG9rZW5zKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVNpbmdsZVZhbHVlKHBy
b3BJRCwgcmVzb2x2ZWRUb2tlbnMsIG1fY29udGV4dCk7CiAgICAgfQorICAgIAogICAgIHJldHVy
biBudWxscHRyOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgJ
KHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5NCw3ICs0OTQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHNldEN1c3RvbVByb3BlcnR5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkg
eyBtX2N1c3RvbVByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsgfQogCi0gICAgUmVmUHRyPENT
U1ZhbHVlPiBwYXJzZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUoQ1NTUHJvcGVydHlJRCwgY29uc3Qg
Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSYsIGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAm
IGN1c3RvbVByb3BlcnRpZXMsIFRleHREaXJlY3Rpb24sIFdyaXRpbmdNb2RlKTsKKyAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5
SUQsIGNvbnN0IENTU1ZhbHVlJiwgY29uc3QgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9t
UHJvcGVydGllcywgVGV4dERpcmVjdGlvbiwgV3JpdGluZ01vZGUpOwogCiBwcml2YXRlOgogICAg
IGJvb2wgaXM4Qml0U291cmNlKCkgeyByZXR1cm4gbV9pczhCaXRTb3VyY2U7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmNwcAkocmV2aXNpb24gMjA3
OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzcsMTYgKzc3LDYgQEAgYm9vbCBDU1NQYXJzZXJJbXBsOjpwYXJzZVZh
bHVlKE11dGFibGVTdAogICAgIHJldHVybiBkZWNsYXJhdGlvbi0+YWRkUGFyc2VkUHJvcGVydGll
cyhwYXJzZXIubV9wYXJzZWRQcm9wZXJ0aWVzKTsKIH0KIAotYm9vbCBDU1NQYXJzZXJJbXBsOjpw
YXJzZVZhcmlhYmxlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyogZGVjbGFyYXRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29s
IGltcG9ydGFudCwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBDU1NQ
YXJzZXJJbXBsIHBhcnNlcihjb250ZXh0KTsKLSAgICBDU1NUb2tlbml6ZXI6OlNjb3BlIHNjb3Bl
KHZhbHVlKTsKLSAgICBwYXJzZXIuY29uc3VtZVZhcmlhYmxlVmFsdWUoc2NvcGUudG9rZW5SYW5n
ZSgpLCBwcm9wZXJ0eU5hbWUsIGltcG9ydGFudCk7Ci0gICAgaWYgKHBhcnNlci5tX3BhcnNlZFBy
b3BlcnRpZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGRl
Y2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0aWVzKHBhcnNlci5tX3BhcnNlZFByb3BlcnRpZXMp
OwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZmlsdGVyUHJvcGVydGllcyhib29sIGltcG9ydGFu
dCwgY29uc3QgUGFyc2VkUHJvcGVydHlWZWN0b3ImIGlucHV0LCBQYXJzZWRQcm9wZXJ0eVZlY3Rv
ciYgb3V0cHV0LCBzaXplX3QmIHVudXNlZEVudHJpZXMsIHN0ZDo6Yml0c2V0PG51bUNTU1Byb3Bl
cnRpZXM+JiBzZWVuUHJvcGVydGllcywgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBzZWVuQ3VzdG9t
UHJvcGVydGllcykKIHsKICAgICAvLyBBZGQgcHJvcGVydGllcyBpbiByZXZlcnNlIG9yZGVyIHNv
IHRoYXQgaGlnaGVzdCBwcmlvcml0eSBkZWZpbml0aW9ucyBhcmUgcmVhY2hlZCBmaXJzdC4gRHVw
bGljYXRlIGRlZmluaXRpb25zIGNhbiB0aGVuIGJlIGlnbm9yZWQgd2hlbiBmb3VuZC4KQEAgLTk3
LDExICs4NywxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmlsdGVyUHJvcGVydGllcyhib29sCiAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHByb3BlcnR5SURJbmRleCA9IHByb3BlcnR5LmlkKCkgLSBm
aXJzdENTU1Byb3BlcnR5OwogICAgICAgICAKICAgICAgICAgaWYgKHByb3BlcnR5LmlkKCkgPT0g
Q1NTUHJvcGVydHlDdXN0b20pIHsKLSAgICAgICAgICAgIENTU0N1c3RvbVByb3BlcnR5VmFsdWUq
IGN1c3RvbVZhbHVlID0gZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4ocHJvcGVydHku
dmFsdWUoKSk7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBjdXN0b21W
YWx1ZS0+bmFtZSgpOwotICAgICAgICAgICAgaWYgKHNlZW5DdXN0b21Qcm9wZXJ0aWVzLmNvbnRh
aW5zKG5hbWUpKQorICAgICAgICAgICAgYXV0byYgbmFtZSA9IGRvd25jYXN0PENTU0N1c3RvbVBy
b3BlcnR5VmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKS5uYW1lKCk7CisgICAgICAgICAgICBpZiAo
IXNlZW5DdXN0b21Qcm9wZXJ0aWVzLmFkZChuYW1lKS5pc05ld0VudHJ5KQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc2VlbkN1c3RvbVByb3BlcnRpZXMuYWRkKG5hbWUp
OworICAgICAgICAgICAgb3V0cHV0Wy0tdW51c2VkRW50cmllc10gPSBwcm9wZXJ0eTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjQzLDI5ICsyMzIsNiBA
QCBDU1NTZWxlY3Rvckxpc3QgQ1NTUGFyc2VySW1wbDo6cGFyc2VQYWdlCiAgICAgcmV0dXJuIHNl
bGVjdG9yTGlzdDsKIH0KIAotUmVmUHRyPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gQ1NTUGFy
c2VySW1wbDo6cGFyc2VDdXN0b21Qcm9wZXJ0eVNldChDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdl
KQotewotICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0gICAgaWYgKHJhbmdlLnBlZWso
KS50eXBlKCkgIT0gTGVmdEJyYWNlVG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IENTU1BhcnNlclRva2VuUmFuZ2UgYmxvY2sgPSByYW5nZS5jb25zdW1lQmxvY2soKTsKLSAgICBy
YW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOwotICAgIGlmICghcmFuZ2UuYXRFbmQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQ1NTUGFyc2VySW1wbCBwYXJzZXIoc3RyaWN0Q1NTUGFy
c2VyQ29udGV4dCgpKTsKLSAgICBwYXJzZXIuY29uc3VtZURlY2xhcmF0aW9uTGlzdChibG9jaywg
U3R5bGVSdWxlOjpTdHlsZSk7Ci0KLSAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFdlIGRvbnQgc3Vw
cG9ydCBAYXBwbHkgeWV0LgotICAgIC8vIERyb3AgbmVzdGVkIEBhcHBseSBydWxlcy4gU2VlbXMg
bmljZXIgdG8gZG8gdGhpcyBoZXJlIGluc3RlYWQgb2YgbWFraW5nCi0gICAgLy8gYSBkaWZmZXJl
bnQgU3R5bGVSdWxlIHR5cGUKLSAgICAvKmZvciAoc2l6ZV90IGkgPSBwYXJzZXIubV9wYXJzZWRQ
cm9wZXJ0aWVzLnNpemUoKTsgaS0tOyApIHsKLSAgICAgICAgaWYgKHBhcnNlci5tX3BhcnNlZFBy
b3BlcnRpZXNbaV0uaWQoKSA9PSBDU1NQcm9wZXJ0eUFwcGx5QXRSdWxlKQotICAgICAgICAgICAg
cGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcy5yZW1vdmUoaSk7Ci0gICAgfSovCi0KLSAgICByZXR1
cm4gY3JlYXRlU3R5bGVQcm9wZXJ0aWVzKHBhcnNlci5tX3BhcnNlZFByb3BlcnRpZXMsIEhUTUxT
dGFuZGFyZE1vZGUpOwotfQotCiBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPGRvdWJsZT4+IENTU1Bh
cnNlckltcGw6OnBhcnNlS2V5ZnJhbWVLZXlMaXN0KGNvbnN0IFN0cmluZyYga2V5TGlzdCkKIHsK
ICAgICByZXR1cm4gY29uc3VtZUtleWZyYW1lS2V5TGlzdChDU1NUb2tlbml6ZXI6OlNjb3BlKGtl
eUxpc3QpLnRva2VuUmFuZ2UoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1BhcnNlckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1BhcnNlckltcGwuaAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQYXJzZXJJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDE1ICs4MywxMiBAQCBw
dWJsaWM6CiAgICAgfTsKIAogICAgIHN0YXRpYyBib29sIHBhcnNlVmFsdWUoTXV0YWJsZVN0eWxl
UHJvcGVydGllcyosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50
LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VWYXJpYWJs
ZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMqLCBjb25zdCBBdG9taWNTdHJpbmcmIHByb3Bl
cnR5TmFtZSwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIGNvbnN0IENTU1BhcnNlckNv
bnRleHQmKTsKICAgICBzdGF0aWMgUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcGFyc2VJ
bmxpbmVTdHlsZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYsIEVsZW1lbnQqKTsKICAgICBzdGF0
aWMgYm9vbCBwYXJzZURlY2xhcmF0aW9uTGlzdChNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiwgY29u
c3QgU3RyaW5nJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwogICAgIHN0YXRpYyBSZWZQdHI8
U3R5bGVSdWxlQmFzZT4gcGFyc2VSdWxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNlckNv
bnRleHQmLCBTdHlsZVNoZWV0Q29udGVudHMqLCBBbGxvd2VkUnVsZXNUeXBlKTsKICAgICBzdGF0
aWMgdm9pZCBwYXJzZVN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiwgY29uc3QgQ1NTUGFyc2VyQ29u
dGV4dCYsIFN0eWxlU2hlZXRDb250ZW50cyopOwogICAgIHN0YXRpYyBDU1NTZWxlY3Rvckxpc3Qg
cGFyc2VQYWdlU2VsZWN0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSwgU3R5bGVTaGVldENvbnRlbnRz
Kik7CiAKLSAgICBzdGF0aWMgUmVmUHRyPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcGFyc2VD
dXN0b21Qcm9wZXJ0eVNldChDU1NQYXJzZXJUb2tlblJhbmdlKTsKLQogICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8VmVjdG9yPGRvdWJsZT4+IHBhcnNlS2V5ZnJhbWVLZXlMaXN0KGNvbnN0IFN0
cmluZyYpOwogCiAgICAgYm9vbCBzdXBwb3J0c0RlY2xhcmF0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVmFyaWFibGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVmFyaWFibGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1ZhcmlhYmxlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBA
IHN0YXRpYyBDU1NWYWx1ZUlEIGNsYXNzaWZ5VmFyaWFibGVSYW5nZSgKICAgICByYW5nZS5jb25z
dW1lV2hpdGVzcGFjZSgpOwogICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9r
ZW4pIHsKICAgICAgICAgQ1NTVmFsdWVJRCBpZCA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0
ZXNwYWNlKCkuaWQoKTsKLSAgICAgICAgaWYgKHJhbmdlLmF0RW5kKCkgJiYgKGlkID09IENTU1Zh
bHVlSW5oZXJpdCB8fCBpZCA9PSBDU1NWYWx1ZUluaXRpYWwgfHwgaWQgPT0gQ1NTVmFsdWVVbnNl
dCkpCisgICAgICAgIGlmIChyYW5nZS5hdEVuZCgpICYmIChpZCA9PSBDU1NWYWx1ZUluaGVyaXQg
fHwgaWQgPT0gQ1NTVmFsdWVJbml0aWFsIHx8IGlkID09IENTU1ZhbHVlVW5zZXQgfHwgaWQgPT0g
Q1NTVmFsdWVSZXZlcnQpKQogICAgICAgICAgICAgcmV0dXJuIGlkOwogICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShyZXZp
c2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDM2LDEwICsyMDM2LDEwIEBAIHZvaWQgUmVuZGVy
U3R5bGU6OmNoZWNrVmFyaWFibGVzSW5DdXN0b20KICAgICBhdXRvJiBjdXN0b21Qcm9wZXJ0aWVz
ID0gcmFyZUluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fY3VzdG9tUHJvcGVydGllcy5hY2Nlc3Mo
KS0+dmFsdWVzKCk7CiAgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IGludmFsaWRQcm9wZXJ0aWVz
OwogICAgIGZvciAoYXV0byBlbnRyeSA6IGN1c3RvbVByb3BlcnRpZXMpIHsKLSAgICAgICAgaWYg
KCFlbnRyeS52YWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkpCisgICAgICAgIGlmICgh
ZW50cnkudmFsdWUtPmNvbnRhaW5zVmFyaWFibGVzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IHNlZW5Qcm9wZXJ0aWVzOwotICAgICAgICBk
b3duY2FzdDxDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlPigqZW50cnkudmFsdWUpLmNoZWNrVmFy
aWFibGVzRm9yQ3ljbGVzKGVudHJ5LmtleSwgY3VzdG9tUHJvcGVydGllcywgc2VlblByb3BlcnRp
ZXMsIGludmFsaWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgZW50cnkudmFsdWUtPmNoZWNrVmFyaWFi
bGVzRm9yQ3ljbGVzKGVudHJ5LmtleSwgY3VzdG9tUHJvcGVydGllcywgc2VlblByb3BlcnRpZXMs
IGludmFsaWRQcm9wZXJ0aWVzKTsKICAgICB9CiAgICAgCiAgICAgLy8gTm93IGluc2VydCBpbnZh
bGlkIHZhbHVlcy4KQEAgLTIwNTMsMjAgKzIwNTMsMTUgQEAgdm9pZCBSZW5kZXJTdHlsZTo6Y2hl
Y2tWYXJpYWJsZXNJbkN1c3RvbQogICAgIC8vIGludmFsaWQgdmFsdWVzIGlmIHRoZXkgZmFpbGVk
LCB3ZSBjYW4gcGVyZm9ybSB2YXJpYWJsZSBzdWJzdGl0dXRpb24gb24gdGhlIHZhbGlkIHZhbHVl
cy4KICAgICBWZWN0b3I8UmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+PiByZXNvbHZlZFZhbHVl
czsKICAgICBmb3IgKGF1dG8gZW50cnkgOiBjdXN0b21Qcm9wZXJ0aWVzKSB7Ci0gICAgICAgIGlm
ICghZW50cnkudmFsdWUtPmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKQorICAgICAgICBpZiAo
IWVudHJ5LnZhbHVlLT5jb250YWluc1ZhcmlhYmxlcygpKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIAotICAgICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QgcGFyc2VyTGlzdDsKLSAgICAg
ICAgaWYgKCFkb3duY2FzdDxDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlPigqZW50cnkudmFsdWUp
LnZhbHVlTGlzdCgpLmJ1aWxkUGFyc2VyVmFsdWVMaXN0U3Vic3RpdHV0aW5nVmFyaWFibGVzKCZw
YXJzZXJMaXN0LCBjdXN0b21Qcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgIHJlc29sdmVkVmFsdWVz
LmFwcGVuZChDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUoZW50cnkua2V5LCBDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVJbnZhbGlkKCkpKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcmVzb2x2ZWRWYWx1ZXMuYXBwZW5kKENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0
ZShlbnRyeS5rZXksIENTU1ZhbHVlTGlzdDo6Y3JlYXRlRnJvbVBhcnNlclZhbHVlTGlzdChwYXJz
ZXJMaXN0KSkpOworICAgICAgICBlbnRyeS52YWx1ZS0+cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNl
cyhjdXN0b21Qcm9wZXJ0aWVzLCByZXNvbHZlZFZhbHVlcyk7CiAgICAgfQogICAgIAogICAgIC8v
IFdpdGggYWxsIHJlc3VsdHMgY29tcHV0ZWQsIHdlIGNhbiBub3cgbXV0YXRlIG91ciB0YWJsZSB0
byBlbGltaW5hdGUgdGhlIHZhcmlhYmxlcyBhbmQKICAgICAvLyBob2xkIHRoZSBmaW5hbCB2YWx1
ZXMuIFRoaXMgd2F5IHdoZW4gd2UgaW5oZXJpdCwgd2UgZG9uJ3QgZW5kIHVwIHJlc3Vic3RpdHV0
aW5nIHZhcmlhYmxlcywgZXRjLgogICAgIGZvciAoYXV0byYgcmVzb2x2ZWRWYWx1ZSA6IHJlc29s
dmVkVmFsdWVzKQotICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzLnNldChyZXNvbHZlZFZhbHVlLT5u
YW1lKCksIHJlc29sdmVkVmFsdWUtPmRlcHJlY2F0ZWRWYWx1ZSgpKTsKKyAgICAgICAgY3VzdG9t
UHJvcGVydGllcy5zZXQocmVzb2x2ZWRWYWx1ZS0+bmFtZSgpLCByZXNvbHZlZFZhbHVlLmNvcHlS
ZWYoKSk7CiAKICAgICByYXJlSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9jdXN0b21Qcm9wZXJ0
aWVzLmFjY2VzcygpLT5zZXRDb250YWluc1ZhcmlhYmxlcyhmYWxzZSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMjA3
OTAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUyNyw4ICs1MjcsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBQc2V1
ZG9TdHlsZUNhY2hlKiBjYWNoZWRQc2V1ZG9TdHlsZXMoKSBjb25zdCB7IHJldHVybiBtX2NhY2hl
ZFBzZXVkb1N0eWxlcy5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXRDdXN0b21Qcm9wZXJ0eVZhbHVl
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUp
IHsgcmFyZUluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fY3VzdG9tUHJvcGVydGllcy5hY2Nlc3Mo
KS0+c2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCB2YWx1ZSk7IH0KLSAgICBSZWZQdHI8Q1NT
VmFsdWU+IGdldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBj
b25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+bV9jdXN0b21Qcm9wZXJ0aWVzLT5nZXRD
dXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUpOyB9CisgICAgdm9pZCBzZXRDdXN0b21Qcm9wZXJ0eVZh
bHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgUmVmUHRyPENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU+JiB2YWx1ZSkgeyByYXJlSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9jdXN0b21Q
cm9wZXJ0aWVzLmFjY2VzcygpLT5zZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHZhbHVlKTsg
fQorICAgIFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBnZXRDdXN0b21Qcm9wZXJ0eVZh
bHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRl
ZERhdGEtPm1fY3VzdG9tUHJvcGVydGllcy0+Z2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lKTsg
fQogICAgIGJvb2wgaGFzQ3VzdG9tUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBj
b25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+bV9jdXN0b21Qcm9wZXJ0aWVzLT5oYXND
dXN0b21Qcm9wZXJ0eShuYW1lKTsgfQogICAgIGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAm
IGN1c3RvbVByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+bV9j
dXN0b21Qcm9wZXJ0aWVzLT5tX3ZhbHVlczsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGEuaAkocmV2
aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vz
dG9tUHJvcGVydHlEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpZm5k
ZWYgU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGFfaAogI2RlZmluZSBTdHlsZUN1c3RvbVByb3BlcnR5
RGF0YV9oCiAKLSNpbmNsdWRlICJDU1NWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0N1c3RvbVByb3Bl
cnR5VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQ0LDggKzQ0LDggQEAgcHVi
bGljOgogICAgICAgICBpZiAobV92YWx1ZXMuc2l6ZSgpICE9IG8ubV92YWx1ZXMuc2l6ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgZm9yIChXVEY6Oktl
eVZhbHVlUGFpcjxBdG9taWNTdHJpbmcsIFJlZlB0cjxDU1NWYWx1ZT4+IGVudHJ5IDogbV92YWx1
ZXMpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gb3RoZXIgPSBvLm1fdmFsdWVzLmdl
dChlbnRyeS5rZXkpOworICAgICAgICBmb3IgKFdURjo6S2V5VmFsdWVQYWlyPEF0b21pY1N0cmlu
ZywgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+PiBlbnRyeSA6IG1fdmFsdWVzKSB7Cisg
ICAgICAgICAgICBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gb3RoZXIgPSBvLm1fdmFs
dWVzLmdldChlbnRyeS5rZXkpOwogICAgICAgICAgICAgaWYgKCFvdGhlciB8fCAhZW50cnkudmFs
dWUtPmVxdWFscygqb3RoZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpAQCAtNTQsMTQgKzU0LDE0IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBTdHlsZUN1c3RvbVByb3BlcnR5RGF0YSAmbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvKTsgfQogICAgIAotICAgIHZvaWQgc2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIGNvbnN0IFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlKQorICAgIHZvaWQg
c2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFJl
ZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiYgdmFsdWUpCiAgICAgewogICAgICAgICBtX3Zh
bHVlcy5zZXQobmFtZSwgdmFsdWUpOwotICAgICAgICBpZiAodmFsdWUtPmlzVmFyaWFibGVEZXBl
bmRlbnRWYWx1ZSgpKQorICAgICAgICBpZiAodmFsdWUtPmNvbnRhaW5zVmFyaWFibGVzKCkpCiAg
ICAgICAgICAgICBtX2NvbnRhaW5zVmFyaWFibGVzID0gdHJ1ZTsKICAgICB9CiAKLSAgICBSZWZQ
dHI8Q1NTVmFsdWU+IGdldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5nZXQobmFtZSk7IH0KKyAgICBSZWZQdHI8Q1NT
Q3VzdG9tUHJvcGVydHlWYWx1ZT4gZ2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmdldChuYW1lKTsgfQogICAgIEN1
c3RvbVByb3BlcnR5VmFsdWVNYXAmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAgICAg
CiAgICAgYm9vbCBoYXNDdXN0b21Qcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzLmNvbnRhaW5zKG5hbWUpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293053</attachid>
            <date>2016-10-27 13:57:08 -0700</date>
            <delta_ts>2016-10-27 14:12:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>59717</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODAwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyOCBAQAorMjAxNi0xMC0yNyAgRGF2ZSBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBbQ1NTIFBhcnNlcl0gSW1wbGVtZW50
IENTUyB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDA3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAgdG8g
dGhlIHByb2plY3QuCisKKyAgICAgICAgKiBjc3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y2hlY2tW
YXJpYWJsZXNGb3JDeWNsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyk6CisgICAgICAgICogY3NzL0NTU0N1c3Rv
bVByb3BlcnR5VmFsdWUuaDoKKyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFic3RyYWN0IHRoZSBv
bGQgYW5kIG5ldyBpbXBsZW1lbnRhdGlvbnMgb2YgQ1NTCisgICAgICAgIHZhcmlhYmxlcyBzbyB0
aGF0IHRoZSBjYWxsZXJzIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgaXQuCisKKyAgICAgICAg
KiBjc3MvQ1NTVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6OmVxdWFscyk6
CisgICAgICAgIE1ha2Ugc3VyZSBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlIGFuZCBDU1NQZW5k
aW5nU3Vic3RpdHV0aW9uVmFsdWUKKyAgICAgICAgaGF2ZSBlcXVhbHMgaW1wbGVtZW50ZWQuCisK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjppc0ludmFsaWRDdXN0b21Qcm9wZXJ0eVZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgVGhpcyBjb2RlIHdhcyBkZWFkIGFuZCBuZXZlciBjYWxsZWQu
CisKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVl
Ojppc0N1c3RvbVByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6Omhh
c1ZhcmlhYmxlUmVmZXJlbmNlcyk6CisgICAgICAgIEFkZCBhIGhlbHBlciBmdW5jdGlvbiBmb3Ig
YXNraW5nIGlmIGEgQ1NTVmFsdWUgaGFzIHZhcmlhYmxlIHJlZmVyZW5jZXMuCisgICAgICAgIFRo
aXMgYWJzdHJhY3RzIHRoZSBvbGQgYW5kIG5ldyBpbXBsZW1lbnRhdGlvbnMgc28gdGhhdCBjYWxs
ZXJzIGNhbgorICAgICAgICBhc2sgaWYgdGhlIHZhbHVlIGhhcyB2YXJpYWJsZXMgd2l0aG91dCBj
YXJpbmcgd2hpY2ggaW1wbGVtZW50YXRpb24gaXMKKyAgICAgICAgYmVpbmcgdXNlZC4KKworICAg
ICAgICAqIGNzcy9DU1NWYWx1ZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVM
aXN0OjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlz
dC5oOgorICAgICAgICBJbiBvcmRlciB0byBhYnN0cmFjdCB0aGUgb2xkIGFuZCBuZXcgdmFyaWFi
bGVzIGltcGxlbWVudGF0aW9ucywgY3VzdG9tCisgICAgICAgIHByb3BlcnRpZXMgbm93IHN0b3Jl
IENTU0N1c3RvbVByb3BlcnR5VmFsdWUgYXMgdGhlaXIgdmFsdWVzIGluc3RlYWQgb2YKKyAgICAg
ICAgcmF3IHZhbHVlcy4gVGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBiZSBwYXRjaGVk
IHRvIGRlYWwgd2l0aCB0aGlzCisgICAgICAgIHdyYXBwZXIgYmVpbmcgcHJlc2VudCBub3cuCisK
KyAgICAgICAgKiBjc3MvQ1NTVmFyaWFibGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1ZhcmlhYmxlRGF0YTo6Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVmFyaWFibGVEYXRhOjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlc1dpdGhSYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NWYXJpYWJsZURhdGE6OnJlc29sdmVWYXJpYWJsZUZhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxlRGF0YTo6cmVzb2x2ZVZhcmlhYmxlUmVm
ZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxlRGF0YTo6cmVzb2x2ZVZhcmlh
YmxlUmVmZXJlbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYXJpYWJsZURhdGE6OnJlc29s
dmVUb2tlblJhbmdlKToKKyAgICAgICAgKiBjc3MvQ1NTVmFyaWFibGVEYXRhLmg6CisgICAgICAg
IEltcGxlbWVudGF0aW9uIG9mIGN5Y2xlIGNoZWNraW5nIGFuZCB2YXJpYWJsZSByZXNvbHV0aW9u
LiBUaGUgbG9naWMgb2YKKyAgICAgICAgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgc2FtZSBh
cyB0aGUgb2xkLiBJdCB3YWxrcyBDU1NQYXJzZXJUb2tlbnMKKyAgICAgICAgaW5zdGVhZCBvZiB0
aGUgb2xkIENTU1BhcnNlciBzdHJ1Y3R1cmVzLgorCisgICAgICAgICogY3NzL0NTU1ZhcmlhYmxl
UmVmZXJlbmNlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFyaWFibGVSZWZlcmVu
Y2VWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCk6CisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBzZXJpYWxp
emF0aW9uIGNhY2hpbmcsIGp1c3QgbGlrZSB0aGUgb2xkIGltcGxlbWVudGF0aW9uCisgICAgICAg
IGhhZCBpbiBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlLgorCisgICAgICAgIChXZWJDb3JlOjpD
U1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlOjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyk6CisgICAg
ICAgICogY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuaDoKKyAgICAgICAgQWRkIGN5Y2xl
IGNoZWNraW5nIGFuZCB2YXJpYWJsZSByZXNvbHV0aW9uIGhlbHBlciBmdW5jdGlvbnMuCisKKyAg
ICAgICAgKiBjc3MvQ1NTVmFyaWFibGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NW
YXJpYWJsZVZhbHVlOjpidWlsZFBhcnNlclZhbHVlTGlzdFN1YnN0aXR1dGluZ1ZhcmlhYmxlcyk6
CisgICAgICAgIFBhdGNoZWQgdG8gYWNjb3VudCBmb3IgdGhlIGNoYW5nZSBpbiBzdG9yYWdlIG9m
IGN1c3RvbSBwcm9wZXJ0aWVzIHRvCisgICAgICAgIGhhdmUgY3VzdG9tIHByb3BlcnR5IHZhbHVl
IHdyYXBwZXJzLgorCisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydGllcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6OmdldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpib3JkZXJTcGFjaW5nVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpnZXRTaG9ydGhhbmRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6OmdldENvbW1vblZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydGllczo6Z2V0UHJvcGVydHlDU1NWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6OmFzVGV4dCk6CisgICAgICAgIENsZWFuIHVwIHRo
ZSByZXNvbHV0aW9uIG9mIHBlbmRpbmcgc3Vic3RpdHV0aW9uIHZhbHVlcy4gSW5zdGVhZCBvZiBo
YWNraW5nCisgICAgICAgIGl0IGludG8gZXZlcnkgcG9zc2libGUgU3R5bGVTaG9ydGhhbmRQcm9w
ZXJ0eSBjcmF3bGluZyBmdW5jdGlvbiwgb2J0YWluCisgICAgICAgIHRoZSBzaG9ydGhhbmQgZm9y
IHRoZSBwcm9wZXJ0eSB1cCBmcm9udCwgYWNjZXNzIHRoZSBmaXJzdCBsb25naGFuZCwgYW5kCisg
ICAgICAgIGlmIHdlIHNlZSBhIHBlbmRpbmcgc3Vic3RpdHV0aW9uIHZhbHVlLCBwZXJmb3JtIHRo
ZSBzdWJzdGl0dXRpb24uCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6YWRkTWF0Y2hlZFByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlZFZhcmlhYmxlVmFsdWUp
OgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciB0aGUgbmV3IGltcGxlbWVudGF0aW9uIGluIGFsbCB0aGUgc2FtZSBwbGFjZXMgYXMgdGhlIG9s
ZC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VJbmxpbmVTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUpOiBE
ZWxldGVkLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6CisgICAgICAgIFJlbmFt
ZSBwYXJzZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUgdG8gcGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJl
ZmVyZW5jZXMsCisgICAgICAgIHNpbmNlIGl0IGlzIG9wZXJhdGluZyBvbiB0aHJlZSBkaXN0aW5j
dCB2YWx1ZSB0eXBlcyBub3cuIFR1cm4gb24gbmV3CisgICAgICAgIHBhcnNlciBzdXBwb3J0IGZv
ciBwYXJzZUlubGluZVN0eWxlRGVjbGFyYXRpb24uCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1BhcnNlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJJbXBsOjpwYXJzZVZhcmlhYmxlVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VySW1wbDo6cGFyc2VDdXN0b21Qcm9wZXJ0
eVNldCk6IERlbGV0ZWQuCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmg6Cisg
ICAgICAgIFJlbW92ZSBwYXJzZXIgZnVuY3Rpb25zIHRoYXQgYXJlbid0IHJlbGV2YW50IHRvIG91
ciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBvZiBDU1MgdmFyaWFibGVzLgorCisgICAgICAgICog
Y3NzL3BhcnNlci9DU1NWYXJpYWJsZVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjbGFz
c2lmeVZhcmlhYmxlUmFuZ2UpOgorICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIENTUzQgJ3Jl
dmVydCcga2V5d29yZCB0byB0aGUgbmV3IHZhcmlhYmxlIHBhcnNlci4KKworICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6Y2hlY2tWYXJpYWJsZXNJbkN1c3RvbVByb3BlcnRpZXMpOgorICAgICAgICBNb2RpZmll
ZCB0byBzdG9yZSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlcyBhcyB0aGUgdmFsdWVzIGFsd2F5cyBu
b3cgYW5kCisgICAgICAgIHRvIHVzZSB0aGUgbWV0aG9kIGFic3RyYWN0aW9ucyBvbiBDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlIHRvIHJlc29sdmUKKyAgICAgICAgY3ljbGVzIGFuZCBwZXJmb3JtIHN1
YnN0aXR1dGlvbnMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpnZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhOjpzZXRDdXN0b21Qcm9wZXJ0
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhOjpnZXRD
dXN0b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgVGlnaHRlbiB1cCB0aGUgbWFwIHRvIHN0b3Jl
IENTU0N1c3RvbVByb3BlcnR5VmFsdWUgaW5zdGVhZCBvZiBqdXN0CisgICAgICAgIENTU1ZhbHVl
LgorCiAyMDE2LTEwLTI3ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBCdWZmZXJTb3VyY2Ugc2hvdWxkIGJlaGF2ZSBhcyBhbiB1bmlvbgpJbmRleDogU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjY5LDYgKzEyNjksNyBAQCBzZXQoV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcAogICAgIGNzcy9DU1NDdXJz
b3JJbWFnZVZhbHVlLmNwcAogICAgIGNzcy9DU1NDdXN0b21JZGVudFZhbHVlLmNwcAorICAgIGNz
cy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcAogICAgIGNzcy9DU1NEZWZhdWx0U3R5bGVTaGVl
dHMuY3BwCiAgICAgY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCiAgICAgY3NzL0ZvbnRGYWNl
U2V0LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIyLDcgKzM0
MjIsNyBAQAogCQk5NDQ0Q0JFMzFEODg2MTk4MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDQ0
Q0JFMjFEODg2MTU4MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1ZS5jcHAgKi87IH07CiAJ
CTk0NDRDQkU0MUQ4ODYxOTkwMDczQTA3NCAvKiBDU1NDdXN0b21JZGVudFZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDQ0Q0JFMTFEODg2MTU4
MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1ZS5oICovOyB9OwogCQk5NDQ0Q0JFNzFEODg2
MUMyMDA3M0EwNzQgLyogQ1NTVmFyaWFibGVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NDRDQkRFMUQ4ODYxNTgwMDczQTA3NCAvKiBDU1NW
YXJpYWJsZURhdGEuY3BwICovOyB9OwotCQk5NDQ0Q0JFODFEODg2MUMyMDA3M0EwNzQgLyogQ1NT
VmFyaWFibGVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NDQ0Q0JERDFEODg2MTU4MDA3M0EwNzQgLyogQ1NTVmFyaWFibGVEYXRhLmggKi87IH07
CisJCTk0NDRDQkU4MUQ4ODYxQzIwMDczQTA3NCAvKiBDU1NWYXJpYWJsZURhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NDRDQkREMUQ4ODYxNTgw
MDczQTA3NCAvKiBDU1NWYXJpYWJsZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk5NDQ0Q0JFOTFEODg2MUNBMDA3M0EwNzQgLyogQ1NTVmFy
aWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NDQ0Q0JEQzFEODg2MTU4MDA3M0EwNzQgLyogQ1NTVmFyaWFibGVSZWZl
cmVuY2VWYWx1ZS5jcHAgKi87IH07CiAJCTk0NDRDQkVBMUQ4ODYxQ0EwMDczQTA3NCAvKiBDU1NW
YXJpYWJsZVJlZmVyZW5jZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NDQ0Q0JEQjFEODg2MTU4MDA3M0EwNzQgLyogQ1NTVmFyaWFibGVSZWZl
cmVuY2VWYWx1ZS5oICovOyB9OwogCQk5NDZEMzcyRDFENkNCMjk0MDA3NzA4NEYgLyogQ1NTUGFy
c2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0
NkQzNzI4MUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXIuY3BwICovOyB9OwpAQCAtMzQ0Myw3
ICszNDQzLDcgQEAKIAkJOTQ2RDM3NDkxRDZEMDYyODAwNzcwODRGIC8qIENTU01hcmt1cC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0NzFE
NkQwNjBDMDA3NzA4NEYgLyogQ1NTTWFya3VwLmNwcCAqLzsgfTsKIAkJOTQ2RDM3NEExRDZEMDYy
ODAwNzcwODRGIC8qIENTU01hcmt1cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTQ2RDM3NDgxRDZEMDYwQzAwNzcwODRGIC8qIENTU01hcmt1cC5oICov
OyB9OwogCQk5NDZEMzc0RDFENkQwOEE2MDA3NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW5SYW5nZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0
QjFENkQwN0Y1MDA3NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW5SYW5nZS5jcHAgKi87IH07Ci0JCTk0
NkQzNzRFMUQ2RDA4QUEwMDc3MDg0RiAvKiBDU1NQYXJzZXJUb2tlblJhbmdlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0QzFENkQwN0Y1MDA3
NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW5SYW5nZS5oICovOyB9OworCQk5NDZEMzc0RTFENkQwOEFB
MDA3NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW5SYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3NEMxRDZEMDdGNTAwNzcwODRGIC8qIENTU1Bh
cnNlclRva2VuUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5NDkzQjZCRTFENzRCNDEyMDA4OEU3ODAgLyogTWVkaWFRdWVyeUJsb2NrV2F0
Y2hlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NDkzQjZCNjFENzRCMzk1MDA4OEU3ODAgLyogTWVkaWFRdWVyeUJsb2NrV2F0Y2hlci5jcHAgKi87
IH07CiAJCTk0OTNCNkJGMUQ3NEI0MTIwMDg4RTc4MCAvKiBNZWRpYVF1ZXJ5QmxvY2tXYXRjaGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDkzQjZC
NzFENzRCMzk1MDA4OEU3ODAgLyogTWVkaWFRdWVyeUJsb2NrV2F0Y2hlci5oICovOyB9OwogCQk5
NDkzQjZDMDFENzRCNDEyMDA4OEU3ODAgLyogTWVkaWFRdWVyeVBhcnNlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDkzQjZCODFENzRCMzk1MDA4
OEU3ODAgLyogTWVkaWFRdWVyeVBhcnNlci5jcHAgKi87IH07CkBAIC0zNDU1LDYgKzM0NTUsNyBA
QAogCQk5NDlDNzcwODFENkU0OTg3MDBDMERFNEYgLyogQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0OUM3
NzA2MUQ2RTQ4RUQwMEMwREU0RiAvKiBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIuY3BwICovOyB9
OwogCQk5NDlDNzcwOTFENkU0OTg3MDBDMERFNEYgLyogQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDlDNzcw
NzFENkU0OEVEMDBDMERFNEYgLyogQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyLmggKi87IH07CiAJ
CTk0OUM3NzBCMUQ2RTQ5RUQwMEMwREU0RiAvKiBDU1NQYXJzZXJPYnNlcnZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ5Qzc3MEExRDZFNDlDMzAw
QzBERTRGIC8qIENTU1BhcnNlck9ic2VydmVyLmggKi87IH07CisJCTk0RDRBQzYyMURDMjRDOEUw
MDgwRjAyRCAvKiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0RDRBQzYxMURDMjRDODEwMDgwRjAyRCAvKiBD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcCAqLzsgfTsKIAkJOTRERTVDN0UxRDc4Q0IyRTAwMTY0
RjJBIC8qIENTU1BhcnNlcklkaW9tcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NERFNUM3RDFENzhDQjI1MDAxNjRGMkEgLyogQ1NTUGFyc2VySWRp
b21zLmNwcCAqLzsgfTsKIAkJOTRERTVDODExRDdGM0ExNDAwMTY0RjJBIC8qIENTU0F0UnVsZUlE
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0REU1
QzdGMUQ3RjM5RDAwMDE2NEYyQSAvKiBDU1NBdFJ1bGVJRC5jcHAgKi87IH07CiAJCTk0REU1Qzgy
MUQ3RjNBMTQwMDE2NEYyQSAvKiBDU1NBdFJ1bGVJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTRERTVDODAxRDdGMzlEMDAwMTY0RjJBIC8qIENTU0F0
UnVsZUlELmggKi87IH07CkBAIC0xMDg0NCw2ICsxMDg0NSw3IEBACiAJCTk0OUM3NzA2MUQ2RTQ4
RUQwMEMwREU0RiAvKiBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyLmNwcDsgcGF0
aCA9IHBhcnNlci9DU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5NDlDNzcwNzFENkU0OEVEMDBDMERFNEYgLyogQ1NTUGFyc2VyT2JzZXJ2
ZXJXcmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENTU1BhcnNlck9i
c2VydmVyV3JhcHBlci5oOyBwYXRoID0gcGFyc2VyL0NTU1BhcnNlck9ic2VydmVyV3JhcHBlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NDlDNzcwQTFENkU0OUMzMDBDMERFNEYg
LyogQ1NTUGFyc2VyT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q1NTUGFyc2VyT2JzZXJ2ZXIuaDsgcGF0aCA9IHBhcnNlci9DU1NQYXJzZXJPYnNlcnZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NEQ0QUM2MTFEQzI0QzgxMDA4MEYwMkQgLyog
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTRERTVDN0QxRDc4Q0IyNTAwMTY0RjJBIC8qIENTU1BhcnNlcklkaW9tcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDU1NQYXJzZXJJZGlvbXMuY3Bw
OyBwYXRoID0gcGFyc2VyL0NTU1BhcnNlcklkaW9tcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk0REU1QzdGMUQ3RjM5RDAwMDE2NEYyQSAvKiBDU1NBdFJ1bGVJRC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDU1NBdFJ1bGVJRC5jcHA7IHBhdGgg
PSBwYXJzZXIvQ1NTQXRSdWxlSUQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
NERFNUM4MDFEN0YzOUQwMDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQ1NTQXRSdWxlSUQuaDsgcGF0aCA9IHBhcnNlci9DU1NBdFJ1bGVJ
RC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI4NTksNiArMjI4NjEsNyBAQAog
CQkJCUFBMDk3OEVFMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggKi8s
CiAJCQkJOTQ0NENCRTIxRDg4NjE1ODAwNzNBMDc0IC8qIENTU0N1c3RvbUlkZW50VmFsdWUuY3Bw
ICovLAogCQkJCTk0NDRDQkUxMUQ4ODYxNTgwMDczQTA3NCAvKiBDU1NDdXN0b21JZGVudFZhbHVl
LmggKi8sCisJCQkJOTRENEFDNjExREMyNEM4MTAwODBGMDJEIC8qIENTU0N1c3RvbVByb3BlcnR5
VmFsdWUuY3BwICovLAogCQkJCUJDNzc5RTEzMUJCMjE1QkIwMENBQThCRiAvKiBDU1NDdXN0b21Q
cm9wZXJ0eVZhbHVlLmggKi8sCiAJCQkJNEE5Q0M4MTUxNkJCOUFDNjAwRUM2NDVBIC8qIENTU0Rl
ZmF1bHRTdHlsZVNoZWV0cy5jcHAgKi8sCiAJCQkJNEE5Q0M4MTYxNkJCOUFDNjAwRUM2NDVBIC8q
IENTU0RlZmF1bHRTdHlsZVNoZWV0cy5oICovLApAQCAtMjk2NTcsNiArMjk2NjAsNyBAQAogCQkJ
CUIyRkEzRDVBMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0NsaXBQYXRoRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMkZBM0Q1QzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdDb2xvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q1RTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5
NEQ0QUM2MjFEQzI0QzhFMDA4MEYwMkQgLyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMkZBM0Q2MDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdDdXJzb3JF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDYyMEFCNzVBNkYwMDBFNUFDNCAv
KiBKU1NWR0RlZnNFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDY0MEFCNzVB
NkYwMDBFNUFDNCAvKiBKU1NWR0Rlc2NFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL0NTU0N1c3RvbVByb3BlcnR5VmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NT
Q3VzdG9tUHJvcGVydHlWYWx1ZS5oIgorCisjaW5jbHVkZSAiQ1NTUGFyc2VyVmFsdWVzLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjaGVj
a1ZhcmlhYmxlc0ZvckN5Y2xlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEN1c3RvbVByb3Bl
cnR5VmFsdWVNYXAmIGN1c3RvbVByb3BlcnRpZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgc2Vl
blByb3BlcnRpZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgaW52YWxpZFByb3BlcnRpZXMpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGNvbnRhaW5zVmFyaWFibGVzKCkpOworICAgIGlmIChtX2RlcHJl
Y2F0ZWRWYWx1ZSAmJiBtX2RlcHJlY2F0ZWRWYWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVl
KCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlPigq
bV9kZXByZWNhdGVkVmFsdWUpLmNoZWNrVmFyaWFibGVzRm9yQ3ljbGVzKG5hbWUsIGN1c3RvbVBy
b3BlcnRpZXMsIHNlZW5Qcm9wZXJ0aWVzLCBpbnZhbGlkUHJvcGVydGllcyk7CisgICAgaWYgKG1f
dmFsdWUpCisgICAgICAgIHJldHVybiBtX3ZhbHVlLT5jaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyhu
YW1lLCBjdXN0b21Qcm9wZXJ0aWVzLCBzZWVuUHJvcGVydGllcywgaW52YWxpZFByb3BlcnRpZXMp
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OnJl
c29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoY29uc3QgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3Vz
dG9tUHJvcGVydGllcywgVmVjdG9yPFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPj4mIHJlc29s
dmVkVmFsdWVzKSBjb25zdAoreworICAgIEFTU0VSVChjb250YWluc1ZhcmlhYmxlcygpKTsKKyAg
ICBpZiAobV9kZXByZWNhdGVkVmFsdWUgJiYgbV9kZXByZWNhdGVkVmFsdWUtPmlzVmFyaWFibGVE
ZXBlbmRlbnRWYWx1ZSgpKSB7CisgICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCBwYXJzZXJMaXN0
OworICAgICAgICBpZiAoIWRvd25jYXN0PENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWU+KCptX2Rl
cHJlY2F0ZWRWYWx1ZSkudmFsdWVMaXN0KCkuYnVpbGRQYXJzZXJWYWx1ZUxpc3RTdWJzdGl0dXRp
bmdWYXJpYWJsZXMoJnBhcnNlckxpc3QsIGN1c3RvbVByb3BlcnRpZXMpKQorICAgICAgICAgICAg
cmVzb2x2ZWRWYWx1ZXMuYXBwZW5kKENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShtX25h
bWUsIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZUludmFsaWQoKSkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXNvbHZlZFZhbHVlcy5hcHBlbmQoQ1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZTo6Y3JlYXRlKG1fbmFtZSwgQ1NTVmFsdWVMaXN0OjpjcmVhdGVGcm9tUGFyc2VyVmFsdWVM
aXN0KHBhcnNlckxpc3QpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYg
KCFtX3ZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKG1fdmFsdWUtPm5l
ZWRzVmFyaWFibGVSZXNvbHV0aW9uKCkpOworICAgIFJlZlB0cjxDU1NWYXJpYWJsZURhdGE+IHJl
c29sdmVkRGF0YSA9IG1fdmFsdWUtPnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoY3VzdG9tUHJv
cGVydGllcyk7CisgICAgaWYgKHJlc29sdmVkRGF0YSkKKyAgICAgICAgcmVzb2x2ZWRWYWx1ZXMu
YXBwZW5kKENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZVdpdGhWYXJpYWJsZURhdGEobV9u
YW1lLCByZXNvbHZlZERhdGEucmVsZWFzZU5vbk51bGwoKSkpOworICAgIGVsc2UKKyAgICAgICAg
cmVzb2x2ZWRWYWx1ZXMuYXBwZW5kKENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShtX25h
bWUsIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZUludmFsaWQoKSkpOworfQorCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmgJKHJldmlz
aW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNTU1ZhbHVl
LmgiCiAjaW5jbHVkZSAiQ1NTVmFyaWFibGVEYXRhLmgiCisjaW5jbHVkZSAiQ1NTVmFyaWFibGVE
ZXBlbmRlbnRWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNzMsMTMgKzc0LDE3IEBAIHB1YmxpYzoKIAogICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIAot
ICAgIC8vIEZJWE1FOiBTaG91bGQgYXJndWFibHkgaW1wbGVtZW50IGVxdWFscyBvbiBvdXIgaW50
ZXJuYWwgdmFsdWVzLCBidXQgc2VyaWFsaXphdGlvbiB0byBjb21wYXJlIGlzIHByb2JhYmx5IGZp
bmUuCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fbmFtZSA9PSBvdGhlci5tX25hbWUgJiYgY3VzdG9tQ1NTVGV4dCgp
ID09IG90aGVyLmN1c3RvbUNTU1RleHQoKTsgfQorICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU0N1
c3RvbVByb3BlcnR5VmFsdWUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX25hbWUgPT0gb3RoZXIu
bV9uYW1lICYmIG1fZGVwcmVjYXRlZFZhbHVlID09IG90aGVyLm1fZGVwcmVjYXRlZFZhbHVlICYm
IG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZSAmJiBtX3ZhbHVlSWQgPT0gb3RoZXIubV92YWx1ZUlk
OyB9CiAKLSAgICBib29sIGlzSW52YWxpZCgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CiAg
ICAgYm9vbCBjb250YWluc1ZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNWYXJp
YWJsZXM7IH0KKyAgICBib29sIGNoZWNrVmFyaWFibGVzRm9yQ3ljbGVzKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYsIEhhc2hTZXQ8QXRvbWljU3RyaW5n
PiYgc2VlblByb3BlcnRpZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgaW52YWxpZFByb3BlcnRp
ZXMpIGNvbnN0OworCisgICAgdm9pZCByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGNvbnN0IEN1
c3RvbVByb3BlcnR5VmFsdWVNYXAmLCBWZWN0b3I8UmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+
PiYpIGNvbnN0OwogCiAgICAgY29uc3QgUmVmUHRyPENTU1ZhbHVlPiBkZXByZWNhdGVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX2RlcHJlY2F0ZWRWYWx1ZS5nZXQoKTsgfQorICAgIAorICAgIENT
U1ZhbHVlSUQgdmFsdWVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVJZDsgfQorICAgIENTU1Zh
cmlhYmxlRGF0YSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CiAKIHBy
aXZhdGU6CiAgICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUsIFJlZjxDU1NWYWx1ZT4mJiB2YWx1ZSkKQEAgLTg3LDcgKzkyLDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgLCBtX25hbWUobmFtZSkKICAgICAgICAgLCBtX2RlcHJlY2F0ZWRWYWx1ZShXVEZNb3Zl
KHZhbHVlKSkKICAgICAgICAgLCBtX2NvbnRhaW5zVmFyaWFibGVzKG1fZGVwcmVjYXRlZFZhbHVl
LT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSkKLSAgICAgICAgLCBtX3NlcmlhbGl6ZWQoZmFs
c2UpCiAgICAgewogICAgIH0KICAgICAKQEAgLTEyNCw3ICsxMjgsNyBAQCBwcml2YXRlOgogICAg
IAogICAgIG11dGFibGUgU3RyaW5nIG1fc3RyaW5nVmFsdWU7CiAgICAgYm9vbCBtX2NvbnRhaW5z
VmFyaWFibGVzIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIGJvb2wgbV9zZXJpYWxpemVkOworICAg
IG11dGFibGUgYm9vbCBtX3NlcmlhbGl6ZWQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCShyZXZpc2lvbiAyMDc5MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDUsNiArMjQ1LDEwIEBAIGJvb2wgQ1NTVmFsdWU6OmVxdWFscyhjb25zdCBDU1NWYWx1ZSYgb3QK
ICAgICAgICAgICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVzPENTU0NvbnRlbnREaXN0cmlidXRp
b25WYWx1ZT4oKnRoaXMsIG90aGVyKTsKICAgICAgICAgY2FzZSBDdXN0b21Qcm9wZXJ0eUNsYXNz
OgogICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZXM8Q1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZT4oKnRoaXMsIG90aGVyKTsKKyAgICAgICAgY2FzZSBWYXJpYWJsZVJlZmVyZW5jZUNsYXNz
OgorICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZXM8Q1NTVmFyaWFibGVSZWZlcmVu
Y2VWYWx1ZT4oKnRoaXMsIG90aGVyKTsKKyAgICAgICAgY2FzZSBQZW5kaW5nU3Vic3RpdHV0aW9u
VmFsdWVDbGFzczoKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVzPENTU1BlbmRp
bmdTdWJzdGl0dXRpb25WYWx1ZT4oKnRoaXMsIG90aGVyKTsKICAgICAgICAgY2FzZSBWYXJpYWJs
ZURlcGVuZGVudENsYXNzOgogICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZXM8Q1NT
VmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4oKnRoaXMsIG90aGVyKTsKICAgICAgICAgY2FzZSBWYXJp
YWJsZUNsYXNzOgpAQCAtNTUyLDExICs1NTYsNiBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1ZhbHVl
OjpjbG9uZUZvckNTU09NCiAgICAgfQogfQogCi1ib29sIENTU1ZhbHVlOjppc0ludmFsaWRDdXN0
b21Qcm9wZXJ0eVZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0eVZh
bHVlKCkgJiYgZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnRoaXMpLmlzSW52YWxp
ZCgpOwotfQotCiBib29sIENTU1ZhbHVlOjp0cmVhdEFzSW5oZXJpdGVkVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlEKSBjb25zdAogewogICAgIHJldHVybiBjbGFzc1R5cGUoKSA9PSBJbmhl
cml0ZWRDbGFzcyB8fCAoY2xhc3NUeXBlKCkgPT0gVW5zZXRDbGFzcyAmJiBDU1NQcm9wZXJ0eTo6
aXNJbmhlcml0ZWRQcm9wZXJ0eShwcm9wZXJ0eUlEKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUu
aAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiBjbGFz
cyBTdHlsZVNoZWV0Q29udGVudHM7CiAKQEAgLTc4LDcgKzc5LDYgQEAgcHVibGljOgogICAgIGJv
b2wgaXNDcm9zc2ZhZGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NUeXBlID09IENyb3Nz
ZmFkZUNsYXNzOyB9CiAgICAgYm9vbCBpc0N1cnNvckltYWdlVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX2NsYXNzVHlwZSA9PSBDdXJzb3JJbWFnZUNsYXNzOyB9CiAgICAgYm9vbCBpc0N1c3RvbVBy
b3BlcnR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzVHlwZSA9PSBDdXN0b21Qcm9wZXJ0
eUNsYXNzOyB9Ci0gICAgYm9vbCBpc0ludmFsaWRDdXN0b21Qcm9wZXJ0eVZhbHVlKCkgY29uc3Q7
CiAgICAgYm9vbCBpc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Ns
YXNzVHlwZSA9PSBWYXJpYWJsZURlcGVuZGVudENsYXNzOyB9CiAgICAgYm9vbCBpc1ZhcmlhYmxl
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzVHlwZSA9PSBWYXJpYWJsZUNsYXNzOyB9CiAg
ICAgYm9vbCBpc0Z1bmN0aW9uVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzVHlwZSA9PSBG
dW5jdGlvbkNsYXNzOyB9CkBAIC0xMjksNiArMTI5LDggQEAgcHVibGljOgogICAgIGJvb2wgaXND
dXN0b21JZGVudFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1R5cGUgPT0gQ3VzdG9tSWRl
bnRDbGFzczsgfQogICAgIGJvb2wgaXNWYXJpYWJsZVJlZmVyZW5jZVZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGFzc1R5cGUgPT0gVmFyaWFibGVSZWZlcmVuY2VDbGFzczsgfQogICAgIGJvb2wg
aXNQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzVHlwZSA9
PSBQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWVDbGFzczsgfQorICAgIAorICAgIGJvb2wgaGFzVmFy
aWFibGVSZWZlcmVuY2VzKCkgY29uc3QgeyByZXR1cm4gaXNWYXJpYWJsZURlcGVuZGVudFZhbHVl
KCkgfHwgaXNWYXJpYWJsZVJlZmVyZW5jZVZhbHVlKCkgfHwgaXNQZW5kaW5nU3Vic3RpdHV0aW9u
VmFsdWUoKTsgfQogCiAgICAgYm9vbCBpc0NTU09NU2FmZSgpIGNvbnN0IHsgcmV0dXJuIG1faXND
U1NPTVNhZmU7IH0KICAgICBib29sIGlzU3VidHlwZUV4cG9zZWRUb0NTU09NKCkgY29uc3QKQEAg
LTMwMCw3ICszMDIsNyBAQCBpbmxpbmUgYm9vbCBjb21wYXJlQ1NTVmFsdWUoY29uc3QgUmVmPENT
CiAgICAgcmV0dXJuIGZpcnN0LmdldCgpLmVxdWFscyhzZWNvbmQpOwogfQogCi10eXBlZGVmIEhh
c2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8Q1NTVmFsdWU+PiBDdXN0b21Qcm9wZXJ0eVZhbHVl
TWFwOwordHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU+PiBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCShyZXZpc2lvbiAyMDc5
MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlTGlzdC5oIgogCisjaW5jbHVkZSAiQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIgogI2luY2x1
ZGUgIkNTU0Z1bmN0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXJWYWx1ZXMuaCIKICNp
bmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgpAQCAtMjA2LDggKzIwNyw4IEBAIGJvb2wgQ1NT
VmFsdWVMaXN0OjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2wKICAgICAgICAgICAgIGF1dG8mIHZhcmlh
YmxlVmFsdWUgPSBkb3duY2FzdDxDU1NWYXJpYWJsZVZhbHVlPigqdmFsdWUpOwogICAgICAgICAg
ICAgaWYgKHNlZW5Qcm9wZXJ0aWVzLmNvbnRhaW5zKHZhcmlhYmxlVmFsdWUubmFtZSgpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlID0gY3VzdG9tUHJvcGVydGllcy5nZXQodmFyaWFibGVWYWx1ZS5uYW1lKCkpOwotICAg
ICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSAm
JiAhZG93bmNhc3Q8Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4oKnZhbHVlKS5jaGVja1Zhcmlh
Ymxlc0ZvckN5Y2xlcyh2YXJpYWJsZVZhbHVlLm5hbWUoKSwgY3VzdG9tUHJvcGVydGllcywgc2Vl
blByb3BlcnRpZXMsIGludmFsaWRQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgIFJlZlB0cjxDU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlPiB2YWx1ZSA9IGN1c3RvbVByb3BlcnRpZXMuZ2V0KHZhcmlhYmxl
VmFsdWUubmFtZSgpKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+Y29udGFpbnNW
YXJpYWJsZXMoKSAmJiAhZG93bmNhc3Q8Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4oKih2YWx1
ZS0+ZGVwcmVjYXRlZFZhbHVlKCkpKS5jaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyh2YXJpYWJsZVZh
bHVlLm5hbWUoKSwgY3VzdG9tUHJvcGVydGllcywgc2VlblByb3BlcnRpZXMsIGludmFsaWRQcm9w
ZXJ0aWVzKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIC8v
IEhhdmUgdG8gY2hlY2sgdGhlIGZhbGxiYWNrIHZhbHVlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYWx1ZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFsdWVMaXN0LmgJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NW
YWx1ZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIENTU0N1c3RvbVByb3BlcnR5VmFsdWU7CiBzdHJ1Y3QgQ1NTUGFy
c2VyVmFsdWU7CiBjbGFzcyBDU1NQYXJzZXJWYWx1ZUxpc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NWYXJpYWJsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYXJpYWJsZURhdGEuY3BwCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVmFyaWFibGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU1ZhcmlhYmxlRGF0YS5oIgog
CisjaW5jbHVkZSAiQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1BhcnNl
ci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlclRva2VuUmFuZ2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CkBAIC04MSw0ICs4MiwxMDEgQEAgQ1NTVmFyaWFibGVEYXRhOjpD
U1NWYXJpYWJsZURhdGEoY29uc3QgQwogICAgIGNvbnN1bWVBbmRVcGRhdGVUb2tlbnMocmFuZ2Up
OwogfQogCitib29sIENTU1ZhcmlhYmxlRGF0YTo6Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9w
ZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0
b21pY1N0cmluZz4mIGludmFsaWRQcm9wZXJ0aWVzKSBjb25zdAoreworICAgIGlmIChpbnZhbGlk
UHJvcGVydGllcy5jb250YWlucyhuYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBuZXdTZWVuUHJvcGVydGllcyA9IHNlZW5Qcm9wZXJ0
aWVzOworICAgIG5ld1NlZW5Qcm9wZXJ0aWVzLmFkZChuYW1lKTsKKyAgICAKKyAgICBib29sIHZh
bGlkID0gY2hlY2tWYXJpYWJsZXNGb3JDeWNsZXNXaXRoUmFuZ2UobV90b2tlbnMsIGN1c3RvbVBy
b3BlcnRpZXMsIG5ld1NlZW5Qcm9wZXJ0aWVzLCBpbnZhbGlkUHJvcGVydGllcyk7CisgICAgaWYg
KCF2YWxpZCkKKyAgICAgICAgaW52YWxpZFByb3BlcnRpZXMuYWRkKG5hbWUpOworICAgIAorICAg
IHJldHVybiB2YWxpZDsKK30KKyAgICAKK2Jvb2wgQ1NTVmFyaWFibGVEYXRhOjpjaGVja1Zhcmlh
Ymxlc0ZvckN5Y2xlc1dpdGhSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBDdXN0b21Q
cm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4m
IHNlZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGludmFsaWRQcm9wZXJ0aWVz
KSBjb25zdAoreworICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgeworICAgICAgICBpZiAocmFu
Z2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZVZhcikgeworICAgICAgICAgICAgQ1NT
UGFyc2VyVG9rZW5SYW5nZSBibG9jayA9IHJhbmdlLmNvbnN1bWVCbG9jaygpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBibG9jay5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgICAgICAgICAg
QVNTRVJUKGJsb2NrLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbik7CisgICAgICAgICAgICBB
dG9taWNTdHJpbmcgdmFyaWFibGVOYW1lID0KKyAgICAgICAgICAgIGJsb2NrLmNvbnN1bWVJbmNs
dWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50b0F0b21pY1N0cmluZygpOworICAgICAgICAgICAg
QVNTRVJUKGJsb2NrLmF0RW5kKCkgfHwgYmxvY2sucGVlaygpLnR5cGUoKSA9PSBDb21tYVRva2Vu
KTsKKyAgICAgICAgICAgIGlmIChzZWVuUHJvcGVydGllcy5jb250YWlucyh2YXJpYWJsZU5hbWUp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgUmVmUHRyPENT
U0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVlID0gY3VzdG9tUHJvcGVydGllcy5nZXQodmFyaWFi
bGVOYW1lKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+Y29udGFpbnNWYXJpYWJs
ZXMoKSAmJiAhdmFsdWUtPmNoZWNrVmFyaWFibGVzRm9yQ3ljbGVzKHZhcmlhYmxlTmFtZSwgY3Vz
dG9tUHJvcGVydGllcywgc2VlblByb3BlcnRpZXMsIGludmFsaWRQcm9wZXJ0aWVzKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChyYW5nZS5wZWVrKCku
dHlwZSgpID09IENvbW1hVG9rZW4pIHsKKyAgICAgICAgICAgICAgICAvLyBGYWxsYmFjay4KKyAg
ICAgICAgICAgICAgICByYW5nZS5jb25zdW1lKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNo
ZWNrVmFyaWFibGVzRm9yQ3ljbGVzV2l0aFJhbmdlKGJsb2NrLCBjdXN0b21Qcm9wZXJ0aWVzLCBz
ZWVuUHJvcGVydGllcywgaW52YWxpZFByb3BlcnRpZXMpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIHJhbmdlLmNvbnN1bWUoKTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgQ1NTVmFyaWFibGVEYXRhOjpyZXNvbHZlVmFyaWFibGVGYWxsYmFj
ayhjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBDU1NQYXJz
ZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgaWYgKHJhbmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBDb21tYVRva2VuKTsKKyAgICByYW5nZS5jb25z
dW1lKCk7CisgICAgcmV0dXJuIHJlc29sdmVUb2tlblJhbmdlKGN1c3RvbVByb3BlcnRpZXMsIHJh
bmdlLCByZXN1bHQpOworfQorICAgIAorYm9vbCBDU1NWYXJpYWJsZURhdGE6OnJlc29sdmVWYXJp
YWJsZVJlZmVyZW5jZShjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0
aWVzLCBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiBy
ZXN1bHQpIGNvbnN0Cit7CisgICAgcmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICBBU1NF
UlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKTsKKyAgICBBdG9taWNTdHJpbmcg
dmFyaWFibGVOYW1lID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgp
LnRvQXRvbWljU3RyaW5nKCk7CisgICAgQVNTRVJUKHJhbmdlLmF0RW5kKCkgfHwgKHJhbmdlLnBl
ZWsoKS50eXBlKCkgPT0gQ29tbWFUb2tlbikpOworICAgIAorICAgIFJlZlB0cjxDU1NDdXN0b21Q
cm9wZXJ0eVZhbHVlPiBwcm9wZXJ0eSA9IGN1c3RvbVByb3BlcnRpZXMuZ2V0KHZhcmlhYmxlTmFt
ZSk7CisgICAgaWYgKCFwcm9wZXJ0eSB8fCAhcHJvcGVydHktPnZhbHVlKCkpCisgICAgICAgIHJl
dHVybiByZXNvbHZlVmFyaWFibGVGYWxsYmFjayhjdXN0b21Qcm9wZXJ0aWVzLCByYW5nZSwgcmVz
dWx0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHktPmNvbnRhaW5zVmFyaWFibGVzKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IEF2b2lkIGRvaW5nIHRoaXMgd29yayBtb3JlIHRoYW4gb25jZS4KKyAg
ICAgICAgUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gcmVzb2x2ZWREYXRhID0gcHJvcGVydHktPnZh
bHVlKCktPnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoY3VzdG9tUHJvcGVydGllcyk7CisgICAg
ICAgIGlmICghcmVzb2x2ZWREYXRhKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXN1bHQuYXBwZW5kVmVjdG9yKHJlc29sdmVkRGF0YS0+dG9rZW5zKCkpOworICAgIH0gZWxz
ZQorICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKHByb3BlcnR5LT52YWx1ZSgpLT50b2tlbnMo
KSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JlZlB0cjxDU1NWYXJpYWJsZURhdGE+
IENTU1ZhcmlhYmxlRGF0YTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjb25zdCBDdXN0b21Q
cm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzKSBjb25zdAoreworICAgIFZlY3RvcjxD
U1NQYXJzZXJUb2tlbj4gcmVzb2x2ZWRUb2tlbnM7CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBy
YW5nZSA9IG1fdG9rZW5zOworICAgIGlmICghcmVzb2x2ZVRva2VuUmFuZ2UoY3VzdG9tUHJvcGVy
dGllcywgcmFuZ2UsIHJlc29sdmVkVG9rZW5zKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIENTU1ZhcmlhYmxlRGF0YTo6Y3JlYXRlUmVzb2x2ZWQocmVzb2x2ZWRUb2tlbnMs
ICp0aGlzKTsKK30KKyAgICAKK2Jvb2wgQ1NTVmFyaWFibGVEYXRhOjpyZXNvbHZlVG9rZW5SYW5n
ZShjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBDU1NQYXJz
ZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICB3aGlsZSAoIXJhbmdlLmF0RW5kKCkp
IHsKKyAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVWYXIp
CisgICAgICAgICAgICBzdWNjZXNzICY9IHJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZShjdXN0b21Q
cm9wZXJ0aWVzLCByYW5nZS5jb25zdW1lQmxvY2soKSwgcmVzdWx0KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyYW5nZS5jb25zdW1lKCkpOworICAgIH0KKyAgICBy
ZXR1cm4gc3VjY2VzczsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NWYXJpYWJsZURhdGEuaAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ZhcmlhYmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSwx
MSBAQCBwdWJsaWM6CiAKICAgICBib29sIG5lZWRzVmFyaWFibGVSZXNvbHV0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9uZWVkc1ZhcmlhYmxlUmVzb2x1dGlvbjsgfQogCisgICAgYm9vbCBjaGVja1Zh
cmlhYmxlc0ZvckN5Y2xlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEN1c3RvbVByb3BlcnR5
VmFsdWVNYXAmLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0
PEF0b21pY1N0cmluZz4mIGludmFsaWRQcm9wZXJ0aWVzKSBjb25zdDsKKworICAgIFJlZlB0cjxD
U1NWYXJpYWJsZURhdGE+IHJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoY29uc3QgQ3VzdG9tUHJv
cGVydHlWYWx1ZU1hcCYgY3VzdG9tUHJvcGVydGllcykgY29uc3Q7CisgICAgYm9vbCByZXNvbHZl
VG9rZW5SYW5nZShjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiwgQ1NTUGFyc2VyVG9rZW5S
YW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYpIGNvbnN0OworCiBwcml2YXRlOgogICAgIENT
U1ZhcmlhYmxlRGF0YShjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgYm9vbCBuZWVkc1Zhcmlh
YmxlUmVzb2x1dGlvbik7CiAKQEAgLTc0LDYgKzc5LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGNvbnN1bWVBbmRVcGRhdGVUb2tlbnMoY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgdXBkYXRlVG9rZW5zKGNvbnN0
IENTU1BhcnNlclRva2VuUmFuZ2UmKTsKKyAgICAKKyAgICBib29sIGNoZWNrVmFyaWFibGVzRm9y
Q3ljbGVzV2l0aFJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UsIEN1c3RvbVByb3BlcnR5VmFsdWVN
YXAmLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0b21p
Y1N0cmluZz4mIGludmFsaWRQcm9wZXJ0aWVzKSBjb25zdDsKKyAgICBib29sIHJlc29sdmVWYXJp
YWJsZVJlZmVyZW5jZShjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiwgQ1NTUGFyc2VyVG9r
ZW5SYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYpIGNvbnN0OworICAgIGJvb2wgcmVzb2x2
ZVZhcmlhYmxlRmFsbGJhY2soY29uc3QgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYsIENTU1BhcnNl
clRva2VuUmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mKSBjb25zdDsKIAogICAgIFN0cmlu
ZyBtX2JhY2tpbmdTdHJpbmc7CiAgICAgVmVjdG9yPENTU1BhcnNlclRva2VuPiBtX3Rva2VuczsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1
ZS5jcHAJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJs
ZVJlZmVyZW5jZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsMTcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBTdHJpbmcgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZTo6Y3Vz
dG9tQ1NTVGV4dCgpIGNvbnN0CiB7Ci0gICAgLy8gV2UgbWF5IHdhbnQgdG8gY29uc2lkZXIgY2Fj
aGluZyB0aGlzIHZhbHVlLgotICAgIHJldHVybiBtX2RhdGEtPnRva2VuUmFuZ2UoKS5zZXJpYWxp
emUoKTsKKyAgICBpZiAoIW1fc2VyaWFsaXplZCkgeworICAgICAgICBtX3NlcmlhbGl6ZWQgPSB0
cnVlOworICAgICAgICBtX3N0cmluZ1ZhbHVlID0gbV9kYXRhLT50b2tlblJhbmdlKCkuc2VyaWFs
aXplKCk7CisgICAgfQorICAgIHJldHVybiBtX3N0cmluZ1ZhbHVlOworfQorICAgIAorYm9vbCBD
U1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlOjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyhjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmIGN1c3RvbVByb3BlcnRp
ZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgc2VlblByb3BlcnRpZXMsIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPiYgaW52YWxpZFByb3BlcnRpZXMpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGF0YSk7
CisgICAgcmV0dXJuIG1fZGF0YS0+Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMobmFtZSwgY3VzdG9t
UHJvcGVydGllcywgc2VlblByb3BlcnRpZXMsIGludmFsaWRQcm9wZXJ0aWVzKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxl
UmVmZXJlbmNlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFy
aWFibGVSZWZlcmVuY2VWYWx1ZS5oCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2
ICs1MCw4IEBAIHB1YmxpYzoKICAgICBib29sIGVxdWFscyhjb25zdCBDU1NWYXJpYWJsZVJlZmVy
ZW5jZVZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9kYXRhID09IG90aGVyLm1fZGF0YTsg
fQogICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7CiAKKyAgICBib29sIGNoZWNrVmFy
aWFibGVzRm9yQ3ljbGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgQ3VzdG9tUHJvcGVydHlW
YWx1ZU1hcCYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgc2VlblByb3BlcnRpZXMsIEhhc2hTZXQ8
QXRvbWljU3RyaW5nPiYgaW52YWxpZFByb3BlcnRpZXMpIGNvbnN0OworCiBwcml2YXRlOgogICAg
IENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUoUmVmPENTU1ZhcmlhYmxlRGF0YT4mJiBkYXRhKQog
ICAgICAgICA6IENTU1ZhbHVlKFZhcmlhYmxlUmVmZXJlbmNlQ2xhc3MpCkBAIC01OCw2ICs2MCw4
IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gbV9kYXRh
OworICAgIG11dGFibGUgU3RyaW5nIG1fc3RyaW5nVmFsdWU7CisgICAgbXV0YWJsZSBib29sIG1f
c2VyaWFsaXplZCB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlVmFsdWUuY3BwCShyZXZpc2lvbiAyMDc5MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDEwICs2OSwxMSBAQCBib29sIENTU1ZhcmlhYmxlVmFsdWU6OmVxdWFscyhjb25z
dCBDU1NWCiAKIGJvb2wgQ1NTVmFyaWFibGVWYWx1ZTo6YnVpbGRQYXJzZXJWYWx1ZUxpc3RTdWJz
dGl0dXRpbmdWYXJpYWJsZXMoQ1NTUGFyc2VyVmFsdWVMaXN0KiByZXN1bHRMaXN0LCBjb25zdCBD
dXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzKSBjb25zdAogewotICAgIGlm
IChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY3VzdG9tUHJvcGVydGllcy5nZXQobV9uYW1lKSkg
ewotICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgaWYgKFJlZlB0cjxDU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlPiBjdXN0b21Qcm9wZXJ0eVZhbHVlID0gY3VzdG9tUHJvcGVydGll
cy5nZXQobV9uYW1lKSkgeworICAgICAgICBhdXRvIHZhbHVlID0gY3VzdG9tUHJvcGVydHlWYWx1
ZS0+ZGVwcmVjYXRlZFZhbHVlKCk7CisgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1
ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1
ZSkuYnVpbGRQYXJzZXJWYWx1ZUxpc3RTdWJzdGl0dXRpbmdWYXJpYWJsZXMocmVzdWx0TGlzdCwg
Y3VzdG9tUHJvcGVydGllcyk7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVu
dFZhbHVlKCkpCisgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVu
dFZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTVmFyaWFibGVEZXBlbmRl
bnRWYWx1ZT4oKnZhbHVlKS52YWx1ZUxpc3QoKS5idWlsZFBhcnNlclZhbHVlTGlzdFN1YnN0aXR1
dGluZ1ZhcmlhYmxlcyhyZXN1bHRMaXN0LCBjdXN0b21Qcm9wZXJ0aWVzKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyMDc5MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5oIgogI2luY2x1ZGUgIkNTU0N1c3RvbVByb3BlcnR5VmFsdWUuaCIKICNpbmNsdWRlICJDU1NQ
YXJzZXIuaCIKKyNpbmNsdWRlICJDU1NQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWUuaCIKICNpbmNs
dWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5j
bHVkZSAiQ1NTVmFsdWVQb29sLmgiCkBAIC0xMjYsNiArMTI3LDE3IEBAIFN0cmluZyBTdHlsZVBy
b3BlcnRpZXM6OmdldFByb3BlcnR5VmFsdWUKICAgICBpZiAodmFsdWUpCiAgICAgICAgIHJldHVy
biB2YWx1ZS0+Y3NzVGV4dCgpOwogCisgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYg
c2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJRCk7CisgICAgaWYgKHNo
b3J0aGFuZC5sZW5ndGgoKSkgeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0
UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbMF0pOworICAg
ICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICBp
ZiAodmFsdWUtPmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLT5jc3NUZXh0KCk7CisgICAgICAgIGlmICh2YWx1ZS0+aXNQZW5kaW5nU3Vic3RpdHV0
aW9uVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NQZW5kaW5nU3Vic3Rp
dHV0aW9uVmFsdWU+KCp2YWx1ZSkuc2hvcnRoYW5kVmFsdWUoKS0+Y3NzVGV4dCgpOworICAgIH0K
KwogICAgIC8vIFNob3J0aGFuZCBhbmQgNC12YWx1ZXMgcHJvcGVydGllcwogICAgIHN3aXRjaCAo
cHJvcGVydHlJRCkgewogICAgIGNhc2UgQ1NTUHJvcGVydHlBbGw6CkBAIC0yMzIsOSArMjQ0LDYg
QEAgU3RyaW5nIFN0eWxlUHJvcGVydGllczo6Z2V0Q3VzdG9tUHJvcGVydAogU3RyaW5nIFN0eWxl
UHJvcGVydGllczo6Ym9yZGVyU3BhY2luZ1ZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhh
bmQmIHNob3J0aGFuZCkgY29uc3QKIHsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGhvcml6b250YWxW
YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChzaG9ydGhhbmQucHJvcGVydGllcygp
WzBdKTsKLSAgICBpZiAoaG9yaXpvbnRhbFZhbHVlICYmIGhvcml6b250YWxWYWx1ZS0+aXNWYXJp
YWJsZURlcGVuZGVudFZhbHVlKCkpCi0gICAgICAgIHJldHVybiBob3Jpem9udGFsVmFsdWUtPmNz
c1RleHQoKTsKLSAgICAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZlcnRpY2FsVmFsdWUgPSBnZXRQ
cm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVsxXSk7CiAKICAg
ICAvLyBXaGlsZSBzdGFuZGFyZCBib3JkZXItc3BhY2luZyBwcm9wZXJ0eSBkb2VzIG5vdCBhbGxv
dyBzcGVjaWZ5aW5nIGJvcmRlci1zcGFjaW5nLXZlcnRpY2FsIHdpdGhvdXQKQEAgLTM4NSw4ICsz
OTQsNiBAQCBTdHJpbmcgU3R5bGVQcm9wZXJ0aWVzOjpnZXRMYXllcmVkU2hvcnRoCiAgICAgICAg
ICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3NvbS0xLyNzZXJpYWxpemUtYS1jc3MtZGVj
bGFyYXRpb24tYmxvY2suCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKHZhbHVlc1tpXS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdmFsdWVzW2ldLT5jc3NUZXh0KCk7CiAgICAgICAgIGlmICh2YWx1ZXNb
aV0tPmlzQmFzZVZhbHVlTGlzdCgpKQogICAgICAgICAgICAgbnVtTGF5ZXJzID0gc3RkOjptYXgo
ZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWVzW2ldKS5sZW5ndGgoKSwgbnVtTGF5ZXJzKTsK
ICAgICAgICAgZWxzZQpAQCAtNTI1LDggKzUzMiw2IEBAIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6
OmdldFNob3J0aGFuZFZhbHUKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSk7CiAg
ICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7CiAgICAgICAgICAgICBTdHJpbmcg
dmFsdWVUZXh0ID0gdmFsdWUtPmNzc1RleHQoKTsKICAgICAgICAgICAgIGlmICghaSkKICAgICAg
ICAgICAgICAgICBjb21tb25WYWx1ZSA9IHZhbHVlVGV4dDsKQEAgLTU1NSwxMCArNTYwLDYgQEAg
U3RyaW5nIFN0eWxlUHJvcGVydGllczo6Z2V0Q29tbW9uVmFsdWUoYwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaG9ydGhhbmQubGVuZ3RoKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKHNob3J0aGFuZC5w
cm9wZXJ0aWVzKClbaV0pOwogICAgICAgICAvLyBGSVhNRTogQ1NTSW5pdGlhbFZhbHVlOjpjc3NU
ZXh0IHNob3VsZCBnZW5lcmF0ZSB0aGUgcmlnaHQgdmFsdWUuCi0gICAgICAgIGlmICghdmFsdWUp
Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNWYXJp
YWJsZURlcGVuZGVudFZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUtPmNzc1RleHQo
KTsKICAgICAgICAgU3RyaW5nIHRleHQgPSB2YWx1ZS0+Y3NzVGV4dCgpOwogICAgICAgICBpZiAo
dGV4dC5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTYxMSw2ICs2
MTIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUHJvcGVydGllczo6Z2V0UHJvCiAgICAgICAg
IGlmIChkZXBlbmRlbnRWYWx1ZS5wcm9wZXJ0eUlEKCkgIT0gcHJvcGVydHlJRCkKICAgICAgICAg
ICAgIHJldHVybiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVJbnZhbGlkKCk7IC8vIEhh
dmUgdG8gcmV0dXJuIHNwZWNpYWwgInBlbmRpbmctc3Vic3RpdHV0aW9uIiB2YWx1ZS4KICAgICB9
CisKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTg2OCw2ICs4NzAsMTAgQEAgU3RyaW5nIFN0
eWxlUHJvcGVydGllczo6YXNUZXh0KCkgY29uc3QKICAgICAgICAgICAgIGF1dG8mIGRlcGVuZGVu
dFZhbHVlID0gZG93bmNhc3Q8Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4oKnByb3BlcnR5LnZh
bHVlKCkpOwogICAgICAgICAgICAgaWYgKGRlcGVuZGVudFZhbHVlLnByb3BlcnR5SUQoKSAhPSBw
cm9wZXJ0eUlEKQogICAgICAgICAgICAgICAgIHNob3J0aGFuZFByb3BlcnR5SUQgPSBkZXBlbmRl
bnRWYWx1ZS5wcm9wZXJ0eUlEKCk7CisgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkudmFsdWUo
KSAmJiBwcm9wZXJ0eS52YWx1ZSgpLT5pc1BlbmRpbmdTdWJzdGl0dXRpb25WYWx1ZSgpKSB7Cisg
ICAgICAgICAgICBhdXRvJiBzdWJzdGl0dXRpb25WYWx1ZSA9IGRvd25jYXN0PENTU1BlbmRpbmdT
dWJzdGl0dXRpb25WYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkpOworICAgICAgICAgICAgc2hvcnRo
YW5kUHJvcGVydHlJRCA9IHN1YnN0aXR1dGlvblZhbHVlLnNob3J0aGFuZFByb3BlcnR5SWQoKTsK
KyAgICAgICAgICAgIHZhbHVlID0gc3Vic3RpdHV0aW9uVmFsdWUuc2hvcnRoYW5kVmFsdWUoKS0+
Y3NzVGV4dCgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0
eUlEKSB7CiAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uTmFtZToKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIwNzkwMykKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMz
LDcgKzIzMyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQ6OmFkZE1hdGMKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgaWYgKHZhbHVlLmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlLmhhc1ZhcmlhYmxlUmVmZXJlbmNlcygpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTE1ODYsOCArMTU4Niw4IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm8KICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAg
IAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVUb0FwcGx5ID0gdmFsdWU7Ci0gICAgaWYgKHZh
bHVlLT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSkgewotICAgICAgICB2YWx1ZVRvQXBwbHkg
PSByZXNvbHZlZFZhcmlhYmxlVmFsdWUoaWQsICpkb3duY2FzdDxDU1NWYXJpYWJsZURlcGVuZGVu
dFZhbHVlPih2YWx1ZSkpOworICAgIGlmICh2YWx1ZS0+aGFzVmFyaWFibGVSZWZlcmVuY2VzKCkp
IHsKKyAgICAgICAgdmFsdWVUb0FwcGx5ID0gcmVzb2x2ZWRWYXJpYWJsZVZhbHVlKGlkLCAqdmFs
dWUpOwogICAgICAgICBpZiAoIXZhbHVlVG9BcHBseSkgewogICAgICAgICAgICAgaWYgKENTU1By
b3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKICAgICAgICAgICAgICAgICB2YWx1ZVRv
QXBwbHkgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUluaGVyaXRlZFZhbHVlKCk7
CkBAIC0xNjA0LDE3ICsxNjA0LDIzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm8KICAgICAKICAgICBDU1NWYWx1ZSogdmFsdWVUb0NoZWNrRm9ySW5oZXJpdEluaXRp
YWwgPSB2YWx1ZVRvQXBwbHkuZ2V0KCk7CiAgICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSogY3Vz
dG9tUHJvcGVydHlWYWx1ZSA9IG51bGxwdHI7CisgICAgQ1NTVmFsdWVJRCBjdXN0b21Qcm9wZXJ0
eVZhbHVlSUQgPSBDU1NWYWx1ZUludmFsaWQ7CiAgICAgCiAgICAgaWYgKGlkID09IENTU1Byb3Bl
cnR5Q3VzdG9tKSB7CisgICAgICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogQ2FuIGNsZWFuIHRoaXMg
dXAgb25jZSBvbGQgcGFyc2VyIGlzIGdvbmUgYW5kIHJlbW92ZQorICAgICAgICAvLyB0aGUgZGVw
cmVjYXRlZFZhbHVlIGNhbGwgYW5kIHRoZSB2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5pdGlhbCB2
YXJpYWJsZS4KICAgICAgICAgY3VzdG9tUHJvcGVydHlWYWx1ZSA9ICZkb3duY2FzdDxDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlPigqdmFsdWVUb0FwcGx5KTsKICAgICAgICAgdmFsdWVUb0NoZWNrRm9y
SW5oZXJpdEluaXRpYWwgPSBjdXN0b21Qcm9wZXJ0eVZhbHVlLT5kZXByZWNhdGVkVmFsdWUoKS5n
ZXQoKTsKKyAgICAgICAgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID0gY3VzdG9tUHJvcGVydHlWYWx1
ZS0+dmFsdWVJRCgpOworICAgICAgICBpZiAoY3VzdG9tUHJvcGVydHlWYWx1ZUlEICE9IENTU1Zh
bHVlSW52YWxpZCkKKyAgICAgICAgICAgIHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFsID0g
dmFsdWVUb0FwcGx5LmdldCgpOwogICAgIH0KIAotICAgIGJvb2wgaXNJbmhlcml0ID0gc3RhdGUu
cGFyZW50U3R5bGUoKSAmJiB2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5pdGlhbC0+aXNJbmhlcml0
ZWRWYWx1ZSgpOwotICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWVUb0NoZWNrRm9ySW5oZXJpdElu
aXRpYWwtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFzdGF0ZS5wYXJlbnRTdHlsZSgpICYmIHZhbHVl
VG9DaGVja0ZvckluaGVyaXRJbml0aWFsLT5pc0luaGVyaXRlZFZhbHVlKCkpOworICAgIGJvb2wg
aXNJbmhlcml0ID0gc3RhdGUucGFyZW50U3R5bGUoKSA/IHZhbHVlVG9DaGVja0ZvckluaGVyaXRJ
bml0aWFsLT5pc0luaGVyaXRlZFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09IENT
U1ZhbHVlSW5oZXJpdCA6IGZhbHNlOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWVUb0NoZWNr
Rm9ySW5oZXJpdEluaXRpYWwtPmlzSW5pdGlhbFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1
ZUlEID09IENTU1ZhbHVlSW5pdGlhbCB8fCAoIXN0YXRlLnBhcmVudFN0eWxlKCkgJiYgKHZhbHVl
VG9DaGVja0ZvckluaGVyaXRJbml0aWFsLT5pc0luaGVyaXRlZFZhbHVlKCkgfHwgY3VzdG9tUHJv
cGVydHlWYWx1ZUlEID09IENTU1ZhbHVlSW5oZXJpdCkpOwogICAgIAotICAgIGJvb2wgaXNVbnNl
dCA9IHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFsLT5pc1Vuc2V0VmFsdWUoKTsKLSAgICBi
b29sIGlzUmV2ZXJ0ID0gdmFsdWVUb0NoZWNrRm9ySW5oZXJpdEluaXRpYWwtPmlzUmV2ZXJ0VmFs
dWUoKTsKKyAgICBib29sIGlzVW5zZXQgPSB2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5pdGlhbC0+
aXNVbnNldFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09IENTU1ZhbHVlVW5zZXQ7
CisgICAgYm9vbCBpc1JldmVydCA9IHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFsLT5pc1Jl
dmVydFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09IENTU1ZhbHVlUmV2ZXJ0Owog
CiAgICAgaWYgKGlzUmV2ZXJ0KSB7CiAgICAgICAgIGlmIChjYXNjYWRlTGV2ZWwoKSA9PSBVc2Vy
QWdlbnRMZXZlbCB8fCAhbWF0Y2hSZXN1bHQpCkBAIC0xNjY2LDE0ICsxNjcyLDE0IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm8KICAgICBpZiAoaWQgPT0gQ1NTUHJv
cGVydHlDdXN0b20pIHsKICAgICAgICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSogY3VzdG9tUHJv
cGVydHkgPSAmZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnZhbHVlVG9BcHBseSk7
CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4g
Y3VzdG9tVmFsID0gc3RhdGUucGFyZW50U3R5bGUoKS0+Z2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShj
dXN0b21Qcm9wZXJ0eS0+bmFtZSgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlPiBjdXN0b21WYWwgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5nZXRDdXN0b21Qcm9w
ZXJ0eVZhbHVlKGN1c3RvbVByb3BlcnR5LT5uYW1lKCkpOwogICAgICAgICAgICAgaWYgKCFjdXN0
b21WYWwpCiAgICAgICAgICAgICAgICAgY3VzdG9tVmFsID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1
ZTo6Y3JlYXRlSW52YWxpZCgpOwogICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3VzdG9t
UHJvcGVydHlWYWx1ZShjdXN0b21Qcm9wZXJ0eS0+bmFtZSgpLCBjdXN0b21WYWwpOwogICAgICAg
ICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkKICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1
c3RvbVByb3BlcnR5VmFsdWUoY3VzdG9tUHJvcGVydHktPm5hbWUoKSwgQ1NTQ3VzdG9tUHJvcGVy
dHlWYWx1ZTo6Y3JlYXRlSW52YWxpZCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShjdXN0b21Qcm9wZXJ0eS0+bmFtZSgp
LCBjdXN0b21Qcm9wZXJ0eS0+ZGVwcmVjYXRlZFZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShjdXN0b21Qcm9wZXJ0eS0+bmFtZSgpLCBj
dXN0b21Qcm9wZXJ0eSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE2ODEsMTAgKzE2
ODcsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1BybwogICAgIFN0
eWxlQnVpbGRlcjo6YXBwbHlQcm9wZXJ0eShpZCwgKnRoaXMsICp2YWx1ZVRvQXBwbHksIGlzSW5p
dGlhbCwgaXNJbmhlcml0KTsKIH0KIAotUmVmUHRyPENTU1ZhbHVlPiBTdHlsZVJlc29sdmVyOjpy
ZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENTU1Zhcmlh
YmxlRGVwZW5kZW50VmFsdWUmIHZhbHVlKQorUmVmUHRyPENTU1ZhbHVlPiBTdHlsZVJlc29sdmVy
OjpyZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKIHsKICAgICBDU1NQYXJzZXIgcGFyc2VyKG1fc3RhdGUuZG9jdW1lbnQoKSk7
Ci0gICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUocHJvcElELCB2
YWx1ZSwgbV9zdGF0ZS5zdHlsZSgpLT5jdXN0b21Qcm9wZXJ0aWVzKCksIG1fc3RhdGUuc3R5bGUo
KS0+ZGlyZWN0aW9uKCksIG1fc3RhdGUuc3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CisgICAgcmV0
dXJuIHBhcnNlci5wYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhwcm9wSUQsIHZhbHVl
LCBtX3N0YXRlLnN0eWxlKCktPmN1c3RvbVByb3BlcnRpZXMoKSwgbV9zdGF0ZS5zdHlsZSgpLT5k
aXJlY3Rpb24oKSwgbV9zdGF0ZS5zdHlsZSgpLT53cml0aW5nTW9kZSgpKTsKIH0KIAogUmVmUHRy
PFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCShyZXZpc2lvbiAyMDc5MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Njks
NyArNDY5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgp
OwogCiAgICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgU2Vs
ZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1
bHQsIGNvbnN0IE1hdGNoUmVzdWx0KiA9IG51bGxwdHIpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4g
cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhcmlhYmxlRGVw
ZW5kZW50VmFsdWUmKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlc29sdmVkVmFyaWFibGVWYWx1
ZShDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYpOwogCiAgICAgdm9pZCBhcHBseVNWR1By
b3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsOCArNTgs
MTAgQEAKICNpbmNsdWRlICJDU1NQYWdlUnVsZS5oIgogI2luY2x1ZGUgIkNTU1BhcnNlckZhc3RQ
YXRocy5oIgogI2luY2x1ZGUgIkNTU1BhcnNlckltcGwuaCIKKyNpbmNsdWRlICJDU1NQZW5kaW5n
U3Vic3RpdHV0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0
eVBhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5U291cmNlRGF0YS5oIgogI2luY2x1ZGUg
IkNTU1JlZmxlY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1JldmVydFZhbHVlLmgiCkBAIC03NSw2
ICs3Nyw3IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQ
b29sLmgiCiAjaW5jbHVkZSAiQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZS5oIgorI2luY2x1ZGUg
IkNTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuaCIKICNpbmNsdWRlICJDb3VudGVyLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKQEAgLTE0MzIs
NiArMTQzNSwxMCBAQCBSZWY8SW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBDU1NQYXJzZXI6CiB7
CiAgICAgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0KGVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAg
IGNvbnRleHQubW9kZSA9IHN0cmljdFRvQ1NTUGFyc2VyTW9kZShlbGVtZW50LT5pc0hUTUxFbGVt
ZW50KCkgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOworCisgICAgaWYg
KGNvbnRleHQudXNlTmV3UGFyc2VyKQorICAgICAgICByZXR1cm4gQ1NTUGFyc2VySW1wbDo6cGFy
c2VJbmxpbmVTdHlsZURlY2xhcmF0aW9uKHN0cmluZywgZWxlbWVudCk7CisKICAgICByZXR1cm4g
Q1NTUGFyc2VyKGNvbnRleHQpLnBhcnNlRGVjbGFyYXRpb24oc3RyaW5nLCBudWxscHRyKTsKIH0K
IApAQCAtMTc5NiwyMyArMTgwMyw2OCBAQCB2b2lkIENTU1BhcnNlcjo6YWRkRXhwYW5kZWRQcm9w
ZXJ0eUZvclZhCiAgICAgICAgIGFkZFByb3BlcnR5KGxvbmdoYW5kc1tpXSwgdmFsdWUuY29weVJl
ZigpLCBpbXBvcnRhbnQpOwogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VW
YXJpYWJsZURlcGVuZGVudFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElELCBjb25zdCBDU1NWYXJp
YWJsZURlcGVuZGVudFZhbHVlJiBkZXBlbmRlbnRWYWx1ZSwgY29uc3QgQ3VzdG9tUHJvcGVydHlW
YWx1ZU1hcCYgY3VzdG9tUHJvcGVydGllcywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlKQorUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFs
dWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQgcHJvcElELCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUsIGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmIGN1c3RvbVByb3BlcnRp
ZXMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsK
LSAgICBtX3ZhbHVlTGlzdC5yZXNldChuZXcgQ1NTUGFyc2VyVmFsdWVMaXN0KCkpOwotICAgIGlm
ICghZGVwZW5kZW50VmFsdWUudmFsdWVMaXN0KCkuYnVpbGRQYXJzZXJWYWx1ZUxpc3RTdWJzdGl0
dXRpbmdWYXJpYWJsZXMobV92YWx1ZUxpc3QuZ2V0KCksIGN1c3RvbVByb3BlcnRpZXMpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAodmFsdWUuaXNWYXJpYWJsZURlcGVuZGVudFZh
bHVlKCkpIHsKKyAgICAgICAgY29uc3QgQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSYgZGVwZW5k
ZW50VmFsdWUgPSBkb3duY2FzdDxDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlPih2YWx1ZSk7Cisg
ICAgICAgIG1fdmFsdWVMaXN0LnJlc2V0KG5ldyBDU1NQYXJzZXJWYWx1ZUxpc3QoKSk7CisgICAg
ICAgIGlmICghZGVwZW5kZW50VmFsdWUudmFsdWVMaXN0KCkuYnVpbGRQYXJzZXJWYWx1ZUxpc3RT
dWJzdGl0dXRpbmdWYXJpYWJsZXMobV92YWx1ZUxpc3QuZ2V0KCksIGN1c3RvbVByb3BlcnRpZXMp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgQ1NTUHJvcGVydHlJRCBk
ZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQgPSBkZXBlbmRlbnRWYWx1ZS5wcm9wZXJ0eUlEKCk7Cisg
ICAgICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGRlcGVuZGVu
dFZhbHVlUHJvcGVydHlJRCkpCisgICAgICAgICAgICBkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQg
PSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoZGVwZW5kZW50VmFs
dWVQcm9wZXJ0eUlELCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKIAotICAgIENTU1Byb3BlcnR5
SUQgZGVwZW5kZW50VmFsdWVQcm9wZXJ0eUlEID0gZGVwZW5kZW50VmFsdWUucHJvcGVydHlJRCgp
OwotICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGRlcGVuZGVu
dFZhbHVlUHJvcGVydHlJRCkpCi0gICAgICAgIGRlcGVuZGVudFZhbHVlUHJvcGVydHlJRCA9IENT
U1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShkZXBlbmRlbnRWYWx1ZVBy
b3BlcnR5SUQsIGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOworICAgICAgICBpZiAoIXBhcnNlVmFs
dWUoZGVwZW5kZW50VmFsdWVQcm9wZXJ0eUlELCBmYWxzZSkpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGlmICghcGFyc2VWYWx1ZShkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQs
IGZhbHNlKSkKKyAgICAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IG1fcGFyc2VkUHJvcGVydGll
cykgeworICAgICAgICAgICAgaWYgKHByb3BlcnR5LmlkKCkgPT0gcHJvcElEKQorICAgICAgICAg
ICAgICAgIHJldHVybiBwcm9wZXJ0eS52YWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgaWYgKHZhbHVlLmlzUGVuZGlu
Z1N1YnN0aXR1dGlvblZhbHVlKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCBoYXZlIGEg
cmVzb2x2ZWRTaG9ydGhhbmRzIGNhY2hlIHRvIHN0b3AgdGhpcyBmcm9tIGJlaW5nIGRvbmUKKyAg
ICAgICAgLy8gb3ZlciBhbmQgb3ZlciBmb3IgZWFjaCBsb25naGFuZCB2YWx1ZS4KKyAgICAgICAg
Y29uc3QgQ1NTUGVuZGluZ1N1YnN0aXR1dGlvblZhbHVlJiBwZW5kaW5nU3Vic3RpdHV0aW9uID0g
ZG93bmNhc3Q8Q1NTUGVuZGluZ1N1YnN0aXR1dGlvblZhbHVlPih2YWx1ZSk7CisgICAgICAgIENT
U1Byb3BlcnR5SUQgc2hvcnRoYW5kSUQgPSBwZW5kaW5nU3Vic3RpdHV0aW9uLnNob3J0aGFuZFBy
b3BlcnR5SWQoKTsKKyAgICAgICAgaWYgKENTU1Byb3BlcnR5Ojppc0RpcmVjdGlvbkF3YXJlUHJv
cGVydHkoc2hvcnRoYW5kSUQpKQorICAgICAgICAgICAgc2hvcnRoYW5kSUQgPSBDU1NQcm9wZXJ0
eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoc2hvcnRoYW5kSUQsIGRpcmVjdGlvbiwg
d3JpdGluZ01vZGUpOworICAgICAgICBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlKiBzaG9ydGhh
bmRWYWx1ZSA9IHBlbmRpbmdTdWJzdGl0dXRpb24uc2hvcnRoYW5kVmFsdWUoKTsKKyAgICAgICAg
Y29uc3QgQ1NTVmFyaWFibGVEYXRhKiB2YXJpYWJsZURhdGEgPSBzaG9ydGhhbmRWYWx1ZS0+dmFy
aWFibGVEYXRhVmFsdWUoKTsKKyAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGF0YSk7CisgICAgICAg
IAorICAgICAgICBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+IHJlc29sdmVkVG9rZW5zOworICAgICAg
ICBpZiAoIXZhcmlhYmxlRGF0YS0+cmVzb2x2ZVRva2VuUmFuZ2UoY3VzdG9tUHJvcGVydGllcywg
dmFyaWFibGVEYXRhLT50b2tlbnMoKSwgcmVzb2x2ZWRUb2tlbnMpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBQYXJzZWRQcm9wZXJ0eVZlY3RvciBwYXJz
ZWRQcm9wZXJ0aWVzOworICAgICAgICBpZiAoIUNTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVZhbHVl
KHNob3J0aGFuZElELCBmYWxzZSwgcmVzb2x2ZWRUb2tlbnMsIG1fY29udGV4dCwgcGFyc2VkUHJv
cGVydGllcywgU3R5bGVSdWxlOjpTdHlsZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgCisgICAgICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiBwYXJzZWRQcm9wZXJ0aWVz
KSB7CisgICAgICAgICAgICBpZiAocHJvcGVydHkuaWQoKSA9PSBwcm9wSUQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHByb3BlcnR5LnZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiBt
X3BhcnNlZFByb3BlcnRpZXMpIHsKLSAgICAgICAgaWYgKHByb3BlcnR5LmlkKCkgPT0gcHJvcElE
KQotICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5LnZhbHVlKCk7CisgICAgaWYgKHZhbHVlLmlz
VmFyaWFibGVSZWZlcmVuY2VWYWx1ZSgpKSB7CisgICAgICAgIGNvbnN0IENTU1ZhcmlhYmxlUmVm
ZXJlbmNlVmFsdWUmIHZhbHVlV2l0aFJlZmVyZW5jZXMgPSBkb3duY2FzdDxDU1NWYXJpYWJsZVJl
ZmVyZW5jZVZhbHVlPih2YWx1ZSk7CisgICAgICAgIGNvbnN0IENTU1ZhcmlhYmxlRGF0YSogdmFy
aWFibGVEYXRhID0gdmFsdWVXaXRoUmVmZXJlbmNlcy52YXJpYWJsZURhdGFWYWx1ZSgpOworICAg
ICAgICBBU1NFUlQodmFyaWFibGVEYXRhKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxDU1NQ
YXJzZXJUb2tlbj4gcmVzb2x2ZWRUb2tlbnM7CisgICAgICAgIGlmICghdmFyaWFibGVEYXRhLT5y
ZXNvbHZlVG9rZW5SYW5nZShjdXN0b21Qcm9wZXJ0aWVzLCB2YXJpYWJsZURhdGEtPnRva2Vucygp
LCByZXNvbHZlZFRva2VucykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZShwcm9w
SUQsIHJlc29sdmVkVG9rZW5zLCBtX2NvbnRleHQpOwogICAgIH0KKyAgICAKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCShy
ZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OTQsNyArNDk0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
ZXRDdXN0b21Qcm9wZXJ0eU5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIHsg
bV9jdXN0b21Qcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7IH0KIAotICAgIFJlZlB0cjxDU1NW
YWx1ZT4gcGFyc2VWYXJpYWJsZURlcGVuZGVudFZhbHVlKENTU1Byb3BlcnR5SUQsIGNvbnN0IENT
U1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUmLCBjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBj
dXN0b21Qcm9wZXJ0aWVzLCBUZXh0RGlyZWN0aW9uLCBXcml0aW5nTW9kZSk7CisgICAgUmVmUHRy
PENTU1ZhbHVlPiBwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlE
LCBjb25zdCBDU1NWYWx1ZSYsIGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmIGN1c3RvbVBy
b3BlcnRpZXMsIFRleHREaXJlY3Rpb24sIFdyaXRpbmdNb2RlKTsKIAogcHJpdmF0ZToKICAgICBi
b29sIGlzOEJpdFNvdXJjZSgpIHsgcmV0dXJuIG1faXM4Qml0U291cmNlOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHAJKHJldmlzaW9uIDIwNzkw
MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDE2ICs3Nyw2IEBAIGJvb2wgQ1NTUGFyc2VySW1wbDo6cGFyc2VWYWx1
ZShNdXRhYmxlU3QKICAgICByZXR1cm4gZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMo
cGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcyk7CiB9CiAKLWJvb2wgQ1NTUGFyc2VySW1wbDo6cGFy
c2VWYXJpYWJsZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMqIGRlY2xhcmF0aW9uLCBjb25z
dCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBp
bXBvcnRhbnQsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgQ1NTUGFy
c2VySW1wbCBwYXJzZXIoY29udGV4dCk7Ci0gICAgQ1NTVG9rZW5pemVyOjpTY29wZSBzY29wZSh2
YWx1ZSk7Ci0gICAgcGFyc2VyLmNvbnN1bWVWYXJpYWJsZVZhbHVlKHNjb3BlLnRva2VuUmFuZ2Uo
KSwgcHJvcGVydHlOYW1lLCBpbXBvcnRhbnQpOwotICAgIGlmIChwYXJzZXIubV9wYXJzZWRQcm9w
ZXJ0aWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBkZWNs
YXJhdGlvbi0+YWRkUGFyc2VkUHJvcGVydGllcyhwYXJzZXIubV9wYXJzZWRQcm9wZXJ0aWVzKTsK
LX0KLQogc3RhdGljIGlubGluZSB2b2lkIGZpbHRlclByb3BlcnRpZXMoYm9vbCBpbXBvcnRhbnQs
IGNvbnN0IFBhcnNlZFByb3BlcnR5VmVjdG9yJiBpbnB1dCwgUGFyc2VkUHJvcGVydHlWZWN0b3Im
IG91dHB1dCwgc2l6ZV90JiB1bnVzZWRFbnRyaWVzLCBzdGQ6OmJpdHNldDxudW1DU1NQcm9wZXJ0
aWVzPiYgc2VlblByb3BlcnRpZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgc2VlbkN1c3RvbVBy
b3BlcnRpZXMpCiB7CiAgICAgLy8gQWRkIHByb3BlcnRpZXMgaW4gcmV2ZXJzZSBvcmRlciBzbyB0
aGF0IGhpZ2hlc3QgcHJpb3JpdHkgZGVmaW5pdGlvbnMgYXJlIHJlYWNoZWQgZmlyc3QuIER1cGxp
Y2F0ZSBkZWZpbml0aW9ucyBjYW4gdGhlbiBiZSBpZ25vcmVkIHdoZW4gZm91bmQuCkBAIC05Nywx
MSArODcsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGZpbHRlclByb3BlcnRpZXMoYm9vbAogICAg
ICAgICBjb25zdCB1bnNpZ25lZCBwcm9wZXJ0eUlESW5kZXggPSBwcm9wZXJ0eS5pZCgpIC0gZmly
c3RDU1NQcm9wZXJ0eTsKICAgICAgICAgCiAgICAgICAgIGlmIChwcm9wZXJ0eS5pZCgpID09IENT
U1Byb3BlcnR5Q3VzdG9tKSB7Ci0gICAgICAgICAgICBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKiBj
dXN0b21WYWx1ZSA9IGRvd25jYXN0PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KHByb3BlcnR5LnZh
bHVlKCkpOwotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gY3VzdG9tVmFs
dWUtPm5hbWUoKTsKLSAgICAgICAgICAgIGlmIChzZWVuQ3VzdG9tUHJvcGVydGllcy5jb250YWlu
cyhuYW1lKSkKKyAgICAgICAgICAgIGF1dG8mIG5hbWUgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlPigqcHJvcGVydHkudmFsdWUoKSkubmFtZSgpOworICAgICAgICAgICAgaWYgKCFz
ZWVuQ3VzdG9tUHJvcGVydGllcy5hZGQobmFtZSkuaXNOZXdFbnRyeSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIHNlZW5DdXN0b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsK
KyAgICAgICAgICAgIG91dHB1dFstLXVudXNlZEVudHJpZXNdID0gcHJvcGVydHk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTI0MywyOSArMjMyLDYgQEAg
Q1NTU2VsZWN0b3JMaXN0IENTU1BhcnNlckltcGw6OnBhcnNlUGFnZQogICAgIHJldHVybiBzZWxl
Y3Rvckxpc3Q7CiB9CiAKLVJlZlB0cjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IENTU1BhcnNl
ckltcGw6OnBhcnNlQ3VzdG9tUHJvcGVydHlTZXQoQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSkK
LXsKLSAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOwotICAgIGlmIChyYW5nZS5wZWVrKCku
dHlwZSgpICE9IExlZnRCcmFjZVRva2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBD
U1NQYXJzZXJUb2tlblJhbmdlIGJsb2NrID0gcmFuZ2UuY29uc3VtZUJsb2NrKCk7Ci0gICAgcmFu
Z2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKLSAgICBpZiAoIXJhbmdlLmF0RW5kKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIENTU1BhcnNlckltcGwgcGFyc2VyKHN0cmljdENTU1BhcnNl
ckNvbnRleHQoKSk7Ci0gICAgcGFyc2VyLmNvbnN1bWVEZWNsYXJhdGlvbkxpc3QoYmxvY2ssIFN0
eWxlUnVsZTo6U3R5bGUpOwotCi0gICAgLy8gRklYTUUtTkVXUEFSU0VSOiBXZSBkb250IHN1cHBv
cnQgQGFwcGx5IHlldC4KLSAgICAvLyBEcm9wIG5lc3RlZCBAYXBwbHkgcnVsZXMuIFNlZW1zIG5p
Y2VyIHRvIGRvIHRoaXMgaGVyZSBpbnN0ZWFkIG9mIG1ha2luZwotICAgIC8vIGEgZGlmZmVyZW50
IFN0eWxlUnVsZSB0eXBlCi0gICAgLypmb3IgKHNpemVfdCBpID0gcGFyc2VyLm1fcGFyc2VkUHJv
cGVydGllcy5zaXplKCk7IGktLTsgKSB7Ci0gICAgICAgIGlmIChwYXJzZXIubV9wYXJzZWRQcm9w
ZXJ0aWVzW2ldLmlkKCkgPT0gQ1NTUHJvcGVydHlBcHBseUF0UnVsZSkKLSAgICAgICAgICAgIHBh
cnNlci5tX3BhcnNlZFByb3BlcnRpZXMucmVtb3ZlKGkpOwotICAgIH0qLwotCi0gICAgcmV0dXJu
IGNyZWF0ZVN0eWxlUHJvcGVydGllcyhwYXJzZXIubV9wYXJzZWRQcm9wZXJ0aWVzLCBIVE1MU3Rh
bmRhcmRNb2RlKTsKLX0KLQogc3RkOjp1bmlxdWVfcHRyPFZlY3Rvcjxkb3VibGU+PiBDU1NQYXJz
ZXJJbXBsOjpwYXJzZUtleWZyYW1lS2V5TGlzdChjb25zdCBTdHJpbmcmIGtleUxpc3QpCiB7CiAg
ICAgcmV0dXJuIGNvbnN1bWVLZXlmcmFtZUtleUxpc3QoQ1NTVG9rZW5pemVyOjpTY29wZShrZXlM
aXN0KS50b2tlblJhbmdlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
YXJzZXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
YXJzZXJJbXBsLmgJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUGFyc2VySW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MywxNSArODMsMTIgQEAgcHVi
bGljOgogICAgIH07CiAKICAgICBzdGF0aWMgYm9vbCBwYXJzZVZhbHVlKE11dGFibGVTdHlsZVBy
b3BlcnRpZXMqLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwg
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwotICAgIHN0YXRpYyBib29sIHBhcnNlVmFyaWFibGVW
YWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0Jik7CiAgICAgc3RhdGljIFJlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlSW5s
aW5lU3R5bGVEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmLCBFbGVtZW50Kik7CiAgICAgc3RhdGlj
IGJvb2wgcGFyc2VEZWNsYXJhdGlvbkxpc3QoTXV0YWJsZVN0eWxlUHJvcGVydGllcyosIGNvbnN0
IFN0cmluZyYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKICAgICBzdGF0aWMgUmVmUHRyPFN0
eWxlUnVsZUJhc2U+IHBhcnNlUnVsZShjb25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiwgU3R5bGVTaGVldENvbnRlbnRzKiwgQWxsb3dlZFJ1bGVzVHlwZSk7CiAgICAgc3RhdGlj
IHZvaWQgcGFyc2VTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmLCBTdHlsZVNoZWV0Q29udGVudHMqKTsKICAgICBzdGF0aWMgQ1NTU2VsZWN0b3JMaXN0IHBh
cnNlUGFnZVNlbGVjdG9yKENTU1BhcnNlclRva2VuUmFuZ2UsIFN0eWxlU2hlZXRDb250ZW50cyop
OwogCi0gICAgc3RhdGljIFJlZlB0cjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlQ3Vz
dG9tUHJvcGVydHlTZXQoQ1NTUGFyc2VyVG9rZW5SYW5nZSk7Ci0KICAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFZlY3Rvcjxkb3VibGU+PiBwYXJzZUtleWZyYW1lS2V5TGlzdChjb25zdCBTdHJp
bmcmKTsKIAogICAgIGJvb2wgc3VwcG9ydHNEZWNsYXJhdGlvbihDU1NQYXJzZXJUb2tlblJhbmdl
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1ZhcmlhYmxlUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1ZhcmlhYmxlUGFy
c2VyLmNwcAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NWYXJpYWJsZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBz
dGF0aWMgQ1NTVmFsdWVJRCBjbGFzc2lmeVZhcmlhYmxlUmFuZ2UoCiAgICAgcmFuZ2UuY29uc3Vt
ZVdoaXRlc3BhY2UoKTsKICAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2Vu
KSB7CiAgICAgICAgIENTU1ZhbHVlSUQgaWQgPSByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpLmlkKCk7Ci0gICAgICAgIGlmIChyYW5nZS5hdEVuZCgpICYmIChpZCA9PSBDU1NWYWx1
ZUluaGVyaXQgfHwgaWQgPT0gQ1NTVmFsdWVJbml0aWFsIHx8IGlkID09IENTU1ZhbHVlVW5zZXQp
KQorICAgICAgICBpZiAocmFuZ2UuYXRFbmQoKSAmJiAoaWQgPT0gQ1NTVmFsdWVJbmhlcml0IHx8
IGlkID09IENTU1ZhbHVlSW5pdGlhbCB8fCBpZCA9PSBDU1NWYWx1ZVVuc2V0IHx8IGlkID09IENT
U1ZhbHVlUmV2ZXJ0KSkKICAgICAgICAgICAgIHJldHVybiBpZDsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNp
b24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAzNiwxMCArMjAzNiwxMCBAQCB2b2lkIFJlbmRlclN0
eWxlOjpjaGVja1ZhcmlhYmxlc0luQ3VzdG9tCiAgICAgYXV0byYgY3VzdG9tUHJvcGVydGllcyA9
IHJhcmVJbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2N1c3RvbVByb3BlcnRpZXMuYWNjZXNzKCkt
PnZhbHVlcygpOwogICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBpbnZhbGlkUHJvcGVydGllczsK
ICAgICBmb3IgKGF1dG8gZW50cnkgOiBjdXN0b21Qcm9wZXJ0aWVzKSB7Ci0gICAgICAgIGlmICgh
ZW50cnkudmFsdWUtPmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKQorICAgICAgICBpZiAoIWVu
dHJ5LnZhbHVlLT5jb250YWluc1ZhcmlhYmxlcygpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBzZWVuUHJvcGVydGllczsKLSAgICAgICAgZG93
bmNhc3Q8Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4oKmVudHJ5LnZhbHVlKS5jaGVja1Zhcmlh
Ymxlc0ZvckN5Y2xlcyhlbnRyeS5rZXksIGN1c3RvbVByb3BlcnRpZXMsIHNlZW5Qcm9wZXJ0aWVz
LCBpbnZhbGlkUHJvcGVydGllcyk7CisgICAgICAgIGVudHJ5LnZhbHVlLT5jaGVja1ZhcmlhYmxl
c0ZvckN5Y2xlcyhlbnRyeS5rZXksIGN1c3RvbVByb3BlcnRpZXMsIHNlZW5Qcm9wZXJ0aWVzLCBp
bnZhbGlkUHJvcGVydGllcyk7CiAgICAgfQogICAgIAogICAgIC8vIE5vdyBpbnNlcnQgaW52YWxp
ZCB2YWx1ZXMuCkBAIC0yMDUzLDIwICsyMDUzLDE1IEBAIHZvaWQgUmVuZGVyU3R5bGU6OmNoZWNr
VmFyaWFibGVzSW5DdXN0b20KICAgICAvLyBpbnZhbGlkIHZhbHVlcyBpZiB0aGV5IGZhaWxlZCwg
d2UgY2FuIHBlcmZvcm0gdmFyaWFibGUgc3Vic3RpdHV0aW9uIG9uIHRoZSB2YWxpZCB2YWx1ZXMu
CiAgICAgVmVjdG9yPFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPj4gcmVzb2x2ZWRWYWx1ZXM7
CiAgICAgZm9yIChhdXRvIGVudHJ5IDogY3VzdG9tUHJvcGVydGllcykgewotICAgICAgICBpZiAo
IWVudHJ5LnZhbHVlLT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSkKKyAgICAgICAgaWYgKCFl
bnRyeS52YWx1ZS0+Y29udGFpbnNWYXJpYWJsZXMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0IHBhcnNlckxpc3Q7Ci0gICAgICAg
IGlmICghZG93bmNhc3Q8Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4oKmVudHJ5LnZhbHVlKS52
YWx1ZUxpc3QoKS5idWlsZFBhcnNlclZhbHVlTGlzdFN1YnN0aXR1dGluZ1ZhcmlhYmxlcygmcGFy
c2VyTGlzdCwgY3VzdG9tUHJvcGVydGllcykpCi0gICAgICAgICAgICByZXNvbHZlZFZhbHVlcy5h
cHBlbmQoQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKGVudHJ5LmtleSwgQ1NTQ3VzdG9t
UHJvcGVydHlWYWx1ZTo6Y3JlYXRlSW52YWxpZCgpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJlc29sdmVkVmFsdWVzLmFwcGVuZChDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUo
ZW50cnkua2V5LCBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUZyb21QYXJzZXJWYWx1ZUxpc3QocGFyc2Vy
TGlzdCkpKTsKKyAgICAgICAgZW50cnkudmFsdWUtPnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMo
Y3VzdG9tUHJvcGVydGllcywgcmVzb2x2ZWRWYWx1ZXMpOwogICAgIH0KICAgICAKICAgICAvLyBX
aXRoIGFsbCByZXN1bHRzIGNvbXB1dGVkLCB3ZSBjYW4gbm93IG11dGF0ZSBvdXIgdGFibGUgdG8g
ZWxpbWluYXRlIHRoZSB2YXJpYWJsZXMgYW5kCiAgICAgLy8gaG9sZCB0aGUgZmluYWwgdmFsdWVz
LiBUaGlzIHdheSB3aGVuIHdlIGluaGVyaXQsIHdlIGRvbid0IGVuZCB1cCByZXN1YnN0aXR1dGlu
ZyB2YXJpYWJsZXMsIGV0Yy4KICAgICBmb3IgKGF1dG8mIHJlc29sdmVkVmFsdWUgOiByZXNvbHZl
ZFZhbHVlcykKLSAgICAgICAgY3VzdG9tUHJvcGVydGllcy5zZXQocmVzb2x2ZWRWYWx1ZS0+bmFt
ZSgpLCByZXNvbHZlZFZhbHVlLT5kZXByZWNhdGVkVmFsdWUoKSk7CisgICAgICAgIGN1c3RvbVBy
b3BlcnRpZXMuc2V0KHJlc29sdmVkVmFsdWUtPm5hbWUoKSwgcmVzb2x2ZWRWYWx1ZS5jb3B5UmVm
KCkpOwogCiAgICAgcmFyZUluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fY3VzdG9tUHJvcGVydGll
cy5hY2Nlc3MoKS0+c2V0Q29udGFpbnNWYXJpYWJsZXMoZmFsc2UpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDIwNzkw
MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MjcsOCArNTI3LDggQEAgcHVibGljOgogCiAgICAgY29uc3QgUHNldWRv
U3R5bGVDYWNoZSogY2FjaGVkUHNldWRvU3R5bGVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRQ
c2V1ZG9TdHlsZXMuZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlKSB7
IHJhcmVJbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2N1c3RvbVByb3BlcnRpZXMuYWNjZXNzKCkt
PnNldEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgdmFsdWUpOyB9Ci0gICAgUmVmUHRyPENTU1Zh
bHVlPiBnZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29u
c3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPm1fY3VzdG9tUHJvcGVydGllcy0+Z2V0Q3Vz
dG9tUHJvcGVydHlWYWx1ZShuYW1lKTsgfQorICAgIHZvaWQgc2V0Q3VzdG9tUHJvcGVydHlWYWx1
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0
eVZhbHVlPiYgdmFsdWUpIHsgcmFyZUluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fY3VzdG9tUHJv
cGVydGllcy5hY2Nlc3MoKS0+c2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCB2YWx1ZSk7IH0K
KyAgICBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gZ2V0Q3VzdG9tUHJvcGVydHlWYWx1
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWRE
YXRhLT5tX2N1c3RvbVByb3BlcnRpZXMtPmdldEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSk7IH0K
ICAgICBib29sIGhhc0N1c3RvbVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29u
c3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPm1fY3VzdG9tUHJvcGVydGllcy0+aGFzQ3Vz
dG9tUHJvcGVydHkobmFtZSk7IH0KICAgICBjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBj
dXN0b21Qcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPm1fY3Vz
dG9tUHJvcGVydGllcy0+bV92YWx1ZXM7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmgJKHJldmlz
aW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1c3Rv
bVByb3BlcnR5RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaWZuZGVm
IFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhX2gKICNkZWZpbmUgU3R5bGVDdXN0b21Qcm9wZXJ0eURh
dGFfaAogCi0jaW5jbHVkZSAiQ1NTVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NDdXN0b21Qcm9wZXJ0
eVZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC00NCw4ICs0NCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgaWYgKG1fdmFsdWVzLnNpemUoKSAhPSBvLm1fdmFsdWVzLnNpemUoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIGZvciAoV1RGOjpLZXlW
YWx1ZVBhaXI8QXRvbWljU3RyaW5nLCBSZWZQdHI8Q1NTVmFsdWU+PiBlbnRyeSA6IG1fdmFsdWVz
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IG90aGVyID0gby5tX3ZhbHVlcy5nZXQo
ZW50cnkua2V5KTsKKyAgICAgICAgZm9yIChXVEY6OktleVZhbHVlUGFpcjxBdG9taWNTdHJpbmcs
IFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPj4gZW50cnkgOiBtX3ZhbHVlcykgeworICAg
ICAgICAgICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IG90aGVyID0gby5tX3ZhbHVl
cy5nZXQoZW50cnkua2V5KTsKICAgICAgICAgICAgIGlmICghb3RoZXIgfHwgIWVudHJ5LnZhbHVl
LT5lcXVhbHMoKm90aGVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KQEAgLTU0LDE0ICs1NCwxNCBAQCBwdWJsaWM6CiAKICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGEgJm8pIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0g
byk7IH0KICAgICAKLSAgICB2b2lkIHNldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lLCBjb25zdCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZSkKKyAgICB2b2lkIHNl
dEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBSZWZQ
dHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4mIHZhbHVlKQogICAgIHsKICAgICAgICAgbV92YWx1
ZXMuc2V0KG5hbWUsIHZhbHVlKTsKLSAgICAgICAgaWYgKHZhbHVlLT5pc1ZhcmlhYmxlRGVwZW5k
ZW50VmFsdWUoKSkKKyAgICAgICAgaWYgKHZhbHVlLT5jb250YWluc1ZhcmlhYmxlcygpKQogICAg
ICAgICAgICAgbV9jb250YWluc1ZhcmlhYmxlcyA9IHRydWU7CiAgICAgfQogCi0gICAgUmVmUHRy
PENTU1ZhbHVlPiBnZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuZ2V0KG5hbWUpOyB9CisgICAgUmVmUHRyPENTU0N1
c3RvbVByb3BlcnR5VmFsdWU+IGdldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5nZXQobmFtZSk7IH0KICAgICBDdXN0
b21Qcm9wZXJ0eVZhbHVlTWFwJiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsgfQogICAgIAog
ICAgIGJvb2wgaGFzQ3VzdG9tUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlcy5jb250YWlucyhuYW1lKTsgfQo=
</data>
<flag name="review"
          id="315999"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293054</attachid>
            <date>2016-10-27 14:12:07 -0700</date>
            <delta_ts>2016-10-27 14:46:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>61689</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODAwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyOCBAQAorMjAxNi0xMC0yNyAgRGF2ZSBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBbQ1NTIFBhcnNlcl0gSW1wbGVtZW50
IENTUyB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDA3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAgdG8g
dGhlIHByb2plY3QuCisKKyAgICAgICAgKiBjc3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y2hlY2tW
YXJpYWJsZXNGb3JDeWNsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyk6CisgICAgICAgICogY3NzL0NTU0N1c3Rv
bVByb3BlcnR5VmFsdWUuaDoKKyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFic3RyYWN0IHRoZSBv
bGQgYW5kIG5ldyBpbXBsZW1lbnRhdGlvbnMgb2YgQ1NTCisgICAgICAgIHZhcmlhYmxlcyBzbyB0
aGF0IHRoZSBjYWxsZXJzIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgaXQuCisKKyAgICAgICAg
KiBjc3MvQ1NTVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6OmVxdWFscyk6
CisgICAgICAgIE1ha2Ugc3VyZSBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlIGFuZCBDU1NQZW5k
aW5nU3Vic3RpdHV0aW9uVmFsdWUKKyAgICAgICAgaGF2ZSBlcXVhbHMgaW1wbGVtZW50ZWQuCisK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjppc0ludmFsaWRDdXN0b21Qcm9wZXJ0eVZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgVGhpcyBjb2RlIHdhcyBkZWFkIGFuZCBuZXZlciBjYWxsZWQu
CisKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVl
Ojppc0N1c3RvbVByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6Omhh
c1ZhcmlhYmxlUmVmZXJlbmNlcyk6CisgICAgICAgIEFkZCBhIGhlbHBlciBmdW5jdGlvbiBmb3Ig
YXNraW5nIGlmIGEgQ1NTVmFsdWUgaGFzIHZhcmlhYmxlIHJlZmVyZW5jZXMuCisgICAgICAgIFRo
aXMgYWJzdHJhY3RzIHRoZSBvbGQgYW5kIG5ldyBpbXBsZW1lbnRhdGlvbnMgc28gdGhhdCBjYWxs
ZXJzIGNhbgorICAgICAgICBhc2sgaWYgdGhlIHZhbHVlIGhhcyB2YXJpYWJsZXMgd2l0aG91dCBj
YXJpbmcgd2hpY2ggaW1wbGVtZW50YXRpb24gaXMKKyAgICAgICAgYmVpbmcgdXNlZC4KKworICAg
ICAgICAqIGNzcy9DU1NWYWx1ZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVM
aXN0OjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlz
dC5oOgorICAgICAgICBJbiBvcmRlciB0byBhYnN0cmFjdCB0aGUgb2xkIGFuZCBuZXcgdmFyaWFi
bGVzIGltcGxlbWVudGF0aW9ucywgY3VzdG9tCisgICAgICAgIHByb3BlcnRpZXMgbm93IHN0b3Jl
IENTU0N1c3RvbVByb3BlcnR5VmFsdWUgYXMgdGhlaXIgdmFsdWVzIGluc3RlYWQgb2YKKyAgICAg
ICAgcmF3IHZhbHVlcy4gVGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBiZSBwYXRjaGVk
IHRvIGRlYWwgd2l0aCB0aGlzCisgICAgICAgIHdyYXBwZXIgYmVpbmcgcHJlc2VudCBub3cuCisK
KyAgICAgICAgKiBjc3MvQ1NTVmFyaWFibGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1ZhcmlhYmxlRGF0YTo6Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVmFyaWFibGVEYXRhOjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlc1dpdGhSYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NWYXJpYWJsZURhdGE6OnJlc29sdmVWYXJpYWJsZUZhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxlRGF0YTo6cmVzb2x2ZVZhcmlhYmxlUmVm
ZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxlRGF0YTo6cmVzb2x2ZVZhcmlh
YmxlUmVmZXJlbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYXJpYWJsZURhdGE6OnJlc29s
dmVUb2tlblJhbmdlKToKKyAgICAgICAgKiBjc3MvQ1NTVmFyaWFibGVEYXRhLmg6CisgICAgICAg
IEltcGxlbWVudGF0aW9uIG9mIGN5Y2xlIGNoZWNraW5nIGFuZCB2YXJpYWJsZSByZXNvbHV0aW9u
LiBUaGUgbG9naWMgb2YKKyAgICAgICAgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgc2FtZSBh
cyB0aGUgb2xkLiBJdCB3YWxrcyBDU1NQYXJzZXJUb2tlbnMKKyAgICAgICAgaW5zdGVhZCBvZiB0
aGUgb2xkIENTU1BhcnNlciBzdHJ1Y3R1cmVzLgorCisgICAgICAgICogY3NzL0NTU1ZhcmlhYmxl
UmVmZXJlbmNlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFyaWFibGVSZWZlcmVu
Y2VWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCk6CisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBzZXJpYWxp
emF0aW9uIGNhY2hpbmcsIGp1c3QgbGlrZSB0aGUgb2xkIGltcGxlbWVudGF0aW9uCisgICAgICAg
IGhhZCBpbiBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlLgorCisgICAgICAgIChXZWJDb3JlOjpD
U1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlOjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyk6CisgICAg
ICAgICogY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuaDoKKyAgICAgICAgQWRkIGN5Y2xl
IGNoZWNraW5nIGFuZCB2YXJpYWJsZSByZXNvbHV0aW9uIGhlbHBlciBmdW5jdGlvbnMuCisKKyAg
ICAgICAgKiBjc3MvQ1NTVmFyaWFibGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NW
YXJpYWJsZVZhbHVlOjpidWlsZFBhcnNlclZhbHVlTGlzdFN1YnN0aXR1dGluZ1ZhcmlhYmxlcyk6
CisgICAgICAgIFBhdGNoZWQgdG8gYWNjb3VudCBmb3IgdGhlIGNoYW5nZSBpbiBzdG9yYWdlIG9m
IGN1c3RvbSBwcm9wZXJ0aWVzIHRvCisgICAgICAgIGhhdmUgY3VzdG9tIHByb3BlcnR5IHZhbHVl
IHdyYXBwZXJzLgorCisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydGllcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6OmdldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpib3JkZXJTcGFjaW5nVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpnZXRTaG9ydGhhbmRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6OmdldENvbW1vblZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydGllczo6Z2V0UHJvcGVydHlDU1NWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6OmFzVGV4dCk6CisgICAgICAgIENsZWFuIHVwIHRo
ZSByZXNvbHV0aW9uIG9mIHBlbmRpbmcgc3Vic3RpdHV0aW9uIHZhbHVlcy4gSW5zdGVhZCBvZiBo
YWNraW5nCisgICAgICAgIGl0IGludG8gZXZlcnkgcG9zc2libGUgU3R5bGVTaG9ydGhhbmRQcm9w
ZXJ0eSBjcmF3bGluZyBmdW5jdGlvbiwgb2J0YWluCisgICAgICAgIHRoZSBzaG9ydGhhbmQgZm9y
IHRoZSBwcm9wZXJ0eSB1cCBmcm9udCwgYWNjZXNzIHRoZSBmaXJzdCBsb25naGFuZCwgYW5kCisg
ICAgICAgIGlmIHdlIHNlZSBhIHBlbmRpbmcgc3Vic3RpdHV0aW9uIHZhbHVlLCBwZXJmb3JtIHRo
ZSBzdWJzdGl0dXRpb24uCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6YWRkTWF0Y2hlZFByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlZFZhcmlhYmxlVmFsdWUp
OgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciB0aGUgbmV3IGltcGxlbWVudGF0aW9uIGluIGFsbCB0aGUgc2FtZSBwbGFjZXMgYXMgdGhlIG9s
ZC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VJbmxpbmVTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUpOiBE
ZWxldGVkLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6CisgICAgICAgIFJlbmFt
ZSBwYXJzZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUgdG8gcGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJl
ZmVyZW5jZXMsCisgICAgICAgIHNpbmNlIGl0IGlzIG9wZXJhdGluZyBvbiB0aHJlZSBkaXN0aW5j
dCB2YWx1ZSB0eXBlcyBub3cuIFR1cm4gb24gbmV3CisgICAgICAgIHBhcnNlciBzdXBwb3J0IGZv
ciBwYXJzZUlubGluZVN0eWxlRGVjbGFyYXRpb24uCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1BhcnNlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJJbXBsOjpwYXJzZVZhcmlhYmxlVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VySW1wbDo6cGFyc2VDdXN0b21Qcm9wZXJ0
eVNldCk6IERlbGV0ZWQuCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmg6Cisg
ICAgICAgIFJlbW92ZSBwYXJzZXIgZnVuY3Rpb25zIHRoYXQgYXJlbid0IHJlbGV2YW50IHRvIG91
ciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBvZiBDU1MgdmFyaWFibGVzLgorCisgICAgICAgICog
Y3NzL3BhcnNlci9DU1NWYXJpYWJsZVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjbGFz
c2lmeVZhcmlhYmxlUmFuZ2UpOgorICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIENTUzQgJ3Jl
dmVydCcga2V5d29yZCB0byB0aGUgbmV3IHZhcmlhYmxlIHBhcnNlci4KKworICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6Y2hlY2tWYXJpYWJsZXNJbkN1c3RvbVByb3BlcnRpZXMpOgorICAgICAgICBNb2RpZmll
ZCB0byBzdG9yZSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlcyBhcyB0aGUgdmFsdWVzIGFsd2F5cyBu
b3cgYW5kCisgICAgICAgIHRvIHVzZSB0aGUgbWV0aG9kIGFic3RyYWN0aW9ucyBvbiBDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlIHRvIHJlc29sdmUKKyAgICAgICAgY3ljbGVzIGFuZCBwZXJmb3JtIHN1
YnN0aXR1dGlvbnMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpnZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhOjpzZXRDdXN0b21Qcm9wZXJ0
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhOjpnZXRD
dXN0b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgVGlnaHRlbiB1cCB0aGUgbWFwIHRvIHN0b3Jl
IENTU0N1c3RvbVByb3BlcnR5VmFsdWUgaW5zdGVhZCBvZiBqdXN0CisgICAgICAgIENTU1ZhbHVl
LgorCiAyMDE2LTEwLTI3ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBCdWZmZXJTb3VyY2Ugc2hvdWxkIGJlaGF2ZSBhcyBhbiB1bmlvbgpJbmRleDogU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjY5LDYgKzEyNjksNyBAQCBzZXQoV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcAogICAgIGNzcy9DU1NDdXJz
b3JJbWFnZVZhbHVlLmNwcAogICAgIGNzcy9DU1NDdXN0b21JZGVudFZhbHVlLmNwcAorICAgIGNz
cy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcAogICAgIGNzcy9DU1NEZWZhdWx0U3R5bGVTaGVl
dHMuY3BwCiAgICAgY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCiAgICAgY3NzL0ZvbnRGYWNl
U2V0LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIyLDkgKzM0
MjIsOSBAQAogCQk5NDQ0Q0JFMzFEODg2MTk4MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDQ0
Q0JFMjFEODg2MTU4MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1ZS5jcHAgKi87IH07CiAJ
CTk0NDRDQkU0MUQ4ODYxOTkwMDczQTA3NCAvKiBDU1NDdXN0b21JZGVudFZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDQ0Q0JFMTFEODg2MTU4
MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1ZS5oICovOyB9OwogCQk5NDQ0Q0JFNzFEODg2
MUMyMDA3M0EwNzQgLyogQ1NTVmFyaWFibGVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NDRDQkRFMUQ4ODYxNTgwMDczQTA3NCAvKiBDU1NW
YXJpYWJsZURhdGEuY3BwICovOyB9OwotCQk5NDQ0Q0JFODFEODg2MUMyMDA3M0EwNzQgLyogQ1NT
VmFyaWFibGVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NDQ0Q0JERDFEODg2MTU4MDA3M0EwNzQgLyogQ1NTVmFyaWFibGVEYXRhLmggKi87IH07
CisJCTk0NDRDQkU4MUQ4ODYxQzIwMDczQTA3NCAvKiBDU1NWYXJpYWJsZURhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NDRDQkREMUQ4ODYxNTgw
MDczQTA3NCAvKiBDU1NWYXJpYWJsZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk5NDQ0Q0JFOTFEODg2MUNBMDA3M0EwNzQgLyogQ1NTVmFy
aWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NDQ0Q0JEQzFEODg2MTU4MDA3M0EwNzQgLyogQ1NTVmFyaWFibGVSZWZl
cmVuY2VWYWx1ZS5jcHAgKi87IH07Ci0JCTk0NDRDQkVBMUQ4ODYxQ0EwMDczQTA3NCAvKiBDU1NW
YXJpYWJsZVJlZmVyZW5jZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NDQ0Q0JEQjFEODg2MTU4MDA3M0EwNzQgLyogQ1NTVmFyaWFibGVSZWZl
cmVuY2VWYWx1ZS5oICovOyB9OworCQk5NDQ0Q0JFQTFEODg2MUNBMDA3M0EwNzQgLyogQ1NTVmFy
aWFibGVSZWZlcmVuY2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTQ0NENCREIxRDg4NjE1ODAwNzNBMDc0IC8qIENTU1ZhcmlhYmxlUmVmZXJl
bmNlVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk5NDZEMzcyRDFENkNCMjk0MDA3NzA4NEYgLyogQ1NTUGFyc2VyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzI4MUQ2Q0IyOEIwMDc3
MDg0RiAvKiBDU1NQYXJzZXIuY3BwICovOyB9OwogCQk5NDZEMzcyRTFENkNCMjk0MDA3NzA4NEYg
LyogQ1NTUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NDZEMzcyOTFENkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFyc2VyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTQ2RDM3MkYxRDZDQjI5NDAw
NzcwODRGIC8qIENTU1BhcnNlck1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk0NkQzNzJBMUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXJNb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM0
NDMsNyArMzQ0Myw3IEBACiAJCTk0NkQzNzQ5MUQ2RDA2MjgwMDc3MDg0RiAvKiBDU1NNYXJrdXAu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3
NDcxRDZEMDYwQzAwNzcwODRGIC8qIENTU01hcmt1cC5jcHAgKi87IH07CiAJCTk0NkQzNzRBMUQ2
RDA2MjgwMDc3MDg0RiAvKiBDU1NNYXJrdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzQ4MUQ2RDA2MEMwMDc3MDg0RiAvKiBDU1NNYXJrdXAu
aCAqLzsgfTsKIAkJOTQ2RDM3NEQxRDZEMDhBNjAwNzcwODRGIC8qIENTU1BhcnNlclRva2VuUmFu
Z2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2
RDM3NEIxRDZEMDdGNTAwNzcwODRGIC8qIENTU1BhcnNlclRva2VuUmFuZ2UuY3BwICovOyB9Owot
CQk5NDZEMzc0RTFENkQwOEFBMDA3NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW5SYW5nZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3NEMxRDZEMDdG
NTAwNzcwODRGIC8qIENTU1BhcnNlclRva2VuUmFuZ2UuaCAqLzsgfTsKKwkJOTQ2RDM3NEUxRDZE
MDhBQTAwNzcwODRGIC8qIENTU1BhcnNlclRva2VuUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzRDMUQ2RDA3RjUwMDc3MDg0RiAvKiBD
U1NQYXJzZXJUb2tlblJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTQ5M0I2QkUxRDc0QjQxMjAwODhFNzgwIC8qIE1lZGlhUXVlcnlCbG9j
a1dhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTQ5M0I2QjYxRDc0QjM5NTAwODhFNzgwIC8qIE1lZGlhUXVlcnlCbG9ja1dhdGNoZXIuY3Bw
ICovOyB9OwogCQk5NDkzQjZCRjFENzRCNDEyMDA4OEU3ODAgLyogTWVkaWFRdWVyeUJsb2NrV2F0
Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ5
M0I2QjcxRDc0QjM5NTAwODhFNzgwIC8qIE1lZGlhUXVlcnlCbG9ja1dhdGNoZXIuaCAqLzsgfTsK
IAkJOTQ5M0I2QzAxRDc0QjQxMjAwODhFNzgwIC8qIE1lZGlhUXVlcnlQYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ5M0I2QjgxRDc0QjM5
NTAwODhFNzgwIC8qIE1lZGlhUXVlcnlQYXJzZXIuY3BwICovOyB9OwpAQCAtMzQ1NSw2ICszNDU1
LDcgQEAKIAkJOTQ5Qzc3MDgxRDZFNDk4NzAwQzBERTRGIC8qIENTU1BhcnNlck9ic2VydmVyV3Jh
cHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NDlDNzcwNjFENkU0OEVEMDBDMERFNEYgLyogQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyLmNwcCAq
LzsgfTsKIAkJOTQ5Qzc3MDkxRDZFNDk4NzAwQzBERTRGIC8qIENTU1BhcnNlck9ic2VydmVyV3Jh
cHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ5
Qzc3MDcxRDZFNDhFRDAwQzBERTRGIC8qIENTU1BhcnNlck9ic2VydmVyV3JhcHBlci5oICovOyB9
OwogCQk5NDlDNzcwQjFENkU0OUVEMDBDMERFNEYgLyogQ1NTUGFyc2VyT2JzZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0OUM3NzBBMUQ2RTQ5
QzMwMEMwREU0RiAvKiBDU1NQYXJzZXJPYnNlcnZlci5oICovOyB9OworCQk5NEQ0QUM2MjFEQzI0
QzhFMDA4MEYwMkQgLyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NEQ0QUM2MTFEQzI0QzgxMDA4MEYwMkQg
LyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAgKi87IH07CiAJCTk0REU1QzdFMUQ3OENCMkUw
MDE2NEYyQSAvKiBDU1NQYXJzZXJJZGlvbXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTRERTVDN0QxRDc4Q0IyNTAwMTY0RjJBIC8qIENTU1BhcnNl
cklkaW9tcy5jcHAgKi87IH07CiAJCTk0REU1QzgxMUQ3RjNBMTQwMDE2NEYyQSAvKiBDU1NBdFJ1
bGVJRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NERFNUM3RjFEN0YzOUQwMDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuY3BwICovOyB9OwogCQk5NERF
NUM4MjFEN0YzQTE0MDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0REU1QzgwMUQ3RjM5RDAwMDE2NEYyQSAvKiBD
U1NBdFJ1bGVJRC5oICovOyB9OwpAQCAtNTA4NCw3ICs1MDg1LDcgQEAKIAkJQkMxMjhCMDExMzdD
OEQ0NjAwQ0FDODQ1IC8qIFJlbmRlckdyaWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMjhCMDAxMzdDOEQ0NjAwQ0FDODQ1IC8qIFJlbmRlckdy
aWQuY3BwICovOyB9OwogCQlCQzE0MDI4QTBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhl
bWVDb21wb3NpdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkMxNDAyODgwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRl
LmNwcCAqLzsgfTsKIAkJQkMxNDAyOEIwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1l
Q29tcG9zaXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzE0MDI4OTBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQzE3OTBC
QjFCQjVBQjNGMDAwNkQxM0UgLyogQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxNzkwQkExQkI1QUIzRjAw
MDZEMTNFIC8qIENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUuaCAqLzsgfTsKKwkJQkMxNzkwQkIx
QkI1QUIzRjAwMDZEMTNFIC8qIENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTc5MEJBMUJCNUFCM0YwMDA2
RDEzRSAvKiBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxNzkwQkQxQkJCMzZBODAwMDZEMTNFIC8q
IENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxNzkwQkMxQkJCMzZBODAwMDZEMTNFIC8qIENTU1Zhcmlh
YmxlRGVwZW5kZW50VmFsdWUuY3BwICovOyB9OwogCQlCQzE3OTBDMDFCQkYyQzQzMDAwNkQxM0Ug
LyogQ1NTVmFyaWFibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzE3OTBCRTFCQkYyQzQzMDAwNkQxM0UgLyogQ1NTVmFyaWFibGVWYWx1
ZS5jcHAgKi87IH07CiAJCUJDMTc5MEMxMUJCRjJDNDMwMDA2RDEzRSAvKiBDU1NWYXJpYWJsZVZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE3
OTBCRjFCQkYyQzQzMDAwNkQxM0UgLyogQ1NTVmFyaWFibGVWYWx1ZS5oICovOyB9OwpAQCAtMTA4
NDQsNiArMTA4NDUsNyBAQAogCQk5NDlDNzcwNjFENkU0OEVEMDBDMERFNEYgLyogQ1NTUGFyc2Vy
T2JzZXJ2ZXJXcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IENTU1BhcnNlck9ic2VydmVyV3JhcHBlci5jcHA7IHBhdGggPSBwYXJzZXIvQ1NTUGFyc2VyT2Jz
ZXJ2ZXJXcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTQ5Qzc3MDcx
RDZFNDhFRDAwQzBERTRGIC8qIENTU1BhcnNlck9ic2VydmVyV3JhcHBlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIuaDsgcGF0aCA9
IHBhcnNlci9DU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTQ5Qzc3MEExRDZFNDlDMzAwQzBERTRGIC8qIENTU1BhcnNlck9ic2VydmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENTU1BhcnNlck9ic2VydmVyLmg7IHBh
dGggPSBwYXJzZXIvQ1NTUGFyc2VyT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTRENEFDNjExREMyNEM4MTAwODBGMDJEIC8qIENTU0N1c3RvbVByb3BlcnR5VmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ3VzdG9tUHJvcGVy
dHlWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk0REU1QzdEMUQ3OENC
MjUwMDE2NEYyQSAvKiBDU1NQYXJzZXJJZGlvbXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQ1NTUGFyc2VySWRpb21zLmNwcDsgcGF0aCA9IHBhcnNlci9DU1NQYXJz
ZXJJZGlvbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NERFNUM3RjFEN0Yz
OUQwMDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQ1NTQXRSdWxlSUQuY3BwOyBwYXRoID0gcGFyc2VyL0NTU0F0UnVsZUlELmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTRERTVDODAxRDdGMzlEMDAwMTY0RjJB
IC8qIENTU0F0UnVsZUlELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENTU0F0
UnVsZUlELmg7IHBhdGggPSBwYXJzZXIvQ1NTQXRSdWxlSUQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTIyODU5LDYgKzIyODYxLDcgQEAKIAkJCQlBQTA5NzhFRTBBQkFBNkUxMDA4
NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovLAogCQkJCTk0NDRDQkUyMUQ4ODYxNTgw
MDczQTA3NCAvKiBDU1NDdXN0b21JZGVudFZhbHVlLmNwcCAqLywKIAkJCQk5NDQ0Q0JFMTFEODg2
MTU4MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1ZS5oICovLAorCQkJCTk0RDRBQzYxMURD
MjRDODEwMDgwRjAyRCAvKiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcCAqLywKIAkJCQlCQzc3
OUUxMzFCQjIxNUJCMDBDQUE4QkYgLyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oICovLAogCQkJ
CTRBOUNDODE1MTZCQjlBQzYwMEVDNjQ1QSAvKiBDU1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwICov
LAogCQkJCTRBOUNDODE2MTZCQjlBQzYwMEVDNjQ1QSAvKiBDU1NEZWZhdWx0U3R5bGVTaGVldHMu
aCAqLywKQEAgLTI5NjU3LDYgKzI5NjYwLDcgQEAKIAkJCQlCMkZBM0Q1QTBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdDbGlwUGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNE
NUMwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjJGQTNENUUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTRENEFDNjIxREMyNEM4RTAwODBGMDJE
IC8qIENTU0N1c3RvbVByb3BlcnR5VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNE
NjAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQ3Vyc29yRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMkZBM0Q2MjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdEZWZzRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q2NDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdEZXNj
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU0N1c3RvbVByb3BlcnR5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0N1c3RvbVByb3BlcnR5VmFsdWUuaCIK
KworI2luY2x1ZGUgIkNTU1BhcnNlclZhbHVlcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9w
ZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0
b21pY1N0cmluZz4mIGludmFsaWRQcm9wZXJ0aWVzKSBjb25zdAoreworICAgIEFTU0VSVChjb250
YWluc1ZhcmlhYmxlcygpKTsKKyAgICBpZiAobV9kZXByZWNhdGVkVmFsdWUgJiYgbV9kZXByZWNh
dGVkVmFsdWUtPmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKQorICAgICAgICByZXR1cm4gZG93
bmNhc3Q8Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4oKm1fZGVwcmVjYXRlZFZhbHVlKS5jaGVj
a1ZhcmlhYmxlc0ZvckN5Y2xlcyhuYW1lLCBjdXN0b21Qcm9wZXJ0aWVzLCBzZWVuUHJvcGVydGll
cywgaW52YWxpZFByb3BlcnRpZXMpOworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICByZXR1cm4g
bV92YWx1ZS0+Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMobmFtZSwgY3VzdG9tUHJvcGVydGllcywg
c2VlblByb3BlcnRpZXMsIGludmFsaWRQcm9wZXJ0aWVzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpyZXNvbHZlVmFyaWFibGVSZWZlcmVuY2Vz
KGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmIGN1c3RvbVByb3BlcnRpZXMsIFZlY3RvcjxS
ZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4+JiByZXNvbHZlZFZhbHVlcykgY29uc3QKK3sKKyAg
ICBBU1NFUlQoY29udGFpbnNWYXJpYWJsZXMoKSk7CisgICAgaWYgKG1fZGVwcmVjYXRlZFZhbHVl
ICYmIG1fZGVwcmVjYXRlZFZhbHVlLT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSkgeworICAg
ICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QgcGFyc2VyTGlzdDsKKyAgICAgICAgaWYgKCFkb3duY2Fz
dDxDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlPigqbV9kZXByZWNhdGVkVmFsdWUpLnZhbHVlTGlz
dCgpLmJ1aWxkUGFyc2VyVmFsdWVMaXN0U3Vic3RpdHV0aW5nVmFyaWFibGVzKCZwYXJzZXJMaXN0
LCBjdXN0b21Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgIHJlc29sdmVkVmFsdWVzLmFwcGVuZChD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUobV9uYW1lLCBDU1NDdXN0b21Qcm9wZXJ0eVZh
bHVlOjpjcmVhdGVJbnZhbGlkKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzb2x2
ZWRWYWx1ZXMuYXBwZW5kKENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShtX25hbWUsIENT
U1ZhbHVlTGlzdDo6Y3JlYXRlRnJvbVBhcnNlclZhbHVlTGlzdChwYXJzZXJMaXN0KSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghbV92YWx1ZSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIEFTU0VSVChtX3ZhbHVlLT5uZWVkc1ZhcmlhYmxlUmVzb2x1dGlvbigp
KTsKKyAgICBSZWZQdHI8Q1NTVmFyaWFibGVEYXRhPiByZXNvbHZlZERhdGEgPSBtX3ZhbHVlLT5y
ZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGN1c3RvbVByb3BlcnRpZXMpOworICAgIGlmIChyZXNv
bHZlZERhdGEpCisgICAgICAgIHJlc29sdmVkVmFsdWVzLmFwcGVuZChDU1NDdXN0b21Qcm9wZXJ0
eVZhbHVlOjpjcmVhdGVXaXRoVmFyaWFibGVEYXRhKG1fbmFtZSwgcmVzb2x2ZWREYXRhLnJlbGVh
c2VOb25OdWxsKCkpKTsKKyAgICBlbHNlCisgICAgICAgIHJlc29sdmVkVmFsdWVzLmFwcGVuZChD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUobV9uYW1lLCBDU1NDdXN0b21Qcm9wZXJ0eVZh
bHVlOjpjcmVhdGVJbnZhbGlkKCkpKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0N1c3RvbVByb3BlcnR5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDU1NWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1Zhcmlh
YmxlRGF0YS5oIgorI2luY2x1ZGUgIkNTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUuaCIKICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAg
LTczLDEzICs3NCwxNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICAKLSAgICAvLyBGSVhNRTogU2hvdWxkIGFy
Z3VhYmx5IGltcGxlbWVudCBlcXVhbHMgb24gb3VyIGludGVybmFsIHZhbHVlcywgYnV0IHNlcmlh
bGl6YXRpb24gdG8gY29tcGFyZSBpcyBwcm9iYWJseSBmaW5lLgotICAgIGJvb2wgZXF1YWxzKGNv
bnN0IENTU0N1c3RvbVByb3BlcnR5VmFsdWUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX25hbWUg
PT0gb3RoZXIubV9uYW1lICYmIGN1c3RvbUNTU1RleHQoKSA9PSBvdGhlci5jdXN0b21DU1NUZXh0
KCk7IH0KKyAgICBib29sIGVxdWFscyhjb25zdCBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlJiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV9uYW1lID09IG90aGVyLm1fbmFtZSAmJiBtX2RlcHJlY2F0ZWRW
YWx1ZSA9PSBvdGhlci5tX2RlcHJlY2F0ZWRWYWx1ZSAmJiBtX3ZhbHVlID09IG90aGVyLm1fdmFs
dWUgJiYgbV92YWx1ZUlkID09IG90aGVyLm1fdmFsdWVJZDsgfQogCi0gICAgYm9vbCBpc0ludmFs
aWQoKSBjb25zdCB7IHJldHVybiAhbV92YWx1ZTsgfQogICAgIGJvb2wgY29udGFpbnNWYXJpYWJs
ZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zVmFyaWFibGVzOyB9CisgICAgYm9vbCBjaGVj
a1ZhcmlhYmxlc0ZvckN5Y2xlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEN1c3RvbVByb3Bl
cnR5VmFsdWVNYXAmLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5Qcm9wZXJ0aWVzLCBIYXNo
U2V0PEF0b21pY1N0cmluZz4mIGludmFsaWRQcm9wZXJ0aWVzKSBjb25zdDsKKworICAgIHZvaWQg
cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiwg
VmVjdG9yPFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPj4mKSBjb25zdDsKIAogICAgIGNvbnN0
IFJlZlB0cjxDU1NWYWx1ZT4gZGVwcmVjYXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9kZXBy
ZWNhdGVkVmFsdWUuZ2V0KCk7IH0KKyAgICAKKyAgICBDU1NWYWx1ZUlEIHZhbHVlSUQoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlSWQ7IH0KKyAgICBDU1NWYXJpYWJsZURhdGEqIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIENTU0N1c3RvbVBy
b3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBSZWY8Q1NTVmFsdWU+JiYgdmFs
dWUpCkBAIC04Nyw3ICs5Miw2IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9uYW1lKG5hbWUpCiAg
ICAgICAgICwgbV9kZXByZWNhdGVkVmFsdWUoV1RGTW92ZSh2YWx1ZSkpCiAgICAgICAgICwgbV9j
b250YWluc1ZhcmlhYmxlcyhtX2RlcHJlY2F0ZWRWYWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZh
bHVlKCkpCi0gICAgICAgICwgbV9zZXJpYWxpemVkKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAg
CkBAIC0xMjQsNyArMTI4LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBtdXRhYmxlIFN0cmluZyBt
X3N0cmluZ1ZhbHVlOwogICAgIGJvb2wgbV9jb250YWluc1ZhcmlhYmxlcyB7IGZhbHNlIH07Ci0g
ICAgbXV0YWJsZSBib29sIG1fc2VyaWFsaXplZDsKKyAgICBtdXRhYmxlIGJvb2wgbV9zZXJpYWxp
emVkIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ZhbHVlLmNwcAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0NSwxMCBAQCBib29sIENT
U1ZhbHVlOjplcXVhbHMoY29uc3QgQ1NTVmFsdWUmIG90CiAgICAgICAgICAgICByZXR1cm4gY29t
cGFyZUNTU1ZhbHVlczxDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWU+KCp0aGlzLCBvdGhlcik7
CiAgICAgICAgIGNhc2UgQ3VzdG9tUHJvcGVydHlDbGFzczoKICAgICAgICAgICAgIHJldHVybiBj
b21wYXJlQ1NTVmFsdWVzPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KCp0aGlzLCBvdGhlcik7Cisg
ICAgICAgIGNhc2UgVmFyaWFibGVSZWZlcmVuY2VDbGFzczoKKyAgICAgICAgICAgIHJldHVybiBj
b21wYXJlQ1NTVmFsdWVzPENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU+KCp0aGlzLCBvdGhlcik7
CisgICAgICAgIGNhc2UgUGVuZGluZ1N1YnN0aXR1dGlvblZhbHVlQ2xhc3M6CisgICAgICAgICAg
ICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlczxDU1NQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWU+KCp0
aGlzLCBvdGhlcik7CiAgICAgICAgIGNhc2UgVmFyaWFibGVEZXBlbmRlbnRDbGFzczoKICAgICAg
ICAgICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVzPENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWU+
KCp0aGlzLCBvdGhlcik7CiAgICAgICAgIGNhc2UgVmFyaWFibGVDbGFzczoKQEAgLTU1MiwxMSAr
NTU2LDYgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NWYWx1ZTo6Y2xvbmVGb3JDU1NPTQogICAgIH0K
IH0KIAotYm9vbCBDU1NWYWx1ZTo6aXNJbnZhbGlkQ3VzdG9tUHJvcGVydHlWYWx1ZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGlzQ3VzdG9tUHJvcGVydHlWYWx1ZSgpICYmIGRvd25jYXN0PENTU0N1
c3RvbVByb3BlcnR5VmFsdWU+KCp0aGlzKS5pc0ludmFsaWQoKTsKLX0KLQogYm9vbCBDU1NWYWx1
ZTo6dHJlYXRBc0luaGVyaXRlZFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkgY29uc3QK
IHsKICAgICByZXR1cm4gY2xhc3NUeXBlKCkgPT0gSW5oZXJpdGVkQ2xhc3MgfHwgKGNsYXNzVHlw
ZSgpID09IFVuc2V0Q2xhc3MgJiYgQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkocHJv
cGVydHlJRCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgJKHJldmlzaW9uIDIwNzkwMykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZTsKIGNsYXNzIENhY2hlZFJlc291cmNlOwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwog
CkBAIC03OCw3ICs3OSw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ3Jvc3NmYWRlVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2NsYXNzVHlwZSA9PSBDcm9zc2ZhZGVDbGFzczsgfQogICAgIGJvb2wg
aXNDdXJzb3JJbWFnZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1R5cGUgPT0gQ3Vyc29y
SW1hZ2VDbGFzczsgfQogICAgIGJvb2wgaXNDdXN0b21Qcm9wZXJ0eVZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGFzc1R5cGUgPT0gQ3VzdG9tUHJvcGVydHlDbGFzczsgfQotICAgIGJvb2wgaXNJ
bnZhbGlkQ3VzdG9tUHJvcGVydHlWYWx1ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNWYXJpYWJsZURl
cGVuZGVudFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1R5cGUgPT0gVmFyaWFibGVEZXBl
bmRlbnRDbGFzczsgfQogICAgIGJvb2wgaXNWYXJpYWJsZVZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV9jbGFzc1R5cGUgPT0gVmFyaWFibGVDbGFzczsgfQogICAgIGJvb2wgaXNGdW5jdGlvblZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1R5cGUgPT0gRnVuY3Rpb25DbGFzczsgfQpAQCAtMTI5
LDYgKzEyOSw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ3VzdG9tSWRlbnRWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY2xhc3NUeXBlID09IEN1c3RvbUlkZW50Q2xhc3M7IH0KICAgICBib29sIGlz
VmFyaWFibGVSZWZlcmVuY2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NUeXBlID09IFZh
cmlhYmxlUmVmZXJlbmNlQ2xhc3M7IH0KICAgICBib29sIGlzUGVuZGluZ1N1YnN0aXR1dGlvblZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1R5cGUgPT0gUGVuZGluZ1N1YnN0aXR1dGlvblZh
bHVlQ2xhc3M7IH0KKyAgICAKKyAgICBib29sIGhhc1ZhcmlhYmxlUmVmZXJlbmNlcygpIGNvbnN0
IHsgcmV0dXJuIGlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpIHx8IGlzVmFyaWFibGVSZWZlcmVu
Y2VWYWx1ZSgpIHx8IGlzUGVuZGluZ1N1YnN0aXR1dGlvblZhbHVlKCk7IH0KIAogICAgIGJvb2wg
aXNDU1NPTVNhZmUoKSBjb25zdCB7IHJldHVybiBtX2lzQ1NTT01TYWZlOyB9CiAgICAgYm9vbCBp
c1N1YnR5cGVFeHBvc2VkVG9DU1NPTSgpIGNvbnN0CkBAIC0zMDAsNyArMzAyLDcgQEAgaW5saW5l
IGJvb2wgY29tcGFyZUNTU1ZhbHVlKGNvbnN0IFJlZjxDUwogICAgIHJldHVybiBmaXJzdC5nZXQo
KS5lcXVhbHMoc2Vjb25kKTsKIH0KIAotdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVm
UHRyPENTU1ZhbHVlPj4gQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcDsKK3R5cGVkZWYgSGFzaE1hcDxB
dG9taWNTdHJpbmcsIFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPj4gQ3VzdG9tUHJvcGVy
dHlWYWx1ZU1hcDsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFsdWVMaXN0LmNwcAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ZhbHVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKIAorI2luY2x1ZGUg
IkNTU0N1c3RvbVByb3BlcnR5VmFsdWUuaCIKICNpbmNsdWRlICJDU1NGdW5jdGlvblZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTUGFyc2VyVmFsdWVzLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFs
dWUuaCIKQEAgLTIwNiw4ICsyMDcsOCBAQCBib29sIENTU1ZhbHVlTGlzdDo6Y2hlY2tWYXJpYWJs
ZXNGb3JDeWNsCiAgICAgICAgICAgICBhdXRvJiB2YXJpYWJsZVZhbHVlID0gZG93bmNhc3Q8Q1NT
VmFyaWFibGVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAgICAgIGlmIChzZWVuUHJvcGVydGllcy5j
b250YWlucyh2YXJpYWJsZVZhbHVlLm5hbWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGN1c3RvbVByb3BlcnRp
ZXMuZ2V0KHZhcmlhYmxlVmFsdWUubmFtZSgpKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2
YWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkgJiYgIWRvd25jYXN0PENTU1ZhcmlhYmxl
RGVwZW5kZW50VmFsdWU+KCp2YWx1ZSkuY2hlY2tWYXJpYWJsZXNGb3JDeWNsZXModmFyaWFibGVW
YWx1ZS5uYW1lKCksIGN1c3RvbVByb3BlcnRpZXMsIHNlZW5Qcm9wZXJ0aWVzLCBpbnZhbGlkUHJv
cGVydGllcykpCisgICAgICAgICAgICBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFs
dWUgPSBjdXN0b21Qcm9wZXJ0aWVzLmdldCh2YXJpYWJsZVZhbHVlLm5hbWUoKSk7CisgICAgICAg
ICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmNvbnRhaW5zVmFyaWFibGVzKCkgJiYgIWRvd25jYXN0
PENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWU+KCoodmFsdWUtPmRlcHJlY2F0ZWRWYWx1ZSgpKSku
Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXModmFyaWFibGVWYWx1ZS5uYW1lKCksIGN1c3RvbVByb3Bl
cnRpZXMsIHNlZW5Qcm9wZXJ0aWVzLCBpbnZhbGlkUHJvcGVydGllcykpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAvLyBIYXZlIHRvIGNoZWNrIHRoZSBmYWxs
YmFjayB2YWx1ZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCShyZXZpc2lvbiAy
MDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlOwogc3RydWN0IENTU1BhcnNlclZhbHVlOwogY2xhc3MgQ1NTUGFy
c2VyVmFsdWVMaXN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVEYXRhLmNw
cAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJDU1NWYXJpYWJsZURhdGEuaCIKIAorI2luY2x1ZGUgIkNTU0N1c3RvbVBy
b3BlcnR5VmFsdWUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQYXJz
ZXJUb2tlblJhbmdlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAt
ODEsNCArODIsMTAxIEBAIENTU1ZhcmlhYmxlRGF0YTo6Q1NTVmFyaWFibGVEYXRhKGNvbnN0IEMK
ICAgICBjb25zdW1lQW5kVXBkYXRlVG9rZW5zKHJhbmdlKTsKIH0KIAorYm9vbCBDU1NWYXJpYWJs
ZURhdGE6OmNoZWNrVmFyaWFibGVzRm9yQ3ljbGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
Q3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9tUHJvcGVydGllcywgSGFzaFNldDxBdG9taWNT
dHJpbmc+JiBzZWVuUHJvcGVydGllcywgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBpbnZhbGlkUHJv
cGVydGllcykgY29uc3QKK3sKKyAgICBpZiAoaW52YWxpZFByb3BlcnRpZXMuY29udGFpbnMobmFt
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBIYXNoU2V0PEF0b21pY1N0cmlu
Zz4gbmV3U2VlblByb3BlcnRpZXMgPSBzZWVuUHJvcGVydGllczsKKyAgICBuZXdTZWVuUHJvcGVy
dGllcy5hZGQobmFtZSk7CisgICAgCisgICAgYm9vbCB2YWxpZCA9IGNoZWNrVmFyaWFibGVzRm9y
Q3ljbGVzV2l0aFJhbmdlKG1fdG9rZW5zLCBjdXN0b21Qcm9wZXJ0aWVzLCBuZXdTZWVuUHJvcGVy
dGllcywgaW52YWxpZFByb3BlcnRpZXMpOworICAgIGlmICghdmFsaWQpCisgICAgICAgIGludmFs
aWRQcm9wZXJ0aWVzLmFkZChuYW1lKTsKKyAgICAKKyAgICByZXR1cm4gdmFsaWQ7Cit9CisgICAg
Citib29sIENTU1ZhcmlhYmxlRGF0YTo6Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXNXaXRoUmFuZ2Uo
Q1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9t
UHJvcGVydGllcywgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBzZWVuUHJvcGVydGllcywgSGFzaFNl
dDxBdG9taWNTdHJpbmc+JiBpbnZhbGlkUHJvcGVydGllcykgY29uc3QKK3sKKyAgICB3aGlsZSAo
IXJhbmdlLmF0RW5kKCkpIHsKKyAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkg
PT0gQ1NTVmFsdWVWYXIpIHsKKyAgICAgICAgICAgIENTU1BhcnNlclRva2VuUmFuZ2UgYmxvY2sg
PSByYW5nZS5jb25zdW1lQmxvY2soKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYmxvY2su
Y29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay5wZWVrKCkudHlw
ZSgpID09IElkZW50VG9rZW4pOworICAgICAgICAgICAgQXRvbWljU3RyaW5nIHZhcmlhYmxlTmFt
ZSA9CisgICAgICAgICAgICBibG9jay5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVl
KCkudG9BdG9taWNTdHJpbmcoKTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay5hdEVuZCgpIHx8
IGJsb2NrLnBlZWsoKS50eXBlKCkgPT0gQ29tbWFUb2tlbik7CisgICAgICAgICAgICBpZiAoc2Vl
blByb3BlcnRpZXMuY29udGFpbnModmFyaWFibGVOYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgIFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiB2
YWx1ZSA9IGN1c3RvbVByb3BlcnRpZXMuZ2V0KHZhcmlhYmxlTmFtZSk7CisgICAgICAgICAgICBp
ZiAodmFsdWUgJiYgdmFsdWUtPmNvbnRhaW5zVmFyaWFibGVzKCkgJiYgIXZhbHVlLT5jaGVja1Zh
cmlhYmxlc0ZvckN5Y2xlcyh2YXJpYWJsZU5hbWUsIGN1c3RvbVByb3BlcnRpZXMsIHNlZW5Qcm9w
ZXJ0aWVzLCBpbnZhbGlkUHJvcGVydGllcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgICAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBDb21tYVRva2VuKSB7
CisgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2suCisgICAgICAgICAgICAgICAgcmFuZ2UuY29u
c3VtZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlc1dp
dGhSYW5nZShibG9jaywgY3VzdG9tUHJvcGVydGllcywgc2VlblByb3BlcnRpZXMsIGludmFsaWRQ
cm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBy
YW5nZS5jb25zdW1lKCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIENTU1Zh
cmlhYmxlRGF0YTo6cmVzb2x2ZVZhcmlhYmxlRmFsbGJhY2soY29uc3QgQ3VzdG9tUHJvcGVydHlW
YWx1ZU1hcCYgY3VzdG9tUHJvcGVydGllcywgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgVmVj
dG9yPENTU1BhcnNlclRva2VuPiYgcmVzdWx0KSBjb25zdAoreworICAgIGlmIChyYW5nZS5hdEVu
ZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBl
KCkgPT0gQ29tbWFUb2tlbik7CisgICAgcmFuZ2UuY29uc3VtZSgpOworICAgIHJldHVybiByZXNv
bHZlVG9rZW5SYW5nZShjdXN0b21Qcm9wZXJ0aWVzLCByYW5nZSwgcmVzdWx0KTsKK30KKyAgICAK
K2Jvb2wgQ1NTVmFyaWFibGVEYXRhOjpyZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UoY29uc3QgQ3Vz
dG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9tUHJvcGVydGllcywgQ1NTUGFyc2VyVG9rZW5SYW5n
ZSByYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYgcmVzdWx0KSBjb25zdAoreworICAgIHJh
bmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkg
PT0gSWRlbnRUb2tlbik7CisgICAgQXRvbWljU3RyaW5nIHZhcmlhYmxlTmFtZSA9IHJhbmdlLmNv
bnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50b0F0b21pY1N0cmluZygpOworICAg
IEFTU0VSVChyYW5nZS5hdEVuZCgpIHx8IChyYW5nZS5wZWVrKCkudHlwZSgpID09IENvbW1hVG9r
ZW4pKTsKKyAgICAKKyAgICBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gcHJvcGVydHkg
PSBjdXN0b21Qcm9wZXJ0aWVzLmdldCh2YXJpYWJsZU5hbWUpOworICAgIGlmICghcHJvcGVydHkg
fHwgIXByb3BlcnR5LT52YWx1ZSgpKQorICAgICAgICByZXR1cm4gcmVzb2x2ZVZhcmlhYmxlRmFs
bGJhY2soY3VzdG9tUHJvcGVydGllcywgcmFuZ2UsIHJlc3VsdCk7CisgICAgCisgICAgaWYgKHBy
b3BlcnR5LT5jb250YWluc1ZhcmlhYmxlcygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBBdm9pZCBk
b2luZyB0aGlzIHdvcmsgbW9yZSB0aGFuIG9uY2UuCisgICAgICAgIFJlZlB0cjxDU1NWYXJpYWJs
ZURhdGE+IHJlc29sdmVkRGF0YSA9IHByb3BlcnR5LT52YWx1ZSgpLT5yZXNvbHZlVmFyaWFibGVS
ZWZlcmVuY2VzKGN1c3RvbVByb3BlcnRpZXMpOworICAgICAgICBpZiAoIXJlc29sdmVkRGF0YSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3Rvcihy
ZXNvbHZlZERhdGEtPnRva2VucygpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZFZlY3Rvcihwcm9wZXJ0eS0+dmFsdWUoKS0+dG9rZW5zKCkpOworICAgIAorICAgIHJldHVybiB0
cnVlOworfQorCitSZWZQdHI8Q1NTVmFyaWFibGVEYXRhPiBDU1NWYXJpYWJsZURhdGE6OnJlc29s
dmVWYXJpYWJsZVJlZmVyZW5jZXMoY29uc3QgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9t
UHJvcGVydGllcykgY29uc3QKK3sKKyAgICBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+IHJlc29sdmVk
VG9rZW5zOworICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UgPSBtX3Rva2VuczsKKyAgICBp
ZiAoIXJlc29sdmVUb2tlblJhbmdlKGN1c3RvbVByb3BlcnRpZXMsIHJhbmdlLCByZXNvbHZlZFRv
a2VucykpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBDU1NWYXJpYWJsZURh
dGE6OmNyZWF0ZVJlc29sdmVkKHJlc29sdmVkVG9rZW5zLCAqdGhpcyk7Cit9CisgICAgCitib29s
IENTU1ZhcmlhYmxlRGF0YTo6cmVzb2x2ZVRva2VuUmFuZ2UoY29uc3QgQ3VzdG9tUHJvcGVydHlW
YWx1ZU1hcCYgY3VzdG9tUHJvcGVydGllcywgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgVmVj
dG9yPENTU1BhcnNlclRva2VuPiYgcmVzdWx0KSBjb25zdAoreworICAgIGJvb2wgc3VjY2VzcyA9
IHRydWU7CisgICAgd2hpbGUgKCFyYW5nZS5hdEVuZCgpKSB7CisgICAgICAgIGlmIChyYW5nZS5w
ZWVrKCkuZnVuY3Rpb25JZCgpID09IENTU1ZhbHVlVmFyKQorICAgICAgICAgICAgc3VjY2VzcyAm
PSByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UoY3VzdG9tUHJvcGVydGllcywgcmFuZ2UuY29uc3Vt
ZUJsb2NrKCksIHJlc3VsdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocmFuZ2UuY29uc3VtZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJs
ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVEYXRh
LmgJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZURh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksMTEgQEAgcHVibGljOgogCiAgICAgYm9v
bCBuZWVkc1ZhcmlhYmxlUmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNWYXJpYWJs
ZVJlc29sdXRpb247IH0KIAorICAgIGJvb2wgY2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lLCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiwgSGFzaFNldDxBdG9t
aWNTdHJpbmc+JiBzZWVuUHJvcGVydGllcywgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBpbnZhbGlk
UHJvcGVydGllcykgY29uc3Q7CisKKyAgICBSZWZQdHI8Q1NTVmFyaWFibGVEYXRhPiByZXNvbHZl
VmFyaWFibGVSZWZlcmVuY2VzKGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmIGN1c3RvbVBy
b3BlcnRpZXMpIGNvbnN0OworICAgIGJvb2wgcmVzb2x2ZVRva2VuUmFuZ2UoY29uc3QgQ3VzdG9t
UHJvcGVydHlWYWx1ZU1hcCYsIENTU1BhcnNlclRva2VuUmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJU
b2tlbj4mKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBDU1NWYXJpYWJsZURhdGEoY29uc3QgQ1NT
UGFyc2VyVG9rZW5SYW5nZSYsIGJvb2wgbmVlZHNWYXJpYWJsZVJlc29sdXRpb24pOwogCkBAIC03
NCw2ICs3OSwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb25zdW1lQW5kVXBkYXRlVG9rZW5z
KGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiB2b2lkIHVwZGF0ZVRva2Vucyhjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJik7
CisgICAgCisgICAgYm9vbCBjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlc1dpdGhSYW5nZShDU1NQYXJz
ZXJUb2tlblJhbmdlLCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiwgSGFzaFNldDxBdG9taWNTdHJp
bmc+JiBzZWVuUHJvcGVydGllcywgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBpbnZhbGlkUHJvcGVy
dGllcykgY29uc3Q7CisgICAgYm9vbCByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UoY29uc3QgQ3Vz
dG9tUHJvcGVydHlWYWx1ZU1hcCYsIENTU1BhcnNlclRva2VuUmFuZ2UsIFZlY3RvcjxDU1NQYXJz
ZXJUb2tlbj4mKSBjb25zdDsKKyAgICBib29sIHJlc29sdmVWYXJpYWJsZUZhbGxiYWNrKGNvbnN0
IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmLCBDU1NQYXJzZXJUb2tlblJhbmdlLCBWZWN0b3I8Q1NT
UGFyc2VyVG9rZW4+JikgY29uc3Q7CiAKICAgICBTdHJpbmcgbV9iYWNraW5nU3RyaW5nOwogICAg
IFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4gbV90b2tlbnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuY3BwCShyZXZpc2lvbiAyMDc5MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU3Ry
aW5nIENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU6OmN1c3RvbUNTU1RleHQoKSBjb25zdAogewot
ICAgIC8vIFdlIG1heSB3YW50IHRvIGNvbnNpZGVyIGNhY2hpbmcgdGhpcyB2YWx1ZS4KLSAgICBy
ZXR1cm4gbV9kYXRhLT50b2tlblJhbmdlKCkuc2VyaWFsaXplKCk7CisgICAgaWYgKCFtX3Nlcmlh
bGl6ZWQpIHsKKyAgICAgICAgbV9zZXJpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgbV9zdHJpbmdW
YWx1ZSA9IG1fZGF0YS0+dG9rZW5SYW5nZSgpLnNlcmlhbGl6ZSgpOworICAgIH0KKyAgICByZXR1
cm4gbV9zdHJpbmdWYWx1ZTsKK30KKyAgICAKK2Jvb2wgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1
ZTo6Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBDdXN0
b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0cmlu
Zz4mIHNlZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGludmFsaWRQcm9wZXJ0
aWVzKSBjb25zdAoreworICAgIEFTU0VSVChtX2RhdGEpOworICAgIHJldHVybiBtX2RhdGEtPmNo
ZWNrVmFyaWFibGVzRm9yQ3ljbGVzKG5hbWUsIGN1c3RvbVByb3BlcnRpZXMsIHNlZW5Qcm9wZXJ0
aWVzLCBpbnZhbGlkUHJvcGVydGllcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuaAko
cmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJl
bmNlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBlcXVhbHMoY29uc3QgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YSA9PSBvdGhlci5tX2RhdGE7IH0KICAgICBTdHJpbmcgY3VzdG9tQ1NT
VGV4dCgpIGNvbnN0OwogCisgICAgYm9vbCBjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyhjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmLCBIYXNoU2V0PEF0b21p
Y1N0cmluZz4mIHNlZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGludmFsaWRQ
cm9wZXJ0aWVzKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBDU1NWYXJpYWJsZVJlZmVyZW5jZVZh
bHVlKFJlZjxDU1NWYXJpYWJsZURhdGE+JiYgZGF0YSkKICAgICAgICAgOiBDU1NWYWx1ZShWYXJp
YWJsZVJlZmVyZW5jZUNsYXNzKQpAQCAtNTgsNiArNjAsOCBAQCBwcml2YXRlOgogICAgIH0KIAog
ICAgIFJlZlB0cjxDU1NWYXJpYWJsZURhdGE+IG1fZGF0YTsKKyAgICBtdXRhYmxlIFN0cmluZyBt
X3N0cmluZ1ZhbHVlOworICAgIG11dGFibGUgYm9vbCBtX3NlcmlhbGl6ZWQgeyBmYWxzZSB9Owog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhcmlhYmxlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NW
YXJpYWJsZVZhbHVlLmNwcAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1ZhcmlhYmxlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMCArNjksMTEgQEAg
Ym9vbCBDU1NWYXJpYWJsZVZhbHVlOjplcXVhbHMoY29uc3QgQ1NTVgogCiBib29sIENTU1Zhcmlh
YmxlVmFsdWU6OmJ1aWxkUGFyc2VyVmFsdWVMaXN0U3Vic3RpdHV0aW5nVmFyaWFibGVzKENTU1Bh
cnNlclZhbHVlTGlzdCogcmVzdWx0TGlzdCwgY29uc3QgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYg
Y3VzdG9tUHJvcGVydGllcykgY29uc3QKIHsKLSAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZSA9IGN1c3RvbVByb3BlcnRpZXMuZ2V0KG1fbmFtZSkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5p
c1ZhbHVlTGlzdCgpKQorICAgIGlmIChSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gY3Vz
dG9tUHJvcGVydHlWYWx1ZSA9IGN1c3RvbVByb3BlcnRpZXMuZ2V0KG1fbmFtZSkpIHsKKyAgICAg
ICAgYXV0byB2YWx1ZSA9IGN1c3RvbVByb3BlcnR5VmFsdWUtPmRlcHJlY2F0ZWRWYWx1ZSgpOwor
ICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpLmJ1aWxkUGFyc2VyVmFsdWVMaXN0
U3Vic3RpdHV0aW5nVmFyaWFibGVzKHJlc3VsdExpc3QsIGN1c3RvbVByb3BlcnRpZXMpOwotICAg
ICAgICBpZiAodmFsdWUtPmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKQorICAgICAgICBpZiAo
dmFsdWUgJiYgdmFsdWUtPmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWU+KCp2YWx1ZSkudmFsdWVM
aXN0KCkuYnVpbGRQYXJzZXJWYWx1ZUxpc3RTdWJzdGl0dXRpbmdWYXJpYWJsZXMocmVzdWx0TGlz
dCwgY3VzdG9tUHJvcGVydGllcyk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVQcm9wZXJ0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVQcm9wZXJ0aWVzLmNwcAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUHJvcGVydGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NT
UGVuZGluZ1N1YnN0aXR1dGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgpA
QCAtMTI2LDYgKzEyNywxNyBAQCBTdHJpbmcgU3R5bGVQcm9wZXJ0aWVzOjpnZXRQcm9wZXJ0eVZh
bHVlCiAgICAgaWYgKHZhbHVlKQogICAgICAgICByZXR1cm4gdmFsdWUtPmNzc1RleHQoKTsKIAor
ICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCA9IHNob3J0aGFuZEZv
clByb3BlcnR5KHByb3BlcnR5SUQpOworICAgIGlmIChzaG9ydGhhbmQubGVuZ3RoKCkpIHsKKyAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5h
bChzaG9ydGhhbmQucHJvcGVydGllcygpWzBdKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgaWYgKHZhbHVlLT5pc1ZhcmlhYmxlRGVw
ZW5kZW50VmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS0+Y3NzVGV4dCgpOworICAg
ICAgICBpZiAodmFsdWUtPmlzUGVuZGluZ1N1YnN0aXR1dGlvblZhbHVlKCkpCisgICAgICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTUGVuZGluZ1N1YnN0aXR1dGlvblZhbHVlPigqdmFsdWUpLnNo
b3J0aGFuZFZhbHVlKCktPmNzc1RleHQoKTsKKyAgICB9CisKICAgICAvLyBTaG9ydGhhbmQgYW5k
IDQtdmFsdWVzIHByb3BlcnRpZXMKICAgICBzd2l0Y2ggKHByb3BlcnR5SUQpIHsKICAgICBjYXNl
IENTU1Byb3BlcnR5QWxsOgpAQCAtMjMyLDkgKzI0NCw2IEBAIFN0cmluZyBTdHlsZVByb3BlcnRp
ZXM6OmdldEN1c3RvbVByb3BlcnQKIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmJvcmRlclNwYWNp
bmdWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhhbmQpIGNvbnN0CiB7
CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBob3Jpem9udGFsVmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1Zh
bHVlSW50ZXJuYWwoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVswXSk7Ci0gICAgaWYgKGhvcml6b250
YWxWYWx1ZSAmJiBob3Jpem9udGFsVmFsdWUtPmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKQot
ICAgICAgICByZXR1cm4gaG9yaXpvbnRhbFZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgCiAgICAgUmVm
UHRyPENTU1ZhbHVlPiB2ZXJ0aWNhbFZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFs
KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbMV0pOwogCiAgICAgLy8gV2hpbGUgc3RhbmRhcmQgYm9y
ZGVyLXNwYWNpbmcgcHJvcGVydHkgZG9lcyBub3QgYWxsb3cgc3BlY2lmeWluZyBib3JkZXItc3Bh
Y2luZy12ZXJ0aWNhbCB3aXRob3V0CkBAIC0zODUsOCArMzk0LDYgQEAgU3RyaW5nIFN0eWxlUHJv
cGVydGllczo6Z2V0TGF5ZXJlZFNob3J0aAogICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvY3Nzb20tMS8jc2VyaWFsaXplLWEtY3NzLWRlY2xhcmF0aW9uLWJsb2NrLgogICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZXNbaV0t
PmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1tp
XS0+Y3NzVGV4dCgpOwogICAgICAgICBpZiAodmFsdWVzW2ldLT5pc0Jhc2VWYWx1ZUxpc3QoKSkK
ICAgICAgICAgICAgIG51bUxheWVycyA9IHN0ZDo6bWF4KGRvd25jYXN0PENTU1ZhbHVlTGlzdD4o
KnZhbHVlc1tpXSkubGVuZ3RoKCksIG51bUxheWVycyk7CiAgICAgICAgIGVsc2UKQEAgLTUyNSw4
ICs1MzIsNiBAQCBTdHJpbmcgU3R5bGVQcm9wZXJ0aWVzOjpnZXRTaG9ydGhhbmRWYWx1CiAgICAg
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZUludGVy
bmFsKHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaV0pOwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgICAgICBpZiAodmFsdWUt
PmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZS0+Y3NzVGV4dCgpOwogICAgICAgICAgICAgU3RyaW5nIHZhbHVlVGV4dCA9IHZhbHVlLT5jc3NU
ZXh0KCk7CiAgICAgICAgICAgICBpZiAoIWkpCiAgICAgICAgICAgICAgICAgY29tbW9uVmFsdWUg
PSB2YWx1ZVRleHQ7CkBAIC01NTUsMTAgKzU2MCw2IEBAIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6
OmdldENvbW1vblZhbHVlKGMKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2hvcnRoYW5k
Lmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFBy
b3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChzaG9ydGhhbmQucHJvcGVydGllcygpW2ldKTsKICAgICAg
ICAgLy8gRklYTUU6IENTU0luaXRpYWxWYWx1ZTo6Y3NzVGV4dCBzaG91bGQgZ2VuZXJhdGUgdGhl
IHJpZ2h0IHZhbHVlLgotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgICAgICBpZiAodmFsdWUtPmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7CiAgICAgICAgIFN0cmluZyB0ZXh0
ID0gdmFsdWUtPmNzc1RleHQoKTsKICAgICAgICAgaWYgKHRleHQuaXNOdWxsKCkpCiAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC02MTEsNiArNjEyLDcgQEAgUmVmUHRyPENTU1ZhbHVl
PiBTdHlsZVByb3BlcnRpZXM6OmdldFBybwogICAgICAgICBpZiAoZGVwZW5kZW50VmFsdWUucHJv
cGVydHlJRCgpICE9IHByb3BlcnR5SUQpCiAgICAgICAgICAgICByZXR1cm4gQ1NTQ3VzdG9tUHJv
cGVydHlWYWx1ZTo6Y3JlYXRlSW52YWxpZCgpOyAvLyBIYXZlIHRvIHJldHVybiBzcGVjaWFsICJw
ZW5kaW5nLXN1YnN0aXR1dGlvbiIgdmFsdWUuCiAgICAgfQorCiAgICAgcmV0dXJuIHZhbHVlOwog
fQogCkBAIC04NjgsNiArODcwLDEwIEBAIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmFzVGV4dCgp
IGNvbnN0CiAgICAgICAgICAgICBhdXRvJiBkZXBlbmRlbnRWYWx1ZSA9IGRvd25jYXN0PENTU1Zh
cmlhYmxlRGVwZW5kZW50VmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKICAgICAgICAgICAgIGlm
IChkZXBlbmRlbnRWYWx1ZS5wcm9wZXJ0eUlEKCkgIT0gcHJvcGVydHlJRCkKICAgICAgICAgICAg
ICAgICBzaG9ydGhhbmRQcm9wZXJ0eUlEID0gZGVwZW5kZW50VmFsdWUucHJvcGVydHlJRCgpOwor
ICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnZhbHVlKCkgJiYgcHJvcGVydHkudmFsdWUoKS0+
aXNQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWUoKSkgeworICAgICAgICAgICAgYXV0byYgc3Vic3Rp
dHV0aW9uVmFsdWUgPSBkb3duY2FzdDxDU1NQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWU+KCpwcm9w
ZXJ0eS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHNob3J0aGFuZFByb3BlcnR5SUQgPSBzdWJzdGl0
dXRpb25WYWx1ZS5zaG9ydGhhbmRQcm9wZXJ0eUlkKCk7CisgICAgICAgICAgICB2YWx1ZSA9IHN1
YnN0aXR1dGlvblZhbHVlLnNob3J0aGFuZFZhbHVlKCktPmNzc1RleHQoKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHlJRCkgewogICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbk5hbWU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6Ok1hdGNoUmVzdWx0OjphZGRNYXRjCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc1Zhcmlh
YmxlRGVwZW5kZW50VmFsdWUoKSkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNWYXJp
YWJsZVJlZmVyZW5jZXMoKSkgewogICAgICAgICAgICAgICAgICAgICBpc0NhY2hlYWJsZSA9IGZh
bHNlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0x
NTg2LDggKzE1ODYsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
CiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICAKICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlVG9BcHBseSA9IHZhbHVlOwotICAgIGlmICh2YWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVu
dFZhbHVlKCkpIHsKLSAgICAgICAgdmFsdWVUb0FwcGx5ID0gcmVzb2x2ZWRWYXJpYWJsZVZhbHVl
KGlkLCAqZG93bmNhc3Q8Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4odmFsdWUpKTsKKyAgICBp
ZiAodmFsdWUtPmhhc1ZhcmlhYmxlUmVmZXJlbmNlcygpKSB7CisgICAgICAgIHZhbHVlVG9BcHBs
eSA9IHJlc29sdmVkVmFyaWFibGVWYWx1ZShpZCwgKnZhbHVlKTsKICAgICAgICAgaWYgKCF2YWx1
ZVRvQXBwbHkpIHsKICAgICAgICAgICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9w
ZXJ0eShpZCkpCiAgICAgICAgICAgICAgICAgdmFsdWVUb0FwcGx5ID0gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJbmhlcml0ZWRWYWx1ZSgpOwpAQCAtMTYwNCwxNyArMTYwNCwyMyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvCiAgICAgCiAgICAgQ1NT
VmFsdWUqIHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFsID0gdmFsdWVUb0FwcGx5LmdldCgp
OwogICAgIENTU0N1c3RvbVByb3BlcnR5VmFsdWUqIGN1c3RvbVByb3BlcnR5VmFsdWUgPSBudWxs
cHRyOworICAgIENTU1ZhbHVlSUQgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID0gQ1NTVmFsdWVJbnZh
bGlkOwogICAgIAogICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUN1c3RvbSkgeworICAgICAgICAv
LyBGSVhNRS1ORVdQQVJTRVI6IENhbiBjbGVhbiB0aGlzIHVwIG9uY2Ugb2xkIHBhcnNlciBpcyBn
b25lIGFuZCByZW1vdmUKKyAgICAgICAgLy8gdGhlIGRlcHJlY2F0ZWRWYWx1ZSBjYWxsIGFuZCB0
aGUgdmFsdWVUb0NoZWNrRm9ySW5oZXJpdEluaXRpYWwgdmFyaWFibGUuCiAgICAgICAgIGN1c3Rv
bVByb3BlcnR5VmFsdWUgPSAmZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnZhbHVl
VG9BcHBseSk7CiAgICAgICAgIHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFsID0gY3VzdG9t
UHJvcGVydHlWYWx1ZS0+ZGVwcmVjYXRlZFZhbHVlKCkuZ2V0KCk7CisgICAgICAgIGN1c3RvbVBy
b3BlcnR5VmFsdWVJRCA9IGN1c3RvbVByb3BlcnR5VmFsdWUtPnZhbHVlSUQoKTsKKyAgICAgICAg
aWYgKGN1c3RvbVByb3BlcnR5VmFsdWVJRCAhPSBDU1NWYWx1ZUludmFsaWQpCisgICAgICAgICAg
ICB2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5pdGlhbCA9IHZhbHVlVG9BcHBseS5nZXQoKTsKICAg
ICB9CiAKLSAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudFN0eWxlKCkgJiYgdmFsdWVU
b0NoZWNrRm9ySW5oZXJpdEluaXRpYWwtPmlzSW5oZXJpdGVkVmFsdWUoKTsKLSAgICBib29sIGlz
SW5pdGlhbCA9IHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFsLT5pc0luaXRpYWxWYWx1ZSgp
IHx8ICghc3RhdGUucGFyZW50U3R5bGUoKSAmJiB2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5pdGlh
bC0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVu
dFN0eWxlKCkgPyB2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5pdGlhbC0+aXNJbmhlcml0ZWRWYWx1
ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZUluaGVyaXQgOiBmYWxzZTsK
KyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFsLT5pc0lu
aXRpYWxWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZUluaXRpYWwg
fHwgKCFzdGF0ZS5wYXJlbnRTdHlsZSgpICYmICh2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5pdGlh
bC0+aXNJbmhlcml0ZWRWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1
ZUluaGVyaXQpKTsKICAgICAKLSAgICBib29sIGlzVW5zZXQgPSB2YWx1ZVRvQ2hlY2tGb3JJbmhl
cml0SW5pdGlhbC0+aXNVbnNldFZhbHVlKCk7Ci0gICAgYm9vbCBpc1JldmVydCA9IHZhbHVlVG9D
aGVja0ZvckluaGVyaXRJbml0aWFsLT5pc1JldmVydFZhbHVlKCk7CisgICAgYm9vbCBpc1Vuc2V0
ID0gdmFsdWVUb0NoZWNrRm9ySW5oZXJpdEluaXRpYWwtPmlzVW5zZXRWYWx1ZSgpIHx8IGN1c3Rv
bVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZVVuc2V0OworICAgIGJvb2wgaXNSZXZlcnQgPSB2
YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5pdGlhbC0+aXNSZXZlcnRWYWx1ZSgpIHx8IGN1c3RvbVBy
b3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZVJldmVydDsKIAogICAgIGlmIChpc1JldmVydCkgewog
ICAgICAgICBpZiAoY2FzY2FkZUxldmVsKCkgPT0gVXNlckFnZW50TGV2ZWwgfHwgIW1hdGNoUmVz
dWx0KQpAQCAtMTY2NiwxNCArMTY3MiwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvCiAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5Q3VzdG9tKSB7CiAgICAgICAg
IENTU0N1c3RvbVByb3BlcnR5VmFsdWUqIGN1c3RvbVByb3BlcnR5ID0gJmRvd25jYXN0PENTU0N1
c3RvbVByb3BlcnR5VmFsdWU+KCp2YWx1ZVRvQXBwbHkpOwogICAgICAgICBpZiAoaXNJbmhlcml0
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGN1c3RvbVZhbCA9IHN0YXRlLnBhcmVu
dFN0eWxlKCktPmdldEN1c3RvbVByb3BlcnR5VmFsdWUoY3VzdG9tUHJvcGVydHktPm5hbWUoKSk7
CisgICAgICAgICAgICBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gY3VzdG9tVmFsID0g
c3RhdGUucGFyZW50U3R5bGUoKS0+Z2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShjdXN0b21Qcm9wZXJ0
eS0+bmFtZSgpKTsKICAgICAgICAgICAgIGlmICghY3VzdG9tVmFsKQogICAgICAgICAgICAgICAg
IGN1c3RvbVZhbCA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZUludmFsaWQoKTsKICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1c3RvbVByb3BlcnR5VmFsdWUoY3VzdG9tUHJv
cGVydHktPm5hbWUoKSwgY3VzdG9tVmFsKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0luaXRpYWwp
CiAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGN1c3Rv
bVByb3BlcnR5LT5uYW1lKCksIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZUludmFsaWQo
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1c3RvbVBy
b3BlcnR5VmFsdWUoY3VzdG9tUHJvcGVydHktPm5hbWUoKSwgY3VzdG9tUHJvcGVydHktPmRlcHJl
Y2F0ZWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1c3RvbVByb3Bl
cnR5VmFsdWUoY3VzdG9tUHJvcGVydHktPm5hbWUoKSwgY3VzdG9tUHJvcGVydHkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0xNjgxLDEwICsxNjg3LDEwIEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm8KICAgICBTdHlsZUJ1aWxkZXI6OmFwcGx5UHJvcGVy
dHkoaWQsICp0aGlzLCAqdmFsdWVUb0FwcGx5LCBpc0luaXRpYWwsIGlzSW5oZXJpdCk7CiB9CiAK
LVJlZlB0cjxDU1NWYWx1ZT4gU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElELCBjb25zdCBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlJiB2YWx1
ZSkKK1JlZlB0cjxDU1NWYWx1ZT4gU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgQ1NT
UGFyc2VyIHBhcnNlcihtX3N0YXRlLmRvY3VtZW50KCkpOwotICAgIHJldHVybiBwYXJzZXIucGFy
c2VWYXJpYWJsZURlcGVuZGVudFZhbHVlKHByb3BJRCwgdmFsdWUsIG1fc3RhdGUuc3R5bGUoKS0+
Y3VzdG9tUHJvcGVydGllcygpLCBtX3N0YXRlLnN0eWxlKCktPmRpcmVjdGlvbigpLCBtX3N0YXRl
LnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOworICAgIHJldHVybiBwYXJzZXIucGFyc2VWYWx1ZVdp
dGhWYXJpYWJsZVJlZmVyZW5jZXMocHJvcElELCB2YWx1ZSwgbV9zdGF0ZS5zdHlsZSgpLT5jdXN0
b21Qcm9wZXJ0aWVzKCksIG1fc3RhdGUuc3R5bGUoKS0+ZGlyZWN0aW9uKCksIG1fc3RhdGUuc3R5
bGUoKS0+d3JpdGluZ01vZGUoKSk7CiB9CiAKIFJlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29s
dmVyOjpzdHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuaAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDcgKzQ2OSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKIAogICAgIHZvaWQgYXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNo
TWFzayA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0LCBjb25zdCBNYXRjaFJlc3VsdCog
PSBudWxscHRyKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlc29sdmVkVmFyaWFibGVWYWx1ZShD
U1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlJik7CisgICAgUmVm
UHRyPENTU1ZhbHVlPiByZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlJRCwgY29uc3Qg
Q1NTVmFsdWUmKTsKIAogICAgIHZvaWQgYXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBD
U1NWYWx1ZSopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3Bw
CShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDggKzU4LDEwIEBACiAjaW5jbHVkZSAiQ1NTUGFn
ZVJ1bGUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXJGYXN0UGF0aHMuaCIKICNpbmNsdWRlICJDU1NQ
YXJzZXJJbXBsLmgiCisjaW5jbHVkZSAiQ1NTUGVuZGluZ1N1YnN0aXR1dGlvblZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1
ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXIuaCIKICNpbmNsdWRlICJD
U1NQcm9wZXJ0eVNvdXJjZURhdGEuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKICNp
bmNsdWRlICJDU1NSZXZlcnRWYWx1ZS5oIgpAQCAtNzUsNiArNzcsNyBAQAogI2luY2x1ZGUgIkNT
U1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkNTU1Zh
cmlhYmxlRGVwZW5kZW50VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NWYXJpYWJsZVJlZmVyZW5jZVZh
bHVlLmgiCiAjaW5jbHVkZSAiQ291bnRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCkBAIC0xNDMyLDYgKzE0MzUsMTAgQEAgUmVmPEltbXV0
YWJsZVN0eWxlUHJvcGVydGllcz4gQ1NTUGFyc2VyOgogewogICAgIENTU1BhcnNlckNvbnRleHQg
Y29udGV4dChlbGVtZW50LT5kb2N1bWVudCgpKTsKICAgICBjb250ZXh0Lm1vZGUgPSBzdHJpY3RU
b0NTU1BhcnNlck1vZGUoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmICFlbGVtZW50LT5kb2N1
bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKKworICAgIGlmIChjb250ZXh0LnVzZU5ld1BhcnNlcikK
KyAgICAgICAgcmV0dXJuIENTU1BhcnNlckltcGw6OnBhcnNlSW5saW5lU3R5bGVEZWNsYXJhdGlv
bihzdHJpbmcsIGVsZW1lbnQpOworCiAgICAgcmV0dXJuIENTU1BhcnNlcihjb250ZXh0KS5wYXJz
ZURlY2xhcmF0aW9uKHN0cmluZywgbnVsbHB0cik7CiB9CiAKQEAgLTE3OTYsMjMgKzE4MDMsNjgg
QEAgdm9pZCBDU1NQYXJzZXI6OmFkZEV4cGFuZGVkUHJvcGVydHlGb3JWYQogICAgICAgICBhZGRQ
cm9wZXJ0eShsb25naGFuZHNbaV0sIHZhbHVlLmNvcHlSZWYoKSwgaW1wb3J0YW50KTsKIH0KIAot
UmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFyaWFibGVEZXBlbmRlbnRWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSYgZGVw
ZW5kZW50VmFsdWUsIGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmIGN1c3RvbVByb3BlcnRp
ZXMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNl
cyhDU1NQcm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBjb25zdCBDdXN0
b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCiB7Ci0gICAgbV92YWx1ZUxpc3QucmVzZXQo
bmV3IENTU1BhcnNlclZhbHVlTGlzdCgpKTsKLSAgICBpZiAoIWRlcGVuZGVudFZhbHVlLnZhbHVl
TGlzdCgpLmJ1aWxkUGFyc2VyVmFsdWVMaXN0U3Vic3RpdHV0aW5nVmFyaWFibGVzKG1fdmFsdWVM
aXN0LmdldCgpLCBjdXN0b21Qcm9wZXJ0aWVzKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgaWYgKHZhbHVlLmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKSB7CisgICAgICAgIGNvbnN0
IENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUmIGRlcGVuZGVudFZhbHVlID0gZG93bmNhc3Q8Q1NT
VmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4odmFsdWUpOworICAgICAgICBtX3ZhbHVlTGlzdC5yZXNl
dChuZXcgQ1NTUGFyc2VyVmFsdWVMaXN0KCkpOworICAgICAgICBpZiAoIWRlcGVuZGVudFZhbHVl
LnZhbHVlTGlzdCgpLmJ1aWxkUGFyc2VyVmFsdWVMaXN0U3Vic3RpdHV0aW5nVmFyaWFibGVzKG1f
dmFsdWVMaXN0LmdldCgpLCBjdXN0b21Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIENTU1Byb3BlcnR5SUQgZGVwZW5kZW50VmFsdWVQcm9wZXJ0eUlE
ID0gZGVwZW5kZW50VmFsdWUucHJvcGVydHlJRCgpOworICAgICAgICBpZiAoQ1NTUHJvcGVydHk6
OmlzRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQpKQorICAg
ICAgICAgICAgZGVwZW5kZW50VmFsdWVQcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHk6OnJlc29sdmVE
aXJlY3Rpb25Bd2FyZVByb3BlcnR5KGRlcGVuZGVudFZhbHVlUHJvcGVydHlJRCwgZGlyZWN0aW9u
LCB3cml0aW5nTW9kZSk7CiAKLSAgICBDU1NQcm9wZXJ0eUlEIGRlcGVuZGVudFZhbHVlUHJvcGVy
dHlJRCA9IGRlcGVuZGVudFZhbHVlLnByb3BlcnR5SUQoKTsKLSAgICBpZiAoQ1NTUHJvcGVydHk6
OmlzRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQpKQotICAg
ICAgICBkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVj
dGlvbkF3YXJlUHJvcGVydHkoZGVwZW5kZW50VmFsdWVQcm9wZXJ0eUlELCBkaXJlY3Rpb24sIHdy
aXRpbmdNb2RlKTsKKyAgICAgICAgaWYgKCFwYXJzZVZhbHVlKGRlcGVuZGVudFZhbHVlUHJvcGVy
dHlJRCwgZmFsc2UpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoIXBh
cnNlVmFsdWUoZGVwZW5kZW50VmFsdWVQcm9wZXJ0eUlELCBmYWxzZSkpCisgICAgICAgIGZvciAo
YXV0byYgcHJvcGVydHkgOiBtX3BhcnNlZFByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIGlmIChw
cm9wZXJ0eS5pZCgpID09IHByb3BJRCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHku
dmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorICAgIAorICAgIGlmICh2YWx1ZS5pc1BlbmRpbmdTdWJzdGl0dXRpb25WYWx1ZSgpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgaGF2ZSBhIHJlc29sdmVkU2hvcnRoYW5kcyBjYWNo
ZSB0byBzdG9wIHRoaXMgZnJvbSBiZWluZyBkb25lCisgICAgICAgIC8vIG92ZXIgYW5kIG92ZXIg
Zm9yIGVhY2ggbG9uZ2hhbmQgdmFsdWUuCisgICAgICAgIGNvbnN0IENTU1BlbmRpbmdTdWJzdGl0
dXRpb25WYWx1ZSYgcGVuZGluZ1N1YnN0aXR1dGlvbiA9IGRvd25jYXN0PENTU1BlbmRpbmdTdWJz
dGl0dXRpb25WYWx1ZT4odmFsdWUpOworICAgICAgICBDU1NQcm9wZXJ0eUlEIHNob3J0aGFuZElE
ID0gcGVuZGluZ1N1YnN0aXR1dGlvbi5zaG9ydGhhbmRQcm9wZXJ0eUlkKCk7CisgICAgICAgIGlm
IChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KHNob3J0aGFuZElEKSkKKyAg
ICAgICAgICAgIHNob3J0aGFuZElEID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2Fy
ZVByb3BlcnR5KHNob3J0aGFuZElELCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKKyAgICAgICAg
Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSogc2hvcnRoYW5kVmFsdWUgPSBwZW5kaW5nU3Vic3Rp
dHV0aW9uLnNob3J0aGFuZFZhbHVlKCk7CisgICAgICAgIGNvbnN0IENTU1ZhcmlhYmxlRGF0YSog
dmFyaWFibGVEYXRhID0gc2hvcnRoYW5kVmFsdWUtPnZhcmlhYmxlRGF0YVZhbHVlKCk7CisgICAg
ICAgIEFTU0VSVCh2YXJpYWJsZURhdGEpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPENTU1Bh
cnNlclRva2VuPiByZXNvbHZlZFRva2VuczsKKyAgICAgICAgaWYgKCF2YXJpYWJsZURhdGEtPnJl
c29sdmVUb2tlblJhbmdlKGN1c3RvbVByb3BlcnRpZXMsIHZhcmlhYmxlRGF0YS0+dG9rZW5zKCks
IHJlc29sdmVkVG9rZW5zKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAK
KyAgICAgICAgUGFyc2VkUHJvcGVydHlWZWN0b3IgcGFyc2VkUHJvcGVydGllczsKKyAgICAgICAg
aWYgKCFDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VWYWx1ZShzaG9ydGhhbmRJRCwgZmFsc2UsIHJl
c29sdmVkVG9rZW5zLCBtX2NvbnRleHQsIHBhcnNlZFByb3BlcnRpZXMsIFN0eWxlUnVsZTo6U3R5
bGUpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBmb3Ig
KGF1dG8mIHByb3BlcnR5IDogcGFyc2VkUHJvcGVydGllcykgeworICAgICAgICAgICAgaWYgKHBy
b3BlcnR5LmlkKCkgPT0gcHJvcElEKQorICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eS52
YWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogbV9wYXJzZWRQcm9wZXJ0aWVzKSB7Ci0g
ICAgICAgIGlmIChwcm9wZXJ0eS5pZCgpID09IHByb3BJRCkKLSAgICAgICAgICAgIHJldHVybiBw
cm9wZXJ0eS52YWx1ZSgpOworICAgIGlmICh2YWx1ZS5pc1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUo
KSkgeworICAgICAgICBjb25zdCBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlJiB2YWx1ZVdpdGhS
ZWZlcmVuY2VzID0gZG93bmNhc3Q8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4odmFsdWUpOwor
ICAgICAgICBjb25zdCBDU1NWYXJpYWJsZURhdGEqIHZhcmlhYmxlRGF0YSA9IHZhbHVlV2l0aFJl
ZmVyZW5jZXMudmFyaWFibGVEYXRhVmFsdWUoKTsKKyAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGF0
YSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+IHJlc29sdmVkVG9r
ZW5zOworICAgICAgICBpZiAoIXZhcmlhYmxlRGF0YS0+cmVzb2x2ZVRva2VuUmFuZ2UoY3VzdG9t
UHJvcGVydGllcywgdmFyaWFibGVEYXRhLT50b2tlbnMoKSwgcmVzb2x2ZWRUb2tlbnMpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICByZXR1cm4gQ1NTUHJv
cGVydHlQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUocHJvcElELCByZXNvbHZlZFRva2VucywgbV9j
b250ZXh0KTsKICAgICB9CisgICAgCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkocmV2aXNpb24gMjA3OTAzKQorKysgU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDk0
LDcgKzQ5NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Q3VzdG9tUHJvcGVydHlOYW1lKGNv
bnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKSB7IG1fY3VzdG9tUHJvcGVydHlOYW1lID0g
cHJvcGVydHlOYW1lOyB9CiAKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVmFyaWFibGVEZXBl
bmRlbnRWYWx1ZShDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVl
JiwgY29uc3QgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9tUHJvcGVydGllcywgVGV4dERp
cmVjdGlvbiwgV3JpdGluZ01vZGUpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VWYWx1ZVdp
dGhWYXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTVmFsdWUmLCBjb25z
dCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBUZXh0RGlyZWN0aW9u
LCBXcml0aW5nTW9kZSk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpczhCaXRTb3VyY2UoKSB7IHJl
dHVybiBtX2lzOEJpdFNvdXJjZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1BhcnNlckltcGwuY3BwCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxNiArNzcs
NiBAQCBib29sIENTU1BhcnNlckltcGw6OnBhcnNlVmFsdWUoTXV0YWJsZVN0CiAgICAgcmV0dXJu
IGRlY2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0aWVzKHBhcnNlci5tX3BhcnNlZFByb3BlcnRp
ZXMpOwogfQogCi1ib29sIENTU1BhcnNlckltcGw6OnBhcnNlVmFyaWFibGVWYWx1ZShNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBjb250ZXh0KQotewotICAgIENTU1BhcnNlckltcGwgcGFyc2VyKGNvbnRleHQp
OwotICAgIENTU1Rva2VuaXplcjo6U2NvcGUgc2NvcGUodmFsdWUpOwotICAgIHBhcnNlci5jb25z
dW1lVmFyaWFibGVWYWx1ZShzY29wZS50b2tlblJhbmdlKCksIHByb3BlcnR5TmFtZSwgaW1wb3J0
YW50KTsKLSAgICBpZiAocGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3Bl
cnRpZXMocGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9p
ZCBmaWx0ZXJQcm9wZXJ0aWVzKGJvb2wgaW1wb3J0YW50LCBjb25zdCBQYXJzZWRQcm9wZXJ0eVZl
Y3RvciYgaW5wdXQsIFBhcnNlZFByb3BlcnR5VmVjdG9yJiBvdXRwdXQsIHNpemVfdCYgdW51c2Vk
RW50cmllcywgc3RkOjpiaXRzZXQ8bnVtQ1NTUHJvcGVydGllcz4mIHNlZW5Qcm9wZXJ0aWVzLCBI
YXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5DdXN0b21Qcm9wZXJ0aWVzKQogewogICAgIC8vIEFk
ZCBwcm9wZXJ0aWVzIGluIHJldmVyc2Ugb3JkZXIgc28gdGhhdCBoaWdoZXN0IHByaW9yaXR5IGRl
ZmluaXRpb25zIGFyZSByZWFjaGVkIGZpcnN0LiBEdXBsaWNhdGUgZGVmaW5pdGlvbnMgY2FuIHRo
ZW4gYmUgaWdub3JlZCB3aGVuIGZvdW5kLgpAQCAtOTcsMTEgKzg3LDEwIEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBmaWx0ZXJQcm9wZXJ0aWVzKGJvb2wKICAgICAgICAgY29uc3QgdW5zaWduZWQgcHJv
cGVydHlJREluZGV4ID0gcHJvcGVydHkuaWQoKSAtIGZpcnN0Q1NTUHJvcGVydHk7CiAgICAgICAg
IAogICAgICAgICBpZiAocHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUN1c3RvbSkgewotICAg
ICAgICAgICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSogY3VzdG9tVmFsdWUgPSBkb3duY2FzdDxD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlPihwcm9wZXJ0eS52YWx1ZSgpKTsKLSAgICAgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGN1c3RvbVZhbHVlLT5uYW1lKCk7Ci0gICAgICAgICAg
ICBpZiAoc2VlbkN1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFtZSkpCisgICAgICAgICAgICBh
dXRvJiBuYW1lID0gZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnByb3BlcnR5LnZh
bHVlKCkpLm5hbWUoKTsKKyAgICAgICAgICAgIGlmICghc2VlbkN1c3RvbVByb3BlcnRpZXMuYWRk
KG5hbWUpLmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBzZWVuQ3VzdG9tUHJvcGVydGllcy5hZGQobmFtZSk7CisgICAgICAgICAgICBvdXRwdXRbLS11
bnVzZWRFbnRyaWVzXSA9IHByb3BlcnR5OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC0yNDMsMjkgKzIzMiw2IEBAIENTU1NlbGVjdG9yTGlzdCBDU1NQYXJz
ZXJJbXBsOjpwYXJzZVBhZ2UKICAgICByZXR1cm4gc2VsZWN0b3JMaXN0OwogfQogCi1SZWZQdHI8
SW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBDU1NQYXJzZXJJbXBsOjpwYXJzZUN1c3RvbVByb3Bl
cnR5U2V0KENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UpCi17Ci0gICAgcmFuZ2UuY29uc3VtZVdo
aXRlc3BhY2UoKTsKLSAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBMZWZ0QnJhY2VUb2tl
bikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBibG9j
ayA9IHJhbmdlLmNvbnN1bWVCbG9jaygpOwotICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7
Ci0gICAgaWYgKCFyYW5nZS5hdEVuZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBD
U1NQYXJzZXJJbXBsIHBhcnNlcihzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOwotICAgIHBhcnNl
ci5jb25zdW1lRGVjbGFyYXRpb25MaXN0KGJsb2NrLCBTdHlsZVJ1bGU6OlN0eWxlKTsKLQotICAg
IC8vIEZJWE1FLU5FV1BBUlNFUjogV2UgZG9udCBzdXBwb3J0IEBhcHBseSB5ZXQuCi0gICAgLy8g
RHJvcCBuZXN0ZWQgQGFwcGx5IHJ1bGVzLiBTZWVtcyBuaWNlciB0byBkbyB0aGlzIGhlcmUgaW5z
dGVhZCBvZiBtYWtpbmcKLSAgICAvLyBhIGRpZmZlcmVudCBTdHlsZVJ1bGUgdHlwZQotICAgIC8q
Zm9yIChzaXplX3QgaSA9IHBhcnNlci5tX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpOyBpLS07ICkg
ewotICAgICAgICBpZiAocGFyc2VyLm1fcGFyc2VkUHJvcGVydGllc1tpXS5pZCgpID09IENTU1By
b3BlcnR5QXBwbHlBdFJ1bGUpCi0gICAgICAgICAgICBwYXJzZXIubV9wYXJzZWRQcm9wZXJ0aWVz
LnJlbW92ZShpKTsKLSAgICB9Ki8KLQotICAgIHJldHVybiBjcmVhdGVTdHlsZVByb3BlcnRpZXMo
cGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcywgSFRNTFN0YW5kYXJkTW9kZSk7Ci19Ci0KIHN0ZDo6
dW5pcXVlX3B0cjxWZWN0b3I8ZG91YmxlPj4gQ1NTUGFyc2VySW1wbDo6cGFyc2VLZXlmcmFtZUtl
eUxpc3QoY29uc3QgU3RyaW5nJiBrZXlMaXN0KQogewogICAgIHJldHVybiBjb25zdW1lS2V5ZnJh
bWVLZXlMaXN0KENTU1Rva2VuaXplcjo6U2NvcGUoa2V5TGlzdCkudG9rZW5SYW5nZSgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5oCShyZXZpc2lvbiAy
MDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtODMsMTUgKzgzLDEyIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgc3Rh
dGljIGJvb2wgcGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiwgQ1NTUHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
KTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZVZhcmlhYmxlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVy
dGllcyosIGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmLCBi
b29sIGltcG9ydGFudCwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwogICAgIHN0YXRpYyBSZWY8
SW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwYXJzZUlubGluZVN0eWxlRGVjbGFyYXRpb24oY29u
c3QgU3RyaW5nJiwgRWxlbWVudCopOwogICAgIHN0YXRpYyBib29sIHBhcnNlRGVjbGFyYXRpb25M
aXN0KE11dGFibGVTdHlsZVByb3BlcnRpZXMqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0Jik7CiAgICAgc3RhdGljIFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBwYXJzZVJ1bGUo
Y29uc3QgU3RyaW5nJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIFN0eWxlU2hlZXRDb250ZW50
cyosIEFsbG93ZWRSdWxlc1R5cGUpOwogICAgIHN0YXRpYyB2b2lkIHBhcnNlU3R5bGVTaGVldChj
b25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgU3R5bGVTaGVldENvbnRlbnRz
Kik7CiAgICAgc3RhdGljIENTU1NlbGVjdG9yTGlzdCBwYXJzZVBhZ2VTZWxlY3RvcihDU1NQYXJz
ZXJUb2tlblJhbmdlLCBTdHlsZVNoZWV0Q29udGVudHMqKTsKIAotICAgIHN0YXRpYyBSZWZQdHI8
SW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwYXJzZUN1c3RvbVByb3BlcnR5U2V0KENTU1BhcnNl
clRva2VuUmFuZ2UpOwotCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8ZG91Ymxl
Pj4gcGFyc2VLZXlmcmFtZUtleUxpc3QoY29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIHN1cHBv
cnRzRGVjbGFyYXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NWYXJpYWJsZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NWYXJpYWJsZVBhcnNlci5jcHAJKHJldmlzaW9uIDIwNzkw
MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVmFyaWFibGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIENTU1ZhbHVlSUQgY2xhc3Np
ZnlWYXJpYWJsZVJhbmdlKAogICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAgICAgaWYg
KHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbikgewogICAgICAgICBDU1NWYWx1ZUlE
IGlkID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpOwotICAgICAgICBp
ZiAocmFuZ2UuYXRFbmQoKSAmJiAoaWQgPT0gQ1NTVmFsdWVJbmhlcml0IHx8IGlkID09IENTU1Zh
bHVlSW5pdGlhbCB8fCBpZCA9PSBDU1NWYWx1ZVVuc2V0KSkKKyAgICAgICAgaWYgKHJhbmdlLmF0
RW5kKCkgJiYgKGlkID09IENTU1ZhbHVlSW5oZXJpdCB8fCBpZCA9PSBDU1NWYWx1ZUluaXRpYWwg
fHwgaWQgPT0gQ1NTVmFsdWVVbnNldCB8fCBpZCA9PSBDU1NWYWx1ZVJldmVydCkpCiAgICAgICAg
ICAgICByZXR1cm4gaWQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwMzYsMTAgKzIwMzYsMTAgQEAgdm9pZCBSZW5kZXJTdHlsZTo6Y2hlY2tWYXJpYWJsZXNJbkN1
c3RvbQogICAgIGF1dG8mIGN1c3RvbVByb3BlcnRpZXMgPSByYXJlSW5oZXJpdGVkRGF0YS5hY2Nl
c3MoKS0+bV9jdXN0b21Qcm9wZXJ0aWVzLmFjY2VzcygpLT52YWx1ZXMoKTsKICAgICBIYXNoU2V0
PEF0b21pY1N0cmluZz4gaW52YWxpZFByb3BlcnRpZXM7CiAgICAgZm9yIChhdXRvIGVudHJ5IDog
Y3VzdG9tUHJvcGVydGllcykgewotICAgICAgICBpZiAoIWVudHJ5LnZhbHVlLT5pc1ZhcmlhYmxl
RGVwZW5kZW50VmFsdWUoKSkKKyAgICAgICAgaWYgKCFlbnRyeS52YWx1ZS0+Y29udGFpbnNWYXJp
YWJsZXMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBIYXNoU2V0PEF0b21pY1N0
cmluZz4gc2VlblByb3BlcnRpZXM7Ci0gICAgICAgIGRvd25jYXN0PENTU1ZhcmlhYmxlRGVwZW5k
ZW50VmFsdWU+KCplbnRyeS52YWx1ZSkuY2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMoZW50cnkua2V5
LCBjdXN0b21Qcm9wZXJ0aWVzLCBzZWVuUHJvcGVydGllcywgaW52YWxpZFByb3BlcnRpZXMpOwor
ICAgICAgICBlbnRyeS52YWx1ZS0+Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMoZW50cnkua2V5LCBj
dXN0b21Qcm9wZXJ0aWVzLCBzZWVuUHJvcGVydGllcywgaW52YWxpZFByb3BlcnRpZXMpOwogICAg
IH0KICAgICAKICAgICAvLyBOb3cgaW5zZXJ0IGludmFsaWQgdmFsdWVzLgpAQCAtMjA1MywyMCAr
MjA1MywxNSBAQCB2b2lkIFJlbmRlclN0eWxlOjpjaGVja1ZhcmlhYmxlc0luQ3VzdG9tCiAgICAg
Ly8gaW52YWxpZCB2YWx1ZXMgaWYgdGhleSBmYWlsZWQsIHdlIGNhbiBwZXJmb3JtIHZhcmlhYmxl
IHN1YnN0aXR1dGlvbiBvbiB0aGUgdmFsaWQgdmFsdWVzLgogICAgIFZlY3RvcjxSZWY8Q1NTQ3Vz
dG9tUHJvcGVydHlWYWx1ZT4+IHJlc29sdmVkVmFsdWVzOwogICAgIGZvciAoYXV0byBlbnRyeSA6
IGN1c3RvbVByb3BlcnRpZXMpIHsKLSAgICAgICAgaWYgKCFlbnRyeS52YWx1ZS0+aXNWYXJpYWJs
ZURlcGVuZGVudFZhbHVlKCkpCisgICAgICAgIGlmICghZW50cnkudmFsdWUtPmNvbnRhaW5zVmFy
aWFibGVzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIENTU1Bh
cnNlclZhbHVlTGlzdCBwYXJzZXJMaXN0OwotICAgICAgICBpZiAoIWRvd25jYXN0PENTU1Zhcmlh
YmxlRGVwZW5kZW50VmFsdWU+KCplbnRyeS52YWx1ZSkudmFsdWVMaXN0KCkuYnVpbGRQYXJzZXJW
YWx1ZUxpc3RTdWJzdGl0dXRpbmdWYXJpYWJsZXMoJnBhcnNlckxpc3QsIGN1c3RvbVByb3BlcnRp
ZXMpKQotICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZXMuYXBwZW5kKENTU0N1c3RvbVByb3BlcnR5
VmFsdWU6OmNyZWF0ZShlbnRyeS5rZXksIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZUlu
dmFsaWQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXNvbHZlZFZhbHVlcy5hcHBl
bmQoQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKGVudHJ5LmtleSwgQ1NTVmFsdWVMaXN0
OjpjcmVhdGVGcm9tUGFyc2VyVmFsdWVMaXN0KHBhcnNlckxpc3QpKSk7CisgICAgICAgIGVudHJ5
LnZhbHVlLT5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGN1c3RvbVByb3BlcnRpZXMsIHJlc29s
dmVkVmFsdWVzKTsKICAgICB9CiAgICAgCiAgICAgLy8gV2l0aCBhbGwgcmVzdWx0cyBjb21wdXRl
ZCwgd2UgY2FuIG5vdyBtdXRhdGUgb3VyIHRhYmxlIHRvIGVsaW1pbmF0ZSB0aGUgdmFyaWFibGVz
IGFuZAogICAgIC8vIGhvbGQgdGhlIGZpbmFsIHZhbHVlcy4gVGhpcyB3YXkgd2hlbiB3ZSBpbmhl
cml0LCB3ZSBkb24ndCBlbmQgdXAgcmVzdWJzdGl0dXRpbmcgdmFyaWFibGVzLCBldGMuCiAgICAg
Zm9yIChhdXRvJiByZXNvbHZlZFZhbHVlIDogcmVzb2x2ZWRWYWx1ZXMpCi0gICAgICAgIGN1c3Rv
bVByb3BlcnRpZXMuc2V0KHJlc29sdmVkVmFsdWUtPm5hbWUoKSwgcmVzb2x2ZWRWYWx1ZS0+ZGVw
cmVjYXRlZFZhbHVlKCkpOworICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzLnNldChyZXNvbHZlZFZh
bHVlLT5uYW1lKCksIHJlc29sdmVkVmFsdWUuY29weVJlZigpKTsKIAogICAgIHJhcmVJbmhlcml0
ZWREYXRhLmFjY2VzcygpLT5tX2N1c3RvbVByb3BlcnRpZXMuYWNjZXNzKCktPnNldENvbnRhaW5z
VmFyaWFibGVzKGZhbHNlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDggKzUy
Nyw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFBzZXVkb1N0eWxlQ2FjaGUqIGNhY2hlZFBzZXVk
b1N0eWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkUHNldWRvU3R5bGVzLmdldCgpOyB9CiAK
LSAgICB2b2lkIHNldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBjb25zdCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZSkgeyByYXJlSW5oZXJpdGVkRGF0YS5hY2Nl
c3MoKS0+bV9jdXN0b21Qcm9wZXJ0aWVzLmFjY2VzcygpLT5zZXRDdXN0b21Qcm9wZXJ0eVZhbHVl
KG5hbWUsIHZhbHVlKTsgfQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gZ2V0Q3VzdG9tUHJvcGVydHlW
YWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0
ZWREYXRhLT5tX2N1c3RvbVByb3BlcnRpZXMtPmdldEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSk7
IH0KKyAgICB2b2lkIHNldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBjb25zdCBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4mIHZhbHVlKSB7IHJhcmVJ
bmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2N1c3RvbVByb3BlcnRpZXMuYWNjZXNzKCktPnNldEN1
c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgdmFsdWUpOyB9CisgICAgUmVmUHRyPENTU0N1c3RvbVBy
b3BlcnR5VmFsdWU+IGdldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+bV9jdXN0b21Qcm9wZXJ0aWVz
LT5nZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUpOyB9CiAgICAgYm9vbCBoYXNDdXN0b21Qcm9w
ZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0
ZWREYXRhLT5tX2N1c3RvbVByb3BlcnRpZXMtPmhhc0N1c3RvbVByb3BlcnR5KG5hbWUpOyB9CiAg
ICAgY29uc3QgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9tUHJvcGVydGllcygpIGNvbnN0
IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT5tX2N1c3RvbVByb3BlcnRpZXMtPm1fdmFsdWVz
OyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1c3RvbVBy
b3BlcnR5RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZUN1c3RvbVByb3BlcnR5RGF0YS5oCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2lmbmRlZiBTdHlsZUN1c3RvbVByb3BlcnR5RGF0
YV9oCiAjZGVmaW5lIFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhX2gKIAotI2luY2x1ZGUgIkNTU1Zh
bHVlLmgiCisjaW5jbHVkZSAiQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgpAQCAtNDQsOCArNDQsOCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChtX3ZhbHVl
cy5zaXplKCkgIT0gby5tX3ZhbHVlcy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAotICAgICAgICBmb3IgKFdURjo6S2V5VmFsdWVQYWlyPEF0b21pY1N0cmluZywg
UmVmUHRyPENTU1ZhbHVlPj4gZW50cnkgOiBtX3ZhbHVlcykgewotICAgICAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiBvdGhlciA9IG8ubV92YWx1ZXMuZ2V0KGVudHJ5LmtleSk7CisgICAgICAgIGZv
ciAoV1RGOjpLZXlWYWx1ZVBhaXI8QXRvbWljU3RyaW5nLCBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVy
dHlWYWx1ZT4+IGVudHJ5IDogbV92YWx1ZXMpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlPiBvdGhlciA9IG8ubV92YWx1ZXMuZ2V0KGVudHJ5LmtleSk7CiAgICAg
ICAgICAgICBpZiAoIW90aGVyIHx8ICFlbnRyeS52YWx1ZS0+ZXF1YWxzKCpvdGhlcikpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01NCwxNCArNTQsMTQgQEAg
cHVibGljOgogCiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlQ3VzdG9tUHJvcGVydHlE
YXRhICZvKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG8pOyB9CiAgICAgCi0gICAgdm9pZCBz
ZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgUmVm
UHRyPENTU1ZhbHVlPiYgdmFsdWUpCisgICAgdm9pZCBzZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFs
dWU+JiB2YWx1ZSkKICAgICB7CiAgICAgICAgIG1fdmFsdWVzLnNldChuYW1lLCB2YWx1ZSk7Ci0g
ICAgICAgIGlmICh2YWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkpCisgICAgICAgIGlm
ICh2YWx1ZS0+Y29udGFpbnNWYXJpYWJsZXMoKSkKICAgICAgICAgICAgIG1fY29udGFpbnNWYXJp
YWJsZXMgPSB0cnVlOwogICAgIH0KIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4gZ2V0Q3VzdG9tUHJv
cGVydHlWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLmdldChuYW1lKTsgfQorICAgIFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBnZXRD
dXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXMuZ2V0KG5hbWUpOyB9CiAgICAgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgdmFs
dWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KICAgICAKICAgICBib29sIGhhc0N1c3RvbVByb3Bl
cnR5KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuY29u
dGFpbnMobmFtZSk7IH0K
</data>
<flag name="review"
          id="316001"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293062</attachid>
            <date>2016-10-27 14:46:03 -0700</date>
            <delta_ts>2016-10-27 14:50:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>61797</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODAwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyOCBAQAorMjAxNi0xMC0yNyAgRGF2ZSBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBbQ1NTIFBhcnNlcl0gSW1wbGVtZW50
IENTUyB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDA3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAgdG8g
dGhlIHByb2plY3QuCisKKyAgICAgICAgKiBjc3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y2hlY2tW
YXJpYWJsZXNGb3JDeWNsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyk6CisgICAgICAgICogY3NzL0NTU0N1c3Rv
bVByb3BlcnR5VmFsdWUuaDoKKyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFic3RyYWN0IHRoZSBv
bGQgYW5kIG5ldyBpbXBsZW1lbnRhdGlvbnMgb2YgQ1NTCisgICAgICAgIHZhcmlhYmxlcyBzbyB0
aGF0IHRoZSBjYWxsZXJzIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgaXQuCisKKyAgICAgICAg
KiBjc3MvQ1NTVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6OmVxdWFscyk6
CisgICAgICAgIE1ha2Ugc3VyZSBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlIGFuZCBDU1NQZW5k
aW5nU3Vic3RpdHV0aW9uVmFsdWUKKyAgICAgICAgaGF2ZSBlcXVhbHMgaW1wbGVtZW50ZWQuCisK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjppc0ludmFsaWRDdXN0b21Qcm9wZXJ0eVZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgVGhpcyBjb2RlIHdhcyBkZWFkIGFuZCBuZXZlciBjYWxsZWQu
CisKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVl
Ojppc0N1c3RvbVByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6Omhh
c1ZhcmlhYmxlUmVmZXJlbmNlcyk6CisgICAgICAgIEFkZCBhIGhlbHBlciBmdW5jdGlvbiBmb3Ig
YXNraW5nIGlmIGEgQ1NTVmFsdWUgaGFzIHZhcmlhYmxlIHJlZmVyZW5jZXMuCisgICAgICAgIFRo
aXMgYWJzdHJhY3RzIHRoZSBvbGQgYW5kIG5ldyBpbXBsZW1lbnRhdGlvbnMgc28gdGhhdCBjYWxs
ZXJzIGNhbgorICAgICAgICBhc2sgaWYgdGhlIHZhbHVlIGhhcyB2YXJpYWJsZXMgd2l0aG91dCBj
YXJpbmcgd2hpY2ggaW1wbGVtZW50YXRpb24gaXMKKyAgICAgICAgYmVpbmcgdXNlZC4KKworICAg
ICAgICAqIGNzcy9DU1NWYWx1ZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVM
aXN0OjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlz
dC5oOgorICAgICAgICBJbiBvcmRlciB0byBhYnN0cmFjdCB0aGUgb2xkIGFuZCBuZXcgdmFyaWFi
bGVzIGltcGxlbWVudGF0aW9ucywgY3VzdG9tCisgICAgICAgIHByb3BlcnRpZXMgbm93IHN0b3Jl
IENTU0N1c3RvbVByb3BlcnR5VmFsdWUgYXMgdGhlaXIgdmFsdWVzIGluc3RlYWQgb2YKKyAgICAg
ICAgcmF3IHZhbHVlcy4gVGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBiZSBwYXRjaGVk
IHRvIGRlYWwgd2l0aCB0aGlzCisgICAgICAgIHdyYXBwZXIgYmVpbmcgcHJlc2VudCBub3cuCisK
KyAgICAgICAgKiBjc3MvQ1NTVmFyaWFibGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1ZhcmlhYmxlRGF0YTo6Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVmFyaWFibGVEYXRhOjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlc1dpdGhSYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NWYXJpYWJsZURhdGE6OnJlc29sdmVWYXJpYWJsZUZhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxlRGF0YTo6cmVzb2x2ZVZhcmlhYmxlUmVm
ZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxlRGF0YTo6cmVzb2x2ZVZhcmlh
YmxlUmVmZXJlbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYXJpYWJsZURhdGE6OnJlc29s
dmVUb2tlblJhbmdlKToKKyAgICAgICAgKiBjc3MvQ1NTVmFyaWFibGVEYXRhLmg6CisgICAgICAg
IEltcGxlbWVudGF0aW9uIG9mIGN5Y2xlIGNoZWNraW5nIGFuZCB2YXJpYWJsZSByZXNvbHV0aW9u
LiBUaGUgbG9naWMgb2YKKyAgICAgICAgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgc2FtZSBh
cyB0aGUgb2xkLiBJdCB3YWxrcyBDU1NQYXJzZXJUb2tlbnMKKyAgICAgICAgaW5zdGVhZCBvZiB0
aGUgb2xkIENTU1BhcnNlciBzdHJ1Y3R1cmVzLgorCisgICAgICAgICogY3NzL0NTU1ZhcmlhYmxl
UmVmZXJlbmNlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFyaWFibGVSZWZlcmVu
Y2VWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCk6CisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBzZXJpYWxp
emF0aW9uIGNhY2hpbmcsIGp1c3QgbGlrZSB0aGUgb2xkIGltcGxlbWVudGF0aW9uCisgICAgICAg
IGhhZCBpbiBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlLgorCisgICAgICAgIChXZWJDb3JlOjpD
U1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlOjpjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyk6CisgICAg
ICAgICogY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuaDoKKyAgICAgICAgQWRkIGN5Y2xl
IGNoZWNraW5nIGFuZCB2YXJpYWJsZSByZXNvbHV0aW9uIGhlbHBlciBmdW5jdGlvbnMuCisKKyAg
ICAgICAgKiBjc3MvQ1NTVmFyaWFibGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NW
YXJpYWJsZVZhbHVlOjpidWlsZFBhcnNlclZhbHVlTGlzdFN1YnN0aXR1dGluZ1ZhcmlhYmxlcyk6
CisgICAgICAgIFBhdGNoZWQgdG8gYWNjb3VudCBmb3IgdGhlIGNoYW5nZSBpbiBzdG9yYWdlIG9m
IGN1c3RvbSBwcm9wZXJ0aWVzIHRvCisgICAgICAgIGhhdmUgY3VzdG9tIHByb3BlcnR5IHZhbHVl
IHdyYXBwZXJzLgorCisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydGllcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6OmdldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpib3JkZXJTcGFjaW5nVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpnZXRTaG9ydGhhbmRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6OmdldENvbW1vblZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUHJvcGVydGllczo6Z2V0UHJvcGVydHlDU1NWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXM6OmFzVGV4dCk6CisgICAgICAgIENsZWFuIHVwIHRo
ZSByZXNvbHV0aW9uIG9mIHBlbmRpbmcgc3Vic3RpdHV0aW9uIHZhbHVlcy4gSW5zdGVhZCBvZiBo
YWNraW5nCisgICAgICAgIGl0IGludG8gZXZlcnkgcG9zc2libGUgU3R5bGVTaG9ydGhhbmRQcm9w
ZXJ0eSBjcmF3bGluZyBmdW5jdGlvbiwgb2J0YWluCisgICAgICAgIHRoZSBzaG9ydGhhbmQgZm9y
IHRoZSBwcm9wZXJ0eSB1cCBmcm9udCwgYWNjZXNzIHRoZSBmaXJzdCBsb25naGFuZCwgYW5kCisg
ICAgICAgIGlmIHdlIHNlZSBhIHBlbmRpbmcgc3Vic3RpdHV0aW9uIHZhbHVlLCBwZXJmb3JtIHRo
ZSBzdWJzdGl0dXRpb24uCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6YWRkTWF0Y2hlZFByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlZFZhcmlhYmxlVmFsdWUp
OgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciB0aGUgbmV3IGltcGxlbWVudGF0aW9uIGluIGFsbCB0aGUgc2FtZSBwbGFjZXMgYXMgdGhlIG9s
ZC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VJbmxpbmVTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUpOiBE
ZWxldGVkLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6CisgICAgICAgIFJlbmFt
ZSBwYXJzZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUgdG8gcGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJl
ZmVyZW5jZXMsCisgICAgICAgIHNpbmNlIGl0IGlzIG9wZXJhdGluZyBvbiB0aHJlZSBkaXN0aW5j
dCB2YWx1ZSB0eXBlcyBub3cuIFR1cm4gb24gbmV3CisgICAgICAgIHBhcnNlciBzdXBwb3J0IGZv
ciBwYXJzZUlubGluZVN0eWxlRGVjbGFyYXRpb24uCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1BhcnNlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJJbXBsOjpwYXJzZVZhcmlhYmxlVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VySW1wbDo6cGFyc2VDdXN0b21Qcm9wZXJ0
eVNldCk6IERlbGV0ZWQuCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmg6Cisg
ICAgICAgIFJlbW92ZSBwYXJzZXIgZnVuY3Rpb25zIHRoYXQgYXJlbid0IHJlbGV2YW50IHRvIG91
ciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBvZiBDU1MgdmFyaWFibGVzLgorCisgICAgICAgICog
Y3NzL3BhcnNlci9DU1NWYXJpYWJsZVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjbGFz
c2lmeVZhcmlhYmxlUmFuZ2UpOgorICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIENTUzQgJ3Jl
dmVydCcga2V5d29yZCB0byB0aGUgbmV3IHZhcmlhYmxlIHBhcnNlci4KKworICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6Y2hlY2tWYXJpYWJsZXNJbkN1c3RvbVByb3BlcnRpZXMpOgorICAgICAgICBNb2RpZmll
ZCB0byBzdG9yZSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlcyBhcyB0aGUgdmFsdWVzIGFsd2F5cyBu
b3cgYW5kCisgICAgICAgIHRvIHVzZSB0aGUgbWV0aG9kIGFic3RyYWN0aW9ucyBvbiBDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlIHRvIHJlc29sdmUKKyAgICAgICAgY3ljbGVzIGFuZCBwZXJmb3JtIHN1
YnN0aXR1dGlvbnMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpnZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhOjpzZXRDdXN0b21Qcm9wZXJ0
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhOjpnZXRD
dXN0b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgVGlnaHRlbiB1cCB0aGUgbWFwIHRvIHN0b3Jl
IENTU0N1c3RvbVByb3BlcnR5VmFsdWUgaW5zdGVhZCBvZiBqdXN0CisgICAgICAgIENTU1ZhbHVl
LgorCiAyMDE2LTEwLTI3ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBCdWZmZXJTb3VyY2Ugc2hvdWxkIGJlaGF2ZSBhcyBhbiB1bmlvbgpJbmRleDogU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjY5LDYgKzEyNjksNyBAQCBzZXQoV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcAogICAgIGNzcy9DU1NDdXJz
b3JJbWFnZVZhbHVlLmNwcAogICAgIGNzcy9DU1NDdXN0b21JZGVudFZhbHVlLmNwcAorICAgIGNz
cy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcAogICAgIGNzcy9DU1NEZWZhdWx0U3R5bGVTaGVl
dHMuY3BwCiAgICAgY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCiAgICAgY3NzL0ZvbnRGYWNl
U2V0LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIyLDkgKzM0
MjIsOSBAQAogCQk5NDQ0Q0JFMzFEODg2MTk4MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDQ0
Q0JFMjFEODg2MTU4MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1ZS5jcHAgKi87IH07CiAJ
CTk0NDRDQkU0MUQ4ODYxOTkwMDczQTA3NCAvKiBDU1NDdXN0b21JZGVudFZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDQ0Q0JFMTFEODg2MTU4
MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1ZS5oICovOyB9OwogCQk5NDQ0Q0JFNzFEODg2
MUMyMDA3M0EwNzQgLyogQ1NTVmFyaWFibGVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NDRDQkRFMUQ4ODYxNTgwMDczQTA3NCAvKiBDU1NW
YXJpYWJsZURhdGEuY3BwICovOyB9OwotCQk5NDQ0Q0JFODFEODg2MUMyMDA3M0EwNzQgLyogQ1NT
VmFyaWFibGVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NDQ0Q0JERDFEODg2MTU4MDA3M0EwNzQgLyogQ1NTVmFyaWFibGVEYXRhLmggKi87IH07
CisJCTk0NDRDQkU4MUQ4ODYxQzIwMDczQTA3NCAvKiBDU1NWYXJpYWJsZURhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NDRDQkREMUQ4ODYxNTgw
MDczQTA3NCAvKiBDU1NWYXJpYWJsZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk5NDQ0Q0JFOTFEODg2MUNBMDA3M0EwNzQgLyogQ1NTVmFy
aWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NDQ0Q0JEQzFEODg2MTU4MDA3M0EwNzQgLyogQ1NTVmFyaWFibGVSZWZl
cmVuY2VWYWx1ZS5jcHAgKi87IH07Ci0JCTk0NDRDQkVBMUQ4ODYxQ0EwMDczQTA3NCAvKiBDU1NW
YXJpYWJsZVJlZmVyZW5jZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NDQ0Q0JEQjFEODg2MTU4MDA3M0EwNzQgLyogQ1NTVmFyaWFibGVSZWZl
cmVuY2VWYWx1ZS5oICovOyB9OworCQk5NDQ0Q0JFQTFEODg2MUNBMDA3M0EwNzQgLyogQ1NTVmFy
aWFibGVSZWZlcmVuY2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTQ0NENCREIxRDg4NjE1ODAwNzNBMDc0IC8qIENTU1ZhcmlhYmxlUmVmZXJl
bmNlVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk5NDZEMzcyRDFENkNCMjk0MDA3NzA4NEYgLyogQ1NTUGFyc2VyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzI4MUQ2Q0IyOEIwMDc3
MDg0RiAvKiBDU1NQYXJzZXIuY3BwICovOyB9OwogCQk5NDZEMzcyRTFENkNCMjk0MDA3NzA4NEYg
LyogQ1NTUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NDZEMzcyOTFENkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFyc2VyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTQ2RDM3MkYxRDZDQjI5NDAw
NzcwODRGIC8qIENTU1BhcnNlck1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk0NkQzNzJBMUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXJNb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM0
NDMsNyArMzQ0Myw3IEBACiAJCTk0NkQzNzQ5MUQ2RDA2MjgwMDc3MDg0RiAvKiBDU1NNYXJrdXAu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3
NDcxRDZEMDYwQzAwNzcwODRGIC8qIENTU01hcmt1cC5jcHAgKi87IH07CiAJCTk0NkQzNzRBMUQ2
RDA2MjgwMDc3MDg0RiAvKiBDU1NNYXJrdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzQ4MUQ2RDA2MEMwMDc3MDg0RiAvKiBDU1NNYXJrdXAu
aCAqLzsgfTsKIAkJOTQ2RDM3NEQxRDZEMDhBNjAwNzcwODRGIC8qIENTU1BhcnNlclRva2VuUmFu
Z2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2
RDM3NEIxRDZEMDdGNTAwNzcwODRGIC8qIENTU1BhcnNlclRva2VuUmFuZ2UuY3BwICovOyB9Owot
CQk5NDZEMzc0RTFENkQwOEFBMDA3NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW5SYW5nZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3NEMxRDZEMDdG
NTAwNzcwODRGIC8qIENTU1BhcnNlclRva2VuUmFuZ2UuaCAqLzsgfTsKKwkJOTQ2RDM3NEUxRDZE
MDhBQTAwNzcwODRGIC8qIENTU1BhcnNlclRva2VuUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzRDMUQ2RDA3RjUwMDc3MDg0RiAvKiBD
U1NQYXJzZXJUb2tlblJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTQ5M0I2QkUxRDc0QjQxMjAwODhFNzgwIC8qIE1lZGlhUXVlcnlCbG9j
a1dhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTQ5M0I2QjYxRDc0QjM5NTAwODhFNzgwIC8qIE1lZGlhUXVlcnlCbG9ja1dhdGNoZXIuY3Bw
ICovOyB9OwogCQk5NDkzQjZCRjFENzRCNDEyMDA4OEU3ODAgLyogTWVkaWFRdWVyeUJsb2NrV2F0
Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ5
M0I2QjcxRDc0QjM5NTAwODhFNzgwIC8qIE1lZGlhUXVlcnlCbG9ja1dhdGNoZXIuaCAqLzsgfTsK
IAkJOTQ5M0I2QzAxRDc0QjQxMjAwODhFNzgwIC8qIE1lZGlhUXVlcnlQYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ5M0I2QjgxRDc0QjM5
NTAwODhFNzgwIC8qIE1lZGlhUXVlcnlQYXJzZXIuY3BwICovOyB9OwpAQCAtMzQ1NSw2ICszNDU1
LDcgQEAKIAkJOTQ5Qzc3MDgxRDZFNDk4NzAwQzBERTRGIC8qIENTU1BhcnNlck9ic2VydmVyV3Jh
cHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NDlDNzcwNjFENkU0OEVEMDBDMERFNEYgLyogQ1NTUGFyc2VyT2JzZXJ2ZXJXcmFwcGVyLmNwcCAq
LzsgfTsKIAkJOTQ5Qzc3MDkxRDZFNDk4NzAwQzBERTRGIC8qIENTU1BhcnNlck9ic2VydmVyV3Jh
cHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ5
Qzc3MDcxRDZFNDhFRDAwQzBERTRGIC8qIENTU1BhcnNlck9ic2VydmVyV3JhcHBlci5oICovOyB9
OwogCQk5NDlDNzcwQjFENkU0OUVEMDBDMERFNEYgLyogQ1NTUGFyc2VyT2JzZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0OUM3NzBBMUQ2RTQ5
QzMwMEMwREU0RiAvKiBDU1NQYXJzZXJPYnNlcnZlci5oICovOyB9OworCQk5NEQ0QUM2MjFEQzI0
QzhFMDA4MEYwMkQgLyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NEQ0QUM2MTFEQzI0QzgxMDA4MEYwMkQg
LyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAgKi87IH07CiAJCTk0REU1QzdFMUQ3OENCMkUw
MDE2NEYyQSAvKiBDU1NQYXJzZXJJZGlvbXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTRERTVDN0QxRDc4Q0IyNTAwMTY0RjJBIC8qIENTU1BhcnNl
cklkaW9tcy5jcHAgKi87IH07CiAJCTk0REU1QzgxMUQ3RjNBMTQwMDE2NEYyQSAvKiBDU1NBdFJ1
bGVJRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NERFNUM3RjFEN0YzOUQwMDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuY3BwICovOyB9OwogCQk5NERF
NUM4MjFEN0YzQTE0MDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0REU1QzgwMUQ3RjM5RDAwMDE2NEYyQSAvKiBD
U1NBdFJ1bGVJRC5oICovOyB9OwpAQCAtNTA4NCw3ICs1MDg1LDcgQEAKIAkJQkMxMjhCMDExMzdD
OEQ0NjAwQ0FDODQ1IC8qIFJlbmRlckdyaWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMjhCMDAxMzdDOEQ0NjAwQ0FDODQ1IC8qIFJlbmRlckdy
aWQuY3BwICovOyB9OwogCQlCQzE0MDI4QTBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhl
bWVDb21wb3NpdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkMxNDAyODgwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRl
LmNwcCAqLzsgfTsKIAkJQkMxNDAyOEIwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1l
Q29tcG9zaXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzE0MDI4OTBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQzE3OTBC
QjFCQjVBQjNGMDAwNkQxM0UgLyogQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxNzkwQkExQkI1QUIzRjAw
MDZEMTNFIC8qIENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUuaCAqLzsgfTsKKwkJQkMxNzkwQkIx
QkI1QUIzRjAwMDZEMTNFIC8qIENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTc5MEJBMUJCNUFCM0YwMDA2
RDEzRSAvKiBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxNzkwQkQxQkJCMzZBODAwMDZEMTNFIC8q
IENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxNzkwQkMxQkJCMzZBODAwMDZEMTNFIC8qIENTU1Zhcmlh
YmxlRGVwZW5kZW50VmFsdWUuY3BwICovOyB9OwogCQlCQzE3OTBDMDFCQkYyQzQzMDAwNkQxM0Ug
LyogQ1NTVmFyaWFibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzE3OTBCRTFCQkYyQzQzMDAwNkQxM0UgLyogQ1NTVmFyaWFibGVWYWx1
ZS5jcHAgKi87IH07CiAJCUJDMTc5MEMxMUJCRjJDNDMwMDA2RDEzRSAvKiBDU1NWYXJpYWJsZVZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE3
OTBCRjFCQkYyQzQzMDAwNkQxM0UgLyogQ1NTVmFyaWFibGVWYWx1ZS5oICovOyB9OwpAQCAtMTA4
NDQsNiArMTA4NDUsNyBAQAogCQk5NDlDNzcwNjFENkU0OEVEMDBDMERFNEYgLyogQ1NTUGFyc2Vy
T2JzZXJ2ZXJXcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IENTU1BhcnNlck9ic2VydmVyV3JhcHBlci5jcHA7IHBhdGggPSBwYXJzZXIvQ1NTUGFyc2VyT2Jz
ZXJ2ZXJXcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTQ5Qzc3MDcx
RDZFNDhFRDAwQzBERTRGIC8qIENTU1BhcnNlck9ic2VydmVyV3JhcHBlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBDU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIuaDsgcGF0aCA9
IHBhcnNlci9DU1NQYXJzZXJPYnNlcnZlcldyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTQ5Qzc3MEExRDZFNDlDMzAwQzBERTRGIC8qIENTU1BhcnNlck9ic2VydmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENTU1BhcnNlck9ic2VydmVyLmg7IHBh
dGggPSBwYXJzZXIvQ1NTUGFyc2VyT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTRENEFDNjExREMyNEM4MTAwODBGMDJEIC8qIENTU0N1c3RvbVByb3BlcnR5VmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ3VzdG9tUHJvcGVy
dHlWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk0REU1QzdEMUQ3OENC
MjUwMDE2NEYyQSAvKiBDU1NQYXJzZXJJZGlvbXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQ1NTUGFyc2VySWRpb21zLmNwcDsgcGF0aCA9IHBhcnNlci9DU1NQYXJz
ZXJJZGlvbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NERFNUM3RjFEN0Yz
OUQwMDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQ1NTQXRSdWxlSUQuY3BwOyBwYXRoID0gcGFyc2VyL0NTU0F0UnVsZUlELmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTRERTVDODAxRDdGMzlEMDAwMTY0RjJB
IC8qIENTU0F0UnVsZUlELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENTU0F0
UnVsZUlELmg7IHBhdGggPSBwYXJzZXIvQ1NTQXRSdWxlSUQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTIyODU5LDYgKzIyODYxLDcgQEAKIAkJCQlBQTA5NzhFRTBBQkFBNkUxMDA4
NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovLAogCQkJCTk0NDRDQkUyMUQ4ODYxNTgw
MDczQTA3NCAvKiBDU1NDdXN0b21JZGVudFZhbHVlLmNwcCAqLywKIAkJCQk5NDQ0Q0JFMTFEODg2
MTU4MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1ZS5oICovLAorCQkJCTk0RDRBQzYxMURD
MjRDODEwMDgwRjAyRCAvKiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmNwcCAqLywKIAkJCQlCQzc3
OUUxMzFCQjIxNUJCMDBDQUE4QkYgLyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oICovLAogCQkJ
CTRBOUNDODE1MTZCQjlBQzYwMEVDNjQ1QSAvKiBDU1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwICov
LAogCQkJCTRBOUNDODE2MTZCQjlBQzYwMEVDNjQ1QSAvKiBDU1NEZWZhdWx0U3R5bGVTaGVldHMu
aCAqLywKQEAgLTI5NjU3LDYgKzI5NjYwLDcgQEAKIAkJCQlCMkZBM0Q1QTBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdDbGlwUGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNE
NUMwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjJGQTNENUUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTRENEFDNjIxREMyNEM4RTAwODBGMDJE
IC8qIENTU0N1c3RvbVByb3BlcnR5VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNE
NjAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQ3Vyc29yRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMkZBM0Q2MjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdEZWZzRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q2NDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdEZXNj
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU0N1c3RvbVByb3BlcnR5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0N1c3RvbVByb3BlcnR5VmFsdWUuaCIK
KworI2luY2x1ZGUgIkNTU1BhcnNlclZhbHVlcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9w
ZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0
b21pY1N0cmluZz4mIGludmFsaWRQcm9wZXJ0aWVzKSBjb25zdAoreworICAgIEFTU0VSVChjb250
YWluc1ZhcmlhYmxlcygpKTsKKyAgICBpZiAobV9kZXByZWNhdGVkVmFsdWUgJiYgbV9kZXByZWNh
dGVkVmFsdWUtPmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKQorICAgICAgICByZXR1cm4gZG93
bmNhc3Q8Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4oKm1fZGVwcmVjYXRlZFZhbHVlKS5jaGVj
a1ZhcmlhYmxlc0ZvckN5Y2xlcyhuYW1lLCBjdXN0b21Qcm9wZXJ0aWVzLCBzZWVuUHJvcGVydGll
cywgaW52YWxpZFByb3BlcnRpZXMpOworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICByZXR1cm4g
bV92YWx1ZS0+Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMobmFtZSwgY3VzdG9tUHJvcGVydGllcywg
c2VlblByb3BlcnRpZXMsIGludmFsaWRQcm9wZXJ0aWVzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpyZXNvbHZlVmFyaWFibGVSZWZlcmVuY2Vz
KGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmIGN1c3RvbVByb3BlcnRpZXMsIFZlY3RvcjxS
ZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4+JiByZXNvbHZlZFZhbHVlcykgY29uc3QKK3sKKyAg
ICBBU1NFUlQoY29udGFpbnNWYXJpYWJsZXMoKSk7CisgICAgaWYgKG1fZGVwcmVjYXRlZFZhbHVl
ICYmIG1fZGVwcmVjYXRlZFZhbHVlLT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSkgeworICAg
ICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QgcGFyc2VyTGlzdDsKKyAgICAgICAgaWYgKCFkb3duY2Fz
dDxDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlPigqbV9kZXByZWNhdGVkVmFsdWUpLnZhbHVlTGlz
dCgpLmJ1aWxkUGFyc2VyVmFsdWVMaXN0U3Vic3RpdHV0aW5nVmFyaWFibGVzKCZwYXJzZXJMaXN0
LCBjdXN0b21Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgIHJlc29sdmVkVmFsdWVzLmFwcGVuZChD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUobV9uYW1lLCBDU1NDdXN0b21Qcm9wZXJ0eVZh
bHVlOjpjcmVhdGVJbnZhbGlkKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzb2x2
ZWRWYWx1ZXMuYXBwZW5kKENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShtX25hbWUsIENT
U1ZhbHVlTGlzdDo6Y3JlYXRlRnJvbVBhcnNlclZhbHVlTGlzdChwYXJzZXJMaXN0KSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghbV92YWx1ZSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIEFTU0VSVChtX3ZhbHVlLT5uZWVkc1ZhcmlhYmxlUmVzb2x1dGlvbigp
KTsKKyAgICBSZWZQdHI8Q1NTVmFyaWFibGVEYXRhPiByZXNvbHZlZERhdGEgPSBtX3ZhbHVlLT5y
ZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGN1c3RvbVByb3BlcnRpZXMpOworICAgIGlmIChyZXNv
bHZlZERhdGEpCisgICAgICAgIHJlc29sdmVkVmFsdWVzLmFwcGVuZChDU1NDdXN0b21Qcm9wZXJ0
eVZhbHVlOjpjcmVhdGVXaXRoVmFyaWFibGVEYXRhKG1fbmFtZSwgcmVzb2x2ZWREYXRhLnJlbGVh
c2VOb25OdWxsKCkpKTsKKyAgICBlbHNlCisgICAgICAgIHJlc29sdmVkVmFsdWVzLmFwcGVuZChD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUobV9uYW1lLCBDU1NDdXN0b21Qcm9wZXJ0eVZh
bHVlOjpjcmVhdGVJbnZhbGlkKCkpKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0N1c3RvbVByb3BlcnR5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDU1NWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1Zhcmlh
YmxlRGF0YS5oIgorI2luY2x1ZGUgIkNTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUuaCIKICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAg
LTczLDEzICs3NCwxNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICAKLSAgICAvLyBGSVhNRTogU2hvdWxkIGFy
Z3VhYmx5IGltcGxlbWVudCBlcXVhbHMgb24gb3VyIGludGVybmFsIHZhbHVlcywgYnV0IHNlcmlh
bGl6YXRpb24gdG8gY29tcGFyZSBpcyBwcm9iYWJseSBmaW5lLgotICAgIGJvb2wgZXF1YWxzKGNv
bnN0IENTU0N1c3RvbVByb3BlcnR5VmFsdWUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX25hbWUg
PT0gb3RoZXIubV9uYW1lICYmIGN1c3RvbUNTU1RleHQoKSA9PSBvdGhlci5jdXN0b21DU1NUZXh0
KCk7IH0KKyAgICBib29sIGVxdWFscyhjb25zdCBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlJiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV9uYW1lID09IG90aGVyLm1fbmFtZSAmJiBtX2RlcHJlY2F0ZWRW
YWx1ZSA9PSBvdGhlci5tX2RlcHJlY2F0ZWRWYWx1ZSAmJiBtX3ZhbHVlID09IG90aGVyLm1fdmFs
dWUgJiYgbV92YWx1ZUlkID09IG90aGVyLm1fdmFsdWVJZDsgfQogCi0gICAgYm9vbCBpc0ludmFs
aWQoKSBjb25zdCB7IHJldHVybiAhbV92YWx1ZTsgfQogICAgIGJvb2wgY29udGFpbnNWYXJpYWJs
ZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zVmFyaWFibGVzOyB9CisgICAgYm9vbCBjaGVj
a1ZhcmlhYmxlc0ZvckN5Y2xlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEN1c3RvbVByb3Bl
cnR5VmFsdWVNYXAmLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5Qcm9wZXJ0aWVzLCBIYXNo
U2V0PEF0b21pY1N0cmluZz4mIGludmFsaWRQcm9wZXJ0aWVzKSBjb25zdDsKKworICAgIHZvaWQg
cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiwg
VmVjdG9yPFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPj4mKSBjb25zdDsKIAogICAgIGNvbnN0
IFJlZlB0cjxDU1NWYWx1ZT4gZGVwcmVjYXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9kZXBy
ZWNhdGVkVmFsdWUuZ2V0KCk7IH0KKyAgICAKKyAgICBDU1NWYWx1ZUlEIHZhbHVlSUQoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlSWQ7IH0KKyAgICBDU1NWYXJpYWJsZURhdGEqIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIENTU0N1c3RvbVBy
b3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBSZWY8Q1NTVmFsdWU+JiYgdmFs
dWUpCkBAIC04Nyw3ICs5Miw2IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9uYW1lKG5hbWUpCiAg
ICAgICAgICwgbV9kZXByZWNhdGVkVmFsdWUoV1RGTW92ZSh2YWx1ZSkpCiAgICAgICAgICwgbV9j
b250YWluc1ZhcmlhYmxlcyhtX2RlcHJlY2F0ZWRWYWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZh
bHVlKCkpCi0gICAgICAgICwgbV9zZXJpYWxpemVkKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAg
CkBAIC0xMjQsNyArMTI4LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBtdXRhYmxlIFN0cmluZyBt
X3N0cmluZ1ZhbHVlOwogICAgIGJvb2wgbV9jb250YWluc1ZhcmlhYmxlcyB7IGZhbHNlIH07Ci0g
ICAgbXV0YWJsZSBib29sIG1fc2VyaWFsaXplZDsKKyAgICBtdXRhYmxlIGJvb2wgbV9zZXJpYWxp
emVkIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ZhbHVlLmNwcAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0NSwxMCBAQCBib29sIENT
U1ZhbHVlOjplcXVhbHMoY29uc3QgQ1NTVmFsdWUmIG90CiAgICAgICAgICAgICByZXR1cm4gY29t
cGFyZUNTU1ZhbHVlczxDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWU+KCp0aGlzLCBvdGhlcik7
CiAgICAgICAgIGNhc2UgQ3VzdG9tUHJvcGVydHlDbGFzczoKICAgICAgICAgICAgIHJldHVybiBj
b21wYXJlQ1NTVmFsdWVzPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KCp0aGlzLCBvdGhlcik7Cisg
ICAgICAgIGNhc2UgVmFyaWFibGVSZWZlcmVuY2VDbGFzczoKKyAgICAgICAgICAgIHJldHVybiBj
b21wYXJlQ1NTVmFsdWVzPENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU+KCp0aGlzLCBvdGhlcik7
CisgICAgICAgIGNhc2UgUGVuZGluZ1N1YnN0aXR1dGlvblZhbHVlQ2xhc3M6CisgICAgICAgICAg
ICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlczxDU1NQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWU+KCp0
aGlzLCBvdGhlcik7CiAgICAgICAgIGNhc2UgVmFyaWFibGVEZXBlbmRlbnRDbGFzczoKICAgICAg
ICAgICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVzPENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWU+
KCp0aGlzLCBvdGhlcik7CiAgICAgICAgIGNhc2UgVmFyaWFibGVDbGFzczoKQEAgLTU1MiwxMSAr
NTU2LDYgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NWYWx1ZTo6Y2xvbmVGb3JDU1NPTQogICAgIH0K
IH0KIAotYm9vbCBDU1NWYWx1ZTo6aXNJbnZhbGlkQ3VzdG9tUHJvcGVydHlWYWx1ZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGlzQ3VzdG9tUHJvcGVydHlWYWx1ZSgpICYmIGRvd25jYXN0PENTU0N1
c3RvbVByb3BlcnR5VmFsdWU+KCp0aGlzKS5pc0ludmFsaWQoKTsKLX0KLQogYm9vbCBDU1NWYWx1
ZTo6dHJlYXRBc0luaGVyaXRlZFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkgY29uc3QK
IHsKICAgICByZXR1cm4gY2xhc3NUeXBlKCkgPT0gSW5oZXJpdGVkQ2xhc3MgfHwgKGNsYXNzVHlw
ZSgpID09IFVuc2V0Q2xhc3MgJiYgQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkocHJv
cGVydHlJRCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgJKHJldmlzaW9uIDIwNzkwMykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZTsKIGNsYXNzIENhY2hlZFJlc291cmNlOwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwog
CkBAIC03OCw3ICs3OSw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ3Jvc3NmYWRlVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2NsYXNzVHlwZSA9PSBDcm9zc2ZhZGVDbGFzczsgfQogICAgIGJvb2wg
aXNDdXJzb3JJbWFnZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1R5cGUgPT0gQ3Vyc29y
SW1hZ2VDbGFzczsgfQogICAgIGJvb2wgaXNDdXN0b21Qcm9wZXJ0eVZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGFzc1R5cGUgPT0gQ3VzdG9tUHJvcGVydHlDbGFzczsgfQotICAgIGJvb2wgaXNJ
bnZhbGlkQ3VzdG9tUHJvcGVydHlWYWx1ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNWYXJpYWJsZURl
cGVuZGVudFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1R5cGUgPT0gVmFyaWFibGVEZXBl
bmRlbnRDbGFzczsgfQogICAgIGJvb2wgaXNWYXJpYWJsZVZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV9jbGFzc1R5cGUgPT0gVmFyaWFibGVDbGFzczsgfQogICAgIGJvb2wgaXNGdW5jdGlvblZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1R5cGUgPT0gRnVuY3Rpb25DbGFzczsgfQpAQCAtMTI5
LDYgKzEyOSw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ3VzdG9tSWRlbnRWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY2xhc3NUeXBlID09IEN1c3RvbUlkZW50Q2xhc3M7IH0KICAgICBib29sIGlz
VmFyaWFibGVSZWZlcmVuY2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NUeXBlID09IFZh
cmlhYmxlUmVmZXJlbmNlQ2xhc3M7IH0KICAgICBib29sIGlzUGVuZGluZ1N1YnN0aXR1dGlvblZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1R5cGUgPT0gUGVuZGluZ1N1YnN0aXR1dGlvblZh
bHVlQ2xhc3M7IH0KKyAgICAKKyAgICBib29sIGhhc1ZhcmlhYmxlUmVmZXJlbmNlcygpIGNvbnN0
IHsgcmV0dXJuIGlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpIHx8IGlzVmFyaWFibGVSZWZlcmVu
Y2VWYWx1ZSgpIHx8IGlzUGVuZGluZ1N1YnN0aXR1dGlvblZhbHVlKCk7IH0KIAogICAgIGJvb2wg
aXNDU1NPTVNhZmUoKSBjb25zdCB7IHJldHVybiBtX2lzQ1NTT01TYWZlOyB9CiAgICAgYm9vbCBp
c1N1YnR5cGVFeHBvc2VkVG9DU1NPTSgpIGNvbnN0CkBAIC0zMDAsNyArMzAyLDcgQEAgaW5saW5l
IGJvb2wgY29tcGFyZUNTU1ZhbHVlKGNvbnN0IFJlZjxDUwogICAgIHJldHVybiBmaXJzdC5nZXQo
KS5lcXVhbHMoc2Vjb25kKTsKIH0KIAotdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVm
UHRyPENTU1ZhbHVlPj4gQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcDsKK3R5cGVkZWYgSGFzaE1hcDxB
dG9taWNTdHJpbmcsIFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPj4gQ3VzdG9tUHJvcGVy
dHlWYWx1ZU1hcDsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFsdWVMaXN0LmNwcAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ZhbHVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKIAorI2luY2x1ZGUg
IkNTU0N1c3RvbVByb3BlcnR5VmFsdWUuaCIKICNpbmNsdWRlICJDU1NGdW5jdGlvblZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTUGFyc2VyVmFsdWVzLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFs
dWUuaCIKQEAgLTIwNiw4ICsyMDcsOCBAQCBib29sIENTU1ZhbHVlTGlzdDo6Y2hlY2tWYXJpYWJs
ZXNGb3JDeWNsCiAgICAgICAgICAgICBhdXRvJiB2YXJpYWJsZVZhbHVlID0gZG93bmNhc3Q8Q1NT
VmFyaWFibGVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAgICAgIGlmIChzZWVuUHJvcGVydGllcy5j
b250YWlucyh2YXJpYWJsZVZhbHVlLm5hbWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGN1c3RvbVByb3BlcnRp
ZXMuZ2V0KHZhcmlhYmxlVmFsdWUubmFtZSgpKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2
YWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkgJiYgIWRvd25jYXN0PENTU1ZhcmlhYmxl
RGVwZW5kZW50VmFsdWU+KCp2YWx1ZSkuY2hlY2tWYXJpYWJsZXNGb3JDeWNsZXModmFyaWFibGVW
YWx1ZS5uYW1lKCksIGN1c3RvbVByb3BlcnRpZXMsIHNlZW5Qcm9wZXJ0aWVzLCBpbnZhbGlkUHJv
cGVydGllcykpCisgICAgICAgICAgICBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFs
dWUgPSBjdXN0b21Qcm9wZXJ0aWVzLmdldCh2YXJpYWJsZVZhbHVlLm5hbWUoKSk7CisgICAgICAg
ICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmNvbnRhaW5zVmFyaWFibGVzKCkgJiYgIWRvd25jYXN0
PENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWU+KCoodmFsdWUtPmRlcHJlY2F0ZWRWYWx1ZSgpKSku
Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXModmFyaWFibGVWYWx1ZS5uYW1lKCksIGN1c3RvbVByb3Bl
cnRpZXMsIHNlZW5Qcm9wZXJ0aWVzLCBpbnZhbGlkUHJvcGVydGllcykpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAvLyBIYXZlIHRvIGNoZWNrIHRoZSBmYWxs
YmFjayB2YWx1ZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCShyZXZpc2lvbiAy
MDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlOwogc3RydWN0IENTU1BhcnNlclZhbHVlOwogY2xhc3MgQ1NTUGFy
c2VyVmFsdWVMaXN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVEYXRhLmNw
cAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJDU1NWYXJpYWJsZURhdGEuaCIKIAorI2luY2x1ZGUgIkNTU0N1c3RvbVBy
b3BlcnR5VmFsdWUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQYXJz
ZXJUb2tlblJhbmdlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAt
ODEsNCArODIsMTAwIEBAIENTU1ZhcmlhYmxlRGF0YTo6Q1NTVmFyaWFibGVEYXRhKGNvbnN0IEMK
ICAgICBjb25zdW1lQW5kVXBkYXRlVG9rZW5zKHJhbmdlKTsKIH0KIAorYm9vbCBDU1NWYXJpYWJs
ZURhdGE6OmNoZWNrVmFyaWFibGVzRm9yQ3ljbGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
Q3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9tUHJvcGVydGllcywgSGFzaFNldDxBdG9taWNT
dHJpbmc+JiBzZWVuUHJvcGVydGllcywgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBpbnZhbGlkUHJv
cGVydGllcykgY29uc3QKK3sKKyAgICBpZiAoaW52YWxpZFByb3BlcnRpZXMuY29udGFpbnMobmFt
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBIYXNoU2V0PEF0b21pY1N0cmlu
Zz4gbmV3U2VlblByb3BlcnRpZXMgPSBzZWVuUHJvcGVydGllczsKKyAgICBuZXdTZWVuUHJvcGVy
dGllcy5hZGQobmFtZSk7CisgICAgCisgICAgYm9vbCB2YWxpZCA9IGNoZWNrVmFyaWFibGVzRm9y
Q3ljbGVzV2l0aFJhbmdlKG1fdG9rZW5zLCBjdXN0b21Qcm9wZXJ0aWVzLCBuZXdTZWVuUHJvcGVy
dGllcywgaW52YWxpZFByb3BlcnRpZXMpOworICAgIGlmICghdmFsaWQpCisgICAgICAgIGludmFs
aWRQcm9wZXJ0aWVzLmFkZChuYW1lKTsKKyAgICAKKyAgICByZXR1cm4gdmFsaWQ7Cit9CisgICAg
Citib29sIENTU1ZhcmlhYmxlRGF0YTo6Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXNXaXRoUmFuZ2Uo
Q1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9t
UHJvcGVydGllcywgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBzZWVuUHJvcGVydGllcywgSGFzaFNl
dDxBdG9taWNTdHJpbmc+JiBpbnZhbGlkUHJvcGVydGllcykgY29uc3QKK3sKKyAgICB3aGlsZSAo
IXJhbmdlLmF0RW5kKCkpIHsKKyAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkg
PT0gQ1NTVmFsdWVWYXIpIHsKKyAgICAgICAgICAgIENTU1BhcnNlclRva2VuUmFuZ2UgYmxvY2sg
PSByYW5nZS5jb25zdW1lQmxvY2soKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYmxvY2su
Y29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay5wZWVrKCkudHlw
ZSgpID09IElkZW50VG9rZW4pOworICAgICAgICAgICAgQXRvbWljU3RyaW5nIHZhcmlhYmxlTmFt
ZSA9IGJsb2NrLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50b0F0b21pY1N0
cmluZygpOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrLmF0RW5kKCkgfHwgYmxvY2sucGVlaygp
LnR5cGUoKSA9PSBDb21tYVRva2VuKTsKKyAgICAgICAgICAgIGlmIChzZWVuUHJvcGVydGllcy5j
b250YWlucyh2YXJpYWJsZU5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVlID0gY3VzdG9t
UHJvcGVydGllcy5nZXQodmFyaWFibGVOYW1lKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2
YWx1ZS0+Y29udGFpbnNWYXJpYWJsZXMoKSAmJiAhdmFsdWUtPmNoZWNrVmFyaWFibGVzRm9yQ3lj
bGVzKHZhcmlhYmxlTmFtZSwgY3VzdG9tUHJvcGVydGllcywgc2VlblByb3BlcnRpZXMsIGludmFs
aWRQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09IENvbW1hVG9rZW4pIHsKKyAgICAgICAgICAg
ICAgICAvLyBGYWxsYmFjay4KKyAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNoZWNrVmFyaWFibGVzRm9yQ3ljbGVzV2l0aFJhbmdlKGJsb2Nr
LCBjdXN0b21Qcm9wZXJ0aWVzLCBzZWVuUHJvcGVydGllcywgaW52YWxpZFByb3BlcnRpZXMpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJhbmdlLmNvbnN1bWUo
KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ1NTVmFyaWFibGVEYXRhOjpy
ZXNvbHZlVmFyaWFibGVGYWxsYmFjayhjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0
b21Qcm9wZXJ0aWVzLCBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2Vy
VG9rZW4+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgaWYgKHJhbmdlLmF0RW5kKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBDb21tYVRv
a2VuKTsKKyAgICByYW5nZS5jb25zdW1lKCk7CisgICAgcmV0dXJuIHJlc29sdmVUb2tlblJhbmdl
KGN1c3RvbVByb3BlcnRpZXMsIHJhbmdlLCByZXN1bHQpOworfQorICAgIAorYm9vbCBDU1NWYXJp
YWJsZURhdGE6OnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZShjb25zdCBDdXN0b21Qcm9wZXJ0eVZh
bHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0
b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgcmFuZ2UuY29uc3VtZVdo
aXRlc3BhY2UoKTsKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2Vu
KTsKKyAgICBBdG9taWNTdHJpbmcgdmFyaWFibGVOYW1lID0gcmFuZ2UuY29uc3VtZUluY2x1ZGlu
Z1doaXRlc3BhY2UoKS52YWx1ZSgpLnRvQXRvbWljU3RyaW5nKCk7CisgICAgQVNTRVJUKHJhbmdl
LmF0RW5kKCkgfHwgKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gQ29tbWFUb2tlbikpOworICAgIAor
ICAgIFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBwcm9wZXJ0eSA9IGN1c3RvbVByb3Bl
cnRpZXMuZ2V0KHZhcmlhYmxlTmFtZSk7CisgICAgaWYgKCFwcm9wZXJ0eSB8fCAhcHJvcGVydHkt
PnZhbHVlKCkpCisgICAgICAgIHJldHVybiByZXNvbHZlVmFyaWFibGVGYWxsYmFjayhjdXN0b21Q
cm9wZXJ0aWVzLCByYW5nZSwgcmVzdWx0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHktPmNvbnRh
aW5zVmFyaWFibGVzKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IEF2b2lkIGRvaW5nIHRoaXMgd29y
ayBtb3JlIHRoYW4gb25jZS4KKyAgICAgICAgUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gcmVzb2x2
ZWREYXRhID0gcHJvcGVydHktPnZhbHVlKCktPnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoY3Vz
dG9tUHJvcGVydGllcyk7CisgICAgICAgIGlmICghcmVzb2x2ZWREYXRhKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKHJlc29sdmVkRGF0YS0+
dG9rZW5zKCkpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKHByb3Bl
cnR5LT52YWx1ZSgpLT50b2tlbnMoKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Jl
ZlB0cjxDU1NWYXJpYWJsZURhdGE+IENTU1ZhcmlhYmxlRGF0YTo6cmVzb2x2ZVZhcmlhYmxlUmVm
ZXJlbmNlcyhjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzKSBj
b25zdAoreworICAgIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4gcmVzb2x2ZWRUb2tlbnM7CisgICAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSA9IG1fdG9rZW5zOworICAgIGlmICghcmVzb2x2ZVRv
a2VuUmFuZ2UoY3VzdG9tUHJvcGVydGllcywgcmFuZ2UsIHJlc29sdmVkVG9rZW5zKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIENTU1ZhcmlhYmxlRGF0YTo6Y3JlYXRlUmVz
b2x2ZWQocmVzb2x2ZWRUb2tlbnMsICp0aGlzKTsKK30KKyAgICAKK2Jvb2wgQ1NTVmFyaWFibGVE
YXRhOjpyZXNvbHZlVG9rZW5SYW5nZShjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0
b21Qcm9wZXJ0aWVzLCBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2Vy
VG9rZW4+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICB3
aGlsZSAoIXJhbmdlLmF0RW5kKCkpIHsKKyAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5mdW5jdGlv
bklkKCkgPT0gQ1NTVmFsdWVWYXIpCisgICAgICAgICAgICBzdWNjZXNzICY9IHJlc29sdmVWYXJp
YWJsZVJlZmVyZW5jZShjdXN0b21Qcm9wZXJ0aWVzLCByYW5nZS5jb25zdW1lQmxvY2soKSwgcmVz
dWx0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyYW5nZS5jb25z
dW1lKCkpOworICAgIH0KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZURhdGEuaAkocmV2aXNpb24g
MjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw2ICs1OSwxMSBAQCBwdWJsaWM6CiAKICAgICBib29sIG5lZWRzVmFyaWFi
bGVSZXNvbHV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1ZhcmlhYmxlUmVzb2x1dGlvbjsg
fQogCisgICAgYm9vbCBjaGVja1ZhcmlhYmxlc0ZvckN5Y2xlcyhjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHNl
ZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGludmFsaWRQcm9wZXJ0aWVzKSBj
b25zdDsKKworICAgIFJlZlB0cjxDU1NWYXJpYWJsZURhdGE+IHJlc29sdmVWYXJpYWJsZVJlZmVy
ZW5jZXMoY29uc3QgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9tUHJvcGVydGllcykgY29u
c3Q7CisgICAgYm9vbCByZXNvbHZlVG9rZW5SYW5nZShjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVl
TWFwJiwgQ1NTUGFyc2VyVG9rZW5SYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYpIGNvbnN0
OworCiBwcml2YXRlOgogICAgIENTU1ZhcmlhYmxlRGF0YShjb25zdCBDU1NQYXJzZXJUb2tlblJh
bmdlJiwgYm9vbCBuZWVkc1ZhcmlhYmxlUmVzb2x1dGlvbik7CiAKQEAgLTc0LDYgKzc5LDEwIEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGNvbnN1bWVBbmRVcGRhdGVUb2tlbnMoY29uc3QgQ1NTUGFy
c2VyVG9rZW5SYW5nZSYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZv
aWQgdXBkYXRlVG9rZW5zKGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmKTsKKyAgICAKKyAgICBi
b29sIGNoZWNrVmFyaWFibGVzRm9yQ3ljbGVzV2l0aFJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2Us
IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5Qcm9w
ZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGludmFsaWRQcm9wZXJ0aWVzKSBjb25zdDsK
KyAgICBib29sIHJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZShjb25zdCBDdXN0b21Qcm9wZXJ0eVZh
bHVlTWFwJiwgQ1NTUGFyc2VyVG9rZW5SYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYpIGNv
bnN0OworICAgIGJvb2wgcmVzb2x2ZVZhcmlhYmxlRmFsbGJhY2soY29uc3QgQ3VzdG9tUHJvcGVy
dHlWYWx1ZU1hcCYsIENTU1BhcnNlclRva2VuUmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4m
KSBjb25zdDsKIAogICAgIFN0cmluZyBtX2JhY2tpbmdTdHJpbmc7CiAgICAgVmVjdG9yPENTU1Bh
cnNlclRva2VuPiBtX3Rva2VuczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJs
ZVJlZmVyZW5jZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsOCArMzQsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTdHJpbmcgQ1NTVmFyaWFi
bGVSZWZlcmVuY2VWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiB7Ci0gICAgLy8gV2UgbWF5
IHdhbnQgdG8gY29uc2lkZXIgY2FjaGluZyB0aGlzIHZhbHVlLgotICAgIHJldHVybiBtX2RhdGEt
PnRva2VuUmFuZ2UoKS5zZXJpYWxpemUoKTsKKyAgICBpZiAoIW1fc2VyaWFsaXplZCkgeworICAg
ICAgICBtX3NlcmlhbGl6ZWQgPSB0cnVlOworICAgICAgICBtX3N0cmluZ1ZhbHVlID0gbV9kYXRh
LT50b2tlblJhbmdlKCkuc2VyaWFsaXplKCk7CisgICAgfQorICAgIHJldHVybiBtX3N0cmluZ1Zh
bHVlOworfQorICAgIAorYm9vbCBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlOjpjaGVja1Zhcmlh
Ymxlc0ZvckN5Y2xlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEN1c3RvbVByb3BlcnR5VmFs
dWVNYXAmIGN1c3RvbVByb3BlcnRpZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgc2VlblByb3Bl
cnRpZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgaW52YWxpZFByb3BlcnRpZXMpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgcmV0dXJuIG1fZGF0YS0+Y2hlY2tWYXJpYWJsZXNG
b3JDeWNsZXMobmFtZSwgY3VzdG9tUHJvcGVydGllcywgc2VlblByb3BlcnRpZXMsIGludmFsaWRQ
cm9wZXJ0aWVzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oCShyZXZpc2lvbiAyMDc5
MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICBib29sIGVxdWFscyhj
b25zdCBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9k
YXRhID09IG90aGVyLm1fZGF0YTsgfQogICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7
CiAKKyAgICBib29sIGNoZWNrVmFyaWFibGVzRm9yQ3ljbGVzKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgc2Vl
blByb3BlcnRpZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgaW52YWxpZFByb3BlcnRpZXMpIGNv
bnN0OworCiBwcml2YXRlOgogICAgIENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUoUmVmPENTU1Zh
cmlhYmxlRGF0YT4mJiBkYXRhKQogICAgICAgICA6IENTU1ZhbHVlKFZhcmlhYmxlUmVmZXJlbmNl
Q2xhc3MpCkBAIC01OCw2ICs2MCw4IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgUmVmUHRyPENT
U1ZhcmlhYmxlRGF0YT4gbV9kYXRhOworICAgIG11dGFibGUgU3RyaW5nIG1fc3RyaW5nVmFsdWU7
CisgICAgbXV0YWJsZSBib29sIG1fc2VyaWFsaXplZCB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlVmFsdWUu
Y3BwCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDEwICs2OSwxMSBAQCBib29sIENTU1Zhcmlh
YmxlVmFsdWU6OmVxdWFscyhjb25zdCBDU1NWCiAKIGJvb2wgQ1NTVmFyaWFibGVWYWx1ZTo6YnVp
bGRQYXJzZXJWYWx1ZUxpc3RTdWJzdGl0dXRpbmdWYXJpYWJsZXMoQ1NTUGFyc2VyVmFsdWVMaXN0
KiByZXN1bHRMaXN0LCBjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0
aWVzKSBjb25zdAogewotICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY3VzdG9tUHJv
cGVydGllcy5nZXQobV9uYW1lKSkgewotICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkp
CisgICAgaWYgKFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBjdXN0b21Qcm9wZXJ0eVZh
bHVlID0gY3VzdG9tUHJvcGVydGllcy5nZXQobV9uYW1lKSkgeworICAgICAgICBhdXRvIHZhbHVl
ID0gY3VzdG9tUHJvcGVydHlWYWx1ZS0+ZGVwcmVjYXRlZFZhbHVlKCk7CisgICAgICAgIGlmICh2
YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkuYnVpbGRQYXJzZXJWYWx1ZUxpc3RTdWJzdGl0dXRpbmdW
YXJpYWJsZXMocmVzdWx0TGlzdCwgY3VzdG9tUHJvcGVydGllcyk7Ci0gICAgICAgIGlmICh2YWx1
ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkpCisgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1
ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4oKnZhbHVlKS52YWx1ZUxpc3QoKS5idWlsZFBh
cnNlclZhbHVlTGlzdFN1YnN0aXR1dGluZ1ZhcmlhYmxlcyhyZXN1bHRMaXN0LCBjdXN0b21Qcm9w
ZXJ0aWVzKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMu
Y3BwCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkNTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU0N1c3RvbVByb3BlcnR5VmFs
dWUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKKyNpbmNsdWRlICJDU1NQZW5kaW5nU3Vic3Rp
dHV0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAi
Q1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCkBAIC0xMjYsNiArMTI3
LDE3IEBAIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmdldFByb3BlcnR5VmFsdWUKICAgICBpZiAo
dmFsdWUpCiAgICAgICAgIHJldHVybiB2YWx1ZS0+Y3NzVGV4dCgpOwogCisgICAgY29uc3QgU3R5
bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHkocHJv
cGVydHlJRCk7CisgICAgaWYgKHNob3J0aGFuZC5sZW5ndGgoKSkgeworICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKHNob3J0aGFuZC5w
cm9wZXJ0aWVzKClbMF0pOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgICAgICBpZiAodmFsdWUtPmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgp
KQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7CisgICAgICAgIGlmICh2YWx1
ZS0+aXNQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBkb3du
Y2FzdDxDU1NQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWU+KCp2YWx1ZSkuc2hvcnRoYW5kVmFsdWUo
KS0+Y3NzVGV4dCgpOworICAgIH0KKwogICAgIC8vIFNob3J0aGFuZCBhbmQgNC12YWx1ZXMgcHJv
cGVydGllcwogICAgIHN3aXRjaCAocHJvcGVydHlJRCkgewogICAgIGNhc2UgQ1NTUHJvcGVydHlB
bGw6CkBAIC0yMzIsOSArMjQ0LDYgQEAgU3RyaW5nIFN0eWxlUHJvcGVydGllczo6Z2V0Q3VzdG9t
UHJvcGVydAogU3RyaW5nIFN0eWxlUHJvcGVydGllczo6Ym9yZGVyU3BhY2luZ1ZhbHVlKGNvbnN0
IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCkgY29uc3QKIHsKICAgICBSZWZQdHI8
Q1NTVmFsdWU+IGhvcml6b250YWxWYWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChz
aG9ydGhhbmQucHJvcGVydGllcygpWzBdKTsKLSAgICBpZiAoaG9yaXpvbnRhbFZhbHVlICYmIGhv
cml6b250YWxWYWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkpCi0gICAgICAgIHJldHVy
biBob3Jpem9udGFsVmFsdWUtPmNzc1RleHQoKTsKLSAgICAKICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHZlcnRpY2FsVmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoc2hvcnRoYW5kLnBy
b3BlcnRpZXMoKVsxXSk7CiAKICAgICAvLyBXaGlsZSBzdGFuZGFyZCBib3JkZXItc3BhY2luZyBw
cm9wZXJ0eSBkb2VzIG5vdCBhbGxvdyBzcGVjaWZ5aW5nIGJvcmRlci1zcGFjaW5nLXZlcnRpY2Fs
IHdpdGhvdXQKQEAgLTM4NSw4ICszOTQsNiBAQCBTdHJpbmcgU3R5bGVQcm9wZXJ0aWVzOjpnZXRM
YXllcmVkU2hvcnRoCiAgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3NvbS0x
LyNzZXJpYWxpemUtYS1jc3MtZGVjbGFyYXRpb24tYmxvY2suCiAgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlc1tpXS0+aXNWYXJpYWJsZURl
cGVuZGVudFZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWVzW2ldLT5jc3NUZXh0KCk7
CiAgICAgICAgIGlmICh2YWx1ZXNbaV0tPmlzQmFzZVZhbHVlTGlzdCgpKQogICAgICAgICAgICAg
bnVtTGF5ZXJzID0gc3RkOjptYXgoZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWVzW2ldKS5s
ZW5ndGgoKSwgbnVtTGF5ZXJzKTsKICAgICAgICAgZWxzZQpAQCAtNTI1LDggKzUzMiw2IEBAIFN0
cmluZyBTdHlsZVByb3BlcnRpZXM6OmdldFNob3J0aGFuZFZhbHUKICAgICAgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoc2hvcnRoYW5k
LnByb3BlcnRpZXMoKVtpXSk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNWYXJpYWJsZURl
cGVuZGVudFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7
CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWVUZXh0ID0gdmFsdWUtPmNzc1RleHQoKTsKICAgICAg
ICAgICAgIGlmICghaSkKICAgICAgICAgICAgICAgICBjb21tb25WYWx1ZSA9IHZhbHVlVGV4dDsK
QEAgLTU1NCwxMSArNTU5LDkgQEAgU3RyaW5nIFN0eWxlUHJvcGVydGllczo6Z2V0Q29tbW9uVmFs
dWUoYwogICAgIGJvb2wgbGFzdFByb3BlcnR5V2FzSW1wb3J0YW50ID0gZmFsc2U7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNob3J0aGFuZC5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoc2hv
cnRoYW5kLnByb3BlcnRpZXMoKVtpXSk7Ci0gICAgICAgIC8vIEZJWE1FOiBDU1NJbml0aWFsVmFs
dWU6OmNzc1RleHQgc2hvdWxkIGdlbmVyYXRlIHRoZSByaWdodCB2YWx1ZS4KICAgICAgICAgaWYg
KCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgaWYgKHZhbHVl
LT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS0+
Y3NzVGV4dCgpOworICAgICAgICAvLyBGSVhNRTogQ1NTSW5pdGlhbFZhbHVlOjpjc3NUZXh0IHNo
b3VsZCBnZW5lcmF0ZSB0aGUgcmlnaHQgdmFsdWUuCiAgICAgICAgIFN0cmluZyB0ZXh0ID0gdmFs
dWUtPmNzc1RleHQoKTsKICAgICAgICAgaWYgKHRleHQuaXNOdWxsKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CkBAIC02MTEsNiArNjE0LDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBTdHls
ZVByb3BlcnRpZXM6OmdldFBybwogICAgICAgICBpZiAoZGVwZW5kZW50VmFsdWUucHJvcGVydHlJ
RCgpICE9IHByb3BlcnR5SUQpCiAgICAgICAgICAgICByZXR1cm4gQ1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZTo6Y3JlYXRlSW52YWxpZCgpOyAvLyBIYXZlIHRvIHJldHVybiBzcGVjaWFsICJwZW5kaW5n
LXN1YnN0aXR1dGlvbiIgdmFsdWUuCiAgICAgfQorCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBA
IC04NjgsNiArODcyLDEwIEBAIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmFzVGV4dCgpIGNvbnN0
CiAgICAgICAgICAgICBhdXRvJiBkZXBlbmRlbnRWYWx1ZSA9IGRvd25jYXN0PENTU1ZhcmlhYmxl
RGVwZW5kZW50VmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChkZXBl
bmRlbnRWYWx1ZS5wcm9wZXJ0eUlEKCkgIT0gcHJvcGVydHlJRCkKICAgICAgICAgICAgICAgICBz
aG9ydGhhbmRQcm9wZXJ0eUlEID0gZGVwZW5kZW50VmFsdWUucHJvcGVydHlJRCgpOworICAgICAg
ICB9IGVsc2UgaWYgKHByb3BlcnR5LnZhbHVlKCkgJiYgcHJvcGVydHkudmFsdWUoKS0+aXNQZW5k
aW5nU3Vic3RpdHV0aW9uVmFsdWUoKSkgeworICAgICAgICAgICAgYXV0byYgc3Vic3RpdHV0aW9u
VmFsdWUgPSBkb3duY2FzdDxDU1NQZW5kaW5nU3Vic3RpdHV0aW9uVmFsdWU+KCpwcm9wZXJ0eS52
YWx1ZSgpKTsKKyAgICAgICAgICAgIHNob3J0aGFuZFByb3BlcnR5SUQgPSBzdWJzdGl0dXRpb25W
YWx1ZS5zaG9ydGhhbmRQcm9wZXJ0eUlkKCk7CisgICAgICAgICAgICB2YWx1ZSA9IHN1YnN0aXR1
dGlvblZhbHVlLnNob3J0aGFuZFZhbHVlKCktPmNzc1RleHQoKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHlJRCkgewogICAgICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbk5hbWU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6Ok1hdGNoUmVzdWx0OjphZGRNYXRjCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc1ZhcmlhYmxlRGVw
ZW5kZW50VmFsdWUoKSkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNWYXJpYWJsZVJl
ZmVyZW5jZXMoKSkgewogICAgICAgICAgICAgICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0xNTg2LDgg
KzE1ODYsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvCiAgICAg
U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVl
VG9BcHBseSA9IHZhbHVlOwotICAgIGlmICh2YWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVl
KCkpIHsKLSAgICAgICAgdmFsdWVUb0FwcGx5ID0gcmVzb2x2ZWRWYXJpYWJsZVZhbHVlKGlkLCAq
ZG93bmNhc3Q8Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZT4odmFsdWUpKTsKKyAgICBpZiAodmFs
dWUtPmhhc1ZhcmlhYmxlUmVmZXJlbmNlcygpKSB7CisgICAgICAgIHZhbHVlVG9BcHBseSA9IHJl
c29sdmVkVmFyaWFibGVWYWx1ZShpZCwgKnZhbHVlKTsKICAgICAgICAgaWYgKCF2YWx1ZVRvQXBw
bHkpIHsKICAgICAgICAgICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShp
ZCkpCiAgICAgICAgICAgICAgICAgdmFsdWVUb0FwcGx5ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJbmhlcml0ZWRWYWx1ZSgpOwpAQCAtMTYwNCwxNyArMTYwNCwyMyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvCiAgICAgCiAgICAgQ1NTVmFsdWUq
IHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFsID0gdmFsdWVUb0FwcGx5LmdldCgpOwogICAg
IENTU0N1c3RvbVByb3BlcnR5VmFsdWUqIGN1c3RvbVByb3BlcnR5VmFsdWUgPSBudWxscHRyOwor
ICAgIENTU1ZhbHVlSUQgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID0gQ1NTVmFsdWVJbnZhbGlkOwog
ICAgIAogICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUN1c3RvbSkgeworICAgICAgICAvLyBGSVhN
RS1ORVdQQVJTRVI6IENhbiBjbGVhbiB0aGlzIHVwIG9uY2Ugb2xkIHBhcnNlciBpcyBnb25lIGFu
ZCByZW1vdmUKKyAgICAgICAgLy8gdGhlIGRlcHJlY2F0ZWRWYWx1ZSBjYWxsIGFuZCB0aGUgdmFs
dWVUb0NoZWNrRm9ySW5oZXJpdEluaXRpYWwgdmFyaWFibGUuCiAgICAgICAgIGN1c3RvbVByb3Bl
cnR5VmFsdWUgPSAmZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnZhbHVlVG9BcHBs
eSk7CiAgICAgICAgIHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFsID0gY3VzdG9tUHJvcGVy
dHlWYWx1ZS0+ZGVwcmVjYXRlZFZhbHVlKCkuZ2V0KCk7CisgICAgICAgIGN1c3RvbVByb3BlcnR5
VmFsdWVJRCA9IGN1c3RvbVByb3BlcnR5VmFsdWUtPnZhbHVlSUQoKTsKKyAgICAgICAgaWYgKGN1
c3RvbVByb3BlcnR5VmFsdWVJRCAhPSBDU1NWYWx1ZUludmFsaWQpCisgICAgICAgICAgICB2YWx1
ZVRvQ2hlY2tGb3JJbmhlcml0SW5pdGlhbCA9IHZhbHVlVG9BcHBseS5nZXQoKTsKICAgICB9CiAK
LSAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudFN0eWxlKCkgJiYgdmFsdWVUb0NoZWNr
Rm9ySW5oZXJpdEluaXRpYWwtPmlzSW5oZXJpdGVkVmFsdWUoKTsKLSAgICBib29sIGlzSW5pdGlh
bCA9IHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFsLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICgh
c3RhdGUucGFyZW50U3R5bGUoKSAmJiB2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5pdGlhbC0+aXNJ
bmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudFN0eWxl
KCkgPyB2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5pdGlhbC0+aXNJbmhlcml0ZWRWYWx1ZSgpIHx8
IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZUluaGVyaXQgOiBmYWxzZTsKKyAgICBi
b29sIGlzSW5pdGlhbCA9IHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFsLT5pc0luaXRpYWxW
YWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZUluaXRpYWwgfHwgKCFz
dGF0ZS5wYXJlbnRTdHlsZSgpICYmICh2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5pdGlhbC0+aXNJ
bmhlcml0ZWRWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZUluaGVy
aXQpKTsKICAgICAKLSAgICBib29sIGlzVW5zZXQgPSB2YWx1ZVRvQ2hlY2tGb3JJbmhlcml0SW5p
dGlhbC0+aXNVbnNldFZhbHVlKCk7Ci0gICAgYm9vbCBpc1JldmVydCA9IHZhbHVlVG9DaGVja0Zv
ckluaGVyaXRJbml0aWFsLT5pc1JldmVydFZhbHVlKCk7CisgICAgYm9vbCBpc1Vuc2V0ID0gdmFs
dWVUb0NoZWNrRm9ySW5oZXJpdEluaXRpYWwtPmlzVW5zZXRWYWx1ZSgpIHx8IGN1c3RvbVByb3Bl
cnR5VmFsdWVJRCA9PSBDU1NWYWx1ZVVuc2V0OworICAgIGJvb2wgaXNSZXZlcnQgPSB2YWx1ZVRv
Q2hlY2tGb3JJbmhlcml0SW5pdGlhbC0+aXNSZXZlcnRWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5
VmFsdWVJRCA9PSBDU1NWYWx1ZVJldmVydDsKIAogICAgIGlmIChpc1JldmVydCkgewogICAgICAg
ICBpZiAoY2FzY2FkZUxldmVsKCkgPT0gVXNlckFnZW50TGV2ZWwgfHwgIW1hdGNoUmVzdWx0KQpA
QCAtMTY2NiwxNCArMTY3MiwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvCiAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5Q3VzdG9tKSB7CiAgICAgICAgIENTU0N1
c3RvbVByb3BlcnR5VmFsdWUqIGN1c3RvbVByb3BlcnR5ID0gJmRvd25jYXN0PENTU0N1c3RvbVBy
b3BlcnR5VmFsdWU+KCp2YWx1ZVRvQXBwbHkpOwogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0g
ICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGN1c3RvbVZhbCA9IHN0YXRlLnBhcmVudFN0eWxl
KCktPmdldEN1c3RvbVByb3BlcnR5VmFsdWUoY3VzdG9tUHJvcGVydHktPm5hbWUoKSk7CisgICAg
ICAgICAgICBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gY3VzdG9tVmFsID0gc3RhdGUu
cGFyZW50U3R5bGUoKS0+Z2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShjdXN0b21Qcm9wZXJ0eS0+bmFt
ZSgpKTsKICAgICAgICAgICAgIGlmICghY3VzdG9tVmFsKQogICAgICAgICAgICAgICAgIGN1c3Rv
bVZhbCA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZUludmFsaWQoKTsKICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldEN1c3RvbVByb3BlcnR5VmFsdWUoY3VzdG9tUHJvcGVydHkt
Pm5hbWUoKSwgY3VzdG9tVmFsKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0luaXRpYWwpCiAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGN1c3RvbVByb3Bl
cnR5LT5uYW1lKCksIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZUludmFsaWQoKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1c3RvbVByb3BlcnR5
VmFsdWUoY3VzdG9tUHJvcGVydHktPm5hbWUoKSwgY3VzdG9tUHJvcGVydHktPmRlcHJlY2F0ZWRW
YWx1ZSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1c3RvbVByb3BlcnR5VmFs
dWUoY3VzdG9tUHJvcGVydHktPm5hbWUoKSwgY3VzdG9tUHJvcGVydHkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xNjgxLDEwICsxNjg3LDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm8KICAgICBTdHlsZUJ1aWxkZXI6OmFwcGx5UHJvcGVydHkoaWQs
ICp0aGlzLCAqdmFsdWVUb0FwcGx5LCBpc0luaXRpYWwsIGlzSW5oZXJpdCk7CiB9CiAKLVJlZlB0
cjxDU1NWYWx1ZT4gU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcElELCBjb25zdCBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlJiB2YWx1ZSkKK1Jl
ZlB0cjxDU1NWYWx1ZT4gU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgQ1NTUGFyc2Vy
IHBhcnNlcihtX3N0YXRlLmRvY3VtZW50KCkpOwotICAgIHJldHVybiBwYXJzZXIucGFyc2VWYXJp
YWJsZURlcGVuZGVudFZhbHVlKHByb3BJRCwgdmFsdWUsIG1fc3RhdGUuc3R5bGUoKS0+Y3VzdG9t
UHJvcGVydGllcygpLCBtX3N0YXRlLnN0eWxlKCktPmRpcmVjdGlvbigpLCBtX3N0YXRlLnN0eWxl
KCktPndyaXRpbmdNb2RlKCkpOworICAgIHJldHVybiBwYXJzZXIucGFyc2VWYWx1ZVdpdGhWYXJp
YWJsZVJlZmVyZW5jZXMocHJvcElELCB2YWx1ZSwgbV9zdGF0ZS5zdHlsZSgpLT5jdXN0b21Qcm9w
ZXJ0aWVzKCksIG1fc3RhdGUuc3R5bGUoKS0+ZGlyZWN0aW9uKCksIG1fc3RhdGUuc3R5bGUoKS0+
d3JpdGluZ01vZGUoKSk7CiB9CiAKIFJlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpz
dHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuaAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDcgKzQ2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKIAogICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayA9
IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0LCBjb25zdCBNYXRjaFJlc3VsdCogPSBudWxs
cHRyKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBjb25zdCBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlJik7CisgICAgUmVmUHRyPENT
U1ZhbHVlPiByZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTVmFs
dWUmKTsKIAogICAgIHZvaWQgYXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1
ZSopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCShyZXZp
c2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDggKzU4LDEwIEBACiAjaW5jbHVkZSAiQ1NTUGFnZVJ1bGUu
aCIKICNpbmNsdWRlICJDU1NQYXJzZXJGYXN0UGF0aHMuaCIKICNpbmNsdWRlICJDU1NQYXJzZXJJ
bXBsLmgiCisjaW5jbHVkZSAiQ1NTUGVuZGluZ1N1YnN0aXR1dGlvblZhbHVlLmgiCiAjaW5jbHVk
ZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBp
bmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcm9w
ZXJ0eVNvdXJjZURhdGEuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKICNpbmNsdWRl
ICJDU1NSZXZlcnRWYWx1ZS5oIgpAQCAtNzUsNiArNzcsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVl
TGlzdC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkNTU1ZhcmlhYmxl
RGVwZW5kZW50VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmgi
CiAjaW5jbHVkZSAiQ291bnRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCkBAIC0xNDMyLDYgKzE0MzUsMTAgQEAgUmVmPEltbXV0YWJsZVN0
eWxlUHJvcGVydGllcz4gQ1NTUGFyc2VyOgogewogICAgIENTU1BhcnNlckNvbnRleHQgY29udGV4
dChlbGVtZW50LT5kb2N1bWVudCgpKTsKICAgICBjb250ZXh0Lm1vZGUgPSBzdHJpY3RUb0NTU1Bh
cnNlck1vZGUoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmICFlbGVtZW50LT5kb2N1bWVudCgp
LmluUXVpcmtzTW9kZSgpKTsKKworICAgIGlmIChjb250ZXh0LnVzZU5ld1BhcnNlcikKKyAgICAg
ICAgcmV0dXJuIENTU1BhcnNlckltcGw6OnBhcnNlSW5saW5lU3R5bGVEZWNsYXJhdGlvbihzdHJp
bmcsIGVsZW1lbnQpOworCiAgICAgcmV0dXJuIENTU1BhcnNlcihjb250ZXh0KS5wYXJzZURlY2xh
cmF0aW9uKHN0cmluZywgbnVsbHB0cik7CiB9CiAKQEAgLTE3OTYsMjMgKzE4MDMsNjggQEAgdm9p
ZCBDU1NQYXJzZXI6OmFkZEV4cGFuZGVkUHJvcGVydHlGb3JWYQogICAgICAgICBhZGRQcm9wZXJ0
eShsb25naGFuZHNbaV0sIHZhbHVlLmNvcHlSZWYoKSwgaW1wb3J0YW50KTsKIH0KIAotUmVmUHRy
PENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFyaWFibGVEZXBlbmRlbnRWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSYgZGVwZW5kZW50
VmFsdWUsIGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmIGN1c3RvbVByb3BlcnRpZXMsIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQ
cm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBjb25zdCBDdXN0b21Qcm9w
ZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwg
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCiB7Ci0gICAgbV92YWx1ZUxpc3QucmVzZXQobmV3IENT
U1BhcnNlclZhbHVlTGlzdCgpKTsKLSAgICBpZiAoIWRlcGVuZGVudFZhbHVlLnZhbHVlTGlzdCgp
LmJ1aWxkUGFyc2VyVmFsdWVMaXN0U3Vic3RpdHV0aW5nVmFyaWFibGVzKG1fdmFsdWVMaXN0Lmdl
dCgpLCBjdXN0b21Qcm9wZXJ0aWVzKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KHZhbHVlLmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKSB7CisgICAgICAgIGNvbnN0IENTU1Zh
cmlhYmxlRGVwZW5kZW50VmFsdWUmIGRlcGVuZGVudFZhbHVlID0gZG93bmNhc3Q8Q1NTVmFyaWFi
bGVEZXBlbmRlbnRWYWx1ZT4odmFsdWUpOworICAgICAgICBtX3ZhbHVlTGlzdC5yZXNldChuZXcg
Q1NTUGFyc2VyVmFsdWVMaXN0KCkpOworICAgICAgICBpZiAoIWRlcGVuZGVudFZhbHVlLnZhbHVl
TGlzdCgpLmJ1aWxkUGFyc2VyVmFsdWVMaXN0U3Vic3RpdHV0aW5nVmFyaWFibGVzKG1fdmFsdWVM
aXN0LmdldCgpLCBjdXN0b21Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgICAgIENTU1Byb3BlcnR5SUQgZGVwZW5kZW50VmFsdWVQcm9wZXJ0eUlEID0gZGVw
ZW5kZW50VmFsdWUucHJvcGVydHlJRCgpOworICAgICAgICBpZiAoQ1NTUHJvcGVydHk6OmlzRGly
ZWN0aW9uQXdhcmVQcm9wZXJ0eShkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQpKQorICAgICAgICAg
ICAgZGVwZW5kZW50VmFsdWVQcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rp
b25Bd2FyZVByb3BlcnR5KGRlcGVuZGVudFZhbHVlUHJvcGVydHlJRCwgZGlyZWN0aW9uLCB3cml0
aW5nTW9kZSk7CiAKLSAgICBDU1NQcm9wZXJ0eUlEIGRlcGVuZGVudFZhbHVlUHJvcGVydHlJRCA9
IGRlcGVuZGVudFZhbHVlLnByb3BlcnR5SUQoKTsKLSAgICBpZiAoQ1NTUHJvcGVydHk6OmlzRGly
ZWN0aW9uQXdhcmVQcm9wZXJ0eShkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQpKQotICAgICAgICBk
ZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3
YXJlUHJvcGVydHkoZGVwZW5kZW50VmFsdWVQcm9wZXJ0eUlELCBkaXJlY3Rpb24sIHdyaXRpbmdN
b2RlKTsKKyAgICAgICAgaWYgKCFwYXJzZVZhbHVlKGRlcGVuZGVudFZhbHVlUHJvcGVydHlJRCwg
ZmFsc2UpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoIXBhcnNlVmFs
dWUoZGVwZW5kZW50VmFsdWVQcm9wZXJ0eUlELCBmYWxzZSkpCisgICAgICAgIGZvciAoYXV0byYg
cHJvcGVydHkgOiBtX3BhcnNlZFByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0
eS5pZCgpID09IHByb3BJRCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHkudmFsdWUo
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
ICAgIAorICAgIGlmICh2YWx1ZS5pc1BlbmRpbmdTdWJzdGl0dXRpb25WYWx1ZSgpKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgaGF2ZSBhIHJlc29sdmVkU2hvcnRoYW5kcyBjYWNoZSB0byBz
dG9wIHRoaXMgZnJvbSBiZWluZyBkb25lCisgICAgICAgIC8vIG92ZXIgYW5kIG92ZXIgZm9yIGVh
Y2ggbG9uZ2hhbmQgdmFsdWUuCisgICAgICAgIGNvbnN0IENTU1BlbmRpbmdTdWJzdGl0dXRpb25W
YWx1ZSYgcGVuZGluZ1N1YnN0aXR1dGlvbiA9IGRvd25jYXN0PENTU1BlbmRpbmdTdWJzdGl0dXRp
b25WYWx1ZT4odmFsdWUpOworICAgICAgICBDU1NQcm9wZXJ0eUlEIHNob3J0aGFuZElEID0gcGVu
ZGluZ1N1YnN0aXR1dGlvbi5zaG9ydGhhbmRQcm9wZXJ0eUlkKCk7CisgICAgICAgIGlmIChDU1NQ
cm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KHNob3J0aGFuZElEKSkKKyAgICAgICAg
ICAgIHNob3J0aGFuZElEID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3Bl
cnR5KHNob3J0aGFuZElELCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKKyAgICAgICAgQ1NTVmFy
aWFibGVSZWZlcmVuY2VWYWx1ZSogc2hvcnRoYW5kVmFsdWUgPSBwZW5kaW5nU3Vic3RpdHV0aW9u
LnNob3J0aGFuZFZhbHVlKCk7CisgICAgICAgIGNvbnN0IENTU1ZhcmlhYmxlRGF0YSogdmFyaWFi
bGVEYXRhID0gc2hvcnRoYW5kVmFsdWUtPnZhcmlhYmxlRGF0YVZhbHVlKCk7CisgICAgICAgIEFT
U0VSVCh2YXJpYWJsZURhdGEpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPENTU1BhcnNlclRv
a2VuPiByZXNvbHZlZFRva2VuczsKKyAgICAgICAgaWYgKCF2YXJpYWJsZURhdGEtPnJlc29sdmVU
b2tlblJhbmdlKGN1c3RvbVByb3BlcnRpZXMsIHZhcmlhYmxlRGF0YS0+dG9rZW5zKCksIHJlc29s
dmVkVG9rZW5zKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAg
ICAgUGFyc2VkUHJvcGVydHlWZWN0b3IgcGFyc2VkUHJvcGVydGllczsKKyAgICAgICAgaWYgKCFD
U1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VWYWx1ZShzaG9ydGhhbmRJRCwgZmFsc2UsIHJlc29sdmVk
VG9rZW5zLCBtX2NvbnRleHQsIHBhcnNlZFByb3BlcnRpZXMsIFN0eWxlUnVsZTo6U3R5bGUpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8m
IHByb3BlcnR5IDogcGFyc2VkUHJvcGVydGllcykgeworICAgICAgICAgICAgaWYgKHByb3BlcnR5
LmlkKCkgPT0gcHJvcElEKQorICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eS52YWx1ZSgp
OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAK
LSAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogbV9wYXJzZWRQcm9wZXJ0aWVzKSB7Ci0gICAgICAg
IGlmIChwcm9wZXJ0eS5pZCgpID09IHByb3BJRCkKLSAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0
eS52YWx1ZSgpOworICAgIGlmICh2YWx1ZS5pc1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUoKSkgewor
ICAgICAgICBjb25zdCBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlJiB2YWx1ZVdpdGhSZWZlcmVu
Y2VzID0gZG93bmNhc3Q8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4odmFsdWUpOworICAgICAg
ICBjb25zdCBDU1NWYXJpYWJsZURhdGEqIHZhcmlhYmxlRGF0YSA9IHZhbHVlV2l0aFJlZmVyZW5j
ZXMudmFyaWFibGVEYXRhVmFsdWUoKTsKKyAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGF0YSk7Cisg
ICAgICAgIAorICAgICAgICBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+IHJlc29sdmVkVG9rZW5zOwor
ICAgICAgICBpZiAoIXZhcmlhYmxlRGF0YS0+cmVzb2x2ZVRva2VuUmFuZ2UoY3VzdG9tUHJvcGVy
dGllcywgdmFyaWFibGVEYXRhLT50b2tlbnMoKSwgcmVzb2x2ZWRUb2tlbnMpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlQ
YXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUocHJvcElELCByZXNvbHZlZFRva2VucywgbV9jb250ZXh0
KTsKICAgICB9CisgICAgCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkocmV2aXNpb24gMjA3OTAzKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDk0LDcgKzQ5
NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Q3VzdG9tUHJvcGVydHlOYW1lKGNvbnN0IEF0
b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKSB7IG1fY3VzdG9tUHJvcGVydHlOYW1lID0gcHJvcGVy
dHlOYW1lOyB9CiAKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVmFyaWFibGVEZXBlbmRlbnRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlJiwgY29u
c3QgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9tUHJvcGVydGllcywgVGV4dERpcmVjdGlv
biwgV3JpdGluZ01vZGUpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VWYWx1ZVdpdGhWYXJp
YWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTVmFsdWUmLCBjb25zdCBDdXN0
b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBUZXh0RGlyZWN0aW9uLCBXcml0
aW5nTW9kZSk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpczhCaXRTb3VyY2UoKSB7IHJldHVybiBt
X2lzOEJpdFNvdXJjZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJz
ZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlckltcGwuY3BwCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1BhcnNlckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxNiArNzcsNiBAQCBi
b29sIENTU1BhcnNlckltcGw6OnBhcnNlVmFsdWUoTXV0YWJsZVN0CiAgICAgcmV0dXJuIGRlY2xh
cmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0aWVzKHBhcnNlci5tX3BhcnNlZFByb3BlcnRpZXMpOwog
fQogCi1ib29sIENTU1BhcnNlckltcGw6OnBhcnNlVmFyaWFibGVWYWx1ZShNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBjb250ZXh0KQotewotICAgIENTU1BhcnNlckltcGwgcGFyc2VyKGNvbnRleHQpOwotICAg
IENTU1Rva2VuaXplcjo6U2NvcGUgc2NvcGUodmFsdWUpOwotICAgIHBhcnNlci5jb25zdW1lVmFy
aWFibGVWYWx1ZShzY29wZS50b2tlblJhbmdlKCksIHByb3BlcnR5TmFtZSwgaW1wb3J0YW50KTsK
LSAgICBpZiAocGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMo
cGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWx0
ZXJQcm9wZXJ0aWVzKGJvb2wgaW1wb3J0YW50LCBjb25zdCBQYXJzZWRQcm9wZXJ0eVZlY3RvciYg
aW5wdXQsIFBhcnNlZFByb3BlcnR5VmVjdG9yJiBvdXRwdXQsIHNpemVfdCYgdW51c2VkRW50cmll
cywgc3RkOjpiaXRzZXQ8bnVtQ1NTUHJvcGVydGllcz4mIHNlZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0
PEF0b21pY1N0cmluZz4mIHNlZW5DdXN0b21Qcm9wZXJ0aWVzKQogewogICAgIC8vIEFkZCBwcm9w
ZXJ0aWVzIGluIHJldmVyc2Ugb3JkZXIgc28gdGhhdCBoaWdoZXN0IHByaW9yaXR5IGRlZmluaXRp
b25zIGFyZSByZWFjaGVkIGZpcnN0LiBEdXBsaWNhdGUgZGVmaW5pdGlvbnMgY2FuIHRoZW4gYmUg
aWdub3JlZCB3aGVuIGZvdW5kLgpAQCAtOTcsMTEgKzg3LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBmaWx0ZXJQcm9wZXJ0aWVzKGJvb2wKICAgICAgICAgY29uc3QgdW5zaWduZWQgcHJvcGVydHlJ
REluZGV4ID0gcHJvcGVydHkuaWQoKSAtIGZpcnN0Q1NTUHJvcGVydHk7CiAgICAgICAgIAogICAg
ICAgICBpZiAocHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUN1c3RvbSkgewotICAgICAgICAg
ICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSogY3VzdG9tVmFsdWUgPSBkb3duY2FzdDxDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlPihwcm9wZXJ0eS52YWx1ZSgpKTsKLSAgICAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSA9IGN1c3RvbVZhbHVlLT5uYW1lKCk7Ci0gICAgICAgICAgICBpZiAo
c2VlbkN1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFtZSkpCisgICAgICAgICAgICBhdXRvJiBu
YW1lID0gZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkp
Lm5hbWUoKTsKKyAgICAgICAgICAgIGlmICghc2VlbkN1c3RvbVByb3BlcnRpZXMuYWRkKG5hbWUp
LmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzZWVu
Q3VzdG9tUHJvcGVydGllcy5hZGQobmFtZSk7CisgICAgICAgICAgICBvdXRwdXRbLS11bnVzZWRF
bnRyaWVzXSA9IHByb3BlcnR5OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC0yNDMsMjkgKzIzMiw2IEBAIENTU1NlbGVjdG9yTGlzdCBDU1NQYXJzZXJJbXBs
OjpwYXJzZVBhZ2UKICAgICByZXR1cm4gc2VsZWN0b3JMaXN0OwogfQogCi1SZWZQdHI8SW1tdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBDU1NQYXJzZXJJbXBsOjpwYXJzZUN1c3RvbVByb3BlcnR5U2V0
KENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UpCi17Ci0gICAgcmFuZ2UuY29uc3VtZVdoaXRlc3Bh
Y2UoKTsKLSAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBMZWZ0QnJhY2VUb2tlbikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBibG9jayA9IHJh
bmdlLmNvbnN1bWVCbG9jaygpOwotICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0gICAg
aWYgKCFyYW5nZS5hdEVuZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBDU1NQYXJz
ZXJJbXBsIHBhcnNlcihzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOwotICAgIHBhcnNlci5jb25z
dW1lRGVjbGFyYXRpb25MaXN0KGJsb2NrLCBTdHlsZVJ1bGU6OlN0eWxlKTsKLQotICAgIC8vIEZJ
WE1FLU5FV1BBUlNFUjogV2UgZG9udCBzdXBwb3J0IEBhcHBseSB5ZXQuCi0gICAgLy8gRHJvcCBu
ZXN0ZWQgQGFwcGx5IHJ1bGVzLiBTZWVtcyBuaWNlciB0byBkbyB0aGlzIGhlcmUgaW5zdGVhZCBv
ZiBtYWtpbmcKLSAgICAvLyBhIGRpZmZlcmVudCBTdHlsZVJ1bGUgdHlwZQotICAgIC8qZm9yIChz
aXplX3QgaSA9IHBhcnNlci5tX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpOyBpLS07ICkgewotICAg
ICAgICBpZiAocGFyc2VyLm1fcGFyc2VkUHJvcGVydGllc1tpXS5pZCgpID09IENTU1Byb3BlcnR5
QXBwbHlBdFJ1bGUpCi0gICAgICAgICAgICBwYXJzZXIubV9wYXJzZWRQcm9wZXJ0aWVzLnJlbW92
ZShpKTsKLSAgICB9Ki8KLQotICAgIHJldHVybiBjcmVhdGVTdHlsZVByb3BlcnRpZXMocGFyc2Vy
Lm1fcGFyc2VkUHJvcGVydGllcywgSFRNTFN0YW5kYXJkTW9kZSk7Ci19Ci0KIHN0ZDo6dW5pcXVl
X3B0cjxWZWN0b3I8ZG91YmxlPj4gQ1NTUGFyc2VySW1wbDo6cGFyc2VLZXlmcmFtZUtleUxpc3Qo
Y29uc3QgU3RyaW5nJiBrZXlMaXN0KQogewogICAgIHJldHVybiBjb25zdW1lS2V5ZnJhbWVLZXlM
aXN0KENTU1Rva2VuaXplcjo6U2NvcGUoa2V5TGlzdCkudG9rZW5SYW5nZSgpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5oCShyZXZpc2lvbiAyMDc5MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuaAkod29ya2luZyBj
b3B5KQpAQCAtODMsMTUgKzgzLDEyIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgc3RhdGljIGJv
b2wgcGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiwgQ1NTUHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKLSAg
ICBzdGF0aWMgYm9vbCBwYXJzZVZhcmlhYmxlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyos
IGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmLCBib29sIGlt
cG9ydGFudCwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwogICAgIHN0YXRpYyBSZWY8SW1tdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBwYXJzZUlubGluZVN0eWxlRGVjbGFyYXRpb24oY29uc3QgU3Ry
aW5nJiwgRWxlbWVudCopOwogICAgIHN0YXRpYyBib29sIHBhcnNlRGVjbGFyYXRpb25MaXN0KE11
dGFibGVTdHlsZVByb3BlcnRpZXMqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0Jik7CiAgICAgc3RhdGljIFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBwYXJzZVJ1bGUoY29uc3Qg
U3RyaW5nJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIFN0eWxlU2hlZXRDb250ZW50cyosIEFs
bG93ZWRSdWxlc1R5cGUpOwogICAgIHN0YXRpYyB2b2lkIHBhcnNlU3R5bGVTaGVldChjb25zdCBT
dHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgU3R5bGVTaGVldENvbnRlbnRzKik7CiAg
ICAgc3RhdGljIENTU1NlbGVjdG9yTGlzdCBwYXJzZVBhZ2VTZWxlY3RvcihDU1NQYXJzZXJUb2tl
blJhbmdlLCBTdHlsZVNoZWV0Q29udGVudHMqKTsKIAotICAgIHN0YXRpYyBSZWZQdHI8SW1tdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBwYXJzZUN1c3RvbVByb3BlcnR5U2V0KENTU1BhcnNlclRva2Vu
UmFuZ2UpOwotCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8ZG91YmxlPj4gcGFy
c2VLZXlmcmFtZUtleUxpc3QoY29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIHN1cHBvcnRzRGVj
bGFyYXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NWYXJpYWJsZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NWYXJpYWJsZVBhcnNlci5jcHAJKHJldmlzaW9uIDIwNzkwMykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTVmFyaWFibGVQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIENTU1ZhbHVlSUQgY2xhc3NpZnlWYXJp
YWJsZVJhbmdlKAogICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAgICAgaWYgKHJhbmdl
LnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbikgewogICAgICAgICBDU1NWYWx1ZUlEIGlkID0g
cmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpOwotICAgICAgICBpZiAocmFu
Z2UuYXRFbmQoKSAmJiAoaWQgPT0gQ1NTVmFsdWVJbmhlcml0IHx8IGlkID09IENTU1ZhbHVlSW5p
dGlhbCB8fCBpZCA9PSBDU1NWYWx1ZVVuc2V0KSkKKyAgICAgICAgaWYgKHJhbmdlLmF0RW5kKCkg
JiYgKGlkID09IENTU1ZhbHVlSW5oZXJpdCB8fCBpZCA9PSBDU1NWYWx1ZUluaXRpYWwgfHwgaWQg
PT0gQ1NTVmFsdWVVbnNldCB8fCBpZCA9PSBDU1NWYWx1ZVJldmVydCkpCiAgICAgICAgICAgICBy
ZXR1cm4gaWQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDIwNzkwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMzYs
MTAgKzIwMzYsMTAgQEAgdm9pZCBSZW5kZXJTdHlsZTo6Y2hlY2tWYXJpYWJsZXNJbkN1c3RvbQog
ICAgIGF1dG8mIGN1c3RvbVByb3BlcnRpZXMgPSByYXJlSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+
bV9jdXN0b21Qcm9wZXJ0aWVzLmFjY2VzcygpLT52YWx1ZXMoKTsKICAgICBIYXNoU2V0PEF0b21p
Y1N0cmluZz4gaW52YWxpZFByb3BlcnRpZXM7CiAgICAgZm9yIChhdXRvIGVudHJ5IDogY3VzdG9t
UHJvcGVydGllcykgewotICAgICAgICBpZiAoIWVudHJ5LnZhbHVlLT5pc1ZhcmlhYmxlRGVwZW5k
ZW50VmFsdWUoKSkKKyAgICAgICAgaWYgKCFlbnRyeS52YWx1ZS0+Y29udGFpbnNWYXJpYWJsZXMo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4g
c2VlblByb3BlcnRpZXM7Ci0gICAgICAgIGRvd25jYXN0PENTU1ZhcmlhYmxlRGVwZW5kZW50VmFs
dWU+KCplbnRyeS52YWx1ZSkuY2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMoZW50cnkua2V5LCBjdXN0
b21Qcm9wZXJ0aWVzLCBzZWVuUHJvcGVydGllcywgaW52YWxpZFByb3BlcnRpZXMpOworICAgICAg
ICBlbnRyeS52YWx1ZS0+Y2hlY2tWYXJpYWJsZXNGb3JDeWNsZXMoZW50cnkua2V5LCBjdXN0b21Q
cm9wZXJ0aWVzLCBzZWVuUHJvcGVydGllcywgaW52YWxpZFByb3BlcnRpZXMpOwogICAgIH0KICAg
ICAKICAgICAvLyBOb3cgaW5zZXJ0IGludmFsaWQgdmFsdWVzLgpAQCAtMjA1MywyMCArMjA1Mywx
NSBAQCB2b2lkIFJlbmRlclN0eWxlOjpjaGVja1ZhcmlhYmxlc0luQ3VzdG9tCiAgICAgLy8gaW52
YWxpZCB2YWx1ZXMgaWYgdGhleSBmYWlsZWQsIHdlIGNhbiBwZXJmb3JtIHZhcmlhYmxlIHN1YnN0
aXR1dGlvbiBvbiB0aGUgdmFsaWQgdmFsdWVzLgogICAgIFZlY3RvcjxSZWY8Q1NTQ3VzdG9tUHJv
cGVydHlWYWx1ZT4+IHJlc29sdmVkVmFsdWVzOwogICAgIGZvciAoYXV0byBlbnRyeSA6IGN1c3Rv
bVByb3BlcnRpZXMpIHsKLSAgICAgICAgaWYgKCFlbnRyeS52YWx1ZS0+aXNWYXJpYWJsZURlcGVu
ZGVudFZhbHVlKCkpCisgICAgICAgIGlmICghZW50cnkudmFsdWUtPmNvbnRhaW5zVmFyaWFibGVz
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIENTU1BhcnNlclZh
bHVlTGlzdCBwYXJzZXJMaXN0OwotICAgICAgICBpZiAoIWRvd25jYXN0PENTU1ZhcmlhYmxlRGVw
ZW5kZW50VmFsdWU+KCplbnRyeS52YWx1ZSkudmFsdWVMaXN0KCkuYnVpbGRQYXJzZXJWYWx1ZUxp
c3RTdWJzdGl0dXRpbmdWYXJpYWJsZXMoJnBhcnNlckxpc3QsIGN1c3RvbVByb3BlcnRpZXMpKQot
ICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZXMuYXBwZW5kKENTU0N1c3RvbVByb3BlcnR5VmFsdWU6
OmNyZWF0ZShlbnRyeS5rZXksIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZUludmFsaWQo
KSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXNvbHZlZFZhbHVlcy5hcHBlbmQoQ1NT
Q3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKGVudHJ5LmtleSwgQ1NTVmFsdWVMaXN0OjpjcmVh
dGVGcm9tUGFyc2VyVmFsdWVMaXN0KHBhcnNlckxpc3QpKSk7CisgICAgICAgIGVudHJ5LnZhbHVl
LT5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGN1c3RvbVByb3BlcnRpZXMsIHJlc29sdmVkVmFs
dWVzKTsKICAgICB9CiAgICAgCiAgICAgLy8gV2l0aCBhbGwgcmVzdWx0cyBjb21wdXRlZCwgd2Ug
Y2FuIG5vdyBtdXRhdGUgb3VyIHRhYmxlIHRvIGVsaW1pbmF0ZSB0aGUgdmFyaWFibGVzIGFuZAog
ICAgIC8vIGhvbGQgdGhlIGZpbmFsIHZhbHVlcy4gVGhpcyB3YXkgd2hlbiB3ZSBpbmhlcml0LCB3
ZSBkb24ndCBlbmQgdXAgcmVzdWJzdGl0dXRpbmcgdmFyaWFibGVzLCBldGMuCiAgICAgZm9yIChh
dXRvJiByZXNvbHZlZFZhbHVlIDogcmVzb2x2ZWRWYWx1ZXMpCi0gICAgICAgIGN1c3RvbVByb3Bl
cnRpZXMuc2V0KHJlc29sdmVkVmFsdWUtPm5hbWUoKSwgcmVzb2x2ZWRWYWx1ZS0+ZGVwcmVjYXRl
ZFZhbHVlKCkpOworICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzLnNldChyZXNvbHZlZFZhbHVlLT5u
YW1lKCksIHJlc29sdmVkVmFsdWUuY29weVJlZigpKTsKIAogICAgIHJhcmVJbmhlcml0ZWREYXRh
LmFjY2VzcygpLT5tX2N1c3RvbVByb3BlcnRpZXMuYWNjZXNzKCktPnNldENvbnRhaW5zVmFyaWFi
bGVzKGZhbHNlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDggKzUyNyw4IEBA
IHB1YmxpYzoKIAogICAgIGNvbnN0IFBzZXVkb1N0eWxlQ2FjaGUqIGNhY2hlZFBzZXVkb1N0eWxl
cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkUHNldWRvU3R5bGVzLmdldCgpOyB9CiAKLSAgICB2
b2lkIHNldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25z
dCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZSkgeyByYXJlSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+
bV9jdXN0b21Qcm9wZXJ0aWVzLmFjY2VzcygpLT5zZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUs
IHZhbHVlKTsgfQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gZ2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRh
LT5tX2N1c3RvbVByb3BlcnRpZXMtPmdldEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSk7IH0KKyAg
ICB2b2lkIHNldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBj
b25zdCBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4mIHZhbHVlKSB7IHJhcmVJbmhlcml0
ZWREYXRhLmFjY2VzcygpLT5tX2N1c3RvbVByb3BlcnRpZXMuYWNjZXNzKCktPnNldEN1c3RvbVBy
b3BlcnR5VmFsdWUobmFtZSwgdmFsdWUpOyB9CisgICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5
VmFsdWU+IGdldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBj
b25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+bV9jdXN0b21Qcm9wZXJ0aWVzLT5nZXRD
dXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUpOyB9CiAgICAgYm9vbCBoYXNDdXN0b21Qcm9wZXJ0eShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRh
LT5tX2N1c3RvbVByb3BlcnRpZXMtPmhhc0N1c3RvbVByb3BlcnR5KG5hbWUpOyB9CiAgICAgY29u
c3QgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgY3VzdG9tUHJvcGVydGllcygpIGNvbnN0IHsgcmV0
dXJuIHJhcmVJbmhlcml0ZWREYXRhLT5tX2N1c3RvbVByb3BlcnRpZXMtPm1fdmFsdWVzOyB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1c3RvbVByb3BlcnR5
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZUN1c3RvbVByb3BlcnR5RGF0YS5oCShyZXZpc2lvbiAyMDc5MDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNyArMjIsNyBAQAogI2lmbmRlZiBTdHlsZUN1c3RvbVByb3BlcnR5RGF0YV9oCiAj
ZGVmaW5lIFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhX2gKIAotI2luY2x1ZGUgIkNTU1ZhbHVlLmgi
CisjaW5jbHVkZSAiQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgpAQCAtNDQsOCArNDQsOCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChtX3ZhbHVlcy5zaXpl
KCkgIT0gby5tX3ZhbHVlcy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIAotICAgICAgICBmb3IgKFdURjo6S2V5VmFsdWVQYWlyPEF0b21pY1N0cmluZywgUmVmUHRy
PENTU1ZhbHVlPj4gZW50cnkgOiBtX3ZhbHVlcykgewotICAgICAgICAgICAgUmVmUHRyPENTU1Zh
bHVlPiBvdGhlciA9IG8ubV92YWx1ZXMuZ2V0KGVudHJ5LmtleSk7CisgICAgICAgIGZvciAoV1RG
OjpLZXlWYWx1ZVBhaXI8QXRvbWljU3RyaW5nLCBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1
ZT4+IGVudHJ5IDogbV92YWx1ZXMpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlPiBvdGhlciA9IG8ubV92YWx1ZXMuZ2V0KGVudHJ5LmtleSk7CiAgICAgICAgICAg
ICBpZiAoIW90aGVyIHx8ICFlbnRyeS52YWx1ZS0+ZXF1YWxzKCpvdGhlcikpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01NCwxNCArNTQsMTQgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhICZv
KSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG8pOyB9CiAgICAgCi0gICAgdm9pZCBzZXRDdXN0
b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgUmVmUHRyPENT
U1ZhbHVlPiYgdmFsdWUpCisgICAgdm9pZCBzZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+JiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIG1fdmFsdWVzLnNldChuYW1lLCB2YWx1ZSk7Ci0gICAgICAg
IGlmICh2YWx1ZS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkpCisgICAgICAgIGlmICh2YWx1
ZS0+Y29udGFpbnNWYXJpYWJsZXMoKSkKICAgICAgICAgICAgIG1fY29udGFpbnNWYXJpYWJsZXMg
PSB0cnVlOwogICAgIH0KIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4gZ2V0Q3VzdG9tUHJvcGVydHlW
YWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmdl
dChuYW1lKTsgfQorICAgIFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBnZXRDdXN0b21Q
cm9wZXJ0eVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXMuZ2V0KG5hbWUpOyB9CiAgICAgQ3VzdG9tUHJvcGVydHlWYWx1ZU1hcCYgdmFsdWVzKCkg
eyByZXR1cm4gbV92YWx1ZXM7IH0KICAgICAKICAgICBib29sIGhhc0N1c3RvbVByb3BlcnR5KGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuY29udGFpbnMo
bmFtZSk7IH0K
</data>
<flag name="review"
          id="316004"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>