<?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>177255</bug_id>
          
          <creation_ts>2017-09-20 11:26:36 -0700</creation_ts>
          <short_desc>Add infrastructure for adding custom headers to requests per website</short_desc>
          <delta_ts>2017-09-27 12:26:46 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1350871</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-20 11:26:36 -0700</bug_when>
    <thetext>Add infrastructure for adding custom headers to requests per website</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350873</commentid>
    <comment_count>1</comment_count>
      <attachid>321338</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-20 11:27:51 -0700</bug_when>
    <thetext>Created attachment 321338
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350896</commentid>
    <comment_count>2</comment_count>
      <attachid>321340</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-20 12:08:04 -0700</bug_when>
    <thetext>Created attachment 321340
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351033</commentid>
    <comment_count>3</comment_count>
      <attachid>321340</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-09-20 15:50:32 -0700</bug_when>
    <thetext>Comment on attachment 321340
Patch

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

r=me

&gt; Source/WebKit/UIProcess/API/C/WKWebsitePolicies.h:55
&gt; +WK_EXPORT WKArrayRef WKWebsitePoliciesCopyAdditionalCustomHeaderFields(WKWebsitePoliciesRef);
&gt; +WK_EXPORT void WKWebsitePoliciesSetAdditionalCustomHeaderFields(WKWebsitePoliciesRef, WKArrayRef);

I think you can just call these &quot;CustomHeaderFields&quot; rather than &quot;AdditionalCustomHeaderFields&quot;. Being custom is more specific than being additional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351055</commentid>
    <comment_count>4</comment_count>
      <attachid>321386</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-20 16:39:46 -0700</bug_when>
    <thetext>Created attachment 321386
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351092</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-20 18:15:36 -0700</bug_when>
    <thetext>http://trac.webkit.org/r222306</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351240</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-21 10:12:34 -0700</bug_when>
    <thetext>http://trac.webkit.org/r222325</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351516</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-21 19:56:27 -0700</bug_when>
    <thetext>Is this needed for website-specific quirks or something...?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352101</commentid>
    <comment_count>8</comment_count>
      <attachid>321386</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-24 17:27:10 -0700</bug_when>
    <thetext>Comment on attachment 321386
Patch

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

&gt; Source/WebCore/loader/HTTPHeaderField.cpp:67
&gt; +template&lt;size_t min, size_t max&gt;
&gt; +static bool isInRange(UChar c)
&gt; +{
&gt; +    return c &gt;= min &amp;&amp; c &lt;= max;
&gt; +}

Why not use an inline function instead of a function template?

&gt; Source/WebCore/loader/HTTPHeaderField.cpp:205
&gt; +HTTPHeaderField::HTTPHeaderField(const String&amp; field)

This function should take a StringView as an argument rather than a String. The current version never uses the String.

Or we could leave this taking a String as a way to do memory optimization, if we want to optimize the case where the m_field is already exactly equal to the new String we would otherwise create.

&gt; Source/WebCore/loader/HTTPHeaderField.cpp:216
&gt; +    m_field = makeString(name, &apos;:&apos;, &apos; &apos;,  value);

Is this more efficient than passing &quot;: &quot; to makeString?

Is it intentional that this makes the &quot;: &quot; canonical and strips all other whitespace, but does not do anything to make the name or value canonical? Without comments in the header, it’s unclear what the mission of this class is.

&gt; Source/WebCore/loader/HTTPHeaderField.h:34
&gt; +    HTTPHeaderField(const String&amp;);

I don’t think it’s an obvious interface to have this create an HTTPHeaderField that returns the null string when field() is called to indicate failure. There’s not even a comment here in the header to make that clear. Could we consider a more explicit cleaner interface? Do we need failure to create an HTTPHeaderField? Maybe a creation function that returns std::optional&lt;HTTPHeaderField&gt; that returns nullopt if it fails?

&gt; Source/WebKit/UIProcess/API/APIWebsitePolicies.h:50
&gt; +    const Vector&lt;WebCore::HTTPHeaderField&gt; customHeaderFields() { return m_websitePolicies.customHeaderFields; }

This is a strange type to return. If we want to return a copy, then the type should be Vector&lt;&gt;. If we want to efficiently not return a copy, then it should be const Vector&lt;&gt;&amp;. But const Vector&lt;&gt; is never the idiom we use.

Given the code I see elsewhere, I think we want const Vector&lt;&gt;&amp;.

&gt; Source/WebKit/UIProcess/API/C/WKWebsitePolicies.cpp:69
&gt; +    size_t length = WKArrayGetSize(array);

Why call this length when we normally call it size?

&gt; Source/WebKit/UIProcess/API/C/WKWebsitePolicies.cpp:76
&gt; +        if (!parsedField.field().isNull()
&gt; +            &amp;&amp; parsedField.field().startsWithIgnoringASCIICase(&quot;X-&quot;)) // Let&apos;s just pretend RFC6648 never happened.
&gt; +            fields.uncheckedAppend(WTFMove(parsedField));

If the intention here is to only allow fields with that start with &quot;x-&quot;, then we should get rid of the isNull check, which is redundant, and also we should use the slightly more efficient startsWithLettersIgnoringASCIICase function instead of the more general purpose startsWithIgnoringASCIICase.

If the intention here is to disallow fields that start with &quot;x-&quot; then the logic is backwards.

The comment about RFC6648 is oblique and didn’t make it clear to me why this is doing what it’s doing. Is enforcing &quot;you can only add headers with names that start with &apos;x-&apos;&quot; acceptable for everyone who need to use this?

&gt; Source/WebKit/UIProcess/API/C/WKWebsitePolicies.h:55
&gt; +WK_EXPORT WKArrayRef WKWebsitePoliciesCopyCustomHeaderFields(WKWebsitePoliciesRef);
&gt; +WK_EXPORT void WKWebsitePoliciesSetCustomHeaderFields(WKWebsitePoliciesRef, WKArrayRef);

Do we really need the C version of this? Can’t all the new clients use the Objective-C version? Why are we still adding new C functions?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.mm:121
&gt; +    const auto&amp; fields = _websitePolicies-&gt;customHeaderFields();

No need for const.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.mm:123
&gt; +    for (const auto&amp; field : fields)

No need for const.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.mm:136
&gt; +        if (!parsedField.field().isNull()
&gt; +            &amp;&amp; parsedField.field().startsWithIgnoringASCIICase(&quot;X-&quot;)) // Let&apos;s just pretend RFC6648 never happened.
&gt; +            parsedFields.uncheckedAppend(WTFMove(parsedField));

Same comments as above; annoying that this policy is implemented in two separate files. Can we move this rule down deeper than the API layer?

&gt; Tools/TestWebKitAPI/Tests/WebCore/HTTPHeaderField.cpp:69
&gt; +    shouldRemainUnchanged({
&gt; +        &quot;a: b&quot;,
&gt; +        &quot;a: b c&quot;,
&gt; +        &quot;!: b&quot;,
&gt; +        &quot;a: ()&quot;,
&gt; +        &quot;a: (\\ )&quot;,
&gt; +        &quot;a: (())&quot;,
&gt; +        &quot;a: \&quot;\&quot;&quot;,
&gt; +        &quot;a: \&quot;aA?\t \&quot;&quot;,
&gt; +        &quot;a: \&quot;a\&quot; (b) ((c))&quot;,
&gt; +        nonASCIIComment,
&gt; +        nonASCIIQuotedPairInComment,
&gt; +        nonASCIIQuotedPairInQuote,
&gt; +    });

No tests with capital letters in the header field name, for example. Need more coverage I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353386</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:26:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693291&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321338</attachid>
            <date>2017-09-20 11:27:51 -0700</date>
            <delta_ts>2017-09-20 12:08:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177255-20170920112750.patch</filename>
            <type>text/plain</type>
            <size>41444</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTA5LTIwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGluZnJh
c3RydWN0dXJlIGZvciBhZGRpbmcgY3VzdG9tIGhlYWRlcnMgdG8gcmVxdWVzdHMgcGVyIHdlYnNp
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzI1
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvdmVy
ZWQgYnkgQVBJIHRlc3RzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRlci9Eb2N1
bWVudExvYWRlci5jcHA6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0QWRkaXRpb25hbEhlYWRlckZpZWxkcyk6
CisgICAgICAgICogbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UkZDNzIzMDo6aXNUb2tlbkNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpS
RkM3MjMwOjppc0RlbGltaXRlcik6CisgICAgICAgIChXZWJDb3JlOjpSRkM3MjMwOjppc1Zpc2li
bGVDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UkZDNzIzMDo6aXNXaGl0ZXNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJGQzcyMzA6OmlzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSRkM3MjMwOjppc09CU1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6UkZDNzIzMDo6aXNRdW90
ZWRUZXh0Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJGQzcyMzA6OmlzUXVvdGVkUGFp
clNlY29uZE9jdGV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJGQzcyMzA6OmlzQ29tbWVudFRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6UkZDNzIzMDo6aXNWYWxpZE5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UkZDNzIzMDo6aXNWYWxpZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBIZWFk
ZXJGaWVsZDo6SFRUUEhlYWRlckZpZWxkKToKKyAgICAgICAgKiBsb2FkZXIvSFRUUEhlYWRlckZp
ZWxkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjpkZWNvZGUpOgorCiAy
MDE3LTA5LTE5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQWxsb3cgbW9kZXJuIGRlY29kaW5nIG9mIFZlY3RvcnMKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAyMjIxOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjEwOCw2ICsyMTA4LDcgQEAgc2V0KFdlYkNvcmVfU09V
UkNFUwogICAgIGxvYWRlci9GcmFtZUxvYWRSZXF1ZXN0LmNwcAogICAgIGxvYWRlci9GcmFtZUxv
YWRlci5jcHAKICAgICBsb2FkZXIvRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuY3BwCisgICAgbG9h
ZGVyL0hUVFBIZWFkZXJGaWVsZC5jcHAKICAgICBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3Bw
CiAgICAgbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAogICAgIGxvYWRlci9MaW5rSGVhZGVyLmNwcApJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjIyMTkyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQ4LDYgKzI3NDgsOCBAQAog
CQk1QzlBN0E3NjFBQTBGNkVEMDA5NThBQ0YgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzM5MzA2MDFB
QTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAgKi87IH07CiAJCTVD
OUI4NjBDMUMyMUUzQzkwMDExMEYzNiAvKiBOZXR3b3JrTG9hZE1ldHJpY3MubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlCODYwQjFDMjFFM0M2MDAx
MTBGMzYgLyogTmV0d29ya0xvYWRNZXRyaWNzLm1tICovOyB9OwogCQk1QzlFRjE3MTFERkY3MUND
MDBBNDUyRTMgLyogWFBhdGhHcmFtbWFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUVGMTZGMURGRjcxOTkwMEE0NTJFMyAvKiBYUGF0aEdyYW1t
YXIuY3BwICovOyB9OworCQk1Q0ExREVDNTFGNzFFRjk5MDBFNzFCRDMgLyogSFRUUEhlYWRlckZp
ZWxkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
QTFERUMyMUY3MUU2ODYwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuY3BwICovOyB9OworCQk1
Q0ExREVDNjFGNzFGMUM3MDBFNzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ExREVDNDFGNzFFNjg3MDBFNzFC
RDMgLyogSFRUUEhlYWRlckZpZWxkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNUNCMzdGRkUxQzYyRDI4QzAwRjIwMTg4IC8qIFNjcm9sbEFuaW1h
dG9yTW9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0IzN0ZGQzFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmNwcCAqLzsg
fTsKIAkJNUNCMzdGRkYxQzYyRDJBMTAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCMzdGRkQxQzYy
RDI3ODAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5oICovOyB9OwogCQk1Q0JDOERBQzFB
QUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3NpYmlsaXR5U29mdExpbmsuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCQzhEQUExQUFBMzAyMjAw
RTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmNwcCAqLzsgfTsKQEAgLTEwNzA5
LDYgKzEwNzExLDggQEAKIAkJNUM5Qjg2MEIxQzIxRTNDNjAwMTEwRjM2IC8qIE5ldHdvcmtMb2Fk
TWV0cmljcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdv
cmtMb2FkTWV0cmljcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM5RUYxNkYx
REZGNzE5OTAwQTQ1MkUzIC8qIFhQYXRoR3JhbW1hci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBYUGF0aEdyYW1tYXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1QzlFRjE3MDFERkY3MTk5MDBBNDUyRTMgLyogWFBhdGhHcmFtbWFyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoR3JhbW1hci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Q0ExREVDMjFGNzFFNjg2MDBFNzFCRDMgLyogSFRUUEhlYWRlckZp
ZWxkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUVFBIZWFkZXJG
aWVsZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQTFERUM0MUY3MUU2ODcw
MEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSFRUUEhlYWRlckZpZWxkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVD
QjM3RkZDMUM2MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3JNb2NrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCMzdGRkQxQzYyRDI3ODAwRjIwMTg4IC8qIFNj
cm9sbEFuaW1hdG9yTW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jv
bGxBbmltYXRvck1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzhEQUEx
QUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5r
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzODQ3LDggKzIzODUxLDggQEAK
IAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovLAogCQkJ
CUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAogCQkJCTIyQkQ5
RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLywKLQkJCQlDRDE5RkVB
NjFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3
Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCisJCQkJQ0QxOUZFQTYxRjU3Mzk3
MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMEND
QzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAqLywKIAkJCQk1NTc2QTU2MzFEODhBNzA4MDBDQ0MwNEMg
LyogSW1hZ2VGcmFtZS5oICovLAogCQkJCTU1OTdGODI0MUQ5MUMzMTMwMDY2QkMyMSAvKiBJbWFn
ZUZyYW1lQ2FjaGUuY3BwICovLApAQCAtMjQ0NzUsNiArMjQ0NzksOCBAQAogCQkJCTUxQzgxQjg4
MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuaCAqLywKIAkJCQk5N0RDRTFG
RjEwODA3Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xsZXIuY3BwICovLAogCQkJCTk3RENF
MjAwMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5oICovLAorCQkJCTVDQTFE
RUMyMUY3MUU2ODYwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuY3BwICovLAorCQkJCTVDQTFE
RUM0MUY3MUU2ODcwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuaCAqLywKIAkJCQkwODk1ODI1
MzBFODU3QTdFMDBGODJDODMgLyogSW1hZ2VMb2FkZXIuY3BwICovLAogCQkJCTA4OTU4MjU0MEU4
NTdBN0UwMEY4MkM4MyAvKiBJbWFnZUxvYWRlci5oICovLAogCQkJCUNCQTlEQzA4MURGNDREQzQw
MDA1Njc1QyAvKiBMaW5rSGVhZGVyLmNwcCAqLywKQEAgLTI4MTk5LDYgKzI4MjA1LDcgQEAKIAkJ
CQlBRDQ5OTE0MzE4RjA4MTUxMDBCRjAwOTIgLyogSFRNTFVua25vd25FbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNDQ2MTNBQjBDRDYzMzEwMDBGQURBNzUgLyogSFRNTFZpZGVvRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM5QUFGRUQxQTBDMEM4RDAwNjA1Rjk5IC8qIEhUTUxX
QlJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0ExREVDNjFGNzFGMUM3MDBFNzFCRDMg
LyogSFRUUEhlYWRlckZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3MTBDRTkyM0Ex
MDA3RUYzQ0QgLyogSFRUUEhlYWRlck1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCNUVCRDIx
OTRBNTBGMzAwNTlBQzcwIC8qIEhUVFBIZWFkZXJOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDE2MTRBNzkxREE2NDI0MTAwNEFEMDZGIC8qIEhUVFBIZWFkZXJWYWx1ZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjgyNzQsNiArMjgyODEsNyBAQAogCQkJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdB
MSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5
MkQyMThCNkI5QUIwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnRNYWMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3Nzk3OTFBMEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCBp
biBIZWFkZXJzICovLAorCQkJCUNEMTlGRUE4MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29k
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NUI4N0VEMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFn
ZURlY29kZXJDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcyMDVBQjYxMjM5MjkxMDAwQjE3Mzgw
IC8qIEltYWdlRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NzZBNTY1MUQ4OEE3MDgw
MENDQzA0QyAvKiBJbWFnZUZyYW1lLmggaW4gSGVhZGVycyAqLywKQEAgLTI4NDg1LDcgKzI4NDkz
LDYgQEAKIAkJCQk5NDc5NDkzODFFMDQ1OUZBMDAwMThEODUgLyogSlNEZXByZWNhdGVkQ1NTT01W
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTQ3OTQ5M0ExRTA0NTlGQTAwMDE4RDg1IC8qIEpT
RGVwcmVjYXRlZENTU09NVmFsdWVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUZCMUE2NjEy
MEE1RDNGMDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQ0QxOUZFQTgxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTlBODYwMDgxMTlEQUZBMTAwREVGMUVGIC8qIEpTRGV2aWNlT3JpZW50YXRpb25F
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU5RERDODMwOUUxOThCQTAwMUJGM0M2IC8qIEpT
RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTEyMjFFMDVFMUMwMkI0NDQwMDZBMUEwMCAv
KiBKU0RvY3VtZW50QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTMxNDYyLDcgKzMxNDY5
LDYgQEAKIAkJCQlBMTA0RjI0MzE0QzcxRjdBMDA5RTJDMjMgLyogQ2FjaGVkU1ZHRG9jdW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCNTMzNDcxNzE3RDBBMTAwRjIwNUY5IC8qIENhY2hl
ZFNWR0RvY3VtZW50UmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMDkzOUVBMUEx
M0UxMjkwMEI3ODhFNSAvKiBDYWNoZWRTVkdGb250LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUNE
MTlGRUE5MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDc1Mzg2MDIxNDQ4OUU5ODAwQjc4NDUyIC8qIENhY2hlZFRleHRUcmFjay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQ0IxNkMyNzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkWFNMU3R5
bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTM4MEMyODFGMzQzNkFDMDAxNTVGREEg
LyogQ2FjaGVTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzIxMjIsNyArMzIxMjgsNiBA
QAogCQkJCUUxMkRFNzE3MUU0Qjc0OUMwMEY5QUNDRiAvKiBHcmlkVHJhY2tTaXppbmdBbGdvcml0
aG0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE0QzI1RDcxRTlFRkVERTAwQkVFMTQxIC8qIEgy
NjRWaWRlb1Rvb2xCb3hFbmNvZGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQkYxMjUx
RjEyRDAwM0VGMjY5IC8qIEhpZGRlbklucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkw
NzNCREMwNTFGNjg0MzYxMDBFRTM0RUQgLyogVHJhY2tQcml2YXRlQmFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MTVCRTE5QjFENTRGNkMxMDBERDdDNjggLyogSElER2FtZXBhZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTVCRTE5RDFENTRGNkMxMDBERDdDNjggLyogSElER2FtZXBhZFBy
b3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDOTREMTUzMEMyNzVDOEIwMDZCQzYxNyAv
KiBIaXN0b3J5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzIyNTEsNiArMzIyNTYsNyBAQAogCQkJ
CUE4RUE3OUYzMEExOTE2REYwMEE4RUY1RiAvKiBIVE1MVUxpc3RFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUU0NDYxM0FBMENENjMzMTAwMEZBREE3NSAvKiBIVE1MVmlkZW9FbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzOUFBRkVDMUEwQzBDOEQwMDYwNUY5OSAvKiBIVE1M
V0JSRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0ExREVDNTFGNzFFRjk5MDBFNzFC
RDMgLyogSFRUUEhlYWRlckZpZWxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBCOEM1NkQ0MEYy
ODYyN0YwMDA1MDJFMSAvKiBIVFRQSGVhZGVyTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
QzkwMEMzMTk0M0MwRkMwMDg2MjVCNSAvKiBIVFRQSGVhZGVyTmFtZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDE2MTRBNzgxREE2NDIzQjAwNEFEMDZGIC8qIEhUVFBIZWFkZXJWYWx1ZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0zMjMxMSw2ICszMjMxNyw3IEBACiAJCQkJNTEwMTkyRDUxOEI2
QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MTAxOTJEMTE4QjZCOUFCMDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVt
ZW50TWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Nzk3OTE5MEQ2QjlEMEMwMDM4NTFCOSAv
KiBJbWFnZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0QxOUZFQTkxRjU3Mzk3MjAwMEM0
MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1NTVCODdFQzFDQUFG
MEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcy
MDVBQjUxMjM5MjkxMDAwQjE3MzgwIC8qIEltYWdlRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTU3NkE1NjQxRDg4QTcwODAwQ0NDMDRDIC8qIEltYWdlRnJhbWUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0zNDM4MSw2ICszNDM4OCw3IEBACiAJCQkJMDcwMzM0RDkxNDVBMDA2RjAwOEQ4
RDQ1IC8qIFRyYWNrQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzAzMzREMzE0NTlGRkFE
MDA4RDhENDUgLyogVHJhY2tFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRTg4RTBDMTE3
MTVDRTI2MDA2NThEOTggLyogVHJhY2tMaXN0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
NzNCREMwNTFGNjg0MzYxMDBFRTM0RUQgLyogVHJhY2tQcml2YXRlQmFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRkFDMzBGRjE4NEZCMTQ1MDA4QzRGMUUgLyogVHJhaWxpbmdPYmplY3RzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxRDdFRkVDMUJERUZBNTEwMEU5M0UxMCAvKiBUcmFuc2Fj
dGlvbk9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUU5MTFDMzBFRjg2RDQ3MDA5
RDBDQUYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDIyMjE5MikK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJI
VE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVFRQSGVhZGVyRmllbGQuaCIKICNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIK
ICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIkljb25Mb2FkZXIuaCIKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCShyZXZpc2lvbiAyMjIxOTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjksNiArNjksNyBAQCBjbGFzcyBDb250ZW50RmlsdGVyOwogY2xhc3MgRm9ybVN0YXRlOwog
Y2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZUxvYWRlcjsKK2NsYXNzIEhUVFBIZWFkZXJGaWVsZDsK
IGNsYXNzIEljb25Mb2FkZXI7CiBjbGFzcyBQYWdlOwogY2xhc3MgUHJldmlld0NvbnZlcnRlcjsK
QEAgLTI5NSw2ICsyOTYsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBWZWN0b3I8TGlua0ljb24+
JiBsaW5rSWNvbnMoKSBjb25zdCB7IHJldHVybiBtX2xpbmtJY29uczsgfQogCisgICAgdm9pZCBz
ZXRBZGRpdGlvbmFsSGVhZGVyRmllbGRzKFZlY3RvcjxIVFRQSGVhZGVyRmllbGQ+JiYgZmllbGRz
KSB7IG1fYWRkaXRpb25hbEhlYWRlckZpZWxkcyA9IFdURk1vdmUoZmllbGRzKTsgfQorICAgIAog
cHJvdGVjdGVkOgogICAgIFdFQkNPUkVfRVhQT1JUIERvY3VtZW50TG9hZGVyKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJik7CiAKQEAgLTQ1Miw2ICs0NTUsOCBA
QCBwcml2YXRlOgogICAgIEhhc2hNYXA8c3RkOjp1bmlxdWVfcHRyPEljb25Mb2FkZXI+LCB1aW50
NjRfdD4gbV9pY29uTG9hZGVyczsKICAgICBWZWN0b3I8TGlua0ljb24+IG1fbGlua0ljb25zOwog
CisgICAgVmVjdG9yPEhUVFBIZWFkZXJGaWVsZD4gbV9hZGRpdGlvbmFsSGVhZGVyRmllbGRzOwor
ICAgIAogICAgIGJvb2wgbV9zdWJyZXNvdXJjZUxvYWRlcnNBcmVQYWdlQ2FjaGVBY2NlcHRhYmxl
IHsgZmFsc2UgfTsKICAgICBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IG1fc2hvdWxkT3Bl
bkV4dGVybmFsVVJMc1BvbGljeSB7IFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3Vs
ZE5vdEFsbG93IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IVFRQSGVhZGVyRmll
bGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IVFRQSGVhZGVyRmll
bGQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IVFRQSGVhZGVy
RmllbGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkhUVFBIZWFkZXJGaWVsZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBSRkM3MjMwIHsKKyAgICAKK3N0YXRpYyBib29sIGlzVG9rZW5DaGFyYWN0ZXIoVUNoYXIg
YykKK3sKKyAgICByZXR1cm4gaXNBU0NJSUFscGhhKGMpIHx8IGlzQVNDSUlEaWdpdChjKQorICAg
ICAgICB8fCBjID09ICchJyB8fCBjID09ICcjJyB8fCBjID09ICckJworICAgICAgICB8fCBjID09
ICclJyB8fCBjID09ICcmJyB8fCBjID09ICdcJycKKyAgICAgICAgfHwgYyA9PSAnKicgfHwgYyA9
PSAnKycgfHwgYyA9PSAnLScKKyAgICAgICAgfHwgYyA9PSAnLicgfHwgYyA9PSAnXicgfHwgYyA9
PSAnXycKKyAgICAgICAgfHwgYyA9PSAnYCcgfHwgYyA9PSAnfCcgfHwgYyA9PSAnfic7Cit9CisK
K3N0YXRpYyBib29sIGlzRGVsaW1pdGVyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIGMgPT0gJygn
IHx8IGMgPT0gJyknIHx8IGMgPT0gJywnCisgICAgICAgIHx8IGMgPT0gJy8nIHx8IGMgPT0gJzon
IHx8IGMgPT0gJzsnCisgICAgICAgIHx8IGMgPT0gJzwnIHx8IGMgPT0gJz0nIHx8IGMgPT0gJz4n
CisgICAgICAgIHx8IGMgPT0gJz8nIHx8IGMgPT0gJ0AnIHx8IGMgPT0gJ1snCisgICAgICAgIHx8
IGMgPT0gJ1xcJyB8fCBjID09ICddJyB8fCBjID09ICd7JworICAgICAgICB8fCBjID09ICd9JyB8
fCBjID09ICciJzsKK30KKworc3RhdGljIGJvb2wgaXNWaXNpYmxlQ2hhcmFjdGVyKFVDaGFyIGMp
Cit7CisgICAgcmV0dXJuIGlzVG9rZW5DaGFyYWN0ZXIoYykgfHwgaXNEZWxpbWl0ZXIoYyk7Cit9
CisKK3N0YXRpYyBib29sIGlzV2hpdGVzcGFjZShVQ2hhciBjKQoreworICAgIHJldHVybiBjID09
ICcgJyB8fCBjID09ICdcdCc7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBtaW4sIHNpemVfdCBtYXg+
CitzdGF0aWMgYm9vbCBpc0luUmFuZ2UoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gYyA+PSBtaW4g
JiYgYyA8PSBtYXg7Cit9CisKK3N0YXRpYyBib29sIGlzT0JTVGV4dChVQ2hhciBjKQoreworICAg
IHJldHVybiBpc0luUmFuZ2U8MHg4MCwgMHhGRj4oYyk7Cit9CisKK3N0YXRpYyBib29sIGlzUXVv
dGVkVGV4dENoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc1doaXRlc3BhY2UoYykK
KyAgICAgICAgfHwgYyA9PSAweDIxCisgICAgICAgIHx8IGlzSW5SYW5nZTwweDIzLCAweDVCPihj
KQorICAgICAgICB8fCBpc0luUmFuZ2U8MHg1RCwgMHg3RT4oYykKKyAgICAgICAgfHwgaXNPQlNU
ZXh0KGMpOworfQorCitzdGF0aWMgYm9vbCBpc1F1b3RlZFBhaXJTZWNvbmRPY3RldChVQ2hhciBj
KQoreworICAgIHJldHVybiBpc1doaXRlc3BhY2UoYykKKyAgICAgICAgfHwgaXNWaXNpYmxlQ2hh
cmFjdGVyKGMpCisgICAgICAgIHx8IGlzT0JTVGV4dChjKTsKK30KKworc3RhdGljIGJvb2wgaXND
b21tZW50VGV4dChVQ2hhciBjKQoreworICAgIHJldHVybiBpc1doaXRlc3BhY2UoYykKKyAgICAg
ICAgfHwgaXNJblJhbmdlPDB4MjEsIDB4Mjc+KGMpCisgICAgICAgIHx8IGlzSW5SYW5nZTwweDJB
LCAweDVCPihjKQorICAgICAgICB8fCBpc0luUmFuZ2U8MHg1RCwgMHg3RT4oYykKKyAgICAgICAg
fHwgaXNPQlNUZXh0KGMpOworfQorCitzdGF0aWMgYm9vbCBpc1ZhbGlkTmFtZShTdHJpbmdWaWV3
IG5hbWUpCit7CisgICAgaWYgKCFuYW1lLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aCgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKCFpc1Rva2VuQ2hhcmFjdGVyKG5hbWVbaV0pKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaXNWYWxpZFZh
bHVlKFN0cmluZ1ZpZXcgdmFsdWUpCit7CisgICAgZW51bSBjbGFzcyBTdGF0ZSB7CisgICAgICAg
IE9wdGlvbmFsV2hpdGVzcGFjZSwKKyAgICAgICAgVG9rZW4sCisgICAgICAgIFF1b3RlZFN0cmlu
ZywKKyAgICAgICAgQ29tbWVudCwKKyAgICB9OworICAgIFN0YXRlIHN0YXRlID0gU3RhdGU6Ok9w
dGlvbmFsV2hpdGVzcGFjZTsKKyAgICBzaXplX3QgY29tbWVudERlcHRoID0gMDsKKyAgICBib29s
IGhhZE5vbldoaXRlc3BhY2UgPSBmYWxzZTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZhbHVlLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IHZhbHVlW2ldOwor
ICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgU3RhdGU6Ok9wdGlvbmFsV2hp
dGVzcGFjZToKKyAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoYykpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBoYWROb25XaGl0ZXNwYWNlID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGlmIChpc1Rva2VuQ2hhcmFjdGVyKGMpKSB7CisgICAgICAgICAgICAgICAgc3RhdGUg
PSBTdGF0ZTo6VG9rZW47CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoYyA9PSAnIicpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0
YXRlOjpRdW90ZWRTdHJpbmc7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoYyA9PSAnKCcpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
IWNvbW1lbnREZXB0aCk7CisgICAgICAgICAgICAgICAgKytjb21tZW50RGVwdGg7CisgICAgICAg
ICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6Q29tbWVudDsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFN0YXRlOjpUb2tlbjoKKyAgICAgICAgICAgIGlmIChpc1Rva2VuQ2hh
cmFjdGVyKGMpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc3RhdGUg
PSBTdGF0ZTo6T3B0aW9uYWxXaGl0ZXNwYWNlOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGNhc2UgU3RhdGU6OlF1b3RlZFN0cmluZzoKKyAgICAgICAgICAgIGlmIChjID09ICciJykg
eworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6Ok9wdGlvbmFsV2hpdGVzcGFjZTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChj
ID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgaWYgKGkg
PT0gdmFsdWUubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWlzUXVvdGVkUGFpclNlY29uZE9jdGV0KHZhbHVlW2ldKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFpc1F1b3RlZFRleHRDaGFyYWN0ZXIo
YykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGNhc2UgU3RhdGU6OkNvbW1lbnQ6CisgICAgICAgICAgICBpZiAoYyA9PSAnKCcp
IHsKKyAgICAgICAgICAgICAgICArK2NvbW1lbnREZXB0aDsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjID09ICcpJykgeworICAgICAg
ICAgICAgICAgIC0tY29tbWVudERlcHRoOworICAgICAgICAgICAgICAgIGlmICghY29tbWVudERl
cHRoKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpPcHRpb25hbFdoaXRlc3Bh
Y2U7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoYyA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAg
IGlmIChpID09IHZhbHVlLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgaWYgKCFpc1F1b3RlZFBhaXJTZWNvbmRPY3RldCh2YWx1ZVtp
XSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaXNDb21tZW50VGV4dChj
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBT
dGF0ZTo6T3B0aW9uYWxXaGl0ZXNwYWNlOgorICAgIGNhc2UgU3RhdGU6OlRva2VuOgorICAgICAg
ICByZXR1cm4gaGFkTm9uV2hpdGVzcGFjZTsKKyAgICBjYXNlIFN0YXRlOjpRdW90ZWRTdHJpbmc6
CisgICAgY2FzZSBTdGF0ZTo6Q29tbWVudDoKKyAgICAgICAgLy8gVW5jbG9zZWQgY29tbWVudHMg
b3IgcXVvdGVzIGFyZSBpbnZhbGlkIHZhbHVlcy4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgUkZDNzIzMAorCitIVFRQSGVhZGVy
RmllbGQ6OkhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmIGZpZWxkKQoreworICAgIHNpemVf
dCBjb2xvbkxvY2F0aW9uID0gZmllbGQuZmluZCgnOicpOworICAgIGlmIChjb2xvbkxvY2F0aW9u
ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmdWaWV3IG5hbWUgPSBT
dHJpbmdWaWV3KGZpZWxkKS5zdWJzdHJpbmcoMCwgY29sb25Mb2NhdGlvbikuc3RyaXBMZWFkaW5n
QW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhSRkM3MjMwOjppc1doaXRlc3BhY2UpOworICAg
IFN0cmluZ1ZpZXcgdmFsdWUgPSBTdHJpbmdWaWV3KGZpZWxkKS5zdWJzdHJpbmcoY29sb25Mb2Nh
dGlvbiArIDEpLnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoUkZDNzIz
MDo6aXNXaGl0ZXNwYWNlKTsKKyAgICBpZiAoIVJGQzcyMzA6OmlzVmFsaWROYW1lKG5hbWUpIHx8
ICFSRkM3MjMwOjppc1ZhbGlkVmFsdWUodmFsdWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2ZpZWxkID0gbWFrZVN0cmluZyhuYW1lLCAnOicsICcgJywgIHZhbHVlKTsKK30KKworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IVFRQSGVhZGVyRmllbGQuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSFRUUEhlYWRlckZpZWxkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSFRUUEhlYWRlckZp
ZWxkIHsKK3B1YmxpYzoKKyAgICBIVFRQSGVhZGVyRmllbGQoY29uc3QgU3RyaW5nJik7CisgICAg
CisgICAgY29uc3QgU3RyaW5nJiBmaWVsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmllbGQ7IH0KKwor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxIVFRQSGVh
ZGVyRmllbGQ+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fZmll
bGQ7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBIVFRQSGVhZGVyRmllbGQ6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9maWVs
ZDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8SFRUUEhlYWRl
ckZpZWxkPiBIVFRQSGVhZGVyRmllbGQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAg
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBmaWVsZDsKKyAgICBkZWNvZGVyID4+IGZpZWxkOworICAg
IGlmICghZmllbGQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4g
e3sgV1RGTW92ZSgqZmllbGQpIH19OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkocmV2aXNpb24gMjIyMjMzKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAxNy0wOS0yMCAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBpbmZyYXN0cnVjdHVy
ZSBmb3IgYWRkaW5nIGN1c3RvbSBoZWFkZXJzIHRvIHJlcXVlc3RzIHBlciB3ZWJzaXRlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyNTUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9XZWJz
aXRlUG9saWNpZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZVBvbGljaWVz
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVQb2xpY2llczo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZVBvbGljaWVzOjpkZWNvZGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
L1dLV2Vic2l0ZVBvbGljaWVzLmNwcDoKKyAgICAgICAgKFdLV2Vic2l0ZVBvbGljaWVzQ29weUFk
ZGl0aW9uYWxDdXN0b21IZWFkZXJGaWVsZHMpOgorICAgICAgICAoV0tXZWJzaXRlUG9saWNpZXNT
ZXRBZGRpdGlvbmFsQ3VzdG9tSGVhZGVyRmllbGRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0MvV0tXZWJzaXRlUG9saWNpZXMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19X
S1dlYnNpdGVQb2xpY2llcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vi
c2l0ZVBvbGljaWVzLm1tOgorICAgICAgICAoLVtfV0tXZWJzaXRlUG9saWNpZXMgYWRkaXRpb25h
bEN1c3RvbUhlYWRlckZpZWxkc10pOgorICAgICAgICAoLVtfV0tXZWJzaXRlUG9saWNpZXMgc2V0
QWRkaXRpb25hbEN1c3RvbUhlYWRlckZpZWxkczpdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbik6CisKIDIwMTctMDktMTkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBBbGxvdyBtb2Rlcm4gZGVjb2Rpbmcgb2YgVmVjdG9ycwpJbmRl
eDogU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXMuaAkocmV2aXNpb24gMjIyMTky
KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDkgKzI1LDExIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8V2ViQ29y
ZS9IVFRQSGVhZGVyRmllbGQuaD4KICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1
ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC00OCw2ICs1MCw3IEBA
IHN0cnVjdCBXZWJzaXRlUG9saWNpZXMgewogICAgIGJvb2wgY29udGVudEJsb2NrZXJzRW5hYmxl
ZCB7IHRydWUgfTsKICAgICBPcHRpb25TZXQ8V2Vic2l0ZUF1dG9wbGF5UXVpcms+IGFsbG93ZWRB
dXRvcGxheVF1aXJrczsKICAgICBXZWJzaXRlQXV0b3BsYXlQb2xpY3kgYXV0b3BsYXlQb2xpY3kg
eyBXZWJzaXRlQXV0b3BsYXlQb2xpY3k6OkRlZmF1bHQgfTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6
SFRUUEhlYWRlckZpZWxkPiBhZGRpdGlvbmFsSGVhZGVyRmllbGRzOwogCiAgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVQb2xpY2llcz4gZGVj
b2RlKERlY29kZXImKTsKQEAgLTc2LDYgKzc5LDcgQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBXZWJzaXRlUG9saQogICAgIGVuY29kZXIgPDwgY29udGVudEJsb2NrZXJzRW5hYmxlZDsK
ICAgICBlbmNvZGVyIDw8IGF1dG9wbGF5UG9saWN5OwogICAgIGVuY29kZXIgPDwgYWxsb3dlZEF1
dG9wbGF5UXVpcmtzOworICAgIGVuY29kZXIgPDwgYWRkaXRpb25hbEhlYWRlckZpZWxkczsKIH0K
IAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxXZWJzaXRlUG9saWNpZXM+
IFdlYnNpdGVQb2xpY2llczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCkBAIC05NCwxMSArOTgs
MTcgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxXZQogICAgIGRlY29k
ZXIgPj4gYWxsb3dlZEF1dG9wbGF5UXVpcmtzOwogICAgIGlmICghYWxsb3dlZEF1dG9wbGF5UXVp
cmtzKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIAorICAgIHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZD4+IGFkZGl0aW9uYWxIZWFkZXJGaWVs
ZHM7CisgICAgZGVjb2RlciA+PiBhZGRpdGlvbmFsSGVhZGVyRmllbGRzOworICAgIGlmICghYWRk
aXRpb25hbEhlYWRlckZpZWxkcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAg
IHJldHVybiB7IHsKICAgICAgICAgV1RGTW92ZSgqY29udGVudEJsb2NrZXJzRW5hYmxlZCksCiAg
ICAgICAgIFdURk1vdmUoKmFsbG93ZWRBdXRvcGxheVF1aXJrcyksCiAgICAgICAgIFdURk1vdmUo
KmF1dG9wbGF5UG9saWN5KSwKKyAgICAgICAgV1RGTW92ZSgqYWRkaXRpb25hbEhlYWRlckZpZWxk
cyksCiAgICAgfSB9OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
V2Vic2l0ZVBvbGljaWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSVdlYnNpdGVQb2xpY2llcy5oCShyZXZpc2lvbiAyMjIxOTIpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDYgKzQ2LDkgQEAgcHVibGljOgogICAgIFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UG9saWN5
IGF1dG9wbGF5UG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlUG9saWNpZXMuYXV0b3Bs
YXlQb2xpY3k7IH0KICAgICB2b2lkIHNldEF1dG9wbGF5UG9saWN5KFdlYktpdDo6V2Vic2l0ZUF1
dG9wbGF5UG9saWN5IHBvbGljeSkgeyBtX3dlYnNpdGVQb2xpY2llcy5hdXRvcGxheVBvbGljeSA9
IHBvbGljeTsgfQogCisgICAgdm9pZCBzZXRBZGRpdGlvbmFsSGVhZGVyRmllbGRzKFZlY3RvcjxX
ZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ+JiYgYWRkaXRpb25hbEhlYWRlckZpZWxkcykgeyBtX3dl
YnNpdGVQb2xpY2llcy5hZGRpdGlvbmFsSGVhZGVyRmllbGRzID0gV1RGTW92ZShhZGRpdGlvbmFs
SGVhZGVyRmllbGRzKTsgfTsKKyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRlckZp
ZWxkPiBhZGRpdGlvbmFsSGVhZGVyRmllbGRzKCkgeyByZXR1cm4gbV93ZWJzaXRlUG9saWNpZXMu
YWRkaXRpb25hbEhlYWRlckZpZWxkczsgfQorCiAgICAgY29uc3QgV2ViS2l0OjpXZWJzaXRlUG9s
aWNpZXMmIHdlYnNpdGVQb2xpY2llcygpIHsgcmV0dXJuIG1fd2Vic2l0ZVBvbGljaWVzOyB9CiAg
ICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlUG9saWNpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLV2Vic2l0ZVBvbGljaWVzLmNwcAkocmV2aXNpb24gMjIyMTkyKQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlUG9saWNpZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw4ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldLV2Vi
c2l0ZVBvbGljaWVzLmgiCiAKKyNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVdl
YnNpdGVQb2xpY2llcy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQXJy
YXkuaCIKICNpbmNsdWRlICJXZWJzaXRlUG9saWNpZXMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKQEAgLTUyLDYgKzU0LDMwIEBAIGJvb2wgV0tXZWJzaXRlUG9saWNpZXNHZXRDb250ZW50
QmxvY2tlcnMKICAgICByZXR1cm4gdG9JbXBsKHdlYnNpdGVQb2xpY2llcyktPmNvbnRlbnRCbG9j
a2Vyc0VuYWJsZWQoKTsKIH0KIAorV0tfRVhQT1JUIFdLQXJyYXlSZWYgV0tXZWJzaXRlUG9saWNp
ZXNDb3B5QWRkaXRpb25hbEN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1JlZiB3
ZWJzaXRlUG9saWNpZXMpCit7CisgICAgY29uc3QgYXV0byYgZmllbGRzID0gdG9JbXBsKHdlYnNp
dGVQb2xpY2llcyktPmFkZGl0aW9uYWxIZWFkZXJGaWVsZHMoKTsKKyAgICBWZWN0b3I8UmVmUHRy
PEFQSTo6T2JqZWN0Pj4gc3RyaW5nczsKKyAgICBzdHJpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoZmllbGRzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBmaWVsZCA6IGZpZWxkcykK
KyAgICAgICAgc3RyaW5ncy51bmNoZWNrZWRBcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0ZShmaWVs
ZC5maWVsZCgpKSk7CisgICAgcmV0dXJuIHRvQVBJKEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3Zl
KHN0cmluZ3MpKS5wdHIoKSk7Cit9CisKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZVBvbGljaWVz
U2V0QWRkaXRpb25hbEN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1JlZiB3ZWJz
aXRlUG9saWNpZXMsIFdLQXJyYXlSZWYgYXJyYXkpCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IFdL
QXJyYXlHZXRTaXplKGFycmF5KTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxk
PiBmaWVsZHM7CisgICAgZmllbGRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFdlYkNvcmU6
OkhUVFBIZWFkZXJGaWVsZCBwYXJzZWRGaWVsZCh0b0ltcGwoc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChhcnJheSwgaSkpKS0+c3RyaW5nKCkpOworICAgICAg
ICBpZiAoIXBhcnNlZEZpZWxkLmZpZWxkKCkuaXNOdWxsKCkKKyAgICAgICAgICAgICYmIHBhcnNl
ZEZpZWxkLmZpZWxkKCkuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCJYLSIpKSAvLyBMZXQn
cyBqdXN0IHByZXRlbmQgUkZDNjY0OCBuZXZlciBoYXBwZW5lZC4KKyAgICAgICAgICAgIGZpZWxk
cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShwYXJzZWRGaWVsZCkpOworICAgIH0KKyAgICB0b0lt
cGwod2Vic2l0ZVBvbGljaWVzKS0+c2V0QWRkaXRpb25hbEhlYWRlckZpZWxkcyhXVEZNb3ZlKGZp
ZWxkcykpOworfQorCiB2b2lkIFdLV2Vic2l0ZVBvbGljaWVzU2V0QWxsb3dlZEF1dG9wbGF5UXVp
cmtzKFdLV2Vic2l0ZVBvbGljaWVzUmVmIHdlYnNpdGVQb2xpY2llcywgV0tXZWJzaXRlQXV0b3Bs
YXlRdWlyayBhbGxvd2VkUXVpcmtzKQogewogICAgIE9wdGlvblNldDxXZWJzaXRlQXV0b3BsYXlR
dWlyaz4gcXVpcmtzOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlUG9saWNpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS1dlYnNpdGVQb2xpY2llcy5oCShyZXZpc2lvbiAyMjIxOTIpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVQb2xpY2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw2ICs1MSw5IEBAIFdLX0VYUE9SVCBXS1dlYnNpdGVQb2xpY2llc1JlZiBXS1dlYnNpdGUKIFdL
X0VYUE9SVCBib29sIFdLV2Vic2l0ZVBvbGljaWVzR2V0Q29udGVudEJsb2NrZXJzRW5hYmxlZChX
S1dlYnNpdGVQb2xpY2llc1JlZik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVQb2xpY2llc1Nl
dENvbnRlbnRCbG9ja2Vyc0VuYWJsZWQoV0tXZWJzaXRlUG9saWNpZXNSZWYsIGJvb2wpOwogCitX
S19FWFBPUlQgV0tBcnJheVJlZiBXS1dlYnNpdGVQb2xpY2llc0NvcHlBZGRpdGlvbmFsQ3VzdG9t
SGVhZGVyRmllbGRzKFdLV2Vic2l0ZVBvbGljaWVzUmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLV2Vi
c2l0ZVBvbGljaWVzU2V0QWRkaXRpb25hbEN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xp
Y2llc1JlZiwgV0tBcnJheVJlZik7CisKIFdLX0VYUE9SVCBXS1dlYnNpdGVBdXRvcGxheVF1aXJr
IFdLV2Vic2l0ZVBvbGljaWVzR2V0QWxsb3dlZEF1dG9wbGF5UXVpcmtzKFdLV2Vic2l0ZVBvbGlj
aWVzUmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZVBvbGljaWVzU2V0QWxsb3dlZEF1dG9w
bGF5UXVpcmtzKFdLV2Vic2l0ZVBvbGljaWVzUmVmLCBXS1dlYnNpdGVBdXRvcGxheVF1aXJrKTsK
IApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xp
Y2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tXZWJzaXRlUG9saWNpZXMuaAkocmV2aXNpb24gMjIyMTkyKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw2ICs0NSw3IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAuMTIuMyksIGlvcygK
IEBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQ7CiBAcHJv
cGVydHkgKG5vbmF0b21pYykgX1dLV2Vic2l0ZUF1dG9wbGF5UXVpcmsgYWxsb3dlZEF1dG9wbGF5
UXVpcmtzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEzKSwgaW9zKDExLjApKTsKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljKSBfV0tXZWJzaXRlQXV0b3BsYXlQb2xpY3kgYXV0b3BsYXlQb2xpY3kg
V0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTMpLCBpb3MoMTEuMCkpOworQHByb3BlcnR5IChu
b25hdG9taWMsIGNvcHksIHNldHRlcj1zZXRBZGRpdGlvbmFsQ3VzdG9tSGVhZGVyRmllbGRzOikg
TlNBcnJheTxOU1N0cmluZyAqPiAqYWRkaXRpb25hbEN1c3RvbUhlYWRlckZpZWxkcyBXS19BUElf
QVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogQGVuZAog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vic2l0ZVBvbGlj
aWVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tXZWJzaXRlUG9saWNpZXMubW0JKHJldmlzaW9uIDIyMjE5MikKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJzaXRlUG9saWNpZXMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTExNiw2ICsxMTYsMjggQEAgLSAoX1dLV2Vic2l0ZUF1dG9wbGF5UG9saWN5KWF1dG9wbGF5
UG9saQogICAgIH0KIH0KIAorLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKWFkZGl0aW9uYWxDdXN0
b21IZWFkZXJGaWVsZHMKK3sKKyAgICBjb25zdCBhdXRvJiBmaWVsZHMgPSBfd2Vic2l0ZVBvbGlj
aWVzLT5hZGRpdGlvbmFsSGVhZGVyRmllbGRzKCk7CisgICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5
ID0gW1tbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6ZmllbGRzLnNpemUo
KV0gYXV0b3JlbGVhc2VdOworICAgIGZvciAoY29uc3QgYXV0byYgZmllbGQgOiBmaWVsZHMpCisg
ICAgICAgIFthcnJheSBhZGRPYmplY3Q6ZmllbGQuZmllbGQoKV07CisgICAgcmV0dXJuIGFycmF5
OworfQorCistICh2b2lkKXNldEFkZGl0aW9uYWxDdXN0b21IZWFkZXJGaWVsZHM6KE5TQXJyYXk8
TlNTdHJpbmcgKj4gKilmaWVsZHMKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRlckZp
ZWxkPiBwYXJzZWRGaWVsZHM7CisgICAgcGFyc2VkRmllbGRzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoZmllbGRzLmNvdW50KTsKKyAgICBmb3IgKE5TU3RyaW5nICpzdHJpbmcgaW4gZmllbGRzKSB7
CisgICAgICAgIFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZCBwYXJzZWRGaWVsZChzdHJpbmcpOwor
ICAgICAgICBpZiAoIXBhcnNlZEZpZWxkLmZpZWxkKCkuaXNOdWxsKCkKKyAgICAgICAgICAgICYm
IHBhcnNlZEZpZWxkLmZpZWxkKCkuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCJYLSIpKSAv
LyBMZXQncyBqdXN0IHByZXRlbmQgUkZDNjY0OCBuZXZlciBoYXBwZW5lZC4KKyAgICAgICAgICAg
IHBhcnNlZEZpZWxkcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShwYXJzZWRGaWVsZCkpOworICAg
IH0KKyAgICBfd2Vic2l0ZVBvbGljaWVzLT5zZXRBZGRpdGlvbmFsSGVhZGVyRmllbGRzKFdURk1v
dmUocGFyc2VkRmllbGRzKSk7Cit9CisKIC0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KIHsKICAg
ICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUA6ICVwOyBjb250ZW50Qmxv
Y2tlcnNFbmFibGVkID0gJWQ+IiwgTlNTdHJpbmdGcm9tQ2xhc3Moc2VsZi5jbGFzcyksIHNlbGYs
IHNlbGYuY29udGVudEJsb2NrZXJzRW5hYmxlZF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5jcHAJKHJldmlzaW9uIDIyMjE5MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyMSw2ICs4MjEsOCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERl
Y2lkCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBkb2N1bWVudExvYWRlci0+c2V0QWRk
aXRpb25hbEhlYWRlckZpZWxkcyhXVEZNb3ZlKHdlYnNpdGVQb2xpY2llcy5hZGRpdGlvbmFsSGVh
ZGVyRmllbGRzKSk7CisgICAgCiAgICAgLy8gT25seSBzZXRVc2VyQ29udGVudEV4dGVuc2lvbnNF
bmFibGVkIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gZGlzYWJsZWQgYnkgcmVsb2FkaW5nIHdp
dGhvdXQgY29udGVudCBibG9ja2Vycy4KICAgICBpZiAoZG9jdW1lbnRMb2FkZXItPnVzZXJDb250
ZW50RXh0ZW5zaW9uc0VuYWJsZWQoKSkKICAgICAgICAgZG9jdW1lbnRMb2FkZXItPnNldFVzZXJD
b250ZW50RXh0ZW5zaW9uc0VuYWJsZWQod2Vic2l0ZVBvbGljaWVzLmNvbnRlbnRCbG9ja2Vyc0Vu
YWJsZWQpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjIyMjczKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDktMjAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgaW5mcmFzdHJ1Y3R1cmUgZm9yIGFkZGlu
ZyBjdXN0b20gaGVhZGVycyB0byByZXF1ZXN0cyBwZXIgd2Vic2l0ZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjU1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvSFRUUEhlYWRlckZpZWxkLmNwcDogQWRkZWQuCisgICAgICAgIChzaG91
bGRSZW1haW5VbmNoYW5nZWQpOgorICAgICAgICAoc2hvdWxkQmVJbnZhbGlkKToKKyAgICAgICAg
KHNob3VsZEJlY29tZSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVQb2xpY2llcy5tbToKKyAgICAgICAgKFRFU1QpOgor
CiAyMDE3LTA5LTIwICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbV2luXSBDeWd3aW4gNjQtYml0IEVXUyBwcm9jZXNzIGNhbm5vdCBmaW5kIFZpc3VhbCBT
dHVkaW8gaW5zdGFsbGF0aW9uLgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDIyMjE5MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNiArMjM1LDcgQEAKIAkJNUM5
RTU5NDExRDNFQjVBQzAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGIgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU5M0UxRDNFQjFE
RTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGIgKi87IH07CiAJCTVDOUU1OTQyMUQzRUI1
QUMwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXNobSBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTkzRjFEM0VCMURFMDBFM0M2
MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi1zaG0gKi87IH07CiAJCTVDOUU1OTQzMUQzRUI1QUMw
MEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXdhbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTk0MDFEM0VCMURFMDBFM0M2MkUg
LyogQXBwbGljYXRpb25DYWNoZS5kYi13YWwgKi87IH07CisJCTVDQTFERUM4MUY3MUY3MDEwMEU3
MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNBMURFQzcxRjcxRjQwNzAwRTcxQkQzIC8qIEhUVFBIZWFkZXJG
aWVsZC5jcHAgKi87IH07CiAJCTVDQjE4QkE4MUY1NjQ1RTMwMEVFMjNDNCAvKiBDbGlja0F1dG9G
aWxsQnV0dG9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUNCMThCQTcxRjU2NDVCMjAwRUUyM0M0IC8qIENsaWNrQXV0b0ZpbGxCdXR0b24ubW0gKi87
IH07CiAJCTVDQjQwQjRFMUY0Qjk4RDMwMDdEQzdCOSAvKiBVSURlbGVnYXRlLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCNDBCNEQxRjRCOThCRTAw
N0RDN0I5IC8qIFVJRGVsZWdhdGUubW0gKi87IH07CiAJCTVDRTM1NEQ5MUU3MERBNUMwMEJFRkUz
QiAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTM1NEQ4MUU3MEQ5QzMwMEJFRkUzQiAvKiBXS0NvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbSAqLzsgfTsKQEAgLTEzMjksNiArMTMzMCw3IEBACiAJCTVDOUU1
OTNFMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IEFwcGxpY2F0
aW9uQ2FjaGUuZGI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUU1OTNGMUQzRUIx
REUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXNobSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSAiQXBwbGljYXRpb25D
YWNoZS5kYi1zaG0iOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlFNTk0MDFEM0VC
MURFMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi13YWwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gIkFwcGxpY2F0aW9u
Q2FjaGUuZGItd2FsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNBMURFQzcxRjcx
RjQwNzAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBIVFRQSGVhZGVyRmllbGQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1Q0IxOEJBNzFGNTY0NUIyMDBFRTIzQzQgLyogQ2xpY2tBdXRvRmlsbEJ1dHRv
bi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENsaWNrQXV0b0Zp
bGxCdXR0b24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQjQwQjREMUY0Qjk4
QkUwMDdEQzdCOSAvKiBVSURlbGVnYXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gVUlEZWxlZ2F0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUNFMzU0RDgxRTcwRDlDMzAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDc4LDYgKzIwODAsNyBA
QAogCQkJCTFDQUQxRjg1MUU1Q0U3REEwMEFGMkMyQyAvKiBGb250Q2FjaGUuY3BwICovLAogCQkJ
CThFNEE4NTM2MUUxRDFBQTEwMEY1M0IwRiAvKiBHcmlkUG9zaXRpb24uY3BwICovLAogCQkJCTgz
Qjg4QTMzMUM4MDA1NkQwMEJCMjQxOCAvKiBIVE1MUGFyc2VySWRpb21zLmNwcCAqLywKKwkJCQk1
Q0ExREVDNzFGNzFGNDA3MDBFNzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmNwcCAqLywKIAkJCQk3
QTkwOUE3MzFEODc3NDc1MDA3RTEwRjggLyogSW50UG9pbnQuY3BwICovLAogCQkJCTdBOTA5QTc0
MUQ4Nzc0NzUwMDdFMTBGOCAvKiBJbnRSZWN0LmNwcCAqLywKIAkJCQk3QTkwOUE3NTFEODc3NDc1
MDA3RTEwRjggLyogSW50U2l6ZS5jcHAgKi8sCkBAIC0zMjM1LDYgKzMyMzgsNyBAQAogCQkJCTdD
Q0U3RUMxMUE0MTFBN0UwMDQ0N0M0QyAvKiBIVE1MQ29sbGVjdGlvbk5hbWVkSXRlbS5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTdDQ0U3RUMyMUE0MTFBN0UwMDQ0N0M0QyAvKiBIVE1MRm9ybUNvbGxl
Y3Rpb25OYW1lZEl0ZW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QzgzRTA1MDFEMEE2NDE4MDBG
RUJDRjMgLyogSFRNTFBhcnNlcklkaW9tcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0ExREVD
ODFGNzFGNzAxMDBFNzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxQUYyM0RGMUVGMUEzNzMwMDcyRjI4MSAvKiBJY29uTG9hZGluZ0RlbGVnYXRlLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTEwNDc3NzgxRDI5OTIzQjAwOTc0N0VCIC8qIElEQkRlbGV0ZVJl
Y292ZXJ5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExMEZDRkExRTAxQ0RCODAwNkY4RDBCIC8q
IElEQkluZGV4VXBncmFkZVRvVjIubW0gaW4gU291cmNlcyAqLywKQEAgLTM0NzMsNiArMzQ3Nyw3
IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJ
MzdFN0RENjcxRUEwNzFGMzAwOUIzOTZEIC8qIEFkZGl0aW9uYWxSZWFkQWNjZXNzQWxsb3dlZFVS
THNQbHVnaW4ubW0gaW4gU291cmNlcyAqLywKKwkJCQk3NTRDRUM4MTFGNjcyMkYyMDBEMDAzOUEg
LyogQXV0b0ZpbGxBdmFpbGFibGUubW0gaW4gU291cmNlcyAqLywKIAkJCQkzNzRCN0E2MTFERjM3
MUNGMDBBQ0NCNkMgLyogQnVuZGxlRWRpdGluZ0RlbGVnYXRlUGx1Z0luLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTEzRUJCQjAxQjg3NDM2RjAwMDk3MTEwIC8qIEJ1bmRsZVBhcmFtZXRlcnNQbHVn
SW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQkzN0E3MDlBRjFFM0VBOTdFMDBDQTU5NjkgLyogQnVu
ZGxlUmFuZ2VIYW5kbGVQbHVnSW4ubW0gaW4gU291cmNlcyAqLywKQEAgLTM0ODEsNyArMzQ4Niw2
IEBACiAJCQkJQTE0RkM1OEIxQjg5OTI3MTAwRDEwN0VCIC8qIENvbnRlbnRGaWx0ZXJpbmdQbHVn
SW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTNFQkJBQjFCODc0MzQ2MDAwOTcxMTAgLyogUGxh
dGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNEY4MUNGMUJERkZE
NTMwMDRFNjcyRSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeVBsdWdJbi5tbSBpbiBTb3VyY2VzICov
LAotCQkJCTc1NENFQzgxMUY2NzIyRjIwMEQwMDM5QSAvKiBBdXRvRmlsbEF2YWlsYWJsZS5tbSBp
biBTb3VyY2VzICovLAogCQkJCUExMkREQzAyMUU4MzdDMjQwMENGNkNBRSAvKiBSZW5kZXJlZElt
YWdlV2l0aE9wdGlvbnNQbHVnSW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Qzg4MkUwOTFDODBD
NjMwMDA2QkY3MzEgLyogVXNlckNvbnRlbnRXb3JsZFBsdWdJbi5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTdDODNFMDNEMUQwQTYwRDYwMEZFQkNGMyAvKiBVdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0hUVFBIZWFk
ZXJGaWVsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0hUVFBIZWFkZXJGaWVsZC5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0hUVFBIZWFkZXJGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0LmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9IVFRQSGVhZGVyRmllbGQuaD4KKworc3RhdGljIHZvaWQgc2hvdWxkUmVtYWluVW5j
aGFuZ2VkKFZlY3RvcjxTdHJpbmc+JiYgc3RyaW5ncykKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHN0cmluZyA6IHN0cmluZ3MpCisgICAgICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OkhUVFBIZWFk
ZXJGaWVsZChzdHJpbmcpLmZpZWxkKCkgPT0gc3RyaW5nKTsKK30KKworc3RhdGljIHZvaWQgc2hv
dWxkQmVJbnZhbGlkKFZlY3RvcjxTdHJpbmc+JiYgc3RyaW5ncykKK3sKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHN0cmluZyA6IHN0cmluZ3MpCisgICAgICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OkhU
VFBIZWFkZXJGaWVsZChzdHJpbmcpLmZpZWxkKCkgPT0gU3RyaW5nKCkpOworfQorCitzdGF0aWMg
dm9pZCBzaG91bGRCZWNvbWUoVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+JiYgcGFp
cnMpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogcGFpcnMpCisgICAgICAgIEVYUEVD
VF9UUlVFKFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZChwYWlyLmZpcnN0KS5maWVsZCgpID09IHBh
aXIuc2Vjb25kKTsKK30KKworVEVTVChIVFRQSGVhZGVyRmllbGQsIFBhcnNlcikKK3sKKyAgICBz
dGF0aWMgY29uc3QgY2hhciBub25BU0NJSUNvbW1lbnRbOF0gPSB7J2EnLCAnOicsICcgJywgJygn
LCAweDIxLCBzdGF0aWNfY2FzdDxjaGFyPigweEZGKSwgJyknLCAnXDAnfTsKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciBub25BU0NJSVF1b3RlZFBhaXJJbkNvbW1lbnRbOF0gPSB7J2EnLCAnOicsICcg
JywgJygnLCAnXFwnLCBzdGF0aWNfY2FzdDxjaGFyPigweEZGKSwgJyknLCAnXDAnfTsKKyAgICBz
dGF0aWMgY29uc3QgY2hhciBub25BU0NJSVF1b3RlZFBhaXJJblF1b3RlWzhdID0geydhJywgJzon
LCAnICcsICciJywgJ1xcJywgc3RhdGljX2Nhc3Q8Y2hhcj4oMHhGRiksICciJywgJ1wwJ307Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIgZGVsSW5RdW90ZVs3XSA9IHsnYScsICc6JywgJyAnLCAnIics
IHN0YXRpY19jYXN0PGNoYXI+KDB4N0YpLCAnIicsICdcMCd9OworCisgICAgc2hvdWxkUmVtYWlu
VW5jaGFuZ2VkKHsKKyAgICAgICAgImE6IGIiLAorICAgICAgICAiYTogYiBjIiwKKyAgICAgICAg
IiE6IGIiLAorICAgICAgICAiYTogKCkiLAorICAgICAgICAiYTogKFxcICkiLAorICAgICAgICAi
YTogKCgpKSIsCisgICAgICAgICJhOiBcIlwiIiwKKyAgICAgICAgImE6IFwiYUE/XHQgXCIiLAor
ICAgICAgICAiYTogXCJhXCIgKGIpICgoYykpIiwKKyAgICAgICAgbm9uQVNDSUlDb21tZW50LAor
ICAgICAgICBub25BU0NJSVF1b3RlZFBhaXJJbkNvbW1lbnQsCisgICAgICAgIG5vbkFTQ0lJUXVv
dGVkUGFpckluUXVvdGUsCisgICAgfSk7CisgICAgCisgICAgc2hvdWxkQmVJbnZhbGlkKHsKKyAg
ICAgICAgImE6IiwKKyAgICAgICAgImE6ICIsCisgICAgICAgICJhOiBccmIiLAorICAgICAgICAi
YTogXG5iIiwKKyAgICAgICAgImE6IFx2YiIsCisgICAgICAgICJcYTogYiIsCisgICAgICAgICI/
OiBiIiwKKyAgICAgICAgImE6IFxhYiIsCisgICAgICAgICJhOiAoXFxcYSkiLAorICAgICAgICAi
YTogKFxcXGEpIiwKKyAgICAgICAgImE6ICgiLAorICAgICAgICAiYTogKCgpIiwKKyAgICAgICAg
ImE6IChcYSkiLAorICAgICAgICAiYTogXCJcYVwiIiwKKyAgICAgICAgImE6IFwiYVwiIChiKX0o
KGMpKSIsCisgICAgICAgIGRlbEluUXVvdGUsCisgICAgfSk7CisgICAgCisgICAgc2hvdWxkQmVj
b21lKHsKKyAgICAgICAgeyAiYTogYiAiLCAiYTogYiIgfSwKKyAgICAgICAgeyAiIGE6IGIiLCAi
YTogYiIgfSwKKyAgICAgICAgeyAiYTogXHRiIiwgImE6IGIiIH0sCisgICAgICAgIHsgIiBhOiBi
IGMgIiwgImE6IGIgYyIgfSwKKyAgICAgICAgeyAiYTogIGIgIiwgImE6IGIiIH0sCisgICAgICAg
IHsgImE6XHRiIiwgImE6IGIiIH0sCisgICAgICAgIHsgIlx0YTpcdCBiXHQiLCAiYTogYiIgfSwK
KyAgICAgICAgeyAiYTogXCJhXCIgKGIpICIsICJhOiBcImFcIiAoYikiIH0sCisgICAgfSk7Cit9
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVQb2xp
Y2llcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dlYnNpdGVQb2xpY2llcy5tbQkocmV2aXNpb24gMjIyMTkyKQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlUG9saWNpZXMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTYyMiw2ICs2MjIsMTggQEAgVEVTVChXZWJLaXQsIFdlYnNpdGVQb2xpY2llc0F1dG9w
bGF5UXVpcgogICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwbGF5
KCkiXTsKICAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAInBsYXlpbmciXTsKIH0KLSNlbmRp
ZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAotI2VuZGlmCitURVNUKFdlYktpdCwgSW52YWxp
ZEN1c3RvbUhlYWRlcnMpCit7CisgICAgYXV0byB3ZWJzaXRlUG9saWNpZXMgPSBhZG9wdE5TKFtb
X1dLV2Vic2l0ZVBvbGljaWVzIGFsbG9jXSBpbml0XSk7CisgICAgW3dlYnNpdGVQb2xpY2llcyBz
ZXRBZGRpdGlvbmFsQ3VzdG9tSGVhZGVyRmllbGRzOkBbQCJpbnZhbGlkaGVhZGVyOiIsIEAibm9u
Y3VzdG9tOiBoZWFkZXIiLCBAIlgtY3VzdG9tOiBoZWFkZXIiLCBAIiAgICB4LUN1c3RvbSA6ICBO
ZWVkcyBDYW5vbmljYWxpemF0aW9uXHQgIl1dOworICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmNh
bm9uaWNhbGl6ZWQgPSBbd2Vic2l0ZVBvbGljaWVzIGFkZGl0aW9uYWxDdXN0b21IZWFkZXJGaWVs
ZHNdOworICAgIEVYUEVDVF9FUShjYW5vbmljYWxpemVkLmNvdW50LCAydSk7CisgICAgRVhQRUNU
X1NUUkVRKFtjYW5vbmljYWxpemVkIG9iamVjdEF0SW5kZXg6MF0uVVRGOFN0cmluZywgIlgtY3Vz
dG9tOiBoZWFkZXIiKTsKKyAgICBFWFBFQ1RfU1RSRVEoW2Nhbm9uaWNhbGl6ZWQgb2JqZWN0QXRJ
bmRleDoxXS5VVEY4U3RyaW5nLCAieC1DdXN0b206IE5lZWRzIENhbm9uaWNhbGl6YXRpb24iKTsK
K30KKworLy8gRklYTUU6IEFwcGx5IHRoZSBhZGRpdGlvbmFsIGhlYWRlcnMgZnJvbSB0aGUgRG9j
dW1lbnRMb2FkZXIgdG8gZWFjaCByZXF1ZXN0IGFuZCB0ZXN0IHRoYXQgdGhleSBhcmUgc2VudCBv
biBtYWluIHJlc291cmNlIGFuZCBzdWJyZXNvdXJjZXMuCisKKyNlbmRpZiAvLyBXS19BUElfRU5B
QkxFRAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321340</attachid>
            <date>2017-09-20 12:08:04 -0700</date>
            <delta_ts>2017-09-20 16:39:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177255-20170920120805.patch</filename>
            <type>text/plain</type>
            <size>40296</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTA5LTIwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGluZnJh
c3RydWN0dXJlIGZvciBhZGRpbmcgY3VzdG9tIGhlYWRlcnMgdG8gcmVxdWVzdHMgcGVyIHdlYnNp
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzI1
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvdmVy
ZWQgYnkgQVBJIHRlc3RzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRlci9Eb2N1
bWVudExvYWRlci5jcHA6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0QWRkaXRpb25hbEhlYWRlckZpZWxkcyk6
CisgICAgICAgICogbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UkZDNzIzMDo6aXNUb2tlbkNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpS
RkM3MjMwOjppc0RlbGltaXRlcik6CisgICAgICAgIChXZWJDb3JlOjpSRkM3MjMwOjppc1Zpc2li
bGVDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UkZDNzIzMDo6aXNXaGl0ZXNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJGQzcyMzA6OmlzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSRkM3MjMwOjppc09CU1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6UkZDNzIzMDo6aXNRdW90
ZWRUZXh0Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJGQzcyMzA6OmlzUXVvdGVkUGFp
clNlY29uZE9jdGV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJGQzcyMzA6OmlzQ29tbWVudFRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6UkZDNzIzMDo6aXNWYWxpZE5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UkZDNzIzMDo6aXNWYWxpZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUVFBIZWFk
ZXJGaWVsZDo6SFRUUEhlYWRlckZpZWxkKToKKyAgICAgICAgKiBsb2FkZXIvSFRUUEhlYWRlckZp
ZWxkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjpkZWNvZGUpOgorCiAy
MDE3LTA5LTIwICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW5hbWUgQ2FjaGVTdG9yYWdlIHRvIERPTUNhY2hlU3RvcmFnZQpJbmRleDogU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQJKHJldmlzaW9uIDIyMjI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTA0LDYgKzIxMDQsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgbG9hZGVyL0ZyYW1lTG9hZFJlcXVlc3QuY3BwCiAgICAgbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAogICAgIGxvYWRlci9GcmFtZUxvYWRlclN0YXRlTWFjaGluZS5jcHAKKyAgICBsb2FkZXIv
SFRUUEhlYWRlckZpZWxkLmNwcAogICAgIGxvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAKICAg
ICBsb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCiAgICAgbG9hZGVyL0xpbmtIZWFkZXIuY3BwCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyMjIyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NDEsNiArMjc0MSw4IEBACiAJCTVD
OUE3QTc2MUFBMEY2RUQwMDk1OEFDRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMzkzMDYwMUFBMEY2
QTkwMDI5QzgxNiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNwcCAqLzsgfTsKIAkJNUM5Qjg2
MEMxQzIxRTNDOTAwMTEwRjM2IC8qIE5ldHdvcmtMb2FkTWV0cmljcy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUI4NjBCMUMyMUUzQzYwMDExMEYz
NiAvKiBOZXR3b3JrTG9hZE1ldHJpY3MubW0gKi87IH07CiAJCTVDOUVGMTcxMURGRjcxQ0MwMEE0
NTJFMyAvKiBYUGF0aEdyYW1tYXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUM5RUYxNkYxREZGNzE5OTAwQTQ1MkUzIC8qIFhQYXRoR3JhbW1hci5j
cHAgKi87IH07CisJCTVDQTFERUM1MUY3MUVGOTkwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNBMURF
QzIxRjcxRTY4NjAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5jcHAgKi87IH07CisJCTVDQTFE
RUM2MUY3MUYxQzcwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQTFERUM0MUY3MUU2ODcwMEU3MUJEMyAv
KiBIVFRQSGVhZGVyRmllbGQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1Q0IzN0ZGRTFDNjJEMjhDMDBGMjAxODggLyogU2Nyb2xsQW5pbWF0b3JN
b2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
QjM3RkZDMUM2MkQyNzgwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suY3BwICovOyB9Owog
CQk1Q0IzN0ZGRjFDNjJEMkExMDBGMjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0IzN0ZGRDFDNjJEMjc4
MDBGMjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmggKi87IH07CiAJCTVDQkM4REFDMUFBQTMw
MjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0JDOERBQTFBQUEzMDIyMDBFMUM4
MDMgLyogTWVkaWFBY2Nlc3NpYmlsaXR5U29mdExpbmsuY3BwICovOyB9OwpAQCAtMTA2OTEsNiAr
MTA2OTMsOCBAQAogCQk1QzlCODYwQjFDMjFFM0M2MDAxMTBGMzYgLyogTmV0d29ya0xvYWRNZXRy
aWNzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya0xv
YWRNZXRyaWNzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlFRjE2RjFERkY3
MTk5MDBBNDUyRTMgLyogWFBhdGhHcmFtbWFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFhQYXRoR3JhbW1hci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVDOUVGMTcwMURGRjcxOTkwMEE0NTJFMyAvKiBYUGF0aEdyYW1tYXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhHcmFtbWFyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDQTFERUMyMUY3MUU2ODYwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRUUEhlYWRlckZpZWxk
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNBMURFQzQxRjcxRTY4NzAwRTcx
QkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIVFRQSGVhZGVyRmllbGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCMzdG
RkMxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxBbmltYXRvck1vY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0IzN0ZGRDFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xs
QW5pbWF0b3JNb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbEFu
aW1hdG9yTW9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0JDOERBQTFBQUEz
MDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3NpYmlsaXR5U29mdExpbmsuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFBY2Nlc3NpYmlsaXR5U29mdExpbmsuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ0NDYsNiArMjQ0NTAsOCBAQAogCQkJ
CTUxQzgxQjg4MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuaCAqLywKIAkJ
CQk5N0RDRTFGRjEwODA3Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xsZXIuY3BwICovLAog
CQkJCTk3RENFMjAwMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5oICovLAor
CQkJCTVDQTFERUMyMUY3MUU2ODYwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuY3BwICovLAor
CQkJCTVDQTFERUM0MUY3MUU2ODcwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuaCAqLywKIAkJ
CQkwODk1ODI1MzBFODU3QTdFMDBGODJDODMgLyogSW1hZ2VMb2FkZXIuY3BwICovLAogCQkJCTA4
OTU4MjU0MEU4NTdBN0UwMEY4MkM4MyAvKiBJbWFnZUxvYWRlci5oICovLAogCQkJCUNCQTlEQzA4
MURGNDREQzQwMDA1Njc1QyAvKiBMaW5rSGVhZGVyLmNwcCAqLywKQEAgLTI4MTU0LDYgKzI4MTYw
LDcgQEAKIAkJCQlBRDQ5OTE0MzE4RjA4MTUxMDBCRjAwOTIgLyogSFRNTFVua25vd25FbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQ2MTNBQjBDRDYzMzEwMDBGQURBNzUgLyogSFRNTFZp
ZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM5QUFGRUQxQTBDMEM4RDAwNjA1Rjk5
IC8qIEhUTUxXQlJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0ExREVDNjFGNzFGMUM3
MDBFNzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3
MTBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUEhlYWRlck1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUFCNUVCRDIxOTRBNTBGMzAwNTlBQzcwIC8qIEhUVFBIZWFkZXJOYW1lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDE2MTRBNzkxREE2NDI0MTAwNEFEMDZGIC8qIEhUVFBIZWFkZXJWYWx1ZXMuaCBp
biBIZWFkZXJzICovLApAQCAtMjg4MzIsNyArMjg4MzksNiBAQAogCQkJCTMxNkRDQjIwMUU3OENB
NTUwMDFCNUY4NyAvKiBKU1JUQ09mZmVyQW5zd2VyT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDc5NjlEQkExN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRDUGVlckNvbm5lY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA3OTY5REI4MTdEMTQxNTEwMDdGRjg0MiAvKiBKU1JUQ1BlZXJDb25u
ZWN0aW9uSWNlRXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUUxOEMzNTQ0MUY3MTk3MEMwMEZG
NjMyRCAvKiBXZWJBcmNoaXZlUmVzb3VyY2VXZWJSZXNvdXJjZUhhbmRsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVFMkM0Mzc0MUJDRjBENzUwMDAxRTJCRSAvKiBKU1JUQ1J0cFBhcmFtZXRlcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVFMkM0MzcyMUJDRjBENzUwMDAxRTJCQyAvKiBKU1JUQ1J0
cFJlY2VpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RTJDNDM3NDFCQ0YwRDc1MDAwMUUyQkMg
LyogSlNSVENSdHBTZW5kZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzAzMTcsNyArMzAzMjMsNiBA
QAogCQkJCTA4MDZFNTdBMTI4OTMwNDUwMDdDRUQzMiAvKiBTVkdNYXRyaXguaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA4Q0EzRDQ0MTI4OTRBMzgwMEZGRjI2MCAvKiBTVkdNYXRyaXhUZWFyT2ZmLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3Q0U1OEQ1QzFERDdFQzlDMDAxMjg1NTIgLyogU1ZHTWF0cml4
VmFsdWUuaCBpbiBIZWFkZXJzICovLAotCQkJCUUxODUzNjg0MUY0RTQ4MTQwMEZFMDkxQiAvKiBX
ZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMjIyN0E0QjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTWV0YWRhdGFFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMkExRjJCMTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHTWlzc2luZ0ds
eXBoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBNEUwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR01QYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDY1MSw2ICszMDY1Niw4
IEBACiAJCQkJQUFBNzI4RjcxNkQxRDhCQzAwRDNCQkM2IC8qIFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQTQ3OEE3RjE2Q0Q3MEMzMDA3RDFC
QjQgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJEM0VGNDQ4MTkxNzkxNUMwMDAzNDE4NCAvKiBXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVy
RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxODUzNjg0MUY0RTQ4MTQwMEZFMDkxQiAv
KiBXZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFMThDMzU0NDFGNzE5NzBDMDBGRjYzMkQgLyogV2ViQXJjaGl2ZVJlc291cmNlV2Vi
UmVzb3VyY2VIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREU2NjdBNTFFNEJCRjE1MDBF
ODE1NEEgLyogV2ViQXVkaW9CdWZmZXJMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUIyQTYy
NjFFRjFCRjZEMDAyQjlEN0EgLyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDdENjM3NDAxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlk
ZXJBVkZPYmpDLmggaW4gSGVhZGVycyAqLywKQEAgLTMyMTk5LDYgKzMyMjA2LDcgQEAKIAkJCQlB
OEVBNzlGMzBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTFVMaXN0RWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFNDQ2MTNBQTBDRDYzMzEwMDBGQURBNzUgLyogSFRNTFZpZGVvRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzlBQUZFQzFBMEMwQzhEMDA2MDVGOTkgLyogSFRNTFdC
UkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNBMURFQzUxRjcxRUY5OTAwRTcxQkQz
IC8qIEhUVFBIZWFkZXJGaWVsZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwQjhDNTZENDBGMjg2
MjdGMDAwNTAyRTEgLyogSFRUUEhlYWRlck1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUM5
MDBDMzE5NDNDMEZDMDA4NjI1QjUgLyogSFRUUEhlYWRlck5hbWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQxNjE0QTc4MURBNjQyM0IwMDRBRDA2RiAvKiBIVFRQSGVhZGVyVmFsdWVzLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMzI2NTUsNyArMzI2NjMsNiBAQAogCQkJCUE2MTQ4QTc4MTJFNDFF
M0IwMDQ0QTc4NCAvKiBKU0hUTUxLZXlnZW5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTFBRTJBQjIxMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMYWJlbEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFFMkFCMjMwQTFDRTYzQjAwQjQyQjI1IC8qIEpTSFRNTExlZ2VuZEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTE4QzM1NDMxRjcxOTcwMTAwRkY2MzJEIC8q
IFdlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTFBRTJBQjI1MEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMSUVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTgwRTdCMTAwQTE5RDYwNjAwN0ZCOEM1IC8qIEpTSFRNTExpbmtFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTJBQjI3MEExQ0U2M0IwMEI0MkIyNSAvKiBK
U0hUTUxNYXBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzI4MjMsNyArMzI4MzAsNiBA
QAogCQkJCUExQ0M1Njc4MUY0NjE0QTUwMEE0NTU1QiAvKiBKU1BheW1lbnRSZXF1ZXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUExRjYwMDU3MUY0NzY1MDUwMDc3RTgzRiAvKiBKU1BheW1lbnRS
ZXF1ZXN0VXBkYXRlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFGNjAwNTkxRjQ3NjUw
NTAwNzdFODNGIC8qIEpTUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudEluaXQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJRTE4NTM2ODUxRjUwOTA2MTAwRkUwOTFCIC8qIFdlYkFyY2hpdmVSZXNvdXJj
ZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMUNDNTY3QTFG
NDYxNEFBMDBBNDU1NUIgLyogSlNQYXltZW50UmVzcG9uc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTFDQzU2N0MxRjQ2MTRBRjAwQTQ1NTVCIC8qIEpTUGF5bWVudFNoaXBwaW5nT3B0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUExQ0M1NjdFMUY0NjE0QjQwMEE0NTU1QiAvKiBKU1BheW1l
bnRTaGlwcGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zNDQzMSw2ICszNDQzNyw4IEBA
CiAJCQkJQUE0NzhBODAxNkNENzBDMzAwN0QxQkI0IC8qIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQzRUY0NDkxOTE3OTE1QzAwMDM0MTg0
IC8qIFdlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTEyMERFM0VEMUM4NkNBM0UwMEI2RDRERCAvKiBXZWJBbmltYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRTE4NTM2ODUxRjUwOTA2MTAwRkUwOTFCIC8qIFdlYkFyY2hpdmVSZXNvdXJj
ZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcubW0gaW4gU291cmNlcyAqLywKKwkJCQlFMThDMzU0MzFG
NzE5NzAxMDBGRjYzMkQgLyogV2ViQXJjaGl2ZVJlc291cmNlV2ViUmVzb3VyY2VIYW5kbGVyLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFNjY3QTQxRTRCQkYxNTAwRTgxNTRBIC8qIFdlYkF1ZGlv
QnVmZmVyTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwN0Q2Mzc0MTFCQjBCMTEzMDAyNTZD
RTkgLyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlDREEyOUEzMTFDQkY3NERBMDA5MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVyLm1tIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5j
cHAJKHJldmlzaW9uIDIyMjI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJGcmFt
ZVRyZWUuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVFRQSGVhZGVyRmllbGQuaCIKICNpbmNsdWRl
ICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUg
Ikljb25Mb2FkZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5o
CShyZXZpc2lvbiAyMjIyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBjbGFzcyBDb250ZW50RmlsdGVy
OwogY2xhc3MgRm9ybVN0YXRlOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZUxvYWRlcjsKK2Ns
YXNzIEhUVFBIZWFkZXJGaWVsZDsKIGNsYXNzIEljb25Mb2FkZXI7CiBjbGFzcyBQYWdlOwogY2xh
c3MgUHJldmlld0NvbnZlcnRlcjsKQEAgLTI5NSw2ICsyOTYsOCBAQCBwdWJsaWM6CiAKICAgICBj
b25zdCBWZWN0b3I8TGlua0ljb24+JiBsaW5rSWNvbnMoKSBjb25zdCB7IHJldHVybiBtX2xpbmtJ
Y29uczsgfQogCisgICAgdm9pZCBzZXRBZGRpdGlvbmFsSGVhZGVyRmllbGRzKFZlY3RvcjxIVFRQ
SGVhZGVyRmllbGQ+JiYgZmllbGRzKSB7IG1fYWRkaXRpb25hbEhlYWRlckZpZWxkcyA9IFdURk1v
dmUoZmllbGRzKTsgfQorICAgIAogcHJvdGVjdGVkOgogICAgIFdFQkNPUkVfRVhQT1JUIERvY3Vt
ZW50TG9hZGVyKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJik7
CiAKQEAgLTQ1Miw2ICs0NTUsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8c3RkOjp1bmlxdWVf
cHRyPEljb25Mb2FkZXI+LCB1aW50NjRfdD4gbV9pY29uTG9hZGVyczsKICAgICBWZWN0b3I8TGlu
a0ljb24+IG1fbGlua0ljb25zOwogCisgICAgVmVjdG9yPEhUVFBIZWFkZXJGaWVsZD4gbV9hZGRp
dGlvbmFsSGVhZGVyRmllbGRzOworICAgIAogICAgIGJvb2wgbV9zdWJyZXNvdXJjZUxvYWRlcnNB
cmVQYWdlQ2FjaGVBY2NlcHRhYmxlIHsgZmFsc2UgfTsKICAgICBTaG91bGRPcGVuRXh0ZXJuYWxV
UkxzUG9saWN5IG1fc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSB7IFNob3VsZE9wZW5FeHRl
cm5hbFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9IVFRQSGVhZGVyRmllbGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9IVFRQSGVhZGVyRmllbGQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSFRUUEhlYWRlckZpZWxkLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFJGQzcyMzAgeworICAgIAorc3RhdGljIGJvb2wgaXNU
b2tlbkNoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwg
aXNBU0NJSURpZ2l0KGMpCisgICAgICAgIHx8IGMgPT0gJyEnIHx8IGMgPT0gJyMnIHx8IGMgPT0g
JyQnCisgICAgICAgIHx8IGMgPT0gJyUnIHx8IGMgPT0gJyYnIHx8IGMgPT0gJ1wnJworICAgICAg
ICB8fCBjID09ICcqJyB8fCBjID09ICcrJyB8fCBjID09ICctJworICAgICAgICB8fCBjID09ICcu
JyB8fCBjID09ICdeJyB8fCBjID09ICdfJworICAgICAgICB8fCBjID09ICdgJyB8fCBjID09ICd8
JyB8fCBjID09ICd+JzsKK30KKworc3RhdGljIGJvb2wgaXNEZWxpbWl0ZXIoVUNoYXIgYykKK3sK
KyAgICByZXR1cm4gYyA9PSAnKCcgfHwgYyA9PSAnKScgfHwgYyA9PSAnLCcKKyAgICAgICAgfHwg
YyA9PSAnLycgfHwgYyA9PSAnOicgfHwgYyA9PSAnOycKKyAgICAgICAgfHwgYyA9PSAnPCcgfHwg
YyA9PSAnPScgfHwgYyA9PSAnPicKKyAgICAgICAgfHwgYyA9PSAnPycgfHwgYyA9PSAnQCcgfHwg
YyA9PSAnWycKKyAgICAgICAgfHwgYyA9PSAnXFwnIHx8IGMgPT0gJ10nIHx8IGMgPT0gJ3snCisg
ICAgICAgIHx8IGMgPT0gJ30nIHx8IGMgPT0gJyInOworfQorCitzdGF0aWMgYm9vbCBpc1Zpc2li
bGVDaGFyYWN0ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gaXNUb2tlbkNoYXJhY3RlcihjKSB8
fCBpc0RlbGltaXRlcihjKTsKK30KKworc3RhdGljIGJvb2wgaXNXaGl0ZXNwYWNlKFVDaGFyIGMp
Cit7CisgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JzsKK30KKwordGVtcGxhdGU8c2l6
ZV90IG1pbiwgc2l6ZV90IG1heD4KK3N0YXRpYyBib29sIGlzSW5SYW5nZShVQ2hhciBjKQorewor
ICAgIHJldHVybiBjID49IG1pbiAmJiBjIDw9IG1heDsKK30KKworc3RhdGljIGJvb2wgaXNPQlNU
ZXh0KFVDaGFyIGMpCit7CisgICAgcmV0dXJuIGlzSW5SYW5nZTwweDgwLCAweEZGPihjKTsKK30K
Kworc3RhdGljIGJvb2wgaXNRdW90ZWRUZXh0Q2hhcmFjdGVyKFVDaGFyIGMpCit7CisgICAgcmV0
dXJuIGlzV2hpdGVzcGFjZShjKQorICAgICAgICB8fCBjID09IDB4MjEKKyAgICAgICAgfHwgaXNJ
blJhbmdlPDB4MjMsIDB4NUI+KGMpCisgICAgICAgIHx8IGlzSW5SYW5nZTwweDVELCAweDdFPihj
KQorICAgICAgICB8fCBpc09CU1RleHQoYyk7Cit9CisKK3N0YXRpYyBib29sIGlzUXVvdGVkUGFp
clNlY29uZE9jdGV0KFVDaGFyIGMpCit7CisgICAgcmV0dXJuIGlzV2hpdGVzcGFjZShjKQorICAg
ICAgICB8fCBpc1Zpc2libGVDaGFyYWN0ZXIoYykKKyAgICAgICAgfHwgaXNPQlNUZXh0KGMpOwor
fQorCitzdGF0aWMgYm9vbCBpc0NvbW1lbnRUZXh0KFVDaGFyIGMpCit7CisgICAgcmV0dXJuIGlz
V2hpdGVzcGFjZShjKQorICAgICAgICB8fCBpc0luUmFuZ2U8MHgyMSwgMHgyNz4oYykKKyAgICAg
ICAgfHwgaXNJblJhbmdlPDB4MkEsIDB4NUI+KGMpCisgICAgICAgIHx8IGlzSW5SYW5nZTwweDVE
LCAweDdFPihjKQorICAgICAgICB8fCBpc09CU1RleHQoYyk7Cit9CisKK3N0YXRpYyBib29sIGlz
VmFsaWROYW1lKFN0cmluZ1ZpZXcgbmFtZSkKK3sKKyAgICBpZiAoIW5hbWUubGVuZ3RoKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hbWUubGVu
Z3RoKCk7ICsraSkgeworICAgICAgICBpZiAoIWlzVG9rZW5DaGFyYWN0ZXIobmFtZVtpXSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoU3RyaW5nVmlldyB2YWx1ZSkKK3sKKyAgICBlbnVtIGNs
YXNzIFN0YXRlIHsKKyAgICAgICAgT3B0aW9uYWxXaGl0ZXNwYWNlLAorICAgICAgICBUb2tlbiwK
KyAgICAgICAgUXVvdGVkU3RyaW5nLAorICAgICAgICBDb21tZW50LAorICAgIH07CisgICAgU3Rh
dGUgc3RhdGUgPSBTdGF0ZTo6T3B0aW9uYWxXaGl0ZXNwYWNlOworICAgIHNpemVfdCBjb21tZW50
RGVwdGggPSAwOworICAgIGJvb2wgaGFkTm9uV2hpdGVzcGFjZSA9IGZhbHNlOworICAgIAorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBV
Q2hhciBjID0gdmFsdWVbaV07CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2Fz
ZSBTdGF0ZTo6T3B0aW9uYWxXaGl0ZXNwYWNlOgorICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFj
ZShjKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGhhZE5vbldoaXRl
c3BhY2UgPSB0cnVlOworICAgICAgICAgICAgaWYgKGlzVG9rZW5DaGFyYWN0ZXIoYykpIHsKKyAg
ICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpUb2tlbjsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjID09ICciJykgeworICAgICAg
ICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlF1b3RlZFN0cmluZzsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjID09ICcoJykgeworICAg
ICAgICAgICAgICAgIEFTU0VSVCghY29tbWVudERlcHRoKTsKKyAgICAgICAgICAgICAgICArK2Nv
bW1lbnREZXB0aDsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpDb21tZW50OworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU3RhdGU6OlRva2VuOgorICAgICAg
ICAgICAgaWYgKGlzVG9rZW5DaGFyYWN0ZXIoYykpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpPcHRpb25hbFdoaXRlc3BhY2U7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBTdGF0ZTo6UXVvdGVkU3RyaW5nOgorICAgICAg
ICAgICAgaWYgKGMgPT0gJyInKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6T3B0
aW9uYWxXaGl0ZXNwYWNlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGMgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICsraTsKKyAg
ICAgICAgICAgICAgICBpZiAoaSA9PSB2YWx1ZS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghaXNRdW90ZWRQYWlyU2Vjb25k
T2N0ZXQodmFsdWVbaV0pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWlz
UXVvdGVkVGV4dENoYXJhY3RlcihjKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBTdGF0ZTo6Q29tbWVudDoKKyAgICAg
ICAgICAgIGlmIChjID09ICcoJykgeworICAgICAgICAgICAgICAgICsrY29tbWVudERlcHRoOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGMgPT0gJyknKSB7CisgICAgICAgICAgICAgICAgLS1jb21tZW50RGVwdGg7CisgICAgICAgICAg
ICAgICAgaWYgKCFjb21tZW50RGVwdGgpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3Rh
dGU6Ok9wdGlvbmFsV2hpdGVzcGFjZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAr
K2k7CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gdmFsdWUubGVuZ3RoKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzUXVvdGVkUGFp
clNlY29uZE9jdGV0KHZhbHVlW2ldKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKCFpc0NvbW1lbnRUZXh0KGMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN3aXRjaCAo
c3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlOjpPcHRpb25hbFdoaXRlc3BhY2U6CisgICAgY2FzZSBT
dGF0ZTo6VG9rZW46CisgICAgICAgIHJldHVybiBoYWROb25XaGl0ZXNwYWNlOworICAgIGNhc2Ug
U3RhdGU6OlF1b3RlZFN0cmluZzoKKyAgICBjYXNlIFN0YXRlOjpDb21tZW50OgorICAgICAgICAv
LyBVbmNsb3NlZCBjb21tZW50cyBvciBxdW90ZXMgYXJlIGludmFsaWQgdmFsdWVzLgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBS
RkM3MjMwCisKK0hUVFBIZWFkZXJGaWVsZDo6SFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYg
ZmllbGQpCit7CisgICAgc2l6ZV90IGNvbG9uTG9jYXRpb24gPSBmaWVsZC5maW5kKCc6Jyk7Cisg
ICAgaWYgKGNvbG9uTG9jYXRpb24gPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAg
IFN0cmluZ1ZpZXcgbmFtZSA9IFN0cmluZ1ZpZXcoZmllbGQpLnN1YnN0cmluZygwLCBjb2xvbkxv
Y2F0aW9uKS5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKFJGQzcyMzA6
OmlzV2hpdGVzcGFjZSk7CisgICAgU3RyaW5nVmlldyB2YWx1ZSA9IFN0cmluZ1ZpZXcoZmllbGQp
LnN1YnN0cmluZyhjb2xvbkxvY2F0aW9uICsgMSkuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRj
aGVkQ2hhcmFjdGVycyhSRkM3MjMwOjppc1doaXRlc3BhY2UpOworICAgIGlmICghUkZDNzIzMDo6
aXNWYWxpZE5hbWUobmFtZSkgfHwgIVJGQzcyMzA6OmlzVmFsaWRWYWx1ZSh2YWx1ZSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fZmllbGQgPSBtYWtlU3RyaW5nKG5hbWUsICc6JywgJyAnLCAg
dmFsdWUpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSFRUUEhlYWRlckZp
ZWxkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0hUVFBIZWFkZXJGaWVs
ZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0hUVFBIZWFkZXJGaWVs
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdFQkNPUkVf
RVhQT1JUIEhUVFBIZWFkZXJGaWVsZCB7CitwdWJsaWM6CisgICAgSFRUUEhlYWRlckZpZWxkKGNv
bnN0IFN0cmluZyYpOworICAgIAorICAgIGNvbnN0IFN0cmluZyYgZmllbGQoKSBjb25zdCB7IHJl
dHVybiBtX2ZpZWxkOyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8SFRUUEhlYWRlckZpZWxkPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRl
OgorICAgIFN0cmluZyBtX2ZpZWxkOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3Zv
aWQgSFRUUEhlYWRlckZpZWxkOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAg
ICBlbmNvZGVyIDw8IG1fZmllbGQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6
Om9wdGlvbmFsPEhUVFBIZWFkZXJGaWVsZD4gSFRUUEhlYWRlckZpZWxkOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gZmllbGQ7CisgICAgZGVj
b2RlciA+PiBmaWVsZDsKKyAgICBpZiAoIWZpZWxkKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgcmV0dXJuIHt7IFdURk1vdmUoKmZpZWxkKSB9fTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjI3NSkKKysrIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTctMDkt
MjAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBBZGQgaW5mcmFzdHJ1Y3R1cmUgZm9yIGFkZGluZyBjdXN0b20gaGVhZGVycyB0byByZXF1ZXN0
cyBwZXIgd2Vic2l0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc3MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTaGFyZWQvV2Vic2l0ZVBvbGljaWVzLmNwcDogQWRkZWQuCisgICAgICAgICogU2hh
cmVkL1dlYnNpdGVQb2xpY2llcy5oOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9saWNpZXM6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVQb2xpY2llczo6ZGVjb2Rl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVQb2xpY2llcy5jcHA6CisgICAgICAgIChXS1dl
YnNpdGVQb2xpY2llc0NvcHlBZGRpdGlvbmFsQ3VzdG9tSGVhZGVyRmllbGRzKToKKyAgICAgICAg
KFdLV2Vic2l0ZVBvbGljaWVzU2V0QWRkaXRpb25hbEN1c3RvbUhlYWRlckZpZWxkcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJzaXRlUG9saWNpZXMuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5tbToKKyAgICAgICAgKC1bX1dLV2Vic2l0
ZVBvbGljaWVzIGFkZGl0aW9uYWxDdXN0b21IZWFkZXJGaWVsZHNdKToKKyAgICAgICAgKC1bX1dL
V2Vic2l0ZVBvbGljaWVzIHNldEFkZGl0aW9uYWxDdXN0b21IZWFkZXJGaWVsZHM6XSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorCiAyMDE3LTA5LTIwICBKb25hdGhhbiBCZWRhcmQg
IDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmVkIG51bGxhYmxlIGZyb20gVUlE
cmFnSXRlbSBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGlj
aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVz
LmgJKHJldmlzaW9uIDIyMjI3NSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xp
Y2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSwxMSBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlckZpZWxkLmg+CiAjaW5jbHVkZSA8d3RmL0Vu
dW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IApAQCAtNDgsNiArNTAsNyBAQCBzdHJ1Y3QgV2Vic2l0ZVBvbGljaWVzIHsKICAgICBib29sIGNv
bnRlbnRCbG9ja2Vyc0VuYWJsZWQgeyB0cnVlIH07CiAgICAgT3B0aW9uU2V0PFdlYnNpdGVBdXRv
cGxheVF1aXJrPiBhbGxvd2VkQXV0b3BsYXlRdWlya3M7CiAgICAgV2Vic2l0ZUF1dG9wbGF5UG9s
aWN5IGF1dG9wbGF5UG9saWN5IHsgV2Vic2l0ZUF1dG9wbGF5UG9saWN5OjpEZWZhdWx0IH07Cisg
ICAgVmVjdG9yPFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZD4gYWRkaXRpb25hbEhlYWRlckZpZWxk
czsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxX
ZWJzaXRlUG9saWNpZXM+IGRlY29kZShEZWNvZGVyJik7CkBAIC03Niw2ICs3OSw3IEBAIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgV2Vic2l0ZVBvbGkKICAgICBlbmNvZGVyIDw8IGNvbnRl
bnRCbG9ja2Vyc0VuYWJsZWQ7CiAgICAgZW5jb2RlciA8PCBhdXRvcGxheVBvbGljeTsKICAgICBl
bmNvZGVyIDw8IGFsbG93ZWRBdXRvcGxheVF1aXJrczsKKyAgICBlbmNvZGVyIDw8IGFkZGl0aW9u
YWxIZWFkZXJGaWVsZHM7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0aW9u
YWw8V2Vic2l0ZVBvbGljaWVzPiBXZWJzaXRlUG9saWNpZXM6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQpAQCAtOTQsMTEgKzk4LDE3IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0ZDo6b3B0
aW9uYWw8V2UKICAgICBkZWNvZGVyID4+IGFsbG93ZWRBdXRvcGxheVF1aXJrczsKICAgICBpZiAo
IWFsbG93ZWRBdXRvcGxheVF1aXJrcykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ+PiBh
ZGRpdGlvbmFsSGVhZGVyRmllbGRzOworICAgIGRlY29kZXIgPj4gYWRkaXRpb25hbEhlYWRlckZp
ZWxkczsKKyAgICBpZiAoIWFkZGl0aW9uYWxIZWFkZXJGaWVsZHMpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKICAgICByZXR1cm4geyB7CiAgICAgICAgIFdURk1vdmUoKmNvbnRlbnRC
bG9ja2Vyc0VuYWJsZWQpLAogICAgICAgICBXVEZNb3ZlKCphbGxvd2VkQXV0b3BsYXlRdWlya3Mp
LAogICAgICAgICBXVEZNb3ZlKCphdXRvcGxheVBvbGljeSksCisgICAgICAgIFdURk1vdmUoKmFk
ZGl0aW9uYWxIZWFkZXJGaWVsZHMpLAogICAgIH0gfTsKIH0KIApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuaAkocmV2aXNpb24gMjIy
Mjc1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw5IEBAIHB1YmxpYzoKICAgICBXZWJLaXQ6Oldl
YnNpdGVBdXRvcGxheVBvbGljeSBhdXRvcGxheVBvbGljeSgpIGNvbnN0IHsgcmV0dXJuIG1fd2Vi
c2l0ZVBvbGljaWVzLmF1dG9wbGF5UG9saWN5OyB9CiAgICAgdm9pZCBzZXRBdXRvcGxheVBvbGlj
eShXZWJLaXQ6OldlYnNpdGVBdXRvcGxheVBvbGljeSBwb2xpY3kpIHsgbV93ZWJzaXRlUG9saWNp
ZXMuYXV0b3BsYXlQb2xpY3kgPSBwb2xpY3k7IH0KIAorICAgIHZvaWQgc2V0QWRkaXRpb25hbEhl
YWRlckZpZWxkcyhWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkPiYmIGFkZGl0aW9uYWxI
ZWFkZXJGaWVsZHMpIHsgbV93ZWJzaXRlUG9saWNpZXMuYWRkaXRpb25hbEhlYWRlckZpZWxkcyA9
IFdURk1vdmUoYWRkaXRpb25hbEhlYWRlckZpZWxkcyk7IH07CisgICAgY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkhUVFBIZWFkZXJGaWVsZD4gYWRkaXRpb25hbEhlYWRlckZpZWxkcygpIHsgcmV0dXJu
IG1fd2Vic2l0ZVBvbGljaWVzLmFkZGl0aW9uYWxIZWFkZXJGaWVsZHM7IH0KKwogICAgIGNvbnN0
IFdlYktpdDo6V2Vic2l0ZVBvbGljaWVzJiB3ZWJzaXRlUG9saWNpZXMoKSB7IHJldHVybiBtX3dl
YnNpdGVQb2xpY2llczsgfQogICAgIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVQb2xpY2llcy5jcHAJKHJldmlzaW9uIDIy
MjI3NSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJXS1dlYnNpdGVQb2xpY2llcy5oIgogCisjaW5jbHVkZSAiQVBJQXJyYXku
aCIKICNpbmNsdWRlICJBUElXZWJzaXRlUG9saWNpZXMuaCIKICNpbmNsdWRlICJXS0FQSUNhc3Qu
aCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZVBvbGljaWVzLmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC01Miw2ICs1NCwzMCBAQCBib29sIFdLV2Vic2l0
ZVBvbGljaWVzR2V0Q29udGVudEJsb2NrZXJzCiAgICAgcmV0dXJuIHRvSW1wbCh3ZWJzaXRlUG9s
aWNpZXMpLT5jb250ZW50QmxvY2tlcnNFbmFibGVkKCk7CiB9CiAKK1dLX0VYUE9SVCBXS0FycmF5
UmVmIFdLV2Vic2l0ZVBvbGljaWVzQ29weUFkZGl0aW9uYWxDdXN0b21IZWFkZXJGaWVsZHMoV0tX
ZWJzaXRlUG9saWNpZXNSZWYgd2Vic2l0ZVBvbGljaWVzKQoreworICAgIGNvbnN0IGF1dG8mIGZp
ZWxkcyA9IHRvSW1wbCh3ZWJzaXRlUG9saWNpZXMpLT5hZGRpdGlvbmFsSGVhZGVyRmllbGRzKCk7
CisgICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IHN0cmluZ3M7CisgICAgc3RyaW5ncy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpZWxkcy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0
byYgZmllbGQgOiBmaWVsZHMpCisgICAgICAgIHN0cmluZ3MudW5jaGVja2VkQXBwZW5kKEFQSTo6
U3RyaW5nOjpjcmVhdGUoZmllbGQuZmllbGQoKSkpOworICAgIHJldHVybiB0b0FQSShBUEk6OkFy
cmF5OjpjcmVhdGUoV1RGTW92ZShzdHJpbmdzKSkucHRyKCkpOworfQorCitXS19FWFBPUlQgdm9p
ZCBXS1dlYnNpdGVQb2xpY2llc1NldEFkZGl0aW9uYWxDdXN0b21IZWFkZXJGaWVsZHMoV0tXZWJz
aXRlUG9saWNpZXNSZWYgd2Vic2l0ZVBvbGljaWVzLCBXS0FycmF5UmVmIGFycmF5KQoreworICAg
IHNpemVfdCBsZW5ndGggPSBXS0FycmF5R2V0U2l6ZShhcnJheSk7CisgICAgVmVjdG9yPFdlYkNv
cmU6OkhUVFBIZWFkZXJGaWVsZD4gZmllbGRzOworICAgIGZpZWxkcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGxlbmd0aCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
eworICAgICAgICBXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQgcGFyc2VkRmllbGQodG9JbXBsKHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoYXJyYXksIGkpKSkt
PnN0cmluZygpKTsKKyAgICAgICAgaWYgKCFwYXJzZWRGaWVsZC5maWVsZCgpLmlzTnVsbCgpCisg
ICAgICAgICAgICAmJiBwYXJzZWRGaWVsZC5maWVsZCgpLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJ
Q2FzZSgiWC0iKSkgLy8gTGV0J3MganVzdCBwcmV0ZW5kIFJGQzY2NDggbmV2ZXIgaGFwcGVuZWQu
CisgICAgICAgICAgICBmaWVsZHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUocGFyc2VkRmllbGQp
KTsKKyAgICB9CisgICAgdG9JbXBsKHdlYnNpdGVQb2xpY2llcyktPnNldEFkZGl0aW9uYWxIZWFk
ZXJGaWVsZHMoV1RGTW92ZShmaWVsZHMpKTsKK30KKwogdm9pZCBXS1dlYnNpdGVQb2xpY2llc1Nl
dEFsbG93ZWRBdXRvcGxheVF1aXJrcyhXS1dlYnNpdGVQb2xpY2llc1JlZiB3ZWJzaXRlUG9saWNp
ZXMsIFdLV2Vic2l0ZUF1dG9wbGF5UXVpcmsgYWxsb3dlZFF1aXJrcykKIHsKICAgICBPcHRpb25T
ZXQ8V2Vic2l0ZUF1dG9wbGF5UXVpcms+IHF1aXJrczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlUG9saWNpZXMuaAkocmV2aXNpb24gMjIyMjc1
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlUG9saWNpZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOSBAQCBXS19FWFBPUlQgV0tXZWJzaXRlUG9saWNp
ZXNSZWYgV0tXZWJzaXRlCiBXS19FWFBPUlQgYm9vbCBXS1dlYnNpdGVQb2xpY2llc0dldENvbnRl
bnRCbG9ja2Vyc0VuYWJsZWQoV0tXZWJzaXRlUG9saWNpZXNSZWYpOwogV0tfRVhQT1JUIHZvaWQg
V0tXZWJzaXRlUG9saWNpZXNTZXRDb250ZW50QmxvY2tlcnNFbmFibGVkKFdLV2Vic2l0ZVBvbGlj
aWVzUmVmLCBib29sKTsKIAorV0tfRVhQT1JUIFdLQXJyYXlSZWYgV0tXZWJzaXRlUG9saWNpZXND
b3B5QWRkaXRpb25hbEN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1JlZik7CitX
S19FWFBPUlQgdm9pZCBXS1dlYnNpdGVQb2xpY2llc1NldEFkZGl0aW9uYWxDdXN0b21IZWFkZXJG
aWVsZHMoV0tXZWJzaXRlUG9saWNpZXNSZWYsIFdLQXJyYXlSZWYpOworCiBXS19FWFBPUlQgV0tX
ZWJzaXRlQXV0b3BsYXlRdWlyayBXS1dlYnNpdGVQb2xpY2llc0dldEFsbG93ZWRBdXRvcGxheVF1
aXJrcyhXS1dlYnNpdGVQb2xpY2llc1JlZik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVQb2xp
Y2llc1NldEFsbG93ZWRBdXRvcGxheVF1aXJrcyhXS1dlYnNpdGVQb2xpY2llc1JlZiwgV0tXZWJz
aXRlQXV0b3BsYXlRdWlyayk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tXZWJzaXRlUG9saWNpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vic2l0ZVBvbGljaWVzLmgJKHJldmlzaW9uIDIyMjI3NSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJzaXRlUG9saWNpZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFj
b3N4KDEwLjEyLjMpLCBpb3MoCiBAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBjb250ZW50Qmxv
Y2tlcnNFbmFibGVkOwogQHByb3BlcnR5IChub25hdG9taWMpIF9XS1dlYnNpdGVBdXRvcGxheVF1
aXJrIGFsbG93ZWRBdXRvcGxheVF1aXJrcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMyks
IGlvcygxMS4wKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLV2Vic2l0ZUF1dG9wbGF5UG9s
aWN5IGF1dG9wbGF5UG9saWN5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEzKSwgaW9zKDEx
LjApKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9c2V0QWRkaXRpb25hbEN1
c3RvbUhlYWRlckZpZWxkczopIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmFkZGl0aW9uYWxDdXN0b21I
ZWFkZXJGaWVsZHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1dlYnNpdGVQb2xpY2llcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vic2l0ZVBvbGljaWVzLm1tCShyZXZpc2lvbiAyMjIyNzUp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vic2l0ZVBvbGljaWVz
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDI4IEBAIC0gKF9XS1dlYnNpdGVBdXRv
cGxheVBvbGljeSlhdXRvcGxheVBvbGkKICAgICB9CiB9CiAKKy0gKE5TQXJyYXk8TlNTdHJpbmcg
Kj4gKilhZGRpdGlvbmFsQ3VzdG9tSGVhZGVyRmllbGRzCit7CisgICAgY29uc3QgYXV0byYgZmll
bGRzID0gX3dlYnNpdGVQb2xpY2llcy0+YWRkaXRpb25hbEhlYWRlckZpZWxkcygpOworICAgIE5T
TXV0YWJsZUFycmF5ICphcnJheSA9IFtbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5OmZpZWxkcy5zaXplKCldIGF1dG9yZWxlYXNlXTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGZpZWxkIDogZmllbGRzKQorICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OmZpZWxkLmZpZWxkKCld
OworICAgIHJldHVybiBhcnJheTsKK30KKworLSAodm9pZClzZXRBZGRpdGlvbmFsQ3VzdG9tSGVh
ZGVyRmllbGRzOihOU0FycmF5PE5TU3RyaW5nICo+ICopZmllbGRzCit7CisgICAgVmVjdG9yPFdl
YkNvcmU6OkhUVFBIZWFkZXJGaWVsZD4gcGFyc2VkRmllbGRzOworICAgIHBhcnNlZEZpZWxkcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpZWxkcy5jb3VudCk7CisgICAgZm9yIChOU1N0cmluZyAq
c3RyaW5nIGluIGZpZWxkcykgeworICAgICAgICBXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQgcGFy
c2VkRmllbGQoc3RyaW5nKTsKKyAgICAgICAgaWYgKCFwYXJzZWRGaWVsZC5maWVsZCgpLmlzTnVs
bCgpCisgICAgICAgICAgICAmJiBwYXJzZWRGaWVsZC5maWVsZCgpLnN0YXJ0c1dpdGhJZ25vcmlu
Z0FTQ0lJQ2FzZSgiWC0iKSkgLy8gTGV0J3MganVzdCBwcmV0ZW5kIFJGQzY2NDggbmV2ZXIgaGFw
cGVuZWQuCisgICAgICAgICAgICBwYXJzZWRGaWVsZHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
cGFyc2VkRmllbGQpKTsKKyAgICB9CisgICAgX3dlYnNpdGVQb2xpY2llcy0+c2V0QWRkaXRpb25h
bEhlYWRlckZpZWxkcyhXVEZNb3ZlKHBhcnNlZEZpZWxkcykpOworfQorCiAtIChOU1N0cmluZyAq
KWRlc2NyaXB0aW9uCiB7CiAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
PCVAOiAlcDsgY29udGVudEJsb2NrZXJzRW5hYmxlZCA9ICVkPiIsIE5TU3RyaW5nRnJvbUNsYXNz
KHNlbGYuY2xhc3MpLCBzZWxmLCBzZWxmLmNvbnRlbnRCbG9ja2Vyc0VuYWJsZWRdOwpJbmRleDog
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAyMjIyNzUpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjEsNiArODIxLDggQEAgdm9pZCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEZWNpZAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgZG9j
dW1lbnRMb2FkZXItPnNldEFkZGl0aW9uYWxIZWFkZXJGaWVsZHMoV1RGTW92ZSh3ZWJzaXRlUG9s
aWNpZXMuYWRkaXRpb25hbEhlYWRlckZpZWxkcykpOworICAgIAogICAgIC8vIE9ubHkgc2V0VXNl
ckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRpc2Fi
bGVkIGJ5IHJlbG9hZGluZyB3aXRob3V0IGNvbnRlbnQgYmxvY2tlcnMuCiAgICAgaWYgKGRvY3Vt
ZW50TG9hZGVyLT51c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKCkpCiAgICAgICAgIGRvY3Vt
ZW50TG9hZGVyLT5zZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKHdlYnNpdGVQb2xpY2ll
cy5jb250ZW50QmxvY2tlcnNFbmFibGVkKTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjI3NSkKKysrIFRvb2xzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE3LTA5LTIwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGluZnJh
c3RydWN0dXJlIGZvciBhZGRpbmcgY3VzdG9tIGhlYWRlcnMgdG8gcmVxdWVzdHMgcGVyIHdlYnNp
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzI1
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0hUVFBIZWFkZXJGaWVsZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoc2hvdWxkUmVtYWluVW5jaGFuZ2VkKToKKyAgICAgICAgKHNob3VsZEJl
SW52YWxpZCk6CisgICAgICAgIChzaG91bGRCZWNvbWUpOgorICAgICAgICAoVEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlUG9saWNpZXMubW06
CisgICAgICAgIChURVNUKToKKwogMjAxNy0wOS0yMCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gQ3lnd2luIDY0LWJpdCBFV1MgcHJvY2VzcyBj
YW5ub3QgZmluZCBWaXN1YWwgU3R1ZGlvIGluc3RhbGxhdGlvbi4KSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMjIyNzUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjM1
LDYgKzIzNSw3IEBACiAJCTVDOUU1OTQxMUQzRUI1QUMwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNh
Y2hlLmRiIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDOUU1OTNFMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiICovOyB9
OwogCQk1QzlFNTk0MjFEM0VCNUFDMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi1zaG0g
aW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5
RTU5M0YxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItc2htICovOyB9Owog
CQk1QzlFNTk0MzFEM0VCNUFDMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi13YWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU5
NDAxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItd2FsICovOyB9OworCQk1
Q0ExREVDODFGNzFGNzAxMDBFNzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQTFERUM3MUY3MUY0MDcwMEU3
MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuY3BwICovOyB9OwogCQk1Q0IxOEJBODFGNTY0NUUzMDBF
RTIzQzQgLyogQ2xpY2tBdXRvRmlsbEJ1dHRvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQjE4QkE3MUY1NjQ1QjIwMEVFMjNDNCAvKiBDbGlja0F1
dG9GaWxsQnV0dG9uLm1tICovOyB9OwogCQk1Q0I0MEI0RTFGNEI5OEQzMDA3REM3QjkgLyogVUlE
ZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDQjQwQjREMUY0Qjk4QkUwMDdEQzdCOSAvKiBVSURlbGVnYXRlLm1tICovOyB9OwogCQk1Q0Uz
NTREOTFFNzBEQTVDMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0UzNTREODFFNzBEOUMz
MDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi87IH07CkBAIC0xMzMwLDYg
KzEzMzEsNyBAQAogCQk1QzlFNTkzRTFEM0VCMURFMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNo
ZS5kYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZp
bGU7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlLmRiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1QzlFNTkzRjFEM0VCMURFMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi1zaG0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBw
YXRoID0gIkFwcGxpY2F0aW9uQ2FjaGUuZGItc2htIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUM5RTU5NDAxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItd2Fs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsg
cGF0aCA9ICJBcHBsaWNhdGlvbkNhY2hlLmRiLXdhbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTVDQTFERUM3MUY3MUY0MDcwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRUUEhlYWRlckZpZWxkLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCMThCQTcxRjU2NDVCMjAwRUUyM0M0IC8q
IENsaWNrQXV0b0ZpbGxCdXR0b24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBDbGlja0F1dG9GaWxsQnV0dG9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1Q0I0MEI0RDFGNEI5OEJFMDA3REM3QjkgLyogVUlEZWxlZ2F0ZS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFVJRGVsZWdhdGUubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVDRTM1NEQ4MUU3MEQ5QzMwMEJFRkUzQiAvKiBXS0NvbnRlbnRF
eHRlbnNpb25TdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjA4MCw2ICsyMDgyLDcgQEAKIAkJCQkxQ0FEMUY4NTFFNUNFN0RBMDBBRjJDMkMgLyogRm9u
dENhY2hlLmNwcCAqLywKIAkJCQk4RTRBODUzNjFFMUQxQUExMDBGNTNCMEYgLyogR3JpZFBvc2l0
aW9uLmNwcCAqLywKIAkJCQk4M0I4OEEzMzFDODAwNTZEMDBCQjI0MTggLyogSFRNTFBhcnNlcklk
aW9tcy5jcHAgKi8sCisJCQkJNUNBMURFQzcxRjcxRjQwNzAwRTcxQkQzIC8qIEhUVFBIZWFkZXJG
aWVsZC5jcHAgKi8sCiAJCQkJN0E5MDlBNzMxRDg3NzQ3NTAwN0UxMEY4IC8qIEludFBvaW50LmNw
cCAqLywKIAkJCQk3QTkwOUE3NDFEODc3NDc1MDA3RTEwRjggLyogSW50UmVjdC5jcHAgKi8sCiAJ
CQkJN0E5MDlBNzUxRDg3NzQ3NTAwN0UxMEY4IC8qIEludFNpemUuY3BwICovLApAQCAtMzIzOCw2
ICszMjQxLDcgQEAKIAkJCQk3Q0NFN0VDMTFBNDExQTdFMDA0NDdDNEMgLyogSFRNTENvbGxlY3Rp
b25OYW1lZEl0ZW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VDMjFBNDExQTdFMDA0NDdD
NEMgLyogSFRNTEZvcm1Db2xsZWN0aW9uTmFtZWRJdGVtLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0M4M0UwNTAxRDBBNjQxODAwRkVCQ0YzIC8qIEhUTUxQYXJzZXJJZGlvbXMuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNUNBMURFQzgxRjcxRjcwMTAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUFGMjNERjFFRjFBMzczMDA3MkYyODEgLyogSWNvbkxv
YWRpbmdEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxMDQ3Nzc4MUQyOTkyM0IwMDk3
NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxMTBGQ0ZB
MUUwMUNEQjgwMDZGOEQwQiAvKiBJREJJbmRleFVwZ3JhZGVUb1YyLm1tIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSFRUUEhlYWRlckZpZWxk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSFRU
UEhlYWRlckZpZWxkLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9IVFRQSGVhZGVyRmllbGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
SFRUUEhlYWRlckZpZWxkLmg+CisKK3N0YXRpYyB2b2lkIHNob3VsZFJlbWFpblVuY2hhbmdlZChW
ZWN0b3I8U3RyaW5nPiYmIHN0cmluZ3MpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBzdHJpbmcg
OiBzdHJpbmdzKQorICAgICAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQo
c3RyaW5nKS5maWVsZCgpID09IHN0cmluZyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3VsZEJlSW52
YWxpZChWZWN0b3I8U3RyaW5nPiYmIHN0cmluZ3MpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBz
dHJpbmcgOiBzdHJpbmdzKQorICAgICAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpIVFRQSGVhZGVy
RmllbGQoc3RyaW5nKS5maWVsZCgpID09IFN0cmluZygpKTsKK30KKworc3RhdGljIHZvaWQgc2hv
dWxkQmVjb21lKFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYmIHBhaXJzKQorewor
ICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IHBhaXJzKQorICAgICAgICBFWFBFQ1RfVFJVRShX
ZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQocGFpci5maXJzdCkuZmllbGQoKSA9PSBwYWlyLnNlY29u
ZCk7Cit9CisKK1RFU1QoSFRUUEhlYWRlckZpZWxkLCBQYXJzZXIpCit7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIgbm9uQVNDSUlDb21tZW50WzhdID0geydhJywgJzonLCAnICcsICcoJywgMHgyMSwg
c3RhdGljX2Nhc3Q8Y2hhcj4oMHhGRiksICcpJywgJ1wwJ307CisgICAgc3RhdGljIGNvbnN0IGNo
YXIgbm9uQVNDSUlRdW90ZWRQYWlySW5Db21tZW50WzhdID0geydhJywgJzonLCAnICcsICcoJywg
J1xcJywgc3RhdGljX2Nhc3Q8Y2hhcj4oMHhGRiksICcpJywgJ1wwJ307CisgICAgc3RhdGljIGNv
bnN0IGNoYXIgbm9uQVNDSUlRdW90ZWRQYWlySW5RdW90ZVs4XSA9IHsnYScsICc6JywgJyAnLCAn
IicsICdcXCcsIHN0YXRpY19jYXN0PGNoYXI+KDB4RkYpLCAnIicsICdcMCd9OworICAgIHN0YXRp
YyBjb25zdCBjaGFyIGRlbEluUXVvdGVbN10gPSB7J2EnLCAnOicsICcgJywgJyInLCBzdGF0aWNf
Y2FzdDxjaGFyPigweDdGKSwgJyInLCAnXDAnfTsKKworICAgIHNob3VsZFJlbWFpblVuY2hhbmdl
ZCh7CisgICAgICAgICJhOiBiIiwKKyAgICAgICAgImE6IGIgYyIsCisgICAgICAgICIhOiBiIiwK
KyAgICAgICAgImE6ICgpIiwKKyAgICAgICAgImE6IChcXCApIiwKKyAgICAgICAgImE6ICgoKSki
LAorICAgICAgICAiYTogXCJcIiIsCisgICAgICAgICJhOiBcImFBP1x0IFwiIiwKKyAgICAgICAg
ImE6IFwiYVwiIChiKSAoKGMpKSIsCisgICAgICAgIG5vbkFTQ0lJQ29tbWVudCwKKyAgICAgICAg
bm9uQVNDSUlRdW90ZWRQYWlySW5Db21tZW50LAorICAgICAgICBub25BU0NJSVF1b3RlZFBhaXJJ
blF1b3RlLAorICAgIH0pOworICAgIAorICAgIHNob3VsZEJlSW52YWxpZCh7CisgICAgICAgICJh
OiIsCisgICAgICAgICJhOiAiLAorICAgICAgICAiYTogXHJiIiwKKyAgICAgICAgImE6IFxuYiIs
CisgICAgICAgICJhOiBcdmIiLAorICAgICAgICAiXGE6IGIiLAorICAgICAgICAiPzogYiIsCisg
ICAgICAgICJhOiBcYWIiLAorICAgICAgICAiYTogKFxcXGEpIiwKKyAgICAgICAgImE6IChcXFxh
KSIsCisgICAgICAgICJhOiAoIiwKKyAgICAgICAgImE6ICgoKSIsCisgICAgICAgICJhOiAoXGEp
IiwKKyAgICAgICAgImE6IFwiXGFcIiIsCisgICAgICAgICJhOiBcImFcIiAoYil9KChjKSkiLAor
ICAgICAgICBkZWxJblF1b3RlLAorICAgIH0pOworICAgIAorICAgIHNob3VsZEJlY29tZSh7Cisg
ICAgICAgIHsgImE6IGIgIiwgImE6IGIiIH0sCisgICAgICAgIHsgIiBhOiBiIiwgImE6IGIiIH0s
CisgICAgICAgIHsgImE6IFx0YiIsICJhOiBiIiB9LAorICAgICAgICB7ICIgYTogYiBjICIsICJh
OiBiIGMiIH0sCisgICAgICAgIHsgImE6ICBiICIsICJhOiBiIiB9LAorICAgICAgICB7ICJhOlx0
YiIsICJhOiBiIiB9LAorICAgICAgICB7ICJcdGE6XHQgYlx0IiwgImE6IGIiIH0sCisgICAgICAg
IHsgImE6IFwiYVwiIChiKSAiLCAiYTogXCJhXCIgKGIpIiB9LAorICAgIH0pOworfQpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlUG9saWNpZXMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJz
aXRlUG9saWNpZXMubW0JKHJldmlzaW9uIDIyMjI3NSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZVBvbGljaWVzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02
MjIsNiArNjIyLDE4IEBAIFRFU1QoV2ViS2l0LCBXZWJzaXRlUG9saWNpZXNBdXRvcGxheVF1aXIK
ICAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGxheSgpIl07CiAg
ICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJwbGF5aW5nIl07CiB9Ci0jZW5kaWYKKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCiAKLSNlbmRpZgorVEVTVChXZWJLaXQsIEludmFsaWRDdXN0b21I
ZWFkZXJzKQoreworICAgIGF1dG8gd2Vic2l0ZVBvbGljaWVzID0gYWRvcHROUyhbW19XS1dlYnNp
dGVQb2xpY2llcyBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJzaXRlUG9saWNpZXMgc2V0QWRkaXRp
b25hbEN1c3RvbUhlYWRlckZpZWxkczpAW0AiaW52YWxpZGhlYWRlcjoiLCBAIm5vbmN1c3RvbTog
aGVhZGVyIiwgQCJYLWN1c3RvbTogaGVhZGVyIiwgQCIgICAgeC1DdXN0b20gOiAgTmVlZHMgQ2Fu
b25pY2FsaXphdGlvblx0ICJdXTsKKyAgICBOU0FycmF5PE5TU3RyaW5nICo+ICpjYW5vbmljYWxp
emVkID0gW3dlYnNpdGVQb2xpY2llcyBhZGRpdGlvbmFsQ3VzdG9tSGVhZGVyRmllbGRzXTsKKyAg
ICBFWFBFQ1RfRVEoY2Fub25pY2FsaXplZC5jb3VudCwgMnUpOworICAgIEVYUEVDVF9TVFJFUShb
Y2Fub25pY2FsaXplZCBvYmplY3RBdEluZGV4OjBdLlVURjhTdHJpbmcsICJYLWN1c3RvbTogaGVh
ZGVyIik7CisgICAgRVhQRUNUX1NUUkVRKFtjYW5vbmljYWxpemVkIG9iamVjdEF0SW5kZXg6MV0u
VVRGOFN0cmluZywgIngtQ3VzdG9tOiBOZWVkcyBDYW5vbmljYWxpemF0aW9uIik7Cit9CisKKy8v
IEZJWE1FOiBBcHBseSB0aGUgYWRkaXRpb25hbCBoZWFkZXJzIGZyb20gdGhlIERvY3VtZW50TG9h
ZGVyIHRvIGVhY2ggcmVxdWVzdCBhbmQgdGVzdCB0aGF0IHRoZXkgYXJlIHNlbnQgb24gbWFpbiBy
ZXNvdXJjZSBhbmQgc3VicmVzb3VyY2VzLgorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321386</attachid>
            <date>2017-09-20 16:39:46 -0700</date>
            <delta_ts>2017-09-20 16:48:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177255-20170920163942.patch</filename>
            <type>text/plain</type>
            <size>38892</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTA5LTIwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGluZnJh
c3RydWN0dXJlIGZvciBhZGRpbmcgY3VzdG9tIGhlYWRlcnMgdG8gcmVxdWVzdHMgcGVyIHdlYnNp
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzI1
NQorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIENvdmVy
ZWQgYnkgQVBJIHRlc3RzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRlci9Eb2N1
bWVudExvYWRlci5jcHA6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0Q3VzdG9tSGVhZGVyRmllbGRzKToKKyAg
ICAgICAgKiBsb2FkZXIvSFRUUEhlYWRlckZpZWxkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpSRkM3MjMwOjppc1Rva2VuQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJGQzcy
MzA6OmlzRGVsaW1pdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJGQzcyMzA6OmlzVmlzaWJsZUNo
YXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpSRkM3MjMwOjppc1doaXRlc3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UkZDNzIzMDo6aXNJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJG
QzcyMzA6OmlzT0JTVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSRkM3MjMwOjppc1F1b3RlZFRl
eHRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UkZDNzIzMDo6aXNRdW90ZWRQYWlyU2Vj
b25kT2N0ZXQpOgorICAgICAgICAoV2ViQ29yZTo6UkZDNzIzMDo6aXNDb21tZW50VGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSRkM3MjMwOjppc1ZhbGlkTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSRkM3MjMwOjppc1ZhbGlkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlckZp
ZWxkOjpIVFRQSGVhZGVyRmllbGQpOgorICAgICAgICAqIGxvYWRlci9IVFRQSGVhZGVyRmllbGQu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ6OmRlY29kZSk6CisKIDIwMTct
MDktMjAgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFNwZWxs
aW5nIGFuZCBncmFtbWFyIGRvdHMgc2hvdWxkIG5vdCBvdmVybGFwCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMjIyMjk5KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIxMDIsNiArMjEwMiw3IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBsb2FkZXIvRnJhbWVMb2FkUmVxdWVzdC5jcHAKICAgICBsb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCiAgICAgbG9hZGVyL0ZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcAorICAgIGxvYWRl
ci9IVFRQSGVhZGVyRmllbGQuY3BwCiAgICAgbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAog
ICAgIGxvYWRlci9JbWFnZUxvYWRlci5jcHAKICAgICBsb2FkZXIvTGlua0hlYWRlci5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDIyMjI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjczOSw2ICsyNzM5LDggQEAKIAkJ
NUM5QTdBNzYxQUEwRjZFRDAwOTU4QUNGIC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMzOTMwNjAxQUEw
RjZBOTAwMjlDODE2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwICovOyB9OwogCQk1QzlC
ODYwQzFDMjFFM0M5MDAxMTBGMzYgLyogTmV0d29ya0xvYWRNZXRyaWNzLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5Qjg2MEIxQzIxRTNDNjAwMTEw
RjM2IC8qIE5ldHdvcmtMb2FkTWV0cmljcy5tbSAqLzsgfTsKIAkJNUM5RUYxNzExREZGNzFDQzAw
QTQ1MkUzIC8qIFhQYXRoR3JhbW1hci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1QzlFRjE2RjFERkY3MTk5MDBBNDUyRTMgLyogWFBhdGhHcmFtbWFy
LmNwcCAqLzsgfTsKKwkJNUNBMURFQzUxRjcxRUY5OTAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVs
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0Ex
REVDMjFGNzFFNjg2MDBFNzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmNwcCAqLzsgfTsKKwkJNUNB
MURFQzYxRjcxRjFDNzAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNBMURFQzQxRjcxRTY4NzAwRTcxQkQz
IC8qIEhUVFBIZWFkZXJGaWVsZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTVDQjM3RkZFMUM2MkQyOEMwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRv
ck1vY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUNCMzdGRkMxQzYyRDI3ODAwRjIwMTg4IC8qIFNjcm9sbEFuaW1hdG9yTW9jay5jcHAgKi87IH07
CiAJCTVDQjM3RkZGMUM2MkQyQTEwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQjM3RkZEMUM2MkQy
NzgwMEYyMDE4OCAvKiBTY3JvbGxBbmltYXRvck1vY2suaCAqLzsgfTsKIAkJNUNCQzhEQUMxQUFB
MzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQkM4REFBMUFBQTMwMjIwMEUx
QzgwMyAvKiBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5jcHAgKi87IH07CkBAIC0xMDY4Nyw2
ICsxMDY4OSw4IEBACiAJCTVDOUI4NjBCMUMyMUUzQzYwMDExMEYzNiAvKiBOZXR3b3JrTG9hZE1l
dHJpY3MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3b3Jr
TG9hZE1ldHJpY3MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUVGMTZGMURG
RjcxOTkwMEE0NTJFMyAvKiBYUGF0aEdyYW1tYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gWFBhdGhHcmFtbWFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUM5RUYxNzAxREZGNzE5OTAwQTQ1MkUzIC8qIFhQYXRoR3JhbW1hci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYUGF0aEdyYW1tYXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUNBMURFQzIxRjcxRTY4NjAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVs
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVFRQSGVhZGVyRmll
bGQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0ExREVDNDFGNzFFNjg3MDBF
NzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEhUVFBIZWFkZXJGaWVsZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0Iz
N0ZGQzFDNjJEMjc4MDBGMjAxODggLyogU2Nyb2xsQW5pbWF0b3JNb2NrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9yTW9jay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQjM3RkZEMUM2MkQyNzgwMEYyMDE4OCAvKiBTY3Jv
bGxBbmltYXRvck1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xs
QW5pbWF0b3JNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQkM4REFBMUFB
QTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDQzOSw2ICsyNDQ0Myw4IEBACiAJ
CQkJNTFDODFCODgwQzQ0MjJGNzAwMTlFQ0UzIC8qIEZUUERpcmVjdG9yeVBhcnNlci5oICovLAog
CQkJCTk3RENFMUZGMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5jcHAgKi8s
CiAJCQkJOTdEQ0UyMDAxMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250cm9sbGVyLmggKi8s
CisJCQkJNUNBMURFQzIxRjcxRTY4NjAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5jcHAgKi8s
CisJCQkJNUNBMURFQzQxRjcxRTY4NzAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5oICovLAog
CQkJCTA4OTU4MjUzMEU4NTdBN0UwMEY4MkM4MyAvKiBJbWFnZUxvYWRlci5jcHAgKi8sCiAJCQkJ
MDg5NTgyNTQwRTg1N0E3RTAwRjgyQzgzIC8qIEltYWdlTG9hZGVyLmggKi8sCiAJCQkJQ0JBOURD
MDgxREY0NERDNDAwMDU2NzVDIC8qIExpbmtIZWFkZXIuY3BwICovLApAQCAtMjgxNDUsNiArMjgx
NTEsNyBAQAogCQkJCUFENDk5MTQzMThGMDgxNTEwMEJGMDA5MiAvKiBIVE1MVW5rbm93bkVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYxM0FCMENENjMzMTAwMEZBREE3NSAvKiBIVE1M
VmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzlBQUZFRDFBMEMwQzhEMDA2MDVG
OTkgLyogSFRNTFdCUkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQTFERUM2MUY3MUYx
QzcwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNEM3
NjcxMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQSGVhZGVyTWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQUI1RUJEMjE5NEE1MEYzMDA1OUFDNzAgLyogSFRUUEhlYWRlck5hbWVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MTYxNEE3OTFEQTY0MjQxMDA0QUQwNkYgLyogSFRUUEhlYWRlclZhbHVlcy5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yOTIwMiw4ICsyOTIwOSw4IEBACiAJCQkJOTMyQUQ3MDYxN0VG
QTJDNDAwMzhGOEZGIC8qIE1haW5GcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0FFNkM5M0Mx
QkUwQzYwMTAwRTE5RTAzIC8qIE1haW5UaHJlYWRTaGFyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUE4RjZCQzYwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk5MzMwOURGODA5OUU2NDkyMDA1NkU1ODEgLyogbWFya3VwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRTE4NjY0NTFGNzJFNUI0MDBBMENBQjYgLyogTWFya2VyU3VicmFuZ2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTkzMzA5REY4MDk5RTY0OTIwMDU2RTU4MSAvKiBtYXJrdXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3MjhDMzE0MTI2OEU0MzkwMDQxRTg5QiAvKiBNYXJrdXBB
Y2N1bXVsYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDBDNjBFM0YxM0Q3NkQ3RTAwOTJBMjc1
IC8qIE1hcmt1cFRva2VuaXplcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZBQkU3MkY1
MTA1OUMxRUIwMEQ4ODhDQyAvKiBNYXRoTUxBbm5vdGF0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMjE4OSw2ICszMjE5Niw3IEBACiAJCQkJQThFQTc5RjMwQTE5MTZERjAwQThFRjVG
IC8qIEhUTUxVTGlzdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0NjEzQUEwQ0Q2
MzMxMDAwRkFEQTc1IC8qIEhUTUxWaWRlb0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODM5QUFGRUMxQTBDMEM4RDAwNjA1Rjk5IC8qIEhUTUxXQlJFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTVDQTFERUM1MUY3MUVGOTkwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEI4QzU2RDQwRjI4NjI3RjAwMDUwMkUxIC8qIEhUVFBIZWFk
ZXJNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFDOTAwQzMxOTQzQzBGQzAwODYyNUI1IC8q
IEhUVFBIZWFkZXJOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYxNEE3ODFEQTY0MjNC
MDA0QUQwNkYgLyogSFRUUEhlYWRlclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzMjc2
LDggKzMzMjg0LDggQEAKIAkJCQk3QUU2QzkzQjFCRTBDNjAxMDBFMTlFMDMgLyogTWFpblRocmVh
ZFNoYXJlZFRpbWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBRTZDOTM4MUJFMEM1QzgwMEUx
OUUwMyAvKiBNYWluVGhyZWFkU2hhcmVkVGltZXJDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QThGNkJDNTBEQjU1Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJOTMzMDlERjcwOTlFNjQ5MjAwNTZFNTgxIC8qIG1hcmt1cC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDRTE4NjY0NDFGNzJFNUI0MDBBMENBQjYgLyogTWFya2VyU3VicmFuZ2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJOTMzMDlERjcwOTlFNjQ5MjAwNTZFNTgxIC8qIG1hcmt1cC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzI4QzMxMzEyNjhFNDM5MDA0MUU4OUIgLyogTWFya3Vw
QWNjdW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkFCRTcyRjQxMDU5QzFFQjAwRDg4
OENDIC8qIE1hdGhNTEFubm90YXRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZB
QkU3MkY0MTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZpc2lv
biAyMjIyOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAj
aW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRUUEhlYWRlckZpZWxkLmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRl
ck5hbWVzLmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJJY29uTG9hZGVy
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24g
MjIyMjk5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgY2xhc3MgQ29udGVudEZpbHRlcjsKIGNsYXNzIEZv
cm1TdGF0ZTsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVMb2FkZXI7CitjbGFzcyBIVFRQSGVh
ZGVyRmllbGQ7CiBjbGFzcyBJY29uTG9hZGVyOwogY2xhc3MgUGFnZTsKIGNsYXNzIFByZXZpZXdD
b252ZXJ0ZXI7CkBAIC0yOTUsNiArMjk2LDggQEAgcHVibGljOgogCiAgICAgY29uc3QgVmVjdG9y
PExpbmtJY29uPiYgbGlua0ljb25zKCkgY29uc3QgeyByZXR1cm4gbV9saW5rSWNvbnM7IH0KIAor
ICAgIHZvaWQgc2V0Q3VzdG9tSGVhZGVyRmllbGRzKFZlY3RvcjxIVFRQSGVhZGVyRmllbGQ+JiYg
ZmllbGRzKSB7IG1fY3VzdG9tSGVhZGVyRmllbGRzID0gV1RGTW92ZShmaWVsZHMpOyB9CisgICAg
CiBwcm90ZWN0ZWQ6CiAgICAgV0VCQ09SRV9FWFBPUlQgRG9jdW1lbnRMb2FkZXIoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Vic3RpdHV0ZURhdGEmKTsKIApAQCAtNDUyLDYgKzQ1NSw4
IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8SWNvbkxvYWRlcj4sIHVp
bnQ2NF90PiBtX2ljb25Mb2FkZXJzOwogICAgIFZlY3RvcjxMaW5rSWNvbj4gbV9saW5rSWNvbnM7
CiAKKyAgICBWZWN0b3I8SFRUUEhlYWRlckZpZWxkPiBtX2N1c3RvbUhlYWRlckZpZWxkczsKKyAg
ICAKICAgICBib29sIG1fc3VicmVzb3VyY2VMb2FkZXJzQXJlUGFnZUNhY2hlQWNjZXB0YWJsZSB7
IGZhbHNlIH07CiAgICAgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBtX3Nob3VsZE9wZW5F
eHRlcm5hbFVSTHNQb2xpY3kgeyBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRO
b3RBbGxvdyB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSFRUUEhlYWRlckZpZWxk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSFRUUEhlYWRlckZpZWxk
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSFRUUEhlYWRlckZp
ZWxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJIVFRQSGVhZGVyRmllbGQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgUkZDNzIzMCB7CisgICAgCitzdGF0aWMgYm9vbCBpc1Rva2VuQ2hhcmFjdGVyKFVDaGFyIGMp
Cit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBoYShjKSB8fCBpc0FTQ0lJRGlnaXQoYykKKyAgICAg
ICAgfHwgYyA9PSAnIScgfHwgYyA9PSAnIycgfHwgYyA9PSAnJCcKKyAgICAgICAgfHwgYyA9PSAn
JScgfHwgYyA9PSAnJicgfHwgYyA9PSAnXCcnCisgICAgICAgIHx8IGMgPT0gJyonIHx8IGMgPT0g
JysnIHx8IGMgPT0gJy0nCisgICAgICAgIHx8IGMgPT0gJy4nIHx8IGMgPT0gJ14nIHx8IGMgPT0g
J18nCisgICAgICAgIHx8IGMgPT0gJ2AnIHx8IGMgPT0gJ3wnIHx8IGMgPT0gJ34nOworfQorCitz
dGF0aWMgYm9vbCBpc0RlbGltaXRlcihVQ2hhciBjKQoreworICAgIHJldHVybiBjID09ICcoJyB8
fCBjID09ICcpJyB8fCBjID09ICcsJworICAgICAgICB8fCBjID09ICcvJyB8fCBjID09ICc6JyB8
fCBjID09ICc7JworICAgICAgICB8fCBjID09ICc8JyB8fCBjID09ICc9JyB8fCBjID09ICc+Jwor
ICAgICAgICB8fCBjID09ICc/JyB8fCBjID09ICdAJyB8fCBjID09ICdbJworICAgICAgICB8fCBj
ID09ICdcXCcgfHwgYyA9PSAnXScgfHwgYyA9PSAneycKKyAgICAgICAgfHwgYyA9PSAnfScgfHwg
YyA9PSAnIic7Cit9CisKK3N0YXRpYyBib29sIGlzVmlzaWJsZUNoYXJhY3RlcihVQ2hhciBjKQor
eworICAgIHJldHVybiBpc1Rva2VuQ2hhcmFjdGVyKGMpIHx8IGlzRGVsaW1pdGVyKGMpOworfQor
CitzdGF0aWMgYm9vbCBpc1doaXRlc3BhY2UoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gYyA9PSAn
ICcgfHwgYyA9PSAnXHQnOworfQorCit0ZW1wbGF0ZTxzaXplX3QgbWluLCBzaXplX3QgbWF4Pgor
c3RhdGljIGJvb2wgaXNJblJhbmdlKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIGMgPj0gbWluICYm
IGMgPD0gbWF4OworfQorCitzdGF0aWMgYm9vbCBpc09CU1RleHQoVUNoYXIgYykKK3sKKyAgICBy
ZXR1cm4gaXNJblJhbmdlPDB4ODAsIDB4RkY+KGMpOworfQorCitzdGF0aWMgYm9vbCBpc1F1b3Rl
ZFRleHRDaGFyYWN0ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gaXNXaGl0ZXNwYWNlKGMpCisg
ICAgICAgIHx8IGMgPT0gMHgyMQorICAgICAgICB8fCBpc0luUmFuZ2U8MHgyMywgMHg1Qj4oYykK
KyAgICAgICAgfHwgaXNJblJhbmdlPDB4NUQsIDB4N0U+KGMpCisgICAgICAgIHx8IGlzT0JTVGV4
dChjKTsKK30KKworc3RhdGljIGJvb2wgaXNRdW90ZWRQYWlyU2Vjb25kT2N0ZXQoVUNoYXIgYykK
K3sKKyAgICByZXR1cm4gaXNXaGl0ZXNwYWNlKGMpCisgICAgICAgIHx8IGlzVmlzaWJsZUNoYXJh
Y3RlcihjKQorICAgICAgICB8fCBpc09CU1RleHQoYyk7Cit9CisKK3N0YXRpYyBib29sIGlzQ29t
bWVudFRleHQoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gaXNXaGl0ZXNwYWNlKGMpCisgICAgICAg
IHx8IGlzSW5SYW5nZTwweDIxLCAweDI3PihjKQorICAgICAgICB8fCBpc0luUmFuZ2U8MHgyQSwg
MHg1Qj4oYykKKyAgICAgICAgfHwgaXNJblJhbmdlPDB4NUQsIDB4N0U+KGMpCisgICAgICAgIHx8
IGlzT0JTVGV4dChjKTsKK30KKworc3RhdGljIGJvb2wgaXNWYWxpZE5hbWUoU3RyaW5nVmlldyBu
YW1lKQoreworICAgIGlmICghbmFtZS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgKytpKSB7CisgICAgICAg
IGlmICghaXNUb2tlbkNoYXJhY3RlcihuYW1lW2ldKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGlzVmFsaWRWYWx1
ZShTdHJpbmdWaWV3IHZhbHVlKQoreworICAgIGVudW0gY2xhc3MgU3RhdGUgeworICAgICAgICBP
cHRpb25hbFdoaXRlc3BhY2UsCisgICAgICAgIFRva2VuLAorICAgICAgICBRdW90ZWRTdHJpbmcs
CisgICAgICAgIENvbW1lbnQsCisgICAgfTsKKyAgICBTdGF0ZSBzdGF0ZSA9IFN0YXRlOjpPcHRp
b25hbFdoaXRlc3BhY2U7CisgICAgc2l6ZV90IGNvbW1lbnREZXB0aCA9IDA7CisgICAgYm9vbCBo
YWROb25XaGl0ZXNwYWNlID0gZmFsc2U7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2YWx1ZS5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSB2YWx1ZVtpXTsKKyAg
ICAgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICBjYXNlIFN0YXRlOjpPcHRpb25hbFdoaXRl
c3BhY2U6CisgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGMpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgaGFkTm9uV2hpdGVzcGFjZSA9IHRydWU7CisgICAgICAg
ICAgICBpZiAoaXNUb2tlbkNoYXJhY3RlcihjKSkgeworICAgICAgICAgICAgICAgIHN0YXRlID0g
U3RhdGU6OlRva2VuOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGMgPT0gJyInKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZTo6UXVvdGVkU3RyaW5nOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGMgPT0gJygnKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFj
b21tZW50RGVwdGgpOworICAgICAgICAgICAgICAgICsrY29tbWVudERlcHRoOworICAgICAgICAg
ICAgICAgIHN0YXRlID0gU3RhdGU6OkNvbW1lbnQ7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBTdGF0ZTo6VG9rZW46CisgICAgICAgICAgICBpZiAoaXNUb2tlbkNoYXJh
Y3RlcihjKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHN0YXRlID0g
U3RhdGU6Ok9wdGlvbmFsV2hpdGVzcGFjZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBjYXNlIFN0YXRlOjpRdW90ZWRTdHJpbmc6CisgICAgICAgICAgICBpZiAoYyA9PSAnIicpIHsK
KyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpPcHRpb25hbFdoaXRlc3BhY2U7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA9
PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgIGlmIChpID09
IHZhbHVlLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgaWYgKCFpc1F1b3RlZFBhaXJTZWNvbmRPY3RldCh2YWx1ZVtpXSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaXNRdW90ZWRUZXh0Q2hhcmFjdGVyKGMp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBjYXNlIFN0YXRlOjpDb21tZW50OgorICAgICAgICAgICAgaWYgKGMgPT0gJygnKSB7
CisgICAgICAgICAgICAgICAgKytjb21tZW50RGVwdGg7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA9PSAnKScpIHsKKyAgICAgICAg
ICAgICAgICAtLWNvbW1lbnREZXB0aDsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbW1lbnREZXB0
aCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6T3B0aW9uYWxXaGl0ZXNwYWNl
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGMgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAgICBp
ZiAoaSA9PSB2YWx1ZS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIGlmICghaXNRdW90ZWRQYWlyU2Vjb25kT2N0ZXQodmFsdWVbaV0p
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWlzQ29tbWVudFRleHQoYykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgU3Rh
dGU6Ok9wdGlvbmFsV2hpdGVzcGFjZToKKyAgICBjYXNlIFN0YXRlOjpUb2tlbjoKKyAgICAgICAg
cmV0dXJuIGhhZE5vbldoaXRlc3BhY2U7CisgICAgY2FzZSBTdGF0ZTo6UXVvdGVkU3RyaW5nOgor
ICAgIGNhc2UgU3RhdGU6OkNvbW1lbnQ6CisgICAgICAgIC8vIFVuY2xvc2VkIGNvbW1lbnRzIG9y
IHF1b3RlcyBhcmUgaW52YWxpZCB2YWx1ZXMuCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFJGQzcyMzAKKworSFRUUEhlYWRlckZp
ZWxkOjpIVFRQSGVhZGVyRmllbGQoY29uc3QgU3RyaW5nJiBmaWVsZCkKK3sKKyAgICBzaXplX3Qg
Y29sb25Mb2NhdGlvbiA9IGZpZWxkLmZpbmQoJzonKTsKKyAgICBpZiAoY29sb25Mb2NhdGlvbiA9
PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nVmlldyBuYW1lID0gU3Ry
aW5nVmlldyhmaWVsZCkuc3Vic3RyaW5nKDAsIGNvbG9uTG9jYXRpb24pLnN0cmlwTGVhZGluZ0Fu
ZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoUkZDNzIzMDo6aXNXaGl0ZXNwYWNlKTsKKyAgICBT
dHJpbmdWaWV3IHZhbHVlID0gU3RyaW5nVmlldyhmaWVsZCkuc3Vic3RyaW5nKGNvbG9uTG9jYXRp
b24gKyAxKS5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKFJGQzcyMzA6
OmlzV2hpdGVzcGFjZSk7CisgICAgaWYgKCFSRkM3MjMwOjppc1ZhbGlkTmFtZShuYW1lKSB8fCAh
UkZDNzIzMDo6aXNWYWxpZFZhbHVlKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9m
aWVsZCA9IG1ha2VTdHJpbmcobmFtZSwgJzonLCAnICcsICB2YWx1ZSk7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IVFRQSGVhZGVyRmllbGQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvSFRUUEhlYWRlckZpZWxkLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEhUVFBIZWFkZXJGaWVs
ZCB7CitwdWJsaWM6CisgICAgSFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYpOworICAgIAor
ICAgIGNvbnN0IFN0cmluZyYgZmllbGQoKSBjb25zdCB7IHJldHVybiBtX2ZpZWxkOyB9CisKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8SFRUUEhlYWRl
ckZpZWxkPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX2ZpZWxk
OworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgSFRUUEhlYWRlckZpZWxkOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fZmllbGQ7
Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPEhUVFBIZWFkZXJG
aWVsZD4gSFRUUEhlYWRlckZpZWxkOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBz
dGQ6Om9wdGlvbmFsPFN0cmluZz4gZmllbGQ7CisgICAgZGVjb2RlciA+PiBmaWVsZDsKKyAgICBp
ZiAoIWZpZWxkKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHt7
IFdURk1vdmUoKmZpZWxkKSB9fTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIyMjI5OSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTctMDktMjAgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgaW5mcmFzdHJ1Y3R1cmUg
Zm9yIGFkZGluZyBjdXN0b20gaGVhZGVycyB0byByZXF1ZXN0cyBwZXIgd2Vic2l0ZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjU1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0
ZVBvbGljaWVzLmNwcDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVQb2xpY2llcy5o
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9saWNpZXM6OmVuY29kZSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVQb2xpY2llczo6ZGVjb2RlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVQb2xpY2llcy5jcHA6CisgICAgICAgIChXS1dlYnNpdGVQb2xpY2llc0NvcHlDdXN0
b21IZWFkZXJGaWVsZHMpOgorICAgICAgICAoV0tXZWJzaXRlUG9saWNpZXNTZXRDdXN0b21IZWFk
ZXJGaWVsZHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVQb2xpY2llcy5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vic2l0ZVBvbGljaWVzLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJzaXRlUG9saWNpZXMubW06CisgICAg
ICAgICgtW19XS1dlYnNpdGVQb2xpY2llcyBjdXN0b21IZWFkZXJGaWVsZHNdKToKKyAgICAgICAg
KC1bX1dLV2Vic2l0ZVBvbGljaWVzIHNldEN1c3RvbUhlYWRlckZpZWxkczpdKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisKIDIwMTctMDktMjAgIE1pY2hhZWwgQ2F0YW56YXJvICA8
bWNhdGFuemFyb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjIyMjE5NCkgW1dQ
RV0gTGlicmFyeSBhbmQgZXhlY3V0YWJsZSBvdXRwdXQgbmFtZXMgYnJva2VuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXMuaAkocmV2aXNpb24gMjIyMjk5KQorKysgU291
cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDkgKzI1LDExIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVh
ZGVyRmllbGQuaD4KICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9P
cHRpb25TZXQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC00OCw2ICs1MCw3IEBAIHN0cnVjdCBX
ZWJzaXRlUG9saWNpZXMgewogICAgIGJvb2wgY29udGVudEJsb2NrZXJzRW5hYmxlZCB7IHRydWUg
fTsKICAgICBPcHRpb25TZXQ8V2Vic2l0ZUF1dG9wbGF5UXVpcms+IGFsbG93ZWRBdXRvcGxheVF1
aXJrczsKICAgICBXZWJzaXRlQXV0b3BsYXlQb2xpY3kgYXV0b3BsYXlQb2xpY3kgeyBXZWJzaXRl
QXV0b3BsYXlQb2xpY3k6OkRlZmF1bHQgfTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRl
ckZpZWxkPiBjdXN0b21IZWFkZXJGaWVsZHM7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVzPiBkZWNvZGUoRGVjb2RlciYp
OwpAQCAtNzYsNiArNzksNyBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIFdlYnNpdGVQ
b2xpCiAgICAgZW5jb2RlciA8PCBjb250ZW50QmxvY2tlcnNFbmFibGVkOwogICAgIGVuY29kZXIg
PDwgYXV0b3BsYXlQb2xpY3k7CiAgICAgZW5jb2RlciA8PCBhbGxvd2VkQXV0b3BsYXlRdWlya3M7
CisgICAgZW5jb2RlciA8PCBjdXN0b21IZWFkZXJGaWVsZHM7CiB9CiAKIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVzPiBXZWJzaXRlUG9saWNpZXM6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtOTQsMTEgKzk4LDE3IEBAIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8V2UKICAgICBkZWNvZGVyID4+IGFsbG93ZWRBdXRv
cGxheVF1aXJrczsKICAgICBpZiAoIWFsbG93ZWRBdXRvcGxheVF1aXJrcykKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxXZWJDb3Jl
OjpIVFRQSGVhZGVyRmllbGQ+PiBjdXN0b21IZWFkZXJGaWVsZHM7CisgICAgZGVjb2RlciA+PiBj
dXN0b21IZWFkZXJGaWVsZHM7CisgICAgaWYgKCFjdXN0b21IZWFkZXJGaWVsZHMpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICByZXR1cm4geyB7CiAgICAgICAgIFdURk1vdmUo
KmNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQpLAogICAgICAgICBXVEZNb3ZlKCphbGxvd2VkQXV0b3Bs
YXlRdWlya3MpLAogICAgICAgICBXVEZNb3ZlKCphdXRvcGxheVBvbGljeSksCisgICAgICAgIFdU
Rk1vdmUoKmN1c3RvbUhlYWRlckZpZWxkcyksCiAgICAgfSB9OwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGljaWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5oCShyZXZpc2lv
biAyMjIyOTkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZVBvbGlj
aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDkgQEAgcHVibGljOgogICAgIFdlYktp
dDo6V2Vic2l0ZUF1dG9wbGF5UG9saWN5IGF1dG9wbGF5UG9saWN5KCkgY29uc3QgeyByZXR1cm4g
bV93ZWJzaXRlUG9saWNpZXMuYXV0b3BsYXlQb2xpY3k7IH0KICAgICB2b2lkIHNldEF1dG9wbGF5
UG9saWN5KFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UG9saWN5IHBvbGljeSkgeyBtX3dlYnNpdGVQ
b2xpY2llcy5hdXRvcGxheVBvbGljeSA9IHBvbGljeTsgfQogCisgICAgdm9pZCBzZXRDdXN0b21I
ZWFkZXJGaWVsZHMoVmVjdG9yPFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZD4mJiBjdXN0b21IZWFk
ZXJGaWVsZHMpIHsgbV93ZWJzaXRlUG9saWNpZXMuY3VzdG9tSGVhZGVyRmllbGRzID0gV1RGTW92
ZShjdXN0b21IZWFkZXJGaWVsZHMpOyB9OworICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpIVFRQ
SGVhZGVyRmllbGQ+IGN1c3RvbUhlYWRlckZpZWxkcygpIHsgcmV0dXJuIG1fd2Vic2l0ZVBvbGlj
aWVzLmN1c3RvbUhlYWRlckZpZWxkczsgfQorCiAgICAgY29uc3QgV2ViS2l0OjpXZWJzaXRlUG9s
aWNpZXMmIHdlYnNpdGVQb2xpY2llcygpIHsgcmV0dXJuIG1fd2Vic2l0ZVBvbGljaWVzOyB9CiAg
ICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlUG9saWNpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLV2Vic2l0ZVBvbGljaWVzLmNwcAkocmV2aXNpb24gMjIyMjk5KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlUG9saWNpZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw4ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldLV2Vi
c2l0ZVBvbGljaWVzLmgiCiAKKyNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVdl
YnNpdGVQb2xpY2llcy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQXJy
YXkuaCIKICNpbmNsdWRlICJXZWJzaXRlUG9saWNpZXMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKQEAgLTUyLDYgKzU0LDMwIEBAIGJvb2wgV0tXZWJzaXRlUG9saWNpZXNHZXRDb250ZW50
QmxvY2tlcnMKICAgICByZXR1cm4gdG9JbXBsKHdlYnNpdGVQb2xpY2llcyktPmNvbnRlbnRCbG9j
a2Vyc0VuYWJsZWQoKTsKIH0KIAorV0tfRVhQT1JUIFdLQXJyYXlSZWYgV0tXZWJzaXRlUG9saWNp
ZXNDb3B5Q3VzdG9tSGVhZGVyRmllbGRzKFdLV2Vic2l0ZVBvbGljaWVzUmVmIHdlYnNpdGVQb2xp
Y2llcykKK3sKKyAgICBjb25zdCBhdXRvJiBmaWVsZHMgPSB0b0ltcGwod2Vic2l0ZVBvbGljaWVz
KS0+Y3VzdG9tSGVhZGVyRmllbGRzKCk7CisgICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+
IHN0cmluZ3M7CisgICAgc3RyaW5ncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpZWxkcy5zaXpl
KCkpOworICAgIGZvciAoY29uc3QgYXV0byYgZmllbGQgOiBmaWVsZHMpCisgICAgICAgIHN0cmlu
Z3MudW5jaGVja2VkQXBwZW5kKEFQSTo6U3RyaW5nOjpjcmVhdGUoZmllbGQuZmllbGQoKSkpOwor
ICAgIHJldHVybiB0b0FQSShBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShzdHJpbmdzKSkucHRy
KCkpOworfQorCitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVQb2xpY2llc1NldEN1c3RvbUhlYWRl
ckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1JlZiB3ZWJzaXRlUG9saWNpZXMsIFdLQXJyYXlSZWYg
YXJyYXkpCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IFdLQXJyYXlHZXRTaXplKGFycmF5KTsKKyAg
ICBWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkPiBmaWVsZHM7CisgICAgZmllbGRzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZCBwYXJzZWRG
aWVsZCh0b0ltcGwoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRl
eChhcnJheSwgaSkpKS0+c3RyaW5nKCkpOworICAgICAgICBpZiAoIXBhcnNlZEZpZWxkLmZpZWxk
KCkuaXNOdWxsKCkKKyAgICAgICAgICAgICYmIHBhcnNlZEZpZWxkLmZpZWxkKCkuc3RhcnRzV2l0
aElnbm9yaW5nQVNDSUlDYXNlKCJYLSIpKSAvLyBMZXQncyBqdXN0IHByZXRlbmQgUkZDNjY0OCBu
ZXZlciBoYXBwZW5lZC4KKyAgICAgICAgICAgIGZpZWxkcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92
ZShwYXJzZWRGaWVsZCkpOworICAgIH0KKyAgICB0b0ltcGwod2Vic2l0ZVBvbGljaWVzKS0+c2V0
Q3VzdG9tSGVhZGVyRmllbGRzKFdURk1vdmUoZmllbGRzKSk7Cit9CisKIHZvaWQgV0tXZWJzaXRl
UG9saWNpZXNTZXRBbGxvd2VkQXV0b3BsYXlRdWlya3MoV0tXZWJzaXRlUG9saWNpZXNSZWYgd2Vi
c2l0ZVBvbGljaWVzLCBXS1dlYnNpdGVBdXRvcGxheVF1aXJrIGFsbG93ZWRRdWlya3MpCiB7CiAg
ICAgT3B0aW9uU2V0PFdlYnNpdGVBdXRvcGxheVF1aXJrPiBxdWlya3M7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVQb2xpY2llcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmgJKHJldmlz
aW9uIDIyMjI5OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBv
bGljaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDkgQEAgV0tfRVhQT1JUIFdLV2Vi
c2l0ZVBvbGljaWVzUmVmIFdLV2Vic2l0ZQogV0tfRVhQT1JUIGJvb2wgV0tXZWJzaXRlUG9saWNp
ZXNHZXRDb250ZW50QmxvY2tlcnNFbmFibGVkKFdLV2Vic2l0ZVBvbGljaWVzUmVmKTsKIFdLX0VY
UE9SVCB2b2lkIFdLV2Vic2l0ZVBvbGljaWVzU2V0Q29udGVudEJsb2NrZXJzRW5hYmxlZChXS1dl
YnNpdGVQb2xpY2llc1JlZiwgYm9vbCk7CiAKK1dLX0VYUE9SVCBXS0FycmF5UmVmIFdLV2Vic2l0
ZVBvbGljaWVzQ29weUN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1JlZik7CitX
S19FWFBPUlQgdm9pZCBXS1dlYnNpdGVQb2xpY2llc1NldEN1c3RvbUhlYWRlckZpZWxkcyhXS1dl
YnNpdGVQb2xpY2llc1JlZiwgV0tBcnJheVJlZik7CisKIFdLX0VYUE9SVCBXS1dlYnNpdGVBdXRv
cGxheVF1aXJrIFdLV2Vic2l0ZVBvbGljaWVzR2V0QWxsb3dlZEF1dG9wbGF5UXVpcmtzKFdLV2Vi
c2l0ZVBvbGljaWVzUmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZVBvbGljaWVzU2V0QWxs
b3dlZEF1dG9wbGF5UXVpcmtzKFdLV2Vic2l0ZVBvbGljaWVzUmVmLCBXS1dlYnNpdGVBdXRvcGxh
eVF1aXJrKTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dl
YnNpdGVQb2xpY2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tXZWJzaXRlUG9saWNpZXMuaAkocmV2aXNpb24gMjIyMjk5KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAuMTIu
MyksIGlvcygKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGNvbnRlbnRCbG9ja2Vyc0VuYWJs
ZWQ7CiBAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLV2Vic2l0ZUF1dG9wbGF5UXVpcmsgYWxsb3dl
ZEF1dG9wbGF5UXVpcmtzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEzKSwgaW9zKDExLjAp
KTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBfV0tXZWJzaXRlQXV0b3BsYXlQb2xpY3kgYXV0b3Bs
YXlQb2xpY3kgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTMpLCBpb3MoMTEuMCkpOworQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1zZXRDdXN0b21IZWFkZXJGaWVsZHM6KSBO
U0FycmF5PE5TU3RyaW5nICo+ICpjdXN0b21IZWFkZXJGaWVsZHMgV0tfQVBJX0FWQUlMQUJMRSht
YWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIEBlbmQKIApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vic2l0ZVBv
bGljaWVzLm1tCShyZXZpc2lvbiAyMjIyOTkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLV2Vic2l0ZVBvbGljaWVzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiAr
MTE2LDI4IEBAIC0gKF9XS1dlYnNpdGVBdXRvcGxheVBvbGljeSlhdXRvcGxheVBvbGkKICAgICB9
CiB9CiAKKy0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKiljdXN0b21IZWFkZXJGaWVsZHMKK3sKKyAg
ICBjb25zdCBhdXRvJiBmaWVsZHMgPSBfd2Vic2l0ZVBvbGljaWVzLT5jdXN0b21IZWFkZXJGaWVs
ZHMoKTsKKyAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eTpmaWVsZHMuc2l6ZSgpXSBhdXRvcmVsZWFzZV07CisgICAgZm9y
IChjb25zdCBhdXRvJiBmaWVsZCA6IGZpZWxkcykKKyAgICAgICAgW2FycmF5IGFkZE9iamVjdDpm
aWVsZC5maWVsZCgpXTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKKy0gKHZvaWQpc2V0Q3VzdG9t
SGVhZGVyRmllbGRzOihOU0FycmF5PE5TU3RyaW5nICo+ICopZmllbGRzCit7CisgICAgVmVjdG9y
PFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZD4gcGFyc2VkRmllbGRzOworICAgIHBhcnNlZEZpZWxk
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpZWxkcy5jb3VudCk7CisgICAgZm9yIChOU1N0cmlu
ZyAqc3RyaW5nIGluIGZpZWxkcykgeworICAgICAgICBXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQg
cGFyc2VkRmllbGQoc3RyaW5nKTsKKyAgICAgICAgaWYgKCFwYXJzZWRGaWVsZC5maWVsZCgpLmlz
TnVsbCgpCisgICAgICAgICAgICAmJiBwYXJzZWRGaWVsZC5maWVsZCgpLnN0YXJ0c1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZSgiWC0iKSkgLy8gTGV0J3MganVzdCBwcmV0ZW5kIFJGQzY2NDggbmV2ZXIg
aGFwcGVuZWQuCisgICAgICAgICAgICBwYXJzZWRGaWVsZHMudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUocGFyc2VkRmllbGQpKTsKKyAgICB9CisgICAgX3dlYnNpdGVQb2xpY2llcy0+c2V0Q3VzdG9t
SGVhZGVyRmllbGRzKFdURk1vdmUocGFyc2VkRmllbGRzKSk7Cit9CisKIC0gKE5TU3RyaW5nICop
ZGVzY3JpcHRpb24KIHsKICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8
JUA6ICVwOyBjb250ZW50QmxvY2tlcnNFbmFibGVkID0gJWQ+IiwgTlNTdHJpbmdGcm9tQ2xhc3Mo
c2VsZi5jbGFzcyksIHNlbGYsIHNlbGYuY29udGVudEJsb2NrZXJzRW5hYmxlZF07CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDIyMjI5OSkKKysrIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgyMSw2ICs4MjEsOCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaERlY2lkCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBkb2N1
bWVudExvYWRlci0+c2V0Q3VzdG9tSGVhZGVyRmllbGRzKFdURk1vdmUod2Vic2l0ZVBvbGljaWVz
LmN1c3RvbUhlYWRlckZpZWxkcykpOworICAgIAogICAgIC8vIE9ubHkgc2V0VXNlckNvbnRlbnRF
eHRlbnNpb25zRW5hYmxlZCBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRpc2FibGVkIGJ5IHJl
bG9hZGluZyB3aXRob3V0IGNvbnRlbnQgYmxvY2tlcnMuCiAgICAgaWYgKGRvY3VtZW50TG9hZGVy
LT51c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKCkpCiAgICAgICAgIGRvY3VtZW50TG9hZGVy
LT5zZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKHdlYnNpdGVQb2xpY2llcy5jb250ZW50
QmxvY2tlcnNFbmFibGVkKTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjI5OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE3LTA5LTIwICBBbGV4IENocmlzdGVuc2Vu
ICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGluZnJhc3RydWN0dXJl
IGZvciBhZGRpbmcgY3VzdG9tIGhlYWRlcnMgdG8gcmVxdWVzdHMgcGVyIHdlYnNpdGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzI1NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0hUVFBIZWFkZXJGaWVsZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoc2hvdWxkUmVtYWluVW5jaGFuZ2VkKToKKyAgICAgICAgKHNob3VsZEJlSW52YWxpZCk6
CisgICAgICAgIChzaG91bGRCZWNvbWUpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlUG9saWNpZXMubW06CisgICAgICAg
IChURVNUKToKKwogMjAxNy0wOS0yMCAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+
CiAKICAgICAgICAgU3BlbGxpbmcgYW5kIGdyYW1tYXIgZG90cyBzaG91bGQgbm90IG92ZXJsYXAK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjIyOTkpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSw3IEBACiAJCTVDOUU1OTQxMUQzRUI1QUMwMEUzQzYy
RSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUU1OTNFMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNh
dGlvbkNhY2hlLmRiICovOyB9OwogCQk1QzlFNTk0MjFEM0VCNUFDMDBFM0M2MkUgLyogQXBwbGlj
YXRpb25DYWNoZS5kYi1zaG0gaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUM5RTU5M0YxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2Fj
aGUuZGItc2htICovOyB9OwogCQk1QzlFNTk0MzFEM0VCNUFDMDBFM0M2MkUgLyogQXBwbGljYXRp
b25DYWNoZS5kYi13YWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUM5RTU5NDAxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUu
ZGItd2FsICovOyB9OworCQk1Q0ExREVDODFGNzFGNzAxMDBFNzFCRDMgLyogSFRUUEhlYWRlckZp
ZWxkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
QTFERUM3MUY3MUY0MDcwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuY3BwICovOyB9OwogCQk1
Q0IxOEJBODFGNTY0NUUzMDBFRTIzQzQgLyogQ2xpY2tBdXRvRmlsbEJ1dHRvbi5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQjE4QkE3MUY1NjQ1QjIw
MEVFMjNDNCAvKiBDbGlja0F1dG9GaWxsQnV0dG9uLm1tICovOyB9OwogCQk1Q0I0MEI0RTFGNEI5
OEQzMDA3REM3QjkgLyogVUlEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDQjQwQjREMUY0Qjk4QkUwMDdEQzdCOSAvKiBVSURlbGVnYXRl
Lm1tICovOyB9OwogCQk1Q0UzNTREOTFFNzBEQTVDMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0UzNTREODFFNzBEOUMzMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0g
Ki87IH07CkBAIC0xMzMxLDYgKzEzMzIsNyBAQAogCQk1QzlFNTkzRTFEM0VCMURFMDBFM0M2MkUg
LyogQXBwbGljYXRpb25DYWNoZS5kYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlLmRiOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlFNTkzRjFEM0VCMURFMDBFM0M2MkUgLyogQXBwbGlj
YXRpb25DYWNoZS5kYi1zaG0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gIkFwcGxpY2F0aW9uQ2FjaGUuZGItc2htIjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM5RTU5NDAxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxp
Y2F0aW9uQ2FjaGUuZGItd2FsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9ICJBcHBsaWNhdGlvbkNhY2hlLmRiLXdhbCI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQTFERUM3MUY3MUY0MDcwMEU3MUJEMyAvKiBIVFRQ
SGVhZGVyRmllbGQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRU
UEhlYWRlckZpZWxkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCMThCQTcx
RjU2NDVCMjAwRUUyM0M0IC8qIENsaWNrQXV0b0ZpbGxCdXR0b24ubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDbGlja0F1dG9GaWxsQnV0dG9uLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0I0MEI0RDFGNEI5OEJFMDA3REM3QjkgLyogVUlEZWxl
Z2F0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFVJRGVsZWdh
dGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDRTM1NEQ4MUU3MEQ5QzMwMEJF
RkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjA4Miw2ICsyMDg0LDcgQEAKIAkJCQkxQ0FEMUY4NTFFNUNF
N0RBMDBBRjJDMkMgLyogRm9udENhY2hlLmNwcCAqLywKIAkJCQk4RTRBODUzNjFFMUQxQUExMDBG
NTNCMEYgLyogR3JpZFBvc2l0aW9uLmNwcCAqLywKIAkJCQk4M0I4OEEzMzFDODAwNTZEMDBCQjI0
MTggLyogSFRNTFBhcnNlcklkaW9tcy5jcHAgKi8sCisJCQkJNUNBMURFQzcxRjcxRjQwNzAwRTcx
QkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5jcHAgKi8sCiAJCQkJN0E5MDlBNzMxRDg3NzQ3NTAwN0Ux
MEY4IC8qIEludFBvaW50LmNwcCAqLywKIAkJCQk3QTkwOUE3NDFEODc3NDc1MDA3RTEwRjggLyog
SW50UmVjdC5jcHAgKi8sCiAJCQkJN0E5MDlBNzUxRDg3NzQ3NTAwN0UxMEY4IC8qIEludFNpemUu
Y3BwICovLApAQCAtMzI0MSw2ICszMjQ0LDcgQEAKIAkJCQk3Q0NFN0VDMTFBNDExQTdFMDA0NDdD
NEMgLyogSFRNTENvbGxlY3Rpb25OYW1lZEl0ZW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NF
N0VDMjFBNDExQTdFMDA0NDdDNEMgLyogSFRNTEZvcm1Db2xsZWN0aW9uTmFtZWRJdGVtLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M4M0UwNTAxRDBBNjQxODAwRkVCQ0YzIC8qIEhUTUxQYXJzZXJJ
ZGlvbXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNBMURFQzgxRjcxRjcwMTAwRTcxQkQzIC8q
IEhUVFBIZWFkZXJGaWVsZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUFGMjNERjFFRjFBMzcz
MDA3MkYyODEgLyogSWNvbkxvYWRpbmdEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUx
MDQ3Nzc4MUQyOTkyM0IwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxMTBGQ0ZBMUUwMUNEQjgwMDZGOEQwQiAvKiBJREJJbmRleFVwZ3JhZGVUb1Yy
Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC0zMjgyLDYgKzMyODYsNyBAQAogCQkJCTQ2QzUxOURBMUQz
NTVBQjIwMERBQTUxQSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50cmllcy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTdBNkEyQzcwMURDQ0ZBOEMwMEMwRDA4NSAvKiBMb2NhbFN0b3JhZ2VRdWlya1Rlc3Qu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkwNzZFNTA3RjFGNDUxM0Q2MDA2RTlGNUEgLyogTG9nZ2lu
Zy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDRTE4NjY0OTFGNzJFOEYxMDBBMENBQjYgLyogTWFy
a2VyU3VicmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBMzE1OTgxRUQ1MzY1MTAwOUY2
MEQzIC8qIE1lZGlhUGxheWJhY2tTbGVlcEFzc2VydGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUNEQzk0NDJFMUVGMUZDMDgwMDU5QzNDNCAvKiBNZWRpYVN0cmVhbVRyYWNrRGV0YWNoZWQubW0g
aW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VCMjFBNDExQTUxMDA0NDdDNEMgLyogTWVtb3J5Q2Fj
aGVBZGRJbWFnZVRvQ2FjaGVJT1MubW0gaW4gU291cmNlcyAqLywKQEAgLTMzNzIsNyArMzM3Nyw2
IEBACiAJCQkJN0NDRTdFRDExQTQxMUE3RTAwNDQ3QzRDIC8qIFN0cmluZ1RydW5jYXRvci5tbSBp
biBTb3VyY2VzICovLAogCQkJCUVDQTY4MENFMUU2OENDMDkwMDczMUQyMCAvKiBTdHJpbmdVdGls
aXRpZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRTRENURFNzFGNjc0M0JBMDA3MkNGQzYgLyog
U3RyaW5nV2l0aERpcmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDRTE4NjY0OTFGNzJF
OEYxMDBBMENBQjYgLyogTWFya2VyU3VicmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0ND
RTdFRDIxQTQxMUE3RTAwNDQ3QzRDIC8qIFN1YnJlc291cmNlRXJyb3JDcmFzaC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDQ0U3RUE4MUE0MTFBMTkwMDQ0N0M0QyAvKiBTeW50aGV0aWNCYWNraW5n
U2NhbGVGYWN0b3JXaW5kb3cubSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjE2MUE0MTFBRTYw
MDQ0N0M0QyAvKiBUZXJtaW5hdGVUd2ljZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9IVFRQSGVhZGVyRmllbGQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9IVFRQSGVhZGVyRmllbGQu
Y3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9I
VFRQSGVhZGVyRmllbGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlckZp
ZWxkLmg+CisKK3N0YXRpYyB2b2lkIHNob3VsZFJlbWFpblVuY2hhbmdlZChWZWN0b3I8U3RyaW5n
PiYmIHN0cmluZ3MpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBzdHJpbmcgOiBzdHJpbmdzKQor
ICAgICAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQoc3RyaW5nKS5maWVs
ZCgpID09IHN0cmluZyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3VsZEJlSW52YWxpZChWZWN0b3I8
U3RyaW5nPiYmIHN0cmluZ3MpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBzdHJpbmcgOiBzdHJp
bmdzKQorICAgICAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQoc3RyaW5n
KS5maWVsZCgpID09IFN0cmluZygpKTsKK30KKworc3RhdGljIHZvaWQgc2hvdWxkQmVjb21lKFZl
Y3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYmIHBhaXJzKQoreworICAgIGZvciAoY29u
c3QgYXV0byYgcGFpciA6IHBhaXJzKQorICAgICAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpIVFRQ
SGVhZGVyRmllbGQocGFpci5maXJzdCkuZmllbGQoKSA9PSBwYWlyLnNlY29uZCk7Cit9CisKK1RF
U1QoSFRUUEhlYWRlckZpZWxkLCBQYXJzZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgbm9u
QVNDSUlDb21tZW50WzhdID0geydhJywgJzonLCAnICcsICcoJywgMHgyMSwgc3RhdGljX2Nhc3Q8
Y2hhcj4oMHhGRiksICcpJywgJ1wwJ307CisgICAgc3RhdGljIGNvbnN0IGNoYXIgbm9uQVNDSUlR
dW90ZWRQYWlySW5Db21tZW50WzhdID0geydhJywgJzonLCAnICcsICcoJywgJ1xcJywgc3RhdGlj
X2Nhc3Q8Y2hhcj4oMHhGRiksICcpJywgJ1wwJ307CisgICAgc3RhdGljIGNvbnN0IGNoYXIgbm9u
QVNDSUlRdW90ZWRQYWlySW5RdW90ZVs4XSA9IHsnYScsICc6JywgJyAnLCAnIicsICdcXCcsIHN0
YXRpY19jYXN0PGNoYXI+KDB4RkYpLCAnIicsICdcMCd9OworICAgIHN0YXRpYyBjb25zdCBjaGFy
IGRlbEluUXVvdGVbN10gPSB7J2EnLCAnOicsICcgJywgJyInLCBzdGF0aWNfY2FzdDxjaGFyPigw
eDdGKSwgJyInLCAnXDAnfTsKKworICAgIHNob3VsZFJlbWFpblVuY2hhbmdlZCh7CisgICAgICAg
ICJhOiBiIiwKKyAgICAgICAgImE6IGIgYyIsCisgICAgICAgICIhOiBiIiwKKyAgICAgICAgImE6
ICgpIiwKKyAgICAgICAgImE6IChcXCApIiwKKyAgICAgICAgImE6ICgoKSkiLAorICAgICAgICAi
YTogXCJcIiIsCisgICAgICAgICJhOiBcImFBP1x0IFwiIiwKKyAgICAgICAgImE6IFwiYVwiIChi
KSAoKGMpKSIsCisgICAgICAgIG5vbkFTQ0lJQ29tbWVudCwKKyAgICAgICAgbm9uQVNDSUlRdW90
ZWRQYWlySW5Db21tZW50LAorICAgICAgICBub25BU0NJSVF1b3RlZFBhaXJJblF1b3RlLAorICAg
IH0pOworICAgIAorICAgIHNob3VsZEJlSW52YWxpZCh7CisgICAgICAgICJhOiIsCisgICAgICAg
ICJhOiAiLAorICAgICAgICAiYTogXHJiIiwKKyAgICAgICAgImE6IFxuYiIsCisgICAgICAgICJh
OiBcdmIiLAorICAgICAgICAiXGE6IGIiLAorICAgICAgICAiPzogYiIsCisgICAgICAgICJhOiBc
YWIiLAorICAgICAgICAiYTogKFxcXGEpIiwKKyAgICAgICAgImE6IChcXFxhKSIsCisgICAgICAg
ICJhOiAoIiwKKyAgICAgICAgImE6ICgoKSIsCisgICAgICAgICJhOiAoXGEpIiwKKyAgICAgICAg
ImE6IFwiXGFcIiIsCisgICAgICAgICJhOiBcImFcIiAoYil9KChjKSkiLAorICAgICAgICBkZWxJ
blF1b3RlLAorICAgIH0pOworICAgIAorICAgIHNob3VsZEJlY29tZSh7CisgICAgICAgIHsgImE6
IGIgIiwgImE6IGIiIH0sCisgICAgICAgIHsgIiBhOiBiIiwgImE6IGIiIH0sCisgICAgICAgIHsg
ImE6IFx0YiIsICJhOiBiIiB9LAorICAgICAgICB7ICIgYTogYiBjICIsICJhOiBiIGMiIH0sCisg
ICAgICAgIHsgImE6ICBiICIsICJhOiBiIiB9LAorICAgICAgICB7ICJhOlx0YiIsICJhOiBiIiB9
LAorICAgICAgICB7ICJcdGE6XHQgYlx0IiwgImE6IGIiIH0sCisgICAgICAgIHsgImE6IFwiYVwi
IChiKSAiLCAiYTogXCJhXCIgKGIpIiB9LAorICAgIH0pOworfQpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlUG9saWNpZXMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlUG9saWNpZXMu
bW0JKHJldmlzaW9uIDIyMjI5OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV2Vic2l0ZVBvbGljaWVzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MjIsNiArNjIyLDE4
IEBAIFRFU1QoV2ViS2l0LCBXZWJzaXRlUG9saWNpZXNBdXRvcGxheVF1aXIKICAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGxheSgpIl07CiAgICAgW3dlYlZpZXcg
d2FpdEZvck1lc3NhZ2U6QCJwbGF5aW5nIl07CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCiAKLSNlbmRpZgorVEVTVChXZWJLaXQsIEludmFsaWRDdXN0b21IZWFkZXJzKQorewor
ICAgIGF1dG8gd2Vic2l0ZVBvbGljaWVzID0gYWRvcHROUyhbW19XS1dlYnNpdGVQb2xpY2llcyBh
bGxvY10gaW5pdF0pOworICAgIFt3ZWJzaXRlUG9saWNpZXMgc2V0Q3VzdG9tSGVhZGVyRmllbGRz
OkBbQCJpbnZhbGlkaGVhZGVyOiIsIEAibm9uY3VzdG9tOiBoZWFkZXIiLCBAIlgtY3VzdG9tOiBo
ZWFkZXIiLCBAIiAgICB4LUN1c3RvbSA6ICBOZWVkcyBDYW5vbmljYWxpemF0aW9uXHQgIl1dOwor
ICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmNhbm9uaWNhbGl6ZWQgPSBbd2Vic2l0ZVBvbGljaWVz
IGN1c3RvbUhlYWRlckZpZWxkc107CisgICAgRVhQRUNUX0VRKGNhbm9uaWNhbGl6ZWQuY291bnQs
IDJ1KTsKKyAgICBFWFBFQ1RfU1RSRVEoW2Nhbm9uaWNhbGl6ZWQgb2JqZWN0QXRJbmRleDowXS5V
VEY4U3RyaW5nLCAiWC1jdXN0b206IGhlYWRlciIpOworICAgIEVYUEVDVF9TVFJFUShbY2Fub25p
Y2FsaXplZCBvYmplY3RBdEluZGV4OjFdLlVURjhTdHJpbmcsICJ4LUN1c3RvbTogTmVlZHMgQ2Fu
b25pY2FsaXphdGlvbiIpOworfQorCisvLyBGSVhNRTogQXBwbHkgdGhlIGN1c3RvbSBoZWFkZXJz
IGZyb20gdGhlIERvY3VtZW50TG9hZGVyIHRvIGVhY2ggcmVxdWVzdCBhbmQgdGVzdCB0aGF0IHRo
ZXkgYXJlIHNlbnQgb24gbWFpbiByZXNvdXJjZSBhbmQgc3VicmVzb3VyY2VzLgorCisjZW5kaWYg
Ly8gV0tfQVBJX0VOQUJMRUQK
</data>

          </attachment>
      

    </bug>

</bugzilla>