<?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>139630</bug_id>
          
          <creation_ts>2014-12-14 17:24:36 -0800</creation_ts>
          <short_desc>PutLocalSinkingPhase has an invalid assertion about incoming values, because both liveness and deferral analyses are conservative</short_desc>
          <delta_ts>2014-12-15 11:22:56 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1055514</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-12-14 17:24:36 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055515</commentid>
    <comment_count>1</comment_count>
      <attachid>243274</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-12-14 17:28:48 -0800</bug_when>
    <thetext>Created attachment 243274
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055516</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-12-14 17:29:15 -0800</bug_when>
    <thetext>Whoa I&apos;m pretty sure that the patch is invalid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055517</commentid>
    <comment_count>3</comment_count>
      <attachid>243275</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-12-14 17:29:39 -0800</bug_when>
    <thetext>Created attachment 243275
the patch

That&apos;s better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055541</commentid>
    <comment_count>4</comment_count>
      <attachid>243275</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-14 19:48:49 -0800</bug_when>
    <thetext>Comment on attachment 243275
the patch

Clearing flags on attachment: 243275

Committed r177270: &lt;http://trac.webkit.org/changeset/177270&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055542</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-14 19:48:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055675</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-12-15 11:22:35 -0800</bug_when>
    <thetext>&lt;rdar://problem/19245579&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243274</attachid>
            <date>2014-12-14 17:28:48 -0800</date>
            <delta_ts>2014-12-14 17:29:39 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>75630</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMDQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBA
CisyMDE0LTA4LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBjb21wdXRlIGltbWVkaWF0ZSBkb21pbmF0b3JzIHVzaW5nIHRoZSBPKG4gbG9n
IG4pIGZvcm0gb2YgTGVuZ2F1ZXIgYW5kIFRhcmphbidzICJBIEZhc3QgQWxnb3JpdGhtIGZvciBG
aW5kaW5nIERvbWluYXRvcnMgaW4gYSBGbG93Z3JhcGgiCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzM2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgc29t
ZSBuZXcgdXRpbGl0aWVzIGZvciByZWFzb25pbmcgYWJvdXQgYmxvY2sta2V5ZWQgbWFwcywgYmxv
Y2sgc2V0cywKKyAgICAgICAgYW5kIGJsb2NrIHdvcmtsaXN0cy4gSXQgY2hhbmdlcyBwcmVleGlz
dGluZyBjb2RlIHRvIHVzZSB0aGVzZSBhYnN0cmFjdGlvbnMuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBkZmcvREZHQW5hbHlzaXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpB
bmFseXNpczo6Y29tcHV0ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpBbmFseXNp
czo6Y29tcHV0ZURlcGVuZGVuY2llcyk6CisgICAgICAgICogZGZnL0RGR0Jsb2NrTWFwLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrTWFwOjpCbG9ja01hcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QmxvY2tNYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrTWFwOjph
dEluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja01hcDo6b3BlcmF0b3JbXSk6CisgICAg
ICAgICogZGZnL0RGR0Jsb2NrTWFwSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpCbG9ja01hcDxUPjo6QmxvY2tNYXApOgorICAgICAgICAqIGRmZy9ERkdCbG9ja1NldC5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1NldDo6QmxvY2tTZXQpOgorICAgICAgICAo
SlNDOjpERkc6OkJsb2NrU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrU2V0Ojpj
b250YWlucyk6CisgICAgICAgICogZGZnL0RGR0Jsb2NrV29ya2xpc3QuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpCbG9ja1dvcmtsaXN0OjpCbG9ja1dvcmtsaXN0KToKKyAgICAgICAg
KEpTQzo6REZHOjpCbG9ja1dvcmtsaXN0Ojp+QmxvY2tXb3JrbGlzdCk6CisgICAgICAgIChKU0M6
OkRGRzo6QmxvY2tXb3JrbGlzdDo6cHVzaCk6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tXb3Jr
bGlzdDo6cG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OjpQ
b3N0T3JkZXJCbG9ja1dvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQb3N0T3JkZXJCbG9j
a1dvcmtsaXN0Ojp+UG9zdE9yZGVyQmxvY2tXb3JrbGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6
UG9zdE9yZGVyQmxvY2tXb3JrbGlzdDo6cHVzaFByZSk6CisgICAgICAgIChKU0M6OkRGRzo6UG9z
dE9yZGVyQmxvY2tXb3JrbGlzdDo6cHVzaFBvc3QpOgorICAgICAgICAoSlNDOjpERkc6OlBvc3RP
cmRlckJsb2NrV29ya2xpc3Q6OnBvcCk6CisgICAgICAgICogZGZnL0RGR0Jsb2NrV29ya2xpc3Qu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tXb3JrbGlzdDo6bm90RW1wdHkpOgor
ICAgICAgICAoSlNDOjpERkc6OkJsb2NrV2l0aDo6QmxvY2tXaXRoKToKKyAgICAgICAgKEpTQzo6
REZHOjpCbG9ja1dpdGg6Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKToKKyAgICAgICAg
KEpTQzo6REZHOjpFeHRlbmRlZEJsb2NrV29ya2xpc3Q6OkV4dGVuZGVkQmxvY2tXb3JrbGlzdCk6
CisgICAgICAgIChKU0M6OkRGRzo6RXh0ZW5kZWRCbG9ja1dvcmtsaXN0Ojpmb3JjZVB1c2gpOgor
ICAgICAgICAoSlNDOjpERkc6OkV4dGVuZGVkQmxvY2tXb3JrbGlzdDo6cHVzaCk6CisgICAgICAg
IChKU0M6OkRGRzo6RXh0ZW5kZWRCbG9ja1dvcmtsaXN0Ojpub3RFbXB0eSk6CisgICAgICAgIChK
U0M6OkRGRzo6RXh0ZW5kZWRCbG9ja1dvcmtsaXN0Ojpwb3ApOgorICAgICAgICAoSlNDOjpERkc6
OkJsb2NrV2l0aE9yZGVyOjpCbG9ja1dpdGhPcmRlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qmxv
Y2tXaXRoT3JkZXI6Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OjpwdXNoKToKKyAgICAgICAgKEpTQzo6REZH
OjpQb3N0T3JkZXJCbG9ja1dvcmtsaXN0Ojpub3RFbXB0eSk6CisgICAgICAgICogZGZnL0RGR0NT
RVBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHRG9taW5hdG9ycy5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6RG9taW5hdG9yczo6Y29tcHV0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5h
dG9yczo6bmFpdmVEb21pbmF0ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmR1
bXApOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OnBydW5lRG9taW5hdG9ycyk6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR0RvbWluYXRvcnMuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpEb21pbmF0b3JzOjpzdHJpY3RseURvbWluYXRlcyk6CisgICAgICAgIChKU0M6OkRGRzo6RG9t
aW5hdG9yczo6ZG9taW5hdGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpCbG9j
a0RhdGE6OkJsb2NrRGF0YSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6Z2V0QmxvY2tzSW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Omdl
dEJsb2Nrc0luUG9zdE9yZGVyKToKKyAgICAgICAgKiBkZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJ
bmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SW52YWxpZGF0aW9uUG9pbnRJ
bmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHTmFpdmVEb21pbmF0b3JzLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmFpdmVEb21pbmF0b3JzOjpOYWl2ZURvbWlu
YXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6Ok5haXZlRG9taW5hdG9yczo6fk5haXZlRG9taW5h
dG9ycyk6CisgICAgICAgIChKU0M6OkRGRzo6TmFpdmVEb21pbmF0b3JzOjpjb21wdXRlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOYWl2ZURvbWluYXRvcnM6OnBydW5lRG9taW5hdG9ycyk6CisgICAg
ICAgIChKU0M6OkRGRzo6TmFpdmVEb21pbmF0b3JzOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZH
TmFpdmVEb21pbmF0b3JzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5haXZlRG9taW5h
dG9yczo6ZG9taW5hdGVzKToKKyAgICAgICAgKiBkZmcvREZHTmF0dXJhbExvb3BzLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcHM6OmNvbXB1dGVEZXBlbmRlbmNpZXMpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6Y29tcHV0ZSk6CisgICAgICAgICogZGZnL0RG
R05hdHVyYWxMb29wcy5oOgorCiAyMDE0LTA4LTI3ICBBa29zIEtpc3MgIDxha2lzc0BpbmYudS1z
emVnZWQuaHU+CiAKICAgICAgICAgRW5zdXJlIHRoYXQgdGhlIGNhbGwgZnJhbWUgcGFzc2VkIGZy
b20gSklUIGNvZGUgdmlhIEpTQzo6b3BlcmF0aW9uQ2FsbEV2YWwgdG8gSlNDOjpldmFsIGFsd2F5
cyBjb250YWlucyB0aGUgdmFsaWQgc2NvcGUgY2hhaW4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdCYXNpY0Jsb2NrLmNwcAogICAgIGRm
Zy9ERkdCaW5hcnlTd2l0Y2guY3BwCiAgICAgZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAor
ICAgIGRmZy9ERkdCbG9ja1dvcmtsaXN0LmNwcAogICAgIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKICAgICBkZmcvREZHQ0ZBUGhhc2UuY3BwCiAgICAgZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCkBAIC0xNzUsNiArMTc2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMK
ICAgICBkZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR01h
eUV4aXQuY3BwCiAgICAgZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAKKyAgICBkZmcvREZHTmFpdmVE
b21pbmF0b3JzLmNwcAogICAgIGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCiAgICAgZGZnL0RGR05v
ZGUuY3BwCiAgICAgZGZnL0RGR05vZGVGbGFncy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzcyLDYgKzM3Miw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQmFzaWNCbG9jay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQmluYXJ5U3dpdGNoLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCbG9ja0luc2VydGlvblNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQmxvY2tXb3JrbGlzdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQnl0ZUNvZGVQYXJzZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR0NhcGFiaWxpdGllcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQ0ZBUGhhc2UuY3BwIiAvPgpAQCAtNDIxLDYgKzQyMiw3IEBACiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heUV4aXQuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5jcHAiIC8+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTmFpdmVEb21pbmF0b3JzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVGbGFncy5jcHAiIC8+CkBAIC05OTMsNiArOTk1LDEw
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9ja0lubGluZXMu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9ja0luc2VydGlvblNldC5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrTWFwLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmxvY2tNYXBJbmxpbmVzLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmxvY2tXb3JrbGlzdC5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrU2V0LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQnJhbmNoRGlyZWN0aW9uLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQnl0ZUNvZGVQYXJzZXIuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRv
ci5oIiAvPgpAQCAtMTA1Niw2ICsxMDYyLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdNaW5pZmllZEdyYXBoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHTWluaWZpZWRJRC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R01pbmlmaWVkTm9kZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05h
aXZlRG9taW5hdG9ycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05h
dHVyYWxMb29wcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlQWxsb2NhdG9yLmgi
IC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTcyOTQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5OCw2ICs0OTgsMTMgQEAKIAkJMEZDMzE0MTIx
ODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzMTQxMDE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0
ZXJTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzMxNDExMTgxNDU1OTEw
MDAzMzIzMiAvKiBUZW1wUmVnaXN0ZXJTZXQuY3BwICovOyB9OwogCQkwRkMzMTQxNTE4MTQ2RDcw
MDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDMzE0MTQxODE0NkQ3MDAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0
LmNwcCAqLzsgfTsKKwkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGNTE5
QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3MkEgLyogREZH
QmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkMzQ0NGNjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDM0ND
RkUxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGNzE5QURBNDEwMDA2QUM3MkEgLyogREZH
QmxvY2tTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkMzQ0NGRjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGODE5QURB
NDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAgKi87IH07CisJCTBGQzNDRDAwMTlB
REE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGOTE5QURBNDEwMDA2QUM3MkEgLyogREZH
QmxvY2tXb3JrbGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGQzNDRDAxMTlBREE0MTEwMDZBQzcyQSAvKiBERkdOYWl2ZURvbWluYXRvcnMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDM0ND
RkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgKi87IH07CisJCTBG
QzNDRDAyMTlBREE0MTEwMDZBQzcyQSAvKiBERkdOYWl2ZURvbWluYXRvcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0ZCMTlBREE0MTAwMDZB
QzcyQSAvKiBERkdOYWl2ZURvbWluYXRvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwICovOyB9OwogCQkwRkM3MTJERjE3Q0Q4NzdDMDA4Q0M5M0MgLyog
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJERDE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZDNzEyRTIxN0NEODc5MTAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzcxMkUwMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CkBAIC0yNDIxLDYgKzI0MjgsMTMgQEAK
IAkJMEZDMzE0MTAxODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQzMxNDExMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1wUmVnaXN0ZXJTZXQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcFJlZ2lzdGVyU2V0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMzE0MTQxODE0NkQ3MDAwMDMzMjMy
IC8qIFJlZ2lzdGVyU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlZ2lzdGVyU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDM0NDRjUx
OUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0Jsb2NrTWFwLmg7IHBhdGggPSBkZmcvREZHQmxvY2tNYXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDM0NDRjYxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Js
b2NrTWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCbG9j
a01hcElubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdCbG9ja01hcElubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDM0NDRjcxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrU2V0Lmg7IHBh
dGggPSBkZmcvREZHQmxvY2tTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZD
M0NDRjgxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmxvY2tXb3JrbGlzdC5jcHA7IHBhdGggPSBk
ZmcvREZHQmxvY2tXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
QzNDQ0Y5MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrV29ya2xpc3QuaDsgcGF0aCA9IGRmZy9ERkdC
bG9ja1dvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzNDQ0ZBMTlB
REE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURvbWluYXRvcnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHTmFpdmVEb21pbmF0b3JzLmNwcDsgcGF0aCA9IGRmZy9E
RkdOYWl2ZURvbWluYXRvcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMz
Q0NGQjE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05haXZlRG9taW5hdG9ycy5oOyBwYXRoID0gZGZnL0RG
R05haXZlRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM3MTJE
QzE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzcxMkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzcxMkUwMTdDRDg3
OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODE5LDYgKzQ4MzMsMTEgQEAKIAkJCQlB
NzBCMDgzMTE3QTBCNzlCMDBEQUYxNEIgLyogREZHQmluYXJ5U3dpdGNoLmggKi8sCiAJCQkJQTdE
ODlDRTQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLywKIAkJ
CQlBN0Q4OUNFNTE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywK
KwkJCQkwRkMzQ0NGNTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCAqLywKKwkJCQkw
RkMzQ0NGNjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggKi8sCisJCQkJ
MEZDM0NDRjcxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrU2V0LmggKi8sCisJCQkJMEZDM0ND
RjgxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwICovLAorCQkJCTBGQzND
Q0Y5MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggKi8sCiAJCQkJMEY4MzY0
QjUxNjRCMEMwRTAwNTMzMjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oICovLAogCQkJCTg2RUM5
REI0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZF
QzlEQjUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC00OTMw
LDYgKzQ5NDksOCBAQAogCQkJCTBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmll
ZElELmggKi8sCiAJCQkJMEYyQkRDNEMxNTIyODE4MzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9k
ZS5jcHAgKi8sCiAJCQkJMEYyQkRDM0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9k
ZS5oICovLAorCQkJCTBGQzNDQ0ZBMTlBREE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURvbWluYXRv
cnMuY3BwICovLAorCQkJCTBGQzNDQ0ZCMTlBREE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURvbWlu
YXRvcnMuaCAqLywKIAkJCQlBNzM3ODEwQTE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExv
b3BzLmNwcCAqLywKIAkJCQlBNzM3ODEwQjE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExv
b3BzLmggKi8sCiAJCQkJMEZCNEI1MUUxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR05vZGUuY3BwICov
LApAQCAtNTg0Miw2ICs1ODYzLDcgQEAKIAkJCQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyog
Q29waWVkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkVBQTNGQTE0OUE4MzVF
MDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDJEMTRB
M0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNUE1MkQwMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyMjM5RDE4MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNp
dG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC01OTE3LDYgKzU5MzksNyBAQAogCQkJCUE3
QkZGM0MwMTc5ODY4OTQwMDAyRjQ2MiAvKiBERkdGaWx0cmF0aW9uUmVzdWx0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzhBOTc3NzE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Js
b2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyog
REZHRmx1c2hlZEF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNB
RDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERG
ODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzE3
LDYgKzYzNDAsNyBAQAogCQkJCTBGNDMxNzM4MTQ2QkFDNjkwMDdFMzg5MCAvKiBMaXN0YWJsZUhh
bmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTJFQTZCMEZCNDYwQ0YwMDYwMUYwNiAvKiBM
aXRlcmFsUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODEx
NTQgLyogTExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQzNDRDAwMTlB
REE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NjgwQ0ExNEJCQjE2QzAwQkZFMjcyIC8qIExMSW50Q29tbW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjQ2ODBEMzE0QkJEMTY3MDBCRkUyNzIgLyogTExJbnREYXRhLmggaW4gSGVhZGVy
cyAqLywKQEAgLTYzMjksNiArNjM1Myw3IEBACiAJCQkJMEYwMTIzMzMxOTQ0RUExQjAwODQzQTBD
IC8qIERGR1ZhbHVlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUNFMTgwNUU3
NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFDRjE4MDVF
NzU1MDA0NzJDRTQgLyogTExWTUFQSUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZD
M0NDRkUxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDJFMzEzOTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWwuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjM3NCw2ICs2Mzk5LDcgQEAKIAkJCQk3RUZGMDA2NDBFQzA1QTlBMDBB
QTdDOTMgLyogTm9kZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNGMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBOb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjgxOEExQjI1OTAw
MjZEODhGIC8qIE5vbmRldGVybWluaXN0aWNJbnB1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZD
M0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0NDEwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVyZU5hTi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDIwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlckNv
bnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC03Mjk3LDYgKzczMjMsNyBAQAogCQkJ
CUE3RDg5Q0ZGMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkEwNUFCRDUxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMyMENCOTE4NTU2QTM1MDBD
OUU5NTQgLyogREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkMz
Q0QwMTE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTczNTcsNiArNzM4NCw3IEBACiAJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQw
IC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI1RjFB
RjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRUEwQTI4MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzNDQ0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBERkdC
bG9ja1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBEMTcwNTEzREIwMEJC
NzIyQyAvKiBGVExKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEE5NzgwMTc5NzM4
RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2
QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FuYWx5c2lzLmgJKHJldmlzaW9uIDE3Mjk0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAobV92YWxp
ZCkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gSXQncyBiZXN0IHRvIHJ1biBkZXBl
bmRlbnQgYW5hbHlzZXMgZnJvbSB0aGlzIG1ldGhvZC4KKyAgICAgICAgc3RhdGljX2Nhc3Q8VCo+
KHRoaXMpLT5jb21wdXRlRGVwZW5kZW5jaWVzKGdyYXBoKTsKICAgICAgICAgLy8gU2V0IHRvIHRy
dWUgZWFybHksIHNpbmNlIHRoZSBhbmFseXNpcyBtYXkgY2hvb3NlIHRvIGNhbGwgaXRzIG93biBt
ZXRob2RzIGluCiAgICAgICAgIC8vIGNvbXB1dGUoKSBhbmQgaXQgbWF5IHdhbnQgdG8gQVNTRVJU
KCkgdmFsaWRpdHkgaW4gdGhvc2UgbWV0aG9kcy4KICAgICAgICAgbV92YWxpZCA9IHRydWU7CkBA
IC02MSw2ICs2MywxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gbV92YWxpZDsgfQogCisgICAgLy8gT3ZlcnJpZGUgdGhpcyB0byBjb21wdXRlIGFu
eSBkZXBlbmRlbnQgYW5hbHlzZXMuIFNlZQorICAgIC8vIE5hdHVyYWxMb29wczo6Y29tcHV0ZURl
cGVuZGVuY2llcyhHcmFwaCYpIGZvciBhbiBleGFtcGxlLiBUaGlzIGlzbid0IHN0cmljdGx5IG5l
Y2Vzc2FyeSBidXQKKyAgICAvLyBpdCBtYWtlcyBkZWJ1ZyBkdW1wcyBpbiBjYXNlcyBvZiBlcnJv
ciB3b3JrIGEgYml0IGJldHRlciBiZWNhdXNlIHRoaXMgYW5hbHlzaXMgd291bGRuJ3QgeWV0Cisg
ICAgLy8gYmUgcHJldGVuZGluZyB0byBiZSB2YWxpZC4KKyAgICB2b2lkIGNvbXB1dGVEZXBlbmRl
bmNpZXMoR3JhcGgmKSB7IH0KKwogcHJpdmF0ZToKICAgICBib29sIG1fdmFsaWQ7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja01hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXAuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHQmxvY2tNYXBfaAorI2RlZmluZSBERkdCbG9ja01hcF9oCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK2NsYXNzIEJsb2NrTWFwIHsKK3B1YmxpYzoKKyAgICBCbG9ja01hcCgpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBCbG9ja01hcChHcmFwaCYpOworICAgIAorICAgIEJsb2NrSW5k
ZXggc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOwor
ICAgIH0KKyAgICAKKyAgICBUJiBhdEluZGV4KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9ja0luZGV4XTsKKyAgICB9CisgICAgCisgICAg
Y29uc3QgVCYgYXRJbmRleChCbG9ja0luZGV4IGJsb2NrSW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV92ZWN0b3JbYmxvY2tJbmRleF07CisgICAgfQorICAgIAorICAgIFQmIG9w
ZXJhdG9yW10oQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
dmVjdG9yW2Jsb2NrSW5kZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBvcGVyYXRvcltd
KEJsb2NrSW5kZXggYmxvY2tJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zl
Y3RvcltibG9ja0luZGV4XTsKKyAgICB9CisgICAgCisgICAgVCYgb3BlcmF0b3JbXShCYXNpY0Js
b2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9jay0+aW5kZXhd
OworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKEJhc2ljQmxvY2sqIGJsb2Nr
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrLT5pbmRleF07Cisg
ICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxUPiBtX3ZlY3RvcjsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHQmxvY2tNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrTWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmxvY2tNYXBJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jsb2NrTWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdCbG9ja01hcElubGluZXNfaAorI2RlZmluZSBERkdCbG9ja01hcElubGluZXNfaAorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCbG9ja01hcC5oIgorI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK0Jsb2NrTWFwPFQ+OjpCbG9ja01hcChHcmFwaCYgZ3JhcGgpCit7Cisg
ICAgbV92ZWN0b3IucmVzaXplKGdyYXBoLm51bUJsb2NrcygpKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdCbG9ja01hcElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
bG9ja1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxv
Y2tTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxv
Y2tTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQmxvY2tTZXRfaAorI2Rl
ZmluZSBERkdCbG9ja1NldF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBCbG9ja1NldCB7CitwdWJsaWM6CisgICAgQmxvY2tTZXQoKSB7IH0KKyAgICAKKyAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGUgYmxvY2sgd2FzIGFkZGVkLCBmYWxzZSBpZiBpdCB3YXMgYWxyZWFk
eSBwcmVzZW50LgorICAgIGJvb2wgYWRkKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFtX3NldC5zZXQoYmxvY2stPmluZGV4KTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBjb250YWlucyhCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX3NldC5n
ZXQoYmxvY2stPmluZGV4KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEJpdFZlY3RvciBt
X3NldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrV29ya2xpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrV29y
a2xpc3QuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9j
ay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Jsb2NrV29ya2xpc3Q6
OkJsb2NrV29ya2xpc3QoKQoreworfQorCitCbG9ja1dvcmtsaXN0Ojp+QmxvY2tXb3JrbGlzdCgp
Cit7Cit9CisKK2Jvb2wgQmxvY2tXb3JrbGlzdDo6cHVzaChCYXNpY0Jsb2NrKiBibG9jaykKK3sK
KyAgICBpZiAoIW1fc2Vlbi5hZGQoYmxvY2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgbV9zdGFjay5hcHBlbmQoYmxvY2spOworICAgIHJldHVybiB0cnVlOworfQorCitCYXNp
Y0Jsb2NrKiBCbG9ja1dvcmtsaXN0Ojpwb3AoKQoreworICAgIGlmIChtX3N0YWNrLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJuIG1fc3RhY2sudGFr
ZUxhc3QoKTsKK30KKworUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDo6UG9zdE9yZGVyQmxvY2tXb3Jr
bGlzdCgpCit7Cit9CisKK1Bvc3RPcmRlckJsb2NrV29ya2xpc3Q6On5Qb3N0T3JkZXJCbG9ja1dv
cmtsaXN0KCkKK3sKK30KKworYm9vbCBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OjpwdXNoUHJlKEJh
c2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBtX3dvcmtsaXN0LnB1c2goYmxvY2ssIFBy
ZU9yZGVyKTsKK30KKwordm9pZCBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OjpwdXNoUG9zdChCYXNp
Y0Jsb2NrKiBibG9jaykKK3sKKyAgICBtX3dvcmtsaXN0LmZvcmNlUHVzaChibG9jaywgUG9zdE9y
ZGVyKTsKK30KKworQmxvY2tXaXRoT3JkZXIgUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDo6cG9wKCkK
K3sKKyAgICBCbG9ja1dpdGg8VmlzaXRPcmRlcj4gcmVzdWx0ID0gbV93b3JrbGlzdC5wb3AoKTsK
KyAgICByZXR1cm4gQmxvY2tXaXRoT3JkZXIocmVzdWx0LmJsb2NrLCByZXN1bHQuZGF0YSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1dvcmtsaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1dvcmtsaXN0LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrV29ya2xp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrV29ya2xpc3RfaAor
I2RlZmluZSBERkdCbG9ja1dvcmtsaXN0X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrU2V0LmgiCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0
cnVjdCBCYXNpY0Jsb2NrOworCitjbGFzcyBCbG9ja1dvcmtsaXN0IHsKK3B1YmxpYzoKKyAgICBC
bG9ja1dvcmtsaXN0KCk7CisgICAgfkJsb2NrV29ya2xpc3QoKTsKKyAgICAKKyAgICBib29sIHB1
c2goQmFzaWNCbG9jayopOyAvLyBSZXR1cm5zIHRydWUgaWYgd2UgZGlkbid0IGtub3cgYWJvdXQg
dGhlIGJsb2NrIGJlZm9yZS4KKyAgICAKKyAgICBib29sIG5vdEVtcHR5KCkgY29uc3QgeyByZXR1
cm4gIW1fc3RhY2suaXNFbXB0eSgpOyB9CisgICAgQmFzaWNCbG9jayogcG9wKCk7CisgICAgCitw
cml2YXRlOgorICAgIEJsb2NrU2V0IG1fc2VlbjsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2
PiBtX3N0YWNrOworfTsKKworLy8gV2hlbiB5b3Ugc2F5IEJsb2NrV2l0aDxpbnQ+IHlvdSBzaG91
bGQgcmVhZCBpdCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3N0cnVjdCBCbG9ja1dpdGggeworICAgIEJsb2NrV2l0aCgpCisgICAgICAgIDogYmxvY2sobnVs
bHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIEJsb2NrV2l0aChCYXNpY0Jsb2NrKiBibG9j
aywgY29uc3QgVCYgZGF0YSkKKyAgICAgICAgOiBibG9jayhibG9jaykKKyAgICAgICAgLCBkYXRh
KGRhdGEpCisgICAgeworICAgIH0KKyAgICAKKyAgICB0eXBlZGVmIHZvaWQqIChCbG9ja1dpdGg8
VD46OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xU
eXBlKigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYmxvY2sgPyByZWludGVycHJldF9j
YXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IG51bGxwdHI7CisgICAgfQorCisgICAgQmFz
aWNCbG9jayogYmxvY2s7CisgICAgVCBkYXRhOworfTsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29y
a2xpc3QgaXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGgg
dGhlIGJsb2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdz
IGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9y
CisvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2Ug
VCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRl
eC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBFeHRlbmRlZEJsb2NrV29ya2xpc3Qgewor
cHVibGljOgorICAgIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCgpIHsgfQorICAgIAorICAgIHZvaWQg
Zm9yY2VQdXNoKGNvbnN0IEJsb2NrV2l0aDxUPiYgZW50cnkpCisgICAgeworICAgICAgICBtX3N0
YWNrLmFwcGVuZChlbnRyeSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm9yY2VQdXNoKEJhc2lj
QmxvY2sqIGJsb2NrLCBjb25zdCBUJiBkYXRhKQorICAgIHsKKyAgICAgICAgZm9yY2VQdXNoKEJs
b2NrV2l0aDxUPihibG9jaywgZGF0YSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHB1c2goY29u
c3QgQmxvY2tXaXRoPFQ+JiBlbnRyeSkKKyAgICB7CisgICAgICAgIGlmICghbV9zZWVuLmFkZChl
bnRyeS5ibG9jaykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBmb3JjZVB1c2goZW50cnkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBwdXNoKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBUJiBkYXRhKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHB1c2goQmxvY2tXaXRoPFQ+KGJsb2NrLCBkYXRhKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgbm90RW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9zdGFjay5pc0VtcHR5KCk7
IH0KKyAgICAKKyAgICBCbG9ja1dpdGg8VD4gcG9wKCkKKyAgICB7CisgICAgICAgIGlmIChtX3N0
YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBCbG9ja1dpdGg8VD4oKTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEJsb2NrU2V0IG1fc2VlbjsKKyAgICBWZWN0b3I8QmxvY2tXaXRoPFQ+PiBtX3N0YWNr
OworfTsKKworZW51bSBWaXNpdE9yZGVyIHsKKyAgICBQcmVPcmRlciwKKyAgICBQb3N0T3JkZXIK
K307CisKK3N0cnVjdCBCbG9ja1dpdGhPcmRlciB7CisgICAgQmxvY2tXaXRoT3JkZXIoKQorICAg
ICAgICA6IGJsb2NrKG51bGxwdHIpCisgICAgICAgICwgb3JkZXIoUHJlT3JkZXIpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBCbG9ja1dpdGhPcmRlcihCYXNpY0Jsb2NrKiBibG9jaywgVmlzaXRP
cmRlciBvcmRlcikKKyAgICAgICAgOiBibG9jayhibG9jaykKKyAgICAgICAgLCBvcmRlcihvcmRl
cikKKyAgICB7CisgICAgfQorICAgIAorICAgIHR5cGVkZWYgdm9pZCogKEJsb2NrV2l0aE9yZGVy
OjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJsb2NrID8gcmVpbnRlcnByZXRfY2Fz
dDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiBudWxscHRyOworICAgIH0KKworICAgIEJhc2lj
QmxvY2sqIGJsb2NrOworICAgIFZpc2l0T3JkZXIgb3JkZXI7Cit9OworCisvLyBCbG9jayB3b3Jr
bGlzdCBzdWl0YWJsZSBmb3IgcG9zdC1vcmRlciB0cmF2ZXJzYWwuCitjbGFzcyBQb3N0T3JkZXJC
bG9ja1dvcmtsaXN0IHsKK3B1YmxpYzoKKyAgICBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0KCk7Cisg
ICAgflBvc3RPcmRlckJsb2NrV29ya2xpc3QoKTsKKyAgICAKKyAgICBib29sIHB1c2hQcmUoQmFz
aWNCbG9jayopOworICAgIHZvaWQgcHVzaFBvc3QoQmFzaWNCbG9jayopOworICAgIAorICAgIGJv
b2wgcHVzaChCYXNpY0Jsb2NrKiBibG9jaywgVmlzaXRPcmRlciBvcmRlciA9IFByZU9yZGVyKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChvcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVyOgor
ICAgICAgICAgICAgcmV0dXJuIHB1c2hQcmUoYmxvY2spOworICAgICAgICBjYXNlIFBvc3RPcmRl
cjoKKyAgICAgICAgICAgIHB1c2hQb3N0KGJsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgYm9vbCBwdXNoKGNvbnN0IEJsb2NrV2l0aE9y
ZGVyJiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHB1c2goZGF0YS5ibG9jaywgZGF0YS5v
cmRlcik7CisgICAgfQorICAgIAorICAgIGJvb2wgbm90RW1wdHkoKSBjb25zdCB7IHJldHVybiBt
X3dvcmtsaXN0Lm5vdEVtcHR5KCk7IH0KKyAgICBCbG9ja1dpdGhPcmRlciBwb3AoKTsKKworcHJp
dmF0ZToKKyAgICBFeHRlbmRlZEJsb2NrV29ya2xpc3Q8VmlzaXRPcmRlcj4gbV93b3JrbGlzdDsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tXb3JrbGlzdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQWJzdHJh
Y3RIZWFwLmgiCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZH
Q2xvYmJlclNldC5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKICNpbmNsdWRlICJERkdF
ZGdlVXNlc1N0cnVjdHVyZS5oIgpAQCAtMzY0LDYgKzM2NSw3IEBAIGNsYXNzIEdsb2JhbENTRVBo
YXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKICAgICBHbG9iYWxDU0VQaGFzZShHcmFwaCYg
Z3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJnbG9iYWwgY29tbW9uIHN1YmV4cHJlc3Np
b24gZWxpbWluYXRpb24iKQorICAgICAgICAsIG1faW1wdXJlRGF0YU1hcChncmFwaCkKICAgICB7
CiAgICAgfQogICAgIApAQCAtMzc3LDEzICszNzksMTEgQEAgcHVibGljOgogICAgICAgICAKICAg
ICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKG1fcHJlT3JkZXIpOwogICAgICAgICAK
LSAgICAgICAgbV9pbXB1cmVEYXRhTWFwLnJlc2l6ZShtX2dyYXBoLm51bUJsb2NrcygpKTsKLSAg
ICAgICAgCiAgICAgICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hhdCBnZXRzIGNsb2JiZXJlZCBi
eSBibG9ja3MuIE5vZGUgdGhhdCB0aGlzIHVzZXMgdGhlIHByZU9yZGVyIGxpc3QKICAgICAgICAg
Ly8gZm9yIGNvbnZlbmllbmNlIG9ubHkuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcHJl
T3JkZXIuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gbV9wcmVPcmRlcltp
XTsKLSAgICAgICAgICAgIG1faW1wdXJlRGF0YSA9ICZtX2ltcHVyZURhdGFNYXBbbV9ibG9jay0+
aW5kZXhdOworICAgICAgICAgICAgbV9pbXB1cmVEYXRhID0gJm1faW1wdXJlRGF0YU1hcFttX2Js
b2NrXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gbV9ibG9jay0+c2l6
ZSgpOyBub2RlSW5kZXgtLTspCiAgICAgICAgICAgICAgICAgYWRkV3JpdGVzKG1fZ3JhcGgsIG1f
YmxvY2stPmF0KG5vZGVJbmRleCksIG1faW1wdXJlRGF0YS0+d3JpdGVzKTsKICAgICAgICAgfQpA
QCAtNDA3LDcgKzQwNyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fcHVyZVZhbHVlcy5j
bGVhcigpOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbXB1cmVEYXRh
TWFwLnNpemUoKTsgaS0tOykgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggaSA9IG1faW1wdXJl
RGF0YU1hcC5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIG1faW1wdXJlRGF0YU1hcFtpXS5h
dmFpbGFibGVBdFRhaWwuY2xlYXIoKTsKICAgICAgICAgICAgIG1faW1wdXJlRGF0YU1hcFtpXS5k
aWRWaXNpdCA9IGZhbHNlOwogICAgICAgICB9CkBAIC00MjMsNyArNDIzLDcgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlT3JkZXIuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBtX3ByZU9yZGVyW2ldOwotICAgICAg
ICAgICAgbV9pbXB1cmVEYXRhID0gJm1faW1wdXJlRGF0YU1hcFttX2Jsb2NrLT5pbmRleF07Cisg
ICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFwW21fYmxvY2tdOwogICAg
ICAgICAgICAgbV93cml0ZXNTb0Zhci5jbGVhcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKQEAgLTU2MiwxMiArNTYyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
ICAgU2VhcmNoaW5nIGluIGJsb2NrICIsICpibG9jaywgIlxuIik7Ci0gICAgICAgICAgICBJbXB1
cmVCbG9ja0RhdGEmIGRhdGEgPSBtX2ltcHVyZURhdGFNYXBbYmxvY2stPmluZGV4XTsKKyAgICAg
ICAgICAgIEltcHVyZUJsb2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlRGF0YU1hcFtibG9ja107CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFdlIHJlcXVpcmUgc3RyaWN0IGRvbWluYXRpb24g
YmVjYXVzZSB0aGlzIHdvdWxkIG9ubHkgc2VlIHRoaW5ncyBpbiBvdXIgb3duIGJsb2NrIGlmCiAg
ICAgICAgICAgICAvLyB0aGV5IGNhbWUgKmFmdGVyKiBvdXIgcG9zaXRpb24gaW4gdGhlIGJsb2Nr
LiBDbGVhcmx5LCB3aGlsZSBvdXIgYmxvY2sgZG9taW5hdGVzCiAgICAgICAgICAgICAvLyBpdHNl
bGYsIHRoZSB0aGluZ3MgaW4gdGhlIGJsb2NrIGFmdGVyIHVzIGRvbid0IGRvbWluYXRlIHVzLgot
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhibG9jaywgbV9i
bG9jaykgJiYgYmxvY2sgIT0gbV9ibG9jaykgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9k
b21pbmF0b3JzLnN0cmljdGx5RG9taW5hdGVzKGJsb2NrLCBtX2Jsb2NrKSkgewogICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAg
IEl0IHN0cmljdGx5IGRvbWluYXRlcy5cbiIpOwogICAgICAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbV9ub2RlLCBkYXRhLmRpZFZpc2l0KTsKQEAgLTYxMiw3ICs2MTIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIHRoZSByZWR1Y3Rpb24gaW4gY29tcGlsZSB0aW1lIHdvdWxkIHdhcnJh
bnQgdGhlIGluY3JlYXNlIGluIGNvbXBsZXhpdHksIHRob3VnaC4KICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDg3NgogICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogc2Vlbkxpc3QpCi0gICAgICAgICAgICBtX2ltcHVyZURhdGFNYXBb
YmxvY2stPmluZGV4XS5hdmFpbGFibGVBdFRhaWwuYWRkKGxvY2F0aW9uLCBtYXRjaCk7CisgICAg
ICAgICAgICBtX2ltcHVyZURhdGFNYXBbYmxvY2tdLmF2YWlsYWJsZUF0VGFpbC5hZGQobG9jYXRp
b24sIG1hdGNoKTsKICAgICAgICAgbV9pbXB1cmVEYXRhLT5hdmFpbGFibGVBdFRhaWwuYWRkKGxv
Y2F0aW9uLCBtYXRjaCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbWF0Y2g7CkBAIC02NTQs
NyArNjU0LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gbV9wcmVPcmRlcjsK
IAogICAgIFB1cmVNdWx0aU1hcCBtX3B1cmVWYWx1ZXM7Ci0gICAgVmVjdG9yPEltcHVyZUJsb2Nr
RGF0YT4gbV9pbXB1cmVEYXRhTWFwOworICAgIEJsb2NrTWFwPEltcHVyZUJsb2NrRGF0YT4gbV9p
bXB1cmVEYXRhTWFwOwogICAgIAogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgTm9kZSog
bV9ub2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMu
Y3BwCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
bWluYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKKyNpbmNsdWRlICJE
RkdCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdO
YWl2ZURvbWluYXRvcnMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQxLDkxICs0NCwzODggQEAgRG9taW5hdG9yczo6fkRv
bWluYXRvcnMoKQogewogfQogCi12b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBo
KQotewotICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIG5haXZlIGRvbWluYXRvciBzb2x2ZXIuCitu
YW1lc3BhY2UgeworCisvLyBUaGlzIGltcGxlbWVudHMgTGVuZ2F1ZXIgYW5kIFRhcmphbidzICJB
IEZhc3QgQWxnb3JpdGhtIGZvciBGaW5kaW5nIERvbWluYXRvcnMgaW4gYSBGbG93Z3JhcGgiCisv
LyAoVE9QTEFTIDE5NzkpLiBJdCB1c2VzIHRoZSAic2ltcGxlIiBpbXBsZW1lbnRhdGlvbiBvZiBM
SU5LIGFuZCBFVkFMLiBUaGUgZnVsbCBwYXBlciBpcyBsaW5rZWQKKy8vIGJlbG93OyB0aGlzIGNv
ZGUgYXR0ZW1wdHMgdG8gY2xvc2VseSBmb2xsb3cgdGhlIGFsZ29yaXRobSBhcyBpdCBpcyBwcmVz
ZW50ZWQgaW4gdGhlIHBhcGVyOyBpbgorLy8gcGFydGljdWxhciBzZWN0aW9ucyAzIGFuZCA0IGFz
IHdlbGwgYXMgYXBwZW5kaXggQi4KKy8vIGh0dHBzOi8vd3d3LmNzLnByaW5jZXRvbi5lZHUvY291
cnNlcy9hcmNoaXZlL2ZhbGwwMy9jczUyOC9oYW5kb3V0cy9hJTIwZmFzdCUyMGFsZ29yaXRobSUy
MGZvciUyMGZpbmRpbmcucGRmCisvLworLy8gVGhpcyBjb2RlIGlzIHZlcnkgc3VidGxlLiBUaGUg
TGVuZ2F1ZXItVGFyamFuIGFsZ29yaXRobSBpcyBpbmNyZWRpYmx5IGRlZXAgdG8gYmVnaW4gd2l0
aC4gVGhlCisvLyBnb2FsIG9mIHRoaXMgY29kZSBpcyB0byBmb2xsb3cgdGhlIGNvZGUgaW4gdGhl
IHBhcGVyLCBob3dldmVyIG91ciBpbXBsZW1lbnRhdGlvbiBtdXN0IGRldmlhdGUKKy8vIGZyb20g
dGhlIHBhcGVyIHdoZW4gaXQgY29tZXMgdG8gcmVjdXJzaW9uLiBUaGUgYXV0aG9ycyBoYWQgdXNl
ZCByZWN1cnNpb24gdG8gaW1wbGVtZW50IERGUywgYW5kCisvLyBhbHNvIHRvIGltcGxlbWVudCB0
aGUgInNpbXBsZSIgRVZBTC4gV2UgY29udmVydCBib3RoIG9mIHRob3NlIGludG8gd29ya2xpc3Qt
YmFzZWQgc29sdXRpb25zLgorLy8gRmluYWxseSwgb25jZSB0aGUgYWxnb3JpdGhtIGdpdmVzIHVz
IGltbWVkaWF0ZSBkb21pbmF0b3JzLCB3ZSBpbXBsZW1lbnQgZG9taW5hbmNlIHRlc3RzIGJ5Cisv
LyB3YWxraW5nIHRoZSBkb21pbmF0b3IgdHJlZSBhbmQgY29tcHV0aW5nIHByZSBhbmQgcG9zdCBu
dW1iZXJzLiBXZSB0aGVuIHVzZSB0aGUgcmFuZ2UgaW5jbHVzaW9uCisvLyBjaGVjayB0cmljayB0
aGF0IHdhcyBmaXJzdCBkaXNjb3ZlcmVkIGJ5IFBhdWwgRi4gRGlldHogaW4gMTk4MiBpbiAiTWFp
bnRhaW5pbmcgb3JkZXIgaW4gYSBsaW5rZWQKKy8vIGxpc3QiIChzZWUgaHR0cDovL2RsLmFjbS5v
cmcvY2l0YXRpb24uY2ZtP2lkPTgwMjE4NCkuCisKK2NsYXNzIExlbmdhdWVyVGFyamFuIHsKK3B1
YmxpYzoKKyAgICBMZW5nYXVlclRhcmphbihHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogbV9ncmFw
aChncmFwaCkKKyAgICAgICAgLCBtX2RhdGEoZ3JhcGgpCisgICAgeworICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBtX2RhdGFbYmxvY2tdLmxhYmVsID0gYmxvY2s7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21wdXRlKCkKKyAgICB7CisgICAgICAgIGNvbXB1dGVEZXB0
aEZpcnN0UHJlTnVtYmVyaW5nKCk7IC8vIFN0ZXAgMS4KKyAgICAgICAgY29tcHV0ZVNlbWlEb21p
bmF0b3JzQW5kSW1wbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCk7IC8vIFN0ZXBzIDIgYW5kIDMu
CisgICAgICAgIGNvbXB1dGVFeHBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKTsgLy8gU3RlcCA0
LgorICAgIH0KKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBpbW1lZGlhdGVEb21pbmF0b3IoQmFzaWNC
bG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5kb207Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY29tcHV0ZURlcHRoRmlyc3RQcmVOdW1iZXJpbmco
KQorICAgIHsKKyAgICAgICAgLy8gVXNlIGEgYmxvY2sgd29ya2xpc3QgdGhhdCBhbHNvIHRyYWNr
cyB0aGUgaW5kZXggaW5zaWRlIHRoZSBzdWNjZXNzb3IgbGlzdC4gVGhpcyBpcworICAgICAgICAv
LyBuZWNlc3NhcnkgZm9yIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3QgYXR0ZW1wdCB0byB2aXNpdCBh
IHN1Y2Nlc3NvciB1bnRpbCB0aGUgcHJldmlvdXMKKyAgICAgICAgLy8gc3VjY2Vzc29ycyB0aGF0
IHdlIGhhZCB2aXNpdGVkIGFyZSBmdWxseSBwcm9jZXNzZWQuIFRoaXMgZW5kcyB1cCBiZWluZyBy
ZXZlYWxlZCBpbiB0aGUKKyAgICAgICAgLy8gb3V0cHV0IG9mIHRoaXMgbWV0aG9kIGJlY2F1c2Ug
dGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGFuIGVkZ2UgdG8gYSBibG9jaywgd2Ugc2V0IHRoZQorICAg
ICAgICAvLyBibG9jaydzIHBhcmVudC4gU28sIGlmIHdlIGhhdmU6CisgICAgICAgIC8vCisgICAg
ICAgIC8vIEEgLT4gQgorICAgICAgICAvLyBBIC0+IEMKKyAgICAgICAgLy8gQiAtPiBDCisgICAg
ICAgIC8vCisgICAgICAgIC8vIEFuZCB3ZSdyZSBwcm9jZXNzaW5nIEEsIHRoZW4gd2Ugd2FudCB0
byBlbnN1cmUgdGhhdCBpZiB3ZSBzZWUgQS0+QiBmaXJzdCAoYW5kIGhlbmNlIHNldAorICAgICAg
ICAvLyBCJ3MgcHJlbnVtYmVyIGJlZm9yZSB3ZSBzZXQgQydzKSB0aGVuIHdlIGFsc28gZW5kIHVw
IHNldHRpbmcgQydzIHBhcmVudCB0byBCIGJ5IHZpcnR1ZQorICAgICAgICAvLyBvZiBub3Qgbm90
aWNpbmcgQS0+QyB1bnRpbCB3ZSdyZSBkb25lIHByb2Nlc3NpbmcgQi4KKyAgICAgICAgCisgICAg
ICAgIEV4dGVuZGVkQmxvY2tXb3JrbGlzdDx1bnNpZ25lZD4gd29ya2xpc3Q7CisgICAgICAgIHdv
cmtsaXN0LnB1c2gobV9ncmFwaC5ibG9jaygwKSwgMCk7CisgICAgICAgIAorICAgICAgICB3aGls
ZSAoQmxvY2tXaXRoPHVuc2lnbmVkPiBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gaXRlbS5ibG9jazsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHN1Y2Nlc3NvckluZGV4ID0gaXRlbS5kYXRhOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBXZSdyZSBpbml0aWFsbHkgcHVzaCB3aXRoIHN1Y2Nlc3NvckluZGV4ID0gMCByZWdhcmRsZXNz
IG9mIHdoZXRoZXIgb3Igbm90IHdlIGhhdmUKKyAgICAgICAgICAgIC8vIGFueSBzdWNjZXNzb3Jz
LiBUaGlzIGlzIHNvIHRoYXQgd2UgY2FuIGFzc2lnbiBvdXIgcHJlbnVtYmVyLiBTdWJzZXF1ZW50
bHkgd2UgZ2V0CisgICAgICAgICAgICAvLyBwdXNoZWQgd2l0aCBoaWdoZXIgc3VjY2Vzc29ySW5k
ZXggdmFsdWVzLCBidXQgb25seSBpZiB0aGV5IGFyZSBpbiByYW5nZS4KKyAgICAgICAgICAgIEFT
U0VSVCghc3VjY2Vzc29ySW5kZXggfHwgc3VjY2Vzc29ySW5kZXggPCBibG9jay0+bnVtU3VjY2Vz
c29ycygpKTsKKworICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JJbmRleCkgeworICAgICAgICAg
ICAgICAgIG1fZGF0YVtibG9ja10uc2VtaU51bWJlciA9IG1fYmxvY2tCeVByZU51bWJlci5zaXpl
KCk7CisgICAgICAgICAgICAgICAgbV9ibG9ja0J5UHJlTnVtYmVyLmFwcGVuZChibG9jayk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdWNjZXNzb3JJbmRl
eCA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
ZXh0U3VjY2Vzc29ySW5kZXggPSBzdWNjZXNzb3JJbmRleCArIDE7CisgICAgICAgICAgICAgICAg
aWYgKG5leHRTdWNjZXNzb3JJbmRleCA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCkpCisgICAgICAg
ICAgICAgICAgICAgIHdvcmtsaXN0LmZvcmNlUHVzaChibG9jaywgbmV4dFN1Y2Nlc3NvckluZGV4
KTsKKworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrID0gYmxvY2st
PnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHdvcmtsaXN0
LnB1c2goc3VjY2Vzc29yQmxvY2ssIDApKQorICAgICAgICAgICAgICAgICAgICBtX2RhdGFbc3Vj
Y2Vzc29yQmxvY2tdLnBhcmVudCA9IGJsb2NrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY29tcHV0ZVNlbWlEb21pbmF0b3JzQW5kSW1wbGljaXRJbW1l
ZGlhdGVEb21pbmF0b3JzKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgY3VycmVudFBy
ZU51bWJlciA9IG1fYmxvY2tCeVByZU51bWJlci5zaXplKCk7IGN1cnJlbnRQcmVOdW1iZXItLSA+
IDE7KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tCeVByZU51bWJl
cltjdXJyZW50UHJlTnVtYmVyXTsKKyAgICAgICAgICAgIEJsb2NrRGF0YSYgYmxvY2tEYXRhID0g
bV9kYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU3RlcCAyOgorICAg
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvckJsb2NrIDogYmxvY2stPnByZWRl
Y2Vzc29ycykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGludGVybWVkaWF0ZUJsb2Nr
ID0gZXZhbChwcmVkZWNlc3NvckJsb2NrKTsKKyAgICAgICAgICAgICAgICBibG9ja0RhdGEuc2Vt
aU51bWJlciA9IHN0ZDo6bWluKAorICAgICAgICAgICAgICAgICAgICBtX2RhdGFbaW50ZXJtZWRp
YXRlQmxvY2tdLnNlbWlOdW1iZXIsIGJsb2NrRGF0YS5zZW1pTnVtYmVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHVuc2lnbmVkIGJ1Y2tldFByZU51bWJlciA9IGJsb2NrRGF0YS5zZW1p
TnVtYmVyOworICAgICAgICAgICAgQVNTRVJUKGJ1Y2tldFByZU51bWJlciA8PSBjdXJyZW50UHJl
TnVtYmVyKTsKKyAgICAgICAgICAgIG1fZGF0YVttX2Jsb2NrQnlQcmVOdW1iZXJbYnVja2V0UHJl
TnVtYmVyXV0uYnVja2V0LmFwcGVuZChibG9jayk7CisgICAgICAgICAgICBsaW5rKGJsb2NrRGF0
YS5wYXJlbnQsIGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU3RlcCAzOgor
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzZW1pRG9taW5lZSA6IG1fZGF0YVtibG9ja0Rh
dGEucGFyZW50XS5idWNrZXQpIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwb3NzaWJs
ZURvbWluYXRvciA9IGV2YWwoc2VtaURvbWluZWUpOworICAgICAgICAgICAgICAgIEJsb2NrRGF0
YSYgc2VtaURvbWluZWVEYXRhID0gbV9kYXRhW3NlbWlEb21pbmVlXTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobV9ibG9ja0J5UHJlTnVtYmVyW3NlbWlEb21pbmVlRGF0YS5zZW1pTnVtYmVyXSA9
PSBibG9ja0RhdGEucGFyZW50KTsKKyAgICAgICAgICAgICAgICBCbG9ja0RhdGEmIHBvc3NpYmxl
RG9taW5hdG9yRGF0YSA9IG1fZGF0YVtwb3NzaWJsZURvbWluYXRvcl07CisgICAgICAgICAgICAg
ICAgaWYgKHBvc3NpYmxlRG9taW5hdG9yRGF0YS5zZW1pTnVtYmVyIDwgc2VtaURvbWluZWVEYXRh
LnNlbWlOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHNlbWlEb21pbmVlRGF0YS5kb20gPSBw
b3NzaWJsZURvbWluYXRvcjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHNlbWlEb21pbmVlRGF0YS5kb20gPSBibG9ja0RhdGEucGFyZW50OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9kYXRhW2Jsb2NrRGF0YS5wYXJlbnRdLmJ1Y2tldC5jbGVhcigpOwor
ICAgICAgICB9CisgICAgfQogICAgIAotICAgIEFTU0VSVChncmFwaC5ibG9jaygwKS0+cHJlZGVj
ZXNzb3JzLmlzRW1wdHkoKSk7CisgICAgdm9pZCBjb21wdXRlRXhwbGljaXRJbW1lZGlhdGVEb21p
bmF0b3JzKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgY3VycmVudFByZU51bWJlciA9
IDE7IGN1cnJlbnRQcmVOdW1iZXIgPCBtX2Jsb2NrQnlQcmVOdW1iZXIuc2l6ZSgpOyArK2N1cnJl
bnRQcmVOdW1iZXIpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja0J5
UHJlTnVtYmVyW2N1cnJlbnRQcmVOdW1iZXJdOworICAgICAgICAgICAgQmxvY2tEYXRhJiBibG9j
a0RhdGEgPSBtX2RhdGFbYmxvY2tdOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxv
Y2tEYXRhLmRvbSAhPSBtX2Jsb2NrQnlQcmVOdW1iZXJbYmxvY2tEYXRhLnNlbWlOdW1iZXJdKQor
ICAgICAgICAgICAgICAgIGJsb2NrRGF0YS5kb20gPSBtX2RhdGFbYmxvY2tEYXRhLmRvbV0uZG9t
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgbGluayhCYXNpY0Jsb2NrKiBmcm9t
LCBCYXNpY0Jsb2NrKiB0bykKKyAgICB7CisgICAgICAgIG1fZGF0YVt0b10uYW5jZXN0b3IgPSBm
cm9tOworICAgIH0KKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBldmFsKEJhc2ljQmxvY2sqIGJsb2Nr
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGFbYmxvY2tdLmFuY2VzdG9yKQorICAgICAgICAg
ICAgcmV0dXJuIGJsb2NrOworICAgICAgICAKKyAgICAgICAgY29tcHJlc3MoYmxvY2spOworICAg
ICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5sYWJlbDsKKyAgICB9CisgICAgCisgICAgdm9pZCBj
b21wcmVzcyhCYXNpY0Jsb2NrKiBpbml0aWFsQmxvY2spCisgICAgeworICAgICAgICAvLyBUaGlz
IHdhcyBtZWFudCB0byBiZSBhIHJlY3Vyc2l2ZSBmdW5jdGlvbiwgYnV0IHdlIGRvbid0IGxpa2Ug
cmVjdXJzaW9uIGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAgICAgLy8gd2FudCB0byBibG93IHRoZSBz
dGFjay4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpbGwgY2FsbCBjb21wcmVzcygpIHJlY3Vyc2l2
ZWx5IG9uIHRoZQorICAgICAgICAvLyBhbmNlc3RvciBvZiBhbnl0aGluZyB0aGF0IGhhcyBhbiBh
bmNlc3Rvci4gU28sIHdlIHBvcHVsYXRlIG91ciB3b3JrbGlzdCB3aXRoIHRoZQorICAgICAgICAv
LyByZWN1cnNpdmUgYW5jZXN0b3JzIG9mIGluaXRpYWxCbG9jay4gVGhlbiB3ZSBwcm9jZXNzIHRo
ZSBsaXN0IHN0YXJ0aW5nIGZyb20gdGhlIGJsb2NrCisgICAgICAgIC8vIHRoYXQgaXMgZnVydGhl
c3QgdXAgdGhlIGFuY2VzdG9yIGNoYWluLgorICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayog
YW5jZXN0b3IgPSBtX2RhdGFbaW5pdGlhbEJsb2NrXS5hbmNlc3RvcjsKKyAgICAgICAgQVNTRVJU
KGFuY2VzdG9yKTsKKyAgICAgICAgaWYgKCFtX2RhdGFbYW5jZXN0b3JdLmFuY2VzdG9yKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAx
Nj4gc3RhY2s7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgPSBpbml0aWFsQmxvY2s7
IGJsb2NrOyBibG9jayA9IG1fZGF0YVtibG9ja10uYW5jZXN0b3IpCisgICAgICAgICAgICBzdGFj
ay5hcHBlbmQoYmxvY2spOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0
IGJsb2NrcyB0aGF0IGhhdmUgYW4gYW5jZXN0b3IgdGhhdCBoYXMgYW4gYW5jZXN0b3IuIFRoZSBs
YXN0IHR3bworICAgICAgICAvLyBlbGVtZW50cyBpbiB0aGUgc3RhY2sgd29uJ3Qgc2F0aXNmeSB0
aGlzIHByb3BlcnR5LgorICAgICAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOworICAgICAg
ICBBU1NFUlQoIW1fZGF0YVtzdGFja1tzdGFjay5zaXplKCkgLSAxXV0uYW5jZXN0b3IpOworICAg
ICAgICBBU1NFUlQoIW1fZGF0YVttX2RhdGFbc3RhY2tbc3RhY2suc2l6ZSgpIC0gMl1dLmFuY2Vz
dG9yXS5hbmNlc3Rvcik7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFj
ay5zaXplKCkgLSAyOyBpLS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHN0
YWNrW2ldOworICAgICAgICAgICAgQmFzaWNCbG9jayomIGxhYmVsT2ZCbG9jayA9IG1fZGF0YVti
bG9ja10ubGFiZWw7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiYgYW5jZXN0b3JPZkJsb2NrID0g
bV9kYXRhW2Jsb2NrXS5hbmNlc3RvcjsKKyAgICAgICAgICAgIEFTU0VSVChhbmNlc3Rvck9mQmxv
Y2spOworICAgICAgICAgICAgQVNTRVJUKG1fZGF0YVthbmNlc3Rvck9mQmxvY2tdLmFuY2VzdG9y
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayogbGFiZWxPZkFuY2VzdG9y
T2ZCbG9jayA9IG1fZGF0YVthbmNlc3Rvck9mQmxvY2tdLmxhYmVsOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobV9kYXRhW2xhYmVsT2ZBbmNlc3Rvck9mQmxvY2tdLnNlbWlOdW1iZXIg
PAorICAgICAgICAgICAgICAgIG1fZGF0YVtsYWJlbE9mQmxvY2tdLnNlbWlOdW1iZXIpCisgICAg
ICAgICAgICAgICAgbGFiZWxPZkJsb2NrID0gbGFiZWxPZkFuY2VzdG9yT2ZCbG9jazsKKyAgICAg
ICAgICAgIGFuY2VzdG9yT2ZCbG9jayA9IG1fZGF0YVthbmNlc3Rvck9mQmxvY2tdLmFuY2VzdG9y
OworICAgICAgICB9CisgICAgfQorCisgICAgc3RydWN0IEJsb2NrRGF0YSB7CisgICAgICAgIEJs
b2NrRGF0YSgpCisgICAgICAgICAgICA6IHBhcmVudChudWxscHRyKQorICAgICAgICAgICAgLCBw
cmVOdW1iZXIoVUlOVF9NQVgpCisgICAgICAgICAgICAsIHNlbWlOdW1iZXIoVUlOVF9NQVgpCisg
ICAgICAgICAgICAsIGFuY2VzdG9yKG51bGxwdHIpCisgICAgICAgICAgICAsIGxhYmVsKG51bGxw
dHIpCisgICAgICAgICAgICAsIGRvbShudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHBhcmVudDsKKyAgICAgICAgdW5zaWduZWQgcHJl
TnVtYmVyOworICAgICAgICB1bnNpZ25lZCBzZW1pTnVtYmVyOworICAgICAgICBCYXNpY0Jsb2Nr
KiBhbmNlc3RvcjsKKyAgICAgICAgQmFzaWNCbG9jayogbGFiZWw7CisgICAgICAgIFZlY3RvcjxC
YXNpY0Jsb2NrKj4gYnVja2V0OworICAgICAgICBCYXNpY0Jsb2NrKiBkb207CisgICAgfTsKKyAg
ICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBCbG9ja01hcDxCbG9ja0RhdGE+IG1fZGF0YTsK
KyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IG1fYmxvY2tCeVByZU51bWJlcjsKK307CisKK3N0cnVj
dCBWYWxpZGF0aW9uQ29udGV4dCB7CisgICAgVmFsaWRhdGlvbkNvbnRleHQoR3JhcGgmIGdyYXBo
LCBEb21pbmF0b3JzJiBkb21pbmF0b3JzKQorICAgICAgICA6IGdyYXBoKGdyYXBoKQorICAgICAg
ICAsIGRvbWluYXRvcnMoZG9taW5hdG9ycykKKyAgICB7CisgICAgfQogICAgIAotICAgIHVuc2ln
bmVkIG51bUJsb2NrcyA9IGdyYXBoLm51bUJsb2NrcygpOworICAgIHZvaWQgcmVwb3J0RXJyb3Io
QmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCisg
ICAgeworICAgICAgICBFcnJvciBlcnJvcjsKKyAgICAgICAgZXJyb3IuZnJvbSA9IGZyb207Cisg
ICAgICAgIGVycm9yLnRvID0gdG87CisgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBtZXNzYWdlOwor
ICAgICAgICBlcnJvcnMuYXBwZW5kKGVycm9yKTsKKyAgICB9CiAgICAgCi0gICAgLy8gQWxsb2Nh
dGUgc3RvcmFnZSBmb3IgdGhlIGRlbnNlIGRvbWluYW5jZSBtYXRyaXguIAotICAgIGlmIChudW1C
bG9ja3MgPiBtX3Jlc3VsdHMuc2l6ZSgpKSB7Ci0gICAgICAgIG1fcmVzdWx0cy5ncm93KG51bUJs
b2Nrcyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tOykKLSAgICAg
ICAgICAgIG1fcmVzdWx0c1tpXS5yZXNpemUobnVtQmxvY2tzKTsKLSAgICAgICAgbV9zY3JhdGNo
LnJlc2l6ZShudW1CbG9ja3MpOworICAgIHZvaWQgaGFuZGxlRXJyb3JzKCkKKyAgICB7CisgICAg
ICAgIGlmIChlcnJvcnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgc3RhcnRDcmFzaGluZygpOworICAgICAgICBkYXRhTG9nKCJERkcgRE9NSU5BVE9S
IFZBTElEQVRJT04gRkFJTEVEOlxuIik7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAg
IGRhdGFMb2coIkZvciBibG9jayBkb21pbmF0aW9uIHJlbGF0aW9uc2hpcHM6XG4iKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVycm9ycy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAiICAgICIsIHBvaW50ZXJEdW1wKGVycm9y
c1tpXS5mcm9tKSwgIiAtPiAiLCBwb2ludGVyRHVtcChlcnJvcnNbaV0udG8pLAorICAgICAgICAg
ICAgICAgICIgKCIsIGVycm9yc1tpXS5tZXNzYWdlLCAiKVxuIik7CisgICAgICAgIH0KKyAgICAg
ICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29udHJvbCBmbG93IGdyYXBoOlxu
Iik7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IGdyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZGF0YUxvZygiICAg
IEJsb2NrICMiLCBibG9ja0luZGV4LCAiOiBzdWNjZXNzb3JzID0gWyIpOworICAgICAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsraSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKGNv
bW1hLCAqYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgICAgICAgICBkYXRhTG9nKCJdLCBwcmVk
ZWNlc3NvcnMgPSBbIik7CisgICAgICAgICAgICBjb21tYSA9IENvbW1hUHJpbnRlcigpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgKmJsb2NrLT5wcmVkZWNl
c3NvcnNbaV0pOworICAgICAgICAgICAgZGF0YUxvZygiXVxuIik7CisgICAgICAgIH0KKyAgICAg
ICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiTGVuZ2F1ZXItVGFyamFuIERvbWlu
YXRvcnM6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhkb21pbmF0b3JzKTsKKyAgICAgICAgZGF0YUxv
ZygiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiTmFpdmUgRG9taW5hdG9yczpcbiIpOworICAgICAg
ICBuYWl2ZURvbWluYXRvcnMuZHVtcChncmFwaCwgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAg
ZGF0YUxvZygiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiR3JhcGggYXQgdGltZSBvZiBmYWlsdXJl
OlxuIik7CisgICAgICAgIGdyYXBoLmR1bXAoKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAg
ICAgICAgZGF0YUxvZygiREZHIERPTUlOQVRPUiBWQUxJREFUSU9OIEZBSUxJRUQhXG4iKTsKKyAg
ICAgICAgQ1JBU0goKTsKICAgICB9CisgICAgCisgICAgR3JhcGgmIGdyYXBoOworICAgIERvbWlu
YXRvcnMmIGRvbWluYXRvcnM7CisgICAgTmFpdmVEb21pbmF0b3JzIG5haXZlRG9taW5hdG9yczsK
KyAgICAKKyAgICBzdHJ1Y3QgRXJyb3IgeworICAgICAgICBCYXNpY0Jsb2NrKiBmcm9tOworICAg
ICAgICBCYXNpY0Jsb2NrKiB0bzsKKyAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZTsKKyAgICB9
OworICAgIAorICAgIFZlY3RvcjxFcnJvcj4gZXJyb3JzOworfTsKIAotICAgIC8vIFdlIGtub3cg
dGhhdCB0aGUgZW50cnkgYmxvY2sgaXMgb25seSBkb21pbmF0ZWQgYnkgaXRzZWxmLgotICAgIG1f
cmVzdWx0c1swXS5jbGVhckFsbCgpOwotICAgIG1fcmVzdWx0c1swXS5zZXQoMCk7Cit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKIAotICAgIC8vIEZpbmQgYWxsIG9mIHRoZSB2YWxpZCBibG9ja3Mu
Ci0gICAgbV9zY3JhdGNoLmNsZWFyQWxsKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxv
Y2tzOyBpLS07KSB7Ci0gICAgICAgIGlmICghZ3JhcGguYmxvY2soaSkpCit2b2lkIERvbWluYXRv
cnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQoreworICAgIExlbmdhdWVyVGFyamFuIGxlbmdhdWVy
VGFyamFuKGdyYXBoKTsKKyAgICBsZW5nYXVlclRhcmphbi5jb21wdXRlKCk7CisKKyAgICBtX2Rh
dGEgPSBCbG9ja01hcDxCbG9ja0RhdGE+KGdyYXBoKTsKKyAgICAKKyAgICAvLyBGcm9tIGhlcmUg
d2Ugd2FudCB0byBidWlsZCBhIHNwYW5uaW5nIHRyZWUgd2l0aCBib3RoIHVwd2FyZCBhbmQgZG93
bndhcmQgbGlua3MgYW5kIHdlIHdhbnQKKyAgICAvLyB0byBkbyBhIHNlYXJjaCBvdmVyIHRoaXMg
dHJlZSB0byBjb21wdXRlIHByZSBhbmQgcG9zdCBudW1iZXJzIHRoYXQgY2FuIGJlIHVzZWQgZm9y
IGRvbWluYW5jZQorICAgIC8vIHRlc3RzLgorICAgIAorICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFi
bG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX3NjcmF0Y2guc2V0KGkpOwor
ICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogaWRvbUJsb2NrID0gbGVuZ2F1ZXJUYXJqYW4u
aW1tZWRpYXRlRG9taW5hdG9yKGJsb2NrKTsKKyAgICAgICAgbV9kYXRhW2Jsb2NrXS5pZG9tUGFy
ZW50ID0gaWRvbUJsb2NrOworICAgICAgICBpZiAoaWRvbUJsb2NrKQorICAgICAgICAgICAgbV9k
YXRhW2lkb21CbG9ja10uaWRvbUtpZHMuYXBwZW5kKGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAg
Ly8gTWFyayBhbGwgbm9kZXMgYXMgZG9taW5hdGVkIGJ5IGV2ZXJ5dGhpbmcuCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS0gPiAxOykgewotICAgICAgICBpZiAoIWdyYXBoLmJs
b2NrKGkpIHx8IGdyYXBoLmJsb2NrKGkpLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgbV9yZXN1bHRzW2ldLmNsZWFyQWxsKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fcmVzdWx0c1tpXS5zZXQobV9zY3JhdGNoKTsKLSAgICB9Ci0KLSAgICAvLyBJdGVyYXRpdmVs
eSBlbGltaW5hdGUgbm9kZXMgdGhhdCBhcmUgbm90IGRvbWluYXRvci4KLSAgICBib29sIGNoYW5n
ZWQ7Ci0gICAgZG8gewotICAgICAgICBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIC8vIFBydW5l
IGRvbWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBibG9ja3M6IGZvcndhcmQgc2Nhbi4KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bUJsb2NrczsgKytpKQotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgsIGkpOwotCi0gICAgICAgIGlmICghY2hh
bmdlZCkKKyAgICB1bnNpZ25lZCBuZXh0UHJlTnVtYmVyID0gMDsKKyAgICB1bnNpZ25lZCBuZXh0
UG9zdE51bWJlciA9IDA7CisgICAgCisgICAgLy8gUGxhaW4gc3RhY2stYmFzZWQgd29ya2xpc3Qg
YmVjYXVzZSB3ZSBhcmUgZ3VhcmFudGVlZCB0byBzZWUgZWFjaCBibG9jayBleGFjdGx5IG9uY2Ug
YW55d2F5LgorICAgIFZlY3RvcjxCbG9ja1dpdGhPcmRlcj4gd29ya2xpc3Q7CisgICAgd29ya2xp
c3QuYXBwZW5kKEJsb2NrV2l0aE9yZGVyKGdyYXBoLmJsb2NrKDApLCBQcmVPcmRlcikpOworICAg
IHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJsb2NrV2l0aE9yZGVyIGl0
ZW0gPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIpIHsK
KyAgICAgICAgY2FzZSBQcmVPcmRlcjoKKyAgICAgICAgICAgIG1fZGF0YVtpdGVtLmJsb2NrXS5w
cmVOdW1iZXIgPSBuZXh0UHJlTnVtYmVyKys7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQo
QmxvY2tXaXRoT3JkZXIoaXRlbS5ibG9jaywgUG9zdE9yZGVyKSk7CisgICAgICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGtpZCA6IG1fZGF0YVtpdGVtLmJsb2NrXS5pZG9tS2lkcykKKyAgICAgICAg
ICAgICAgICB3b3JrbGlzdC5hcHBlbmQoQmxvY2tXaXRoT3JkZXIoa2lkLCBQcmVPcmRlcikpOwog
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gUHJ1bmUgZG9taW5hdG9ycyBpbiBhbGwg
bm9uIGVudHJ5IGJsb2NrczogYmFja3dhcmQgc2Nhbi4KLSAgICAgICAgY2hhbmdlZCA9IGZhbHNl
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KQotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgsIGkpOwotICAgIH0gd2hpbGUg
KGNoYW5nZWQpOworICAgICAgICBjYXNlIFBvc3RPcmRlcjoKKyAgICAgICAgICAgIG1fZGF0YVtp
dGVtLmJsb2NrXS5wb3N0TnVtYmVyID0gbmV4dFBvc3ROdW1iZXIrKzsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgp
KSB7CisgICAgICAgIC8vIENoZWNrIG91ciBkb21pbmF0b3IgY2FsY3VsYXRpb246CisgICAgICAg
IC8vIDEpIENoZWNrIHRoYXQgb3VyIHJhbmdlLWJhc2VkIGFuY2VzdHJ5IHRlc3QgaXMgdGhlIHNh
bWUgYXMgYSBuYWl2ZSBhbmNlc3RyeSB0ZXN0LgorICAgICAgICAvLyAyKSBDaGVjayB0aGF0IG91
ciBub3Rpb24gb2Ygd2hvIGRvbWluYXRlcyB3aG9tIGlzIGlkZW50aWNhbCB0byBhIG5haXZlIChu
b3QKKyAgICAgICAgLy8gICAgTGVuZ2F1ZXItVGFyamFuKSBkb21pbmF0b3IgY2FsY3VsYXRpb24u
CisgICAgICAgIAorICAgICAgICBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KGdyYXBoLCAqdGhp
cyk7CisgICAgICAgIGNvbnRleHQubmFpdmVEb21pbmF0b3JzLmNvbXB1dGUoZ3JhcGgpOworICAg
ICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGZyb21CbG9ja0luZGV4ID0gZ3JhcGgubnVt
QmxvY2tzKCk7IGZyb21CbG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBm
cm9tQmxvY2sgPSBncmFwaC5ibG9jayhmcm9tQmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAo
IWZyb21CbG9jayB8fCBtX2RhdGFbZnJvbUJsb2NrXS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggdG9C
bG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IHRvQmxvY2tJbmRleC0tOykgeworICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHRvQmxvY2sgPSBncmFwaC5ibG9jayh0b0Jsb2NrSW5kZXgp
OworICAgICAgICAgICAgICAgIGlmICghdG9CbG9jayB8fCBtX2RhdGFbdG9CbG9ja10ucHJlTnVt
YmVyID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZG9taW5hdGVzKGZyb21CbG9jaywgdG9CbG9j
aykgIT0gbmFpdmVEb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihmcm9tQmxvY2ssIHRvQmxvY2ssICJSYW5nZS1iYXNl
ZCBkb21pbmF0aW9uIGNoZWNrIGlzIGJyb2tlbiIpOworICAgICAgICAgICAgICAgIGlmIChkb21p
bmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSAhPSBjb250ZXh0Lm5haXZlRG9taW5hdG9ycy5kb21p
bmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnRFcnJvcihmcm9tQmxvY2ssIHRvQmxvY2ssICJMZW5nYXVlci1UYXJqYW4gZG9taW5hdGlv
biBpcyBicm9rZW4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgY29udGV4dC5oYW5kbGVFcnJvcnMoKTsKKyAgICB9CiB9CiAKLWJvb2wgRG9taW5hdG9yczo6
cHJ1bmVEb21pbmF0b3JzKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpZHgpCitib29sIERvbWlu
YXRvcnM6Om5haXZlRG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBj
b25zdAogewotICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soaWR4KTsKLQotICAg
IGlmICghYmxvY2sgfHwgYmxvY2stPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIEZpbmQgdGhlIGludGVyc2VjdGlvbiBvZiBkb20ocHJlZHMp
LgotICAgIG1fc2NyYXRjaC5zZXQobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbMF0tPmlu
ZGV4XSk7Ci0gICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7
IGotLSA+IDE7KQotICAgICAgICBtX3NjcmF0Y2guZmlsdGVyKG1fcmVzdWx0c1tibG9jay0+cHJl
ZGVjZXNzb3JzW2pdLT5pbmRleF0pOwotCi0gICAgLy8gVGhlIGJsb2NrIGlzIGFsc28gZG9taW5h
dGVkIGJ5IGl0c2VsZi4KLSAgICBtX3NjcmF0Y2guc2V0KGlkeCk7Ci0KLSAgICByZXR1cm4gbV9y
ZXN1bHRzW2lkeF0uc2V0QW5kQ2hlY2sobV9zY3JhdGNoKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrID0gdG87IGJsb2NrOyBibG9jayA9IG1fZGF0YVtibG9ja10uaWRvbVBhcmVudCkgewor
ICAgICAgICBpZiAoYmxvY2sgPT0gZnJvbSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRG9taW5hdG9yczo6ZHVtcChHcmFwaCYg
Z3JhcGgsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit2b2lkIERvbWluYXRvcnM6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Ci0gICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAg
IGlmICghYmxvY2spCisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIg
ICAgTm90IFZhbGlkLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9kYXRhLnNpemUoKTsg
KytibG9ja0luZGV4KSB7CisgICAgICAgIGlmIChtX2RhdGFbYmxvY2tJbmRleF0ucHJlTnVtYmVy
ID09IFVJTlRfTUFYKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG91dC5wcmludCgi
ICAgIEJsb2NrICIsICpibG9jaywgIjoiKTsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IG90aGVy
SW5kZXggPSAwOyBvdGhlckluZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrb3RoZXJJbmRleCkg
ewotICAgICAgICAgICAgaWYgKCFkb21pbmF0ZXMoYmxvY2stPmluZGV4LCBvdGhlckluZGV4KSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG91dC5wcmludCgiICMiLCBv
dGhlckluZGV4KTsKLSAgICAgICAgfQotICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAg
IAorICAgICAgICBvdXQucHJpbnQoIiAgICBCbG9jayAjIiwgYmxvY2tJbmRleCwgIjogaWRvbSA9
ICIsIHBvaW50ZXJEdW1wKG1fZGF0YVtibG9ja0luZGV4XS5pZG9tUGFyZW50KSwgIiwgaWRvbUtp
ZHMgPSBbIik7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkcy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgKm1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lk
c1tpXSk7CisgICAgICAgIG91dC5wcmludCgiXSwgcHJlL3Bvc3QgPSAiLCBtX2RhdGFbYmxvY2tJ
bmRleF0ucHJlTnVtYmVyLCAiLyIsIG1fZGF0YVtibG9ja0luZGV4XS5wb3N0TnVtYmVyLCAiXG4i
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5h
dG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5h
dG9ycy5oCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAi
REZHQW5hbHlzaXMuaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZH
QmxvY2tNYXAuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJp
dFZlY3Rvci5oPgogCkBAIC00NCwyNCArNDUsMzkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
Y29tcHV0ZShHcmFwaCYpOwogICAgIAotICAgIGJvb2wgZG9taW5hdGVzKEJsb2NrSW5kZXggZnJv
bSwgQmxvY2tJbmRleCB0bykgY29uc3QKKyAgICBib29sIHN0cmljdGx5RG9taW5hdGVzKEJhc2lj
QmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KGlzVmFsaWQoKSk7Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdHNbdG9dLmdldChmcm9tKTsKKyAg
ICAgICAgcmV0dXJuIG1fZGF0YVt0b10ucHJlTnVtYmVyID4gbV9kYXRhW2Zyb21dLnByZU51bWJl
cgorICAgICAgICAgICAgJiYgbV9kYXRhW3RvXS5wb3N0TnVtYmVyIDwgbV9kYXRhW2Zyb21dLnBv
c3ROdW1iZXI7CiAgICAgfQogICAgIAogICAgIGJvb2wgZG9taW5hdGVzKEJhc2ljQmxvY2sqIGZy
b20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGRvbWluYXRl
cyhmcm9tLT5pbmRleCwgdG8tPmluZGV4KTsKKyAgICAgICAgcmV0dXJuIGZyb20gPT0gdG8gfHwg
c3RyaWN0bHlEb21pbmF0ZXMoZnJvbSwgdG8pOwogICAgIH0KICAgICAKLSAgICB2b2lkIGR1bXAo
R3JhcGgmLCBQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwogICAgIAogcHJpdmF0ZToKLSAgICBib29sIHBydW5lRG9taW5hdG9ycyhHcmFwaCYs
IEJsb2NrSW5kZXgpOworICAgIGJvb2wgbmFpdmVEb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwg
QmFzaWNCbG9jayogdG8pIGNvbnN0OwogICAgIAotICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yPiBt
X3Jlc3VsdHM7IC8vIEZvciBlYWNoIGJsb2NrLCB0aGUgYml0dmVjdG9yIG9mIGJsb2NrcyB0aGF0
IGRvbWluYXRlIGl0LgotICAgIEZhc3RCaXRWZWN0b3IgbV9zY3JhdGNoOyAvLyBBIHRlbXBvcmFy
eSBiaXR2ZWN0b3Igd2l0aCBiaXQgZm9yIGVhY2ggYmxvY2suIFdlIHJlY3ljbGUgdGhpcyB0byBz
YXZlIG5ldy9kZWxldGVzLgorICAgIHN0cnVjdCBCbG9ja0RhdGEgeworICAgICAgICBCbG9ja0Rh
dGEoKQorICAgICAgICAgICAgOiBpZG9tUGFyZW50KG51bGxwdHIpCisgICAgICAgICAgICAsIHBy
ZU51bWJlcihVSU5UX01BWCkKKyAgICAgICAgICAgICwgcG9zdE51bWJlcihVSU5UX01BWCkKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+
IGlkb21LaWRzOworICAgICAgICBCYXNpY0Jsb2NrKiBpZG9tUGFyZW50OworICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgcHJlTnVtYmVyOworICAgICAgICB1bnNpZ25lZCBwb3N0TnVtYmVyOwor
ICAgIH07CisgICAgCisgICAgQmxvY2tNYXA8QmxvY2tEYXRhPiBtX2RhdGE7CiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkocmV2aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUg
IkRGR0Nsb2JiZXJTZXQuaCIKKyNpbmNsdWRlICJERkdCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVk
ZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIK
ICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgpAQCAtMzcwLDE0ICszNzEsMTggQEAg
dm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAgIGlmIChtX2RvbWlu
YXRvcnMuaXNWYWxpZCgpKSB7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRl
ZCBieToiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVzKGksIGJsb2Nr
LT5pbmRleCkpCisgICAgICAgICAgICBpZiAoIXRoaXMtPmJsb2NrKGkpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVzKHRo
aXMtPmJsb2NrKGkpLCBibG9jaykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBvdXQucHJpbnQoIiAjIiwgaSk7CiAgICAgICAgIH0KICAgICAgICAgb3V0LnByaW50KCJc
biIpOwogICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0ZXM6Iik7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhibG9jay0+aW5kZXgsIGkpKQorICAgICAg
ICAgICAgaWYgKCF0aGlzLT5ibG9jayhpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhibG9jaywgdGhpcy0+YmxvY2so
aSkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgb3V0LnByaW50KCIg
IyIsIGkpOwogICAgICAgICB9CkBAIC02MzUsNzMgKzY0MCwzMCBAQCB2b2lkIEdyYXBoOjpzdWJz
dGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jCiAgICAgfQogfQogCi0vLyBVdGlsaXRpZXMgZm9yIHBy
ZS0gYW5kIHBvc3Qtb3JkZXIgdHJhdmVyc2Fscy4KLW5hbWVzcGFjZSB7Ci0KLWlubGluZSB2b2lk
IGFkZEZvclByZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2lj
QmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCaXRWZWN0b3ImIHNlZW4sIEJhc2ljQmxvY2sqIGJsb2Nr
KQotewotICAgIGlmIChzZWVuLmdldChibG9jay0+aW5kZXgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgcmVzdWx0LmFwcGVuZChibG9jayk7Ci0gICAgd29ya2xpc3QuYXBwZW5kKGJsb2Nr
KTsKLSAgICBzZWVuLnNldChibG9jay0+aW5kZXgpOwotfQotCi1lbnVtIFBvc3RPcmRlclRhc2tL
aW5kIHsKLSAgICBQb3N0T3JkZXJGaXJzdFZpc2l0LAotICAgIFBvc3RPcmRlckFkZFRvUmVzdWx0
Ci19OwotCi1zdHJ1Y3QgUG9zdE9yZGVyVGFzayB7Ci0gICAgUG9zdE9yZGVyVGFzayhCYXNpY0Js
b2NrKiBibG9jayA9IG51bGxwdHIsIFBvc3RPcmRlclRhc2tLaW5kIGtpbmQgPSBQb3N0T3JkZXJG
aXJzdFZpc2l0KQotICAgICAgICA6IG1fYmxvY2soYmxvY2spCi0gICAgICAgICwgbV9raW5kKGtp
bmQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwotICAgIFBv
c3RPcmRlclRhc2tLaW5kIG1fa2luZDsKLX07Ci0KLWlubGluZSB2b2lkIGFkZEZvclBvc3RPcmRl
cihWZWN0b3I8UG9zdE9yZGVyVGFzaywgMTY+JiB3b3JrbGlzdCwgQml0VmVjdG9yJiBzZWVuLCBC
YXNpY0Jsb2NrKiBibG9jaykKLXsKLSAgICBpZiAoc2Vlbi5nZXQoYmxvY2stPmluZGV4KSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIHdvcmtsaXN0LmFwcGVuZChQb3N0T3JkZXJUYXNrKGJs
b2NrLCBQb3N0T3JkZXJGaXJzdFZpc2l0KSk7Ci0gICAgc2Vlbi5zZXQoYmxvY2stPmluZGV4KTsK
LX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIHZvaWQgR3JhcGg6OmdldEJsb2Nrc0lu
UHJlT3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQogewotICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKiwgMTY+IHdvcmtsaXN0OwotICAgIEJpdFZlY3RvciBzZWVuOwotICAgIGFkZEZvclBy
ZU9yZGVyKHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKLSAgICB3aGlsZSAoIXdv
cmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0
LnRha2VMYXN0KCk7CisgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5w
dXNoKGJsb2NrKDApKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5w
b3AoKSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKLSAgICAgICAgICAgIGFkZEZv
clByZU9yZGVyKHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrLT5zdWNjZXNzb3IoaSkpOwor
ICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9jay0+c3VjY2Vzc29yKGkpKTsKICAgICB9CiB9
CiAKIHZvaWQgR3JhcGg6OmdldEJsb2Nrc0luUG9zdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4m
IHJlc3VsdCkKIHsKLSAgICBWZWN0b3I8UG9zdE9yZGVyVGFzaywgMTY+IHdvcmtsaXN0OwotICAg
IEJpdFZlY3RvciBzZWVuOwotICAgIGFkZEZvclBvc3RPcmRlcih3b3JrbGlzdCwgc2VlbiwgYmxv
Y2soMCkpOwotICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBvc3RP
cmRlclRhc2sgdGFzayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7Ci0gICAgICAgIHN3aXRjaCAodGFz
ay5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBQb3N0T3JkZXJGaXJzdFZpc2l0OgotICAgICAgICAg
ICAgd29ya2xpc3QuYXBwZW5kKFBvc3RPcmRlclRhc2sodGFzay5tX2Jsb2NrLCBQb3N0T3JkZXJB
ZGRUb1Jlc3VsdCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGFzay5tX2Jsb2Nr
LT5udW1TdWNjZXNzb3JzKCk7IGktLTspCi0gICAgICAgICAgICAgICAgYWRkRm9yUG9zdE9yZGVy
KHdvcmtsaXN0LCBzZWVuLCB0YXNrLm1fYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgUG9zdE9y
ZGVyQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKDApKTsK
KyAgICB3aGlsZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAg
ICAgIHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVyOgorICAgICAg
ICAgICAgd29ya2xpc3QucHVzaFBvc3QoaXRlbS5ibG9jayk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBpdGVtLmJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAg
ICAgICAgd29ya2xpc3QucHVzaChpdGVtLmJsb2NrLT5zdWNjZXNzb3IoaSkpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUG9zdE9yZGVyQWRkVG9SZXN1bHQ6Ci0gICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKHRhc2subV9ibG9jayk7CisgICAgICAgIGNhc2UgUG9zdE9yZGVyOgor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLmJsb2NrKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
bnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFs
aWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0Jsb2NrU2V0Lmgi
CiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5j
bHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSAhPSBTU0EpOwogICAgICAgICAKLSAgICAg
ICAgQml0VmVjdG9yIGJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzOworICAgICAgICBC
bG9ja1NldCBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50czsKICAgICAgICAgCiAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwpAQCAtNjMsMTcgKzY0LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IC8vIE5vdGU6IHRoaXMgYXNzdW1lcyB0aGF0IGNvbnRyb2wgZmxvdyBvY2N1cnMgYXQgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb24gYm91bmRhcmllcy4KICAgICAgICAgICAgIGlmIChtX29yaWdpblRoYXRI
YWRGaXJlLmlzU2V0KCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9j
ay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBibG9ja3NUaGF0
TmVlZEludmFsaWRhdGlvblBvaW50cy5zZXQoYmxvY2stPnN1Y2Nlc3NvcihpKS0+aW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50cy5hZGQo
YmxvY2stPnN1Y2Nlc3NvcihpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIGlmICghYmxvY2tzVGhhdE5lZWRJbnZh
bGlkYXRpb25Qb2ludHMuZ2V0KGJsb2NrSW5kZXgpKQorICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworCisgICAgICAgICAgICBpZiAoIWJs
b2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzLmNvbnRhaW5zKGJsb2NrKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaW5zZXJ0SW52
YWxpZGF0aW9uQ2hlY2soMCwgYmxvY2stPmF0KDApKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05haXZlRG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOYWl2
ZURvbWluYXRvcnMuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworTmFpdmVEb21pbmF0b3JzOjpOYWl2ZURvbWluYXRvcnMoKQoreworfQorCitO
YWl2ZURvbWluYXRvcnM6On5OYWl2ZURvbWluYXRvcnMoKQoreworfQorCit2b2lkIE5haXZlRG9t
aW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCit7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRz
IGEgbmFpdmUgZG9taW5hdG9yIHNvbHZlci4KKyAgICAKKyAgICBBU1NFUlQoZ3JhcGguYmxvY2so
MCktPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOworICAgIAorICAgIHVuc2lnbmVkIG51bUJsb2Nr
cyA9IGdyYXBoLm51bUJsb2NrcygpOworICAgIAorICAgIC8vIEFsbG9jYXRlIHN0b3JhZ2UgZm9y
IHRoZSBkZW5zZSBkb21pbmFuY2UgbWF0cml4LiAKKyAgICBpZiAobnVtQmxvY2tzID4gbV9yZXN1
bHRzLnNpemUoKSkgeworICAgICAgICBtX3Jlc3VsdHMuZ3JvdyhudW1CbG9ja3MpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLTspCisgICAgICAgICAgICBtX3Jlc3Vs
dHNbaV0ucmVzaXplKG51bUJsb2Nrcyk7CisgICAgICAgIG1fc2NyYXRjaC5yZXNpemUobnVtQmxv
Y2tzKTsKKyAgICB9CisKKyAgICAvLyBXZSBrbm93IHRoYXQgdGhlIGVudHJ5IGJsb2NrIGlzIG9u
bHkgZG9taW5hdGVkIGJ5IGl0c2VsZi4KKyAgICBtX3Jlc3VsdHNbMF0uY2xlYXJBbGwoKTsKKyAg
ICBtX3Jlc3VsdHNbMF0uc2V0KDApOworCisgICAgLy8gRmluZCBhbGwgb2YgdGhlIHZhbGlkIGJs
b2Nrcy4KKyAgICBtX3NjcmF0Y2guY2xlYXJBbGwoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1CbG9ja3M7IGktLTspIHsKKyAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBtX3NjcmF0Y2guc2V0KGkpOworICAgIH0KKyAgICAKKyAg
ICAvLyBNYXJrIGFsbCBub2RlcyBhcyBkb21pbmF0ZWQgYnkgZXZlcnl0aGluZy4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KSB7CisgICAgICAgIGlmICghZ3JhcGgu
YmxvY2soaSkgfHwgZ3JhcGguYmxvY2soaSktPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBtX3Jlc3VsdHNbaV0uY2xlYXJBbGwoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9yZXN1bHRzW2ldLnNldChtX3NjcmF0Y2gpOworICAgIH0KKworICAgIC8vIEl0ZXJhdGl2
ZWx5IGVsaW1pbmF0ZSBub2RlcyB0aGF0IGFyZSBub3QgZG9taW5hdG9yLgorICAgIGJvb2wgY2hh
bmdlZDsKKyAgICBkbyB7CisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgLy8gUHJ1
bmUgZG9taW5hdG9ycyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogZm9yd2FyZCBzY2FuLgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtQmxvY2tzOyArK2kpCisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHBydW5lRG9taW5hdG9ycyhncmFwaCwgaSk7CisKKyAgICAgICAgaWYgKCFj
aGFuZ2VkKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gUHJ1bmUgZG9taW5hdG9y
cyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogYmFja3dhcmQgc2Nhbi4KKyAgICAgICAgY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7
KQorICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgsIGkpOworICAg
IH0gd2hpbGUgKGNoYW5nZWQpOworfQorCitib29sIE5haXZlRG9taW5hdG9yczo6cHJ1bmVEb21p
bmF0b3JzKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpZHgpCit7CisgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBncmFwaC5ibG9jayhpZHgpOworCisgICAgaWYgKCFibG9jayB8fCBibG9jay0+cHJl
ZGVjZXNzb3JzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRmlu
ZCB0aGUgaW50ZXJzZWN0aW9uIG9mIGRvbShwcmVkcykuCisgICAgbV9zY3JhdGNoLnNldChtX3Jl
c3VsdHNbYmxvY2stPnByZWRlY2Vzc29yc1swXS0+aW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tID4gMTspCisgICAgICAgIG1fc2Ny
YXRjaC5maWx0ZXIobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbal0tPmluZGV4XSk7CisK
KyAgICAvLyBUaGUgYmxvY2sgaXMgYWxzbyBkb21pbmF0ZWQgYnkgaXRzZWxmLgorICAgIG1fc2Ny
YXRjaC5zZXQoaWR4KTsKKworICAgIHJldHVybiBtX3Jlc3VsdHNbaWR4XS5zZXRBbmRDaGVjayht
X3NjcmF0Y2gpOworfQorCit2b2lkIE5haXZlRG9taW5hdG9yczo6ZHVtcChHcmFwaCYgZ3JhcGgs
IFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewor
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG91dC5wcmlu
dCgiICAgIEJsb2NrICIsICpibG9jaywgIjoiKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IG90
aGVySW5kZXggPSAwOyBvdGhlckluZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrb3RoZXJJbmRl
eCkgeworICAgICAgICAgICAgaWYgKCFkb21pbmF0ZXMoYmxvY2stPmluZGV4LCBvdGhlckluZGV4
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICMi
LCBvdGhlckluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAg
fQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRv
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05haXZlRG9t
aW5hdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
YWl2ZURvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
TmFpdmVEb21pbmF0b3JzX2gKKyNkZWZpbmUgREZHTmFpdmVEb21pbmF0b3JzX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRoaXMgY2xhc3MgaXMg
b25seSB1c2VkIGZvciB2YWxpZGF0aW5nIHRoZSByZWFsIGRvbWluYXRvcnMgaW1wbGVtZW50YXRp
b24uCisKK2NsYXNzIE5haXZlRG9taW5hdG9ycyB7CitwdWJsaWM6CisgICAgTmFpdmVEb21pbmF0
b3JzKCk7CisgICAgfk5haXZlRG9taW5hdG9ycygpOworICAgIAorICAgIHZvaWQgY29tcHV0ZShH
cmFwaCYpOworICAgIAorICAgIGJvb2wgZG9taW5hdGVzKEJsb2NrSW5kZXggZnJvbSwgQmxvY2tJ
bmRleCB0bykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jlc3VsdHNbdG9dLmdldChm
cm9tKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwg
QmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZG9taW5hdGVzKGZy
b20tPmluZGV4LCB0by0+aW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoR3JhcGgm
LCBQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBib29sIHBydW5lRG9t
aW5hdG9ycyhHcmFwaCYsIEJsb2NrSW5kZXgpOworICAgIAorICAgIFZlY3RvcjxGYXN0Qml0VmVj
dG9yPiBtX3Jlc3VsdHM7IC8vIEZvciBlYWNoIGJsb2NrLCB0aGUgYml0dmVjdG9yIG9mIGJsb2Nr
cyB0aGF0IGRvbWluYXRlIGl0LgorICAgIEZhc3RCaXRWZWN0b3IgbV9zY3JhdGNoOyAvLyBBIHRl
bXBvcmFyeSBiaXR2ZWN0b3Igd2l0aCBiaXQgZm9yIGVhY2ggYmxvY2suIFdlIHJlY3ljbGUgdGhp
cyB0byBzYXZlIG5ldy9kZWxldGVzLgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdOYWl2ZURvbWluYXRv
cnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3Bz
LmNwcAkocmV2aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
YXR1cmFsTG9vcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxMSBAQCB2b2lkIE5h
dHVyYWxMb29wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiBOYXR1cmFsTG9vcHM6Ok5hdHVyYWxM
b29wcygpIHsgfQogTmF0dXJhbExvb3BzOjp+TmF0dXJhbExvb3BzKCkgeyB9CiAKK3ZvaWQgTmF0
dXJhbExvb3BzOjpjb21wdXRlRGVwZW5kZW5jaWVzKEdyYXBoJiBncmFwaCkKK3sKKyAgICBncmFw
aC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KGdyYXBoKTsKK30KKwogdm9pZCBOYXR1
cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogewogICAgIC8vIEltcGxlbWVudCB0aGUg
Y2xhc3NpYyBkb21pbmF0b3ItYmFzZWQgbmF0dXJhbCBsb29wIGZpbmRlci4gVGhlIGZpcnN0CkBA
IC01NywxMSArNjIsOSBAQCB2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgp
CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIAotICAg
IGdyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkoZ3JhcGgpOwotICAgIAogICAg
IGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkRvbWluYXRvcnM6XG4iKTsKLSAgICAg
ICAgZ3JhcGgubV9kb21pbmF0b3JzLmR1bXAoZ3JhcGgsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAg
ICAgIGdyYXBoLm1fZG9taW5hdG9ycy5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgfQogICAg
IAogICAgIG1fbG9vcHMucmVzaXplKDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOYXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05hdHVyYWxMb29wcy5oCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5
Myw3IEBAIHB1YmxpYzoKICAgICBOYXR1cmFsTG9vcHMoKTsKICAgICB+TmF0dXJhbExvb3BzKCk7
CiAgICAgCisgICAgdm9pZCBjb21wdXRlRGVwZW5kZW5jaWVzKEdyYXBoJik7CiAgICAgdm9pZCBj
b21wdXRlKEdyYXBoJik7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtTG9vcHMoKSBjb25zdApJbmRl
eDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE3MzA0NikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTQtMDgtMjcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBERkcgc2hvdWxkIGNvbXB1dGUgaW1tZWRpYXRlIGRvbWluYXRv
cnMgdXNpbmcgdGhlIE8obiBsb2cgbikgZm9ybSBvZiBMZW5nYXVlciBhbmQgVGFyamFuJ3MgIkEg
RmFzdCBBbGdvcml0aG0gZm9yIEZpbmRpbmcgRG9taW5hdG9ycyBpbiBhIEZsb3dncmFwaCIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMzYxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBNYWtl
IEJpdFZlY3RvciBvcGVyYXRpb25zIHJldHVybiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGJp
dCB5b3UncmUgY2hhbmdpbmcuIFRoaXMgaXMKKyAgICAgICAgdXNlZnVsIGZvciB0aGUga2luZHMg
b2Ygc2V0IG9wZXJhdGlvbnMgdGhhdCBhcmUgY29tbW9ucGxhY2UgaW4gY29tcGlsZXIgZ3JhcGgg
c2VhcmNoZXMuCisKKyAgICAgICAgKiB3dGYvQml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkJp
dFZlY3Rvcjo6cXVpY2tTZXQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnF1aWNrQ2xlYXIp
OgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNldCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6ZW5zdXJlU2l6ZUFuZFNldCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Y2xlYXIpOgor
CiAyMDE0LTA4LTI3ICBOaWNvIFdlYmVyICA8dGhha2lzQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBEZWxldGUgYSBNU1ZTMjAxMCB3b3JrYXJvdW5kLgpJbmRleDogU291cmNlL1dURi93dGYvQml0
VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlz
aW9uIDE3Mjk0NykKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcsMjQgKzExNywzMSBAQCBwdWJsaWM6IAogICAgICAgICByZXR1cm4gISEoYml0cygp
W2JpdCAvIGJpdHNJblBvaW50ZXIoKV0gJiAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAo
Yml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHF1
aWNrU2V0KHNpemVfdCBiaXQpCisgICAgYm9vbCBxdWlja1NldChzaXplX3QgYml0KQogICAgIHsK
ICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oYml0IDwgc2l6ZSgpKTsK
LSAgICAgICAgYml0cygpW2JpdCAvIGJpdHNJblBvaW50ZXIoKV0gfD0gKHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpOworICAgICAgICB1
aW50cHRyX3QmIHdvcmQgPSBiaXRzKClbYml0IC8gYml0c0luUG9pbnRlcigpXTsKKyAgICAgICAg
dWludHB0cl90IG1hc2sgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0
c0luUG9pbnRlcigpIC0gMSkpOworICAgICAgICBib29sIHJlc3VsdCA9ICEhKHdvcmQgJiBtYXNr
KTsKKyAgICAgICAgd29yZCB8PSBtYXNrOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
ICAgICAKLSAgICB2b2lkIHF1aWNrQ2xlYXIoc2l6ZV90IGJpdCkKKyAgICBib29sIHF1aWNrQ2xl
YXIoc2l6ZV90IGJpdCkKICAgICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKGJpdCA8IHNpemUoKSk7Ci0gICAgICAgIGJpdHMoKVtiaXQgLyBiaXRzSW5Qb2ludGVy
KCldICY9IH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50
ZXIoKSAtIDEpKSk7CisgICAgICAgIHVpbnRwdHJfdCYgd29yZCA9IGJpdHMoKVtiaXQgLyBiaXRz
SW5Qb2ludGVyKCldOworICAgICAgICB1aW50cHRyX3QgbWFzayA9IHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSk7CisgICAgICAgIGJvb2wg
cmVzdWx0ID0gISEod29yZCAmIG1hc2spOworICAgICAgICB3b3JkICY9IH5tYXNrOworICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lkIHF1aWNrU2V0KHNpemVfdCBi
aXQsIGJvb2wgdmFsdWUpCisgICAgYm9vbCBxdWlja1NldChzaXplX3QgYml0LCBib29sIHZhbHVl
KQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgcXVpY2tTZXQoYml0KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcXVpY2tDbGVhcihiaXQpOworICAgICAgICAgICAg
cmV0dXJuIHF1aWNrU2V0KGJpdCk7CisgICAgICAgIHJldHVybiBxdWlja0NsZWFyKGJpdCk7CiAg
ICAgfQogICAgIAogICAgIGJvb2wgZ2V0KHNpemVfdCBiaXQpIGNvbnN0CkBAIC0xNDQsMzEgKzE1
MSwzMCBAQCBwdWJsaWM6IAogICAgICAgICByZXR1cm4gcXVpY2tHZXQoYml0KTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBzZXQoc2l6ZV90IGJpdCkKKyAgICBib29sIHNldChzaXplX3QgYml0KQog
ICAgIHsKICAgICAgICAgZW5zdXJlU2l6ZShiaXQgKyAxKTsKLSAgICAgICAgcXVpY2tTZXQoYml0
KTsKKyAgICAgICAgcmV0dXJuIHF1aWNrU2V0KGJpdCk7CiAgICAgfQogCi0gICAgdm9pZCBlbnN1
cmVTaXplQW5kU2V0KHNpemVfdCBiaXQsIHNpemVfdCBzaXplKQorICAgIGJvb2wgZW5zdXJlU2l6
ZUFuZFNldChzaXplX3QgYml0LCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIGVuc3VyZVNp
emUoc2l6ZSk7Ci0gICAgICAgIHF1aWNrU2V0KGJpdCk7CisgICAgICAgIHJldHVybiBxdWlja1Nl
dChiaXQpOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIoc2l6ZV90IGJpdCkKKyAgICBib29sIGNs
ZWFyKHNpemVfdCBiaXQpCiAgICAgewogICAgICAgICBpZiAoYml0ID49IHNpemUoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgcXVpY2tDbGVhcihiaXQpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gcXVpY2tDbGVhcihiaXQpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIHNldChzaXplX3QgYml0LCBib29sIHZhbHVlKQorICAgIGJvb2wgc2V0KHNpemVf
dCBiaXQsIGJvb2wgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAg
ICBzZXQoYml0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2xlYXIoYml0KTsKKyAgICAg
ICAgICAgIHJldHVybiBzZXQoYml0KTsKKyAgICAgICAgcmV0dXJuIGNsZWFyKGJpdCk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgQml0VmVjdG9yJiBvdGhlcikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243275</attachid>
            <date>2014-12-14 17:29:39 -0800</date>
            <delta_ts>2014-12-14 19:48:49 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>10260</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc3MjY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDE0LTEyLTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UHV0TG9jYWxTaW5raW5nUGhhc2UgaGFzIGFuIGludmFsaWQgYXNzZXJ0aW9uIGFib3V0IGluY29t
aW5nIHZhbHVlcywgYmVjYXVzZSBib3RoIGxpdmVuZXNzIGFuZCBkZWZlcnJhbCBhbmFseXNlcyBh
cmUgY29uc2VydmF0aXZlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzk2MzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAg
ICAgICAgCisgICAgICAgIFJlcGxhY2VzIGEgZmF1bHR5IGFzc2VydGlvbiB3aXRoIGNvZGUgdG8g
aGFuZGxlIGFuIGF3ZXNvbWUgc3BlY2lhbCBjYXNlLiBBbHNvIGFkZHMgYSBsb3Qgb2YKKyAgICAg
ICAgY29tbWVudHMgdGhhdCByZWNvbnN0cnVjdCBteSByZWFzb25pbmcgYWJvdXQgdGhpcyBjb2Rl
LiBJIGhhZCB0byB3b3JrIGhhcmQgdG8gcmVtZW1iZXIgaG93CisgICAgICAgIGRlZmVycmFsIHdv
cmtlZCBzbyBJIHdyb3RlIG15IGRpc2NvdmVyaWVzIGRvd24uCisKKyAgICAgICAgKiBkZmcvREZH
SW5zZXJ0aW9uU2V0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5zZXJ0aW9uU2V0OjppbnNlcnRC
b3R0b21Db25zdGFudEZvclVzZSk6CisgICAgICAgICogZGZnL0RGR1B1dExvY2FsU2lua2luZ1Bo
YXNlLmNwcDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcHV0LWxvY2FsLWNvbnNlcnZhdGl2ZS5q
czogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoLnJlc3VsdCk6CisgICAgICAgIChi
YXIpOgorCiAyMDE0LTEyLTE0ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXBsYWNlIFBhc3NSZWYgd2l0aCBSZWYvUmVmJiYgYWNyb3NzIHRoZSBib2FyZC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2
aXNpb24gMTc3MjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25T
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSwxNiBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gaW5zZXJ0Q29uc3RhbnRGb3JVc2UoaW5kZXgsIE5vZGVPcmlnaW4ob3Jp
Z2luKSwgdmFsdWUsIHVzZUtpbmQpOwogICAgIH0KLQorICAgIAorICAgIEVkZ2UgaW5zZXJ0Qm90
dG9tQ29uc3RhbnRGb3JVc2Uoc2l6ZV90IGluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgVXNlS2lu
ZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgaWYgKGlzRG91YmxlKHVzZUtpbmQpKQorICAgICAg
ICAgICAgcmV0dXJuIGluc2VydENvbnN0YW50Rm9yVXNlKGluZGV4LCBvcmlnaW4sIGpzTnVtYmVy
KFBOYU4pLCB1c2VLaW5kKTsKKyAgICAgICAgaWYgKHVzZUtpbmQgPT0gSW50NTJSZXBVc2UpCisg
ICAgICAgICAgICByZXR1cm4gaW5zZXJ0Q29uc3RhbnRGb3JVc2UoaW5kZXgsIG9yaWdpbiwganNO
dW1iZXIoMCksIHVzZUtpbmQpOworICAgICAgICByZXR1cm4gaW5zZXJ0Q29uc3RhbnRGb3JVc2Uo
aW5kZXgsIG9yaWdpbiwganNVbmRlZmluZWQoKSwgdXNlS2luZCk7CisgICAgfQorICAgIAogICAg
IE5vZGUqIGluc2VydE91dE9mT3JkZXIoY29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCiAgICAg
ewogICAgICAgICBzaXplX3QgdGFyZ2V0SW5kZXggPSBpbnNlcnRpb24uaW5kZXgoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0TG9jYWxTaW5raW5n
UGhhc2UuY3BwCShyZXZpc2lvbiAxNzcyNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1B1dExvY2FsU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIx
NCw1MCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBOZXh0IGlkZW50aWZ5IHdoZXJl
IHdlIHdvdWxkIHdhbnQgdG8gc2luayBQdXRMb2NhbHMgdG8uIFdlIHNheSB0aGF0IHRoZXJlIGlz
IGEgZGVmZXJyZWQKICAgICAgICAgLy8gZmx1c2ggaWYgd2UgaGFkIGEgUHV0TG9jYWwgd2l0aCBh
IGdpdmVuIFZhcmlhYmxlQWNjZXNzRGF0YSogYnV0IGl0IGhhc24ndCBiZWVuCi0gICAgICAgIC8v
IG1hdGVyaWFsaXplZCB5ZXQuCisgICAgICAgIC8vIG1hdGVyaWFsaXplZCB5ZXQuIERlZmVycmFs
cyBoYXZlIHRoZSBmb2xsb3dpbmcgbGF0dGljZTsgYnV0IGl0J3Mgd29ydGggbm90aW5nIHRoYXQg
dGhlCisgICAgICAgIC8vIFRPUCBwYXJ0IG9mIHRoZSBsYXR0aWNlIHNlcnZlcyBhbiBlbnRpcmVs
eSBkaWZmZXJlbnQgcHVycG9zZSB0aGFuIHRoZSByZXN0IG9mIHRoZSBsYXR0aWNlOgorICAgICAg
ICAvLyBpdCBqdXN0IG1lYW5zIHRoYXQgd2UncmUgaW4gYSByZWdpb24gb2YgY29kZSB3aGVyZSBu
b2JvZHkgc2hvdWxkIGhhdmUgYmVlbiByZWx5aW5nIG9uIHRoZQorICAgICAgICAvLyB2YWx1ZS4g
VGhlIHJlc3Qgb2YgdGhlIGxhdHRpY2UgbWVhbnMgdGhhdCB3ZSBlaXRoZXIgaGF2ZSBhIFB1dExv
Y2FsIHRoYXQgaXMgZGVmZXJyZWQgKGkuZS4KKyAgICAgICAgLy8gc3RpbGwgbmVlZHMgdG8gYmUg
ZXhlY3V0ZWQpIG9yIHRoZXJlIGlzbid0IG9uZSAoYmVjYXVzZSB3ZSd2ZSBhbHJhZWR5IGV4ZWN1
dGVkIGl0KS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gQm90dG9tOgorICAgICAgICAvLyAgICAg
SW5zdGFudGlhdGVkIGFzIFZhcmlhYmxlRGVmZXJyYWwoKS4gCisgICAgICAgIC8vICAgICBNZWFu
cyB0aGF0IGFsbCBwcmV2aW91cyBQdXRMb2NhbHMgaGF2ZSBiZWVuIGV4ZWN1dGVkIHNvIHRoZXJl
IGlzIG5vdGhpbmcgZGVmZXJyZWQuCisgICAgICAgIC8vICAgICBEdXJpbmcgbWVyZ2luZyB0aGlz
IGlzIHN1Ym9yZGluYXRlIHRvIHRoZSBvdGhlciBraW5kcyBvZiBkZWZlcnJhbHMsIGJlY2F1c2Ug
aXQKKyAgICAgICAgLy8gICAgIHJlcHJlc2VudHMgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBhbHJlYWR5
IGV4ZWN1dGVkIGFsbCBuZWNlc3NhcnkgUHV0TG9jYWxzLiBUaGlzIGltcGxpZXMKKyAgICAgICAg
Ly8gICAgIHRoYXQgdGhlcmUgKmhhZCogYmVlbiBzb21lIFB1dExvY2FscyB0aGF0IHdlIHNob3Vs
ZCBoYXZlIGV4ZWN1dGVkLgorICAgICAgICAvLworICAgICAgICAvLyBUb3A6CisgICAgICAgIC8v
ICAgICBJbnN0YW50aWF0ZWQgYXMgVmFyaWFibGVEZWZlcnJhbDo6Y29uZmxpY3QoKS4KKyAgICAg
ICAgLy8gICAgIFJlcHJlc2VudHMgdGhlIGZhY3QgdGhhdCB3ZSBrbm93LCB2aWEgZm9yd2FyZCBm
bG93LCB0aGF0IHRoZXJlIGlzbid0IGFueSB2YWx1ZSBpbiB0aGUKKyAgICAgICAgLy8gICAgIGdp
dmVuIGxvY2FsIHRoYXQgYW55b25lIHNob3VsZCBoYXZlIGJlZW4gcmVseWluZyBvbi4gVGhpcyBj
b21lcyBpbnRvIHBsYXkgYXQgdGhlCisgICAgICAgIC8vICAgICBwcm9sb2d1ZSAoYmVjYXVzZSBp
biBTU0EgZm9ybSBhdCB0aGUgcHJvbG9ndWUgbm8gbG9jYWwgaGFzIGFueSB2YWx1ZSkgb3Igd2hl
biB3ZSBtZXJnZQorICAgICAgICAvLyAgICAgZGVmZXJyYWxzIGZvciBkaWZmZXJlbnQgVmFyaWFi
bGVBY2Nlc3NEYXRhKidzLiBBIFZBRCBlbmNvbXBhc3NlcyBhIGxleGljYWwgc2NvcGUgaW4KKyAg
ICAgICAgLy8gICAgIHdoaWNoIHRoZSBsb2NhbCBoYXMgc29tZSBzZW1hbnRpYyBtZWFuaW5nOyBp
ZiB3ZSBoYWQgc3RvcmVzIGZyb20gZGlmZmVyZW50IGxleGljYWwKKyAgICAgICAgLy8gICAgIHNj
b3BlcyB0aGF0IGdvdCBtZXJnZWQgdG9nZXRoZXIgdGhlbiB3ZSBrbm93IHRoYXQgd2UncmUgbm90
IGluIGVpdGhlciBzY29wZSBhbnltb3JlLgorICAgICAgICAvLyAgICAgTm90ZSB0aGF0IHRoaXMg
aXMgYWxsIGFwcHJveGltYXRlIGFuZCBvbmx5IHByZWNpc2UgZW5vdWdoIHRvIGxhdGVyIGFuc3dl
ciBxdWVzdGlvbnMKKyAgICAgICAgLy8gICAgIHBlcnRpbmVudCB0byBzaW5raW5nLiBGb3IgZXhh
bXBsZSwgdGhpcyBkb2Vzbid0IGFsd2F5cyBkZXRlY3Qgd2hlbiBhIGxvY2FsIGlzIG5vCisgICAg
ICAgIC8vICAgICBsb25nZXIgc2VtYW50aWNhbGx5IHJlbGV2YW50IC0gd2UgbWF5IHdlbGwgaGF2
ZSBhIGRlZmVycmFsIGZyb20gaW5zaWRlIHNvbWUgaW5saW5lZAorICAgICAgICAvLyAgICAgY2Fs
bCBzdXJ2aXZlIG91dHNpZGUgb2YgdGhhdCBpbmxpbmVkIGNvZGUsIGFuZCB0aGlzIGlzIGdlbmVy
YWxseSBPSy4gSW4gdGhlIHdvcnN0IGNhc2UKKyAgICAgICAgLy8gICAgIGl0IG1lYW5zIHRoYXQg
d2UgbWlnaHQgdGhpbmsgdGhhdCBhIGRlZmVycmFsIHRoYXQgaXMgYWN0dWFsbHkgZGVhZCBtdXN0
IHN0aWxsIGJlCisgICAgICAgIC8vICAgICBleGVjdXRlZC4gQnV0IHdlIHVzdWFsbHkgY2F0Y2gg
dGhhdCB3aXRoIGxpdmVuZXNzLiBMaXZlbmVzcyBkb2Vzbid0IGFsd2F5cyBjYXRjaCBpdAorICAg
ICAgICAvLyAgICAgYmVjYXVzZSBsaXZlbmVzcyBpcyBjb25zZXJ2YXRpdmUuCisgICAgICAgIC8v
CisgICAgICAgIC8vICAgICBXaGF0IFRvcCBkb2VzIGdpdmUgdXMgaXMgZGV0ZWN0cyBzaXR1YXRp
b25zIHdoZXJlIHdlIGJvdGggZG9uJ3QgbmVlZCB0byBjYXJlIGFib3V0IGEKKyAgICAgICAgLy8g
ICAgIGRlZmVycmFsIGFuZCB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBjb3VsZCByZWFzb24gYWJv
dXQgaXQgYW55d2F5LiBJZiB3ZSBtZXJnZWQKKyAgICAgICAgLy8gICAgIGRlZmVycmFscyBmb3Ig
ZGlmZmVyZW50IHZhcmlhYmxlcyB0aGVuIHdlIHdvdWxkbid0IGtub3cgdGhlIGZvcm1hdCB0byB1
c2UuIFNvLCB3ZQorICAgICAgICAvLyAgICAgdXNlIFRvcCBpbiB0aGF0IGNhc2UgYmVjYXVzZSB0
aGF0J3MgYWxzbyBhIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGF0IHdlIGNhbiBpZ25vcmUgdGhlCisg
ICAgICAgIC8vICAgICBkZWZlcnJhbC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRGVmZXJyYWwg
d2l0aCBhIGNvbmNyZXRlIFZhcmlhYmxlQWNjZXNzRGF0YSo6CisgICAgICAgIC8vICAgICBJbnN0
YW50aWF0ZWQgYXMgVmFyaWFibGVEZWZlcnJhbChzb21lVmFyaWFibGVBY2Nlc3NEYXRhKQorICAg
ICAgICAvLyAgICAgUmVwcmVzZW50cyB0aGUgZmFjdCB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHdv
dWxkIGhhdmUgZG9uZSBhIFB1dExvY2FsIGJ1dCB3ZSBoYXZlbid0CisgICAgICAgIC8vICAgICBp
ZGVudGlmaWVkIGFuIG9wZXJhdGlvbiB0aGF0IHdvdWxkIGhhdmUgb2JzZXJ2ZWQgdGhhdCBQdXRM
b2NhbC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBjb2RlIGhhcyBzb21lIGludGVyZXN0
aW5nIHF1aXJrcyBiZWNhdXNlIG9mIHRoZSBmYWN0IHRoYXQgbmVpdGhlciBsaXZlbmVzcyBub3IK
KyAgICAgICAgLy8gZGVmZXJyYWxzIGFyZSB2ZXJ5IHByZWNpc2UuIFRoZXkgYXJlIG9ubHkgcHJl
Y2lzZSBlbm91Z2ggdG8gYmUgYWJsZSB0byBjb3JyZWN0bHkgdGVsbCB1cworICAgICAgICAvLyB3
aGVuIHdlIG1heSBbc2ljXSBuZWVkIHRvIGV4ZWN1dGUgUHV0TG9jYWxzLiBUaGlzIG1lYW5zIHRo
YXQgdGhleSBtYXkgcmVwb3J0IHRoZSBuZWVkIHRvCisgICAgICAgIC8vIGV4ZWN1dGUgYSBQdXRM
b2NhbCBpbiBjYXNlcyB3aGVyZSB3ZSBhY3R1YWxseSBkb24ndCByZWFsbHkgbmVlZCBpdCwgYW5k
IHRoYXQncyB0b3RhbGx5IE9LLgogICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxWYXJpYWJsZURl
ZmVycmFsPj4gZGVmZXJyZWRBdEhlYWQobV9ncmFwaCk7CiAgICAgICAgIEJsb2NrTWFwPE9wZXJh
bmRzPFZhcmlhYmxlRGVmZXJyYWw+PiBkZWZlcnJlZEF0VGFpbChtX2dyYXBoKTsKICAgICAgICAg
CkBAIC00NjUsNyArNTA4LDM0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgRmx1c2hG
b3JtYXQgZm9ybWF0ID0gdmFyaWFibGVEZWZlcnJhbC52YXJpYWJsZSgpLT5mbHVzaEZvcm1hdCgp
OwogICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSB1c2VLaW5kRm9yKGZvcm1h
dCk7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5k
KG9wZXJhbmQpOwotICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxw
dHIsIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmNvbWluZykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gdG90YWxseSBoYXBwZW4sIHNlZSB0ZXN0
cy9zdHJlc3MvcHV0LWxvY2FsLWNvbnNlcnZhdGl2ZS5qcy4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgYXJpc2VzIGJlY2F1c2UgZGVmZXJyYWwgYW5kIGxpdmVuZXNzIGFyZSBib3Ro
IGNvbnNlcnZhdGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnNlcnZhdGl2ZSBs
aXZlbmVzcyBtZWFucyB0aGF0IGEgbG9hZCBmcm9tIGEgKmRpZmZlcmVudCogY2xvc3VyZQorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFibGUgbWF5IGxlYWQgdXMgdG8gYmVsaWV2ZSB0
aGF0IG91ciBsb2NhbCBpcyBsaXZlLiBDb25zZXJ2YXRpdmUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGRlZmVycmFsIG1heSBsZWFkIHVzIHRvIGJlbGlldmUgdGhhdCB0aGUgbG9jYWwgZG9l
c24ndCBoYXZlIGEgdG9wIGRlZmVycmFsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWNh
dXNlIHNvbWVvbmUgaGFzIGRvbmUgc29tZXRoaW5nIHRoYXQgd291bGQgaGF2ZSBmb3JjZWQgaXQg
dG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGVyaWFsaXplZC4gVGhlIGJhc2lj
IHBhdHRlcm4gaXM6CisgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gR2V0Q2xvc3VyZVZhcihsb2M0MikgLy8gbG9jNDIncyBkZWZlcnJhbCBpcyBu
b3cgYm90dG9tCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAocHJlZGljYXRlMSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBQdXRDbG9zdXJlVmFyKGxvYzQyKSAvLyBwcmV2
ZW50IEdDU0Ugb2Ygb3VyIEdldENsb3N1cmVWYXIncworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaWYgKHByZWRpY2F0ZTIpCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgUHV0TG9j
YWwobG9jNDIpIC8vIHdlIG5vdyBoYXZlIGEgY29uY3JldGUgZGVmZXJyYWwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIC8vIHdlIHN0aWxsIGhhdmUgdGhlIGNvbmNyZXRlIGRlZmVycmFsIGJl
Y2F1c2Ugd2UgbWVyZ2VkIHdpdGggYm90dG9tCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBH
ZXRDbG9zdXJlVmFyKGxvYzQyKSAvLyBmb3JjZSBtYXRlcmlhbGl6YXRpb24KKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIGhhdmUg
YSBQaGkgd2l0aCBubyBpbmNvbWluZyB2YWx1ZSBmb3JtIHRoZSBiYXNpYyBibG9jayB0aGF0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBieXBhc3NlZCB0aGUgUHV0TG9jYWwuCisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHdlIHNv
cnQgb2YgY291bGQgaGF2ZSB1c2VkIHRoZSBlcXVpdmFsZW50IG9mIExMVk0ncyB1bmRlZiBoZXJl
LiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvaW50IGlzIHRoYXQgaXQncyBPSyB0
byBqdXN0IGxlYXZlIHJhbmRvbSBiaXRzIGluIHRoZSBsb2NhbCBpZiB3ZSdyZQorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gY29taW5nIGRvd24gdGhpcyBwYXRoLiBCdXQsIHdlIGRvbid0IGhh
dmUgYSB3YXkgb2Ygc2F5aW5nIHRoYXQgaW4gb3VyIElSCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyByaWdodCBub3cgYW5kIGFueXdheSBpdCBwcm9iYWJseSBkb2Vzbid0IG1hdHRlciB0aGF0
IG11Y2guCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
IGluY29taW5nID0gaW5zZXJ0aW9uU2V0Lmluc2VydEJvdHRvbUNvbnN0YW50Rm9yVXNlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgdXBzaWxvbk9y
aWdpbiwgdXNlS2luZCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUs
IFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3B1dC1sb2NhbC1jb25zZXJ2YXRpdmUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtbG9jYWwtY29uc2VydmF0aXZlLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtbG9j
YWwtY29uc2VydmF0aXZlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKK2Z1bmN0
aW9uIGZvbyhvLCBhLCBiLCBjKSB7CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgcmVhbCBidXQg
aGF2ZSBzb21lIGNvbnRyb2wgZmxvdy4gVGhpcyBjYXVzZXMgdGhlIFB1dExvY2FscyBmb3IgYSwK
KyAgICAvLyBiLCBhbmQgYyB0byBzdXJ2aXZlIGludG8gU1NBIGZvcm0uIEJ1dCB3ZSBkb24ndCBo
YXZlIGFueSBlZmZlY3RzLCBzbyBzaW5raW5nIHdpbGwgYmUKKyAgICAvLyBzdWNjZXNzZnVsLgor
ICAgIGlmIChvLmYpCisgICAgICAgIHJldHVybiA0MjsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
biAwOworfQorCitmdW5jdGlvbiBiYXIobywgeSkgeworICAgIHZhciBhID0geTsKKyAgICB2YXIg
YiA9IHkgKyAxOworICAgIHZhciBjID0geSArIDI7CisgICAgdmFyIGQgPSB5ICsgMzsKKyAgICB2
YXIgZSA9IHkgKyA0OworICAgIHZhciBmID0geSArIDU7CisgICAgdmFyIGcgPSB5ICsgNjsKKyAg
ICB2YXIgaCA9IHkgKyA3OworICAgIHZhciBpID0geSArIDg7CisgICAgdmFyIGogPSB5ICsgOTsK
KyAgICB2YXIgayA9IHkgKyAxMDsKKyAgICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24ocCwgcSkgewor
ICAgICAgICB2YXIgeCA9IGEgKyBiICsgYyArIGQgKyBlICsgZiArIGcgKyBoICsgaSArIGogKyBr
OworICAgICAgICBpZiAocSkgeworICAgICAgICAgICAgLy8gTWFrZSBpdCBhcHBlYXIgdGhhdCBp
dCdzIHBvc3NpYmxlIHRvIGNsb2JiZXIgdGhvc2UgY2xvc3VyZSB2YXJpYWJsZXMsIHNvIHRoYXQg
d2UKKyAgICAgICAgICAgIC8vIGxvYWQgZnJvbSB0aGVtIGFnYWluIGRvd24gYmVsb3cuCisgICAg
ICAgICAgICBhID0gYiA9IGMgPSBkID0gZSA9IGYgPSBnID0gaCA9IGkgPSBqID0gayA9IDQyOwor
ICAgICAgICB9CisgICAgICAgIGlmIChwKQorICAgICAgICAgICAgeCA9IGZvbyhvLCAxLCAyLCAz
KQorICAgICAgICBlbHNlCisgICAgICAgICAgICB4ID0gNTsKKyAgICAgICAgcmV0dXJuIHggKyBh
ICsgYiArIGMgKyBkICsgZSArIGYgKyBnICsgaCArIGkgKyBqICsgazsKKyAgICB9OworICAgIG5v
SW5saW5lKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordmFyIG8gPSB7ZjogNDJ9
OworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9
IGJhcihvLCBpKSh0cnVlLCBmYWxzZSk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiArIDExICogaSAr
IDU1KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisK
</data>

          </attachment>
      

    </bug>

</bugzilla>