<?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>216202</bug_id>
          
          <creation_ts>2020-09-04 17:01:50 -0700</creation_ts>
          <short_desc>TextDecoder should properly handle streams</short_desc>
          <delta_ts>2021-12-07 08:41:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=233921</see_also>
          <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>ap</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>clopez</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1685930</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-04 17:01:50 -0700</bug_when>
    <thetext>Allow TextCodec::decode to properly handle streams</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685934</commentid>
    <comment_count>1</comment_count>
      <attachid>408046</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-04 17:05:36 -0700</bug_when>
    <thetext>Created attachment 408046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685944</commentid>
    <comment_count>2</comment_count>
      <attachid>408046</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-04 17:17:35 -0700</bug_when>
    <thetext>Comment on attachment 408046
Patch

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

&gt; Source/WebCore/platform/text/DecodeFailure.h:35
&gt; +struct DecodeFailure {
&gt; +    String stringBeforeError;
&gt; +    size_t bytesConsumed { 0 };
&gt; +};

Looking at the call sites, Expected isn’t really doing its job to make the code clean. Most of the call sites seem to want the string whether there was an error or not, but it seems they only need to know how many bytes were consumed if it was an error. Maybe the return value should just be a simple structure:

    struct DecodeResult {
        String string;
        Optional&lt;size_t&gt; bytesConsumedBeforeError;
    };

Or if you want to be even more straightforward:

    struct DecodeResult {
        String string;
        size_t bytesConsumed { 0 };
        bool success { false };
    };

I think those might be better than the Expected for how this is actually used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685980</commentid>
    <comment_count>3</comment_count>
      <attachid>408046</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-09-04 19:22:42 -0700</bug_when>
    <thetext>Comment on attachment 408046
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        In order to properly handle cases like a stream breaking in the middle of a surrogate pair

Doesn&apos;t text decoding already properly handle such cases when decoding content as it comes from the network?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685992</commentid>
    <comment_count>4</comment_count>
      <attachid>408046</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-04 19:55:16 -0700</bug_when>
    <thetext>Comment on attachment 408046
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        In order to properly handle cases like a stream breaking in the middle of a surrogate pair
&gt; 
&gt; Doesn&apos;t text decoding already properly handle such cases when decoding content as it comes from the network?

That uses TextResourceDecoder, which stores a std::unique_ptr&lt;TextCodec&gt; which keeps state instead of keeping a buffer like TextDecoder currently does.  While this approach passes all existing web platform tests, it is incorrect.  I need to keep a std::unique_ptr&lt;TextCodec&gt; instead of a buffer, and I should probably add a test that fails with this implementation and passes with a correct implementation.  the only decoding failures in the existing tests are at the end of a stream block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686023</commentid>
    <comment_count>5</comment_count>
      <attachid>408067</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-05 00:23:11 -0700</bug_when>
    <thetext>Created attachment 408067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686024</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-09-05 00:24:23 -0700</bug_when>
    <thetext>This patch modifies the imported WPT tests. Please ensure that any changes on the tests (not coming from a WPT import) are exported to WPT. Please see https://trac.webkit.org/wiki/WPTExportProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686068</commentid>
    <comment_count>7</comment_count>
      <attachid>408067</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-05 08:38:08 -0700</bug_when>
    <thetext>Comment on attachment 408067
Patch

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

Excellent. This is exactly how the TextCodec class was designed to be used.

&gt; Source/WebCore/dom/TextDecoder.h:54
&gt; +    ~TextDecoder();

We typically put this before other member functions. Arbitrary, but it’s atypical to put it at the end of the public section.

&gt; Source/WebCore/dom/TextDecoder.h:64
&gt; +    std::unique_ptr&lt;TextCodec&gt; m_textCodec;

I would have named this just m_codec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686105</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-05 12:48:30 -0700</bug_when>
    <thetext>http://trac.webkit.org/r266668</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686107</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-05 12:49:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/68402719&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686109</commentid>
    <comment_count>10</comment_count>
      <attachid>408067</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-05 12:52:23 -0700</bug_when>
    <thetext>Comment on attachment 408067
Patch

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

&gt; Source/WebCore/dom/TextDecoder.cpp:153
&gt; +    auto oldBuffer = std::exchange(m_buffer, { });

Can we also come back here and delete this code?

&gt; Source/WebCore/dom/TextDecoder.h:66
&gt;      Vector&lt;uint8_t&gt; m_buffer;

And delete this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694738</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-10-05 10:20:37 -0700</bug_when>
    <thetext>Those suggested improvements were done in https://trac.webkit.org/changeset/266681</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408046</attachid>
            <date>2020-09-04 17:05:36 -0700</date>
            <delta_ts>2020-09-05 00:23:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216202-20200904170536.patch</filename>
            <type>text/plain</type>
            <size>58737</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjYyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDIwLTA5LTA0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWxsb3cgVGV4
dENvZGVjOjpkZWNvZGUgdG8gcHJvcGVybHkgaGFuZGxlIHN0cmVhbXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjIwMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIG9yZGVyIHRvIHByb3Blcmx5IGhh
bmRsZSBjYXNlcyBsaWtlIGEgc3RyZWFtIGJyZWFraW5nIGluIHRoZSBtaWRkbGUgb2YgYSBzdXJy
b2dhdGUgcGFpcgorICAgICAgICBvciBpbiB0aGUgbWlkZGxlIG9mIGEgbXVsdGlieXRlIGNoYXJh
Y3RlciwgVGV4dENvZGVjOjpkZWNvZGUgbmVlZHMgdG8gcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0
ZXMKKyAgICAgICAgY29uc3VtZWQgYmVmb3JlIHRoZSBlcnJvciB0byB0aGUgY2FsbGVyLCB3aGlj
aCByZXRhaW5zIHN0YXRlIGJ5IHN0b3JpbmcgdGhlIG5vbi1jb25zdW1lZCBieXRlcworICAgICAg
ICB1bnRpbCBtb3JlIGRhdGEgaXMgcmVjZWl2ZWQuCisKKyAgICAgICAgQ292ZXJlZCBieSBuZXds
eSBwYXNzaW5nIHdlYiBwbGF0Zm9ybSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvZW5jcnlw
dGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1TZXNzaW9uQ2xlYXJLZXk6OmdlbmVyYXRlS2V5UmVxdWVzdCk6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9UZXh0
RGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb2Rlcjo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvZGVVbml0Qnl0ZVNpemUpOiBEZWxldGVkLgorICAgICAgICAqIGh0
bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWV0YUNoYXJzZXRQYXJzZXI6OmNoZWNrRm9yTWV0YUNoYXJzZXQpOgorICAgICAgICAqIGxv
YWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNv
dXJjZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpmbHVzaCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9EZWNvZGVGYWlsdXJlLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjLmg6CisgICAgICAgICogcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNDSksuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
Q0pLOjpkZWNvZGVDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjQ0pLOjpldWNK
UERlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNDSks6OmlzbzIwMjJKUERlY29k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNDSks6OnNoaWZ0SklTRGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0NKSzo6ZXVjS1JEZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENvZGVjQ0pLOjpiaWc1RGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRD
b2RlY0NKSzo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0NKSy5o
OgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDb2RlY0lDVTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY0lDVS5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6ZGVjb2RlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
UmVwbGFjZW1lbnQ6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNS
ZXBsYWNlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjU2luZ2xlQnl0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNTaW5nbGVCeXRlOjpkZWNvZGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjU2luZ2xlQnl0ZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENvZGVjVVRGMTY6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNV
VEYxNi5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVVEY4OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGOC5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVj
VXNlckRlZmluZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjVXNlckRlZmluZWQ6
OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5o
OgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRFbmNvZGluZzo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1RleHRFbmNvZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEVuY29kaW5nOjpkZWNv
ZGUgY29uc3QpOgorCiAyMDIwLTA5LTA0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IGluZGVudGF0aW9uIGFmdGVyIHIyNjY1MzMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNE
TVNlc3Npb25DbGVhcktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAkocmV2
aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9s
ZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjks
OSArNjksOCBAQCBSZWZQdHI8VWludDhBcnJheT4gQ0RNU2Vzc2lvbkNsZWFyS2V5OjpnCiAgICAg
fQogICAgIG1faW5pdERhdGEgPSBpbml0RGF0YTsKIAotICAgIGJvb2wgc2F3RXJyb3IgPSBmYWxz
ZTsKLSAgICBTdHJpbmcga2V5SUQgPSBVVEY4RW5jb2RpbmcoKS5kZWNvZGUocmVpbnRlcnByZXRf
Y2FzdF9wdHI8Y2hhcio+KG1faW5pdERhdGEtPmJhc2VBZGRyZXNzKCkpLCBtX2luaXREYXRhLT5i
eXRlTGVuZ3RoKCksIHRydWUsIHNhd0Vycm9yKTsKLSAgICBpZiAoc2F3RXJyb3IpIHsKKyAgICBh
dXRvIHJlc3VsdCA9IFVURjhFbmNvZGluZygpLmRlY29kZShyZWludGVycHJldF9jYXN0X3B0cjxj
b25zdCB1aW50OF90Kj4obV9pbml0RGF0YS0+YmFzZUFkZHJlc3MoKSksIG1faW5pdERhdGEtPmJ5
dGVMZW5ndGgoKSwgdHJ1ZSk7CisgICAgaWYgKCFyZXN1bHQuaGFzX3ZhbHVlKCkpIHsKICAgICAg
ICAgZXJyb3JDb2RlID0gV2ViS2l0TWVkaWFLZXlFcnJvcjo6TUVESUFfS0VZRVJSX0NMSUVOVDsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY2NjIwKQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nzk2LDYgKzQ3OTYsNyBAQAogCQlERjlBRkQ3MjEzRkMzMUQ4MDAxNUZF
QjcgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREY5QUZENzAxM0ZDMzFEODAwMTVGRUI3
IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCAqLzsgfTsKIAkJREY5QUZE
NzMxM0ZDMzFEODAwMTVGRUI3IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjlBRkQ3
MTEzRkMzMUQ4MDAxNUZFQjcgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5t
bSAqLzsgfTsKIAkJREZDNjEwQTYyNEZCMkE3RDAwNjI1NEM4IC8qIEVuY29kaW5nVGFibGVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERkM2MTBBNDI0
RkIyQTdEMDA2MjU0QzggLyogRW5jb2RpbmdUYWJsZXMuaCAqLzsgfTsKKwkJREZFOEI0MjAyNTAz
MDU0OTAwRjdDOTlBIC8qIERlY29kZUZhaWx1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERGRThCNDFFMjUwMzA1NDgwMEY3Qzk5QSAvKiBEZWNvZGVG
YWlsdXJlLmggKi87IH07CiAJCUUwRkVGMzcyQjE3QzUzRUFDMUMxRkJFRSAvKiBFdmVudFNvdXJj
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTBGRUYz
NzFCMTdDNTNFQUMxQzFGQkVFIC8qIEV2ZW50U291cmNlLmggKi87IH07CiAJCUUwRkVGMzcyQjM3
QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMEZFRjM3MUIzN0M1M0VBQzFDMUZCRUUgLyogSlNFdmVu
dFNvdXJjZS5oICovOyB9OwogCQlFMTA3NDAwRTBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdl
Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTEwNzQwMEMwRTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwuaCAqLzsgfTsKQEAg
LTE1Mzc2LDYgKzE1Mzc3LDcgQEAKIAkJREZDNjEwQTIyNEZCMkE3QzAwNjI1NEM4IC8qIEVuY29k
aW5nVGFibGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVuY29k
aW5nVGFibGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREZDNjEwQTQyNEZC
MkE3RDAwNjI1NEM4IC8qIEVuY29kaW5nVGFibGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEVuY29kaW5nVGFibGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CURGREI5MTJDRjhFODhBNkRBMUFEMjY0RiAvKiBBYm9ydGFibGVUYXNrUXVldWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJvcnRhYmxlVGFza1F1ZXVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCURGRThCNDFFMjUwMzA1NDgwMEY3Qzk5QSAvKiBEZWNvZGVG
YWlsdXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY29kZUZhaWx1cmUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTBGRUYzNzFCMDdDNTNFQUMxQzFGQkVF
IC8qIEV2ZW50U291cmNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFdmVudFNvdXJjZS5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUwRkVGMzcxQjE3QzUzRUFDMUMxRkJF
RSAvKiBFdmVudFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVu
dFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMEZFRjM3MUIyN0M1M0VB
QzFDMUZCRUUgLyogRXZlbnRTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRXZlbnRTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTc0NjcsMTEgKzE3NDY5LDExIEBACiAJCQkJNkZCMjQwMDMyM0RGRjEyNzAwNzk2NDU4IC8qIElu
bGluZUxpbmVCb3guaCAqLywKIAkJCQk2RkUxOTgxMzIxNzgzOTdCMDA0NDZGMDggLyogSW5saW5l
TGluZUJyZWFrZXIuY3BwICovLAogCQkJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxp
bmVMaW5lQnJlYWtlci5oICovLAorCQkJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAvKiBJbmxp
bmVMaW5lQnVpbGRlci5jcHAgKi8sCisJCQkJNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8qIElu
bGluZUxpbmVCdWlsZGVyLmggKi8sCiAJCQkJNkYzNjBFNEUyMzk5OTQyMDAwMTUxMkE3IC8qIElu
bGluZVNvZnRMaW5lQnJlYWtJdGVtLmggKi8sCiAJCQkJNkYxQ0MxREMyMjVGOEI0MTAwNzIwQUQy
IC8qIElubGluZVRleHRJdGVtLmNwcCAqLywKIAkJCQk2RjFDQzFERDIyNUY4QjQyMDA3MjBBRDIg
LyogSW5saW5lVGV4dEl0ZW0uaCAqLywKLQkJCQk2RjI1QjIwMDIyMEE4NUFCMDAwMDAxMUIgLyog
SW5saW5lTGluZUJ1aWxkZXIuY3BwICovLAotCQkJCTZGMjZFQjQ2MjM0MDA0QTUwMDY5MDZFMiAv
KiBJbmxpbmVMaW5lQnVpbGRlci5oICovLAogCQkJKTsKIAkJCXBhdGggPSBpbmxpbmVmb3JtYXR0
aW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI2MDg0LDYgKzI2MDg2LDcgQEAK
IAkJCQkwRkRBN0MyMDE4ODMyQkNDMDBDOTU0QjUgLyogRGF0ZVRpbWVGb3JtYXQuY3BwICovLAog
CQkJCTQ1M0VCNjM1MTU5QzU3MDQwMDAwMUJCNyAvKiBEYXRlVGltZUZvcm1hdC5oICovLAogCQkJ
CUNFQ0NGQzNBMTQxOTczRDUwMDJBMEFDMSAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCAqLywK
KwkJCQlERkU4QjQxRTI1MDMwNTQ4MDBGN0M5OUEgLyogRGVjb2RlRmFpbHVyZS5oICovLAogCQkJ
CURGQzYxMEEyMjRGQjJBN0MwMDYyNTRDOCAvKiBFbmNvZGluZ1RhYmxlcy5jcHAgKi8sCiAJCQkJ
REZDNjEwQTQyNEZCMkE3RDAwNjI1NEM4IC8qIEVuY29kaW5nVGFibGVzLmggKi8sCiAJCQkJMzc1
Q0QyMzExMTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggKi8sCkBAIC0zMDg5NCw2ICsz
MDg5Nyw3IEBACiAJCQkJNzE1QUQ3MjAyMDUwNTEzMjAwRDU5MkRDIC8qIERlY2xhcmF0aXZlQW5p
bWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEMyMjhBMTExRDU3MjJFMDBENUE3RDMgLyog
RGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VDQ0ZDM0Ix
NDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJREZFOEI0MjAyNTAzMDU0OTAwRjdDOTlBIC8qIERlY29kZUZhaWx1cmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU1NTEzMDAxMUU3Q0NDQ0IwMEE2OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxNjJBNDUxMTAxMTQ1QUUwMERGRjNFRCAvKiBEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFBM0Q1OEYxMDFDMTUy
RDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MTY1Myw2ICszMTY1Nyw3IEBACiAJCQkJNkYwQ0Q2OTUyMjlFRDMyNzAwQzU5OTRFIC8qIElubGlu
ZUxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGQjI0MDA1MjNERkYxMjgwMDc5NjQ1OCAvKiBJ
bmxpbmVMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkUxOTgxNzIxNzgzOTdDMDA0NDZG
MDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGMjZFQjQ4MjM0
MDA0QTUwMDY5MDZFMiAvKiBJbmxpbmVMaW5lQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjQ1Nzc1Q0UyNDE0MzdENTAwMkRGMUEwIC8qIElubGluZVBhdGhEYXRhLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2RjM2MEU1MDIzOTk5NDIxMDAxNTEyQTcgLyogSW5saW5lU29mdExpbmVCcmVha0l0
ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUFBNEMzQTc3MEIyQjE2NzkwMDIzMzRBMiAvKiBJbmxp
bmVTdHlsZVNoZWV0T3duZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzI2NjQsNyArMzI2NjksNiBA
QAogCQkJCTg0NzMwRDkxMTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjIyMjc5NjUwRDAwQkYyMjAwNzFCNzgyIC8qIExpbmVhckdyYWRpZW50QXR0
cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIzMUM5MUUxMEFFMUI4RTAwMEM3QjkyIC8q
IExpbmVDbGFtcFZhbHVlLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RjI2RUI0ODIzNDAwNEE1MDA2
OTA2RTIgLyogSW5saW5lTGluZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZGRUZBQjJB
MTgzODBEQTAwMDUxNDUzNCAvKiBMaW5lTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUU0ODRBMzNFMjMwNTUzMjUwMDlBREU2QSAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNDM0M0QyNTIzOTI3NzkwMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZl
cnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9UZXh0RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RleHRE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RleHRE
ZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDExICsxMTcsNiBAQCBhdXRvIFRleHRE
ZWNvZGVyOjppZ25vcmVCT01JZk5lY2Vzc2FyeShjCiAgICAgcmV0dXJuIFdhaXRGb3JNb3JlQk9N
Qnl0ZXM6Ok5vOwogfQogCi1zdGF0aWMgc2l6ZV90IGNvZGVVbml0Qnl0ZVNpemUoY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZykKLXsKLSAgICByZXR1cm4gZW5jb2RpbmcuaXNCeXRlQmFzZWRF
bmNvZGluZygpID8gMSA6IDI7Ci19Ci0KIEV4Y2VwdGlvbk9yPFN0cmluZz4gVGV4dERlY29kZXI6
OmRlY29kZShPcHRpb25hbDxCdWZmZXJTb3VyY2U6OlZhcmlhbnRUeXBlPiBpbnB1dCwgRGVjb2Rl
T3B0aW9ucyBvcHRpb25zKQogewogICAgIE9wdGlvbmFsPEJ1ZmZlclNvdXJjZT4gaW5wdXRCdWZm
ZXI7CkBAIC0xNTEsMjkgKzE0NiwyMCBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IFRleHREZWNvZGVy
OjpkZWNvZGUoCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBjb25zdCBi
b29sIHN0b3BPbkVycm9yID0gdHJ1ZTsKLSAgICBib29sIHNhd0Vycm9yID0gZmFsc2U7Ci0gICAg
aWYgKGxlbmd0aCAlIGNvZGVVbml0Qnl0ZVNpemUobV90ZXh0RW5jb2RpbmcpKQotICAgICAgICBz
YXdFcnJvciA9IHRydWU7Ci0gICAgY29uc3QgY2hhciogY2hhckRhdGEgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihkYXRhKTsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIGlmICghc2F3
RXJyb3IpCi0gICAgICAgIHJlc3VsdCA9IG1fdGV4dEVuY29kaW5nLmRlY29kZShjaGFyRGF0YSwg
bGVuZ3RoLCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOwotCi0gICAgaWYgKHNhd0Vycm9yKSB7Ci0g
ICAgICAgIGlmIChvcHRpb25zLnN0cmVhbSkgewotICAgICAgICAgICAgcmVzdWx0ID0gU3RyaW5n
KCk7Ci0gICAgICAgICAgICBpZiAoIW1fYnVmZmVyLnNpemUoKSkKLSAgICAgICAgICAgICAgICBt
X2J1ZmZlci5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChtX29wdGlvbnMuZmF0YWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFR5cGVFcnJvciB9OwotICAgICAgICAgICAgcmVzdWx0ID0gbV90ZXh0RW5jb2RpbmcuZGVj
b2RlKGNoYXJEYXRhLCBsZW5ndGgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
YnVmZmVyLmNsZWFyKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8gb2xkQnVmZmVy
ID0gc3RkOjpleGNoYW5nZShtX2J1ZmZlciwgeyB9KTsKKyAgICBhdXRvIGRlY29kZVJlc3VsdCA9
IG1fdGV4dEVuY29kaW5nLmRlY29kZShkYXRhLCBsZW5ndGgsIHRydWUpOworICAgIGlmIChkZWNv
ZGVSZXN1bHQuaGFzX3ZhbHVlKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcgeyBkZWNvZGVSZXN1
bHQudmFsdWUoKSB9OworICAgIGlmIChvcHRpb25zLnN0cmVhbSkgeworICAgICAgICBzaXplX3Qg
Ynl0ZXNDb25zdW1lZCA9IGRlY29kZVJlc3VsdC5lcnJvcigpLmJ5dGVzQ29uc3VtZWQ7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oYnl0ZXNDb25zdW1l
ZCA8PSBsZW5ndGgpOworICAgICAgICBtX2J1ZmZlci5hcHBlbmQoZGF0YSArIGJ5dGVzQ29uc3Vt
ZWQsIGxlbmd0aCAtIGJ5dGVzQ29uc3VtZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICht
X29wdGlvbnMuZmF0YWwpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9y
IH07CisgICAgICAgIHJldHVybiBtX3RleHRFbmNvZGluZy5kZWNvZGUocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oZGF0YSksIGxlbmd0aCk7CisgICAgfQorICAgIHJldHVybiBTdHJpbmcg
eyBkZWNvZGVSZXN1bHQuZXJyb3IoKS5zdHJpbmdCZWZvcmVFcnJvciB9OwogfQogCiBTdHJpbmcg
VGV4dERlY29kZXI6OmVuY29kaW5nKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAkocmV2aXNpb24gMjY2
NjIwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDggKzE1NCw4IEBAIGJvb2wgSFRNTE1ldGFDaGFy
c2V0UGFyc2VyOjpjaGVja0Zvck1ldGEKIAogICAgIGNvbnN0ZXhwciBpbnQgYnl0ZXNUb0NoZWNr
VW5jb25kaXRpb25hbGx5ID0gMTAyNDsKIAotICAgIGJvb2wgaWdub3JlZFNhd0Vycm9yRmxhZzsK
LSAgICBtX2lucHV0LmFwcGVuZChtX2NvZGVjLT5kZWNvZGUoZGF0YSwgbGVuZ3RoLCBmYWxzZSwg
ZmFsc2UsIGlnbm9yZWRTYXdFcnJvckZsYWcpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fY29kZWMt
PmRlY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoLCBm
YWxzZSwgZmFsc2UpOworICAgIG1faW5wdXQuYXBwZW5kKHJlc3VsdC5oYXNfdmFsdWUoKSA/IHJl
c3VsdC52YWx1ZSgpIDogcmVzdWx0LmVycm9yKCkuc3RyaW5nQmVmb3JlRXJyb3IpOwogCiAgICAg
d2hpbGUgKGF1dG8gdG9rZW4gPSBtX3Rva2VuaXplci5uZXh0VG9rZW4obV9pbnB1dCkpIHsKICAg
ICAgICAgYm9vbCBpc0VuZCA9IHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWc7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwCShy
ZXZpc2lvbiAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVj
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxOCw4ICs2MTgsMTMgQEAgU3RyaW5nIFRleHRS
ZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdAogICAgIGlmICghbV9jb2RlYykKICAgICAgICAg
bV9jb2RlYyA9IG5ld1RleHRDb2RlYyhtX2VuY29kaW5nKTsKIAotICAgIGlmIChtX2J1ZmZlci5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX2NvZGVjLT5kZWNvZGUoZGF0YSArIGxlbmd0aE9m
Qk9NLCBsZW5ndGggLSBsZW5ndGhPZkJPTSwgZmFsc2UsIG1fY29udGVudFR5cGUgPT0gWE1MLCBt
X3Nhd0Vycm9yKTsKKyAgICBpZiAobV9idWZmZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gbV9jb2RlYy0+ZGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGRhdGEgKyBsZW5ndGhPZkJPTSksIGxlbmd0aCAtIGxlbmd0aE9mQk9NLCBmYWxzZSwgbV9jb250
ZW50VHlwZSA9PSBYTUwpOworICAgICAgICBpZiAocmVzdWx0Lmhhc192YWx1ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOworICAgICAgICBtX3Nhd0Vycm9yID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5lcnJvcigpLnN0cmluZ0JlZm9yZUVycm9yOworICAgIH0K
IAogICAgIGlmICghbW92ZWREYXRhVG9CdWZmZXIpIHsKICAgICAgICAgc2l6ZV90IG9sZFNpemUg
PSBtX2J1ZmZlci5zaXplKCk7CkBAIC02MjcsOSArNjMyLDEyIEBAIFN0cmluZyBUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpkZWNvZGUoY29uc3QKICAgICAgICAgbWVtY3B5KG1fYnVmZmVyLmRhdGEoKSAr
IG9sZFNpemUsIGRhdGEsIGxlbmd0aCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHJlc3VsdCA9IG1f
Y29kZWMtPmRlY29kZShtX2J1ZmZlci5kYXRhKCkgKyBsZW5ndGhPZkJPTSwgbV9idWZmZXIuc2l6
ZSgpIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBtX2NvbnRlbnRUeXBlID09IFhNTCAmJiAhbV91c2VM
ZW5pZW50WE1MRGVjb2RpbmcsIG1fc2F3RXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9jb2Rl
Yy0+ZGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fYnVmZmVyLmRhdGEo
KSArIGxlbmd0aE9mQk9NKSwgbV9idWZmZXIuc2l6ZSgpIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBt
X2NvbnRlbnRUeXBlID09IFhNTCAmJiAhbV91c2VMZW5pZW50WE1MRGVjb2RpbmcpOwogICAgIG1f
YnVmZmVyLmNsZWFyKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAocmVzdWx0Lmhhc192
YWx1ZSgpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7CisgICAgbV9zYXdFcnJvciA9
IHRydWU7CisgICAgcmV0dXJuIHJlc3VsdC5lcnJvcigpLnN0cmluZ0JlZm9yZUVycm9yOwogfQog
CiBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6Zmx1c2goKQpAQCAtNjQ3LDExICs2NTUsMTQg
QEAgU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmZsdXNoKCkKICAgICBpZiAoIW1fY29kZWMp
CiAgICAgICAgIG1fY29kZWMgPSBuZXdUZXh0Q29kZWMobV9lbmNvZGluZyk7CiAKLSAgICBTdHJp
bmcgcmVzdWx0ID0gbV9jb2RlYy0+ZGVjb2RlKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6
ZSgpLCB0cnVlLCBtX2NvbnRlbnRUeXBlID09IFhNTCAmJiAhbV91c2VMZW5pZW50WE1MRGVjb2Rp
bmcsIG1fc2F3RXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9jb2RlYy0+ZGVjb2RlKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fYnVmZmVyLmRhdGEoKSksIG1fYnVmZmVyLnNp
emUoKSwgdHJ1ZSwgbV9jb250ZW50VHlwZSA9PSBYTUwgJiYgIW1fdXNlTGVuaWVudFhNTERlY29k
aW5nKTsKICAgICBtX2J1ZmZlci5jbGVhcigpOwogICAgIG1fY29kZWMgPSBudWxscHRyOwogICAg
IG1fY2hlY2tlZEZvckJPTSA9IGZhbHNlOyAvLyBTa2lwIEJPTSBhZ2FpbiB3aGVuIHJlLWRlY29k
aW5nLgotICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKHJlc3VsdC5oYXNfdmFsdWUoKSkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOworICAgIG1fc2F3RXJyb3IgPSB0cnVlOworICAg
IHJldHVybiByZXN1bHQuZXJyb3IoKS5zdHJpbmdCZWZvcmVFcnJvcjsKIH0KIAogU3RyaW5nIFRl
eHRSZXNvdXJjZURlY29kZXI6OmRlY29kZUFuZEZsdXNoKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBsZW5ndGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUZhaWx1
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUZh
aWx1cmUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0Rl
Y29kZUZhaWx1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRGVjb2RlRmFpbHVyZSB7CisgICAgU3RyaW5nIHN0
cmluZ0JlZm9yZUVycm9yOworICAgIHNpemVfdCBieXRlc0NvbnN1bWVkIHsgMCB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRDb2RlYy5oCShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRDb2RlYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiRGVjb2RlRmFpbHVyZS5oIgogI2luY2x1ZGUgPGFycmF5
PgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxwYWwvdGV4dC9VbmVuY29kYWJsZUhhbmRs
aW5nLmg+CkBAIC00NSw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBUZXh0Q29kZWMoKSA9IGRlZmF1
bHQ7CiAgICAgdmlydHVhbCB+VGV4dENvZGVjKCkgPSBkZWZhdWx0OwogCi0gICAgdmlydHVhbCBT
dHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29s
IHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgPSAwOworICAgIHZpcnR1YWwgRXhwZWN0ZWQ8
U3RyaW5nLCBEZWNvZGVGYWlsdXJlPiBkZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCBsZW5n
dGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IpID0gMDsKICAgICB2aXJ0dWFsIFZlY3Rv
cjx1aW50OF90PiBlbmNvZGUoU3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5kbGluZykgPSAwOwog
CiAgICAgLy8gRmlsbHMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSBnaXZlbgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWND
SksuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjQ0pLLmNwcAkocmV2aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNDSksuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNDEgKzEyNywzMiBA
QCBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTxzdGQ6OnBhaXI8dWludDE2CiAgICAgcmV0dXJuICp0
YWJsZTsKIH0KIAotU3RyaW5nIFRleHRDb2RlY0NKSzo6ZGVjb2RlQ29tbW9uKGNvbnN0IHVpbnQ4
X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBi
b29sJiBzYXdFcnJvciwgY29uc3QgRnVuY3Rpb248U2F3RXJyb3IodWludDhfdCwgU3RyaW5nQnVp
bGRlciYpPiYgYnl0ZVBhcnNlcikKK0V4cGVjdGVkPFN0cmluZywgRGVjb2RlRmFpbHVyZT4gVGV4
dENvZGVjQ0pLOjpkZWNvZGVDb21tb24oY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5n
dGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGNvbnN0IEZ1bmN0aW9uPFNhd0Vycm9y
KHVpbnQ4X3QsIFN0cmluZ0J1aWxkZXImKT4mIGJ5dGVQYXJzZXIpCiB7CiAgICAgU3RyaW5nQnVp
bGRlciByZXN1bHQ7CiAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogCiAgICAg
aWYgKG1fcHJlcGVuZGVkQnl0ZSAmJiBieXRlUGFyc2VyKCpzdGQ6OmV4Y2hhbmdlKG1fcHJlcGVu
ZGVkQnl0ZSwgV1RGOjpudWxsb3B0KSwgcmVzdWx0KSA9PSBTYXdFcnJvcjo6WWVzKSB7Ci0gICAg
ICAgIHNhd0Vycm9yID0gdHJ1ZTsKKyAgICAgICAgaWYgKHN0b3BPbkVycm9yKQorICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkPERlY29kZUZhaWx1cmU+KHsgcmVzdWx0LnRvU3RyaW5n
KCksIDAgfSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwot
ICAgICAgICBpZiAoc3RvcE9uRXJyb3IpIHsKLSAgICAgICAgICAgIG1fbGVhZCA9IDB4MDA7Ci0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KICAgICB9CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICBpZiAoYnl0
ZVBhcnNlcihieXRlc1tpXSwgcmVzdWx0KSA9PSBTYXdFcnJvcjo6WWVzKSB7Ci0gICAgICAgICAg
ICBzYXdFcnJvciA9IHRydWU7CisgICAgICAgICAgICBpZiAoc3RvcE9uRXJyb3IpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkPERlY29kZUZhaWx1cmU+KHsgcmVzdWx0LnRv
U3RyaW5nKCksIGkgfSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50Q2hh
cmFjdGVyKTsKLSAgICAgICAgICAgIGlmIChzdG9wT25FcnJvcikgewotICAgICAgICAgICAgICAg
IG1fbGVhZCA9IDB4MDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygp
OwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChtX3ByZXBlbmRlZEJ5dGUg
JiYgYnl0ZVBhcnNlcigqc3RkOjpleGNoYW5nZShtX3ByZXBlbmRlZEJ5dGUsIFdURjo6bnVsbG9w
dCksIHJlc3VsdCkgPT0gU2F3RXJyb3I6OlllcykgewotICAgICAgICAgICAgc2F3RXJyb3IgPSB0
cnVlOworICAgICAgICAgICAgaWYgKHN0b3BPbkVycm9yKQorICAgICAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZDxEZWNvZGVGYWlsdXJlPih7IHJlc3VsdC50b1N0cmluZygpLCBpIH0p
OwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudENoYXJhY3Rlcik7Ci0gICAg
ICAgICAgICBpZiAoc3RvcE9uRXJyb3IpIHsKLSAgICAgICAgICAgICAgICBtX2xlYWQgPSAweDAw
OwotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChmbHVzaCAmJiBtX2xlYWQpIHsKLSAgICAg
ICAgbV9sZWFkID0gMHgwMDsKLSAgICAgICAgc2F3RXJyb3IgPSB0cnVlOworICAgICAgICBpZiAo
c3RvcE9uRXJyb3IpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQ8RGVjb2RlRmFp
bHVyZT4oeyByZXN1bHQudG9TdHJpbmcoKSwgbGVuZ3RoIH0pOwogICAgICAgICByZXN1bHQuYXBw
ZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKICAgICB9CiAKQEAgLTE5NCw5ICsxODUsOSBAQCBz
dGF0aWMgT3B0aW9uYWw8VUNoYXI+IGNvZGVQb2ludEpJUzAyMTIoCiB9CiAKIC8vIGh0dHBzOi8v
ZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNldWMtanAtZGVjb2RlcgotU3RyaW5nIFRleHRDb2Rl
Y0NKSzo6ZXVjSlBEZWNvZGUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJv
b2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKQorRXhwZWN0ZWQ8U3Ry
aW5nLCBEZWNvZGVGYWlsdXJlPiBUZXh0Q29kZWNDSks6OmV1Y0pQRGVjb2RlKGNvbnN0IHVpbnQ4
X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yKQog
ewotICAgIHJldHVybiBkZWNvZGVDb21tb24oYnl0ZXMsIGxlbmd0aCwgZmx1c2gsIHN0b3BPbkVy
cm9yLCBzYXdFcnJvciwgW3RoaXNdICh1aW50OF90IGJ5dGUsIFN0cmluZ0J1aWxkZXImIHJlc3Vs
dCkgeworICAgIHJldHVybiBkZWNvZGVDb21tb24oYnl0ZXMsIGxlbmd0aCwgZmx1c2gsIHN0b3BP
bkVycm9yLCBbdGhpc10gKHVpbnQ4X3QgYnl0ZSwgU3RyaW5nQnVpbGRlciYgcmVzdWx0KSB7CiAg
ICAgICAgIGlmICh1aW50OF90IGxlYWQgPSBzdGQ6OmV4Y2hhbmdlKG1fbGVhZCwgMHgwMCkpIHsK
ICAgICAgICAgICAgIGlmIChsZWFkID09IDB4OEUgJiYgYnl0ZSA+PSAweEExICYmIGJ5dGUgPD0g
MHhERikgewogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRDaGFyYWN0ZXIoMHhGRjYxIC0g
MHhBMSArIGJ5dGUpOwpAQCAtMjc5LDcgKzI3MCw3IEBAIHN0YXRpYyBWZWN0b3I8dWludDhfdD4g
ZXVjSlBFbmNvZGUoU3RyaW4KIH0KIAogLy8gaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5v
cmcvI2lzby0yMDIyLWpwLWRlY29kZXIKLVN0cmluZyBUZXh0Q29kZWNDSks6OmlzbzIwMjJKUERl
Y29kZShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9v
bCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCitFeHBlY3RlZDxTdHJpbmcsIERlY29kZUZh
aWx1cmU+IFRleHRDb2RlY0NKSzo6aXNvMjAyMkpQRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGJ5dGVz
LCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yKQogewogICAgIGF1
dG8gYnl0ZVBhcnNlciA9IFsmXSAodWludDhfdCBieXRlLCBTdHJpbmdCdWlsZGVyJiByZXN1bHQp
IHsKICAgICAgICAgc3dpdGNoIChtX2lzbzIwMjJKUERlY29kZXJTdGF0ZSkgewpAQCAtNDAwLDQ1
ICszOTEsMzAgQEAgU3RyaW5nIFRleHRDb2RlY0NKSzo6aXNvMjAyMkpQRGVjb2RlKGNvbgogICAg
IHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKIAogICAgIGlmIChtX3ByZXBlbmRlZEJ5
dGUgJiYgYnl0ZVBhcnNlcigqc3RkOjpleGNoYW5nZShtX3ByZXBlbmRlZEJ5dGUsIFdURjo6bnVs
bG9wdCksIHJlc3VsdCkgPT0gU2F3RXJyb3I6OlllcykgewotICAgICAgICBzYXdFcnJvciA9IHRy
dWU7CisgICAgICAgIGlmIChzdG9wT25FcnJvcikKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZDxEZWNvZGVGYWlsdXJlPih7IHJlc3VsdC50b1N0cmluZygpLCAwIH0pOwogICAgICAg
ICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgaWYgKHN0b3BP
bkVycm9yKSB7Ci0gICAgICAgICAgICBtX2xlYWQgPSAweDAwOwotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdC50b1N0cmluZygpOwotICAgICAgICB9CiAgICAgfQogICAgIGlmIChtX2lzbzIwMjJK
UFNlY29uZFByZXBlbmRlZEJ5dGUgJiYgYnl0ZVBhcnNlcigqc3RkOjpleGNoYW5nZShtX2lzbzIw
MjJKUFNlY29uZFByZXBlbmRlZEJ5dGUsIFdURjo6bnVsbG9wdCksIHJlc3VsdCkgPT0gU2F3RXJy
b3I6OlllcyAmJiBzdG9wT25FcnJvcikgewotICAgICAgICBzYXdFcnJvciA9IHRydWU7CisgICAg
ICAgIGlmIChzdG9wT25FcnJvcikKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZDxE
ZWNvZGVGYWlsdXJlPih7IHJlc3VsdC50b1N0cmluZygpLCAwIH0pOwogICAgICAgICByZXN1bHQu
YXBwZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgaWYgKHN0b3BPbkVycm9yKSB7
Ci0gICAgICAgICAgICBtX2xlYWQgPSAweDAwOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50
b1N0cmluZygpOwotICAgICAgICB9CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKICAgICAgICAgaWYgKGJ5dGVQYXJzZXIoYnl0ZXNbaV0sIHJlc3VsdCkg
PT0gU2F3RXJyb3I6OlllcykgewotICAgICAgICAgICAgc2F3RXJyb3IgPSB0cnVlOworICAgICAg
ICAgICAgaWYgKHN0b3BPbkVycm9yKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZDxEZWNvZGVGYWlsdXJlPih7IHJlc3VsdC50b1N0cmluZygpLCBpIH0pOwogICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudENoYXJhY3Rlcik7Ci0gICAgICAgICAgICBpZiAo
c3RvcE9uRXJyb3IpIHsKLSAgICAgICAgICAgICAgICBtX2xlYWQgPSAweDAwOwotICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBpZiAobV9wcmVwZW5kZWRCeXRlICYmIGJ5dGVQYXJzZXIoKnN0ZDo6ZXhjaGFu
Z2UobV9wcmVwZW5kZWRCeXRlLCBXVEY6Om51bGxvcHQpLCByZXN1bHQpID09IFNhd0Vycm9yOjpZ
ZXMpIHsKLSAgICAgICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChzdG9w
T25FcnJvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQ8RGVjb2RlRmFp
bHVyZT4oeyByZXN1bHQudG9TdHJpbmcoKSwgaSB9KTsKICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwotICAgICAgICAgICAgaWYgKHN0b3BPbkVycm9yKSB7
Ci0gICAgICAgICAgICAgICAgbV9sZWFkID0gMHgwMDsKLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYg
KG1faXNvMjAyMkpQU2Vjb25kUHJlcGVuZGVkQnl0ZSAmJiBieXRlUGFyc2VyKCpzdGQ6OmV4Y2hh
bmdlKG1faXNvMjAyMkpQU2Vjb25kUHJlcGVuZGVkQnl0ZSwgV1RGOjpudWxsb3B0KSwgcmVzdWx0
KSA9PSBTYXdFcnJvcjo6WWVzICYmIHN0b3BPbkVycm9yKSB7Ci0gICAgICAgICAgICBzYXdFcnJv
ciA9IHRydWU7CisgICAgICAgICAgICBpZiAoc3RvcE9uRXJyb3IpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkPERlY29kZUZhaWx1cmU+KHsgcmVzdWx0LnRvU3RyaW5nKCks
IGkgfSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsK
LSAgICAgICAgICAgIGlmIChzdG9wT25FcnJvcikgewotICAgICAgICAgICAgICAgIG1fbGVhZCA9
IDB4MDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC00NTMsMTEgKzQyOSwxMyBAQCBTdHJpbmcg
VGV4dENvZGVjQ0pLOjppc28yMDIySlBEZWNvZGUoY29uCiAgICAgICAgICAgICBtX2lzbzIwMjJK
UERlY29kZXJTdGF0ZSA9IElTTzIwMjJKUERlY29kZXJTdGF0ZTo6TGVhZEJ5dGU7CiAgICAgICAg
ICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgY2FzZSBJU08yMDIySlBEZWNvZGVyU3RhdGU6OkVz
Y2FwZVN0YXJ0OgotICAgICAgICAgICAgc2F3RXJyb3IgPSB0cnVlOworICAgICAgICAgICAgaWYg
KHN0b3BPbkVycm9yKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZDxEZWNv
ZGVGYWlsdXJlPih7IHJlc3VsdC50b1N0cmluZygpLCBsZW5ndGggfSk7CiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIElTTzIwMjJKUERlY29kZXJTdGF0ZTo6RXNjYXBlOgotICAgICAgICAgICAg
c2F3RXJyb3IgPSB0cnVlOworICAgICAgICAgICAgaWYgKHN0b3BPbkVycm9yKQorICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZDxEZWNvZGVGYWlsdXJlPih7IHJlc3VsdC50b1N0
cmluZygpLCBsZW5ndGggfSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50
Q2hhcmFjdGVyKTsKICAgICAgICAgICAgIGlmIChtX2xlYWQpIHsKICAgICAgICAgICAgICAgICBB
U1NFUlQoaXNBU0NJSShtX2xlYWQpKTsKQEAgLTU3Myw5ICs1NTEsOSBAQCBWZWN0b3I8dWludDhf
dD4gVGV4dENvZGVjQ0pLOjppc28yMDIySlBFCiB9CiAKIC8vIGh0dHBzOi8vZW5jb2Rpbmcuc3Bl
Yy53aGF0d2cub3JnLyNzaGlmdF9qaXMtZGVjb2RlcgotU3RyaW5nIFRleHRDb2RlY0NKSzo6c2hp
ZnRKSVNEZWNvZGUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1
c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKQorRXhwZWN0ZWQ8U3RyaW5nLCBE
ZWNvZGVGYWlsdXJlPiBUZXh0Q29kZWNDSks6OnNoaWZ0SklTRGVjb2RlKGNvbnN0IHVpbnQ4X3Qq
IGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yKQogewot
ICAgIHJldHVybiBkZWNvZGVDb21tb24oYnl0ZXMsIGxlbmd0aCwgZmx1c2gsIHN0b3BPbkVycm9y
LCBzYXdFcnJvciwgW3RoaXNdICh1aW50OF90IGJ5dGUsIFN0cmluZ0J1aWxkZXImIHJlc3VsdCkg
eworICAgIHJldHVybiBkZWNvZGVDb21tb24oYnl0ZXMsIGxlbmd0aCwgZmx1c2gsIHN0b3BPbkVy
cm9yLCBbdGhpc10gKHVpbnQ4X3QgYnl0ZSwgU3RyaW5nQnVpbGRlciYgcmVzdWx0KSB7CiAgICAg
ICAgIGlmICh1aW50OF90IGxlYWQgPSBzdGQ6OmV4Y2hhbmdlKG1fbGVhZCwgMHgwMCkpIHsKICAg
ICAgICAgICAgIHVpbnQ4X3Qgb2Zmc2V0ID0gYnl0ZSA8IDB4N0YgPyAweDQwIDogMHg0MTsKICAg
ICAgICAgICAgIHVpbnQ4X3QgbGVhZE9mZnNldCA9IGxlYWQgPCAweEEwID8gMHg4MSA6IDB4QzE7
CkBAIC03MTksOSArNjk3LDkgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiBldWNLUkVuY29kZShT
dHJpbgogfQogCiAvLyBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZXVjLWtyLWRl
Y29kZXIKLVN0cmluZyBUZXh0Q29kZWNDSks6OmV1Y0tSRGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGJ5
dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBz
YXdFcnJvcikKK0V4cGVjdGVkPFN0cmluZywgRGVjb2RlRmFpbHVyZT4gVGV4dENvZGVjQ0pLOjpl
dWNLUkRlY29kZShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVz
aCwgYm9vbCBzdG9wT25FcnJvcikKIHsKLSAgICByZXR1cm4gZGVjb2RlQ29tbW9uKGJ5dGVzLCBs
ZW5ndGgsIGZsdXNoLCBzdG9wT25FcnJvciwgc2F3RXJyb3IsIFt0aGlzXSAodWludDhfdCBieXRl
LCBTdHJpbmdCdWlsZGVyJiByZXN1bHQpIHsKKyAgICByZXR1cm4gZGVjb2RlQ29tbW9uKGJ5dGVz
LCBsZW5ndGgsIGZsdXNoLCBzdG9wT25FcnJvciwgW3RoaXNdICh1aW50OF90IGJ5dGUsIFN0cmlu
Z0J1aWxkZXImIHJlc3VsdCkgewogICAgICAgICBpZiAodWludDhfdCBsZWFkID0gc3RkOjpleGNo
YW5nZShtX2xlYWQsIDB4MDApKSB7CiAgICAgICAgICAgICBpZiAoYnl0ZSA+PSAweDQxICYmIGJ5
dGUgPD0gMHhGRSkgewogICAgICAgICAgICAgICAgIHVpbnQxNl90IHBvaW50ZXIgPSAobGVhZCAt
IDB4ODEpICogMTkwICsgYnl0ZSAtIDB4NDE7CkBAIC04NTYsOSArODM0LDkgQEAgc3RhdGljIGNv
bnN0IEJpZzVEZWNvZGVJbmRleCYgYmlnNURlY29kZQogICAgIHJldHVybiAqdGFibGU7CiB9CiAK
LVN0cmluZyBUZXh0Q29kZWNDSks6OmJpZzVEZWNvZGUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNp
emVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9y
KQorRXhwZWN0ZWQ8U3RyaW5nLCBEZWNvZGVGYWlsdXJlPiBUZXh0Q29kZWNDSks6OmJpZzVEZWNv
ZGUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wg
c3RvcE9uRXJyb3IpCiB7Ci0gICAgcmV0dXJuIGRlY29kZUNvbW1vbihieXRlcywgbGVuZ3RoLCBm
bHVzaCwgc3RvcE9uRXJyb3IsIHNhd0Vycm9yLCBbdGhpc10gKHVpbnQ4X3QgYnl0ZSwgU3RyaW5n
QnVpbGRlciYgcmVzdWx0KSB7CisgICAgcmV0dXJuIGRlY29kZUNvbW1vbihieXRlcywgbGVuZ3Ro
LCBmbHVzaCwgc3RvcE9uRXJyb3IsIFt0aGlzXSAodWludDhfdCBieXRlLCBTdHJpbmdCdWlsZGVy
JiByZXN1bHQpIHsKICAgICAgICAgaWYgKHVpbnQ4X3QgbGVhZCA9IHN0ZDo6ZXhjaGFuZ2UobV9s
ZWFkLCAweDAwKSkgewogICAgICAgICAgICAgdWludDhfdCBvZmZzZXQgPSBieXRlIDwgMHg3RiA/
IDB4NDAgOiAweDYyOwogICAgICAgICAgICAgaWYgKChieXRlID49IDB4NDAgJiYgYnl0ZSA8PSAw
eDdFKSB8fCAoYnl0ZSA+PSAweEExICYmIGJ5dGUgPD0gMHhGRSkpIHsKQEAgLTkwNCwyMCArODgy
LDE5IEBAIFN0cmluZyBUZXh0Q29kZWNDSks6OmJpZzVEZWNvZGUoY29uc3QgdWkKICAgICB9KTsK
IH0KIAotU3RyaW5nIFRleHRDb2RlY0NKSzo6ZGVjb2RlKGNvbnN0IGNoYXIqIGNoYXJCeXRlcywg
c2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJy
b3IpCitFeHBlY3RlZDxTdHJpbmcsIERlY29kZUZhaWx1cmU+IFRleHRDb2RlY0NKSzo6ZGVjb2Rl
KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0
b3BPbkVycm9yKQogewotICAgIGF1dG8gYnl0ZXMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihjaGFyQnl0ZXMpOwogICAgIHN3aXRjaCAobV9lbmNvZGluZykgewogICAgIGNhc2Ug
RW5jb2Rpbmc6OkVVQ19KUDoKLSAgICAgICAgcmV0dXJuIGV1Y0pQRGVjb2RlKGJ5dGVzLCBsZW5n
dGgsIGZsdXNoLCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOworICAgICAgICByZXR1cm4gZXVjSlBE
ZWNvZGUoYnl0ZXMsIGxlbmd0aCwgZmx1c2gsIHN0b3BPbkVycm9yKTsKICAgICBjYXNlIEVuY29k
aW5nOjpTaGlmdF9KSVM6Ci0gICAgICAgIHJldHVybiBzaGlmdEpJU0RlY29kZShieXRlcywgbGVu
Z3RoLCBmbHVzaCwgc3RvcE9uRXJyb3IsIHNhd0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIHNoaWZ0
SklTRGVjb2RlKGJ5dGVzLCBsZW5ndGgsIGZsdXNoLCBzdG9wT25FcnJvcik7CiAgICAgY2FzZSBF
bmNvZGluZzo6SVNPMjAyMkpQOgotICAgICAgICByZXR1cm4gaXNvMjAyMkpQRGVjb2RlKGJ5dGVz
LCBsZW5ndGgsIGZsdXNoLCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOworICAgICAgICByZXR1cm4g
aXNvMjAyMkpQRGVjb2RlKGJ5dGVzLCBsZW5ndGgsIGZsdXNoLCBzdG9wT25FcnJvcik7CiAgICAg
Y2FzZSBFbmNvZGluZzo6RVVDX0tSOgotICAgICAgICByZXR1cm4gZXVjS1JEZWNvZGUoYnl0ZXMs
IGxlbmd0aCwgZmx1c2gsIHN0b3BPbkVycm9yLCBzYXdFcnJvcik7CisgICAgICAgIHJldHVybiBl
dWNLUkRlY29kZShieXRlcywgbGVuZ3RoLCBmbHVzaCwgc3RvcE9uRXJyb3IpOwogICAgIGNhc2Ug
RW5jb2Rpbmc6OkJpZzU6Ci0gICAgICAgIHJldHVybiBiaWc1RGVjb2RlKGJ5dGVzLCBsZW5ndGgs
IGZsdXNoLCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOworICAgICAgICByZXR1cm4gYmlnNURlY29k
ZShieXRlcywgbGVuZ3RoLCBmbHVzaCwgc3RvcE9uRXJyb3IpOwogICAgIH0KICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4geyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNDSksuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY0NKSy5oCShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0NKSy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NywxNyArNDcsMTcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRl
eHRDb2RlY1JlZ2lzdHJhcik7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGRlY29kZShjb25zdCBj
aGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYg
c2F3RXJyb3IpIGZpbmFsOworICAgIEV4cGVjdGVkPFN0cmluZywgRGVjb2RlRmFpbHVyZT4gZGVj
b2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BP
bkVycm9yKSBmaW5hbDsKICAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVu
ZW5jb2RhYmxlSGFuZGxpbmcpIGZpbmFsOwogCiAgICAgZW51bSBjbGFzcyBTYXdFcnJvciA6IGJv
b2wgeyBObywgWWVzIH07Ci0gICAgU3RyaW5nIGRlY29kZUNvbW1vbihjb25zdCB1aW50OF90Kiwg
c2l6ZV90LCBib29sLCBib29sLCBib29sJiwgY29uc3QgRnVuY3Rpb248U2F3RXJyb3IodWludDhf
dCwgU3RyaW5nQnVpbGRlciYpPiYpOworICAgIEV4cGVjdGVkPFN0cmluZywgRGVjb2RlRmFpbHVy
ZT4gZGVjb2RlQ29tbW9uKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGJvb2wsIGJvb2wsIGNvbnN0
IEZ1bmN0aW9uPFNhd0Vycm9yKHVpbnQ4X3QsIFN0cmluZ0J1aWxkZXImKT4mKTsKIAotICAgIFN0
cmluZyBldWNKUERlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBib29sLCBib29sLCBib29s
Jik7Ci0gICAgU3RyaW5nIGlzbzIwMjJKUERlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBi
b29sLCBib29sLCBib29sJik7Ci0gICAgU3RyaW5nIHNoaWZ0SklTRGVjb2RlKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QsIGJvb2wsIGJvb2wsIGJvb2wmKTsKLSAgICBTdHJpbmcgZXVjS1JEZWNvZGUo
Y29uc3QgdWludDhfdCosIHNpemVfdCwgYm9vbCwgYm9vbCwgYm9vbCYpOwotICAgIFN0cmluZyBi
aWc1RGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGJvb2wsIGJvb2wsIGJvb2wmKTsKKyAg
ICBFeHBlY3RlZDxTdHJpbmcsIERlY29kZUZhaWx1cmU+IGV1Y0pQRGVjb2RlKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QsIGJvb2wsIGJvb2wpOworICAgIEV4cGVjdGVkPFN0cmluZywgRGVjb2RlRmFp
bHVyZT4gaXNvMjAyMkpQRGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGJvb2wsIGJvb2wp
OworICAgIEV4cGVjdGVkPFN0cmluZywgRGVjb2RlRmFpbHVyZT4gc2hpZnRKSVNEZWNvZGUoY29u
c3QgdWludDhfdCosIHNpemVfdCwgYm9vbCwgYm9vbCk7CisgICAgRXhwZWN0ZWQ8U3RyaW5nLCBE
ZWNvZGVGYWlsdXJlPiBldWNLUkRlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBib29sLCBi
b29sKTsKKyAgICBFeHBlY3RlZDxTdHJpbmcsIERlY29kZUZhaWx1cmU+IGJpZzVEZWNvZGUoY29u
c3QgdWludDhfdCosIHNpemVfdCwgYm9vbCwgYm9vbCk7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGlz
bzIwMjJKUEVuY29kZShTdHJpbmdWaWV3LCBGdW5jdGlvbjx2b2lkKFVDaGFyMzIsIFZlY3Rvcjx1
aW50OF90PiYpPiB1bmVuY29kYWJsZUhhbmRsZXIpOwogCiAgICAgY29uc3QgRW5jb2RpbmcgbV9l
bmNvZGluZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNV
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y0lDVS5jcHAJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjSUNVLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDE4ICsyNDEsMjAgQEAg
cHJpdmF0ZToKICAgICBVQ29udmVydGVyVG9VQ2FsbGJhY2sgbV9zYXZlZEFjdGlvbjsKIH07CiAK
LVN0cmluZyBUZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxl
bmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCitFeHBl
Y3RlZDxTdHJpbmcsIERlY29kZUZhaWx1cmU+IFRleHRDb2RlY0lDVTo6ZGVjb2RlKGNvbnN0IHVp
bnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9y
KQogewogICAgIC8vIEdldCBhIGNvbnZlcnRlciBmb3IgdGhlIHBhc3NlZC1pbiBlbmNvZGluZy4K
ICAgICBpZiAoIW1fY29udmVydGVyKSB7CiAgICAgICAgIGNyZWF0ZUlDVUNvbnZlcnRlcigpOwog
ICAgICAgICBpZiAoIW1fY29udmVydGVyKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoImVycm9y
IGNyZWF0aW5nIElDVSBlbmNvZGVyIGV2ZW4gdGhvdWdoIGVuY29kaW5nIHdhcyBpbiB0YWJsZSIp
OwotICAgICAgICAgICAgc2F3RXJyb3IgPSB0cnVlOworICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAgICAgfQogICAg
IAorICAgIGJvb2wgc2F3RXJyb3IgPSBmYWxzZTsKKwogICAgIEVycm9yQ2FsbGJhY2tTZXR0ZXIg
Y2FsbGJhY2tTZXR0ZXIoKm1fY29udmVydGVyLCBzdG9wT25FcnJvcik7CiAKICAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKQEAgLTI4Myw2ICsyODUsOCBAQCBTdHJpbmcgVGV4dENvZGVjSUNVOjpk
ZWNvZGUoY29uc3QgY2hhciogCiAgICAgaWYgKCFzdHJjbXAobV9lbmNvZGluZ05hbWUsICJHQksi
KSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtX2VuY29kaW5nTmFtZSwgImdiMTgw
MzAiKSkKICAgICAgICAgcmVzdWx0U3RyaW5nLnJlcGxhY2UoMHhFNUU1LCBpZGVvZ3JhcGhpY1Nw
YWNlKTsKIAorICAgIGlmIChzYXdFcnJvciAmJiBzdG9wT25FcnJvcikKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkPERlY29kZUZhaWx1cmU+KHsgcmVzdWx0U3RyaW5nLCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNvdXJjZSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJ5dGVzKSkg
fSk7CiAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhU
ZXh0Q29kZWNSZWdpc3RyYXIpOwogCiBwcml2YXRlOgotICAgIFN0cmluZyBkZWNvZGUoY29uc3Qg
Y2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wm
IHNhd0Vycm9yKSBmaW5hbDsKKyAgICBFeHBlY3RlZDxTdHJpbmcsIERlY29kZUZhaWx1cmU+IGRl
Y29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9w
T25FcnJvcikgZmluYWw7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBV
bmVuY29kYWJsZUhhbmRsaW5nKSBmaW5hbDsKIAogICAgIHZvaWQgY3JlYXRlSUNVQ29udmVydGVy
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xh
dGluMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNMYXRpbjEuY3BwCShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3
LDcgQEAgdm9pZCBUZXh0Q29kZWNMYXRpbjE6OnJlZ2lzdGVyQ29kZWNzKFRleAogICAgIH0pOwog
fQogCi1TdHJpbmcgVGV4dENvZGVjTGF0aW4xOjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMsIHNp
emVfdCBsZW5ndGgsIGJvb2wsIGJvb2wsIGJvb2wmKQorRXhwZWN0ZWQ8U3RyaW5nLCBEZWNvZGVG
YWlsdXJlPiBUZXh0Q29kZWNMYXRpbjE6OmRlY29kZShjb25zdCB1aW50OF90KiBieXRlcywgc2l6
ZV90IGxlbmd0aCwgYm9vbCwgYm9vbCkKIHsKICAgICBMQ2hhciogY2hhcmFjdGVyczsKICAgICBp
ZiAoIWxlbmd0aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
TGF0aW4xLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNMYXRpbjEuaAkocmV2aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0
cmFyKTsKIAogcHJpdmF0ZToKLSAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3Qg
bGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgZmlu
YWw7CisgICAgRXhwZWN0ZWQ8U3RyaW5nLCBEZWNvZGVGYWlsdXJlPiBkZWNvZGUoY29uc3QgdWlu
dDhfdCosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IpIGZpbmFs
OwogICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGUoU3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5k
bGluZykgZmluYWw7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY1JlcGxhY2VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmNwcAkocmV2aXNpb24gMjY2NjIwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMSBAQCB2b2lkIFRleHRDb2RlY1JlcGxhY2VtZW50
OjpyZWdpc3RlckNvZGVjCiAgICAgfSk7CiB9CiAKLVN0cmluZyBUZXh0Q29kZWNSZXBsYWNlbWVu
dDo6ZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QsIGJvb2wsIGJvb2wsIGJvb2wmIHNhd0Vycm9y
KQorRXhwZWN0ZWQ8U3RyaW5nLCBEZWNvZGVGYWlsdXJlPiBUZXh0Q29kZWNSZXBsYWNlbWVudDo6
ZGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sKQogewotICAg
IHNhd0Vycm9yID0gdHJ1ZTsKLSAgICBpZiAobV9zZW50RU9GKQotICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKLSAgICBtX3NlbnRFT0YgPSB0cnVlOwotICAgIHJldHVybiBTdHJpbmcgeyAm
cmVwbGFjZW1lbnRDaGFyYWN0ZXIsIDEgfTsKKyAgICBpZiAoc3RkOjpleGNoYW5nZShtX3NlbnRF
T0YsIHRydWUpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQ8RGVjb2RlRmFpbHVyZT4o
eyBlbXB0eVN0cmluZygpLCBsZW5ndGggfSk7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkPERl
Y29kZUZhaWx1cmU+KHsgU3RyaW5nIHsgJnJlcGxhY2VtZW50Q2hhcmFjdGVyLCAxIH0sIGxlbmd0
aCB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuaAkocmV2aXNpb24g
MjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwogCiBwcml2YXRlOgot
ICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gs
IGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBmaW5hbDsKKyAgICBFeHBlY3RlZDxT
dHJpbmcsIERlY29kZUZhaWx1cmU+IGRlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90IGxlbmd0
aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvcikgZmluYWw7CiAKICAgICBib29sIG1fc2Vu
dEVPRiB7IGZhbHNlIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENvZGVjU2luZ2xlQnl0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNTaW5nbGVCeXRlLmNwcAkocmV2aXNpb24gMjY2NjIwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNTaW5nbGVCeXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMyLDEwICsyMzIsMTMgQEAgVmVjdG9yPHVpbnQ4X3Q+IFRleHRDb2RlY1Np
bmdsZUJ5dGU6OmVuYwogfQogCiAvLyBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8j
c2luZ2xlLWJ5dGUtZGVjb2RlcgotU3RyaW5nIFRleHRDb2RlY1NpbmdsZUJ5dGU6OmRlY29kZShj
b25zdCBVQ2hhciogdGFibGUsIGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBi
b29sLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikKK0V4cGVjdGVkPFN0cmluZywg
RGVjb2RlRmFpbHVyZT4gVGV4dENvZGVjU2luZ2xlQnl0ZTo6ZGVjb2RlKGNvbnN0IFVDaGFyKiB0
YWJsZSwgY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wsIGJvb2wgc3Rv
cE9uRXJyb3IpCiB7CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgcmVzdWx0LnJlc2Vy
dmVDYXBhY2l0eShsZW5ndGgpOworICAgIAorICAgIGJvb2wgc2F3RXJyb3IgPSBmYWxzZTsKKyAg
ICBzaXplX3QgYnl0ZXNSZWFkID0gMDsKICAgICBhdXRvIHBhcnNlQnl0ZSA9IFsmXSAodWludDhf
dCBieXRlKSB7CiAgICAgICAgIGlmIChpc0FTQ0lJKGJ5dGUpKSB7CiAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGJ5dGUpOwpAQCAtMjUxLDcgKzI1NCw3IEBAIFN0cmluZyBUZXh0Q29kZWNTaW5n
bGVCeXRlOjpkZWNvZGUoY29uc3QKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewogICAgICAgICAgICAgcGFyc2VCeXRlKGJ5dGVzW2ldKTsKICAgICAgICAgICAg
IGlmIChzYXdFcnJvcikKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkPERlY29kZUZhaWx1cmU+KHsg
cmVzdWx0LnRvU3RyaW5nKCksIGJ5dGVzUmVhZCB9KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCkBAIC0yNjYsOSAr
MjY5LDkgQEAgVmVjdG9yPHVpbnQ4X3Q+IFRleHRDb2RlY1NpbmdsZUJ5dGU6OmVuYwogICAgIHJl
dHVybiBlbmNvZGUodGFibGVGb3JFbmNvZGluZyhtX2VuY29kaW5nKSwgc3RyaW5nLCB1bmVuY29k
YWJsZUhhbmRsZXIoaGFuZGxpbmcpKTsKIH0KIAotU3RyaW5nIFRleHRDb2RlY1NpbmdsZUJ5dGU6
OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9v
bCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCitFeHBlY3RlZDxTdHJpbmcsIERlY29kZUZh
aWx1cmU+IFRleHRDb2RlY1NpbmdsZUJ5dGU6OmRlY29kZShjb25zdCB1aW50OF90KiBieXRlcywg
c2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvcikKIHsKLSAgICByZXR1
cm4gZGVjb2RlKHRhYmxlRm9yRGVjb2RpbmcobV9lbmNvZGluZyksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGJ5dGVzKSwgbGVuZ3RoLCBmbHVzaCwgc3RvcE9uRXJyb3IsIHNhd0Vy
cm9yKTsKKyAgICByZXR1cm4gZGVjb2RlKHRhYmxlRm9yRGVjb2RpbmcobV9lbmNvZGluZyksIGJ5
dGVzLCBsZW5ndGgsIGZsdXNoLCBzdG9wT25FcnJvcik7CiB9CiAKIFRleHRDb2RlY1NpbmdsZUJ5
dGU6OlRleHRDb2RlY1NpbmdsZUJ5dGUoRW5jb2RpbmcgZW5jb2RpbmcpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1NpbmdsZUJ5dGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1NpbmdsZUJ5dGUuaAkocmV2
aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNT
aW5nbGVCeXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCwxMiBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKIAogcHJp
dmF0ZToKLSAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29s
IGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgZmluYWw7CisgICAgRXhw
ZWN0ZWQ8U3RyaW5nLCBEZWNvZGVGYWlsdXJlPiBkZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVf
dCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IpIGZpbmFsOwogICAgIFZlY3Rv
cjx1aW50OF90PiBlbmNvZGUoU3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5kbGluZykgZmluYWw7
CiAKICAgICB1c2luZyBFbmNvZGVUYWJsZSA9IHN0ZDo6cGFpcjxjb25zdCBzdGQ6OnBhaXI8VUNo
YXIsIHVpbnQ4X3Q+Kiwgc2l6ZV90PjsKICAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKGNvbnN0
IEVuY29kZVRhYmxlJiwgU3RyaW5nVmlldywgRnVuY3Rpb248dm9pZChVQ2hhcjMyLCBWZWN0b3I8
dWludDhfdD4mKT4mJik7Ci0gICAgU3RyaW5nIGRlY29kZShjb25zdCBVQ2hhciogdGFibGUsIGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9y
LCBib29sJiBzYXdFcnJvcik7CisgICAgRXhwZWN0ZWQ8U3RyaW5nLCBEZWNvZGVGYWlsdXJlPiBk
ZWNvZGUoY29uc3QgVUNoYXIqIHRhYmxlLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90IGxlbmd0aCwg
Ym9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvcik7CiAgICAgCiAgICAgY29uc3QgRW5jb2Rpbmcg
bV9lbmNvZGluZzsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY1VURjguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjVVRGOC5jcHAJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NCwxNyAr
Mjc0LDE5IEBAIHZvaWQgVGV4dENvZGVjVVRGODo6aGFuZGxlUGFydGlhbFNlcXVlbmMKICAgICB9
IHdoaWxlIChtX3BhcnRpYWxTZXF1ZW5jZVNpemUpOwogfQogICAgIAotU3RyaW5nIFRleHRDb2Rl
Y1VURjg6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVz
aCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCitFeHBlY3RlZDxTdHJpbmcsIERl
Y29kZUZhaWx1cmU+IFRleHRDb2RlY1VURjg6OmRlY29kZShjb25zdCB1aW50OF90KiBieXRlcywg
c2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvcikKIHsKICAgICAvLyBF
YWNoIGlucHV0IGJ5dGUgbWlnaHQgdHVybiBpbnRvIGEgY2hhcmFjdGVyLgogICAgIC8vIFRoYXQg
aW5jbHVkZXMgYWxsIGJ5dGVzIGluIHRoZSBwYXJ0aWFsLXNlcXVlbmNlIGJ1ZmZlciBiZWNhdXNl
CiAgICAgLy8gZWFjaCBieXRlIGluIGFuIGludmFsaWQgc2VxdWVuY2Ugd2lsbCB0dXJuIGludG8g
YSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCiAgICAgU3RyaW5nQnVmZmVyPExDaGFyPiBidWZmZXIo
bV9wYXJ0aWFsU2VxdWVuY2VTaXplICsgbGVuZ3RoKTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ5dGVzKTsKKyAgICBjb25z
dCB1aW50OF90KiBzb3VyY2UgPSBieXRlczsKICAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3Vy
Y2UgKyBsZW5ndGg7CiAgICAgY29uc3QgdWludDhfdCogYWxpZ25lZEVuZCA9IFdURjo6YWxpZ25U
b01hY2hpbmVXb3JkKGVuZCk7CiAgICAgTENoYXIqIGRlc3RpbmF0aW9uID0gYnVmZmVyLmNoYXJh
Y3RlcnMoKTsKKyAgICBib29sIHNhd0Vycm9yID0gZmFsc2U7CisgICAgc2l6ZV90IGJ5dGVzUmVh
ZCA9IDA7CiAKICAgICBkbyB7CiAgICAgICAgIGlmIChtX3BhcnRpYWxTZXF1ZW5jZVNpemUpIHsK
QEAgLTM0MCw4ICszNDIsMTAgQEAgU3RyaW5nIFRleHRDb2RlY1VURjg6OmRlY29kZShjb25zdCBj
aGFyKgogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBub25DaGFy
YWN0ZXIpIHsKICAgICAgICAgICAgICAgICBzYXdFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgaWYgKHN0b3BPbkVycm9yKQorICAgICAgICAgICAgICAgIGlmIChzdG9wT25FcnJvcikgewor
ICAgICAgICAgICAgICAgICAgICBieXRlc1JlYWQgPSBzb3VyY2UgLSBieXRlczsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
Z290byB1cENvbnZlcnRUbzE2Qml0OwogICAgICAgICAgICAgfQpAQCAtMzU1LDcgKzM1OSwxMiBA
QCBTdHJpbmcgVGV4dENvZGVjVVRGODo6ZGVjb2RlKGNvbnN0IGNoYXIqCiAKICAgICBidWZmZXIu
c2hyaW5rKGRlc3RpbmF0aW9uIC0gYnVmZmVyLmNoYXJhY3RlcnMoKSk7CiAKLSAgICByZXR1cm4g
U3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpOworICAgIHsKKyAgICAgICAgYXV0byByZXN1
bHQgPSBTdHJpbmc6OmFkb3B0KFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIGlmIChzYXdFcnJv
ciAmJiBzdG9wT25FcnJvcikKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZDxEZWNv
ZGVGYWlsdXJlPih7IHJlc3VsdCwgYnl0ZXNSZWFkIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KIAogdXBDb252ZXJ0VG8xNkJpdDoKICAgICBTdHJpbmdCdWZmZXI8VUNoYXI+IGJ1
ZmZlcjE2KG1fcGFydGlhbFNlcXVlbmNlU2l6ZSArIGxlbmd0aCk7CkBAIC0zNzQsNiArMzgzLDgg
QEAgdXBDb252ZXJ0VG8xNkJpdDoKICAgICAgICAgICAgIFVDaGFyKiBkZXN0aW5hdGlvbkZvckhh
bmRsZVBhcnRpYWxTZXF1ZW5jZSA9IGRlc3RpbmF0aW9uMTY7CiAgICAgICAgICAgICBjb25zdCB1
aW50OF90KiBzb3VyY2VGb3JIYW5kbGVQYXJ0aWFsU2VxdWVuY2UgPSBzb3VyY2U7CiAgICAgICAg
ICAgICBoYW5kbGVQYXJ0aWFsU2VxdWVuY2UoZGVzdGluYXRpb25Gb3JIYW5kbGVQYXJ0aWFsU2Vx
dWVuY2UsIHNvdXJjZUZvckhhbmRsZVBhcnRpYWxTZXF1ZW5jZSwgZW5kLCBmbHVzaCwgc3RvcE9u
RXJyb3IsIHNhd0Vycm9yKTsKKyAgICAgICAgICAgIGlmIChzYXdFcnJvciAmJiBzdG9wT25FcnJv
cikKKyAgICAgICAgICAgICAgICBieXRlc1JlYWQgPSBzb3VyY2UgLSBieXRlcyAtIG1fcGFydGlh
bFNlcXVlbmNlU2l6ZTsKICAgICAgICAgICAgIGRlc3RpbmF0aW9uMTYgPSBkZXN0aW5hdGlvbkZv
ckhhbmRsZVBhcnRpYWxTZXF1ZW5jZTsKICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZUZvckhh
bmRsZVBhcnRpYWxTZXF1ZW5jZTsKICAgICAgICAgICAgIGlmIChtX3BhcnRpYWxTZXF1ZW5jZVNp
emUpCkBAIC00MTcsOCArNDI4LDEwIEBAIHVwQ29udmVydFRvMTZCaXQ6CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09IG5vbkNoYXJhY3RlcikgewogICAgICAgICAg
ICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoc3RvcE9uRXJyb3Ip
CisgICAgICAgICAgICAgICAgaWYgKHN0b3BPbkVycm9yKSB7CisgICAgICAgICAgICAgICAgICAg
IGJ5dGVzUmVhZCA9IHNvdXJjZSAtIGJ5dGVzOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uMTYrKyA9IHJl
cGxhY2VtZW50Q2hhcmFjdGVyOwogICAgICAgICAgICAgICAgIHNvdXJjZSArPSBjb3VudCA/IGNv
dW50IDogMTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQzMCw3ICs0NDMsMTAgQEAg
dXBDb252ZXJ0VG8xNkJpdDoKICAgICAKICAgICBidWZmZXIxNi5zaHJpbmsoZGVzdGluYXRpb24x
NiAtIGJ1ZmZlcjE2LmNoYXJhY3RlcnMoKSk7CiAgICAgCi0gICAgcmV0dXJuIFN0cmluZzo6YWRv
cHQoV1RGTW92ZShidWZmZXIxNikpOworICAgIGF1dG8gcmVzdWx0ID0gU3RyaW5nOjphZG9wdChX
VEZNb3ZlKGJ1ZmZlcjE2KSk7CisgICAgaWYgKHNhd0Vycm9yICYmIHN0b3BPbkVycm9yKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQ8RGVjb2RlRmFpbHVyZT4oeyByZXN1bHQsIGJ5dGVz
UmVhZCB9KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBWZWN0b3I8dWludDhfdD4gVGV4dENv
ZGVjVVRGODo6ZW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJsZUhhbmRsaW5nKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmgJKHJl
dmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
VVRGOC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwogCiBwcml2YXRlOgot
ICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gs
IGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBvdmVycmlkZTsKKyAgICBFeHBlY3Rl
ZDxTdHJpbmcsIERlY29kZUZhaWx1cmU+IGRlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90IGxl
bmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvcikgb3ZlcnJpZGU7CiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nKSBmaW5hbDsK
IAogICAgIGJvb2wgaGFuZGxlUGFydGlhbFNlcXVlbmNlKExDaGFyKiYgZGVzdGluYXRpb24sIGNv
bnN0IHVpbnQ4X3QqJiBzb3VyY2UsIGNvbnN0IHVpbnQ4X3QqIGVuZCwgYm9vbCBmbHVzaCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNw
cAkocmV2aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVVEYxNi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDQ0ICs2NCw1MyBAQCB2b2lkIFRl
eHRDb2RlY1VURjE2OjpyZWdpc3RlckNvZGVjcyhUZXh0CiB9CiAKIC8vIGh0dHBzOi8vZW5jb2Rp
bmcuc3BlYy53aGF0d2cub3JnLyNzaGFyZWQtdXRmLTE2LWRlY29kZXIKLVN0cmluZyBUZXh0Q29k
ZWNVVEYxNjo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZs
dXNoLCBib29sLCBib29sJiBzYXdFcnJvcikKK0V4cGVjdGVkPFN0cmluZywgRGVjb2RlRmFpbHVy
ZT4gVGV4dENvZGVjVVRGMTY6OmRlY29kZShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxl
bmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvcikKIHsKLSAgICBjb25zdCBhdXRvKiBw
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnl0ZXMpOworICAgIGNvbnN0IGF1
dG8qIHAgPSBieXRlczsKICAgICBjb25zdCBhdXRvKiBjb25zdCBlbmQgPSBwICsgbGVuZ3RoOwog
ICAgIGNvbnN0IGF1dG8qIGNvbnN0IGVuZE1pbnVzT25lT3JOdWxsID0gZW5kID8gZW5kIC0gMSA6
IG51bGxwdHI7CisgICAgT3B0aW9uYWw8c2l6ZV90PiBieXRlc1JlYWQ7CiAKICAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCAvIDIpOwog
Ci0gICAgRnVuY3Rpb248dm9pZChVQ2hhcik+IHByb2Nlc3NCeXRlc1NoYXJlZDsKLSAgICBwcm9j
ZXNzQnl0ZXNTaGFyZWQgPSBbJl0gKFVDaGFyIGNvZGVVbml0KSB7CisgICAgZW51bSBjbGFzcyBT
YXdFcnJvciB7IE5vLCBZZXMgfTsKKyAgICBGdW5jdGlvbjxTYXdFcnJvcihVQ2hhcik+IHByb2Nl
c3NDb2RlVW5pdEltcGw7CisgICAgcHJvY2Vzc0NvZGVVbml0SW1wbCA9IFsmXSAoVUNoYXIgY29k
ZVVuaXQpIHsKICAgICAgICAgaWYgKG1fbGVhZFN1cnJvZ2F0ZSkgewogICAgICAgICAgICAgYXV0
byBsZWFkU3Vycm9nYXRlID0gKnN0ZDo6ZXhjaGFuZ2UobV9sZWFkU3Vycm9nYXRlLCBXVEY6Om51
bGxvcHQpOwogICAgICAgICAgICAgaWYgKFUxNl9JU19UUkFJTChjb2RlVW5pdCkpIHsKICAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kQ2hhcmFjdGVyKFUxNl9HRVRfU1VQUExFTUVOVEFSWShs
ZWFkU3Vycm9nYXRlLCBjb2RlVW5pdCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gU2F3RXJyb3I6Ok5vOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgc2F3RXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVu
dENoYXJhY3Rlcik7Ci0gICAgICAgICAgICBwcm9jZXNzQnl0ZXNTaGFyZWQoY29kZVVuaXQpOwot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKCFzdG9wT25FcnJvcikgeworICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOworICAgICAg
ICAgICAgICAgIHJldHVybiBwcm9jZXNzQ29kZVVuaXRJbXBsKGNvZGVVbml0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBTYXdFcnJvcjo6WWVzOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChVMTZfSVNfTEVBRChjb2RlVW5pdCkpIHsKICAgICAgICAgICAgIG1fbGVhZFN1cnJv
Z2F0ZSA9IGNvZGVVbml0OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChVMTZfSVNfVFJBSUwoY29kZVVuaXQpKSB7Ci0gICAgICAgICAgICBzYXdFcnJvciA9IHRy
dWU7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBTYXdFcnJvcjo6Tm87CiAgICAg
ICAgIH0KKyAgICAgICAgaWYgKFUxNl9JU19UUkFJTChjb2RlVW5pdCkpCisgICAgICAgICAgICBy
ZXR1cm4gU2F3RXJyb3I6OlllczsKICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2RlVW5pdCk7Cisg
ICAgICAgIHJldHVybiBTYXdFcnJvcjo6Tm87CisgICAgfTsKKyAgICBhdXRvIHByb2Nlc3NDb2Rl
VW5pdCA9IFsmXSAoVUNoYXIgY29kZVVuaXQpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NDb2RlVW5p
dEltcGwoY29kZVVuaXQpID09IFNhd0Vycm9yOjpZZXMpIHsKKyAgICAgICAgICAgIGlmIChzdG9w
T25FcnJvcikKKyAgICAgICAgICAgICAgICBieXRlc1JlYWQgPSBwIC0gYnl0ZXM7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudENoYXJh
Y3Rlcik7CisgICAgICAgIH0KICAgICB9OwogICAgIGF1dG8gcHJvY2Vzc0J5dGVzTEUgPSBbJl0g
KHVpbnQ4X3QgZmlyc3QsIHVpbnQ4X3Qgc2Vjb25kKSB7Ci0gICAgICAgIHByb2Nlc3NCeXRlc1No
YXJlZChmaXJzdCB8IChzZWNvbmQgPDwgOCkpOworICAgICAgICBwcm9jZXNzQ29kZVVuaXQoZmly
c3QgfCAoc2Vjb25kIDw8IDgpKTsKICAgICB9OwogICAgIGF1dG8gcHJvY2Vzc0J5dGVzQkUgPSBb
Jl0gKHVpbnQ4X3QgZmlyc3QsIHVpbnQ4X3Qgc2Vjb25kKSB7Ci0gICAgICAgIHByb2Nlc3NCeXRl
c1NoYXJlZCgoZmlyc3QgPDwgOCkgfCBzZWNvbmQpOworICAgICAgICByZXR1cm4gcHJvY2Vzc0Nv
ZGVVbml0KChmaXJzdCA8PCA4KSB8IHNlY29uZCk7CiAgICAgfTsKIAogICAgIGlmIChtX2xlYWRC
eXRlICYmIHAgPCBlbmQpIHsKQEAgLTEzMCwxNCArMTM5LDIyIEBAIFN0cmluZyBUZXh0Q29kZWNV
VEYxNjo6ZGVjb2RlKGNvbnN0IGNoYXIKICAgICAgICAgbV9sZWFkQnl0ZSA9IHBbMF07CiAgICAg
fSBlbHNlCiAgICAgICAgIEFTU0VSVCghcCB8fCBwID09IGVuZCk7Ci0gICAgCi0gICAgaWYgKGZs
dXNoICYmIChtX2xlYWRCeXRlIHx8IG1fbGVhZFN1cnJvZ2F0ZSkpIHsKKworICAgIGlmIChzdG9w
T25FcnJvcikgeworICAgICAgICBpZiAobV9sZWFkQnl0ZSB8fCBtX2xlYWRTdXJyb2dhdGUpCisg
ICAgICAgICAgICBieXRlc1JlYWQgPSBsZW5ndGg7CisgICAgICAgIGlmIChtX2xlYWRCeXRlICYm
ICpieXRlc1JlYWQpCisgICAgICAgICAgICAqYnl0ZXNSZWFkIC09IDE7CisgICAgICAgIGlmICht
X2xlYWRTdXJyb2dhdGUgJiYgKmJ5dGVzUmVhZCA+IDEpCisgICAgICAgICAgICAqYnl0ZXNSZWFk
IC09IDI7CisgICAgfSBlbHNlIGlmIChmbHVzaCAmJiAobV9sZWFkQnl0ZSB8fCBtX2xlYWRTdXJy
b2dhdGUpKSB7CiAgICAgICAgIG1fbGVhZEJ5dGUgPSBXVEY6Om51bGxvcHQ7CiAgICAgICAgIG1f
bGVhZFN1cnJvZ2F0ZSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgc2F3RXJyb3IgPSB0cnVlOwog
ICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKICAgICB9CiAKKyAg
ICBpZiAoYnl0ZXNSZWFkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQ8RGVjb2RlRmFp
bHVyZT4oeyByZXN1bHQudG9TdHJpbmcoKSwgKmJ5dGVzUmVhZCB9KTsKICAgICByZXR1cm4gcmVz
dWx0LnRvU3RyaW5nKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjVVRGMTYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY1VURjE2LmgJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgVGV4dENvZGVjVVRGMTYoYm9vbCBsaXR0bGVF
bmRpYW4pOwogCiBwcml2YXRlOgotICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVf
dCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBm
aW5hbDsKKyAgICBFeHBlY3RlZDxTdHJpbmcsIERlY29kZUZhaWx1cmU+IGRlY29kZShjb25zdCB1
aW50OF90Kiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvcikgZmlu
YWw7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVuY29kYWJsZUhh
bmRsaW5nKSBmaW5hbDsKIAogICAgIGJvb2wgbV9saXR0bGVFbmRpYW47CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNw
cAkocmV2aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVc2VyRGVmaW5lZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9p
ZCBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJDb2RlYwogICAgIH0pOwogfQogCi1TdHJp
bmcgVGV4dENvZGVjVXNlckRlZmluZWQ6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90
IGxlbmd0aCwgYm9vbCwgYm9vbCwgYm9vbCYpCitFeHBlY3RlZDxTdHJpbmcsIERlY29kZUZhaWx1
cmU+IFRleHRDb2RlY1VzZXJEZWZpbmVkOjpkZWNvZGUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNp
emVfdCBsZW5ndGgsIGJvb2wsIGJvb2wpCiB7CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAg
ICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaAkocmV2aXNpb24g
MjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVm
aW5lZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwogCiBwcml2YXRlOgot
ICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gs
IGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBmaW5hbDsKKyAgICBFeHBlY3RlZDxT
dHJpbmcsIERlY29kZUZhaWx1cmU+IGRlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90IGxlbmd0
aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvcikgZmluYWw7CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nKSBmaW5hbDsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAJ
KHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTIgKzU1LDEyIEBAIFRleHRFbmNvZGlu
Zzo6VGV4dEVuY29kaW5nKGNvbnN0IFN0cmluZyYKIHsKIH0KIAotU3RyaW5nIFRleHRFbmNvZGlu
Zzo6ZGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgsIGJvb2wgc3RvcE9uRXJy
b3IsIGJvb2wmIHNhd0Vycm9yKSBjb25zdAorRXhwZWN0ZWQ8U3RyaW5nLCBEZWNvZGVGYWlsdXJl
PiBUZXh0RW5jb2Rpbmc6OmRlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3Ro
LCBib29sIHN0b3BPbkVycm9yKSBjb25zdAogewogICAgIGlmICghbV9uYW1lKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZDxEZWNvZGVGYWls
dXJlPih7IFN0cmluZygpLCAwIH0pOwogCi0gICAgcmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcykt
PmRlY29kZShkYXRhLCBsZW5ndGgsIHRydWUsIHN0b3BPbkVycm9yLCBzYXdFcnJvcik7CisgICAg
cmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcyktPmRlY29kZShkYXRhLCBsZW5ndGgsIHRydWUsIHN0
b3BPbkVycm9yKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IFRleHRFbmNvZGluZzo6ZW5jb2RlKFN0
cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nLCBORkNOb3JtYWxp
emUgbm9ybWFsaXplKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5oCShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRGVjb2RlRmFpbHVyZS5oIgogI2luY2x1ZGUg
PHBhbC90ZXh0L1VuZW5jb2RhYmxlSGFuZGxpbmcuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgpAQCAtNDgsOCArNDksOSBAQCBwdWJsaWM6
CiAgICAgY29uc3QgVGV4dEVuY29kaW5nJiBjbG9zZXN0Qnl0ZUJhc2VkRXF1aXZhbGVudCgpIGNv
bnN0OwogICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmdGb3JGb3JtU3VibWlzc2lvbk9y
VVJMUGFyc2luZygpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRlY29kZShj
b25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJy
b3IpIGNvbnN0OwotICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEV4cGVjdGVkPFN0cmluZywgRGVjb2RlRmFpbHVy
ZT4gZGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QgbGVuZ3RoLCBib29sIHN0b3BPbkVycm9y
KSBjb25zdDsKKyAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgpIGNvbnN0OworCiAgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPHVpbnQ4X3Q+IGVu
Y29kZShTdHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nLCBORkNOb3JtYWxpemUgPSBORkNO
b3JtYWxpemU6OlllcykgY29uc3Q7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZUZvclVSTFBh
cnNpbmcoU3RyaW5nVmlldyBzdHJpbmcpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGVuY29kZShzdHJp
bmcsIFVuZW5jb2RhYmxlSGFuZGxpbmc6OlVSTEVuY29kZWRFbnRpdGllcywgTkZDTm9ybWFsaXpl
OjpObyk7IH0KIApAQCAtODEsOCArODMsMTAgQEAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRlY29k
ZVVSTEVzY2FwZVNlcQogCiBpbmxpbmUgU3RyaW5nIFRleHRFbmNvZGluZzo6ZGVjb2RlKGNvbnN0
IGNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgYm9vbCBpZ25v
cmVkOwotICAgIHJldHVybiBkZWNvZGUoY2hhcmFjdGVycywgbGVuZ3RoLCBmYWxzZSwgaWdub3Jl
ZCk7CisgICAgYXV0byByZXN1bHQgPSBkZWNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oY2hhcmFjdGVycyksIGxlbmd0aCwgZmFsc2UpOworICAgIGlmIChyZXN1bHQuaGFzX3Zh
bHVlKCkpCisgICAgICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKKyAgICByZXR1cm4gcmVzdWx0
LmVycm9yKCkuc3RyaW5nQmVmb3JlRXJyb3I7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwkocmV2aXNpb24gMjY2NjQ4KQorKysg
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE2IEBACisyMDIwLTA5LTA0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgQWxsb3cgVGV4dENvZGVjOjpkZWNvZGUgdG8gcHJvcGVybHkg
aGFuZGxlIHN0cmVhbXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNjIwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL3N0cmVhbXMvZGVjb2RlLXNwbGl0
LWNoYXJhY3Rlci5hbnktZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9lbmNvZGluZy9zdHJlYW1zL2RlY29kZS1zcGxpdC1jaGFyYWN0ZXIuYW55Lndvcmtlci1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL3RleHRkZWNv
ZGVyLWZhdGFsLXN0cmVhbWluZy1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL3RleHRkZWNvZGVyLWZhdGFsLXN0cmVhbWluZy5hbnkt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy90ZXh0
ZGVjb2Rlci1mYXRhbC1zdHJlYW1pbmcuYW55Lndvcmtlci1leHBlY3RlZC50eHQ6CisKIDIwMjAt
MDktMDQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBJbXByb3Zl
IGludGVycG9sYXRpb24gYWxnb3JpdGhtIGluIE9zY2lsbGF0b3JOb2RlCkluZGV4OiBMYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL3RleHRkZWNvZGVy
LWZhdGFsLXN0cmVhbWluZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy90ZXh0ZGVjb2Rlci1mYXRh
bC1zdHJlYW1pbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNjY2MjApCisrKyBMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL3RleHRkZWNvZGVyLWZh
dGFsLXN0cmVhbWluZy1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQpAQCAtMSw0ICswLDAgQEAK
LQotRkFJTCBGYXRhbCBmbGFnLCBub24tc3RyZWFtaW5nIGNhc2VzIGFzc2VydF9lcXVhbHM6IFVu
dGVybWluYXRlZCBVVEYtOCBzZXF1ZW5jZSBzaG91bGQgZW1pdCByZXBsYWNlbWVudCBjaGFyYWN0
ZXIgaWYgZmF0YWwgZmxhZyBpcyB1bnNldCBleHBlY3RlZCAiXHVmZmZkIiBidXQgZ290ICIiCi1G
QUlMIEZhdGFsIGZsYWcsIHN0cmVhbWluZyBjYXNlcyBhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCAi
XDAiIGJ1dCBnb3QgIiIKLQpJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9lbmNvZGluZy90ZXh0ZGVjb2Rlci1mYXRhbC1zdHJlYW1pbmcuYW55LWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2VuY29kaW5nL3RleHRkZWNvZGVyLWZhdGFsLXN0cmVhbWluZy5hbnktZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAyNjY2MjApCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL3RleHRkZWNvZGVyLWZhdGFsLXN0cmVhbWluZy5hbnkt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogCiBQQVNTIEZhdGFs
IGZsYWcsIG5vbi1zdHJlYW1pbmcgY2FzZXMgCi1GQUlMIEZhdGFsIGZsYWcsIHN0cmVhbWluZyBj
YXNlcyBhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCAiXDAiIGJ1dCBnb3QgIiIKK1BBU1MgRmF0YWwg
ZmxhZywgc3RyZWFtaW5nIGNhc2VzIAogCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL3RleHRkZWNvZGVyLWZhdGFsLXN0cmVhbWluZy5h
bnkud29ya2VyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL3RleHRkZWNvZGVyLWZhdGFsLXN0cmVh
bWluZy5hbnkud29ya2VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjY2NjIwKQorKysgTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy90ZXh0ZGVjb2Rl
ci1mYXRhbC1zdHJlYW1pbmcuYW55Lndvcmtlci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEsNCArMSw0IEBACiAKIFBBU1MgRmF0YWwgZmxhZywgbm9uLXN0cmVhbWluZyBjYXNlcyAK
LUZBSUwgRmF0YWwgZmxhZywgc3RyZWFtaW5nIGNhc2VzIGFzc2VydF9lcXVhbHM6IGV4cGVjdGVk
ICJcMCIgYnV0IGdvdCAiIgorUEFTUyBGYXRhbCBmbGFnLCBzdHJlYW1pbmcgY2FzZXMgCiAKSW5k
ZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2Rpbmcv
c3RyZWFtcy9kZWNvZGUtc3BsaXQtY2hhcmFjdGVyLmFueS1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGlu
Zy9zdHJlYW1zL2RlY29kZS1zcGxpdC1jaGFyYWN0ZXIuYW55LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMjY2NjIwKQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9lbmNvZGluZy9zdHJlYW1zL2RlY29kZS1zcGxpdC1jaGFyYWN0ZXIuYW55LWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSwxMyArMSwxMyBAQAogCiBQQVNTIGEgY29kZSBwb2ludCBz
cGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQgbm90IGJlIGVtaXR0ZWQgdW50aWwgYWxsIGJ5dGVz
IGFyZSBhdmFpbGFibGU7IHNwbGl0IHBvaW50ID0gMiAKLUZBSUwgYSBjb2RlIHBvaW50IHNwbGl0
IGJldHdlZW4gY2h1bmtzIHNob3VsZCBub3QgYmUgZW1pdHRlZCB1bnRpbCBhbGwgYnl0ZXMgYXJl
IGF2YWlsYWJsZTsgc3BsaXQgcG9pbnQgPSAzIGFzc2VydF9hcnJheV9lcXVhbHM6IHRoZSBzcGxp
dCBjb2RlIHBvaW50IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25kIGNodW5rIG9mIHRoZSBvdXRwdXQg
bGVuZ3RocyBkaWZmZXIsIGV4cGVjdGVkIGFycmF5IFsiSSAiLCAi8J+SmSBzdHJlYW1zIl0gbGVu
Z3RoIDIsIGdvdCBbIkkg8J+SmSBzdHJlYW1zIl0gbGVuZ3RoIDEKLUZBSUwgYSBjb2RlIHBvaW50
IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBub3QgYmUgZW1pdHRlZCB1bnRpbCBhbGwgYnl0
ZXMgYXJlIGF2YWlsYWJsZTsgc3BsaXQgcG9pbnQgPSA0IGFzc2VydF9hcnJheV9lcXVhbHM6IHRo
ZSBzcGxpdCBjb2RlIHBvaW50IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25kIGNodW5rIG9mIHRoZSBv
dXRwdXQgbGVuZ3RocyBkaWZmZXIsIGV4cGVjdGVkIGFycmF5IFsiSSAiLCAi8J+SmSBzdHJlYW1z
Il0gbGVuZ3RoIDIsIGdvdCBbIkkg8J+SmSBzdHJlYW1zIl0gbGVuZ3RoIDEKLUZBSUwgYSBjb2Rl
IHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBub3QgYmUgZW1pdHRlZCB1bnRpbCBh
bGwgYnl0ZXMgYXJlIGF2YWlsYWJsZTsgc3BsaXQgcG9pbnQgPSA1IGFzc2VydF9hcnJheV9lcXVh
bHM6IHRoZSBzcGxpdCBjb2RlIHBvaW50IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25kIGNodW5rIG9m
IHRoZSBvdXRwdXQgbGVuZ3RocyBkaWZmZXIsIGV4cGVjdGVkIGFycmF5IFsiSSAiLCAi8J+SmSBz
dHJlYW1zIl0gbGVuZ3RoIDIsIGdvdCBbIkkg8J+SmSBzdHJlYW1zIl0gbGVuZ3RoIDEKK1BBU1Mg
YSBjb2RlIHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBub3QgYmUgZW1pdHRlZCB1
bnRpbCBhbGwgYnl0ZXMgYXJlIGF2YWlsYWJsZTsgc3BsaXQgcG9pbnQgPSAzIAorUEFTUyBhIGNv
ZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxkIG5vdCBiZSBlbWl0dGVkIHVudGls
IGFsbCBieXRlcyBhcmUgYXZhaWxhYmxlOyBzcGxpdCBwb2ludCA9IDQgCitQQVNTIGEgY29kZSBw
b2ludCBzcGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQgbm90IGJlIGVtaXR0ZWQgdW50aWwgYWxs
IGJ5dGVzIGFyZSBhdmFpbGFibGU7IHNwbGl0IHBvaW50ID0gNSAKIFBBU1MgYSBjb2RlIHBvaW50
IHNob3VsZCBiZSBlbWl0dGVkIGFzIHNvb24gYXMgYWxsIGJ5dGVzIGFyZSBhdmFpbGFibGUgCiBQ
QVNTIGFuIGVtcHR5IGNodW5rIGluc2lkZSBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVu
a3Mgc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG91dHB1dDsgc3BsaXQgcG9pbnQgPSAxIAogUEFTUyBh
biBlbXB0eSBjaHVuayBpbnNpZGUgYSBjb2RlIHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNo
b3VsZCBub3QgY2hhbmdlIHRoZSBvdXRwdXQ7IHNwbGl0IHBvaW50ID0gMiAKLUZBSUwgYW4gZW1w
dHkgY2h1bmsgaW5zaWRlIGEgY29kZSBwb2ludCBzcGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQg
bm90IGNoYW5nZSB0aGUgb3V0cHV0OyBzcGxpdCBwb2ludCA9IDMgYXNzZXJ0X2VxdWFsczogdHdv
IGNodW5rcyBzaG91bGQgYmUgb3V0cHV0IGV4cGVjdGVkIDIgYnV0IGdvdCAxCi1GQUlMIGFuIGVt
cHR5IGNodW5rIGluc2lkZSBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxk
IG5vdCBjaGFuZ2UgdGhlIG91dHB1dDsgc3BsaXQgcG9pbnQgPSA0IGFzc2VydF9lcXVhbHM6IHR3
byBjaHVua3Mgc2hvdWxkIGJlIG91dHB1dCBleHBlY3RlZCAyIGJ1dCBnb3QgMQotRkFJTCBhbiBl
bXB0eSBjaHVuayBpbnNpZGUgYSBjb2RlIHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3Vs
ZCBub3QgY2hhbmdlIHRoZSBvdXRwdXQ7IHNwbGl0IHBvaW50ID0gNSBhc3NlcnRfZXF1YWxzOiB0
d28gY2h1bmtzIHNob3VsZCBiZSBvdXRwdXQgZXhwZWN0ZWQgMiBidXQgZ290IDEKK1BBU1MgYW4g
ZW1wdHkgY2h1bmsgaW5zaWRlIGEgY29kZSBwb2ludCBzcGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91
bGQgbm90IGNoYW5nZSB0aGUgb3V0cHV0OyBzcGxpdCBwb2ludCA9IDMgCitQQVNTIGFuIGVtcHR5
IGNodW5rIGluc2lkZSBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxkIG5v
dCBjaGFuZ2UgdGhlIG91dHB1dDsgc3BsaXQgcG9pbnQgPSA0IAorUEFTUyBhbiBlbXB0eSBjaHVu
ayBpbnNpZGUgYSBjb2RlIHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBub3QgY2hh
bmdlIHRoZSBvdXRwdXQ7IHNwbGl0IHBvaW50ID0gNSAKIFBBU1MgYW4gZW1wdHkgY2h1bmsgaW5z
aWRlIGEgY29kZSBwb2ludCBzcGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQgbm90IGNoYW5nZSB0
aGUgb3V0cHV0OyBzcGxpdCBwb2ludCA9IDYgCiAKSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2Rpbmcvc3RyZWFtcy9kZWNvZGUtc3BsaXQtY2hh
cmFjdGVyLmFueS53b3JrZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2Rpbmcvc3RyZWFtcy9kZWNvZGUt
c3BsaXQtY2hhcmFjdGVyLmFueS53b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNjY2MjAp
CisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5n
L3N0cmVhbXMvZGVjb2RlLXNwbGl0LWNoYXJhY3Rlci5hbnkud29ya2VyLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMyArMSwxMyBAQAogCiBQQVNTIGEgY29kZSBwb2ludCBzcGxp
dCBiZXR3ZWVuIGNodW5rcyBzaG91bGQgbm90IGJlIGVtaXR0ZWQgdW50aWwgYWxsIGJ5dGVzIGFy
ZSBhdmFpbGFibGU7IHNwbGl0IHBvaW50ID0gMiAKLUZBSUwgYSBjb2RlIHBvaW50IHNwbGl0IGJl
dHdlZW4gY2h1bmtzIHNob3VsZCBub3QgYmUgZW1pdHRlZCB1bnRpbCBhbGwgYnl0ZXMgYXJlIGF2
YWlsYWJsZTsgc3BsaXQgcG9pbnQgPSAzIGFzc2VydF9hcnJheV9lcXVhbHM6IHRoZSBzcGxpdCBj
b2RlIHBvaW50IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25kIGNodW5rIG9mIHRoZSBvdXRwdXQgbGVu
Z3RocyBkaWZmZXIsIGV4cGVjdGVkIGFycmF5IFsiSSAiLCAi8J+SmSBzdHJlYW1zIl0gbGVuZ3Ro
IDIsIGdvdCBbIkkg8J+SmSBzdHJlYW1zIl0gbGVuZ3RoIDEKLUZBSUwgYSBjb2RlIHBvaW50IHNw
bGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBub3QgYmUgZW1pdHRlZCB1bnRpbCBhbGwgYnl0ZXMg
YXJlIGF2YWlsYWJsZTsgc3BsaXQgcG9pbnQgPSA0IGFzc2VydF9hcnJheV9lcXVhbHM6IHRoZSBz
cGxpdCBjb2RlIHBvaW50IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25kIGNodW5rIG9mIHRoZSBvdXRw
dXQgbGVuZ3RocyBkaWZmZXIsIGV4cGVjdGVkIGFycmF5IFsiSSAiLCAi8J+SmSBzdHJlYW1zIl0g
bGVuZ3RoIDIsIGdvdCBbIkkg8J+SmSBzdHJlYW1zIl0gbGVuZ3RoIDEKLUZBSUwgYSBjb2RlIHBv
aW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBub3QgYmUgZW1pdHRlZCB1bnRpbCBhbGwg
Ynl0ZXMgYXJlIGF2YWlsYWJsZTsgc3BsaXQgcG9pbnQgPSA1IGFzc2VydF9hcnJheV9lcXVhbHM6
IHRoZSBzcGxpdCBjb2RlIHBvaW50IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25kIGNodW5rIG9mIHRo
ZSBvdXRwdXQgbGVuZ3RocyBkaWZmZXIsIGV4cGVjdGVkIGFycmF5IFsiSSAiLCAi8J+SmSBzdHJl
YW1zIl0gbGVuZ3RoIDIsIGdvdCBbIkkg8J+SmSBzdHJlYW1zIl0gbGVuZ3RoIDEKK1BBU1MgYSBj
b2RlIHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBub3QgYmUgZW1pdHRlZCB1bnRp
bCBhbGwgYnl0ZXMgYXJlIGF2YWlsYWJsZTsgc3BsaXQgcG9pbnQgPSAzIAorUEFTUyBhIGNvZGUg
cG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxkIG5vdCBiZSBlbWl0dGVkIHVudGlsIGFs
bCBieXRlcyBhcmUgYXZhaWxhYmxlOyBzcGxpdCBwb2ludCA9IDQgCitQQVNTIGEgY29kZSBwb2lu
dCBzcGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQgbm90IGJlIGVtaXR0ZWQgdW50aWwgYWxsIGJ5
dGVzIGFyZSBhdmFpbGFibGU7IHNwbGl0IHBvaW50ID0gNSAKIFBBU1MgYSBjb2RlIHBvaW50IHNo
b3VsZCBiZSBlbWl0dGVkIGFzIHNvb24gYXMgYWxsIGJ5dGVzIGFyZSBhdmFpbGFibGUgCiBQQVNT
IGFuIGVtcHR5IGNodW5rIGluc2lkZSBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mg
c2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG91dHB1dDsgc3BsaXQgcG9pbnQgPSAxIAogUEFTUyBhbiBl
bXB0eSBjaHVuayBpbnNpZGUgYSBjb2RlIHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3Vs
ZCBub3QgY2hhbmdlIHRoZSBvdXRwdXQ7IHNwbGl0IHBvaW50ID0gMiAKLUZBSUwgYW4gZW1wdHkg
Y2h1bmsgaW5zaWRlIGEgY29kZSBwb2ludCBzcGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQgbm90
IGNoYW5nZSB0aGUgb3V0cHV0OyBzcGxpdCBwb2ludCA9IDMgYXNzZXJ0X2VxdWFsczogdHdvIGNo
dW5rcyBzaG91bGQgYmUgb3V0cHV0IGV4cGVjdGVkIDIgYnV0IGdvdCAxCi1GQUlMIGFuIGVtcHR5
IGNodW5rIGluc2lkZSBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxkIG5v
dCBjaGFuZ2UgdGhlIG91dHB1dDsgc3BsaXQgcG9pbnQgPSA0IGFzc2VydF9lcXVhbHM6IHR3byBj
aHVua3Mgc2hvdWxkIGJlIG91dHB1dCBleHBlY3RlZCAyIGJ1dCBnb3QgMQotRkFJTCBhbiBlbXB0
eSBjaHVuayBpbnNpZGUgYSBjb2RlIHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBu
b3QgY2hhbmdlIHRoZSBvdXRwdXQ7IHNwbGl0IHBvaW50ID0gNSBhc3NlcnRfZXF1YWxzOiB0d28g
Y2h1bmtzIHNob3VsZCBiZSBvdXRwdXQgZXhwZWN0ZWQgMiBidXQgZ290IDEKK1BBU1MgYW4gZW1w
dHkgY2h1bmsgaW5zaWRlIGEgY29kZSBwb2ludCBzcGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQg
bm90IGNoYW5nZSB0aGUgb3V0cHV0OyBzcGxpdCBwb2ludCA9IDMgCitQQVNTIGFuIGVtcHR5IGNo
dW5rIGluc2lkZSBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxkIG5vdCBj
aGFuZ2UgdGhlIG91dHB1dDsgc3BsaXQgcG9pbnQgPSA0IAorUEFTUyBhbiBlbXB0eSBjaHVuayBp
bnNpZGUgYSBjb2RlIHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBub3QgY2hhbmdl
IHRoZSBvdXRwdXQ7IHNwbGl0IHBvaW50ID0gNSAKIFBBU1MgYW4gZW1wdHkgY2h1bmsgaW5zaWRl
IGEgY29kZSBwb2ludCBzcGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQgbm90IGNoYW5nZSB0aGUg
b3V0cHV0OyBzcGxpdCBwb2ludCA9IDYgCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408067</attachid>
            <date>2020-09-05 00:23:11 -0700</date>
            <delta_ts>2020-09-05 08:38:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216202-20200905002310.patch</filename>
            <type>text/plain</type>
            <size>17506</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjY1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDIwLTA5LTA1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGV4dERlY29k
ZXIgc2hvdWxkIHByb3Blcmx5IGhhbmRsZSBzdHJlYW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYyMDIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIFRleHRDb2RlYyBrZWVwcyBzdGF0ZSB3aGVuIGl0
IGRlY29kZXMgcGFydCBvZiB2YWxpZCBpbnB1dCwgc3VjaCBhcyB0aGUgZmlyc3QgYnl0ZSBvZiBh
IG11bHRpYnl0ZSBzZXF1ZW5jZS4KKyAgICAgICAgVGV4dEVuY29kaW5nOjpkZWNvZGUgbWFrZXMg
YSBuZXcgVGV4dENvZGVjIGFuZCB0aHJvd3MgYXdheSB0aGF0IHN0YXRlLgorICAgICAgICBJbiBv
cmRlciB0byBwcm9wZXJseSBoYW5kbGUgc3RyZWFtaW5nLCB3ZSBuZWVkIHRvIGtlZXAgdGhlIFRl
eHRDb2RlYyBhbmQgY2FsbCBUZXh0Q29kZWM6OmRlY29kZSBkaXJlY3RseS4KKworICAgICAgICBD
b3ZlcmVkIGJ5IG5ld2x5IHBhc3Npbmcgd2ViIHBsYXRmb3JtIHRlc3RzLiAgSSBhbHNvIGFkZGVk
IGEgdGVzdCB0aGF0IGZhaWxlZCBpbiBteSBmaXJzdCBpbXBsZW1lbnRhdGlvbiBhdHRlbXB0Cisg
ICAgICAgIGJ1dCBwYXNzZXMgbm93IGluIFdlYktpdCBhcyB3ZWxsIGFzIENocm9taXVtLiAgRmly
ZWZveCBoYXNuJ3QgaW1wbGVtZW50ZWQgVGV4dERlY29kZXJTdHJlYW0geWV0LCBidXQgdGhpcyB0
ZXN0IHdpbGwKKyAgICAgICAgaG9wZWZ1bGx5IGhlbHAgdGhlbSBub3QgbWFrZSB0aGUgc2FtZSBt
aXN0YWtlIEkgZGlkLgorCisgICAgICAgICogZG9tL1RleHREZWNvZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHREZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29kZVVu
aXRCeXRlU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1RleHREZWNvZGVyLmg6CisKIDIw
MjAtMDktMDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBGaXggYnVpbGQgd2hlbiB1c2luZyBub24tc3RhbmRhcmQgdW5pZmllZCBzb3VyY2Vz
LgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RleHREZWNvZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dERlY29kZXIuY3BwCShyZXZpc2lvbiAyNjY2NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dERlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NiwxMCArMjYsMTQgQEAKICNpbmNsdWRlICJUZXh0RGVjb2Rlci5oIgogCiAjaW5jbHVkZSAiSFRN
TFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIlRleHRDb2RlYy5oIgorI2luY2x1ZGUgIlRleHRF
bmNvZGluZ1JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorVGV4dERlY29kZXI6On5UZXh0RGVjb2RlcigpID0gZGVmYXVsdDsKKwog
RXhjZXB0aW9uT3I8UmVmPFRleHREZWNvZGVyPj4gVGV4dERlY29kZXI6OmNyZWF0ZShjb25zdCBT
dHJpbmcmIGxhYmVsLCBPcHRpb25zIG9wdGlvbnMpCiB7CiAgICAgU3RyaW5nIHN0cmlwcGVkTGFi
ZWwgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMobGFiZWwpOwpAQCAtMTE3LDEx
ICsxMjEsNiBAQCBhdXRvIFRleHREZWNvZGVyOjppZ25vcmVCT01JZk5lY2Vzc2FyeShjCiAgICAg
cmV0dXJuIFdhaXRGb3JNb3JlQk9NQnl0ZXM6Ok5vOwogfQogCi1zdGF0aWMgc2l6ZV90IGNvZGVV
bml0Qnl0ZVNpemUoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKLXsKLSAgICByZXR1cm4g
ZW5jb2RpbmcuaXNCeXRlQmFzZWRFbmNvZGluZygpID8gMSA6IDI7Ci19Ci0KIEV4Y2VwdGlvbk9y
PFN0cmluZz4gVGV4dERlY29kZXI6OmRlY29kZShPcHRpb25hbDxCdWZmZXJTb3VyY2U6OlZhcmlh
bnRUeXBlPiBpbnB1dCwgRGVjb2RlT3B0aW9ucyBvcHRpb25zKQogewogICAgIE9wdGlvbmFsPEJ1
ZmZlclNvdXJjZT4gaW5wdXRCdWZmZXI7CkBAIC0xNTEsMjggKzE1MCwxNSBAQCBFeGNlcHRpb25P
cjxTdHJpbmc+IFRleHREZWNvZGVyOjpkZWNvZGUoCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
ICAgICB9CiAKLSAgICBjb25zdCBib29sIHN0b3BPbkVycm9yID0gdHJ1ZTsKLSAgICBib29sIHNh
d0Vycm9yID0gZmFsc2U7Ci0gICAgaWYgKGxlbmd0aCAlIGNvZGVVbml0Qnl0ZVNpemUobV90ZXh0
RW5jb2RpbmcpKQotICAgICAgICBzYXdFcnJvciA9IHRydWU7Ci0gICAgY29uc3QgY2hhciogY2hh
ckRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKTsKLSAgICBTdHJpbmcg
cmVzdWx0OwotICAgIGlmICghc2F3RXJyb3IpCi0gICAgICAgIHJlc3VsdCA9IG1fdGV4dEVuY29k
aW5nLmRlY29kZShjaGFyRGF0YSwgbGVuZ3RoLCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOwotCi0g
ICAgaWYgKHNhd0Vycm9yKSB7Ci0gICAgICAgIGlmIChvcHRpb25zLnN0cmVhbSkgewotICAgICAg
ICAgICAgcmVzdWx0ID0gU3RyaW5nKCk7Ci0gICAgICAgICAgICBpZiAoIW1fYnVmZmVyLnNpemUo
KSkKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX29wdGlvbnMuZmF0YWwpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwotICAgICAgICAgICAgcmVzdWx0
ID0gbV90ZXh0RW5jb2RpbmcuZGVjb2RlKGNoYXJEYXRhLCBsZW5ndGgpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlCi0gICAgICAgIG1fYnVmZmVyLmNsZWFyKCk7CisgICAgYXV0byBvbGRCdWZmZXIg
PSBzdGQ6OmV4Y2hhbmdlKG1fYnVmZmVyLCB7IH0pOworCisgICAgaWYgKCFtX3RleHRDb2RlYykK
KyAgICAgICAgbV90ZXh0Q29kZWMgPSBuZXdUZXh0Q29kZWMobV90ZXh0RW5jb2RpbmcpOwogCisg
ICAgYm9vbCBzYXdFcnJvciA9IGZhbHNlOworICAgIFN0cmluZyByZXN1bHQgPSBtX3RleHRDb2Rl
Yy0+ZGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBsZW5ndGgsICFv
cHRpb25zLnN0cmVhbSwgZmFsc2UsIHNhd0Vycm9yKTsKKyAgICBpZiAoc2F3RXJyb3IgJiYgbV9v
cHRpb25zLmZhdGFsKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RleHREZWNv
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RleHREZWNvZGVyLmgJKHJl
dmlzaW9uIDI2NjY1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RGVjb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgVGV4dENvZGVjOworCiBjbGFzcyBUZXh0RGVjb2RlciA6IHB1YmxpYyBSZWZDb3VudGVkPFRl
eHREZWNvZGVyPiB7CiBwdWJsaWM6CiAgICAgc3RydWN0IE9wdGlvbnMgewpAQCAtNDksNiArNTEs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpZ25vcmVCT00oKSBjb25zdCB7IHJldHVybiBtX29wdGlv
bnMuaWdub3JlQk9NOyB9CiAgICAgRXhjZXB0aW9uT3I8U3RyaW5nPiBkZWNvZGUoT3B0aW9uYWw8
QnVmZmVyU291cmNlOjpWYXJpYW50VHlwZT4sIERlY29kZU9wdGlvbnMpOwogCisgICAgflRleHRE
ZWNvZGVyKCk7CiBwcml2YXRlOgogICAgIFRleHREZWNvZGVyKGNvbnN0IGNoYXIqLCBPcHRpb25z
KTsKIApAQCAtNTcsNyArNjAsOCBAQCBwcml2YXRlOgogICAgIHNpemVfdCBieXRlc05lZWRlZEZv
ckZ1bGxCT01JZ25vcmVDaGVjaygpIGNvbnN0OwogICAgIGJvb2wgaXNCZWdpbm5pbmdPZkluY29t
cGxldGVCT00oY29uc3QgdWludDhfdCosIHNpemVfdCkgY29uc3Q7CiAKLSAgICBUZXh0RW5jb2Rp
bmcgbV90ZXh0RW5jb2Rpbmc7CisgICAgY29uc3QgVGV4dEVuY29kaW5nIG1fdGV4dEVuY29kaW5n
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IG1fdGV4dENvZGVjOwogICAgIE9wdGlv
bnMgbV9vcHRpb25zOwogICAgIFZlY3Rvcjx1aW50OF90PiBtX2J1ZmZlcjsKICAgICBib29sIG1f
Ym9tSWdub3JlZElmTmVjZXNzYXJ5IHsgZmFsc2UgfTsKSW5kZXg6IExheW91dFRlc3RzL2ltcG9y
dGVkL3czYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L0NoYW5nZUxvZwkocmV2aXNpb24gMjY2NjUxKQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIwLTA5LTA1ICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGV4
dERlY29kZXIgc2hvdWxkIHByb3Blcmx5IGhhbmRsZSBzdHJlYW1zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYyMDIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9lbmNv
ZGluZy9zdHJlYW1zL2RlY29kZS1ub24tdXRmOC5hbnktZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9zdHJlYW1zL2RlY29kZS1ub24tdXRmOC5hbnku
anM6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL3N0cmVhbXMvZGVjb2Rl
LW5vbi11dGY4LmFueS53b3JrZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9lbmNvZGluZy9zdHJlYW1zL2RlY29kZS1zcGxpdC1jaGFyYWN0ZXIuYW55LWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2Rpbmcvc3RyZWFtcy9k
ZWNvZGUtc3BsaXQtY2hhcmFjdGVyLmFueS53b3JrZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9zdHJlYW1zL3JlYWxtcy53aW5kb3ctZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy90ZXh0ZGVjb2Rl
ci1mYXRhbC1zdHJlYW1pbmctZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9lbmNvZGluZy90ZXh0ZGVjb2Rlci1mYXRhbC1zdHJlYW1pbmcuYW55LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2RpbmcvdGV4dGRl
Y29kZXItZmF0YWwtc3RyZWFtaW5nLmFueS53b3JrZXItZXhwZWN0ZWQudHh0OgorCiAyMDIwLTA5
LTA0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgQWxpZ24gS09JOC1VIGFuZCBpYm04NjYgZW5jb2RpbmdzIHdpdGggQ2hyb21lLCBGaXJlZm94
LCBhbmQgdGhlIHNwZWNpZmljYXRpb24KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2RpbmcvdGV4dGRlY29kZXItZmF0YWwtc3RyZWFtaW5nLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2VuY29kaW5nL3RleHRkZWNvZGVyLWZhdGFsLXN0cmVhbWluZy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDI2NjY1MCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvZW5jb2RpbmcvdGV4dGRlY29kZXItZmF0YWwtc3RyZWFtaW5nLWV4cGVj
dGVkLnR4dAkobm9uZXhpc3RlbnQpCkBAIC0xLDQgKzAsMCBAQAotCi1GQUlMIEZhdGFsIGZsYWcs
IG5vbi1zdHJlYW1pbmcgY2FzZXMgYXNzZXJ0X2VxdWFsczogVW50ZXJtaW5hdGVkIFVURi04IHNl
cXVlbmNlIHNob3VsZCBlbWl0IHJlcGxhY2VtZW50IGNoYXJhY3RlciBpZiBmYXRhbCBmbGFnIGlz
IHVuc2V0IGV4cGVjdGVkICJcdWZmZmQiIGJ1dCBnb3QgIiIKLUZBSUwgRmF0YWwgZmxhZywgc3Ry
ZWFtaW5nIGNhc2VzIGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkICJcMCIgYnV0IGdvdCAiIgotCklu
ZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5n
L3RleHRkZWNvZGVyLWZhdGFsLXN0cmVhbWluZy5hbnktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2Rpbmcv
dGV4dGRlY29kZXItZmF0YWwtc3RyZWFtaW5nLmFueS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI2
NjY1MCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZW5j
b2RpbmcvdGV4dGRlY29kZXItZmF0YWwtc3RyZWFtaW5nLmFueS1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEsNCArMSw0IEBACiAKIFBBU1MgRmF0YWwgZmxhZywgbm9uLXN0cmVhbWlu
ZyBjYXNlcyAKLUZBSUwgRmF0YWwgZmxhZywgc3RyZWFtaW5nIGNhc2VzIGFzc2VydF9lcXVhbHM6
IGV4cGVjdGVkICJcMCIgYnV0IGdvdCAiIgorUEFTUyBGYXRhbCBmbGFnLCBzdHJlYW1pbmcgY2Fz
ZXMgCiAKSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
ZW5jb2RpbmcvdGV4dGRlY29kZXItZmF0YWwtc3RyZWFtaW5nLmFueS53b3JrZXItZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvZW5jb2RpbmcvdGV4dGRlY29kZXItZmF0YWwtc3RyZWFtaW5nLmFueS53b3JrZXItZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAyNjY2NTApCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL3RleHRkZWNvZGVyLWZhdGFsLXN0cmVhbWluZy5h
bnkud29ya2VyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKIAog
UEFTUyBGYXRhbCBmbGFnLCBub24tc3RyZWFtaW5nIGNhc2VzIAotRkFJTCBGYXRhbCBmbGFnLCBz
dHJlYW1pbmcgY2FzZXMgYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgIlwwIiBidXQgZ290ICIiCitQ
QVNTIEZhdGFsIGZsYWcsIHN0cmVhbWluZyBjYXNlcyAKIApJbmRleDogTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9zdHJlYW1zL2RlY29kZS1ub24t
dXRmOC5hbnktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2Rpbmcvc3RyZWFtcy9kZWNvZGUtbm9uLXV0Zjgu
YW55LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjY2NjUwKQorKysgTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9zdHJlYW1zL2RlY29kZS1ub24tdXRm
OC5hbnktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04LDUgKzgsOCBAQCBQQVNTIFRl
eHREZWNvZGVyU3RyZWFtIHNob3VsZCBiZSBhYmxlIHRvCiBQQVNTIFRleHREZWNvZGVyU3RyZWFt
IHNob3VsZCBiZSBhYmxlIHRvIGRlY29kZSBTaGlmdF9KSVMgCiBQQVNTIFRleHREZWNvZGVyU3Ry
ZWFtIHNob3VsZCBiZSBhYmxlIHRvIGRlY29kZSBpbnZhbGlkIHNlcXVlbmNlcyBpbiBTaGlmdF9K
SVMgCiBQQVNTIFRleHREZWNvZGVyU3RyZWFtIHNob3VsZCBiZSBhYmxlIHRvIHJlamVjdCBpbnZh
bGlkIHNlcXVlbmNlcyBpbiBTaGlmdF9KSVMgCitQQVNTIFRleHREZWNvZGVyU3RyZWFtIHNob3Vs
ZCBiZSBhYmxlIHRvIGRlY29kZSBJU08tMjAyMi1KUCAKK1BBU1MgVGV4dERlY29kZXJTdHJlYW0g
c2hvdWxkIGJlIGFibGUgdG8gZGVjb2RlIGludmFsaWQgc2VxdWVuY2VzIGluIElTTy0yMDIyLUpQ
IAorUEFTUyBUZXh0RGVjb2RlclN0cmVhbSBzaG91bGQgYmUgYWJsZSB0byByZWplY3QgaW52YWxp
ZCBzZXF1ZW5jZXMgaW4gSVNPLTIwMjItSlAgCiBQQVNTIFRleHREZWNvZGVyU3RyZWFtIHNob3Vs
ZCBiZSBhYmxlIHRvIGRlY29kZSBJU08tODg1OS0xNCAKIApJbmRleDogTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9zdHJlYW1zL2RlY29kZS1ub24t
dXRmOC5hbnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9zdHJlYW1zL2RlY29kZS1ub24tdXRmOC5hbnkuanMJKHJl
dmlzaW9uIDI2NjY1MCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvZW5jb2Rpbmcvc3RyZWFtcy9kZWNvZGUtbm9uLXV0ZjguYW55LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiwxMiBAQCBjb25zdCBlbmNvZGluZ3MgPSBbCiAgICAgaW52YWxpZDog
WzI1NV0KICAgfSwKICAgeworICAgIG5hbWU6ICdJU08tMjAyMi1KUCcsCisgICAgdmFsdWU6IFs2
NSwgNjYsIDY3LCAweDFCLCA2NSwgNjYsIDY3XSwKKyAgICBleHBlY3RlZDogIkFCQ1x1e2ZmZmR9
QUJDIiwKKyAgICBpbnZhbGlkOiBbMHgwRV0KKyAgfSwKKyAgewogICAgIG5hbWU6ICdJU08tODg1
OS0xNCcsCiAgICAgdmFsdWU6IFsxMDAsIDI0MCwgMTE0XSwKICAgICBleHBlY3RlZDogImRcdXsw
MTc1fXIiLApJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9lbmNvZGluZy9zdHJlYW1zL2RlY29kZS1ub24tdXRmOC5hbnkud29ya2VyLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2VuY29kaW5nL3N0cmVhbXMvZGVjb2RlLW5vbi11dGY4LmFueS53b3JrZXItZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAyNjY2NTApCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2VuY29kaW5nL3N0cmVhbXMvZGVjb2RlLW5vbi11dGY4LmFueS53b3JrZXIt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04LDUgKzgsOCBAQCBQQVNTIFRleHREZWNv
ZGVyU3RyZWFtIHNob3VsZCBiZSBhYmxlIHRvCiBQQVNTIFRleHREZWNvZGVyU3RyZWFtIHNob3Vs
ZCBiZSBhYmxlIHRvIGRlY29kZSBTaGlmdF9KSVMgCiBQQVNTIFRleHREZWNvZGVyU3RyZWFtIHNo
b3VsZCBiZSBhYmxlIHRvIGRlY29kZSBpbnZhbGlkIHNlcXVlbmNlcyBpbiBTaGlmdF9KSVMgCiBQ
QVNTIFRleHREZWNvZGVyU3RyZWFtIHNob3VsZCBiZSBhYmxlIHRvIHJlamVjdCBpbnZhbGlkIHNl
cXVlbmNlcyBpbiBTaGlmdF9KSVMgCitQQVNTIFRleHREZWNvZGVyU3RyZWFtIHNob3VsZCBiZSBh
YmxlIHRvIGRlY29kZSBJU08tMjAyMi1KUCAKK1BBU1MgVGV4dERlY29kZXJTdHJlYW0gc2hvdWxk
IGJlIGFibGUgdG8gZGVjb2RlIGludmFsaWQgc2VxdWVuY2VzIGluIElTTy0yMDIyLUpQIAorUEFT
UyBUZXh0RGVjb2RlclN0cmVhbSBzaG91bGQgYmUgYWJsZSB0byByZWplY3QgaW52YWxpZCBzZXF1
ZW5jZXMgaW4gSVNPLTIwMjItSlAgCiBQQVNTIFRleHREZWNvZGVyU3RyZWFtIHNob3VsZCBiZSBh
YmxlIHRvIGRlY29kZSBJU08tODg1OS0xNCAKIApJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9zdHJlYW1zL2RlY29kZS1zcGxpdC1jaGFy
YWN0ZXIuYW55LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL3N0cmVhbXMvZGVjb2RlLXNwbGl0LWNo
YXJhY3Rlci5hbnktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNjY2NTApCisrKyBMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2VuY29kaW5nL3N0cmVhbXMvZGVjb2Rl
LXNwbGl0LWNoYXJhY3Rlci5hbnktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEz
ICsxLDEzIEBACiAKIFBBU1MgYSBjb2RlIHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3Vs
ZCBub3QgYmUgZW1pdHRlZCB1bnRpbCBhbGwgYnl0ZXMgYXJlIGF2YWlsYWJsZTsgc3BsaXQgcG9p
bnQgPSAyIAotRkFJTCBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxkIG5v
dCBiZSBlbWl0dGVkIHVudGlsIGFsbCBieXRlcyBhcmUgYXZhaWxhYmxlOyBzcGxpdCBwb2ludCA9
IDMgYXNzZXJ0X2FycmF5X2VxdWFsczogdGhlIHNwbGl0IGNvZGUgcG9pbnQgc2hvdWxkIGJlIGlu
IHRoZSBzZWNvbmQgY2h1bmsgb2YgdGhlIG91dHB1dCBsZW5ndGhzIGRpZmZlciwgZXhwZWN0ZWQg
YXJyYXkgWyJJICIsICLwn5KZIHN0cmVhbXMiXSBsZW5ndGggMiwgZ290IFsiSSDwn5KZIHN0cmVh
bXMiXSBsZW5ndGggMQotRkFJTCBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hv
dWxkIG5vdCBiZSBlbWl0dGVkIHVudGlsIGFsbCBieXRlcyBhcmUgYXZhaWxhYmxlOyBzcGxpdCBw
b2ludCA9IDQgYXNzZXJ0X2FycmF5X2VxdWFsczogdGhlIHNwbGl0IGNvZGUgcG9pbnQgc2hvdWxk
IGJlIGluIHRoZSBzZWNvbmQgY2h1bmsgb2YgdGhlIG91dHB1dCBsZW5ndGhzIGRpZmZlciwgZXhw
ZWN0ZWQgYXJyYXkgWyJJICIsICLwn5KZIHN0cmVhbXMiXSBsZW5ndGggMiwgZ290IFsiSSDwn5KZ
IHN0cmVhbXMiXSBsZW5ndGggMQotRkFJTCBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVu
a3Mgc2hvdWxkIG5vdCBiZSBlbWl0dGVkIHVudGlsIGFsbCBieXRlcyBhcmUgYXZhaWxhYmxlOyBz
cGxpdCBwb2ludCA9IDUgYXNzZXJ0X2FycmF5X2VxdWFsczogdGhlIHNwbGl0IGNvZGUgcG9pbnQg
c2hvdWxkIGJlIGluIHRoZSBzZWNvbmQgY2h1bmsgb2YgdGhlIG91dHB1dCBsZW5ndGhzIGRpZmZl
ciwgZXhwZWN0ZWQgYXJyYXkgWyJJICIsICLwn5KZIHN0cmVhbXMiXSBsZW5ndGggMiwgZ290IFsi
SSDwn5KZIHN0cmVhbXMiXSBsZW5ndGggMQorUEFTUyBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2Vl
biBjaHVua3Mgc2hvdWxkIG5vdCBiZSBlbWl0dGVkIHVudGlsIGFsbCBieXRlcyBhcmUgYXZhaWxh
YmxlOyBzcGxpdCBwb2ludCA9IDMgCitQQVNTIGEgY29kZSBwb2ludCBzcGxpdCBiZXR3ZWVuIGNo
dW5rcyBzaG91bGQgbm90IGJlIGVtaXR0ZWQgdW50aWwgYWxsIGJ5dGVzIGFyZSBhdmFpbGFibGU7
IHNwbGl0IHBvaW50ID0gNCAKK1BBU1MgYSBjb2RlIHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtz
IHNob3VsZCBub3QgYmUgZW1pdHRlZCB1bnRpbCBhbGwgYnl0ZXMgYXJlIGF2YWlsYWJsZTsgc3Bs
aXQgcG9pbnQgPSA1IAogUEFTUyBhIGNvZGUgcG9pbnQgc2hvdWxkIGJlIGVtaXR0ZWQgYXMgc29v
biBhcyBhbGwgYnl0ZXMgYXJlIGF2YWlsYWJsZSAKIFBBU1MgYW4gZW1wdHkgY2h1bmsgaW5zaWRl
IGEgY29kZSBwb2ludCBzcGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQgbm90IGNoYW5nZSB0aGUg
b3V0cHV0OyBzcGxpdCBwb2ludCA9IDEgCiBQQVNTIGFuIGVtcHR5IGNodW5rIGluc2lkZSBhIGNv
ZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG91dHB1
dDsgc3BsaXQgcG9pbnQgPSAyIAotRkFJTCBhbiBlbXB0eSBjaHVuayBpbnNpZGUgYSBjb2RlIHBv
aW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBub3QgY2hhbmdlIHRoZSBvdXRwdXQ7IHNw
bGl0IHBvaW50ID0gMyBhc3NlcnRfZXF1YWxzOiB0d28gY2h1bmtzIHNob3VsZCBiZSBvdXRwdXQg
ZXhwZWN0ZWQgMiBidXQgZ290IDEKLUZBSUwgYW4gZW1wdHkgY2h1bmsgaW5zaWRlIGEgY29kZSBw
b2ludCBzcGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQgbm90IGNoYW5nZSB0aGUgb3V0cHV0OyBz
cGxpdCBwb2ludCA9IDQgYXNzZXJ0X2VxdWFsczogdHdvIGNodW5rcyBzaG91bGQgYmUgb3V0cHV0
IGV4cGVjdGVkIDIgYnV0IGdvdCAxCi1GQUlMIGFuIGVtcHR5IGNodW5rIGluc2lkZSBhIGNvZGUg
cG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG91dHB1dDsg
c3BsaXQgcG9pbnQgPSA1IGFzc2VydF9lcXVhbHM6IHR3byBjaHVua3Mgc2hvdWxkIGJlIG91dHB1
dCBleHBlY3RlZCAyIGJ1dCBnb3QgMQorUEFTUyBhbiBlbXB0eSBjaHVuayBpbnNpZGUgYSBjb2Rl
IHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBub3QgY2hhbmdlIHRoZSBvdXRwdXQ7
IHNwbGl0IHBvaW50ID0gMyAKK1BBU1MgYW4gZW1wdHkgY2h1bmsgaW5zaWRlIGEgY29kZSBwb2lu
dCBzcGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQgbm90IGNoYW5nZSB0aGUgb3V0cHV0OyBzcGxp
dCBwb2ludCA9IDQgCitQQVNTIGFuIGVtcHR5IGNodW5rIGluc2lkZSBhIGNvZGUgcG9pbnQgc3Bs
aXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG91dHB1dDsgc3BsaXQgcG9p
bnQgPSA1IAogUEFTUyBhbiBlbXB0eSBjaHVuayBpbnNpZGUgYSBjb2RlIHBvaW50IHNwbGl0IGJl
dHdlZW4gY2h1bmtzIHNob3VsZCBub3QgY2hhbmdlIHRoZSBvdXRwdXQ7IHNwbGl0IHBvaW50ID0g
NiAKIApJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9l
bmNvZGluZy9zdHJlYW1zL2RlY29kZS1zcGxpdC1jaGFyYWN0ZXIuYW55Lndvcmtlci1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9lbmNvZGluZy9zdHJlYW1zL2RlY29kZS1zcGxpdC1jaGFyYWN0ZXIuYW55Lndvcmtl
ci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI2NjY1MCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2Rpbmcvc3RyZWFtcy9kZWNvZGUtc3BsaXQtY2hh
cmFjdGVyLmFueS53b3JrZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzICsx
LDEzIEBACiAKIFBBU1MgYSBjb2RlIHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBu
b3QgYmUgZW1pdHRlZCB1bnRpbCBhbGwgYnl0ZXMgYXJlIGF2YWlsYWJsZTsgc3BsaXQgcG9pbnQg
PSAyIAotRkFJTCBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxkIG5vdCBi
ZSBlbWl0dGVkIHVudGlsIGFsbCBieXRlcyBhcmUgYXZhaWxhYmxlOyBzcGxpdCBwb2ludCA9IDMg
YXNzZXJ0X2FycmF5X2VxdWFsczogdGhlIHNwbGl0IGNvZGUgcG9pbnQgc2hvdWxkIGJlIGluIHRo
ZSBzZWNvbmQgY2h1bmsgb2YgdGhlIG91dHB1dCBsZW5ndGhzIGRpZmZlciwgZXhwZWN0ZWQgYXJy
YXkgWyJJICIsICLwn5KZIHN0cmVhbXMiXSBsZW5ndGggMiwgZ290IFsiSSDwn5KZIHN0cmVhbXMi
XSBsZW5ndGggMQotRkFJTCBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxk
IG5vdCBiZSBlbWl0dGVkIHVudGlsIGFsbCBieXRlcyBhcmUgYXZhaWxhYmxlOyBzcGxpdCBwb2lu
dCA9IDQgYXNzZXJ0X2FycmF5X2VxdWFsczogdGhlIHNwbGl0IGNvZGUgcG9pbnQgc2hvdWxkIGJl
IGluIHRoZSBzZWNvbmQgY2h1bmsgb2YgdGhlIG91dHB1dCBsZW5ndGhzIGRpZmZlciwgZXhwZWN0
ZWQgYXJyYXkgWyJJICIsICLwn5KZIHN0cmVhbXMiXSBsZW5ndGggMiwgZ290IFsiSSDwn5KZIHN0
cmVhbXMiXSBsZW5ndGggMQotRkFJTCBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mg
c2hvdWxkIG5vdCBiZSBlbWl0dGVkIHVudGlsIGFsbCBieXRlcyBhcmUgYXZhaWxhYmxlOyBzcGxp
dCBwb2ludCA9IDUgYXNzZXJ0X2FycmF5X2VxdWFsczogdGhlIHNwbGl0IGNvZGUgcG9pbnQgc2hv
dWxkIGJlIGluIHRoZSBzZWNvbmQgY2h1bmsgb2YgdGhlIG91dHB1dCBsZW5ndGhzIGRpZmZlciwg
ZXhwZWN0ZWQgYXJyYXkgWyJJICIsICLwn5KZIHN0cmVhbXMiXSBsZW5ndGggMiwgZ290IFsiSSDw
n5KZIHN0cmVhbXMiXSBsZW5ndGggMQorUEFTUyBhIGNvZGUgcG9pbnQgc3BsaXQgYmV0d2VlbiBj
aHVua3Mgc2hvdWxkIG5vdCBiZSBlbWl0dGVkIHVudGlsIGFsbCBieXRlcyBhcmUgYXZhaWxhYmxl
OyBzcGxpdCBwb2ludCA9IDMgCitQQVNTIGEgY29kZSBwb2ludCBzcGxpdCBiZXR3ZWVuIGNodW5r
cyBzaG91bGQgbm90IGJlIGVtaXR0ZWQgdW50aWwgYWxsIGJ5dGVzIGFyZSBhdmFpbGFibGU7IHNw
bGl0IHBvaW50ID0gNCAKK1BBU1MgYSBjb2RlIHBvaW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNo
b3VsZCBub3QgYmUgZW1pdHRlZCB1bnRpbCBhbGwgYnl0ZXMgYXJlIGF2YWlsYWJsZTsgc3BsaXQg
cG9pbnQgPSA1IAogUEFTUyBhIGNvZGUgcG9pbnQgc2hvdWxkIGJlIGVtaXR0ZWQgYXMgc29vbiBh
cyBhbGwgYnl0ZXMgYXJlIGF2YWlsYWJsZSAKIFBBU1MgYW4gZW1wdHkgY2h1bmsgaW5zaWRlIGEg
Y29kZSBwb2ludCBzcGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQgbm90IGNoYW5nZSB0aGUgb3V0
cHV0OyBzcGxpdCBwb2ludCA9IDEgCiBQQVNTIGFuIGVtcHR5IGNodW5rIGluc2lkZSBhIGNvZGUg
cG9pbnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG91dHB1dDsg
c3BsaXQgcG9pbnQgPSAyIAotRkFJTCBhbiBlbXB0eSBjaHVuayBpbnNpZGUgYSBjb2RlIHBvaW50
IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBub3QgY2hhbmdlIHRoZSBvdXRwdXQ7IHNwbGl0
IHBvaW50ID0gMyBhc3NlcnRfZXF1YWxzOiB0d28gY2h1bmtzIHNob3VsZCBiZSBvdXRwdXQgZXhw
ZWN0ZWQgMiBidXQgZ290IDEKLUZBSUwgYW4gZW1wdHkgY2h1bmsgaW5zaWRlIGEgY29kZSBwb2lu
dCBzcGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQgbm90IGNoYW5nZSB0aGUgb3V0cHV0OyBzcGxp
dCBwb2ludCA9IDQgYXNzZXJ0X2VxdWFsczogdHdvIGNodW5rcyBzaG91bGQgYmUgb3V0cHV0IGV4
cGVjdGVkIDIgYnV0IGdvdCAxCi1GQUlMIGFuIGVtcHR5IGNodW5rIGluc2lkZSBhIGNvZGUgcG9p
bnQgc3BsaXQgYmV0d2VlbiBjaHVua3Mgc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG91dHB1dDsgc3Bs
aXQgcG9pbnQgPSA1IGFzc2VydF9lcXVhbHM6IHR3byBjaHVua3Mgc2hvdWxkIGJlIG91dHB1dCBl
eHBlY3RlZCAyIGJ1dCBnb3QgMQorUEFTUyBhbiBlbXB0eSBjaHVuayBpbnNpZGUgYSBjb2RlIHBv
aW50IHNwbGl0IGJldHdlZW4gY2h1bmtzIHNob3VsZCBub3QgY2hhbmdlIHRoZSBvdXRwdXQ7IHNw
bGl0IHBvaW50ID0gMyAKK1BBU1MgYW4gZW1wdHkgY2h1bmsgaW5zaWRlIGEgY29kZSBwb2ludCBz
cGxpdCBiZXR3ZWVuIGNodW5rcyBzaG91bGQgbm90IGNoYW5nZSB0aGUgb3V0cHV0OyBzcGxpdCBw
b2ludCA9IDQgCitQQVNTIGFuIGVtcHR5IGNodW5rIGluc2lkZSBhIGNvZGUgcG9pbnQgc3BsaXQg
YmV0d2VlbiBjaHVua3Mgc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG91dHB1dDsgc3BsaXQgcG9pbnQg
PSA1IAogUEFTUyBhbiBlbXB0eSBjaHVuayBpbnNpZGUgYSBjb2RlIHBvaW50IHNwbGl0IGJldHdl
ZW4gY2h1bmtzIHNob3VsZCBub3QgY2hhbmdlIHRoZSBvdXRwdXQ7IHNwbGl0IHBvaW50ID0gNiAK
IApJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNv
ZGluZy9zdHJlYW1zL3JlYWxtcy53aW5kb3ctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZW5jb2Rpbmcvc3RyZWFt
cy9yZWFsbXMud2luZG93LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjY2NjUwKQorKysgTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy9zdHJlYW1zL3Jl
YWxtcy53aW5kb3ctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw2IEBA
IFBBU1MgVGV4dERlY29kZXJTdHJlYW0ncyByZWFkYWJsZSBhbmQgd3IKIFBBU1MgdGhlIHJlc3Vs
dCBvYmplY3Qgd2hlbiByZWFkIGlzIGNhbGxlZCBhZnRlciB3cml0ZSBzaG91bGQgY29tZSBmcm9t
IHRoZSBzYW1lIHJlYWxtIGFzIHRoZSBjb25zdHJ1Y3RvciBvZiBUZXh0RGVjb2RlclN0cmVhbSAK
IFBBU1MgdGhlIHJlc3VsdCBvYmplY3Qgd2hlbiB3cml0ZSBpcyBjYWxsZWQgd2l0aCBhIHBlbmRp
bmcgcmVhZCBzaG91bGQgY29tZSBmcm9tIHRoZSBzYW1lIHJlYWxtIGFzIHRoZSBjb25zdHJ1Y3Rv
ciBvZiBUZXh0RGVjb2RlclN0cmVhbSAKIFBBU1MgVHlwZUVycm9yIGZvciBjaHVuayB3aXRoIHRo
ZSB3cm9uZyB0eXBlIHNob3VsZCBjb21lIGZyb20gY29uc3RydWN0b3IgcmVhbG0gb2YgVGV4dERl
Y29kZXJTdHJlYW0gCi1GQUlMIFR5cGVFcnJvciBmb3IgaW52YWxpZCBjaHVuayBzaG91bGQgY29t
ZSBmcm9tIGNvbnN0cnVjdG9yIHJlYWxtIG9mIFRleHREZWNvZGVyU3RyZWFtIGFzc2VydF91bnJl
YWNoZWQ6IFNob3VsZCBoYXZlIHJlamVjdGVkOiB3cml0ZSBUeXBlRXJyb3Igc2hvdWxkIGNvbWUg
ZnJvbSBjb25zdHJ1Y3RvciByZWFsbSBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKK1BBU1MgVHlw
ZUVycm9yIGZvciBpbnZhbGlkIGNodW5rIHNob3VsZCBjb21lIGZyb20gY29uc3RydWN0b3IgcmVh
bG0gb2YgVGV4dERlY29kZXJTdHJlYW0gCiBQQVNTIFR5cGVFcnJvciBmb3IgaW5jb21wbGV0ZSBp
bnB1dCBzaG91bGQgY29tZSBmcm9tIGNvbnN0cnVjdG9yIHJlYWxtIG9mIFRleHREZWNvZGVyU3Ry
ZWFtIAogCg==
</data>
<flag name="review"
          id="423446"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>