<?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>133918</bug_id>
          
          <creation_ts>2014-06-14 14:41:59 -0700</creation_ts>
          <short_desc>DFG AI and constant folder should be able to precisely prune MultiGetByOffset/MultiPutByOffset even if the base structure abstract value is not a singleton</short_desc>
          <delta_ts>2014-06-18 21:35:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>133935</dependson>
    
    <dependson>133947</dependson>
    
    <dependson>133985</dependson>
          <blocked>133229</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1015715</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-14 14:41:59 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015716</commentid>
    <comment_count>1</comment_count>
      <attachid>233125</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-14 14:42:47 -0700</bug_when>
    <thetext>Created attachment 233125
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016056</commentid>
    <comment_count>2</comment_count>
      <attachid>233214</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-16 21:05:18 -0700</bug_when>
    <thetext>Created attachment 233214
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016356</commentid>
    <comment_count>3</comment_count>
      <attachid>233279</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-17 20:21:25 -0700</bug_when>
    <thetext>Created attachment 233279
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016362</commentid>
    <comment_count>4</comment_count>
      <attachid>233283</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-17 21:06:11 -0700</bug_when>
    <thetext>Created attachment 233283
it compiles!

And fails all of the interesting tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016523</commentid>
    <comment_count>5</comment_count>
      <attachid>233321</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-18 13:29:30 -0700</bug_when>
    <thetext>Created attachment 233321
almost done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016524</commentid>
    <comment_count>6</comment_count>
      <attachid>233322</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-18 13:43:24 -0700</bug_when>
    <thetext>Created attachment 233322
ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016537</commentid>
    <comment_count>7</comment_count>
      <attachid>233322</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-06-18 14:25:29 -0700</bug_when>
    <thetext>Comment on attachment 233322
ready for review

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:130
&gt; +                    != node-&gt;transition()-&gt;next)

Weird line break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016630</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-18 21:35:59 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/170141</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233125</attachid>
            <date>2014-06-14 14:42:47 -0700</date>
            <delta_ts>2014-06-16 21:05:18 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13790</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
Y3BwCShyZXZpc2lvbiAxNjk5NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogCisjaW5jbHVkZSAiREZH
QWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC0xNjAsNiArMTYxLDgwIEBAIHZvaWQgU3RydWN0dXJlU2V0OjpleGNsdWRl
KGNvbnN0IFN0cnVjdHUKICAgICAgICAgY2xlYXIoKTsKIH0KIAorbmFtZXNwYWNlIHsKKworY2xh
c3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZUNvbnRhaW5zIHsKK3B1YmxpYzoKKyAgICBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlQ29udGFpbnMoY29uc3QgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdmFsdWUuY29udGFpbnMoc3RydWN0dXJlKTsKKyAgICB9Citwcml2YXRlOgorICAg
IGNvbnN0IERGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgbV92YWx1ZTsKK307CisKK2NsYXNz
IFNwZWN1bGF0ZWRUeXBlQ29udGFpbnMgeworcHVibGljOgorICAgIFNwZWN1bGF0ZWRUeXBlQ29u
dGFpbnMoU3BlY3VsYXRlZFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUgJiBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUo
c3RydWN0dXJlKTsKKyAgICB9Citwcml2YXRlOgorICAgIFNwZWN1bGF0ZWRUeXBlIG1fdHlwZTsK
K307CisKK2NsYXNzIEFycmF5TW9kZXNDb250YWlucyB7CitwdWJsaWM6CisgICAgQXJyYXlNb2Rl
c0NvbnRhaW5zKEFycmF5TW9kZXMgYXJyYXlNb2RlcykKKyAgICAgICAgOiBtX2FycmF5TW9kZXMo
YXJyYXlNb2RlcykKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FycmF5TW9kZXMgJiBh
cnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgIH0KK3ByaXZhdGU6CisgICAg
QXJyYXlNb2RlcyBtX2FycmF5TW9kZXM7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
Kwordm9pZCBTdHJ1Y3R1cmVTZXQ6OmZpbHRlcihjb25zdCBERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG90aGVyKQoreworICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWVDb250YWlucyBmdW5j
dG9yKG90aGVyKTsKKyAgICBnZW5lcmljRmlsdGVyKGZ1bmN0b3IpOworfQorCit2b2lkIFN0cnVj
dHVyZVNldDo6ZmlsdGVyKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCit7CisgICAgU3BlY3VsYXRlZFR5
cGVDb250YWlucyBmdW5jdG9yKHR5cGUpOworICAgIGdlbmVyaWNGaWx0ZXIoZnVuY3Rvcik7Cit9
CisKK3ZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoQXJyYXlNb2RlcyBhcnJheU1vZGVzKQorewor
ICAgIEFycmF5TW9kZXNDb250YWlucyBmdW5jdG9yKGFycmF5TW9kZXMpOworICAgIGdlbmVyaWNG
aWx0ZXIoZnVuY3Rvcik7Cit9CisKK3ZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoY29uc3QgREZH
OjpBYnN0cmFjdFZhbHVlJiBvdGhlcikKK3sKKyAgICBmaWx0ZXIob3RoZXIubV9zdHJ1Y3R1cmUp
OworICAgIGZpbHRlcihvdGhlci5tX3R5cGUpOworICAgIGZpbHRlcihvdGhlci5tX2FycmF5TW9k
ZXMpOworfQorCiBib29sIFN0cnVjdHVyZVNldDo6aXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKSBjb25zdAogewogICAgIGlmIChpc1RoaW4oKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMTY5OTc5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNl
IERGRyB7CitjbGFzcyBBYnN0cmFjdFZhbHVlOwogY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTsKIH0KIApAQCAtOTYsNiArOTcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZmlsdGVyKGNvbnN0
IFN0cnVjdHVyZVNldCYpOwogICAgIHZvaWQgZXhjbHVkZShjb25zdCBTdHJ1Y3R1cmVTZXQmKTsK
ICAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUm
KTsKKyAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSk7CisgICAgdm9pZCBmaWx0ZXIoQXJy
YXlNb2Rlcyk7CisgICAgdm9pZCBmaWx0ZXIoY29uc3QgREZHOjpBYnN0cmFjdFZhbHVlJik7Cisg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGdlbmVyaWNGaWx0
ZXIoRnVuY3RvciYgZnVuY3RvcikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZp
c2lvbiAxNjk5NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MzQsNyArMTUzNCw3IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYgKCFmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAg
IG9ic2VydmVUcmFuc2l0aW9uKAogICAgICAgICAgICAgICAgIGNsb2JiZXJMaW1pdCwgbm9kZS0+
dHJhbnNpdGlvbigpLT5wcmV2aW91cywgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBub2RlLT50cmFuc2l0
aW9uKCktPm5leHQpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdl
U3RydWN0dXJlKG1fZ3JhcGgsIG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCk7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CkBAIC0xNjY2LDM5ICsxNjY2
LDUzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDogewotICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBBU1NFUlQoISh2
YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUg
YWxyZWFkeSBlbnN1cmVkIHRoaXMuCi0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQganVzdCBmaWx0
ZXIgZG93biB0aGUgY2FzZXMgaW4gTXVsdGlHZXRCeU9mZnNldC4gSWYgdGhhdCByZXN1bHRzIGlu
IGFsbAotICAgICAgICAvLyBjYXNlcyBoYXZpbmcgdGhlIHNhbWUgb2Zmc2V0IHRoZW4gd2Ugc2hv
dWxkIHN0cmVuZ3RoIHJlZHVjZSBpdCB0byBhIENoZWNrU3RydWN0dXJlICsKLSAgICAgICAgLy8g
R2V0QnlPZmZzZXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzMyMjkKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUu
bV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICBib29sIGRvbmUgPSBm
YWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZz
ZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
R2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzW2ldOwotICAgICAgICAgICAgICAgIGlmICghdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5j
b250YWlucyhzdHJ1Y3R1cmUpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGZpbHRlcih2YWx1ZSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIC8vIFRoaXMgY29kZSB3aWxsIGZpbHRlciB0
aGUgYmFzZSB2YWx1ZSBpbiBhIG1hbm5lciB0aGF0IGlzIHBvc3NpYmx5IGRpZmZlcmVudCAoZWl0
aGVyIG1vcmUKKyAgICAgICAgLy8gb3IgbGVzcyBwcmVjaXNlKSB0aGFuIHRoZSB3YXkgaXQgd291
bGQgYmUgZmlsdGVyZWQgaWYgdGhpcyB3YXMgc3RyZW5ndGgtcmVkdWNlZCB0byBhCisgICAgICAg
IC8vIENoZWNrU3RydWN0dXJlLiBUaGlzIGlzIGZpbmUuIEl0J3MgbGVnYWwgZm9yIGRpZmZlcmVu
dCBwYXNzZXMgb3ZlciB0aGUgY29kZSB0byBwcm92ZQorICAgICAgICAvLyBkaWZmZXJlbnQgdGhp
bmdzIGFib3V0IHRoZSBjb2RlLCBzbyBsb25nIGFzIGFsbCBvZiB0aGVtIGFyZSBzb3VuZC4gVGhh
dCBldmVuIGluY2x1ZGVzCisgICAgICAgIC8vIG9uZSBndXkgcHJvdmluZyB0aGF0IGNvZGUgc2hv
dWxkIG5ldmVyIGV4ZWN1dGUgKGR1ZSB0byBhIGNvbnRyYWRpY3Rpb24pIGFuZCBhbm90aGVyIGd1
eQorICAgICAgICAvLyBub3QgZmluZGluZyB0aGF0IGNvbnRyYWRpY3Rpb24uIElmIHNvbWVvbmUg
ZXZlciBwcm92ZWQgdGhhdCB0aGVyZSB3b3VsZCBiZSBhCisgICAgICAgIC8vIGNvbnRyYWRpY3Rp
b24gdGhlbiB0aGVyZSBtdXN0IGFsd2F5cyBiZSBhIGNvbnRyYWRpY3Rpb24uIFRoaXMgaXMgdGhl
IGNhc2UgaGVyZS4KKyAgICAgICAgCisgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUt
Pm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCkudmFyaWFudHNbaV07CisgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gdmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgICAgIHNldC5maWx0ZXIoYmFzZSk7CisgICAgICAgICAg
ICBpZiAoc2V0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoZG9uZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQor
ICAgICAgICAgICAgYmFzZVNldC5tZXJnZShzZXQpOworICAgICAgICAgICAgaWYgKCF2YXJpYW50
LnNwZWNpZmljVmFsdWUoKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgp
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
QWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OworICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCisg
ICAgICAgICAgICAgICAgbV9ncmFwaCwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmZyZWV6ZSh2
YXJpYW50LnNwZWNpZmljVmFsdWUoKSksCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGV2ZXIgaGFw
cGVuIGJ1dCBpdCdzIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy4gQ3VycmVudGx5IG9ubHkgdGhlIGNv
bnN0YW50CisgICAgICAgIC8vIGZvbGRlciBjYW4gc3RyZW5ndGgtcmVkdWNlIGEgTXVsdGlHZXRC
eU9mZnNldCBkb3duIHRvIGl0cyBjb25zdGl0dWVudCBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAg
Ly8gR2V0QnV0dGVyZmx5LCBHZXRCeU9mZnNldCBhbmQvb3IgSlNDb25zdGFudC4gU28gaWYgdGhl
IE11bHRpR2V0QnlPZmZzZXQgaGFkIGFscmVhZHkgYmVlbgorICAgICAgICAvLyBpbiBhIHN0YXRl
IHdoZXJlIHN1Y2ggYSByZWR1Y3Rpb24gd2FzIHBvc3NpYmxlIHRoZW4gd2UgYXNrIHRoZSBjb25z
dGFudCBmb2xkZXIgdG8gbG9vaworICAgICAgICAvLyBhdCB0aGlzIGNvZGUuCisgICAgICAgIGlm
IChub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnQuc2l6ZSgpID09IDEpCisgICAg
ICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29udGFudHModHJ1ZSk7CisKKyAgICAgICAgaWYgKGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShiYXNlU2V0KSA9PSBDb250cmFk
aWN0aW9uKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAg
Ci0gICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KQotICAgICAg
ICAgICAgc2V0Lm1lcmdlKG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV0u
c3RydWN0dXJlU2V0KCkpOworICAgICAgICBpZiAocmVzdWx0Lm1fdmFsdWUpCisgICAgICAgICAg
ICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAKLSAgICAgICAgZmls
dGVyKG5vZGUtPmNoaWxkMSgpLCBzZXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFw
VG9wKCk7CisgICAgICAgIGZvck5vZGUobm9kZSkgPSByZXN1bHQ7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgICAgIApAQCAtMTcwNyw0NSArMTcyMSwxNCBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE11
bHRpUHV0QnlPZmZzZXQ6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWND
ZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlz
LgotCi0gICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3QgZmlsdGVyIGRvd24gdGhlIGNhc2VzIGlu
IE11bHRpUHV0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0cyBpbiBlaXRoZXIKLSAgICAgICAgLy8g
b25lIGNhc2UsIG9yIG5vdGhpbmcgYnV0IHJlcGxhY2UgY2FzZXMgYW5kIHRoZXkgaGF2ZSB0aGUg
c2FtZSBvZmZzZXQsIHRoZW4gd2Ugc2hvdWxkCi0gICAgICAgIC8vIGp1c3Qgc3RyZW5ndGggcmVk
dWNlIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBjb21iaW5hdGlvbiBvZiBDaGVja1N0cnVjdHVyZSwK
LSAgICAgICAgLy8gW1JlXUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBQdXRTdHJ1Y3R1cmUsIGFu
ZCBQdXRCeU9mZnNldC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzIyOQotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1
ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgIGJvb2wgZG9uZSA9
IGZhbHNlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9m
ZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
dmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQub2xkU3RydWN0dXJlKCkg
IT0gc3RydWN0dXJlKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlJlcGxhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgp
LCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbik7Ci0gICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0
KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwg
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3Vu
ZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkb25lKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1
cmVTZXQgb2xkU2V0OwogICAgICAgICBTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICBUcmFu
c2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAg
ICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgb2xkU2V0LmFkZCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
Y29udGFpbnModmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpIHsKKyAgICAgICAgICAgICAgICBtX3N0
YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRW
YXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5k
KFRyYW5zaXRpb24odmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUo
KSkpOwogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CkBAIC0xNzU1LDkgKzE3MzgsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZpbHRl
cihub2RlLT5jaGlsZDEoKSwgb2xkU2V0KTsKICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb25zKGNs
b2JiZXJMaW1pdCwgdHJhbnNpdGlvbnMpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5zZXQobV9ncmFwaCwgbmV3U2V0KTsKKyAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBuZXdTZXQpID09IENvbnRyYWRpY3Rpb24pCisg
ICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE2OTk3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw2ICsxNzksMTcg
QEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoRwogICAgIHJldHVybiBu
b3JtYWxpemVDbGFyaXR5KGdyYXBoKTsKIH0KIAorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZh
bHVlOjpjaGFuZ2VTdHJ1Y3R1cmUoR3JhcGgmIGdyYXBoLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG90
aGVyKQoreworICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7
CisgICAgbV9hcnJheU1vZGVzID0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7Cisg
ICAgbV9zdHJ1Y3R1cmUgPSBvdGhlcjsKKyAgICAKKyAgICBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwor
ICAgIAorICAgIHJldHVybiBub3JtYWxpemVDbGFyaXR5KGdyYXBoKTsKK30KKwogRmlsdHJhdGlv
blJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJBcnJheU1vZGVzKEFycmF5TW9kZXMgYXJyYXlN
b2RlcykKIHsKICAgICBBU1NFUlQoYXJyYXlNb2Rlcyk7CkBAIC0yMjksNiArMjQwLDEzIEBAIEZp
bHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQnkKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCitib29sIEFic3RyYWN0VmFsdWU6OmNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJl
KSBjb25zdAoreworICAgIHJldHVybiBjb3VsZEJlVHlwZShzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1
cmUoc3RydWN0dXJlKSkKKyAgICAgICAgJiYgKG1fYXJyYXlNb2RlcyAmIGFycmF5TW9kZUZyb21T
dHJ1Y3R1cmUoc3RydWN0dXJlKSkKKyAgICAgICAgJiYgbV9zdHJ1Y3R1cmUuY29udGFpbnMoc3Ry
dWN0dXJlKTsKK30KKwogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJWYWx1ZUJ5VHlwZSgpCiB7
CiAgICAgLy8gV2UgY291bGQgZ28gZnVydGhlciwgYW5kIGVuc3VyZSB0aGF0IGlmIHRoZSBmdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZSBjb250cmF2ZW5lcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE2OTk3OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTksMTMgKzI1OSwxNCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgfQogICAgIAog
ICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7
Ci0gICAgCiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJBcnJheU1vZGVzKEFycmF5TW9kZXMg
YXJyYXlNb2Rlcyk7Ci0gICAgCiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoU3BlY3VsYXRl
ZFR5cGUgdHlwZSk7Ci0gICAgCiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKGNv
bnN0IEZyb3plblZhbHVlJiB2YWx1ZSk7CiAgICAgCisgICAgRmlsdHJhdGlvblJlc3VsdCBjaGFu
Z2VTdHJ1Y3R1cmUoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKKyAgICAKKyAgICBib29s
IGNvbnRhaW5zKFN0cnVjdHVyZSopIGNvbnN0OworICAgIAogICAgIGJvb2wgdmFsaWRhdGUoSlNW
YWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0hlYXBUb3AoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwCShyZXZpc2lvbiAxNjk5NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0
MSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdl
Lm5vZGUoKTsKICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBw
cnVuZSB0aGUgdmFyaWFudHMsIHRoZW4gY2hlY2sgaWYgdGhlIE11bHRpR2V0QnlPZmZzZXQgY2Fu
IGJlCisgICAgICAgICAgICAgICAgLy8gc3RyZW5ndGgtcmVkdWNlZCB0byBhIEdldEJ5T2Zmc2V0
LgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3N0cnVjdHVyZS5v
bmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE2OTk3OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHNldENsb2Ji
ZXJlZChvdGhlci5pc0Nsb2JiZXJlZCgpKTsKICAgICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElO
RSBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgU3RydWN0dXJlU2V0JiBv
dGhlcikKKyAgICB7CisgICAgICAgIG1fc2V0ID0gb3RoZXI7CisgICAgICAgIHNldENsb2JiZXJl
ZChmYWxzZSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CiAgICAgQUxXQVlTX0lOTElO
RSBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSYgb3RoZXIpCiAgICAgewogICAgICAgICBtX3NldCA9IG90aGVyLm1fc2V0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233214</attachid>
            <date>2014-06-16 21:05:18 -0700</date>
            <delta_ts>2014-06-17 20:21:25 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19625</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
Y3BwCShyZXZpc2lvbiAxNjk5NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogCisjaW5jbHVkZSAiREZH
QWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC0xNjAsNiArMTYxLDgwIEBAIHZvaWQgU3RydWN0dXJlU2V0OjpleGNsdWRl
KGNvbnN0IFN0cnVjdHUKICAgICAgICAgY2xlYXIoKTsKIH0KIAorbmFtZXNwYWNlIHsKKworY2xh
c3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZUNvbnRhaW5zIHsKK3B1YmxpYzoKKyAgICBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlQ29udGFpbnMoY29uc3QgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdmFsdWUuY29udGFpbnMoc3RydWN0dXJlKTsKKyAgICB9Citwcml2YXRlOgorICAg
IGNvbnN0IERGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgbV92YWx1ZTsKK307CisKK2NsYXNz
IFNwZWN1bGF0ZWRUeXBlQ29udGFpbnMgeworcHVibGljOgorICAgIFNwZWN1bGF0ZWRUeXBlQ29u
dGFpbnMoU3BlY3VsYXRlZFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUgJiBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUo
c3RydWN0dXJlKTsKKyAgICB9Citwcml2YXRlOgorICAgIFNwZWN1bGF0ZWRUeXBlIG1fdHlwZTsK
K307CisKK2NsYXNzIEFycmF5TW9kZXNDb250YWlucyB7CitwdWJsaWM6CisgICAgQXJyYXlNb2Rl
c0NvbnRhaW5zKEFycmF5TW9kZXMgYXJyYXlNb2RlcykKKyAgICAgICAgOiBtX2FycmF5TW9kZXMo
YXJyYXlNb2RlcykKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FycmF5TW9kZXMgJiBh
cnJheU1vZGVzRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgIH0KK3ByaXZhdGU6CisgICAg
QXJyYXlNb2RlcyBtX2FycmF5TW9kZXM7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
Kwordm9pZCBTdHJ1Y3R1cmVTZXQ6OmZpbHRlcihjb25zdCBERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG90aGVyKQoreworICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWVDb250YWlucyBmdW5j
dG9yKG90aGVyKTsKKyAgICBnZW5lcmljRmlsdGVyKGZ1bmN0b3IpOworfQorCit2b2lkIFN0cnVj
dHVyZVNldDo6ZmlsdGVyKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCit7CisgICAgU3BlY3VsYXRlZFR5
cGVDb250YWlucyBmdW5jdG9yKHR5cGUpOworICAgIGdlbmVyaWNGaWx0ZXIoZnVuY3Rvcik7Cit9
CisKK3ZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoQXJyYXlNb2RlcyBhcnJheU1vZGVzKQorewor
ICAgIEFycmF5TW9kZXNDb250YWlucyBmdW5jdG9yKGFycmF5TW9kZXMpOworICAgIGdlbmVyaWNG
aWx0ZXIoZnVuY3Rvcik7Cit9CisKK3ZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoY29uc3QgREZH
OjpBYnN0cmFjdFZhbHVlJiBvdGhlcikKK3sKKyAgICBmaWx0ZXIob3RoZXIubV9zdHJ1Y3R1cmUp
OworICAgIGZpbHRlcihvdGhlci5tX3R5cGUpOworICAgIGZpbHRlcihvdGhlci5tX2FycmF5TW9k
ZXMpOworfQorCiBib29sIFN0cnVjdHVyZVNldDo6aXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKSBjb25zdAogewogICAgIGlmIChpc1RoaW4oKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMTY5OTc5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNl
IERGRyB7CitjbGFzcyBBYnN0cmFjdFZhbHVlOwogY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTsKIH0KIApAQCAtOTYsNiArOTcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZmlsdGVyKGNvbnN0
IFN0cnVjdHVyZVNldCYpOwogICAgIHZvaWQgZXhjbHVkZShjb25zdCBTdHJ1Y3R1cmVTZXQmKTsK
ICAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUm
KTsKKyAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSk7CisgICAgdm9pZCBmaWx0ZXIoQXJy
YXlNb2Rlcyk7CisgICAgdm9pZCBmaWx0ZXIoY29uc3QgREZHOjpBYnN0cmFjdFZhbHVlJik7Cisg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGdlbmVyaWNGaWx0
ZXIoRnVuY3RvciYgZnVuY3RvcikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZp
c2lvbiAxNjk5NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MzQsNyArMTUzNCw3IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYgKCFmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAg
IG9ic2VydmVUcmFuc2l0aW9uKAogICAgICAgICAgICAgICAgIGNsb2JiZXJMaW1pdCwgbm9kZS0+
dHJhbnNpdGlvbigpLT5wcmV2aW91cywgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBub2RlLT50cmFuc2l0
aW9uKCktPm5leHQpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdl
U3RydWN0dXJlKG1fZ3JhcGgsIG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCk7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CkBAIC0xNjY2LDM5ICsxNjY2
LDUzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDogewotICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBBU1NFUlQoISh2
YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUg
YWxyZWFkeSBlbnN1cmVkIHRoaXMuCi0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQganVzdCBmaWx0
ZXIgZG93biB0aGUgY2FzZXMgaW4gTXVsdGlHZXRCeU9mZnNldC4gSWYgdGhhdCByZXN1bHRzIGlu
IGFsbAotICAgICAgICAvLyBjYXNlcyBoYXZpbmcgdGhlIHNhbWUgb2Zmc2V0IHRoZW4gd2Ugc2hv
dWxkIHN0cmVuZ3RoIHJlZHVjZSBpdCB0byBhIENoZWNrU3RydWN0dXJlICsKLSAgICAgICAgLy8g
R2V0QnlPZmZzZXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzMyMjkKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUu
bV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICBib29sIGRvbmUgPSBm
YWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZz
ZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
R2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzW2ldOwotICAgICAgICAgICAgICAgIGlmICghdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5j
b250YWlucyhzdHJ1Y3R1cmUpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGZpbHRlcih2YWx1ZSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIC8vIFRoaXMgY29kZSB3aWxsIGZpbHRlciB0
aGUgYmFzZSB2YWx1ZSBpbiBhIG1hbm5lciB0aGF0IGlzIHBvc3NpYmx5IGRpZmZlcmVudCAoZWl0
aGVyIG1vcmUKKyAgICAgICAgLy8gb3IgbGVzcyBwcmVjaXNlKSB0aGFuIHRoZSB3YXkgaXQgd291
bGQgYmUgZmlsdGVyZWQgaWYgdGhpcyB3YXMgc3RyZW5ndGgtcmVkdWNlZCB0byBhCisgICAgICAg
IC8vIENoZWNrU3RydWN0dXJlLiBUaGlzIGlzIGZpbmUuIEl0J3MgbGVnYWwgZm9yIGRpZmZlcmVu
dCBwYXNzZXMgb3ZlciB0aGUgY29kZSB0byBwcm92ZQorICAgICAgICAvLyBkaWZmZXJlbnQgdGhp
bmdzIGFib3V0IHRoZSBjb2RlLCBzbyBsb25nIGFzIGFsbCBvZiB0aGVtIGFyZSBzb3VuZC4gVGhh
dCBldmVuIGluY2x1ZGVzCisgICAgICAgIC8vIG9uZSBndXkgcHJvdmluZyB0aGF0IGNvZGUgc2hv
dWxkIG5ldmVyIGV4ZWN1dGUgKGR1ZSB0byBhIGNvbnRyYWRpY3Rpb24pIGFuZCBhbm90aGVyIGd1
eQorICAgICAgICAvLyBub3QgZmluZGluZyB0aGF0IGNvbnRyYWRpY3Rpb24uIElmIHNvbWVvbmUg
ZXZlciBwcm92ZWQgdGhhdCB0aGVyZSB3b3VsZCBiZSBhCisgICAgICAgIC8vIGNvbnRyYWRpY3Rp
b24gdGhlbiB0aGVyZSBtdXN0IGFsd2F5cyBiZSBhIGNvbnRyYWRpY3Rpb24uIFRoaXMgaXMgdGhl
IGNhc2UgaGVyZS4KKyAgICAgICAgCisgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUt
Pm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCkudmFyaWFudHNbaV07CisgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gdmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgICAgIHNldC5maWx0ZXIoYmFzZSk7CisgICAgICAgICAg
ICBpZiAoc2V0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoZG9uZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQor
ICAgICAgICAgICAgYmFzZVNldC5tZXJnZShzZXQpOworICAgICAgICAgICAgaWYgKCF2YXJpYW50
LnNwZWNpZmljVmFsdWUoKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgp
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
QWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OworICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCisg
ICAgICAgICAgICAgICAgbV9ncmFwaCwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmZyZWV6ZSh2
YXJpYW50LnNwZWNpZmljVmFsdWUoKSksCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGV2ZXIgaGFw
cGVuIGJ1dCBpdCdzIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy4gQ3VycmVudGx5IG9ubHkgdGhlIGNv
bnN0YW50CisgICAgICAgIC8vIGZvbGRlciBjYW4gc3RyZW5ndGgtcmVkdWNlIGEgTXVsdGlHZXRC
eU9mZnNldCBkb3duIHRvIGl0cyBjb25zdGl0dWVudCBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAg
Ly8gR2V0QnV0dGVyZmx5LCBHZXRCeU9mZnNldCBhbmQvb3IgSlNDb25zdGFudC4gU28gaWYgdGhl
IE11bHRpR2V0QnlPZmZzZXQgaGFkIGFscmVhZHkgYmVlbgorICAgICAgICAvLyBpbiBhIHN0YXRl
IHdoZXJlIHN1Y2ggYSByZWR1Y3Rpb24gd2FzIHBvc3NpYmxlIHRoZW4gd2UgYXNrIHRoZSBjb25z
dGFudCBmb2xkZXIgdG8gbG9vaworICAgICAgICAvLyBhdCB0aGlzIGNvZGUuCisgICAgICAgIGlm
IChub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnQuc2l6ZSgpID09IDEpCisgICAg
ICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29udGFudHModHJ1ZSk7CisKKyAgICAgICAgaWYgKGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShiYXNlU2V0KSA9PSBDb250cmFk
aWN0aW9uKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAg
Ci0gICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KQotICAgICAg
ICAgICAgc2V0Lm1lcmdlKG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV0u
c3RydWN0dXJlU2V0KCkpOworICAgICAgICBpZiAocmVzdWx0Lm1fdmFsdWUpCisgICAgICAgICAg
ICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAKLSAgICAgICAgZmls
dGVyKG5vZGUtPmNoaWxkMSgpLCBzZXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFw
VG9wKCk7CisgICAgICAgIGZvck5vZGUobm9kZSkgPSByZXN1bHQ7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgICAgIApAQCAtMTcwNyw0NSArMTcyMSwxOSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE11
bHRpUHV0QnlPZmZzZXQ6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWND
ZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlz
LgotCi0gICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3QgZmlsdGVyIGRvd24gdGhlIGNhc2VzIGlu
IE11bHRpUHV0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0cyBpbiBlaXRoZXIKLSAgICAgICAgLy8g
b25lIGNhc2UsIG9yIG5vdGhpbmcgYnV0IHJlcGxhY2UgY2FzZXMgYW5kIHRoZXkgaGF2ZSB0aGUg
c2FtZSBvZmZzZXQsIHRoZW4gd2Ugc2hvdWxkCi0gICAgICAgIC8vIGp1c3Qgc3RyZW5ndGggcmVk
dWNlIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBjb21iaW5hdGlvbiBvZiBDaGVja1N0cnVjdHVyZSwK
LSAgICAgICAgLy8gW1JlXUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBQdXRTdHJ1Y3R1cmUsIGFu
ZCBQdXRCeU9mZnNldC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzIyOQotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1
ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgIGJvb2wgZG9uZSA9
IGZhbHNlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9m
ZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
dmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQub2xkU3RydWN0dXJlKCkg
IT0gc3RydWN0dXJlKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlJlcGxhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgp
LCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbik7Ci0gICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0
KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwg
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3Vu
ZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkb25lKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1
cmVTZXQgb2xkU2V0OwogICAgICAgICBTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICBUcmFu
c2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOworICAgICAgICAKKyAgICAgICAgLy8gT3JkaW5hcmls
eSB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIHdpdGggY2FsbGluZyBzZXRGb3VuZENvbnN0YW50cygp
CisgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIGVmZmVjdCBvbiBjb21waWxlIHRpbWVzLiBCdXQg
aW4gdGhpcyBjYXNlLCB0aGUgbG9naWMgd291bGQKKyAgICAgICAgLy8gYmUgcmF0aGVyIG9idHVz
ZSwgYW5kIHdlIG9ubHkgdXNlIE11bHRpUHV0QnlPZmZzZXQgb24gdGhlIEZUTCBwYXRoLiBXZQor
ICAgICAgICAvLyBkb24ndCBjYXJlIGFib3V0IGNvbXBpbGUgdGltZXMgc28gbXVjaCBvbiB0aGUg
RlRMIHBhdGguCisgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAg
ICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0
YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ld
OwotICAgICAgICAgICAgb2xkU2V0LmFkZCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY29udGFpbnModmFyaWFudC5vbGRT
dHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAg
ICAgICAgICB0cmFuc2l0aW9ucy5hcHBlbmQoVHJhbnNpdGlvbih2YXJpYW50Lm9sZFN0cnVjdHVy
ZSgpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0LmFk
ZCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTE3NTUsOSArMTc0Myw5IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBvbGRTZXQpOwogICAg
ICAgICBvYnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBuZXdTZXQpOworICAgICAg
ICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1fZ3JhcGgsIG5l
d1NldCkgPT0gQ29udHJhZGljdGlvbikKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTY5OTc5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc5LDYgKzE3OSwxNyBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFs
dWU6OmZpbHRlcihHCiAgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoZ3JhcGgpOwogfQogCitG
aWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmNoYW5nZVN0cnVjdHVyZShHcmFwaCYgZ3Jh
cGgsIGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCit7CisgICAgbV90eXBlICY9IG90aGVyLnNw
ZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICBtX2FycmF5TW9kZXMgPSBvdGhlci5hcnJh
eU1vZGVzRnJvbVN0cnVjdHVyZXMoKTsKKyAgICBtX3N0cnVjdHVyZSA9IG90aGVyOworICAgIAor
ICAgIGZpbHRlclZhbHVlQnlUeXBlKCk7CisgICAgCisgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJp
dHkoZ3JhcGgpOworfQorCiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlckFy
cmF5TW9kZXMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKQogewogICAgIEFTU0VSVChhcnJheU1vZGVz
KTsKQEAgLTIyOSw2ICsyNDAsMTMgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpm
aWx0ZXJCeQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2Jvb2wgQWJzdHJhY3RWYWx1ZTo6Y29u
dGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvdWxkQmVU
eXBlKHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKQorICAgICAgICAmJiAobV9h
cnJheU1vZGVzICYgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKQorICAgICAgICAm
JiBtX3N0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpOworfQorCiB2b2lkIEFic3RyYWN0VmFs
dWU6OmZpbHRlclZhbHVlQnlUeXBlKCkKIHsKICAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBh
bmQgZW5zdXJlIHRoYXQgaWYgdGhlIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAko
cmV2aXNpb24gMTY5OTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OSwxMyArMjU5LDE0IEBAIHN0cnVjdCBBYnN0
cmFjdFZhbHVlIHsKICAgICB9CiAgICAgCiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3Jh
cGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKLSAgICAKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZp
bHRlckFycmF5TW9kZXMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKTsKLSAgICAKICAgICBGaWx0cmF0
aW9uUmVzdWx0IGZpbHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKTsKLSAgICAKICAgICBGaWx0cmF0
aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoY29uc3QgRnJvemVuVmFsdWUmIHZhbHVlKTsKICAgICAK
KyAgICBGaWx0cmF0aW9uUmVzdWx0IGNoYW5nZVN0cnVjdHVyZShHcmFwaCYsIGNvbnN0IFN0cnVj
dHVyZVNldCYpOworICAgIAorICAgIGJvb2wgY29udGFpbnMoU3RydWN0dXJlKikgY29uc3Q7Cisg
ICAgCiAgICAgYm9vbCB2YWxpZGF0ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAg
ICAgaWYgKGlzSGVhcFRvcCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTk3OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzcsMjYgKzEzNywzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7
Ci0gICAgICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKLSAgICAg
ICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CisgICAgICAgICAgICAg
ICAgRWRnZSBiYXNlRWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUq
IGJhc2UgPSBiYXNlRWRnZS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNl
dERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogCi0gICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3Ry
dWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gRmlyc3QgcHJ1
bmUgdGhlIHZhcmlhbnRzLCB0aGVuIGNoZWNrIGlmIHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGNhbiBi
ZQorICAgICAgICAgICAgICAgIC8vIHN0cmVuZ3RoLXJlZHVjZWQgdG8gYSBHZXRCeU9mZnNldC4K
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRh
LnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBHZXRC
eUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5jb250YWlucyhzdHJ1Y3R1cmUpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIHN0cnVjdHVyZSwgdmFy
aWFudCwgZGF0YS5pZGVudGlmaWVyTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgZWxpbWlu
YXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUgYmFzZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2UpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleElu
QmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRl
IGJlZm9yZS4KKyAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxs
b3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
YXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRW
YXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAg
dmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5maWx0ZXIoYmFzZSk7CisgICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYW50LnN0cnVjdHVyZVNldCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52YXJpYW50cy5sYXN0KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoZGF0YS52YXJpYW50cy5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZW1pdEdldEJ5
T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgZGF0YS52YXJpYW50c1swXSwgZGF0YS5pZGVudGlm
aWVyTnVtYmVyKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKQEAgLTE2NCw2ICsxNjksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAgICAgICAgIE5vZGUq
IGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKICAgICAgICAgICAgICAgICBNdWx0aVB1dEJ5T2Zm
c2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlVmFsdWUgPSBtX3N0YXRl
LmZvck5vZGUoYmFzZSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52
YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlVmFs
dWUuY29udGFpbnMoZGF0YS52YXJpYW50c1tpXS5vbGRTdHJ1Y3R1cmUoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEudmFyaWFudHNbaS0tXSA9IGRhdGEudmFyaWFudHMubGFzdCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50cy5yZW1vdmVMYXN0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1
cmUub25seVN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQpAQCAt
MjA0LDcgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlbWl0R2V0
QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBzdHJ1Y3R1cmUsIHN0YXR1c1swXSwgaWRlbnRp
Zmllck51bWJlcik7CisgICAgICAgICAgICAgICAgZW1pdEdldEJ5T2Zmc2V0KGluZGV4SW5CbG9j
aywgbm9kZSwgc3RhdHVzWzBdLCBpZGVudGlmaWVyTnVtYmVyKTsKICAgICAgICAgICAgICAgICBl
bGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
QEAgLTI4NSw2ICsyOTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gd2UndmUgcHJvdmVu
IGZvciB0aGlzIG5vZGUgd291bGRuJ3Qgd2lkZW4gdGhlIHByb29mLiBJZiBpdCB3aWRlbnMgdGhl
IHByb29mCiAgICAgICAgICAgICAvLyAoaS5lLiBzYXlzIHRoYXQgdGhlIHNldCBjb250YWlucyBt
b3JlIHRoaW5ncyBpbiBpdCB0aGFuIGl0IHByZXZpb3VzbHkgZGlkKQogICAgICAgICAgICAgLy8g
dGhlbiB3ZSByZWZ1c2UgdG8gZm9sZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHN1
c3BpY2lvdXMuIEkgd29uZGVyIGlmIGl0IGNhbiBiZSByZW1vdmVkLgogICAgICAgICAgICAgQWJz
dHJhY3RWYWx1ZSBvbGRWYWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKTsKICAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUgY29uc3RhbnRWYWx1ZTsKICAgICAgICAgICAgIGNvbnN0YW50VmFsdWUu
c2V0KG1fZ3JhcGgsICp2YWx1ZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CkBA
IC0zMDcsNyArMzIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAg
fQogICAgICAgICAKLSAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxv
Y2ssIE5vZGUqIG5vZGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBHZXRCeUlkVmFyaWFu
dCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB2b2lkIGVtaXRHZXRC
eU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEdldEJ5SWRW
YXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsKICAgICAg
ICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRF
ZGdlID0gbm9kZS0+Y2hpbGQxKCk7CkBAIC0zMTYsNyArMzMwLDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYg
flNwZWNDZWxsOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKCF2YXJpYW50LmFsdGVybmF0ZUJh
c2UoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc3RydWN0dXJlLCB2YXJpYW50LnN0cnVjdHVy
ZVNldCgpLmNvbnRhaW5zKHN0cnVjdHVyZSkpOwogICAgICAgICAKICAgICAgICAgLy8gTm93IGJl
Zm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNlLCBwdXNoIHRoZSBDRkEgZm9yd2FyZCBvdmVyIHRoZSBH
ZXRCeUlkCiAgICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgd2Ugc2lnbmFsIHRvIHRoZSBsb29wIHRo
YXQgaXQgc2hvdWxkIGNvbnRpbnVlIGFuZCBub3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNjk5NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQ4LDcgKzk0OCw3IEBAIEZy
b3plblZhbHVlKiBHcmFwaDo6ZnJlZXplKEpTVmFsdWUgdmFsdWUKIAogRnJvemVuVmFsdWUqIEdy
YXBoOjpmcmVlemVTdHJvbmcoSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBGcm96ZW5WYWx1ZSogcmVz
dWx0ID0gZnJlZXplKHZhbHVlKTsKKyAgICBGcm96ZW5WYWx1ZSogcmVzdWx0ID0gZnJlZXplRnJh
Z2lsZSh2YWx1ZSk7CiAgICAgcmVzdWx0LT5zdHJlbmd0aGVuVG8oU3Ryb25nVmFsdWUpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CShyZXZpc2lvbiAxNjk5NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw4ICsxNDYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZXRocmVhZCgpOwogICAgIAogICAgIEZyb3plblZhbHVlKiBmcmVlemVGcmFnaWxlKEpTVmFsdWUg
dmFsdWUpOwotICAgIEZyb3plblZhbHVlKiBmcmVlemUoSlNWYWx1ZSB2YWx1ZSk7IC8vIFdlIHVz
ZSB3ZWFrIGZyZWV6aW5nIGJ5IGRlZmF1bHQuCi0gICAgRnJvemVuVmFsdWUqIGZyZWV6ZVN0cm9u
ZyhKU1ZhbHVlIHZhbHVlKTsgLy8gU2hvcnRoYW5kIGZvciBmcmVlemUodmFsdWUpLT5tYXJrU3Ry
b25nbHkoKS4KKyAgICBGcm96ZW5WYWx1ZSogZnJlZXplKEpTVmFsdWUgdmFsdWUpOyAvLyBXZSB1
c2Ugd2VhayBmcmVlemluZyBieSBkZWZhdWx0LiBTaG9ydGhhbmQgZm9yIGZyZWV6ZUZyYWdpbGUo
dmFsdWUpLT5zdHJlbmd0aGVuVG8oV2Vha1ZhbHVlKTsKKyAgICBGcm96ZW5WYWx1ZSogZnJlZXpl
U3Ryb25nKEpTVmFsdWUgdmFsdWUpOyAvLyBTaG9ydGhhbmQgZm9yIGZyZWV6ZUZyYWdpbGUodmFs
dWUpLT5zdHJlbmd0aGVuVG8oU3Ryb25nVmFsdWUpLgogICAgIAogICAgIHZvaWQgY29udmVydFRv
Q29uc3RhbnQoTm9kZSogbm9kZSwgRnJvemVuVmFsdWUqIHZhbHVlKTsKICAgICB2b2lkIGNvbnZl
cnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJ
KHJldmlzaW9uIDE2OTk3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIHNldENsb2JiZXJlZChvdGhlci5pc0Nsb2JiZXJlZCgpKTsKICAgICB9CiAg
ICAgCisgICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvcGVyYXRvcj0o
Y29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fc2V0ID0gb3RoZXI7
CisgICAgICAgIHNldENsb2JiZXJlZChmYWxzZSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CiAgICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvcGVyYXRvcj0o
Y29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCiAgICAgewogICAgICAgICBtX3Nl
dCA9IG90aGVyLm1fc2V0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233279</attachid>
            <date>2014-06-17 20:21:25 -0700</date>
            <delta_ts>2014-06-17 21:06:11 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22273</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmNwcAkocmV2aXNpb24gMTcwMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDEyICsxMDgsMTQg
QEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAogICAgIAogICAgIG91
dC5wcmludCgKICAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQp
LCAiLCAiLAotICAgICAgICAiWyIsIGxpc3REdW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVja3Ms
IGNvbnRleHQpLCAiXSwgIiwKLSAgICAgICAgImFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQo
SlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAgInNwZWNp
ZmljVmFsdWUgPSAiLCBpbkNvbnRleHQoc3BlY2lmaWNWYWx1ZSgpLCBjb250ZXh0KSwgIiwgIiwK
LSAgICAgICAgIm9mZnNldCA9ICIsIG9mZnNldCgpKTsKKyAgICAgICAgIlsiLCBsaXN0RHVtcElu
Q29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250ZXh0KSwgIl0iKTsKKyAgICBpZiAobV9hbHRl
cm5hdGVCYXNlKQorICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29u
dGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKKyAgICBpZiAoc3BlY2lm
aWNWYWx1ZSgpKQorICAgICAgICBvdXQucHJpbnQoIiwgc3BlY2lmaWNWYWx1ZSA9ICIsIGluQ29u
dGV4dChzcGVjaWZpY1ZhbHVlKCksIGNvbnRleHQpKTsKKyAgICBvdXQucHJpbnQoIiwgb2Zmc2V0
ID0gIiwgb2Zmc2V0KCkpOwogICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQotICAgICAgICBvdXQu
cHJpbnQoImNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIG91dC5wcmludCgi
LCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOwogICAgIG91dC5wcmludCgiPiIpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlh
bnQuaAkocmV2aXNpb24gMTcwMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhIW1fc3RydWN0dXJlU2V0LnNpemUo
KTsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
dWN0dXJlU2V0OyB9CisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBt
X3N0cnVjdHVyZVNldDsgfQogICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3Im
IGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudENoZWNrczsgfQogICAg
IEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9hbHRlcm5hdGVCYXNl
OyB9CiAgICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZp
Y1ZhbHVlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMTcwMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKIAorI2lu
Y2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTYwLDYgKzE2MSw4MCBAQCB2b2lkIFN0cnVjdHVyZVNl
dDo6ZXhjbHVkZShjb25zdCBTdHJ1Y3R1CiAgICAgICAgIGNsZWFyKCk7CiB9CiAKK25hbWVzcGFj
ZSB7CisKK2NsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWVDb250YWlucyB7CitwdWJsaWM6Cisg
ICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZUNvbnRhaW5zKGNvbnN0IERGRzo6U3RydWN0dXJlQWJz
dHJhY3RWYWx1ZSYgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhbHVlLmNvbnRhaW5zKHN0cnVjdHVyZSk7CisgICAgfQorcHJp
dmF0ZToKKyAgICBjb25zdCBERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG1fdmFsdWU7Cit9
OworCitjbGFzcyBTcGVjdWxhdGVkVHlwZUNvbnRhaW5zIHsKK3B1YmxpYzoKKyAgICBTcGVjdWxh
dGVkVHlwZUNvbnRhaW5zKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5
cGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yKCkoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlICYgc3BlY3VsYXRpb25Gcm9t
U3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBTcGVjdWxhdGVkVHlw
ZSBtX3R5cGU7Cit9OworCitjbGFzcyBBcnJheU1vZGVzQ29udGFpbnMgeworcHVibGljOgorICAg
IEFycmF5TW9kZXNDb250YWlucyhBcnJheU1vZGVzIGFycmF5TW9kZXMpCisgICAgICAgIDogbV9h
cnJheU1vZGVzKGFycmF5TW9kZXMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yKCkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gbV9hcnJh
eU1vZGVzICYgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgIH0KK3ByaXZh
dGU6CisgICAgQXJyYXlNb2RlcyBtX2FycmF5TW9kZXM7Cit9OworCit9IC8vIGFub255bW91cyBu
YW1lc3BhY2UKKwordm9pZCBTdHJ1Y3R1cmVTZXQ6OmZpbHRlcihjb25zdCBERkc6OlN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUmIG90aGVyKQoreworICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWVDb250
YWlucyBmdW5jdG9yKG90aGVyKTsKKyAgICBnZW5lcmljRmlsdGVyKGZ1bmN0b3IpOworfQorCit2
b2lkIFN0cnVjdHVyZVNldDo6ZmlsdGVyKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCit7CisgICAgU3Bl
Y3VsYXRlZFR5cGVDb250YWlucyBmdW5jdG9yKHR5cGUpOworICAgIGdlbmVyaWNGaWx0ZXIoZnVu
Y3Rvcik7Cit9CisKK3ZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXJBcnJheU1vZGVzKEFycmF5TW9k
ZXMgYXJyYXlNb2RlcykKK3sKKyAgICBBcnJheU1vZGVzQ29udGFpbnMgZnVuY3RvcihhcnJheU1v
ZGVzKTsKKyAgICBnZW5lcmljRmlsdGVyKGZ1bmN0b3IpOworfQorCit2b2lkIFN0cnVjdHVyZVNl
dDo6ZmlsdGVyKGNvbnN0IERGRzo6QWJzdHJhY3RWYWx1ZSYgb3RoZXIpCit7CisgICAgZmlsdGVy
KG90aGVyLm1fc3RydWN0dXJlKTsKKyAgICBmaWx0ZXIob3RoZXIubV90eXBlKTsKKyAgICBmaWx0
ZXJBcnJheU1vZGVzKG90aGVyLm1fYXJyYXlNb2Rlcyk7Cit9CisKIGJvb2wgU3RydWN0dXJlU2V0
Ojppc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYg
KGlzVGhpbigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVNldC5oCShyZXZpc2lvbiAxNzAwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBERkcgewogY2xhc3MgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTsKK3N0cnVjdCBBYnN0cmFjdFZhbHVlOwogfQogCiBjbGFzcyBTdHJ1Y3R1cmVTZXQg
ewpAQCAtOTYsNiArOTcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYpOwogICAgIHZvaWQgZXhjbHVkZShjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAK
KyAgICB2b2lkIGZpbHRlcihjb25zdCBERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUmKTsKKyAg
ICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSk7CisgICAgdm9pZCBmaWx0ZXJBcnJheU1vZGVz
KEFycmF5TW9kZXMpOworICAgIHZvaWQgZmlsdGVyKGNvbnN0IERGRzo6QWJzdHJhY3RWYWx1ZSYp
OworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBnZW5lcmlj
RmlsdGVyKEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
cmV2aXNpb24gMTcwMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ4LDcgKzE0NDgsNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlmICgh
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNDbGVhcigpKSB7CiAgICAgICAg
ICAgICBvYnNlcnZlVHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICBjbG9iYmVyTGltaXQsIG5v
ZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMsIG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCk7Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgbm9kZS0+dHJh
bnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNo
YW5nZVN0cnVjdHVyZShtX2dyYXBoLCBub2RlLT50cmFuc2l0aW9uKCktPm5leHQpOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0QnV0dGVyZmx5OgpAQCAtMTU3NywzOSAr
MTU3Nyw0NCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6IHsKLSAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQVNTRVJU
KCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBo
YXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgotCi0gICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3Qg
ZmlsdGVyIGRvd24gdGhlIGNhc2VzIGluIE11bHRpR2V0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0
cyBpbiBhbGwKLSAgICAgICAgLy8gY2FzZXMgaGF2aW5nIHRoZSBzYW1lIG9mZnNldCB0aGVuIHdl
IHNob3VsZCBzdHJlbmd0aCByZWR1Y2UgaXQgdG8gYSBDaGVja1N0cnVjdHVyZSArCi0gICAgICAg
IC8vIEdldEJ5T2Zmc2V0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTMzMjI5Ci0gICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZh
bHVlLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgYm9vbCBkb25l
ID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5
T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIGNv
bnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEo
KS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXZhcmlhbnQuc3RydWN0dXJlU2V0
KCkuY29udGFpbnMoc3RydWN0dXJlKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFz
ZSgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBmaWx0ZXIodmFsdWUsIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwotICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIFRoaXMgY29kZSB3aWxsIGZpbHRlciB0aGUgYmFz
ZSB2YWx1ZSBpbiBhIG1hbm5lciB0aGF0IGlzIHBvc3NpYmx5IGRpZmZlcmVudCAoZWl0aGVyIG1v
cmUKKyAgICAgICAgLy8gb3IgbGVzcyBwcmVjaXNlKSB0aGFuIHRoZSB3YXkgaXQgd291bGQgYmUg
ZmlsdGVyZWQgaWYgdGhpcyB3YXMgc3RyZW5ndGgtcmVkdWNlZCB0byBhCisgICAgICAgIC8vIENo
ZWNrU3RydWN0dXJlLiBUaGlzIGlzIGZpbmUuIEl0J3MgbGVnYWwgZm9yIGRpZmZlcmVudCBwYXNz
ZXMgb3ZlciB0aGUgY29kZSB0byBwcm92ZQorICAgICAgICAvLyBkaWZmZXJlbnQgdGhpbmdzIGFi
b3V0IHRoZSBjb2RlLCBzbyBsb25nIGFzIGFsbCBvZiB0aGVtIGFyZSBzb3VuZC4gVGhhdCBldmVu
IGluY2x1ZGVzCisgICAgICAgIC8vIG9uZSBndXkgcHJvdmluZyB0aGF0IGNvZGUgc2hvdWxkIG5l
dmVyIGV4ZWN1dGUgKGR1ZSB0byBhIGNvbnRyYWRpY3Rpb24pIGFuZCBhbm90aGVyIGd1eQorICAg
ICAgICAvLyBub3QgZmluZGluZyB0aGF0IGNvbnRyYWRpY3Rpb24uIElmIHNvbWVvbmUgZXZlciBw
cm92ZWQgdGhhdCB0aGVyZSB3b3VsZCBiZSBhCisgICAgICAgIC8vIGNvbnRyYWRpY3Rpb24gdGhl
biB0aGVyZSBtdXN0IGFsd2F5cyBiZSBhIGNvbnRyYWRpY3Rpb24uIFRoaXMgaXMgdGhlIGNhc2Ug
aGVyZS4KKyAgICAgICAgCisgICAgICAgIC8vIE9yZGluYXJpbHkgeW91IGhhdmUgdG8gYmUgY2Fy
ZWZ1bCB3aXRoIGNhbGxpbmcgc2V0Rm91bmRDb25zdGFudHMoKQorICAgICAgICAvLyBiZWNhdXNl
IG9mIHRoZSBlZmZlY3Qgb24gY29tcGlsZSB0aW1lcywgYnV0IHRoaXMgbm9kZSBpcyBGVEwtb25s
eS4KKyAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgCisg
ICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCku
dmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFy
aWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAg
ICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAg
ICAgIHNldC5maWx0ZXIoYmFzZSk7CisgICAgICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGJhc2VTZXQubWVyZ2Uoc2V0KTsK
KyAgICAgICAgICAgIGlmICghdmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpIHsKKyAgICAgICAgICAg
ICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkb25lKQotICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OworICAgICAgICAgICAgdGhp
c1Jlc3VsdC5zZXQoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwKKyAgICAgICAgICAgICAgICAq
bV9ncmFwaC5mcmVlemUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpLAorICAgICAgICAgICAgICAg
IG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworICAgICAgICAgICAgcmVzdWx0Lm1l
cmdlKHRoaXNSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmVT
ZXQgc2V0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIHNldC5tZXJnZShub2Rl
LT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldLnN0cnVjdHVyZVNldCgpKTsKKyAg
ICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBo
LCBiYXNlU2V0KSA9PSBDb250cmFkaWN0aW9uKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1Zh
bGlkKGZhbHNlKTsKICAgICAgICAgCi0gICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc2V0
KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBmb3JOb2Rl
KG5vZGUpID0gcmVzdWx0OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAg
LTE2MTgsNDUgKzE2MjMsMTcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OiB7Ci0gICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmlu
ZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KLQotICAgICAgICAvLyBUaGlzIHNo
b3VsZCBqdXN0IGZpbHRlciBkb3duIHRoZSBjYXNlcyBpbiBNdWx0aVB1dEJ5T2Zmc2V0LiBJZiB0
aGF0IHJlc3VsdHMgaW4gZWl0aGVyCi0gICAgICAgIC8vIG9uZSBjYXNlLCBvciBub3RoaW5nIGJ1
dCByZXBsYWNlIGNhc2VzIGFuZCB0aGV5IGhhdmUgdGhlIHNhbWUgb2Zmc2V0LCB0aGVuIHdlIHNo
b3VsZAotICAgICAgICAvLyBqdXN0IHN0cmVuZ3RoIHJlZHVjZSBpdCB0byB0aGUgYXBwcm9wcmlh
dGUgY29tYmluYXRpb24gb2YgQ2hlY2tTdHJ1Y3R1cmUsCi0gICAgICAgIC8vIFtSZV1BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSwgUHV0U3RydWN0dXJlLCBhbmQgUHV0QnlPZmZzZXQuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKLSAgICAg
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmUub25seVN0cnVj
dHVyZSgpKSB7Ci0gICAgICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlh
bnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAg
ICAgICAgIGlmICh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpICE9IHN0cnVjdHVyZSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RydWN0dXJlKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pOwotICAgICAgICAgICAg
ICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIHZhcmlhbnQubmV3U3RydWN0dXJlKCkp
OwotICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoZG9uZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RydWN0dXJlU2V0IG9sZFNldDsKICAgICAgICAg
U3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9u
czsKKyAgICAgICAgCisgICAgICAgIC8vIE9yZGluYXJpbHkgeW91IGhhdmUgdG8gYmUgY2FyZWZ1
bCB3aXRoIGNhbGxpbmcgc2V0Rm91bmRDb25zdGFudHMoKQorICAgICAgICAvLyBiZWNhdXNlIG9m
IHRoZSBlZmZlY3Qgb24gY29tcGlsZSB0aW1lcywgYnV0IHRoaXMgbm9kZSBpcyBGVEwtb25seS4K
KyAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAg
ICAgICBvbGRTZXQuYWRkKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgaWYg
KCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jb250YWlucyh2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIHRy
YW5zaXRpb25zLmFwcGVuZChUcmFuc2l0aW9uKHZhcmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlh
bnQubmV3U3RydWN0dXJlKCkpKTsKICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpOwpAQCAtMTY2Niw5ICsxNjQzLDkgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIG9sZFNldCk7CiAgICAgICAgIG9ic2Vy
dmVUcmFuc2l0aW9ucyhjbG9iYmVyTGltaXQsIHRyYW5zaXRpb25zKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIG5ld1NldCk7CisgICAgICAgIGlmIChmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgbmV3U2V0KSA9PSBD
b250cmFkaWN0aW9uKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxNzAwNjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzksNiArMTc5LDE3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVy
KEcKICAgICByZXR1cm4gbm9ybWFsaXplQ2xhcml0eShncmFwaCk7CiB9CiAKK0ZpbHRyYXRpb25S
ZXN1bHQgQWJzdHJhY3RWYWx1ZTo6Y2hhbmdlU3RydWN0dXJlKEdyYXBoJiBncmFwaCwgY29uc3Qg
U3RydWN0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25G
cm9tU3RydWN0dXJlcygpOworICAgIG1fYXJyYXlNb2RlcyA9IG90aGVyLmFycmF5TW9kZXNGcm9t
U3RydWN0dXJlcygpOworICAgIG1fc3RydWN0dXJlID0gb3RoZXI7CisgICAgCisgICAgZmlsdGVy
VmFsdWVCeVR5cGUoKTsKKyAgICAKKyAgICByZXR1cm4gbm9ybWFsaXplQ2xhcml0eShncmFwaCk7
Cit9CisKIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQXJyYXlNb2RlcyhB
cnJheU1vZGVzIGFycmF5TW9kZXMpCiB7CiAgICAgQVNTRVJUKGFycmF5TW9kZXMpOwpAQCAtMjI5
LDYgKzI0MCwxMyBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlckJ5CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorYm9vbCBBYnN0cmFjdFZhbHVlOjpjb250YWlucyhTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICByZXR1cm4gY291bGRCZVR5cGUoc3BlY3Vs
YXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpCisgICAgICAgICYmIChtX2FycmF5TW9kZXMg
JiBhcnJheU1vZGVGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpCisgICAgICAgICYmIG1fc3RydWN0
dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSk7Cit9CisKIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RW
YWx1ZTo6ZmlsdGVyKGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKQogewogICAgIG1fdHlwZSAm
PSBvdGhlci5tX3R5cGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTcwMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NywxMiArMjY3LDEy
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwog
ICAgIH0KICAgICAKLSAgICBib29sIGNvdWxkQmVUeXBlKFNwZWN1bGF0ZWRUeXBlIGRlc2lyZWRU
eXBlKQorICAgIGJvb2wgY291bGRCZVR5cGUoU3BlY3VsYXRlZFR5cGUgZGVzaXJlZFR5cGUpIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gISEobV90eXBlICYgZGVzaXJlZFR5cGUpOwogICAg
IH0KICAgICAKLSAgICBib29sIGlzVHlwZShTcGVjdWxhdGVkVHlwZSBkZXNpcmVkVHlwZSkKKyAg
ICBib29sIGlzVHlwZShTcGVjdWxhdGVkVHlwZSBkZXNpcmVkVHlwZSkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiAhKG1fdHlwZSAmIH5kZXNpcmVkVHlwZSk7CiAgICAgfQpAQCAtMjg0LDYg
KzI4NCwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgCiAgICAgRmlsdHJhdGlvblJl
c3VsdCBmaWx0ZXIoY29uc3QgQWJzdHJhY3RWYWx1ZSYpOwogICAgIAorICAgIEZpbHRyYXRpb25S
ZXN1bHQgY2hhbmdlU3RydWN0dXJlKEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAg
CisgICAgYm9vbCBjb250YWlucyhTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICAKICAgICBib29sIHZh
bGlkYXRlKEpTVmFsdWUgdmFsdWUpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNIZWFwVG9w
KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTcwMDY3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0NywzNSArMTQ3LDQ4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6IHsKLSAgICAgICAgICAgICAg
ICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwotICAgICAgICAgICAgICAgIE5vZGUq
IGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBFZGdlIGJhc2VFZGdl
ID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGJhc2VFZGdl
Lm5vZGUoKTsKICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1cmUub25seVN0cnVj
dHVyZSgpOwotICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBwcnVuZSB0aGUgdmFyaWFudHMs
IHRoZW4gY2hlY2sgaWYgdGhlIE11bHRpR2V0QnlPZmZzZXQgY2FuIGJlCisgICAgICAgICAgICAg
ICAgLy8gc3RyZW5ndGgtcmVkdWNlZCB0byBhIEdldEJ5T2Zmc2V0LgogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJp
YW50ID0gZGF0YS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJpYW50
LnN0cnVjdHVyZVNldCgpLmNvbnRhaW5zKHN0cnVjdHVyZSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldEJ5
T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgc3RydWN0dXJlLCB2YXJpYW50LCBkYXRhLmlkZW50
aWZpZXJOdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBi
YXNlVmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoYmFzZSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2gg
Q0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3JlLgorICAgICAg
ICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBj
b25zdGFudCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
PSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnN0cnVjdHVy
ZVNldCgpLmZpbHRlcihiYXNlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFu
dC5zdHJ1Y3R1cmVTZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGEudmFyaWFudHNbaS0tXSA9IGRhdGEudmFyaWFudHMubGFzdCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YS52YXJpYW50cy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKGRhdGEudmFyaWFudHMuc2l6ZSgpICE9IDEpCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRl
eEluQmxvY2ssIG5vZGUsIGRhdGEudmFyaWFudHNbMF0sIGRhdGEuaWRlbnRpZmllck51bWJlcik7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6IHsKLSAgICAgICAgICAgICAgICBF
ZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwotICAgICAgICAgICAgICAgIE5vZGUqIGNo
aWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBFZGdlIGJhc2VFZGdlID0g
bm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGJhc2VFZGdlLm5v
ZGUoKTsKICAgICAgICAgICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUt
Pm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSBiYXNlVmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoYmFzZSk7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlVmFsdWUuY29udGFpbnMoZGF0
YS52YXJpYW50c1tpXS5vbGRTdHJ1Y3R1cmUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGEudmFyaWFudHNbaS0tXSA9IGRhdGEudmFyaWFudHMubGFzdCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS52YXJpYW50cy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVy
ZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JO
b2RlKGJhc2UpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBp
ZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCkBAIC0yMTQsNyArMjI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIHN0cnVjdHVyZSwgc3RhdHVzWzBd
LCBpZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5k
ZXhJbkJsb2NrLCBub2RlLCBzdGF0dXNbMF0sIGlkZW50aWZpZXJOdW1iZXIpOwogICAgICAgICAg
ICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQpAQCAtMzM2LDcgKzM0OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBjaGFu
Z2VkOwogICAgIH0KICAgICAgICAgCi0gICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQg
aW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2V0
QnlJZFZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgdm9p
ZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25z
dCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKICAg
ICB7CiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICBF
ZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwpAQCAtMzQ0LDkgKzM1Nyw2IEBAIHByaXZh
dGU6CiAKICAgICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGls
ZCkubV90eXBlICYgflNwZWNDZWxsOwogICAgICAgICAKLSAgICAgICAgQVNTRVJUKCF2YXJpYW50
LmFsdGVybmF0ZUJhc2UoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc3RydWN0dXJlLCB2YXJp
YW50LnN0cnVjdHVyZVNldCgpLmNvbnRhaW5zKHN0cnVjdHVyZSkpOwotICAgICAgICAKICAgICAg
ICAgLy8gTm93IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNlLCBwdXNoIHRoZSBDRkEgZm9yd2Fy
ZCBvdmVyIHRoZSBHZXRCeUlkCiAgICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgd2Ugc2lnbmFsIHRv
IHRoZSBsb29wIHRoYXQgaXQgc2hvdWxkIGNvbnRpbnVlIGFuZCBub3QKICAgICAgICAgLy8gZG8g
YW55IGVsaW1pbmF0aW9ucy4KQEAgLTM2Miw3ICszNzIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgY2hpbGRFZGdlLnNldFVz
ZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgp
KSB7CisgICAgICAgICAgICBjaGlsZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KGlu
ZGV4SW5CbG9jaywgb3JpZ2luLCB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7CisgICAgICAgICAg
ICBjaGlsZEVkZ2UgPSBFZGdlKGNoaWxkLCBLbm93bkNlbGxVc2UpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAg
IAogICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTcwMDY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1MSw3
ICs5NTEsNyBAQCBGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZShKU1ZhbHVlIHZhbHVlCiAKIEZy
b3plblZhbHVlKiBHcmFwaDo6ZnJlZXplU3Ryb25nKEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgRnJv
emVuVmFsdWUqIHJlc3VsdCA9IGZyZWV6ZSh2YWx1ZSk7CisgICAgRnJvemVuVmFsdWUqIHJlc3Vs
dCA9IGZyZWV6ZUZyYWdpbGUodmFsdWUpOwogICAgIHJlc3VsdC0+c3RyZW5ndGhlblRvKFN0cm9u
Z1ZhbHVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTcwMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsOCArMTQ2LDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGV0aHJlYWQoKTsKICAgICAKICAgICBGcm96ZW5WYWx1ZSogZnJlZXplRnJh
Z2lsZShKU1ZhbHVlIHZhbHVlKTsKLSAgICBGcm96ZW5WYWx1ZSogZnJlZXplKEpTVmFsdWUgdmFs
dWUpOyAvLyBXZSB1c2Ugd2VhayBmcmVlemluZyBieSBkZWZhdWx0LgotICAgIEZyb3plblZhbHVl
KiBmcmVlemVTdHJvbmcoSlNWYWx1ZSB2YWx1ZSk7IC8vIFNob3J0aGFuZCBmb3IgZnJlZXplKHZh
bHVlKS0+bWFya1N0cm9uZ2x5KCkuCisgICAgRnJvemVuVmFsdWUqIGZyZWV6ZShKU1ZhbHVlIHZh
bHVlKTsgLy8gV2UgdXNlIHdlYWsgZnJlZXppbmcgYnkgZGVmYXVsdC4gU2hvcnRoYW5kIGZvciBm
cmVlemVGcmFnaWxlKHZhbHVlKS0+c3RyZW5ndGhlblRvKFdlYWtWYWx1ZSk7CisgICAgRnJvemVu
VmFsdWUqIGZyZWV6ZVN0cm9uZyhKU1ZhbHVlIHZhbHVlKTsgLy8gU2hvcnRoYW5kIGZvciBmcmVl
emVGcmFnaWxlKHZhbHVlKS0+c3RyZW5ndGhlblRvKFN0cm9uZ1ZhbHVlKS4KICAgICAKICAgICB2
b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIEZyb3plblZhbHVlKiB2YWx1ZSk7CiAg
ICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNzAwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiAr
NTUsMTggQEAgcHVibGljOgogICAgICAgICBzZXRDbG9iYmVyZWQob3RoZXIuaXNDbG9iYmVyZWQo
KSk7CiAgICAgfQogICAgIAorICAgIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZSYgb3BlcmF0b3I9KFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgbV9zZXQg
PSBzdHJ1Y3R1cmU7CisgICAgICAgIHNldENsb2JiZXJlZChmYWxzZSk7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisgICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBvcGVyYXRvcj0oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIG1f
c2V0ID0gb3RoZXI7CisgICAgICAgIHNldENsb2JiZXJlZChmYWxzZSk7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CiAgICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBvcGVyYXRvcj0oY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCiAgICAgewog
ICAgICAgICBtX3NldCA9IG90aGVyLm1fc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE3MDA2NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjEwLDYgKzMyMTAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIGJhc2Ug
PSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAKICAgICAgICAgTXVsdGlHZXRC
eU9mZnNldERhdGEmIGRhdGEgPSBtX25vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CisKKyAg
ICAgICAgaWYgKGRhdGEudmFyaWFudHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBQcm90
ZWN0IGFnYWluc3QgY3JlYXRpbmcgYSBQaGkgZnVuY3Rpb24gd2l0aCB6ZXJvIGlucHV0cy4gTExW
TSBkb2Vzbid0IGxpa2UgdGhhdC4KKyAgICAgICAgICAgIHRlcm1pbmF0ZShCYWRDYWNoZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxM
QmFzaWNCbG9jaywgMj4gYmxvY2tzKGRhdGEudmFyaWFudHMuc2l6ZSgpKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233283</attachid>
            <date>2014-06-17 21:06:11 -0700</date>
            <delta_ts>2014-06-18 13:29:30 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29653</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmNwcAkocmV2aXNpb24gMTcwMDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDEyICsxMDgsMTQg
QEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAogICAgIAogICAgIG91
dC5wcmludCgKICAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQp
LCAiLCAiLAotICAgICAgICAiWyIsIGxpc3REdW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVja3Ms
IGNvbnRleHQpLCAiXSwgIiwKLSAgICAgICAgImFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQo
SlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAgInNwZWNp
ZmljVmFsdWUgPSAiLCBpbkNvbnRleHQoc3BlY2lmaWNWYWx1ZSgpLCBjb250ZXh0KSwgIiwgIiwK
LSAgICAgICAgIm9mZnNldCA9ICIsIG9mZnNldCgpKTsKKyAgICAgICAgIlsiLCBsaXN0RHVtcElu
Q29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250ZXh0KSwgIl0iKTsKKyAgICBpZiAobV9hbHRl
cm5hdGVCYXNlKQorICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29u
dGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKKyAgICBpZiAoc3BlY2lm
aWNWYWx1ZSgpKQorICAgICAgICBvdXQucHJpbnQoIiwgc3BlY2lmaWNWYWx1ZSA9ICIsIGluQ29u
dGV4dChzcGVjaWZpY1ZhbHVlKCksIGNvbnRleHQpKTsKKyAgICBvdXQucHJpbnQoIiwgb2Zmc2V0
ID0gIiwgb2Zmc2V0KCkpOwogICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQotICAgICAgICBvdXQu
cHJpbnQoImNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIG91dC5wcmludCgi
LCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOwogICAgIG91dC5wcmludCgiPiIpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlh
bnQuaAkocmV2aXNpb24gMTcwMDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhIW1fc3RydWN0dXJlU2V0LnNpemUo
KTsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
dWN0dXJlU2V0OyB9CisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBt
X3N0cnVjdHVyZVNldDsgfQogICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3Im
IGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudENoZWNrczsgfQogICAg
IEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9hbHRlcm5hdGVCYXNl
OyB9CiAgICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZp
Y1ZhbHVlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwMDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDEy
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwogICAgIH0KICAgICAK
KyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UpOworICAgICAgICByZXR1
cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAogICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0OwogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTZXQuY3BwCShyZXZpc2lvbiAxNzAwOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogCisj
aW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNjAsNiArMTYxLDgwIEBAIHZvaWQgU3RydWN0dXJl
U2V0OjpleGNsdWRlKGNvbnN0IFN0cnVjdHUKICAgICAgICAgY2xlYXIoKTsKIH0KIAorbmFtZXNw
YWNlIHsKKworY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZUNvbnRhaW5zIHsKK3B1YmxpYzoK
KyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlQ29udGFpbnMoY29uc3QgREZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUuY29udGFpbnMoc3RydWN0dXJlKTsKKyAgICB9Citw
cml2YXRlOgorICAgIGNvbnN0IERGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgbV92YWx1ZTsK
K307CisKK2NsYXNzIFNwZWN1bGF0ZWRUeXBlQ29udGFpbnMgeworcHVibGljOgorICAgIFNwZWN1
bGF0ZWRUeXBlQ29udGFpbnMoU3BlY3VsYXRlZFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUo
dHlwZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKShTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUgJiBzcGVjdWxhdGlvbkZy
b21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKKyAgICB9Citwcml2YXRlOgorICAgIFNwZWN1bGF0ZWRU
eXBlIG1fdHlwZTsKK307CisKK2NsYXNzIEFycmF5TW9kZXNDb250YWlucyB7CitwdWJsaWM6Cisg
ICAgQXJyYXlNb2Rlc0NvbnRhaW5zKEFycmF5TW9kZXMgYXJyYXlNb2RlcykKKyAgICAgICAgOiBt
X2FycmF5TW9kZXMoYXJyYXlNb2RlcykKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3IoKShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Fy
cmF5TW9kZXMgJiBhcnJheU1vZGVGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgfQorcHJp
dmF0ZToKKyAgICBBcnJheU1vZGVzIG1fYXJyYXlNb2RlczsKK307CisKK30gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCit2b2lkIFN0cnVjdHVyZVNldDo6ZmlsdGVyKGNvbnN0IERGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCit7CisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZUNv
bnRhaW5zIGZ1bmN0b3Iob3RoZXIpOworICAgIGdlbmVyaWNGaWx0ZXIoZnVuY3Rvcik7Cit9CisK
K3ZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoU3BlY3VsYXRlZFR5cGUgdHlwZSkKK3sKKyAgICBT
cGVjdWxhdGVkVHlwZUNvbnRhaW5zIGZ1bmN0b3IodHlwZSk7CisgICAgZ2VuZXJpY0ZpbHRlcihm
dW5jdG9yKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVTZXQ6OmZpbHRlckFycmF5TW9kZXMoQXJyYXlN
b2RlcyBhcnJheU1vZGVzKQoreworICAgIEFycmF5TW9kZXNDb250YWlucyBmdW5jdG9yKGFycmF5
TW9kZXMpOworICAgIGdlbmVyaWNGaWx0ZXIoZnVuY3Rvcik7Cit9CisKK3ZvaWQgU3RydWN0dXJl
U2V0OjpmaWx0ZXIoY29uc3QgREZHOjpBYnN0cmFjdFZhbHVlJiBvdGhlcikKK3sKKyAgICBmaWx0
ZXIob3RoZXIubV9zdHJ1Y3R1cmUpOworICAgIGZpbHRlcihvdGhlci5tX3R5cGUpOworICAgIGZp
bHRlckFycmF5TW9kZXMob3RoZXIubV9hcnJheU1vZGVzKTsKK30KKwogYm9vbCBTdHJ1Y3R1cmVT
ZXQ6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKIHsKICAgICBp
ZiAoaXNUaGluKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDE3MDA5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOworc3RydWN0IEFic3RyYWN0VmFsdWU7CiB9CiAKIGNsYXNzIFN0cnVjdHVyZVNl
dCB7CkBAIC05Niw2ICs5NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3Ry
dWN0dXJlU2V0Jik7CiAgICAgdm9pZCBleGNsdWRlKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAg
IAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IERGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYpOwor
ICAgIHZvaWQgZmlsdGVyKFNwZWN1bGF0ZWRUeXBlKTsKKyAgICB2b2lkIGZpbHRlckFycmF5TW9k
ZXMoQXJyYXlNb2Rlcyk7CisgICAgdm9pZCBmaWx0ZXIoY29uc3QgREZHOjpBYnN0cmFjdFZhbHVl
Jik7CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGdlbmVy
aWNGaWx0ZXIoRnVuY3RvciYgZnVuY3RvcikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CShyZXZpc2lvbiAxNzAwOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NDUsOSArMTQ0NSwx
MyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAog
ICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICBpZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fc3RydWN0dXJlLmlzQ2xlYXIoKSkgewotICAgICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRp
b24oCi0gICAgICAgICAgICAgICAgY2xvYmJlckxpbWl0LCBub2RlLT50cmFuc2l0aW9uKCktPnBy
ZXZpb3VzLCBub2RlLT50cmFuc2l0aW9uKCktPm5leHQpOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCk7Cisg
ICAgICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUub25seVN0
cnVjdHVyZSgpID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkKKyAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb24oCisgICAgICAgICAgICAgICAgICAgIGNsb2Ji
ZXJMaW1pdCwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cywgbm9kZS0+dHJhbnNpdGlvbigp
LT5uZXh0KTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VT
dHJ1Y3R1cmUobV9ncmFwaCwgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ1dHRlcmZseToKQEAg
LTE1NzYsMzkgKzE1ODAsNDUgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7Ci0gICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmlu
ZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KLQotICAgICAgICAvLyBUaGlzIHNo
b3VsZCBqdXN0IGZpbHRlciBkb3duIHRoZSBjYXNlcyBpbiBNdWx0aUdldEJ5T2Zmc2V0LiBJZiB0
aGF0IHJlc3VsdHMgaW4gYWxsCi0gICAgICAgIC8vIGNhc2VzIGhhdmluZyB0aGUgc2FtZSBvZmZz
ZXQgdGhlbiB3ZSBzaG91bGQgc3RyZW5ndGggcmVkdWNlIGl0IHRvIGEgQ2hlY2tTdHJ1Y3R1cmUg
KwotICAgICAgICAvLyBHZXRCeU9mZnNldC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAg
IGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+
bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlP
ZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCF2YXJpYW50LnN0
cnVjdHVyZVNldCgpLmNvbnRhaW5zKHN0cnVjdHVyZSkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmFs
dGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgZmlsdGVyKHZhbHVlLCBzdHJ1Y3R1cmUpOwotICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKLSAgICAgICAgICAgICAgICBtX3N0
YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBUaGlzIGNvZGUgd2lsbCBmaWx0
ZXIgdGhlIGJhc2UgdmFsdWUgaW4gYSBtYW5uZXIgdGhhdCBpcyBwb3NzaWJseSBkaWZmZXJlbnQg
KGVpdGhlciBtb3JlCisgICAgICAgIC8vIG9yIGxlc3MgcHJlY2lzZSkgdGhhbiB0aGUgd2F5IGl0
IHdvdWxkIGJlIGZpbHRlcmVkIGlmIHRoaXMgd2FzIHN0cmVuZ3RoLXJlZHVjZWQgdG8gYQorICAg
ICAgICAvLyBDaGVja1N0cnVjdHVyZS4gVGhpcyBpcyBmaW5lLiBJdCdzIGxlZ2FsIGZvciBkaWZm
ZXJlbnQgcGFzc2VzIG92ZXIgdGhlIGNvZGUgdG8gcHJvdmUKKyAgICAgICAgLy8gZGlmZmVyZW50
IHRoaW5ncyBhYm91dCB0aGUgY29kZSwgc28gbG9uZyBhcyBhbGwgb2YgdGhlbSBhcmUgc291bmQu
IFRoYXQgZXZlbiBpbmNsdWRlcworICAgICAgICAvLyBvbmUgZ3V5IHByb3ZpbmcgdGhhdCBjb2Rl
IHNob3VsZCBuZXZlciBleGVjdXRlIChkdWUgdG8gYSBjb250cmFkaWN0aW9uKSBhbmQgYW5vdGhl
ciBndXkKKyAgICAgICAgLy8gbm90IGZpbmRpbmcgdGhhdCBjb250cmFkaWN0aW9uLiBJZiBzb21l
b25lIGV2ZXIgcHJvdmVkIHRoYXQgdGhlcmUgd291bGQgYmUgYQorICAgICAgICAvLyBjb250cmFk
aWN0aW9uIHRoZW4gdGhlcmUgbXVzdCBhbHdheXMgYmUgYSBjb250cmFkaWN0aW9uIGV2ZW4gaWYg
c3Vic2VxdWVudCBwYXNzZXMgZG9uJ3QKKyAgICAgICAgLy8gcmVhbGl6ZSBpdC4gVGhpcyBpcyB0
aGUgY2FzZSBoZXJlLgorICAgICAgICAKKyAgICAgICAgLy8gT3JkaW5hcmlseSB5b3UgaGF2ZSB0
byBiZSBjYXJlZnVsIHdpdGggY2FsbGluZyBzZXRGb3VuZENvbnN0YW50cygpCisgICAgICAgIC8v
IGJlY2F1c2Ugb2YgdGhlIGVmZmVjdCBvbiBjb21waWxlIHRpbWVzLCBidXQgdGhpcyBub2RlIGlz
IEZUTC1vbmx5LgorICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAg
ICAgICAKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OworICAgICAgICBBYnN0cmFjdFZhbHVl
IHJlc3VsdDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNl
dERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIEdldEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsK
KyAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpOwor
ICAgICAgICAgICAgc2V0LmZpbHRlcihiYXNlKTsKKyAgICAgICAgICAgIGlmIChzZXQuaXNFbXB0
eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYmFzZVNldC5tZXJn
ZShzZXQpOworICAgICAgICAgICAgaWYgKCF2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkgeworICAg
ICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRvbmUpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CisgICAgICAg
ICAgICB0aGlzUmVzdWx0LnNldCgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICAg
ICAgICAgICptX2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSksCisgICAgICAg
ICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgICAgICBy
ZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFN0
cnVjdHVyZVNldCBzZXQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0
QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgc2V0Lm1l
cmdlKG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV0uc3RydWN0dXJlU2V0
KCkpOworICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJl
KG1fZ3JhcGgsIGJhc2VTZXQpID09IENvbnRyYWRpY3Rpb24pCisgICAgICAgICAgICBtX3N0YXRl
LnNldElzVmFsaWQoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxk
MSgpLCBzZXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAg
IGZvck5vZGUobm9kZSkgPSByZXN1bHQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
ICAgIApAQCAtMTYxNyw1OCArMTYyNywzNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6
IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2Ug
ZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgotCi0gICAgICAgIC8v
IFRoaXMgc2hvdWxkIGp1c3QgZmlsdGVyIGRvd24gdGhlIGNhc2VzIGluIE11bHRpUHV0QnlPZmZz
ZXQuIElmIHRoYXQgcmVzdWx0cyBpbiBlaXRoZXIKLSAgICAgICAgLy8gb25lIGNhc2UsIG9yIG5v
dGhpbmcgYnV0IHJlcGxhY2UgY2FzZXMgYW5kIHRoZXkgaGF2ZSB0aGUgc2FtZSBvZmZzZXQsIHRo
ZW4gd2Ugc2hvdWxkCi0gICAgICAgIC8vIGp1c3Qgc3RyZW5ndGggcmVkdWNlIGl0IHRvIHRoZSBh
cHByb3ByaWF0ZSBjb21iaW5hdGlvbiBvZiBDaGVja1N0cnVjdHVyZSwKLSAgICAgICAgLy8gW1Jl
XUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBQdXRTdHJ1Y3R1cmUsIGFuZCBQdXRCeU9mZnNldC4K
LSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIy
OQotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZS5v
bmx5U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJp
YW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0g
ICAgICAgICAgICAgICAgaWYgKCF2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLmNvbnRhaW5zKHN0cnVj
dHVyZSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVw
bGFjZSkgewotICAgICAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIHN0cnVj
dHVyZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
KTsKLSAgICAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOwotICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCB2YXJpYW50
Lm5ld1N0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOwotICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRvbmUpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZVNldCBv
bGRTZXQ7CiAgICAgICAgIFN0cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAgICAgIFRyYW5zaXRpb25W
ZWN0b3IgdHJhbnNpdGlvbnM7CisgICAgICAgIAorICAgICAgICAvLyBPcmRpbmFyaWx5IHlvdSBo
YXZlIHRvIGJlIGNhcmVmdWwgd2l0aCBjYWxsaW5nIHNldEZvdW5kQ29uc3RhbnRzKCkKKyAgICAg
ICAgLy8gYmVjYXVzZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGltZXMsIGJ1dCB0aGlzIG5v
ZGUgaXMgRlRMLW9ubHkuCisgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7
CisgICAgICAgIAorICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBj
b25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRh
KCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBvbGRTZXQubWVyZ2UodmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKSk7CisgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgdGhpc1NldCA9IHZhcmlhbnQub2xk
U3RydWN0dXJlKCk7CisgICAgICAgICAgICB0aGlzU2V0LmZpbHRlcihiYXNlKTsKKyAgICAgICAg
ICAgIGlmICh0aGlzU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlv
bikgewotICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKLSAgICAgICAgICAgICAg
ICAgICAgVHJhbnNpdGlvbih2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSkpOworICAgICAgICAgICAgICAgIGlmICh0aGlzU2V0Lm9ubHlT
dHJ1Y3R1cmUoKSAhPSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zaXRp
b24odmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0
dXJlKCkpKTsKKyAgICAgICAgICAgICAgICB9IC8vIGVsc2UgdGhpcyBpcyByZWFsbHkgYSByZXBs
YWNlLgogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7Ci0gICAgICAgICAgICAgICAgbmV3U2V0
Lm1lcmdlKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIG5ld1NldC5t
ZXJnZSh0aGlzU2V0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBvbGRTZXQpOwogICAgICAgICBvYnNlcnZlVHJhbnNp
dGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBuZXdTZXQpOworICAgICAgICBpZiAoZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1fZ3JhcGgsIG5ld1NldCkgPT0gQ29udHJhZGlj
dGlvbikKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTcwMDkzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDYg
KzE3OSwxNyBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHCiAgICAg
cmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoZ3JhcGgpOwogfQogCitGaWx0cmF0aW9uUmVzdWx0IEFi
c3RyYWN0VmFsdWU6OmNoYW5nZVN0cnVjdHVyZShHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpCit7CisgICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVj
dHVyZXMoKTsKKyAgICBtX2FycmF5TW9kZXMgPSBvdGhlci5hcnJheU1vZGVzRnJvbVN0cnVjdHVy
ZXMoKTsKKyAgICBtX3N0cnVjdHVyZSA9IG90aGVyOworICAgIAorICAgIGZpbHRlclZhbHVlQnlU
eXBlKCk7CisgICAgCisgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoZ3JhcGgpOworfQorCiBG
aWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlckFycmF5TW9kZXMoQXJyYXlNb2Rl
cyBhcnJheU1vZGVzKQogewogICAgIEFTU0VSVChhcnJheU1vZGVzKTsKQEAgLTIyOSw2ICsyNDAs
MTMgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJCeQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK2Jvb2wgQWJzdHJhY3RWYWx1ZTo6Y29udGFpbnMoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvdWxkQmVUeXBlKHNwZWN1bGF0aW9uRnJv
bVN0cnVjdHVyZShzdHJ1Y3R1cmUpKQorICAgICAgICAmJiAobV9hcnJheU1vZGVzICYgYXJyYXlN
b2RlRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKQorICAgICAgICAmJiBtX3N0cnVjdHVyZS5jb250
YWlucyhzdHJ1Y3R1cmUpOworfQorCiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZp
bHRlcihjb25zdCBBYnN0cmFjdFZhbHVlJiBvdGhlcikKIHsKICAgICBtX3R5cGUgJj0gb3RoZXIu
bV90eXBlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmgJKHJldmlzaW9uIDE3MDA5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsMTIgKzI2NywxMiBAQCBzdHJ1
Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBjb3VsZEJlVHlwZShTcGVjdWxhdGVkVHlwZSBkZXNpcmVkVHlwZSkKKyAg
ICBib29sIGNvdWxkQmVUeXBlKFNwZWN1bGF0ZWRUeXBlIGRlc2lyZWRUeXBlKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuICEhKG1fdHlwZSAmIGRlc2lyZWRUeXBlKTsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBpc1R5cGUoU3BlY3VsYXRlZFR5cGUgZGVzaXJlZFR5cGUpCisgICAgYm9vbCBp
c1R5cGUoU3BlY3VsYXRlZFR5cGUgZGVzaXJlZFR5cGUpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gIShtX3R5cGUgJiB+ZGVzaXJlZFR5cGUpOwogICAgIH0KQEAgLTI4NCw2ICsyODQsMTAg
QEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIEZpbHRyYXRpb25SZXN1bHQgZmls
dGVyKGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKICAgICAKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGNo
YW5nZVN0cnVjdHVyZShHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOworICAgIAorICAgIGJv
b2wgY29udGFpbnMoU3RydWN0dXJlKikgY29uc3Q7CisgICAgCiAgICAgYm9vbCB2YWxpZGF0ZShK
U1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSGVhcFRvcCgpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3MDA5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiAr
MTI1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZTogeworICAg
ICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0
dXJlLm9ubHlTdHJ1Y3R1cmUoKQorICAgICAgICAgICAgICAgICAgICAhPSBub2RlLT50cmFuc2l0
aW9uKCktPm5leHQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAg
ICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjog
ewogICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCkgIT0gbm9kZS0+ZnVuY3Rpb24oKS0+dmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0xNDcsNDcgKzE1Nyw2OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7Ci0gICAg
ICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CisgICAgICAgICAgICAgICAgRWRn
ZSBiYXNlRWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGJhc2Ug
PSBiYXNlRWRnZS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEm
IGRhdGEgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogCi0gICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJl
Lm9ubHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gRmlyc3QgcHJ1bmUgdGhl
IHZhcmlhbnRzLCB0aGVuIGNoZWNrIGlmIHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGNhbiBiZQorICAg
ICAgICAgICAgICAgIC8vIHN0cmVuZ3RoLXJlZHVjZWQgdG8gYSBHZXRCeU9mZnNldC4KICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlh
bnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBHZXRCeUlkVmFy
aWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5jb250YWlucyhzdHJ1Y3R1cmUpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIHN0cnVjdHVyZSwgdmFyaWFudCwg
ZGF0YS5pZGVudGlmaWVyTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUgYmFzZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2UpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2sp
OyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJlZm9y
ZS4KKyAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhl
IGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZh
cmlhbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50
JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFu
dC5zdHJ1Y3R1cmVTZXQoKS5maWx0ZXIoYmFzZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLnZhcmlhbnRzW2ktLV0gPSBkYXRhLnZhcmlhbnRzLmxhc3QoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEudmFyaWFudHMucmVtb3ZlTGFzdCgpOworICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBlbWl0R2V0QnlP
ZmZzZXQoCisgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVl
LCBkYXRhLnZhcmlhbnRzWzBdLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OiB7Ci0gICAgICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2Ug
PSBub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRn
ZS5ub2RlKCk7CisgICAgICAgICAgICAgICAgRWRnZSBiYXNlRWRnZSA9IG5vZGUtPmNoaWxkMSgp
OworICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBiYXNlRWRnZS5ub2RlKCk7CiAgICAgICAg
ICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aVB1dEJ5T2Zm
c2V0RGF0YSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFic3RyYWN0VmFs
dWUgYmFzZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2UpOwogCi0gICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJl
Lm9ubHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVj
dXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2ggQ0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdl
dCB0aGUgc3RhdGUgYmVmb3JlLgorICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOyAv
LyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRv
IHRoaXMuCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIXZhcmlhbnQub2xkU3RydWN0dXJlKCkuY29udGFpbnMoc3RydWN0dXJl
KSkKKworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlh
bnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50JiB2
YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5v
bGRTdHJ1Y3R1cmUoKS5maWx0ZXIoYmFzZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52YXJp
YW50cy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJlbW92
ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBlbWl0
UHV0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCB2YXJpYW50LCBkYXRhLmlkZW50aWZpZXJO
dW1iZXIpOwotICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAg
JiYgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5vbmx5U3RydWN0dXJlKCkgPT0gdmFyaWFudC5uZXdT
dHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRW
YXJpYW50OjpyZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xk
U3RydWN0dXJlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoZGF0YS52YXJpYW50cy5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZW1pdFB1dEJ5T2Zm
c2V0KAorICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwg
ZGF0YS52YXJpYW50c1swXSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMDAsNyArMjMyLDggQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRFZGdlLnVzZUtpbmQoKSAhPSBDZWxsVXNl
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9z
dHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUg
YmFzZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKTsKKyAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7
CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogCkBAIC0yMTQsNyArMjQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIHN0cnVjdHVyZSwgc3RhdHVz
WzBdLCBpZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQo
aW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHN0YXR1c1swXSwgaWRlbnRpZmllck51bWJl
cik7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yMjgsNyArMjYxLDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGRFZGdlLnVzZUtpbmQoKSA9
PSBDZWxsVXNlKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1cmUub25seVN0cnVj
dHVyZSgpOworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZVZhbHVlID0gbV9zdGF0
ZS5mb3JOb2RlKGNoaWxkKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAg
aWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIApAQCAtMjQ0LDcgKzI3OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKHN0
YXR1cy5udW1WYXJpYW50cygpICE9IDEpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVtaXRQdXRCeU9mZnNldChpbmRleEluQmxv
Y2ssIG5vZGUsIHN0YXR1c1swXSwgaWRlbnRpZmllck51bWJlcik7CisgICAgICAgICAgICAgICAg
ZW1pdFB1dEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdGF0dXNbMF0s
IGlkZW50aWZpZXJOdW1iZXIpOwogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzM2LDMzICszNzAsMjQg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAKLSAg
ICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25l
ZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1
ZSwgY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIpCiAgICAgewogICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKICAg
ICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgTm9kZSogY2hp
bGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogCi0gICAgICAgIGJvb2wgbmVlZHNDZWxsQ2hlY2sgPSBt
X3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbDsKLSAgICAgICAgCi0gICAg
ICAgIEFTU0VSVCghdmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwotICAgICAgICBBU1NFUlRfVU5V
U0VEKHN0cnVjdHVyZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5jb250YWlucyhzdHJ1Y3R1cmUp
KTsKLSAgICAgICAgCi0gICAgICAgIC8vIE5vdyBiZWZvcmUgd2UgZG8gYW55dGhpbmcgZWxzZSwg
cHVzaCB0aGUgQ0ZBIGZvcndhcmQgb3ZlciB0aGUgR2V0QnlJZAotICAgICAgICAvLyBhbmQgbWFr
ZSBzdXJlIHdlIHNpZ25hbCB0byB0aGUgbG9vcCB0aGF0IGl0IHNob3VsZCBjb250aW51ZSBhbmQg
bm90Ci0gICAgICAgIC8vIGRvIGFueSBlbGltaW5hdGlvbnMuCi0gICAgICAgIG1faW50ZXJwcmV0
ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOwotICAgICAgICAKLSAgICAgICAgaWYgKG5lZWRzQ2Vs
bENoZWNrKSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG9yaWdpbiwgY2hpbGRF
ZGdlKTsKLSAgICAgICAgfQorICAgICAgICBhZGRCYXNlQ2hlY2soaW5kZXhJbkJsb2NrLCBub2Rl
LCBiYXNlVmFsdWUsIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwogICAgICAgICAKICAgICAgICAg
aWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSB7CiAgICAgICAgICAgICBtX2dyYXBoLmNvbnZl
cnRUb0NvbnN0YW50KG5vZGUsIG1fZ3JhcGguZnJlZXplKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgp
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGNo
aWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgIGlmICh2YXJpYW50LmFs
dGVybmF0ZUJhc2UoKSkgeworICAgICAgICAgICAgY2hpbGQgPSBtX2luc2VydGlvblNldC5pbnNl
cnRDb25zdGFudChpbmRleEluQmxvY2ssIG9yaWdpbiwgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCkp
OworICAgICAgICAgICAgY2hpbGRFZGdlID0gRWRnZShjaGlsZCwgS25vd25DZWxsVXNlKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxV
c2UpOwogICAgICAgICAKICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgIApA
QCAtMzgxLDIzICs0MDYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CiAgICAgfQogCi0gICAgdm9pZCBl
bWl0UHV0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBQ
dXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB2
b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNv
bnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlh
bnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCiAgICAgewogICAgICAgICBOb2RlT3JpZ2lu
IG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5j
aGlsZDEoKTsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwotICAgICAg
ICAKLSAgICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCku
bV90eXBlICYgflNwZWNDZWxsOwogICAgICAgICAKLSAgICAgICAgLy8gTm93IGJlZm9yZSB3ZSBk
byBhbnl0aGluZyBlbHNlLCBwdXNoIHRoZSBDRkEgZm9yd2FyZCBvdmVyIHRoZSBQdXRCeUlkCi0g
ICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgd2Ugc2lnbmFsIHRvIHRoZSBsb29wIHRoYXQgaXQgc2hv
dWxkIGNvbnRpbnVlIGFuZCBub3QKLSAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KLSAg
ICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7Ci0KLSAgICAgICAgaWYg
KG5lZWRzQ2VsbENoZWNrKSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG9yaWdp
biwgY2hpbGRFZGdlKTsKLSAgICAgICAgfQorICAgICAgICBhZGRCYXNlQ2hlY2soaW5kZXhJbkJs
b2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOwogCiAgICAgICAg
IGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAKQEAgLTQ1OSw2ICs0NzMsMjUg
QEAgcHJpdmF0ZToKICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9
IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5h
cHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZEJhc2VD
aGVjaygKKyAgICAgICAgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBB
YnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIHsK
KyAgICAgICAgaWYgKCFiYXNlVmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7Cisg
ICAgICAgICAgICAvLyBBcmlzZXMgd2hlbiB3ZSBwcnVuZSBNdWx0aUdldEJ5T2Zmc2V0LiBXZSBj
b3VsZCBoYXZlIGEKKyAgICAgICAgICAgIC8vIE11bHRpR2V0QnlPZmZzZXQgd2l0aCBhIHNpbmds
ZSB2YXJpYW50IHRoYXQgY2hlY2tzIGZvciBzdHJ1Y3R1cmUgUywKKyAgICAgICAgICAgIC8vIGFu
ZCB0aGUgaW5wdXQgaGFzIHN0cnVjdHVyZXMgUyBhbmQgVCwgZm9yIGV4YW1wbGUuCisgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAg
ICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHNldCkpLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChiYXNlVmFsdWUubV90eXBlICYgflNwZWNDZWxsKSB7CisgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUs
IFBoYW50b20sIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICB9CisgICAg
fQogCiAgICAgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soTm9kZU9yaWdpbiBvcmln
aW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgSlNDZWxsKiBjZWxsLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTcwMDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk1Miw3ICs5NTIsNyBAQCBGcm96ZW5WYWx1ZSogR3JhcGg6
OmZyZWV6ZShKU1ZhbHVlIHZhbHVlCiAKIEZyb3plblZhbHVlKiBHcmFwaDo6ZnJlZXplU3Ryb25n
KEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgRnJvemVuVmFsdWUqIHJlc3VsdCA9IGZyZWV6ZSh2YWx1
ZSk7CisgICAgRnJvemVuVmFsdWUqIHJlc3VsdCA9IGZyZWV6ZUZyYWdpbGUodmFsdWUpOwogICAg
IHJlc3VsdC0+c3RyZW5ndGhlblRvKFN0cm9uZ1ZhbHVlKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTcwMDkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDYsOCArMTQ2LDggQEAgcHVibGljOgogICAgIHZvaWQgZGV0aHJlYWQoKTsKICAgICAK
ICAgICBGcm96ZW5WYWx1ZSogZnJlZXplRnJhZ2lsZShKU1ZhbHVlIHZhbHVlKTsKLSAgICBGcm96
ZW5WYWx1ZSogZnJlZXplKEpTVmFsdWUgdmFsdWUpOyAvLyBXZSB1c2Ugd2VhayBmcmVlemluZyBi
eSBkZWZhdWx0LgotICAgIEZyb3plblZhbHVlKiBmcmVlemVTdHJvbmcoSlNWYWx1ZSB2YWx1ZSk7
IC8vIFNob3J0aGFuZCBmb3IgZnJlZXplKHZhbHVlKS0+bWFya1N0cm9uZ2x5KCkuCisgICAgRnJv
emVuVmFsdWUqIGZyZWV6ZShKU1ZhbHVlIHZhbHVlKTsgLy8gV2UgdXNlIHdlYWsgZnJlZXppbmcg
YnkgZGVmYXVsdC4gU2hvcnRoYW5kIGZvciBmcmVlemVGcmFnaWxlKHZhbHVlKS0+c3RyZW5ndGhl
blRvKFdlYWtWYWx1ZSk7CisgICAgRnJvemVuVmFsdWUqIGZyZWV6ZVN0cm9uZyhKU1ZhbHVlIHZh
bHVlKTsgLy8gU2hvcnRoYW5kIGZvciBmcmVlemVGcmFnaWxlKHZhbHVlKS0+c3RyZW5ndGhlblRv
KFN0cm9uZ1ZhbHVlKS4KICAgICAKICAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5v
ZGUsIEZyb3plblZhbHVlKiB2YWx1ZSk7CiAgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2Rl
KiBub2RlLCBKU1ZhbHVlIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNzAwOTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTggQEAgcHVibGljOgogICAgICAgICBzZXRD
bG9iYmVyZWQob3RoZXIuaXNDbG9iYmVyZWQoKSk7CiAgICAgfQogICAgIAorICAgIEFMV0FZU19J
TkxJTkUgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3BlcmF0b3I9KFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIHsKKyAgICAgICAgbV9zZXQgPSBzdHJ1Y3R1cmU7CisgICAgICAgIHNldENsb2Ji
ZXJlZChmYWxzZSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgQUxXQVlTX0lO
TElORSBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fc2V0ID0gb3RoZXI7CisgICAgICAgIHNldENsb2Ji
ZXJlZChmYWxzZSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CiAgICAgQUxXQVlTX0lO
TElORSBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZSYgb3RoZXIpCiAgICAgewogICAgICAgICBtX3NldCA9IG90aGVyLm1fc2V0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHJldmlzaW9uIDE3MDA5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAyLDYgKzMyMDIsMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICAKICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRhdGEgPSBtX25vZGUtPm11
bHRpR2V0QnlPZmZzZXREYXRhKCk7CisKKyAgICAgICAgaWYgKGRhdGEudmFyaWFudHMuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY3JlYXRpbmcgYSBQaGkgZnVu
Y3Rpb24gd2l0aCB6ZXJvIGlucHV0cy4gTExWTSBkb2Vzbid0IGxpa2UgdGhhdC4KKyAgICAgICAg
ICAgIHRlcm1pbmF0ZShCYWRDYWNoZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMj4gYmxvY2tzKGRhdGEudmFy
aWFudHMuc2l6ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5z
aXplKCk7IGktLTspCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233321</attachid>
            <date>2014-06-18 13:29:30 -0700</date>
            <delta_ts>2014-06-18 13:43:24 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>63399</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwMTEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDE0LTA2LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIEFJIGFuZCBjb25zdGFudCBmb2xkZXIgc2hvdWxkIGJlIGFibGUgdG8gcHJlY2lzZWx5IHBy
dW5lIE11bHRpR2V0QnlPZmZzZXQvTXVsdGlQdXRCeU9mZnNldCBldmVuIGlmIHRoZSBiYXNlIHN0
cnVjdHVyZSBhYnN0cmFjdCB2YWx1ZSBpcyBub3QgYSBzaW5nbGV0b24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzkxOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbHNvIGFkZHMg
cHJ1bmluZyBvZiBQdXRTdHJ1Y3R1cmVzLgorCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZh
cmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dCk6
CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6R2V0
QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZVNldCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuaDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9sZFN0cnVjdHVyZSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmZpbHRlckFycmF5
TW9kZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5oOgorICAgICAgICAqIGRm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6Cisg
ICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OmNoYW5nZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RWYWx1ZTo6Y29udGFpbnMpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y291bGRCZVR5cGUpOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVHlwZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQ
aGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5n
UGhhc2U6OmVtaXRHZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xk
aW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRG
b2xkaW5nUGhhc2U6OmFkZEJhc2VDaGVjayk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZnJlZXplU3Ryb25nKToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yPSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpR2V0QnlPZmZzZXQpOgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC13aXRob3V0
LWZvbGRpbmctdGhlLXN0cnVjdHVyZS1jaGVjay5qczogQWRkZWQuCisgICAgICAgIChmb28pOgor
ICAgICAgICAoZnUpOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGJheik6CisgICAgICAgICgu
YmFyKToKKyAgICAgICAgKC5iYXopOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9mb2xkLW11bHRp
LXB1dC1ieS1vZmZzZXQtdG8tcHV0LWJ5LW9mZnNldC13aXRob3V0LWZvbGRpbmctdGhlLXN0cnVj
dHVyZS1jaGVjay5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoZnUpOgorICAg
ICAgICAoYmFyKToKKyAgICAgICAgKGJheik6CisgICAgICAgICguYmFyKToKKyAgICAgICAgKC5i
YXopOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wcnVuZS1tdWx0aS1wdXQtYnktb2Zmc2V0LXJl
cGxhY2Utb3ItdHJhbnNpdGlvbi12YXJpYW50LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6Cisg
ICAgICAgIChmdSk6CisgICAgICAgIChiYXIpOgorICAgICAgICAoYmF6KToKKyAgICAgICAgKC5i
YXIpOgorICAgICAgICAoLmJheik6CisKIDIwMTQtMDYtMTcgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBbZnRsb3B0XSBQdXRTdHJ1Y3R1cmUgYW5kIFBoYW50b21Q
dXRTdHJ1Y3R1cmUgc2hvdWxkbid0IGxlYXZlIHRoZSB3b3JsZCBpbiBhIGNsb2JiZXJlZCBzdGF0
ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDE3MDA5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNiArNDAyLDExOSBAQCB2b2lkIENvZGVC
bG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAjZW5kaWYKIH0KIAordm9pZCBDb2RlQmxv
Y2s6OnByaW50UHV0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSog
ZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYgbWFwKQoreworICAgIEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBsb2NhdGlvbjsK
KworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOworICAgIAorICAgIFVOVVNFRF9QQVJBTShpZGVudCk7IC8vIHRlbGwgdGhl
IGNvbXBpbGVyIHRvIHNodXQgdXAgaW4gY2VydGFpbiBwbGF0Zm9ybSBjb25maWd1cmF0aW9ucy4K
KyAgICAKKyNpZiBFTkFCTEUoTExJTlQpCisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0g
aW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUuZ2V0KCkpIHsKKyAgICAgICAgc3dpdGNoIChleGVj
LT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvblswXS51Lm9wY29kZSkpIHsK
KyAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX291
dF9vZl9saW5lOgorICAgICAgICAgICAgb3V0LnByaW50KCIgbGxpbnQoIik7CisgICAgICAgICAg
ICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQpOwor
ICAgICAgICAgICAgb3V0LnByaW50KCIpIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAgICAg
ICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CisgICAgICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgorICAgICAgICBjYXNlIG9w
X3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZToKKyAgICAgICAgICAgIG91
dC5wcmludCgiIGxsaW50KCIpOworICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2
IiwgZXhlYywgc3RydWN0dXJlLCBpZGVudCk7CisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7
CisgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBleGVjLCBpbnN0cnVjdGlv
bls2XS51LnN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOworICAgICAgICAgICAgaWYgKFN0cnVjdHVy
ZUNoYWluKiBjaGFpbiA9IGluc3RydWN0aW9uWzddLnUuc3RydWN0dXJlQ2hhaW4uZ2V0KCkpIHsK
KyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CisgICAgICAgICAgICAgICAgZHVtcENo
YWluKG91dCwgZXhlYywgY2hhaW4sIGlkZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG91dC5wcmludCgiKSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG91dC5wcmludCgiIGxsaW50KHVua25vd24pIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisjaWYgRU5BQkxF
KEpJVCkKKyAgICBpZiAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJQdHIgPSBtYXAuZ2V0KENvZGVP
cmlnaW4obG9jYXRpb24pKSkgeworICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8g
PSAqc3R1YlB0cjsKKyAgICAgICAgaWYgKHN0dWJJbmZvLnJlc2V0QnlHQykKKyAgICAgICAgICAg
IG91dC5wcmludCgiIChSZXNldCBCeSBHQykiKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHVi
SW5mby5zZWVuKSB7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIgaml0KCIpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgICAgICAgICAgICAgIG91dC5w
cmludCgicmVwbGFjZSwgIik7CisgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJz
dHJ1Y3QiLCBleGVjLCBzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKKyAgICAgICAgICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoInRyYW5zaXRpb24sICIpOworICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0
LCAicHJldiIsIGV4ZWMsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1
Y3R1cmUuZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Cisg
ICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0IiwgZXhlYywgc3R1YkluZm8u
dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAg
ICAgICBpZiAoU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNp
dGlvbi5jaGFpbi5nZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7
CisgICAgICAgICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGV4ZWMsIGNoYWluLCBpZGVudCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRm
KCJsaXN0ID0gWyIpOworICAgICAgICAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxp
c3QgPSBzdHViSW5mby51LnB1dEJ5SWRMaXN0Lmxpc3Q7CisgICAgICAgICAgICAgICAgQ29tbWFQ
cmludGVyIGNvbW1hOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
aXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICIoIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2VzcyA9
IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGFjY2Vzcy5pc1JlcGxhY2UoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCJyZXBsYWNlLCAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUo
b3V0LCAic3RydWN0IiwgZXhlYywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlzU2V0dGVyKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludCgic2V0dGVyLCAiKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgZXhlYywgYWNjZXNzLm9sZFN0cnVj
dHVyZSgpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlz
Q3VzdG9tKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiY3VzdG9tLCAi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0Iiwg
ZXhlYywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoYWNjZXNzLmlzVHJhbnNpdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoInRyYW5zaXRpb24sICIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2IiwgZXhlYywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBp
ZGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBleGVjLCBhY2Nlc3Mu
bmV3U3RydWN0dXJlKCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY2Nl
c3MuY2hhaW4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBleGVjLCBhY2Nl
c3MuY2hhaW4oKSwgaWRlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgidW5r
bm93biIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCIpIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6CisgICAgICAgICAgICAg
ICAgb3V0LnByaW50ZigidW5zZXQiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91
dC5wcmludGYoIikiKTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KG1hcCk7CisjZW5kaWYKK30KKwogdm9pZCBDb2RlQmxvY2s6OnByaW50Q2FsbE9wKFByaW50U3Ry
ZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlv
biomIGl0LCBjb25zdCBjaGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSBjYWNoZUR1bXBNb2RlLCBib29s
JiBoYXNQcmludGVkUHJvZmlsaW5nLCBjb25zdCBDYWxsTGlua0luZm9NYXAmIG1hcCkKIHsKICAg
ICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CkBAIC05MjYsMjYgKzEwMzksMzIgQEAgdm9p
ZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1
dF9ieV9pZDogewogICAgICAgICAgICAgcHJpbnRQdXRCeUlkT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJwdXRfYnlfaWQiKTsKKyAgICAgICAgICAgIHByaW50UHV0QnlJZENhY2hlU3RhdHVz
KG91dCwgZXhlYywgbG9jYXRpb24sIHN0dWJJbmZvcyk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZTogewogICAgICAg
ICAgICAgcHJpbnRQdXRCeUlkT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfaWRf
b3V0X29mX2xpbmUiKTsKKyAgICAgICAgICAgIHByaW50UHV0QnlJZENhY2hlU3RhdHVzKG91dCwg
ZXhlYywgbG9jYXRpb24sIHN0dWJJbmZvcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDogewogICAgICAg
ICAgICAgcHJpbnRQdXRCeUlkT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfaWRf
dHJhbnNpdGlvbl9kaXJlY3QiKTsKKyAgICAgICAgICAgIHByaW50UHV0QnlJZENhY2hlU3RhdHVz
KG91dCwgZXhlYywgbG9jYXRpb24sIHN0dWJJbmZvcyk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdF9vdXRf
b2ZfbGluZTogewogICAgICAgICAgICAgcHJpbnRQdXRCeUlkT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJwdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmUiKTsKKyAgICAg
ICAgICAgIHByaW50UHV0QnlJZENhY2hlU3RhdHVzKG91dCwgZXhlYywgbG9jYXRpb24sIHN0dWJJ
bmZvcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1
dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDogewogICAgICAgICAgICAgcHJpbnRQdXRCeUlkT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwiKTsK
KyAgICAgICAgICAgIHByaW50UHV0QnlJZENhY2hlU3RhdHVzKG91dCwgZXhlYywgbG9jYXRpb24s
IHN0dWJJbmZvcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZTogewogICAgICAgICAg
ICAgcHJpbnRQdXRCeUlkT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfaWRfdHJh
bnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmUiKTsKKyAgICAgICAgICAgIHByaW50UHV0QnlJZENh
Y2hlU3RhdHVzKG91dCwgZXhlYywgbG9jYXRpb24sIHN0dWJJbmZvcyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyOiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAxNzAwOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk4OSw2ICs5ODksNyBAQCBwcml2YXRlOgogICAgIGVudW0gQ2Fj
aGVEdW1wTW9kZSB7IER1bXBDYWNoZXMsIERvbnREdW1wQ2FjaGVzIH07CiAgICAgdm9pZCBwcmlu
dENhbGxPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5z
dHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3AsIENhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1ByaW50
ZWRQcm9maWxpbmcsIGNvbnN0IENhbGxMaW5rSW5mb01hcCYpOwogICAgIHZvaWQgcHJpbnRQdXRC
eUlkT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3Ry
dWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsKKyAgICB2b2lkIHByaW50UHV0QnlJZENhY2hlU3Rh
dHVzKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5m
b01hcCYpOwogICAgIHZvaWQgcHJpbnRMb2NhdGlvbkFuZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0
YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7
CiAgICAgdm9pZCBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQoUHJpbnRTdHJlYW0m
LCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0
IGNoYXIqIG9wLCBpbnQgb3BlcmFuZCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTcwMDkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA4LDEyICsxMDgsMTQgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcElu
Q29udGV4dChQcmludAogICAgIAogICAgIG91dC5wcmludCgKICAgICAgICAgIjwiLCBpbkNvbnRl
eHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLAotICAgICAgICAiWyIsIGxpc3REdW1w
SW5Db250ZXh0KG1fY29uc3RhbnRDaGVja3MsIGNvbnRleHQpLCAiXSwgIiwKLSAgICAgICAgImFs
dGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250
ZXh0KSwgIiwgIiwKLSAgICAgICAgInNwZWNpZmljVmFsdWUgPSAiLCBpbkNvbnRleHQoc3BlY2lm
aWNWYWx1ZSgpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAgIm9mZnNldCA9ICIsIG9mZnNldCgp
KTsKKyAgICAgICAgIlsiLCBsaXN0RHVtcEluQ29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250
ZXh0KSwgIl0iKTsKKyAgICBpZiAobV9hbHRlcm5hdGVCYXNlKQorICAgICAgICBvdXQucHJpbnQo
IiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSks
IGNvbnRleHQpKTsKKyAgICBpZiAoc3BlY2lmaWNWYWx1ZSgpKQorICAgICAgICBvdXQucHJpbnQo
Iiwgc3BlY2lmaWNWYWx1ZSA9ICIsIGluQ29udGV4dChzcGVjaWZpY1ZhbHVlKCksIGNvbnRleHQp
KTsKKyAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCkpOwogICAgIGlmIChtX2Nh
bGxMaW5rU3RhdHVzKQotICAgICAgICBvdXQucHJpbnQoImNhbGwgPSAiLCAqbV9jYWxsTGlua1N0
YXR1cyk7CisgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMp
OwogICAgIG91dC5wcmludCgiPiIpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwMDkzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJl
dHVybiAhIW1fc3RydWN0dXJlU2V0LnNpemUoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CisgICAgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQogICAgIGNvbnN0IENv
bnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1
cm4gbV9jb25zdGFudENoZWNrczsgfQogICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29u
c3QgeyByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOyB9CiAgICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwMDkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
b2xkU3RydWN0dXJlOwogICAgIH0KICAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVy
ZSgpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgp
ID09IFJlcGxhY2UpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAg
IAogICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0OwogICAg
IAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCShyZXZpc2lvbiAxNzAw
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgog
I2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNjAs
NiArMTYxLDgwIEBAIHZvaWQgU3RydWN0dXJlU2V0OjpleGNsdWRlKGNvbnN0IFN0cnVjdHUKICAg
ICAgICAgY2xlYXIoKTsKIH0KIAorbmFtZXNwYWNlIHsKKworY2xhc3MgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZUNvbnRhaW5zIHsKK3B1YmxpYzoKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlQ29u
dGFpbnMoY29uc3QgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAg
OiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcigp
KFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUuY29u
dGFpbnMoc3RydWN0dXJlKTsKKyAgICB9Citwcml2YXRlOgorICAgIGNvbnN0IERGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSYgbV92YWx1ZTsKK307CisKK2NsYXNzIFNwZWN1bGF0ZWRUeXBlQ29u
dGFpbnMgeworcHVibGljOgorICAgIFNwZWN1bGF0ZWRUeXBlQ29udGFpbnMoU3BlY3VsYXRlZFR5
cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3IoKShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3R5cGUgJiBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKKyAgICB9
Citwcml2YXRlOgorICAgIFNwZWN1bGF0ZWRUeXBlIG1fdHlwZTsKK307CisKK2NsYXNzIEFycmF5
TW9kZXNDb250YWlucyB7CitwdWJsaWM6CisgICAgQXJyYXlNb2Rlc0NvbnRhaW5zKEFycmF5TW9k
ZXMgYXJyYXlNb2RlcykKKyAgICAgICAgOiBtX2FycmF5TW9kZXMoYXJyYXlNb2RlcykKKyAgICB7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2FycmF5TW9kZXMgJiBhcnJheU1vZGVGcm9tU3RydWN0
dXJlKHN0cnVjdHVyZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBBcnJheU1vZGVzIG1fYXJyYXlN
b2RlczsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIFN0cnVjdHVyZVNl
dDo6ZmlsdGVyKGNvbnN0IERGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCit7Cisg
ICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZUNvbnRhaW5zIGZ1bmN0b3Iob3RoZXIpOworICAgIGdl
bmVyaWNGaWx0ZXIoZnVuY3Rvcik7Cit9CisKK3ZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoU3Bl
Y3VsYXRlZFR5cGUgdHlwZSkKK3sKKyAgICBTcGVjdWxhdGVkVHlwZUNvbnRhaW5zIGZ1bmN0b3Io
dHlwZSk7CisgICAgZ2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVT
ZXQ6OmZpbHRlckFycmF5TW9kZXMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKQoreworICAgIEFycmF5
TW9kZXNDb250YWlucyBmdW5jdG9yKGFycmF5TW9kZXMpOworICAgIGdlbmVyaWNGaWx0ZXIoZnVu
Y3Rvcik7Cit9CisKK3ZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoY29uc3QgREZHOjpBYnN0cmFj
dFZhbHVlJiBvdGhlcikKK3sKKyAgICBmaWx0ZXIob3RoZXIubV9zdHJ1Y3R1cmUpOworICAgIGZp
bHRlcihvdGhlci5tX3R5cGUpOworICAgIGZpbHRlckFycmF5TW9kZXMob3RoZXIubV9hcnJheU1v
ZGVzKTsKK30KKwogYm9vbCBTdHJ1Y3R1cmVTZXQ6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJl
U2V0JiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoaXNUaGluKCkpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDE3MDA5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNl
IERGRyB7CiBjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworc3RydWN0IEFic3RyYWN0VmFs
dWU7CiB9CiAKIGNsYXNzIFN0cnVjdHVyZVNldCB7CkBAIC05Niw2ICs5NywxMSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgdm9pZCBleGNsdWRl
KGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IERGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYpOworICAgIHZvaWQgZmlsdGVyKFNwZWN1bGF0ZWRUeXBl
KTsKKyAgICB2b2lkIGZpbHRlckFycmF5TW9kZXMoQXJyYXlNb2Rlcyk7CisgICAgdm9pZCBmaWx0
ZXIoY29uc3QgREZHOjpBYnN0cmFjdFZhbHVlJik7CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KICAgICB2b2lkIGdlbmVyaWNGaWx0ZXIoRnVuY3RvciYgZnVuY3RvcikKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzAwOTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0NDUsOSArMTQ0NSwxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAg
ICBpZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzQ2xlYXIoKSkgewot
ICAgICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgY2xvYmJlckxp
bWl0LCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLCBub2RlLT50cmFuc2l0aW9uKCktPm5l
eHQpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIG5v
ZGUtPnRyYW5zaXRpb24oKS0+bmV4dCk7CisgICAgICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpID09IG5vZGUtPnRyYW5zaXRpb24o
KS0+bmV4dCkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb24o
CisgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJMaW1pdCwgbm9kZS0+dHJhbnNpdGlvbigpLT5w
cmV2aW91cywgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgbm9kZS0+dHJhbnNp
dGlvbigpLT5uZXh0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEdldEJ1dHRlcmZseToKQEAgLTE1NzYsMzkgKzE1ODAsNDUgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBNdWx0aUdldEJ5T2Zmc2V0OiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5T
cGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQg
dGhpcy4KLQotICAgICAgICAvLyBUaGlzIHNob3VsZCBqdXN0IGZpbHRlciBkb3duIHRoZSBjYXNl
cyBpbiBNdWx0aUdldEJ5T2Zmc2V0LiBJZiB0aGF0IHJlc3VsdHMgaW4gYWxsCi0gICAgICAgIC8v
IGNhc2VzIGhhdmluZyB0aGUgc2FtZSBvZmZzZXQgdGhlbiB3ZSBzaG91bGQgc3RyZW5ndGggcmVk
dWNlIGl0IHRvIGEgQ2hlY2tTdHJ1Y3R1cmUgKwotICAgICAgICAvLyBHZXRCeU9mZnNldC4KLSAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQot
ICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZS5vbmx5
U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50
cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBjb25zdCBHZXRCeUlkVmFyaWFudCYg
dmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAg
ICAgICAgICAgICAgaWYgKCF2YXJpYW50LnN0cnVjdHVyZVNldCgpLmNvbnRhaW5zKHN0cnVjdHVy
ZSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZmlsdGVyKHZh
bHVlLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBU
b3AoKTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwot
ICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAvLyBUaGlzIGNvZGUgd2lsbCBmaWx0ZXIgdGhlIGJhc2UgdmFsdWUgaW4gYSBtYW5uZXIg
dGhhdCBpcyBwb3NzaWJseSBkaWZmZXJlbnQgKGVpdGhlciBtb3JlCisgICAgICAgIC8vIG9yIGxl
c3MgcHJlY2lzZSkgdGhhbiB0aGUgd2F5IGl0IHdvdWxkIGJlIGZpbHRlcmVkIGlmIHRoaXMgd2Fz
IHN0cmVuZ3RoLXJlZHVjZWQgdG8gYQorICAgICAgICAvLyBDaGVja1N0cnVjdHVyZS4gVGhpcyBp
cyBmaW5lLiBJdCdzIGxlZ2FsIGZvciBkaWZmZXJlbnQgcGFzc2VzIG92ZXIgdGhlIGNvZGUgdG8g
cHJvdmUKKyAgICAgICAgLy8gZGlmZmVyZW50IHRoaW5ncyBhYm91dCB0aGUgY29kZSwgc28gbG9u
ZyBhcyBhbGwgb2YgdGhlbSBhcmUgc291bmQuIFRoYXQgZXZlbiBpbmNsdWRlcworICAgICAgICAv
LyBvbmUgZ3V5IHByb3ZpbmcgdGhhdCBjb2RlIHNob3VsZCBuZXZlciBleGVjdXRlIChkdWUgdG8g
YSBjb250cmFkaWN0aW9uKSBhbmQgYW5vdGhlciBndXkKKyAgICAgICAgLy8gbm90IGZpbmRpbmcg
dGhhdCBjb250cmFkaWN0aW9uLiBJZiBzb21lb25lIGV2ZXIgcHJvdmVkIHRoYXQgdGhlcmUgd291
bGQgYmUgYQorICAgICAgICAvLyBjb250cmFkaWN0aW9uIHRoZW4gdGhlcmUgbXVzdCBhbHdheXMg
YmUgYSBjb250cmFkaWN0aW9uIGV2ZW4gaWYgc3Vic2VxdWVudCBwYXNzZXMgZG9uJ3QKKyAgICAg
ICAgLy8gcmVhbGl6ZSBpdC4gVGhpcyBpcyB0aGUgY2FzZSBoZXJlLgorICAgICAgICAKKyAgICAg
ICAgLy8gT3JkaW5hcmlseSB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIHdpdGggY2FsbGluZyBzZXRG
b3VuZENvbnN0YW50cygpCisgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIGVmZmVjdCBvbiBjb21w
aWxlIHRpbWVzLCBidXQgdGhpcyBub2RlIGlzIEZUTC1vbmx5LgorICAgICAgICBtX3N0YXRlLnNl
dEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSBi
YXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFN0cnVjdHVyZVNldCBiYXNl
U2V0OworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRC
eU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQg
PSB2YXJpYW50LnN0cnVjdHVyZVNldCgpOworICAgICAgICAgICAgc2V0LmZpbHRlcihiYXNlKTsK
KyAgICAgICAgICAgIGlmIChzZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgYmFzZVNldC5tZXJnZShzZXQpOworICAgICAgICAgICAgaWYgKCF2YXJp
YW50LnNwZWNpZmljVmFsdWUoKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRv
cCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGRvbmUpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBBYnN0cmFj
dFZhbHVlIHRoaXNSZXN1bHQ7CisgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoLAorICAgICAgICAgICAgICAgICptX2dyYXBoLmZyZWV6ZSh2YXJpYW50
LnNwZWNpZmljVmFsdWUoKSksCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9i
YmVyU3RhdGUoKSk7CisgICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgp
OyBpLS07KQotICAgICAgICAgICAgc2V0Lm1lcmdlKG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCkudmFyaWFudHNbaV0uc3RydWN0dXJlU2V0KCkpOworICAgICAgICBpZiAoZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1fZ3JhcGgsIGJhc2VTZXQpID09IENvbnRyYWRp
Y3Rpb24pCisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAgICAK
LSAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBzZXQpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGZvck5vZGUobm9kZSkgPSByZXN1bHQ7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtMTYxNyw1OCArMTYyNywzNiBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQVNTRVJUKCEodmFsdWUubV90
eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkg
ZW5zdXJlZCB0aGlzLgotCi0gICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3QgZmlsdGVyIGRvd24g
dGhlIGNhc2VzIGluIE11bHRpUHV0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0cyBpbiBlaXRoZXIK
LSAgICAgICAgLy8gb25lIGNhc2UsIG9yIG5vdGhpbmcgYnV0IHJlcGxhY2UgY2FzZXMgYW5kIHRo
ZXkgaGF2ZSB0aGUgc2FtZSBvZmZzZXQsIHRoZW4gd2Ugc2hvdWxkCi0gICAgICAgIC8vIGp1c3Qg
c3RyZW5ndGggcmVkdWNlIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBjb21iaW5hdGlvbiBvZiBDaGVj
a1N0cnVjdHVyZSwKLSAgICAgICAgLy8gW1JlXUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBQdXRT
dHJ1Y3R1cmUsIGFuZCBQdXRCeU9mZnNldC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAg
IGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+
bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlP
ZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCF2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpLmNvbnRhaW5zKHN0cnVjdHVyZSkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgewotICAgICAgICAgICAgICAgICAgICBm
aWx0ZXIobm9kZS0+Y2hpbGQxKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKTsKLSAgICAgICAgICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhjbG9iYmVyTGltaXQpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnNldChtX2dyYXBoLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKLSAgICAgICAgICAg
ICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAgICAgIGRv
bmUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGRvbmUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIFN0cnVjdHVyZVNldCBvbGRTZXQ7CiAgICAgICAgIFN0cnVjdHVyZVNldCBu
ZXdTZXQ7CiAgICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7CisgICAgICAgIAor
ICAgICAgICAvLyBPcmRpbmFyaWx5IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCBjYWxsaW5n
IHNldEZvdW5kQ29uc3RhbnRzKCkKKyAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgZWZmZWN0IG9u
IGNvbXBpbGUgdGltZXMsIGJ1dCB0aGlzIG5vZGUgaXMgRlRMLW9ubHkuCisgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgIAorICAgICAgICBBYnN0cmFjdFZh
bHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6
ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9
IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBv
bGRTZXQubWVyZ2UodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBTdHJ1Y3R1
cmVTZXQgdGhpc1NldCA9IHZhcmlhbnQub2xkU3RydWN0dXJlKCk7CisgICAgICAgICAgICB0aGlz
U2V0LmZpbHRlcihiYXNlKTsKKyAgICAgICAgICAgIGlmICh0aGlzU2V0LmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9
PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewotICAgICAgICAgICAgICAgIHRyYW5zaXRp
b25zLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbih2YXJpYW50Lm9sZFN0
cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkpOworICAgICAg
ICAgICAgICAgIGlmICh0aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSB2YXJpYW50Lm5ld1N0cnVj
dHVyZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24odmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFu
c2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpKTsKKyAgICAgICAgICAgICAgICB9IC8v
IGVsc2UgdGhpcyBpcyByZWFsbHkgYSByZXBsYWNlLgogICAgICAgICAgICAgICAgIG5ld1NldC5h
ZGQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFj
ZSk7Ci0gICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKHZhcmlhbnQub2xkU3RydWN0dXJlKCkp
OworICAgICAgICAgICAgICAgIG5ld1NldC5tZXJnZSh0aGlzU2V0KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBvbGRT
ZXQpOwogICAgICAgICBvYnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9u
cyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBuZXdTZXQp
OworICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1f
Z3JhcGgsIG5ld1NldCkgPT0gQ29udHJhZGljdGlvbikKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0
SXNWYWxpZChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24g
MTcwMDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDYgKzE3OSwxNyBAQCBGaWx0cmF0aW9uUmVzdWx0IEFi
c3RyYWN0VmFsdWU6OmZpbHRlcihHCiAgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoZ3JhcGgp
OwogfQogCitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmNoYW5nZVN0cnVjdHVyZShH
cmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCit7CisgICAgbV90eXBlICY9
IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICBtX2FycmF5TW9kZXMgPSBv
dGhlci5hcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKTsKKyAgICBtX3N0cnVjdHVyZSA9IG90aGVy
OworICAgIAorICAgIGZpbHRlclZhbHVlQnlUeXBlKCk7CisgICAgCisgICAgcmV0dXJuIG5vcm1h
bGl6ZUNsYXJpdHkoZ3JhcGgpOworfQorCiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6
OmZpbHRlckFycmF5TW9kZXMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKQogewogICAgIEFTU0VSVChh
cnJheU1vZGVzKTsKQEAgLTIyOSw2ICsyNDAsMTMgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFj
dFZhbHVlOjpmaWx0ZXJCeQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2Jvb2wgQWJzdHJhY3RW
YWx1ZTo6Y29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGNvdWxkQmVUeXBlKHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKQorICAgICAg
ICAmJiAobV9hcnJheU1vZGVzICYgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKQor
ICAgICAgICAmJiBtX3N0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpOworfQorCiBGaWx0cmF0
aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihjb25zdCBBYnN0cmFjdFZhbHVlJiBvdGhl
cikKIHsKICAgICBtX3R5cGUgJj0gb3RoZXIubV90eXBlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE3MDA5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjcsMTIgKzI2NywxMiBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjb3VsZEJlVHlwZShTcGVj
dWxhdGVkVHlwZSBkZXNpcmVkVHlwZSkKKyAgICBib29sIGNvdWxkQmVUeXBlKFNwZWN1bGF0ZWRU
eXBlIGRlc2lyZWRUeXBlKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICEhKG1fdHlwZSAm
IGRlc2lyZWRUeXBlKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1R5cGUoU3BlY3VsYXRlZFR5
cGUgZGVzaXJlZFR5cGUpCisgICAgYm9vbCBpc1R5cGUoU3BlY3VsYXRlZFR5cGUgZGVzaXJlZFR5
cGUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gIShtX3R5cGUgJiB+ZGVzaXJlZFR5cGUp
OwogICAgIH0KQEAgLTI4NCw2ICsyODQsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAg
IAogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKICAg
ICAKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGNoYW5nZVN0cnVjdHVyZShHcmFwaCYsIGNvbnN0IFN0
cnVjdHVyZVNldCYpOworICAgIAorICAgIGJvb2wgY29udGFpbnMoU3RydWN0dXJlKikgY29uc3Q7
CisgICAgCiAgICAgYm9vbCB2YWxpZGF0ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKGlzSGVhcFRvcCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3MDA5MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODE3LDYgKzE4MTcsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAog
ICAgIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAog
ICAgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3QpCiB7
CisgICAgZGF0YUxvZygiRm9yICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIHB1dEJ5SWRT
dGF0dXMsICJcbiIpOwogICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFPcHRp
b25zOjplbmFibGVBY2Nlc3NJbmxpbmluZygpKSB7CiAgICAgICAgIGlmICghcHV0QnlJZFN0YXR1
cy5pc1NldCgpKQogICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDE3MDA5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1
LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZTogeworICAgICAg
ICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJl
Lm9ubHlTdHJ1Y3R1cmUoKQorICAgICAgICAgICAgICAgICAgICAhPSBub2RlLT50cmFuc2l0aW9u
KCktPm5leHQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAg
ICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewog
ICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCkgIT0gbm9kZS0+ZnVuY3Rpb24oKS0+dmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0xNDcsNDcgKzE1Nyw2OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7Ci0gICAgICAg
ICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgICAgICAg
ICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CisgICAgICAgICAgICAgICAgRWRnZSBi
YXNlRWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBi
YXNlRWRnZS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRh
dGEgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogCi0gICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9u
bHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gRmlyc3QgcHJ1bmUgdGhlIHZh
cmlhbnRzLCB0aGVuIGNoZWNrIGlmIHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGNhbiBiZQorICAgICAg
ICAgICAgICAgIC8vIHN0cmVuZ3RoLXJlZHVjZWQgdG8gYSBHZXRCeU9mZnNldC4KICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRz
LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBHZXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
dmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5jb250YWlucyhzdHJ1Y3R1cmUpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGVt
aXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIHN0cnVjdHVyZSwgdmFyaWFudCwgZGF0
YS5pZGVudGlmaWVyTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUgYmFzZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2UpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAv
LyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJlZm9yZS4K
KyAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRl
ZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlh
bnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2
YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKS5maWx0ZXIoYmFzZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLnZhcmlhbnRzW2ktLV0gPSBkYXRhLnZhcmlhbnRzLmxhc3QoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEudmFyaWFudHMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBlbWl0R2V0QnlPZmZz
ZXQoCisgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBk
YXRhLnZhcmlhbnRzWzBdLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBNdWx0aVB1dEJ5T2Zmc2V0OiB7Ci0gICAgICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBu
b2RlLT5jaGlsZDEoKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5u
b2RlKCk7CisgICAgICAgICAgICAgICAgRWRnZSBiYXNlRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwor
ICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBiYXNlRWRnZS5ub2RlKCk7CiAgICAgICAgICAg
ICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0
RGF0YSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUg
YmFzZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2UpOwogCi0gICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9u
bHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRl
KGluZGV4SW5CbG9jayk7IC8vIFB1c2ggQ0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0
aGUgc3RhdGUgYmVmb3JlLgorICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOyAvLyBE
b24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRo
aXMuCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
ZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIXZhcmlhbnQub2xkU3RydWN0dXJlKCkuY29udGFpbnMoc3RydWN0dXJlKSkK
KworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50JiB2YXJp
YW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRT
dHJ1Y3R1cmUoKS5maWx0ZXIoYmFzZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50c1tpLS1dID0gZGF0YS52YXJpYW50
cy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzLnJlbW92ZUxh
c3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBlbWl0UHV0
QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCB2YXJpYW50LCBkYXRhLmlkZW50aWZpZXJOdW1i
ZXIpOwotICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9
PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgJiYg
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5vbmx5U3RydWN0dXJlKCkgPT0gdmFyaWFudC5uZXdTdHJ1
Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3Ry
dWN0dXJlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoZGF0YS52YXJpYW50cy5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZW1pdFB1dEJ5T2Zmc2V0
KAorICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgZGF0
YS52YXJpYW50c1swXSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMDAsNyArMjMyLDEyIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRWRnZS51c2VLaW5kKCkgIT0gQ2VsbFVzZSkK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3Ry
dWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIGJh
c2VWYWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCk7CisKKyAgICAgICAgICAgICAgICBtX2lu
dGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gUHVzaCBDRkEgb3ZlciB0aGlzIG5v
ZGUgYWZ0ZXIgd2UgZ2V0IHRoZSBzdGF0ZSBiZWZvcmUuCisgICAgICAgICAgICAgICAgZWxpbWlu
YXRlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0
byBkbyB0aGluZ3MgdG8gdGhpcy4KKworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gYmFzZVZhbHVlLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAg
ICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTIx
NCw3ICsyNTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZW1pdEdldEJ5
T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgc3RydWN0dXJlLCBzdGF0dXNbMF0sIGlkZW50aWZp
ZXJOdW1iZXIpOworICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ss
IG5vZGUsIGJhc2VWYWx1ZSwgc3RhdHVzWzBdLCBpZGVudGlmaWVyTnVtYmVyKTsKICAgICAgICAg
ICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KQEAgLTIyOCw3ICsyNjUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGRFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOworICAg
ICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKTsKKworICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxv
Y2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJl
Zm9yZS4KKyAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cg
dGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgorCisgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUu
b25seVN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTI0NCw3ICsyODYsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAhPSAx
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBlbWl0UHV0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBzdGF0dXNbMF0sIGlk
ZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgICAgIGVtaXRQdXRCeU9mZnNldChpbmRleElu
QmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgc3RhdHVzWzBdLCBpZGVudGlmaWVyTnVtYmVyKTsKICAg
ICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KQEAgLTMzNiwzMyArMzc4LDI0IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBjaGFuZ2VkOwogICAgIH0KICAgICAgICAgCi0gICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQo
dW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIp
CisgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBu
b2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IEdldEJ5SWRWYXJpYW50
JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsKICAgICAgICAgTm9k
ZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0g
bm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsK
IAotICAgICAgICBib29sIG5lZWRzQ2VsbENoZWNrID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5t
X3R5cGUgJiB+U3BlY0NlbGw7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoIXZhcmlhbnQuYWx0
ZXJuYXRlQmFzZSgpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzdHJ1Y3R1cmUsIHZhcmlhbnQu
c3RydWN0dXJlU2V0KCkuY29udGFpbnMoc3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICAv
LyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2ggdGhlIENGQSBmb3J3YXJkIG92
ZXIgdGhlIEdldEJ5SWQKLSAgICAgICAgLy8gYW5kIG1ha2Ugc3VyZSB3ZSBzaWduYWwgdG8gdGhl
IGxvb3AgdGhhdCBpdCBzaG91bGQgY29udGludWUgYW5kIG5vdAotICAgICAgICAvLyBkbyBhbnkg
ZWxpbWluYXRpb25zLgotICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2Nr
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChuZWVkc0NlbGxDaGVjaykgewotICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBQaGFudG9tLCBvcmlnaW4sIGNoaWxkRWRnZSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50LnN0
cnVjdHVyZVNldCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFs
dWUoKSkgewogICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCBtX2dy
YXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93
bkNlbGxVc2UpOworICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKKyAgICAg
ICAgICAgIGNoaWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoaW5kZXhJbkJsb2Nr
LCBvcmlnaW4sIHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKKyAgICAgICAgICAgIGNoaWxkRWRn
ZSA9IEVkZ2UoY2hpbGQsIEtub3duQ2VsbFVzZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgCiAgICAgICAg
IEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAKQEAgLTM4MSwyMyArNDE0LDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFn
ZUFjY2Vzc0RhdGEpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVk
IGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgdm9pZCBlbWl0UHV0QnlPZmZzZXQodW5z
aWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNl
VmFsdWUsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyKQogICAgIHsKICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47
CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7Ci0gICAgICAgIE5vZGUq
IGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgbmVlZHND
ZWxsQ2hlY2sgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbDsKLSAg
ICAgICAgCi0gICAgICAgIC8vIE5vdyBiZWZvcmUgd2UgZG8gYW55dGhpbmcgZWxzZSwgcHVzaCB0
aGUgQ0ZBIGZvcndhcmQgb3ZlciB0aGUgUHV0QnlJZAotICAgICAgICAvLyBhbmQgbWFrZSBzdXJl
IHdlIHNpZ25hbCB0byB0aGUgbG9vcCB0aGF0IGl0IHNob3VsZCBjb250aW51ZSBhbmQgbm90Ci0g
ICAgICAgIC8vIGRvIGFueSBlbGltaW5hdGlvbnMuCi0gICAgICAgIG1faW50ZXJwcmV0ZXIuZXhl
Y3V0ZShpbmRleEluQmxvY2spOwotCi0gICAgICAgIGlmIChuZWVkc0NlbGxDaGVjaykgewotICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBvcmlnaW4sIGNoaWxkRWRnZSk7Ci0gICAgICAg
IH0KKyAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2
YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKIAogICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChL
bm93bkNlbGxVc2UpOwogCkBAIC00NTksNiArNDgxLDI1IEBAIHByaXZhdGU6CiAgICAgICAgIHN0
b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAg
ICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRh
KTsKICAgICB9CisgICAgCisgICAgdm9pZCBhZGRCYXNlQ2hlY2soCisgICAgICAgIHVuc2lnbmVk
IGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVl
LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICB7CisgICAgICAgIGlmICghYmFzZVZhbHVl
Lm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgeworICAgICAgICAgICAgLy8gQXJpc2VzIHdo
ZW4gd2UgcHJ1bmUgTXVsdGlHZXRCeU9mZnNldC4gV2UgY291bGQgaGF2ZSBhCisgICAgICAgICAg
ICAvLyBNdWx0aUdldEJ5T2Zmc2V0IHdpdGggYSBzaW5nbGUgdmFyaWFudCB0aGF0IGNoZWNrcyBm
b3Igc3RydWN0dXJlIFMsCisgICAgICAgICAgICAvLyBhbmQgdGhlIGlucHV0IGhhcyBzdHJ1Y3R1
cmVzIFMgYW5kIFQsIGZvciBleGFtcGxlLgorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0
cnVjdHVyZSwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChzZXQpKSwgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYmFzZVZhbHVlLm1fdHlwZSAmIH5T
cGVjQ2VsbCkgeworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5vcmlnaW4s
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIHZvaWQgYWRkU3RydWN0
dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxv
Y2ssIEpTQ2VsbCogY2VsbCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3MDA5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
NTIsNyArOTUyLDcgQEAgRnJvemVuVmFsdWUqIEdyYXBoOjpmcmVlemUoSlNWYWx1ZSB2YWx1ZQog
CiBGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZVN0cm9uZyhKU1ZhbHVlIHZhbHVlKQogewotICAg
IEZyb3plblZhbHVlKiByZXN1bHQgPSBmcmVlemUodmFsdWUpOworICAgIEZyb3plblZhbHVlKiBy
ZXN1bHQgPSBmcmVlemVGcmFnaWxlKHZhbHVlKTsKICAgICByZXN1bHQtPnN0cmVuZ3RoZW5UbyhT
dHJvbmdWYWx1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3MDA5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDggKzE0Niw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRldGhyZWFkKCk7CiAgICAgCiAgICAgRnJvemVuVmFsdWUqIGZyZWV6
ZUZyYWdpbGUoSlNWYWx1ZSB2YWx1ZSk7Ci0gICAgRnJvemVuVmFsdWUqIGZyZWV6ZShKU1ZhbHVl
IHZhbHVlKTsgLy8gV2UgdXNlIHdlYWsgZnJlZXppbmcgYnkgZGVmYXVsdC4KLSAgICBGcm96ZW5W
YWx1ZSogZnJlZXplU3Ryb25nKEpTVmFsdWUgdmFsdWUpOyAvLyBTaG9ydGhhbmQgZm9yIGZyZWV6
ZSh2YWx1ZSktPm1hcmtTdHJvbmdseSgpLgorICAgIEZyb3plblZhbHVlKiBmcmVlemUoSlNWYWx1
ZSB2YWx1ZSk7IC8vIFdlIHVzZSB3ZWFrIGZyZWV6aW5nIGJ5IGRlZmF1bHQuIFNob3J0aGFuZCBm
b3IgZnJlZXplRnJhZ2lsZSh2YWx1ZSktPnN0cmVuZ3RoZW5UbyhXZWFrVmFsdWUpOworICAgIEZy
b3plblZhbHVlKiBmcmVlemVTdHJvbmcoSlNWYWx1ZSB2YWx1ZSk7IC8vIFNob3J0aGFuZCBmb3Ig
ZnJlZXplRnJhZ2lsZSh2YWx1ZSktPnN0cmVuZ3RoZW5UbyhTdHJvbmdWYWx1ZSkuCiAgICAgCiAg
ICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBGcm96ZW5WYWx1ZSogdmFsdWUp
OwogICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVy
ZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTcwMDkzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDYgKzU1LDE4IEBAIHB1YmxpYzoKICAgICAgICAgc2V0Q2xvYmJlcmVkKG90aGVyLmlzQ2xvYmJl
cmVkKCkpOwogICAgIH0KICAgICAKKyAgICBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG9wZXJhdG9yPShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIG1f
c2V0ID0gc3RydWN0dXJlOworICAgICAgICBzZXRDbG9iYmVyZWQoZmFsc2UpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorICAgIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSYgb3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCisgICAgeworICAgICAg
ICBtX3NldCA9IG90aGVyOworICAgICAgICBzZXRDbG9iYmVyZWQoZmFsc2UpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQogICAgIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSYgb3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQogICAg
IHsKICAgICAgICAgbV9zZXQgPSBvdGhlci5tX3NldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzAwOTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIwMiw2ICszMjAyLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBi
YXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIE11bHRp
R2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9ub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwor
CisgICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8g
UHJvdGVjdCBhZ2FpbnN0IGNyZWF0aW5nIGEgUGhpIGZ1bmN0aW9uIHdpdGggemVybyBpbnB1dHMu
IExMVk0gZG9lc24ndCBsaWtlIHRoYXQuCisgICAgICAgICAgICB0ZXJtaW5hdGUoQmFkQ2FjaGUp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBWZWN0
b3I8TEJhc2ljQmxvY2ssIDI+IGJsb2NrcyhkYXRhLnZhcmlhbnRzLnNpemUoKSk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQt
dG8tZ2V0LWJ5LW9mZnNldC13aXRob3V0LWZvbGRpbmctdGhlLXN0cnVjdHVyZS1jaGVjay5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ZvbGQtbXVs
dGktZ2V0LWJ5LW9mZnNldC10by1nZXQtYnktb2Zmc2V0LXdpdGhvdXQtZm9sZGluZy10aGUtc3Ry
dWN0dXJlLWNoZWNrLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC13aXRo
b3V0LWZvbGRpbmctdGhlLXN0cnVjdHVyZS1jaGVjay5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUwIEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJldHVybiBvLmY7Cit9CisKK2Z1bmN0
aW9uIGZ1KG8pIHsKKyAgICByZXR1cm4gby5lOworfQorCitmdW5jdGlvbiBiYXIoZiwgbykgewor
ICAgIHJldHVybiBmKG8pOworfQorCitmdW5jdGlvbiBiYXooZiwgbykgeworICAgIHJldHVybiBm
KG8pOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgZm9vKHtmOjEs
IGU6Mn0pOworICAgIGZvbyh7ZToxLCBmOjJ9KTsKKyAgICBmb28oe2Q6MSwgZToyLCBmOjN9KTsK
KyAgICBmdSh7ZjoxLCBlOjJ9KTsKKyAgICBmdSh7ZToxLCBmOjIsIGc6M30pOworICAgIGZ1KHtk
OjEsIGU6MiwgZjozLCBnOjR9KTsKK30KKyAgICAKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyAr
K2kpIHsKKyAgICBiYXIoZm9vLCB7ZjoxfSk7CisgICAgYmFyKGZ1bmN0aW9uKCkgeyB9LCBudWxs
KTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7IHJldHVybiA0MjsgfSwgbnVsbCk7CisgICAgYmF6KGZ1
LCB7ZToxfSk7CisgICAgYmF6KGZ1bmN0aW9uKCkgeyB9LCBudWxsKTsKKyAgICBiYXooZnVuY3Rp
b24oKSB7IHJldHVybiA0MjsgfSwgbnVsbCk7Cit9CisgICAgCisoZnVuY3Rpb24oZiwgZywgbywg
cCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgcTsKKyAgICAgICAgaWYgKGkg
PT0gbiAtIDEpCisgICAgICAgICAgICBxID0gcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cSA9IG87CisgICAgICAgIHJlc3VsdCArPSBiYXooZywgcSk7CisgICAgICAgIHJlc3VsdCArPSBi
YXIoZiwgcSk7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gKG4gLSAxKSAqIChvLmYgKyBvLmUp
ICsgMTIgKyAxMykKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0
OworfSkoZm9vLCBmdSwge2Y6NDIsIGU6Mn0sIHtlOjEyLCBmOjEzLCBnOjE0fSk7CisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZm9sZC1tdWx0aS1wdXQtYnktb2Zm
c2V0LXRvLXB1dC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5nLXRoZS1zdHJ1Y3R1cmUtY2hlY2su
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xk
LW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcHV0LWJ5LW9mZnNldC13aXRob3V0LWZvbGRpbmctdGhl
LXN0cnVjdHVyZS1jaGVjay5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXB1dC1ieS1vZmZzZXQt
d2l0aG91dC1mb2xkaW5nLXRoZS1zdHJ1Y3R1cmUtY2hlY2suanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NiBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBvLmYgPSAxOworfQorCitmdW5j
dGlvbiBmdShvKSB7CisgICAgby5lID0gMjsKK30KKworZnVuY3Rpb24gYmFyKGYsIG8pIHsKKyAg
ICBmKG8pOworfQorCitmdW5jdGlvbiBiYXooZiwgbykgeworICAgIGYobyk7Cit9CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICBmb28oe2Y6MSwgZToyfSk7CisgICAgZm9v
KHtlOjEsIGY6Mn0pOworICAgIGZvbyh7ZDoxLCBlOjIsIGY6M30pOworICAgIGZ1KHtmOjEsIGU6
Mn0pOworICAgIGZ1KHtlOjEsIGY6MiwgZzozfSk7CisgICAgZnUoe2Q6MSwgZToyLCBmOjMsIGc6
NH0pOworfQorICAgIAorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIGJhcihm
b28sIHtmOjF9KTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7IH0sIG51bGwpOworICAgIGJhcihmdW5j
dGlvbigpIHsgcmV0dXJuIDQyOyB9LCBudWxsKTsKKyAgICBiYXooZnUsIHtlOjF9KTsKKyAgICBi
YXooZnVuY3Rpb24oKSB7IH0sIG51bGwpOworICAgIGJheihmdW5jdGlvbigpIHsgcmV0dXJuIDQy
OyB9LCBudWxsKTsKK30KKyAgICAKKyhmdW5jdGlvbihmLCBnLCBvLCBwKSB7CisgICAgdmFyIHJl
c3VsdCA9IDA7CisgICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bjsgKytpKSB7CisgICAgICAgIHZhciBxOworICAgICAgICBpZiAoaSA9PSBuIC0gMSkKKyAgICAg
ICAgICAgIHEgPSBwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBxID0gbzsKKyAgICAgICAg
YmF6KGcsIHEpOworICAgICAgICBiYXIoZiwgcSk7CisgICAgfQorICAgIGlmIChvLmUgIT0gMikK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gby5lOiAiICsgby5lOworICAgIGlm
IChvLmYgIT0gMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gby5mOiAiICsg
by5mOworICAgIGlmIChwLmUgIT0gMikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUg
aW4gcC5lOiAiICsgcC5lOworICAgIGlmIChwLmYgIT0gMSkKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWUgaW4gcC5mOiAiICsgcC5mOworfSkoZm9vLCBmdSwge2Y6NDIsIGU6Mn0sIHtl
OjEyLCBmOjEzLCBnOjE0fSk7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvcHJ1bmUtbXVsdGktcHV0LWJ5LW9mZnNldC1yZXBsYWNlLW9yLXRyYW5zaXRpb24tdmFy
aWFudC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3BydW5lLW11bHRpLXB1dC1ieS1vZmZzZXQtcmVwbGFjZS1vci10cmFuc2l0aW9uLXZhcmlhbnQu
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3By
dW5lLW11bHRpLXB1dC1ieS1vZmZzZXQtcmVwbGFjZS1vci10cmFuc2l0aW9uLXZhcmlhbnQuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBv
LmYgPSAxOworfQorCitmdW5jdGlvbiBmdShvKSB7CisgICAgby5lID0gMjsKK30KKworZnVuY3Rp
b24gYmFyKGYsIG8pIHsKKyAgICBmKG8pOworfQorCitmdW5jdGlvbiBiYXooZiwgbykgeworICAg
IGYobyk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICBmb28oe2Y6
MSwgZToyfSk7CisgICAgZm9vKHtlOjEsIGY6Mn0pOworICAgIGZvbyh7ZToxfSk7CisgICAgZm9v
KHtkOjEsIGU6MiwgZjozfSk7CisgICAgZnUoe2Y6MSwgZToyfSk7CisgICAgZnUoe2U6MSwgZjoy
fSk7CisgICAgZnUoe2U6MSwgZjoyLCBnOjN9KTsKKyAgICBmdSh7ZDoxLCBlOjIsIGY6MywgZzo0
fSk7Cit9CisgICAgCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgYmFyKGZv
bywge2Y6MX0pOworICAgIGJhcihmdW5jdGlvbigpIHsgfSwgbnVsbCk7CisgICAgYmFyKGZ1bmN0
aW9uKCkgeyByZXR1cm4gNDI7IH0sIG51bGwpOworICAgIGJheihmdSwge2U6MX0pOworICAgIGJh
eihmdW5jdGlvbigpIHsgfSwgbnVsbCk7CisgICAgYmF6KGZ1bmN0aW9uKCkgeyByZXR1cm4gNDI7
IH0sIG51bGwpOworfQorICAgIAorKGZ1bmN0aW9uKGYsIGcsIG8sIHApIHsKKyAgICB2YXIgcmVz
dWx0ID0gMDsKKyAgICB2YXIgbiA9IDEwMDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
OyArK2kpIHsKKyAgICAgICAgdmFyIHE7CisgICAgICAgIGlmIChpID09IG4gLSAxKQorICAgICAg
ICAgICAgcSA9IHA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHEgPSBvOworICAgICAgICBi
YXooZywgcSk7CisgICAgICAgIGJhcihmLCBxKTsKKyAgICB9CisgICAgaWYgKG8uZSAhPSAyKQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmU6ICIgKyBvLmU7CisgICAgaWYg
KG8uZiAhPSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmY6ICIgKyBv
LmY7CisgICAgaWYgKHAuZSAhPSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBp
biBwLmU6ICIgKyBwLmU7CisgICAgaWYgKHAuZiAhPSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCB2YWx1ZSBpbiBwLmY6ICIgKyBwLmY7Cit9KShmb28sIGZ1LCB7ZTo0MiwgZjoyfSwge2U6
MTIsIGY6MTMsIGc6MTR9KTsKKwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwMTEzKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTQtMDYt
MTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBOZWVkIGEgc2hv
cnQgZGVzY3JpcHRpb24gKE9PUFMhKS4KKyAgICAgICAgTmVlZCB0aGUgYnVnIFVSTCAoT09QUyEp
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMv
cmVncmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1nZXQtYnktb2Zm
c2V0LXRvLWdldC1ieS1vZmZzZXQuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9m
b2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tcG9seS1nZXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQt
dG8tcG9seS1nZXQtYnktb2Zmc2V0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mv
Zm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXBvbHktcHV0LWJ5LW9mZnNldC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0
LXRvLXBvbHktcHV0LWJ5LW9mZnNldC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8t
cHV0LWJ5LW9mZnNldC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2ZvbGQtbXVs
dGktcHV0LWJ5LW9mZnNldC10by1yZXBsYWNlLW9yLXRyYW5zaXRpb24tcHV0LWJ5LW9mZnNldC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1wdXQt
Ynktb2Zmc2V0LXRvLXJlcGxhY2Utb3ItdHJhbnNpdGlvbi1wdXQtYnktb2Zmc2V0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktZ2V0LWJ5
LW9mZnNldC10by1nZXQtYnktb2Zmc2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAg
ICAgIChmdSk6CisgICAgICAgIChiYXIpOgorICAgICAgICAoLmJhcik6CisgICAgICAgICoganMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLXBvbHktZ2V0
LWJ5LW9mZnNldC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoZnUpOgorICAg
ICAgICAoYmFyKToKKyAgICAgICAgKC5iYXIpOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wb2x5LXB1dC1ieS1vZmZzZXQuanM6
IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGZ1KToKKyAgICAgICAgKGJhcik6Cisg
ICAgICAgICguYmFyKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLW11
bHRpLXB1dC1ieS1vZmZzZXQtdG8tcHV0LWJ5LW9mZnNldC5qczogQWRkZWQuCisgICAgICAgIChm
b28pOgorICAgICAgICAoZnUpOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKC5iYXIpOgorICAg
ICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10
by1yZXBsYWNlLW9yLXRyYW5zaXRpb24tcHV0LWJ5LW9mZnNldC5qczogQWRkZWQuCisgICAgICAg
IChmb28pOgorICAgICAgICAoZnUpOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKC5iYXIpOgor
CiAyMDE0LTA2LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAg
W2Z0bG9wdF0gREZHIHB1dF9ieV9pZCBzaG91bGQgaW5saW5lIGFjY2Vzc2VzIHdpdGggYSBzbGln
aHRseSBwb2x5bW9ycGhpYyBiYXNlCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQt
bXVsdGktZ2V0LWJ5LW9mZnNldC10by1nZXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10
by1nZXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9mb2xk
LW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldAorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1nZXQtYnktb2Zm
c2V0LXRvLWdldC1ieS1vZmZzZXQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5
LW9mZnNldC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1wb2x5LWdldC1ieS1vZmZz
ZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9s
ZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLXBvbHktZ2V0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5
LW9mZnNldC10by1wb2x5LWdldC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8t
cG9seS1nZXQtYnktb2Zmc2V0CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGkt
Z2V0LWJ5LW9mZnNldC10by1wb2x5LWdldC1ieS1vZmZzZXQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1wb2x5LWdl
dC1ieS1vZmZzZXQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
Zm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLXBvbHktZ2V0LWJ5LW9mZnNldC5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1wb2x5LWdldC1i
eS1vZmZzZXQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdy
ZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcG9seS1wdXQtYnktb2Zm
c2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2Zv
bGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wb2x5LXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRpLXB1dC1i
eS1vZmZzZXQtdG8tcG9seS1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRv
LXBvbHktcHV0LWJ5LW9mZnNldAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRp
LXB1dC1ieS1vZmZzZXQtdG8tcG9seS1wdXQtYnktb2Zmc2V0Lmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcG9seS1w
dXQtYnktb2Zmc2V0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wb2x5LXB1dC1ieS1vZmZzZXQuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcG9seS1wdXQt
Ynktb2Zmc2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVn
cmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXB1dC1ieS1vZmZzZXQt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1t
dWx0aS1wdXQtYnktb2Zmc2V0LXRvLXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQt
dG8tcHV0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MCBAQAorSlNSZWdyZXNzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wdXQtYnktb2Zmc2V0
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJv
d24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1w
dXQtYnktb2Zmc2V0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9m
b2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcHV0LWJ5LW9mZnNldC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8t
cHV0LWJ5LW9mZnNldC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktcHV0
LWJ5LW9mZnNldC10by1wdXQtYnktb2Zmc2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0
LXRvLXJlcGxhY2Utb3ItdHJhbnNpdGlvbi1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNl
dC10by1yZXBsYWNlLW9yLXRyYW5zaXRpb24tcHV0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGktcHV0LWJ5LW9m
ZnNldC10by1yZXBsYWNlLW9yLXRyYW5zaXRpb24tcHV0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2ZvbGQtbXVsdGktcHV0
LWJ5LW9mZnNldC10by1yZXBsYWNlLW9yLXRyYW5zaXRpb24tcHV0LWJ5LW9mZnNldAorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcmVwbGFjZS1v
ci10cmFuc2l0aW9uLXB1dC1ieS1vZmZzZXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1yZXBsYWNlLW9yLXRyYW5z
aXRpb24tcHV0LWJ5LW9mZnNldC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcmVwbGFjZS1vci10cmFuc2l0aW9u
LXB1dC1ieS1vZmZzZXQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9mb2xkLW11bHRpLXB1
dC1ieS1vZmZzZXQtdG8tcmVwbGFjZS1vci10cmFuc2l0aW9uLXB1dC1ieS1vZmZzZXQuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9m
b2xkLXB1dC1zdHJ1Y3R1cmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvZm9sZC1wdXQtc3RydWN0dXJlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtc3RydWN0dXJlLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZm9sZC1wdXQtc3Ry
dWN0dXJlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlv
biB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LXN0cnVjdHVyZS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtc3RydWN0dXJl
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LXN0
cnVjdHVyZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2ZvbGQtcHV0LXN0cnVjdHVyZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNl
dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9m
b2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktZ2V0LWJ5
LW9mZnNldC10by1nZXQtYnktb2Zmc2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMg
QEAKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKworZnVuY3Rpb24gZnUo
bykgeworICAgIHJldHVybiBvLmU7Cit9CisKK2Z1bmN0aW9uIGJhcihmLCBvKSB7CisgICAgcmV0
dXJuIGYobyk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICBmb28o
e2Y6MSwgZToyfSk7CisgICAgZm9vKHtlOjEsIGY6Mn0pOworICAgIGZvbyh7ZDoxLCBlOjIsIGY6
M30pOworICAgIGZ1KHtmOjEsIGU6Mn0pOworICAgIGZ1KHtlOjEsIGY6Mn0pOworICAgIGZ1KHtk
OjEsIGU6MiwgZjozfSk7Cit9CisgICAgCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7
CisgICAgYmFyKGZvbywge2Y6MX0pOworICAgIGJhcihmdW5jdGlvbigpIHsgfSwgbnVsbCk7Cisg
ICAgYmFyKGZ1bmN0aW9uKCkgeyByZXR1cm4gNDIgfSwgbnVsbCk7Cit9CisgICAgCisoZnVuY3Rp
b24oZiwgbykgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBuID0gMTAwMDAwMDsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgcDsKKyAgICAgICAg
aWYgKGkgPT0gbiAtIDEpIC8vIERlZmVhdCBMSUNNLgorICAgICAgICAgICAgcCA9IHtmOiA0Miwg
ZTogNDJ9OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwID0gbzsKKyAgICAgICAgcmVzdWx0
ICs9IGZ1KHApOworICAgICAgICByZXN1bHQgKz0gYmFyKGYsIHApOworICAgIH0KKyAgICBpZiAo
cmVzdWx0ICE9IChuIC0gMSkgKiAoby5mICsgby5lKSArIDQyICogMikKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoZm9vLCB7Zjo0MiwgZToyfSk7CisK
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktZ2V0
LWJ5LW9mZnNldC10by1wb2x5LWdldC1ieS1vZmZzZXQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRv
LXBvbHktZ2V0LWJ5LW9mZnNldC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1wb2x5LWdldC1i
eS1vZmZzZXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorZnVuY3Rpb24gZm9v
KG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitmdW5jdGlvbiBmdShvKSB7CisgICAgcmV0dXJu
IG8uZTsKK30KKworZnVuY3Rpb24gYmFyKGYsIG8pIHsKKyAgICByZXR1cm4gZihvKTsKK30KKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIGZvbyh7ZjoxLCBlOjJ9KTsKKyAg
ICBmb28oe2U6MSwgZjoyfSk7CisgICAgZm9vKHtkOjEsIGU6MiwgZjozfSk7CisgICAgZnUoe2Y6
MSwgZToyfSk7CisgICAgZnUoe2U6MSwgZjoyfSk7CisgICAgZnUoe2Q6MSwgZToyLCBmOjN9KTsK
K30KKyAgICAKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICBiYXIoZm9vLCB7
ZjoxfSk7CisgICAgYmFyKGZ1bmN0aW9uKCkgeyB9LCBudWxsKTsKKyAgICBiYXIoZnVuY3Rpb24o
KSB7IHJldHVybiA0MiB9LCBudWxsKTsKK30KKyAgICAKKyhmdW5jdGlvbihmLCBvLCBwKSB7Cisg
ICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHJlc3VsdCArPSBmdShvKTsKKyAgICAgICAgcmVz
dWx0ICs9IGJhcihmLCBvKTsKKyAgICAgICAgdmFyIHRtcCA9IG87CisgICAgICAgIG8gPSBwOwor
ICAgICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAocmVzdWx0ICE9IG4gKiBvLmYgKyBuICog
by5lKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KShm
b28sIHtmOjQyLCBlOjIzfSwge2Y6NDIsIGU6MjMsIGc6MTAwfSk7CisKSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1w
b2x5LXB1dC1ieS1vZmZzZXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXBvbHktcHV0LWJ5LW9m
ZnNldC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wb2x5LXB1dC1ieS1vZmZzZXQuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBvLmYg
PSAxOworfQorCitmdW5jdGlvbiBmdShvKSB7CisgICAgby5lID0gMjsKK30KKworZnVuY3Rpb24g
YmFyKGYsIG8pIHsKKyAgICBmKG8pOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytp
KSB7CisgICAgZm9vKHtmOjEsIGU6Mn0pOworICAgIGZvbyh7ZToxLCBmOjJ9KTsKKyAgICBmb28o
e2Q6MSwgZToyLCBmOjN9KTsKKyAgICBmdSh7ZjoxLCBlOjJ9KTsKKyAgICBmdSh7ZToxLCBmOjJ9
KTsKKyAgICBmdSh7ZDoxLCBlOjIsIGY6M30pOworfQorICAgIAorZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDA7ICsraSkgeworICAgIGJhcihmb28sIHtmOjF9KTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7
IH0sIG51bGwpOworICAgIGJhcihmdW5jdGlvbigpIHsgcmV0dXJuIDQyIH0sIG51bGwpOworfQor
ICAgIAorKGZ1bmN0aW9uKGYsIG8sIHApIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIg
biA9IDEwMDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAg
ZnUobyk7CisgICAgICAgIGJhcihmLCBvKTsKKyAgICAgICAgdmFyIHRtcCA9IG87CisgICAgICAg
IG8gPSBwOworICAgICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAoby5lICE9IDIpCisgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGluIG8uZTogIiArIG8uZTsKKyAgICBpZiAoby5m
ICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGluIG8uZjogIiArIG8uZjsK
KyAgICBpZiAocC5lICE9IDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGluIHAu
ZTogIiArIHAuZTsKKyAgICBpZiAocC5mICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHZhbHVlIGluIHAuZjogIiArIHAuZjsKK30pKGZvbywge2Y6NDIsIGU6MjN9LCB7Zjo0MiwgZToy
MywgZzoxMDB9KTsKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
Zm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXB1dC1ieS1vZmZzZXQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1tdWx0aS1wdXQtYnkt
b2Zmc2V0LXRvLXB1dC1ieS1vZmZzZXQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcHV0LWJ5
LW9mZnNldC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACitmdW5jdGlvbiBmb28o
bykgeworICAgIG8uZiA9IDE7Cit9CisKK2Z1bmN0aW9uIGZ1KG8pIHsKKyAgICBvLmUgPSAyOwor
fQorCitmdW5jdGlvbiBiYXIoZiwgbykgeworICAgIGYobyk7Cit9CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwOyArK2kpIHsKKyAgICBmb28oe2Y6MSwgZToyfSk7CisgICAgZm9vKHtlOjEsIGY6
Mn0pOworICAgIGZvbyh7ZDoxLCBlOjIsIGY6M30pOworICAgIGZ1KHtmOjEsIGU6Mn0pOworICAg
IGZ1KHtlOjEsIGY6Mn0pOworICAgIGZ1KHtkOjEsIGU6MiwgZjozfSk7Cit9CisgICAgCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgYmFyKGZvbywge2Y6MX0pOworICAgIGJh
cihmdW5jdGlvbigpIHsgfSwgbnVsbCk7CisgICAgYmFyKGZ1bmN0aW9uKCkgeyByZXR1cm4gNDIg
fSwgbnVsbCk7Cit9CisgICAgCisoZnVuY3Rpb24oZiwgbykgeworICAgIHZhciByZXN1bHQgPSAw
OworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkg
eworICAgICAgICBmdShvKTsKKyAgICAgICAgYmFyKGYsIG8pOworICAgIH0KKyAgICBpZiAoby5l
ICE9IDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGluIG8uZTogIiArIG8uZTsK
KyAgICBpZiAoby5mICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGluIG8u
ZjogIiArIG8uZjsKK30pKGZvbywge2Y6NDIsIGU6MjN9KTsKKwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXJlcGxh
Y2Utb3ItdHJhbnNpdGlvbi1wdXQtYnktb2Zmc2V0LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1y
ZXBsYWNlLW9yLXRyYW5zaXRpb24tcHV0LWJ5LW9mZnNldC5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNl
dC10by1yZXBsYWNlLW9yLXRyYW5zaXRpb24tcHV0LWJ5LW9mZnNldC5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUwIEBACitmdW5jdGlvbiBmb28obykgeworICAgIG8uZiA9IDE7Cit9CisK
K2Z1bmN0aW9uIGZ1KG8pIHsKKyAgICBvLmUgPSAyOworfQorCitmdW5jdGlvbiBiYXIoZiwgbykg
eworICAgIGYobyk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICBm
b28oe2Y6MSwgZToyfSk7CisgICAgZm9vKHtlOjEsIGY6Mn0pOworICAgIGZvbyh7ZDoxLCBlOjIs
IGY6M30pOworICAgIGZ1KHtmOjEsIGU6Mn0pOworICAgIGZ1KHtlOjEsIGY6Mn0pOworICAgIGZ1
KHtkOjEsIGU6MiwgZjozfSk7Cit9CisgICAgCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytp
KSB7CisgICAgYmFyKGZvbywge2Y6MX0pOworICAgIGJhcihmdW5jdGlvbigpIHsgfSwgbnVsbCk7
CisgICAgYmFyKGZ1bmN0aW9uKCkgeyByZXR1cm4gNDIgfSwgbnVsbCk7Cit9CisgICAgCisoZnVu
Y3Rpb24oZiwgbykgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBuID0gMTAwMDAwMDsK
KyAgICB2YXIgcDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2
YXIgcTsKKyAgICAgICAgaWYgKGkgJiAxKQorICAgICAgICAgICAgcSA9IG87CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHAgPSBxID0ge2U6NjF9OworICAgICAgICBmdShxKTsKKyAgICAgICAg
YmFyKGYsIHEpOworICAgIH0KKyAgICBpZiAoby5lICE9IDIpCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlIGluIG8uZTogIiArIG8uZTsKKyAgICBpZiAoby5mICE9IDEpCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGluIG8uZjogIiArIG8uZjsKKyAgICBpZiAocC5lICE9
IDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGluIHAuZTogIiArIHAuZTsKKyAg
ICBpZiAocC5mICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGluIHAuZjog
IiArIHAuZjsKK30pKGZvbywge2U6MjMsIGY6NDJ9KTsKKwpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1wdXQtc3RydWN0dXJlLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtcHV0LXN0cnVjdHVyZS5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2Zv
bGQtcHV0LXN0cnVjdHVyZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACitmdW5j
dGlvbiBmb28obykgeworICAgIG8uZiA9IDE7Cit9CisKK2Z1bmN0aW9uIGZ1KG8pIHsKKyAgICBv
LmUgPSAyOworfQorCitmdW5jdGlvbiBiYXIoZiwgbykgeworICAgIGYobyk7Cit9CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICBmb28oe2U6Mn0pOworICAgIGZvbyh7ZTox
LCBmOjJ9KTsKKyAgICBmdSh7ZjoxLCBlOjJ9KTsKKyAgICBmdSh7ZToxLCBmOjJ9KTsKKyAgICBm
dSh7ZDoxLCBlOjIsIGY6M30pOworfQorICAgIAorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsr
aSkgeworICAgIGJhcihmb28sIHtmOjF9KTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7IH0sIG51bGwp
OworICAgIGJhcihmdW5jdGlvbigpIHsgcmV0dXJuIDQyIH0sIG51bGwpOworfQorICAgIAorKGZ1
bmN0aW9uKGYsIG8pIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgbiA9IDEwMDAwMDA7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgZnUobyk7CisgICAg
ICAgIGJhcihmLCBvKTsKKyAgICB9CisgICAgaWYgKG8uZSAhPSAyKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmU6ICIgKyBvLmU7CisgICAgaWYgKG8uZiAhPSAxKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmY6ICIgKyBvLmY7Cit9KShmb28sIHtm
OjQyLCBlOjIzfSk7CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233322</attachid>
            <date>2014-06-18 13:43:24 -0700</date>
            <delta_ts>2014-06-18 14:25:28 -0700</delta_ts>
            <desc>ready for review</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>63349</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwMTEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE0LTA2LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIEFJIGFuZCBjb25zdGFudCBmb2xkZXIgc2hvdWxkIGJlIGFibGUgdG8gcHJlY2lzZWx5IHBy
dW5lIE11bHRpR2V0QnlPZmZzZXQvTXVsdGlQdXRCeU9mZnNldCBldmVuIGlmIHRoZSBiYXNlIHN0
cnVjdHVyZSBhYnN0cmFjdCB2YWx1ZSBpcyBub3QgYSBzaW5nbGV0b24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzkxOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbHNvIGFkZHMg
cHJ1bmluZyBvZiBQdXRTdHJ1Y3R1cmUsIHNpbmNlIEkgYmFzaWNhbGx5IGhhZCBubyBjaG9pY2Ug
YnV0CisgICAgICAgIHRvIGltcGxlbWVudCBzdWNoIGxvZ2ljIHdpdGhpbiBNdWx0aVB1dEJ5T2Zm
c2V0LgorICAgICAgICAKKyAgICAgICAgQWxzbyBhZGRzIGEgYnVuY2ggb2YgUHV0QnlJZCBjYWNo
ZSBzdGF0dXMgZHVtcGluZyB0byBieXRlY29kZSBkdW1waW5nLgorCisgICAgICAgICogYnl0ZWNv
ZGUvR2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6ZHVt
cEluQ29udGV4dCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAgICAg
ICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZVNldCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9sZFN0
cnVjdHVyZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU2V0OjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6
OmZpbHRlckFycmF5TW9kZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5oOgor
ICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRl
RWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNoYW5nZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y29udGFpbnMpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFj
dFZhbHVlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y291bGRCZVR5cGUp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVHlwZSk6CisgICAgICAgICog
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25z
dGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29u
c3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRHZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6
Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmFkZEJhc2VDaGVjayk6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZnJlZXplU3Ryb25nKToKKyAg
ICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9w
ZXJhdG9yPSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpR2V0QnlPZmZzZXQpOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9m
ZnNldC13aXRob3V0LWZvbGRpbmctdGhlLXN0cnVjdHVyZS1jaGVjay5qczogQWRkZWQuCisgICAg
ICAgIChmb28pOgorICAgICAgICAoZnUpOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGJheik6
CisgICAgICAgICguYmFyKToKKyAgICAgICAgKC5iYXopOgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcHV0LWJ5LW9mZnNldC13aXRob3V0LWZvbGRp
bmctdGhlLXN0cnVjdHVyZS1jaGVjay5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAg
ICAoZnUpOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGJheik6CisgICAgICAgICguYmFyKToK
KyAgICAgICAgKC5iYXopOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wcnVuZS1tdWx0aS1wdXQt
Ynktb2Zmc2V0LXJlcGxhY2Utb3ItdHJhbnNpdGlvbi12YXJpYW50LmpzOiBBZGRlZC4KKyAgICAg
ICAgKGZvbyk6CisgICAgICAgIChmdSk6CisgICAgICAgIChiYXIpOgorICAgICAgICAoYmF6KToK
KyAgICAgICAgKC5iYXIpOgorICAgICAgICAoLmJheik6CisKIDIwMTQtMDYtMTcgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBbZnRsb3B0XSBQdXRTdHJ1Y3R1cmUg
YW5kIFBoYW50b21QdXRTdHJ1Y3R1cmUgc2hvdWxkbid0IGxlYXZlIHRoZSB3b3JsZCBpbiBhIGNs
b2JiZXJlZCBzdGF0ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHJldmlzaW9uIDE3MDExMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNiArNDAyLDEyMCBA
QCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAjZW5kaWYKIH0KIAor
dm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiBvdXQs
IEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYgbWFwKQor
eworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCkg
KyBsb2NhdGlvbjsKKworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihp
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgIAorICAgIFVOVVNFRF9QQVJBTShpZGVudCk7
IC8vIHRlbGwgdGhlIGNvbXBpbGVyIHRvIHNodXQgdXAgaW4gY2VydGFpbiBwbGF0Zm9ybSBjb25m
aWd1cmF0aW9ucy4KKyAgICAKKyNpZiBFTkFCTEUoTExJTlQpCisgICAgaWYgKFN0cnVjdHVyZSog
c3RydWN0dXJlID0gaW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUuZ2V0KCkpIHsKKyAgICAgICAg
c3dpdGNoIChleGVjLT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvblswXS51
Lm9wY29kZSkpIHsKKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkX291dF9vZl9saW5lOgorICAgICAgICAgICAgb3V0LnByaW50KCIgbGxpbnQoIik7
CisgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIGV4ZWMsIHN0cnVjdHVy
ZSwgaWRlbnQpOworICAgICAgICAgICAgb3V0LnByaW50KCIpIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2Rp
cmVjdDoKKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CisgICAg
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgorICAg
ICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZToKKyAg
ICAgICAgICAgIG91dC5wcmludCgiIGxsaW50KCIpOworICAgICAgICAgICAgZHVtcFN0cnVjdHVy
ZShvdXQsICJwcmV2IiwgZXhlYywgc3RydWN0dXJlLCBpZGVudCk7CisgICAgICAgICAgICBvdXQu
cHJpbnQoIiwgIik7CisgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBleGVj
LCBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOworICAgICAgICAgICAg
aWYgKFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IGluc3RydWN0aW9uWzddLnUuc3RydWN0dXJlQ2hh
aW4uZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CisgICAgICAgICAg
ICAgICAgZHVtcENoYWluKG91dCwgZXhlYywgY2hhaW4sIGlkZW50KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG91dC5wcmludCgiKSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG91dC5wcmludCgiIGxsaW50KHVu
a25vd24pIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgor
CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJQdHIgPSBt
YXAuZ2V0KENvZGVPcmlnaW4obG9jYXRpb24pKSkgeworICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8gPSAqc3R1YlB0cjsKKyAgICAgICAgaWYgKHN0dWJJbmZvLnJlc2V0QnlHQykK
KyAgICAgICAgICAgIG91dC5wcmludCgiIChSZXNldCBCeSBHQykiKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChzdHViSW5mby5zZWVuKSB7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIgaml0KCIp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgICAgICAg
ICAgICAgIG91dC5wcmludCgicmVwbGFjZSwgIik7CisgICAgICAgICAgICAgICAgZHVtcFN0cnVj
dHVyZShvdXQsICJzdHJ1Y3QiLCBleGVjLCBzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VP
YmplY3RTdHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKKyAgICAg
ICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoInRyYW5zaXRpb24sICIpOworICAgICAgICAgICAgICAgIGR1bXBT
dHJ1Y3R1cmUob3V0LCAicHJldiIsIGV4ZWMsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24u
cHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiwgIik7CisgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0IiwgZXhl
Yywgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsK
KyAgICAgICAgICAgICAgICBpZiAoU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3R1YkluZm8udS5w
dXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoIiwgIik7CisgICAgICAgICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGV4ZWMsIGNo
YWluLCBpZGVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnRmKCJsaXN0ID0gWyIpOworICAgICAgICAgICAgICAgIFBvbHltb3JwaGljUHV0
QnlJZExpc3QqIGxpc3QgPSBzdHViSW5mby51LnB1dEJ5SWRMaXN0Lmxpc3Q7CisgICAgICAgICAg
ICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICIoIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nl
c3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGFjY2Vzcy5pc1JlcGxhY2UoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCJyZXBsYWNlLCAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1
bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgZXhlYywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBp
ZGVudCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlzU2V0dGVyKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgic2V0dGVyLCAiKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgZXhlYywgYWNj
ZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoYWNjZXNzLmlzQ3VzdG9tKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiY3VzdG9tLCAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0
LCAic3RydWN0IiwgZXhlYywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlzVHJhbnNpdGlvbigpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoInRyYW5zaXRpb24sICIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2IiwgZXhlYywgYWNjZXNzLm9sZFN0
cnVjdHVyZSgpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwg
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBl
eGVjLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChhY2Nlc3MuY2hhaW4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludCgiLCAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0
LCBleGVjLCBhY2Nlc3MuY2hhaW4oKSwgaWRlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludCgidW5rbm93biIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIpIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IG91dC5wcmludCgiXSIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6CisgICAgICAgICAgICAgICAgb3V0LnByaW50
ZigidW5zZXQiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludGYoIiki
KTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG1hcCk7CisjZW5k
aWYKK30KKwogdm9pZCBDb2RlQmxvY2s6OnByaW50Q2FsbE9wKFByaW50U3RyZWFtJiBvdXQsIEV4
ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25z
dCBjaGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSBjYWNoZUR1bXBNb2RlLCBib29sJiBoYXNQcmludGVk
UHJvZmlsaW5nLCBjb25zdCBDYWxsTGlua0luZm9NYXAmIG1hcCkKIHsKICAgICBpbnQgZHN0ID0g
KCsraXQpLT51Lm9wZXJhbmQ7CkBAIC05MjYsMjYgKzEwNDAsMzIgQEAgdm9pZCBDb2RlQmxvY2s6
OmR1bXBCeXRlY29kZSgKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZDogewog
ICAgICAgICAgICAgcHJpbnRQdXRCeUlkT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRf
YnlfaWQiKTsKKyAgICAgICAgICAgIHByaW50UHV0QnlJZENhY2hlU3RhdHVzKG91dCwgZXhlYywg
bG9jYXRpb24sIHN0dWJJbmZvcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZTogewogICAgICAgICAgICAgcHJpbnRQ
dXRCeUlkT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfaWRfb3V0X29mX2xpbmUi
KTsKKyAgICAgICAgICAgIHByaW50UHV0QnlJZENhY2hlU3RhdHVzKG91dCwgZXhlYywgbG9jYXRp
b24sIHN0dWJJbmZvcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDogewogICAgICAgICAgICAgcHJpbnRQ
dXRCeUlkT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfaWRfdHJhbnNpdGlvbl9k
aXJlY3QiKTsKKyAgICAgICAgICAgIHByaW50UHV0QnlJZENhY2hlU3RhdHVzKG91dCwgZXhlYywg
bG9jYXRpb24sIHN0dWJJbmZvcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdF9vdXRfb2ZfbGluZTogewog
ICAgICAgICAgICAgcHJpbnRQdXRCeUlkT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmUiKTsKKyAgICAgICAgICAgIHByaW50
UHV0QnlJZENhY2hlU3RhdHVzKG91dCwgZXhlYywgbG9jYXRpb24sIHN0dWJJbmZvcyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFu
c2l0aW9uX25vcm1hbDogewogICAgICAgICAgICAgcHJpbnRQdXRCeUlkT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJwdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwiKTsKKyAgICAgICAgICAg
IHByaW50UHV0QnlJZENhY2hlU3RhdHVzKG91dCwgZXhlYywgbG9jYXRpb24sIHN0dWJJbmZvcyk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9ieV9p
ZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZTogewogICAgICAgICAgICAgcHJpbnRQdXRC
eUlkT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3Jt
YWxfb3V0X29mX2xpbmUiKTsKKyAgICAgICAgICAgIHByaW50UHV0QnlJZENhY2hlU3RhdHVzKG91
dCwgZXhlYywgbG9jYXRpb24sIHN0dWJJbmZvcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyOiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNzAxMTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk4OSw2ICs5ODksNyBAQCBwcml2YXRlOgogICAgIGVudW0gQ2FjaGVEdW1wTW9kZSB7
IER1bXBDYWNoZXMsIERvbnREdW1wQ2FjaGVzIH07CiAgICAgdm9pZCBwcmludENhbGxPcChQcmlu
dFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwg
Y29uc3QgY2hhciogb3AsIENhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcs
IGNvbnN0IENhbGxMaW5rSW5mb01hcCYpOwogICAgIHZvaWQgcHJpbnRQdXRCeUlkT3AoUHJpbnRT
dHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNv
bnN0IGNoYXIqIG9wKTsKKyAgICB2b2lkIHByaW50UHV0QnlJZENhY2hlU3RhdHVzKFByaW50U3Ry
ZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYpOwogICAg
IHZvaWQgcHJpbnRMb2NhdGlvbkFuZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxv
Y2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CiAgICAgdm9pZCBw
cmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUq
LCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9wLCBp
bnQgb3BlcmFuZCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTcwMTEzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA4LDEyICsxMDgsMTQgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmlu
dAogICAgIAogICAgIG91dC5wcmludCgKICAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJl
U2V0KCksIGNvbnRleHQpLCAiLCAiLAotICAgICAgICAiWyIsIGxpc3REdW1wSW5Db250ZXh0KG1f
Y29uc3RhbnRDaGVja3MsIGNvbnRleHQpLCAiXSwgIiwKLSAgICAgICAgImFsdGVybmF0ZUJhc2Ug
PSAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSwgIiwgIiwK
LSAgICAgICAgInNwZWNpZmljVmFsdWUgPSAiLCBpbkNvbnRleHQoc3BlY2lmaWNWYWx1ZSgpLCBj
b250ZXh0KSwgIiwgIiwKLSAgICAgICAgIm9mZnNldCA9ICIsIG9mZnNldCgpKTsKKyAgICAgICAg
IlsiLCBsaXN0RHVtcEluQ29udGV4dChtX2NvbnN0YW50Q2hlY2tzLCBjb250ZXh0KSwgIl0iKTsK
KyAgICBpZiAobV9hbHRlcm5hdGVCYXNlKQorICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRl
QmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsK
KyAgICBpZiAoc3BlY2lmaWNWYWx1ZSgpKQorICAgICAgICBvdXQucHJpbnQoIiwgc3BlY2lmaWNW
YWx1ZSA9ICIsIGluQ29udGV4dChzcGVjaWZpY1ZhbHVlKCksIGNvbnRleHQpKTsKKyAgICBvdXQu
cHJpbnQoIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCkpOwogICAgIGlmIChtX2NhbGxMaW5rU3RhdHVz
KQotICAgICAgICBvdXQucHJpbnQoImNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CisgICAg
ICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOwogICAgIG91dC5w
cmludCgiPiIpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwMTEzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYg
KzU1LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhIW1fc3Ry
dWN0dXJlU2V0LnNpemUoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
IWlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQogICAgIGNvbnN0IENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dENoZWNrczsgfQogICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4g
bV9hbHRlcm5hdGVCYXNlOyB9CiAgICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwMTEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDYgKzg3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJl
OwogICAgIH0KICAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2Up
OworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAogICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0OwogICAgIAogICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCShyZXZpc2lvbiAxNzAxMTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cnVj
dHVyZVNldC5oIgogCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgPHd0
Zi9Db21tYVByaW50ZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNjAsNiArMTYxLDgwIEBA
IHZvaWQgU3RydWN0dXJlU2V0OjpleGNsdWRlKGNvbnN0IFN0cnVjdHUKICAgICAgICAgY2xlYXIo
KTsKIH0KIAorbmFtZXNwYWNlIHsKKworY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZUNvbnRh
aW5zIHsKK3B1YmxpYzoKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlQ29udGFpbnMoY29uc3Qg
REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZh
bHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUuY29udGFpbnMoc3RydWN0
dXJlKTsKKyAgICB9Citwcml2YXRlOgorICAgIGNvbnN0IERGRzo6U3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSYgbV92YWx1ZTsKK307CisKK2NsYXNzIFNwZWN1bGF0ZWRUeXBlQ29udGFpbnMgeworcHVi
bGljOgorICAgIFNwZWN1bGF0ZWRUeXBlQ29udGFpbnMoU3BlY3VsYXRlZFR5cGUgdHlwZSkKKyAg
ICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3IoKShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUg
JiBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKKyAgICB9Citwcml2YXRlOgor
ICAgIFNwZWN1bGF0ZWRUeXBlIG1fdHlwZTsKK307CisKK2NsYXNzIEFycmF5TW9kZXNDb250YWlu
cyB7CitwdWJsaWM6CisgICAgQXJyYXlNb2Rlc0NvbnRhaW5zKEFycmF5TW9kZXMgYXJyYXlNb2Rl
cykKKyAgICAgICAgOiBtX2FycmF5TW9kZXMoYXJyYXlNb2RlcykKKyAgICB7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3IoKShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2FycmF5TW9kZXMgJiBhcnJheU1vZGVGcm9tU3RydWN0dXJlKHN0cnVjdHVy
ZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBBcnJheU1vZGVzIG1fYXJyYXlNb2RlczsKK307CisK
K30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIFN0cnVjdHVyZVNldDo6ZmlsdGVyKGNv
bnN0IERGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCit7CisgICAgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZUNvbnRhaW5zIGZ1bmN0b3Iob3RoZXIpOworICAgIGdlbmVyaWNGaWx0ZXIo
ZnVuY3Rvcik7Cit9CisKK3ZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoU3BlY3VsYXRlZFR5cGUg
dHlwZSkKK3sKKyAgICBTcGVjdWxhdGVkVHlwZUNvbnRhaW5zIGZ1bmN0b3IodHlwZSk7CisgICAg
Z2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVTZXQ6OmZpbHRlckFy
cmF5TW9kZXMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKQoreworICAgIEFycmF5TW9kZXNDb250YWlu
cyBmdW5jdG9yKGFycmF5TW9kZXMpOworICAgIGdlbmVyaWNGaWx0ZXIoZnVuY3Rvcik7Cit9CisK
K3ZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoY29uc3QgREZHOjpBYnN0cmFjdFZhbHVlJiBvdGhl
cikKK3sKKyAgICBmaWx0ZXIob3RoZXIubV9zdHJ1Y3R1cmUpOworICAgIGZpbHRlcihvdGhlci5t
X3R5cGUpOworICAgIGZpbHRlckFycmF5TW9kZXMob3RoZXIubV9hcnJheU1vZGVzKTsKK30KKwog
Ym9vbCBTdHJ1Y3R1cmVTZXQ6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikg
Y29uc3QKIHsKICAgICBpZiAoaXNUaGluKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDE3MDExMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIERGRyB7CiBjbGFz
cyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworc3RydWN0IEFic3RyYWN0VmFsdWU7CiB9CiAKIGNs
YXNzIFN0cnVjdHVyZVNldCB7CkBAIC05Niw2ICs5NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
aWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgdm9pZCBleGNsdWRlKGNvbnN0IFN0cnVj
dHVyZVNldCYpOwogICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IERGRzo6U3RydWN0dXJlQWJz
dHJhY3RWYWx1ZSYpOworICAgIHZvaWQgZmlsdGVyKFNwZWN1bGF0ZWRUeXBlKTsKKyAgICB2b2lk
IGZpbHRlckFycmF5TW9kZXMoQXJyYXlNb2Rlcyk7CisgICAgdm9pZCBmaWx0ZXIoY29uc3QgREZH
OjpBYnN0cmFjdFZhbHVlJik7CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
ICAgICB2b2lkIGdlbmVyaWNGaWx0ZXIoRnVuY3RvciYgZnVuY3RvcikKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzAxMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0NDUsOSArMTQ0NSwxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICBpZiAoIWZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzQ2xlYXIoKSkgewotICAgICAgICAgICAg
b2JzZXJ2ZVRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgY2xvYmJlckxpbWl0LCBub2RlLT50
cmFuc2l0aW9uKCktPnByZXZpb3VzLCBub2RlLT50cmFuc2l0aW9uKCktPm5leHQpOwotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnRyYW5zaXRp
b24oKS0+bmV4dCk7CisgICAgICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9z
dHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkKKyAg
ICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb24oCisgICAgICAgICAg
ICAgICAgICAgIGNsb2JiZXJMaW1pdCwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cywgbm9k
ZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdl
dEJ1dHRlcmZseToKQEAgLTE1NzYsMzkgKzE1ODAsNDUgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBNdWx0aUdldEJ5
T2Zmc2V0OiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAv
LyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KLQotICAg
ICAgICAvLyBUaGlzIHNob3VsZCBqdXN0IGZpbHRlciBkb3duIHRoZSBjYXNlcyBpbiBNdWx0aUdl
dEJ5T2Zmc2V0LiBJZiB0aGF0IHJlc3VsdHMgaW4gYWxsCi0gICAgICAgIC8vIGNhc2VzIGhhdmlu
ZyB0aGUgc2FtZSBvZmZzZXQgdGhlbiB3ZSBzaG91bGQgc3RyZW5ndGggcmVkdWNlIGl0IHRvIGEg
Q2hlY2tTdHJ1Y3R1cmUgKwotICAgICAgICAvLyBHZXRCeU9mZnNldC4KLSAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQotICAgICAgICBpZiAo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkp
IHsKLSAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgICAgICAgICBjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAg
aWYgKCF2YXJpYW50LnN0cnVjdHVyZVNldCgpLmNvbnRhaW5zKHN0cnVjdHVyZSkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZmlsdGVyKHZhbHVlLCBzdHJ1Y3R1
cmUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKLSAgICAg
ICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAg
ICAgIGRvbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBUaGlz
IGNvZGUgd2lsbCBmaWx0ZXIgdGhlIGJhc2UgdmFsdWUgaW4gYSBtYW5uZXIgdGhhdCBpcyBwb3Nz
aWJseSBkaWZmZXJlbnQgKGVpdGhlciBtb3JlCisgICAgICAgIC8vIG9yIGxlc3MgcHJlY2lzZSkg
dGhhbiB0aGUgd2F5IGl0IHdvdWxkIGJlIGZpbHRlcmVkIGlmIHRoaXMgd2FzIHN0cmVuZ3RoLXJl
ZHVjZWQgdG8gYQorICAgICAgICAvLyBDaGVja1N0cnVjdHVyZS4gVGhpcyBpcyBmaW5lLiBJdCdz
IGxlZ2FsIGZvciBkaWZmZXJlbnQgcGFzc2VzIG92ZXIgdGhlIGNvZGUgdG8gcHJvdmUKKyAgICAg
ICAgLy8gZGlmZmVyZW50IHRoaW5ncyBhYm91dCB0aGUgY29kZSwgc28gbG9uZyBhcyBhbGwgb2Yg
dGhlbSBhcmUgc291bmQuIFRoYXQgZXZlbiBpbmNsdWRlcworICAgICAgICAvLyBvbmUgZ3V5IHBy
b3ZpbmcgdGhhdCBjb2RlIHNob3VsZCBuZXZlciBleGVjdXRlIChkdWUgdG8gYSBjb250cmFkaWN0
aW9uKSBhbmQgYW5vdGhlciBndXkKKyAgICAgICAgLy8gbm90IGZpbmRpbmcgdGhhdCBjb250cmFk
aWN0aW9uLiBJZiBzb21lb25lIGV2ZXIgcHJvdmVkIHRoYXQgdGhlcmUgd291bGQgYmUgYQorICAg
ICAgICAvLyBjb250cmFkaWN0aW9uIHRoZW4gdGhlcmUgbXVzdCBhbHdheXMgYmUgYSBjb250cmFk
aWN0aW9uIGV2ZW4gaWYgc3Vic2VxdWVudCBwYXNzZXMgZG9uJ3QKKyAgICAgICAgLy8gcmVhbGl6
ZSBpdC4gVGhpcyBpcyB0aGUgY2FzZSBoZXJlLgorICAgICAgICAKKyAgICAgICAgLy8gT3JkaW5h
cmlseSB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIHdpdGggY2FsbGluZyBzZXRGb3VuZENvbnN0YW50
cygpCisgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIGVmZmVjdCBvbiBjb21waWxlIHRpbWVzLCBi
dXQgdGhpcyBub2RlIGlzIEZUTC1vbmx5LgorICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOworICAgICAgICAKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OworICAgICAg
ICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+
bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEo
KS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSB2YXJpYW50LnN0
cnVjdHVyZVNldCgpOworICAgICAgICAgICAgc2V0LmZpbHRlcihiYXNlKTsKKyAgICAgICAgICAg
IGlmIChzZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgYmFzZVNldC5tZXJnZShzZXQpOworICAgICAgICAgICAgaWYgKCF2YXJpYW50LnNwZWNpZmlj
VmFsdWUoKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRvbmUp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNS
ZXN1bHQ7CisgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLAorICAgICAgICAgICAgICAgICptX2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFs
dWUoKSksCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7
CisgICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KQotICAg
ICAgICAgICAgc2V0Lm1lcmdlKG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNb
aV0uc3RydWN0dXJlU2V0KCkpOworICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
Y2hhbmdlU3RydWN0dXJlKG1fZ3JhcGgsIGJhc2VTZXQpID09IENvbnRyYWRpY3Rpb24pCisgICAg
ICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgZmls
dGVyKG5vZGUtPmNoaWxkMSgpLCBzZXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFw
VG9wKCk7CisgICAgICAgIGZvck5vZGUobm9kZSkgPSByZXN1bHQ7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgICAgIApAQCAtMTYxNyw1OCArMTYyNywzNiBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE11
bHRpUHV0QnlPZmZzZXQ6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWND
ZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlz
LgotCi0gICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3QgZmlsdGVyIGRvd24gdGhlIGNhc2VzIGlu
IE11bHRpUHV0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0cyBpbiBlaXRoZXIKLSAgICAgICAgLy8g
b25lIGNhc2UsIG9yIG5vdGhpbmcgYnV0IHJlcGxhY2UgY2FzZXMgYW5kIHRoZXkgaGF2ZSB0aGUg
c2FtZSBvZmZzZXQsIHRoZW4gd2Ugc2hvdWxkCi0gICAgICAgIC8vIGp1c3Qgc3RyZW5ndGggcmVk
dWNlIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBjb21iaW5hdGlvbiBvZiBDaGVja1N0cnVjdHVyZSwK
LSAgICAgICAgLy8gW1JlXUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBQdXRTdHJ1Y3R1cmUsIGFu
ZCBQdXRCeU9mZnNldC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzIyOQotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1
ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgIGJvb2wgZG9uZSA9
IGZhbHNlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9m
ZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
dmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCF2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
LmNvbnRhaW5zKHN0cnVjdHVyZSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eUlkVmFyaWFudDo6UmVwbGFjZSkgewotICAgICAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+
Y2hpbGQxKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJp
YW50OjpUcmFuc2l0aW9uKTsKLSAgICAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9i
YmVyTGltaXQpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldCht
X2dyYXBoLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICBtX3N0YXRl
LnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRv
bmUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IFN0cnVjdHVyZVNldCBvbGRTZXQ7CiAgICAgICAgIFN0cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAg
ICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7CisgICAgICAgIAorICAgICAgICAvLyBP
cmRpbmFyaWx5IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCBjYWxsaW5nIHNldEZvdW5kQ29u
c3RhbnRzKCkKKyAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGlt
ZXMsIGJ1dCB0aGlzIG5vZGUgaXMgRlRMLW9ubHkuCisgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7CisgICAgICAgIAorICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7
CiAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBvbGRTZXQubWVyZ2Uo
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgdGhpc1Nl
dCA9IHZhcmlhbnQub2xkU3RydWN0dXJlKCk7CisgICAgICAgICAgICB0aGlzU2V0LmZpbHRlcihi
YXNlKTsKKyAgICAgICAgICAgIGlmICh0aGlzU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6VHJhbnNpdGlvbikgewotICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgK
LSAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbih2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRy
YW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkpOworICAgICAgICAgICAgICAgIGlm
ICh0aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFRyYW5zaXRpb24odmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCksIHZh
cmlhbnQubmV3U3RydWN0dXJlKCkpKTsKKyAgICAgICAgICAgICAgICB9IC8vIGVsc2UgdGhpcyBp
cyByZWFsbHkgYSByZXBsYWNlLgogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQodmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFT
U0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7Ci0gICAgICAg
ICAgICAgICAgbmV3U2V0Lm1lcmdlKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAg
ICAgICAgIG5ld1NldC5tZXJnZSh0aGlzU2V0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBvbGRTZXQpOwogICAgICAg
ICBvYnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7Ci0gICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBuZXdTZXQpOworICAgICAgICBp
ZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1fZ3JhcGgsIG5ld1Nl
dCkgPT0gQ29udHJhZGljdGlvbikKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTcwMTEzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc5LDYgKzE3OSwxNyBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6
OmZpbHRlcihHCiAgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoZ3JhcGgpOwogfQogCitGaWx0
cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmNoYW5nZVN0cnVjdHVyZShHcmFwaCYgZ3JhcGgs
IGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCit7CisgICAgbV90eXBlICY9IG90aGVyLnNwZWN1
bGF0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICBtX2FycmF5TW9kZXMgPSBvdGhlci5hcnJheU1v
ZGVzRnJvbVN0cnVjdHVyZXMoKTsKKyAgICBtX3N0cnVjdHVyZSA9IG90aGVyOworICAgIAorICAg
IGZpbHRlclZhbHVlQnlUeXBlKCk7CisgICAgCisgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHko
Z3JhcGgpOworfQorCiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlckFycmF5
TW9kZXMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKQogewogICAgIEFTU0VSVChhcnJheU1vZGVzKTsK
QEAgLTIyOSw2ICsyNDAsMTMgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0
ZXJCeQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2Jvb2wgQWJzdHJhY3RWYWx1ZTo6Y29udGFp
bnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvdWxkQmVUeXBl
KHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKQorICAgICAgICAmJiAobV9hcnJh
eU1vZGVzICYgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpKQorICAgICAgICAmJiBt
X3N0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpOworfQorCiBGaWx0cmF0aW9uUmVzdWx0IEFi
c3RyYWN0VmFsdWU6OmZpbHRlcihjb25zdCBBYnN0cmFjdFZhbHVlJiBvdGhlcikKIHsKICAgICBt
X3R5cGUgJj0gb3RoZXIubV90eXBlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE3MDExMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsMTIg
KzI2NywxMiBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjb3VsZEJlVHlwZShTcGVjdWxhdGVkVHlwZSBk
ZXNpcmVkVHlwZSkKKyAgICBib29sIGNvdWxkQmVUeXBlKFNwZWN1bGF0ZWRUeXBlIGRlc2lyZWRU
eXBlKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICEhKG1fdHlwZSAmIGRlc2lyZWRUeXBl
KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1R5cGUoU3BlY3VsYXRlZFR5cGUgZGVzaXJlZFR5
cGUpCisgICAgYm9vbCBpc1R5cGUoU3BlY3VsYXRlZFR5cGUgZGVzaXJlZFR5cGUpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gIShtX3R5cGUgJiB+ZGVzaXJlZFR5cGUpOwogICAgIH0KQEAg
LTI4NCw2ICsyODQsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIEZpbHRy
YXRpb25SZXN1bHQgZmlsdGVyKGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKICAgICAKKyAgICBGaWx0
cmF0aW9uUmVzdWx0IGNoYW5nZVN0cnVjdHVyZShHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYp
OworICAgIAorICAgIGJvb2wgY29udGFpbnMoU3RydWN0dXJlKikgY29uc3Q7CisgICAgCiAgICAg
Ym9vbCB2YWxpZGF0ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlz
SGVhcFRvcCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3MDExMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjUsNiArMTI1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dFN0
cnVjdHVyZTogeworICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKQorICAgICAgICAgICAgICAgICAgICAh
PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20o
KTsKKyAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
Q2hlY2tGdW5jdGlvbjogewogICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnZhbHVlKCkgIT0gbm9kZS0+ZnVuY3Rpb24oKS0+dmFsdWUoKSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDcsNDcgKzE1Nyw2OSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5
T2Zmc2V0OiB7Ci0gICAgICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEo
KTsKLSAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgRWRnZSBiYXNlRWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAg
ICAgIE5vZGUqIGJhc2UgPSBiYXNlRWRnZS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgTXVsdGlH
ZXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogCi0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hp
bGQpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0
cnVjdHVyZSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8g
Rmlyc3QgcHJ1bmUgdGhlIHZhcmlhbnRzLCB0aGVuIGNoZWNrIGlmIHRoZSBNdWx0aUdldEJ5T2Zm
c2V0IGNhbiBiZQorICAgICAgICAgICAgICAgIC8vIHN0cmVuZ3RoLXJlZHVjZWQgdG8gYSBHZXRC
eU9mZnNldC4KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBj
b25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5jb250YWlucyhzdHJ1Y3R1
cmUpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIHN0cnVj
dHVyZSwgdmFyaWFudCwgZGF0YS5pZGVudGlmaWVyTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxpbWluYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2Up
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0
ZShpbmRleEluQmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQg
dGhlIHN0YXRlIGJlZm9yZS4KKyAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsgLy8g
RG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0
aGlzLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5maWx0ZXIoYmFzZVZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcmlhbnRzW2ktLV0gPSBkYXRhLnZhcmlhbnRz
Lmxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudmFyaWFudHMucmVtb3ZlTGFz
dCgpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLnNpemUoKSAhPSAxKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0QnlPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
bm9kZSwgYmFzZVZhbHVlLCBkYXRhLnZhcmlhbnRzWzBdLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OiB7Ci0gICAgICAgICAgICAgICAg
RWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBj
aGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CisgICAgICAgICAgICAgICAgRWRnZSBiYXNlRWRnZSA9
IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBiYXNlRWRnZS5u
b2RlKCk7CiAgICAgICAgICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIEFic3RyYWN0VmFsdWUgYmFzZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2UpOwogCi0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hp
bGQpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0
cnVjdHVyZSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgbV9p
bnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2ggQ0ZBIG92ZXIgdGhpcyBu
b2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3JlLgorICAgICAgICAgICAgICAgIGVsaW1p
bmF0ZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBmb2xkZXIg
dG8gZG8gdGhpbmdzIHRvIHRoaXMuCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRz
W2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXZhcmlhbnQub2xkU3RydWN0dXJlKCkuY29u
dGFpbnMoc3RydWN0dXJlKSkKKworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIFB1
dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5maWx0ZXIoYmFzZVZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm9sZFN0cnVjdHVy
ZSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJpYW50c1tp
LS1dID0gZGF0YS52YXJpYW50cy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LnZhcmlhbnRzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBlbWl0UHV0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCB2YXJpYW50LCBk
YXRhLmlkZW50aWZpZXJOdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbgorICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5vbmx5U3RydWN0dXJlKCkg
PT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFudC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS52YXJpYW50cy5zaXplKCkgIT0gMSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgZW1pdFB1dEJ5T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIG5v
ZGUsIGJhc2VWYWx1ZSwgZGF0YS52YXJpYW50c1swXSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMDAs
NyArMjMyLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRWRnZS51c2VL
aW5kKCkgIT0gQ2VsbFVzZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZv
ck5vZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlIGJhc2VWYWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCk7CisKKyAg
ICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gUHVz
aCBDRkEgb3ZlciB0aGlzIG5vZGUgYWZ0ZXIgd2UgZ2V0IHRoZSBzdGF0ZSBiZWZvcmUuCisgICAg
ICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0
IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KKworICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1
cmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKQEAgLTIxNCw3ICsyNTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgZW1pdEdldEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgc3RydWN0dXJlLCBz
dGF0dXNbMF0sIGlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9m
ZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgc3RhdHVzWzBdLCBpZGVudGlmaWVy
TnVtYmVyKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTIyOCw3ICsyNjUsMTIgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGRFZGdlLnVzZUtp
bmQoKSA9PSBDZWxsVXNlKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1cmUub25s
eVN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZVZhbHVlID0g
bV9zdGF0ZS5mb3JOb2RlKGNoaWxkKTsKKworICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIu
ZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3
ZSBnZXQgdGhlIHN0YXRlIGJlZm9yZS4KKyAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1
ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5n
cyB0byB0aGlzLgorCisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNl
VmFsdWUubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICgh
c3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
QEAgLTI0NCw3ICsyODYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMu
bnVtVmFyaWFudHMoKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBlbWl0UHV0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBu
b2RlLCBzdGF0dXNbMF0sIGlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgICAgIGVtaXRQ
dXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgc3RhdHVzWzBdLCBpZGVu
dGlmaWVyTnVtYmVyKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTMzNiwzMyArMzc4LDI0IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KICAgICAgICAgCi0gICAgdm9p
ZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIpCisgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5k
ZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNv
bnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQog
ICAgIHsKICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAg
IEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIE5vZGUqIGNoaWxkID0g
Y2hpbGRFZGdlLm5vZGUoKTsKIAotICAgICAgICBib29sIG5lZWRzQ2VsbENoZWNrID0gbV9zdGF0
ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGw7Ci0gICAgICAgIAotICAgICAgICBB
U1NFUlQoIXZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChz
dHJ1Y3R1cmUsIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuY29udGFpbnMoc3RydWN0dXJlKSk7Ci0g
ICAgICAgIAotICAgICAgICAvLyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2gg
dGhlIENGQSBmb3J3YXJkIG92ZXIgdGhlIEdldEJ5SWQKLSAgICAgICAgLy8gYW5kIG1ha2Ugc3Vy
ZSB3ZSBzaWduYWwgdG8gdGhlIGxvb3AgdGhhdCBpdCBzaG91bGQgY29udGludWUgYW5kIG5vdAot
ICAgICAgICAvLyBkbyBhbnkgZWxpbWluYXRpb25zLgotICAgICAgICBtX2ludGVycHJldGVyLmV4
ZWN1dGUoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChuZWVkc0NlbGxDaGVj
aykgewotICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBvcmlnaW4sIGNoaWxkRWRnZSk7
Ci0gICAgICAgIH0KKyAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFz
ZVZhbHVlLCB2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2
YXJpYW50LnNwZWNpZmljVmFsdWUoKSkgewogICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9D
b25zdGFudChub2RlLCBtX2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjaGlsZEVk
Z2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5h
dGVCYXNlKCkpIHsKKyAgICAgICAgICAgIGNoaWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29u
c3RhbnQoaW5kZXhJbkJsb2NrLCBvcmlnaW4sIHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsKKyAg
ICAgICAgICAgIGNoaWxkRWRnZSA9IEVkZ2UoY2hpbGQsIEtub3duQ2VsbFVzZSk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsK
ICAgICAgICAgCiAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAKQEAgLTM4
MSwyMyArNDE0LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNz
RGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1
dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgdm9pZCBl
bWl0UHV0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBB
YnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsKICAgICAgICAgTm9kZU9yaWdpbiBvcmln
aW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQx
KCk7Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKICAgICAgICAgCi0g
ICAgICAgIGJvb2wgbmVlZHNDZWxsQ2hlY2sgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlw
ZSAmIH5TcGVjQ2VsbDsKLSAgICAgICAgCi0gICAgICAgIC8vIE5vdyBiZWZvcmUgd2UgZG8gYW55
dGhpbmcgZWxzZSwgcHVzaCB0aGUgQ0ZBIGZvcndhcmQgb3ZlciB0aGUgUHV0QnlJZAotICAgICAg
ICAvLyBhbmQgbWFrZSBzdXJlIHdlIHNpZ25hbCB0byB0aGUgbG9vcCB0aGF0IGl0IHNob3VsZCBj
b250aW51ZSBhbmQgbm90Ci0gICAgICAgIC8vIGRvIGFueSBlbGltaW5hdGlvbnMuCi0gICAgICAg
IG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOwotCi0gICAgICAgIGlmIChuZWVk
c0NlbGxDaGVjaykgewotICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBvcmlnaW4sIGNo
aWxkRWRnZSk7Ci0gICAgICAgIH0KKyAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywg
bm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKIAogICAgICAgICBjaGls
ZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogCkBAIC00NTksNiArNDgxLDI1IEBAIHBy
aXZhdGU6CiAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVu
dGlmaWVyTnVtYmVyOwogICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5k
KHN0b3JhZ2VBY2Nlc3NEYXRhKTsKICAgICB9CisgICAgCisgICAgdm9pZCBhZGRCYXNlQ2hlY2so
CisgICAgICAgIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJh
Y3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICB7CisgICAg
ICAgIGlmICghYmFzZVZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgeworICAgICAg
ICAgICAgLy8gQXJpc2VzIHdoZW4gd2UgcHJ1bmUgTXVsdGlHZXRCeU9mZnNldC4gV2UgY291bGQg
aGF2ZSBhCisgICAgICAgICAgICAvLyBNdWx0aUdldEJ5T2Zmc2V0IHdpdGggYSBzaW5nbGUgdmFy
aWFudCB0aGF0IGNoZWNrcyBmb3Igc3RydWN0dXJlIFMsCisgICAgICAgICAgICAvLyBhbmQgdGhl
IGlucHV0IGhhcyBzdHJ1Y3R1cmVzIFMgYW5kIFQsIGZvciBleGFtcGxlLgorICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAg
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzZXQpKSwgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYmFz
ZVZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkgeworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFu
dG9tLCBub2RlLT5vcmlnaW4sIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgfQorICAgIH0KIAog
ICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1
bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDE3MDExMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NTIsNyArOTUyLDcgQEAgRnJvemVuVmFsdWUqIEdyYXBoOjpmcmVl
emUoSlNWYWx1ZSB2YWx1ZQogCiBGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZVN0cm9uZyhKU1Zh
bHVlIHZhbHVlKQogewotICAgIEZyb3plblZhbHVlKiByZXN1bHQgPSBmcmVlemUodmFsdWUpOwor
ICAgIEZyb3plblZhbHVlKiByZXN1bHQgPSBmcmVlemVGcmFnaWxlKHZhbHVlKTsKICAgICByZXN1
bHQtPnN0cmVuZ3RoZW5UbyhTdHJvbmdWYWx1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3MDExMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ2LDggKzE0Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGhyZWFkKCk7CiAgICAgCiAgICAg
RnJvemVuVmFsdWUqIGZyZWV6ZUZyYWdpbGUoSlNWYWx1ZSB2YWx1ZSk7Ci0gICAgRnJvemVuVmFs
dWUqIGZyZWV6ZShKU1ZhbHVlIHZhbHVlKTsgLy8gV2UgdXNlIHdlYWsgZnJlZXppbmcgYnkgZGVm
YXVsdC4KLSAgICBGcm96ZW5WYWx1ZSogZnJlZXplU3Ryb25nKEpTVmFsdWUgdmFsdWUpOyAvLyBT
aG9ydGhhbmQgZm9yIGZyZWV6ZSh2YWx1ZSktPm1hcmtTdHJvbmdseSgpLgorICAgIEZyb3plblZh
bHVlKiBmcmVlemUoSlNWYWx1ZSB2YWx1ZSk7IC8vIFdlIHVzZSB3ZWFrIGZyZWV6aW5nIGJ5IGRl
ZmF1bHQuIFNob3J0aGFuZCBmb3IgZnJlZXplRnJhZ2lsZSh2YWx1ZSktPnN0cmVuZ3RoZW5UbyhX
ZWFrVmFsdWUpOworICAgIEZyb3plblZhbHVlKiBmcmVlemVTdHJvbmcoSlNWYWx1ZSB2YWx1ZSk7
IC8vIFNob3J0aGFuZCBmb3IgZnJlZXplRnJhZ2lsZSh2YWx1ZSktPnN0cmVuZ3RoZW5UbyhTdHJv
bmdWYWx1ZSkuCiAgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBG
cm96ZW5WYWx1ZSogdmFsdWUpOwogICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9k
ZSwgSlNWYWx1ZSB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTcwMTEzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDE4IEBAIHB1YmxpYzoKICAgICAgICAgc2V0Q2xvYmJl
cmVkKG90aGVyLmlzQ2xvYmJlcmVkKCkpOwogICAgIH0KICAgICAKKyAgICBBTFdBWVNfSU5MSU5F
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG9wZXJhdG9yPShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICB7CisgICAgICAgIG1fc2V0ID0gc3RydWN0dXJlOworICAgICAgICBzZXRDbG9iYmVyZWQo
ZmFsc2UpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIEFMV0FZU19JTkxJTkUg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVyZVNldCYgb3Ro
ZXIpCisgICAgeworICAgICAgICBtX3NldCA9IG90aGVyOworICAgICAgICBzZXRDbG9iYmVyZWQo
ZmFsc2UpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQogICAgIEFMV0FZU19JTkxJTkUg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG90aGVyKQogICAgIHsKICAgICAgICAgbV9zZXQgPSBvdGhlci5tX3NldDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShy
ZXZpc2lvbiAxNzAxMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwMiw2ICszMjAyLDEyIEBAIHByaXZhdGU6
CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgCiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9ub2RlLT5tdWx0aUdl
dEJ5T2Zmc2V0RGF0YSgpOworCisgICAgICAgIGlmIChkYXRhLnZhcmlhbnRzLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGNyZWF0aW5nIGEgUGhpIGZ1bmN0aW9u
IHdpdGggemVybyBpbnB1dHMuIExMVk0gZG9lc24ndCBsaWtlIHRoYXQuCisgICAgICAgICAgICB0
ZXJtaW5hdGUoQmFkQ2FjaGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ssIDI+IGJsb2NrcyhkYXRhLnZhcmlhbnRz
LnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyBpLS07KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xkLW11
bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC13aXRob3V0LWZvbGRpbmctdGhlLXN0
cnVjdHVyZS1jaGVjay5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1nZXQtYnktb2Zmc2V0LXdpdGhv
dXQtZm9sZGluZy10aGUtc3RydWN0dXJlLWNoZWNrLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8t
Z2V0LWJ5LW9mZnNldC13aXRob3V0LWZvbGRpbmctdGhlLXN0cnVjdHVyZS1jaGVjay5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJldHVy
biBvLmY7Cit9CisKK2Z1bmN0aW9uIGZ1KG8pIHsKKyAgICByZXR1cm4gby5lOworfQorCitmdW5j
dGlvbiBiYXIoZiwgbykgeworICAgIHJldHVybiBmKG8pOworfQorCitmdW5jdGlvbiBiYXooZiwg
bykgeworICAgIHJldHVybiBmKG8pOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytp
KSB7CisgICAgZm9vKHtmOjEsIGU6Mn0pOworICAgIGZvbyh7ZToxLCBmOjJ9KTsKKyAgICBmb28o
e2Q6MSwgZToyLCBmOjN9KTsKKyAgICBmdSh7ZjoxLCBlOjJ9KTsKKyAgICBmdSh7ZToxLCBmOjIs
IGc6M30pOworICAgIGZ1KHtkOjEsIGU6MiwgZjozLCBnOjR9KTsKK30KKyAgICAKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICBiYXIoZm9vLCB7ZjoxfSk7CisgICAgYmFyKGZ1
bmN0aW9uKCkgeyB9LCBudWxsKTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7IHJldHVybiA0MjsgfSwg
bnVsbCk7CisgICAgYmF6KGZ1LCB7ZToxfSk7CisgICAgYmF6KGZ1bmN0aW9uKCkgeyB9LCBudWxs
KTsKKyAgICBiYXooZnVuY3Rpb24oKSB7IHJldHVybiA0MjsgfSwgbnVsbCk7Cit9CisgICAgCiso
ZnVuY3Rpb24oZiwgZywgbywgcCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBuID0g
MTAwMDAwMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIg
cTsKKyAgICAgICAgaWYgKGkgPT0gbiAtIDEpCisgICAgICAgICAgICBxID0gcDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcSA9IG87CisgICAgICAgIHJlc3VsdCArPSBiYXooZywgcSk7Cisg
ICAgICAgIHJlc3VsdCArPSBiYXIoZiwgcSk7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gKG4g
LSAxKSAqIChvLmYgKyBvLmUpICsgMTIgKyAxMykKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0OiAiICsgcmVzdWx0OworfSkoZm9vLCBmdSwge2Y6NDIsIGU6Mn0sIHtlOjEyLCBmOjEz
LCBnOjE0fSk7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZm9s
ZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXB1dC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5nLXRo
ZS1zdHJ1Y3R1cmUtY2hlY2suanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcHV0LWJ5LW9mZnNldC13
aXRob3V0LWZvbGRpbmctdGhlLXN0cnVjdHVyZS1jaGVjay5qcwkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0
LXRvLXB1dC1ieS1vZmZzZXQtd2l0aG91dC1mb2xkaW5nLXRoZS1zdHJ1Y3R1cmUtY2hlY2suanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBv
LmYgPSAxOworfQorCitmdW5jdGlvbiBmdShvKSB7CisgICAgby5lID0gMjsKK30KKworZnVuY3Rp
b24gYmFyKGYsIG8pIHsKKyAgICBmKG8pOworfQorCitmdW5jdGlvbiBiYXooZiwgbykgeworICAg
IGYobyk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICBmb28oe2Y6
MSwgZToyfSk7CisgICAgZm9vKHtlOjEsIGY6Mn0pOworICAgIGZvbyh7ZDoxLCBlOjIsIGY6M30p
OworICAgIGZ1KHtmOjEsIGU6Mn0pOworICAgIGZ1KHtlOjEsIGY6MiwgZzozfSk7CisgICAgZnUo
e2Q6MSwgZToyLCBmOjMsIGc6NH0pOworfQorICAgIAorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7
ICsraSkgeworICAgIGJhcihmb28sIHtmOjF9KTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7IH0sIG51
bGwpOworICAgIGJhcihmdW5jdGlvbigpIHsgcmV0dXJuIDQyOyB9LCBudWxsKTsKKyAgICBiYXoo
ZnUsIHtlOjF9KTsKKyAgICBiYXooZnVuY3Rpb24oKSB7IH0sIG51bGwpOworICAgIGJheihmdW5j
dGlvbigpIHsgcmV0dXJuIDQyOyB9LCBudWxsKTsKK30KKyAgICAKKyhmdW5jdGlvbihmLCBnLCBv
LCBwKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBxOworICAgICAgICBpZiAo
aSA9PSBuIC0gMSkKKyAgICAgICAgICAgIHEgPSBwOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBxID0gbzsKKyAgICAgICAgYmF6KGcsIHEpOworICAgICAgICBiYXIoZiwgcSk7CisgICAgfQor
ICAgIGlmIChvLmUgIT0gMikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gby5l
OiAiICsgby5lOworICAgIGlmIChvLmYgIT0gMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWUgaW4gby5mOiAiICsgby5mOworICAgIGlmIChwLmUgIT0gMikKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgdmFsdWUgaW4gcC5lOiAiICsgcC5lOworICAgIGlmIChwLmYgIT0gMSkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gcC5mOiAiICsgcC5mOworfSkoZm9vLCBm
dSwge2Y6NDIsIGU6Mn0sIHtlOjEyLCBmOjEzLCBnOjE0fSk7CisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJ1bmUtbXVsdGktcHV0LWJ5LW9mZnNldC1yZXBsYWNl
LW9yLXRyYW5zaXRpb24tdmFyaWFudC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3BydW5lLW11bHRpLXB1dC1ieS1vZmZzZXQtcmVwbGFjZS1vci10
cmFuc2l0aW9uLXZhcmlhbnQuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3BydW5lLW11bHRpLXB1dC1ieS1vZmZzZXQtcmVwbGFjZS1vci10cmFu
c2l0aW9uLXZhcmlhbnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorZnVuY3Rp
b24gZm9vKG8pIHsKKyAgICBvLmYgPSAxOworfQorCitmdW5jdGlvbiBmdShvKSB7CisgICAgby5l
ID0gMjsKK30KKworZnVuY3Rpb24gYmFyKGYsIG8pIHsKKyAgICBmKG8pOworfQorCitmdW5jdGlv
biBiYXooZiwgbykgeworICAgIGYobyk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyAr
K2kpIHsKKyAgICBmb28oe2Y6MSwgZToyfSk7CisgICAgZm9vKHtlOjEsIGY6Mn0pOworICAgIGZv
byh7ZToxfSk7CisgICAgZm9vKHtkOjEsIGU6MiwgZjozfSk7CisgICAgZnUoe2Y6MSwgZToyfSk7
CisgICAgZnUoe2U6MSwgZjoyfSk7CisgICAgZnUoe2U6MSwgZjoyLCBnOjN9KTsKKyAgICBmdSh7
ZDoxLCBlOjIsIGY6MywgZzo0fSk7Cit9CisgICAgCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsg
KytpKSB7CisgICAgYmFyKGZvbywge2Y6MX0pOworICAgIGJhcihmdW5jdGlvbigpIHsgfSwgbnVs
bCk7CisgICAgYmFyKGZ1bmN0aW9uKCkgeyByZXR1cm4gNDI7IH0sIG51bGwpOworICAgIGJheihm
dSwge2U6MX0pOworICAgIGJheihmdW5jdGlvbigpIHsgfSwgbnVsbCk7CisgICAgYmF6KGZ1bmN0
aW9uKCkgeyByZXR1cm4gNDI7IH0sIG51bGwpOworfQorICAgIAorKGZ1bmN0aW9uKGYsIGcsIG8s
IHApIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgbiA9IDEwMDAwMDA7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgdmFyIHE7CisgICAgICAgIGlmIChp
ID09IG4gLSAxKQorICAgICAgICAgICAgcSA9IHA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHEgPSBvOworICAgICAgICBiYXooZywgcSk7CisgICAgICAgIGJhcihmLCBxKTsKKyAgICB9Cisg
ICAgaWYgKG8uZSAhPSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmU6
ICIgKyBvLmU7CisgICAgaWYgKG8uZiAhPSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZSBpbiBvLmY6ICIgKyBvLmY7CisgICAgaWYgKHAuZSAhPSAyKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCB2YWx1ZSBpbiBwLmU6ICIgKyBwLmU7CisgICAgaWYgKHAuZiAhPSAxKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBwLmY6ICIgKyBwLmY7Cit9KShmb28sIGZ1
LCB7ZTo0MiwgZjoyfSwge2U6MTIsIGY6MTMsIGc6MTR9KTsKKwpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
MTcwMTEzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNTMgQEAKKzIwMTQtMDYtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBERkcgQUkgYW5kIGNvbnN0YW50IGZvbGRlciBzaG91bGQgYmUgYWJsZSB0byBwcmVj
aXNlbHkgcHJ1bmUgTXVsdGlHZXRCeU9mZnNldC9NdWx0aVB1dEJ5T2Zmc2V0IGV2ZW4gaWYgdGhl
IGJhc2Ugc3RydWN0dXJlIGFic3RyYWN0IHZhbHVlIGlzIG5vdCBhIHNpbmdsZXRvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzOTE4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL2Zv
bGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1nZXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICoganMvcmVncmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0
LWJ5LW9mZnNldC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2ZvbGQtbXVsdGkt
Z2V0LWJ5LW9mZnNldC10by1wb2x5LWdldC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBqcy9yZWdyZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1wb2x5LWdl
dC1ieS1vZmZzZXQuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9mb2xkLW11bHRp
LXB1dC1ieS1vZmZzZXQtdG8tcG9seS1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcG9seS1w
dXQtYnktb2Zmc2V0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1tdWx0
aS1wdXQtYnktb2Zmc2V0LXRvLXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wdXQtYnktb2Zm
c2V0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1wdXQtYnkt
b2Zmc2V0LXRvLXJlcGxhY2Utb3ItdHJhbnNpdGlvbi1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQt
dG8tcmVwbGFjZS1vci10cmFuc2l0aW9uLXB1dC1ieS1vZmZzZXQuaHRtbDogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9mb2xkLXB1dC1zdHJ1Y3R1cmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBqcy9yZWdyZXNzL2ZvbGQtcHV0LXN0cnVjdHVyZS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQt
dG8tZ2V0LWJ5LW9mZnNldC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoZnUp
OgorICAgICAgICAoYmFyKToKKyAgICAgICAgKC5iYXIpOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1wb2x5LWdldC1ieS1vZmZz
ZXQuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGZ1KToKKyAgICAgICAgKGJh
cik6CisgICAgICAgICguYmFyKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9m
b2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcG9seS1wdXQtYnktb2Zmc2V0LmpzOiBBZGRlZC4K
KyAgICAgICAgKGZvbyk6CisgICAgICAgIChmdSk6CisgICAgICAgIChiYXIpOgorICAgICAgICAo
LmJhcik6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1tdWx0aS1wdXQt
Ynktb2Zmc2V0LXRvLXB1dC1ieS1vZmZzZXQuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAg
ICAgICAgKGZ1KToKKyAgICAgICAgKGJhcik6CisgICAgICAgICguYmFyKToKKyAgICAgICAgKiBq
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcmVwbGFj
ZS1vci10cmFuc2l0aW9uLXB1dC1ieS1vZmZzZXQuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToK
KyAgICAgICAgKGZ1KToKKyAgICAgICAgKGJhcik6CisgICAgICAgICguYmFyKToKKyAgICAgICAg
KiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXB1dC1zdHJ1Y3R1cmUuanM6IEFkZGVkLgor
ICAgICAgICAoZm9vKToKKyAgICAgICAgKGZ1KToKKyAgICAgICAgKGJhcik6CisgICAgICAgICgu
YmFyKToKKwogMjAxNC0wNi0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtmdGxvcHRdIERGRyBwdXRfYnlfaWQgc2hvdWxkIGlubGluZSBhY2Nlc3NlcyB3aXRo
IGEgc2xpZ2h0bHkgcG9seW1vcnBoaWMgYmFzZQpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRpLWdldC1ieS1v
ZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1nZXQtYnktb2Zm
c2V0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jl
c3MvZm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQKKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGktZ2V0
LWJ5LW9mZnNldC10by1nZXQtYnktb2Zmc2V0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1nZXQtYnktb2Zmc2V0
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRv
LWdldC1ieS1vZmZzZXQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tcG9seS1nZXQt
Ynktb2Zmc2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1wb2x5LWdldC1ieS1vZmZzZXQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRp
LWdldC1ieS1vZmZzZXQtdG8tcG9seS1nZXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZm9sZC1tdWx0aS1nZXQtYnktb2Zm
c2V0LXRvLXBvbHktZ2V0LWJ5LW9mZnNldAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xk
LW11bHRpLWdldC1ieS1vZmZzZXQtdG8tcG9seS1nZXQtYnktb2Zmc2V0Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8t
cG9seS1nZXQtYnktb2Zmc2V0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1wb2x5LWdldC1ieS1vZmZzZXQuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tcG9s
eS1nZXQtYnktb2Zmc2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXBvbHktcHV0
LWJ5LW9mZnNldC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcG9seS1wdXQtYnktb2Zmc2V0LWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1tdWx0
aS1wdXQtYnktb2Zmc2V0LXRvLXBvbHktcHV0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2ZvbGQtbXVsdGktcHV0LWJ5LW9m
ZnNldC10by1wb2x5LXB1dC1ieS1vZmZzZXQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9s
ZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXBvbHktcHV0LWJ5LW9mZnNldC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRv
LXBvbHktcHV0LWJ5LW9mZnNldC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcG9seS1wdXQtYnktb2Zmc2V0Lmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXBv
bHktcHV0LWJ5LW9mZnNldC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wdXQtYnkt
b2Zmc2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1wdXQtYnkt
b2Zmc2V0LXRvLXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTAgQEAKK0pTUmVncmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcHV0LWJ5
LW9mZnNldAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRp
b24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZz
ZXQtdG8tcHV0LWJ5LW9mZnNldC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXB1dC1ieS1vZmZzZXQuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1wdXQtYnktb2Zm
c2V0LXRvLXB1dC1ieS1vZmZzZXQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVn
cmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9mb2xkLW11
bHRpLXB1dC1ieS1vZmZzZXQtdG8tcHV0LWJ5LW9mZnNldC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtbXVsdGktcHV0LWJ5
LW9mZnNldC10by1yZXBsYWNlLW9yLXRyYW5zaXRpb24tcHV0LWJ5LW9mZnNldC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRpLXB1dC1i
eS1vZmZzZXQtdG8tcmVwbGFjZS1vci10cmFuc2l0aW9uLXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRpLXB1
dC1ieS1vZmZzZXQtdG8tcmVwbGFjZS1vci10cmFuc2l0aW9uLXB1dC1ieS1vZmZzZXQtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9mb2xkLW11
bHRpLXB1dC1ieS1vZmZzZXQtdG8tcmVwbGFjZS1vci10cmFuc2l0aW9uLXB1dC1ieS1vZmZzZXQK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93
bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXJl
cGxhY2Utb3ItdHJhbnNpdGlvbi1wdXQtYnktb2Zmc2V0Lmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcmVwbGFjZS1v
ci10cmFuc2l0aW9uLXB1dC1ieS1vZmZzZXQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXJlcGxhY2Utb3ItdHJh
bnNpdGlvbi1wdXQtYnktb2Zmc2V0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZm9sZC1t
dWx0aS1wdXQtYnktb2Zmc2V0LXRvLXJlcGxhY2Utb3ItdHJhbnNpdGlvbi1wdXQtYnktb2Zmc2V0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvZm9sZC1wdXQtc3RydWN0dXJlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LXN0cnVjdHVyZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LXN0cnVjdHVyZS1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2ZvbGQt
cHV0LXN0cnVjdHVyZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBl
eGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXB1dC1zdHJ1Y3R1
cmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LXN0
cnVjdHVyZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xk
LXB1dC1zdHJ1Y3R1cmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9mb2xkLXB1dC1zdHJ1
Y3R1cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNz
LXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLWdldC1i
eS1vZmZzZXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvZm9sZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLW11bHRp
LWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQzIEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJldHVybiBvLmY7Cit9CisKK2Z1bmN0
aW9uIGZ1KG8pIHsKKyAgICByZXR1cm4gby5lOworfQorCitmdW5jdGlvbiBiYXIoZiwgbykgewor
ICAgIHJldHVybiBmKG8pOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7Cisg
ICAgZm9vKHtmOjEsIGU6Mn0pOworICAgIGZvbyh7ZToxLCBmOjJ9KTsKKyAgICBmb28oe2Q6MSwg
ZToyLCBmOjN9KTsKKyAgICBmdSh7ZjoxLCBlOjJ9KTsKKyAgICBmdSh7ZToxLCBmOjJ9KTsKKyAg
ICBmdSh7ZDoxLCBlOjIsIGY6M30pOworfQorICAgIAorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7
ICsraSkgeworICAgIGJhcihmb28sIHtmOjF9KTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7IH0sIG51
bGwpOworICAgIGJhcihmdW5jdGlvbigpIHsgcmV0dXJuIDQyIH0sIG51bGwpOworfQorICAgIAor
KGZ1bmN0aW9uKGYsIG8pIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgbiA9IDEwMDAw
MDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgdmFyIHA7Cisg
ICAgICAgIGlmIChpID09IG4gLSAxKSAvLyBEZWZlYXQgTElDTS4KKyAgICAgICAgICAgIHAgPSB7
ZjogNDIsIGU6IDQyfTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcCA9IG87CisgICAgICAg
IHJlc3VsdCArPSBmdShwKTsKKyAgICAgICAgcmVzdWx0ICs9IGJhcihmLCBwKTsKKyAgICB9Cisg
ICAgaWYgKHJlc3VsdCAhPSAobiAtIDEpICogKG8uZiArIG8uZSkgKyA0MiAqIDIpCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKGZvbywge2Y6NDIsIGU6
Mn0pOworCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLW11
bHRpLWdldC1ieS1vZmZzZXQtdG8tcG9seS1nZXQtYnktb2Zmc2V0LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktZ2V0LWJ5LW9m
ZnNldC10by1wb2x5LWdldC1ieS1vZmZzZXQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tcG9s
eS1nZXQtYnktb2Zmc2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKK2Z1bmN0
aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKworZnVuY3Rpb24gZnUobykgeworICAg
IHJldHVybiBvLmU7Cit9CisKK2Z1bmN0aW9uIGJhcihmLCBvKSB7CisgICAgcmV0dXJuIGYobyk7
Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICBmb28oe2Y6MSwgZToy
fSk7CisgICAgZm9vKHtlOjEsIGY6Mn0pOworICAgIGZvbyh7ZDoxLCBlOjIsIGY6M30pOworICAg
IGZ1KHtmOjEsIGU6Mn0pOworICAgIGZ1KHtlOjEsIGY6Mn0pOworICAgIGZ1KHtkOjEsIGU6Miwg
ZjozfSk7Cit9CisgICAgCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgYmFy
KGZvbywge2Y6MX0pOworICAgIGJhcihmdW5jdGlvbigpIHsgfSwgbnVsbCk7CisgICAgYmFyKGZ1
bmN0aW9uKCkgeyByZXR1cm4gNDIgfSwgbnVsbCk7Cit9CisgICAgCisoZnVuY3Rpb24oZiwgbywg
cCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICByZXN1bHQgKz0gZnUobyk7CisgICAg
ICAgIHJlc3VsdCArPSBiYXIoZiwgbyk7CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBv
ID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSBuICogby5m
ICsgbiAqIG8uZSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0
OworfSkoZm9vLCB7Zjo0MiwgZToyM30sIHtmOjQyLCBlOjIzLCBnOjEwMH0pOworCkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLW11bHRpLXB1dC1ieS1vZmZz
ZXQtdG8tcG9seS1wdXQtYnktb2Zmc2V0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wb2x5LXB1
dC1ieS1vZmZzZXQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9mb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8tcG9seS1wdXQtYnktb2Zmc2V0
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKK2Z1bmN0aW9uIGZvbyhvKSB7Cisg
ICAgby5mID0gMTsKK30KKworZnVuY3Rpb24gZnUobykgeworICAgIG8uZSA9IDI7Cit9CisKK2Z1
bmN0aW9uIGJhcihmLCBvKSB7CisgICAgZihvKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDA7ICsraSkgeworICAgIGZvbyh7ZjoxLCBlOjJ9KTsKKyAgICBmb28oe2U6MSwgZjoyfSk7Cisg
ICAgZm9vKHtkOjEsIGU6MiwgZjozfSk7CisgICAgZnUoe2Y6MSwgZToyfSk7CisgICAgZnUoe2U6
MSwgZjoyfSk7CisgICAgZnUoe2Q6MSwgZToyLCBmOjN9KTsKK30KKyAgICAKK2ZvciAodmFyIGkg
PSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICBiYXIoZm9vLCB7ZjoxfSk7CisgICAgYmFyKGZ1bmN0
aW9uKCkgeyB9LCBudWxsKTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7IHJldHVybiA0MiB9LCBudWxs
KTsKK30KKyAgICAKKyhmdW5jdGlvbihmLCBvLCBwKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7Cisg
ICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7Cisg
ICAgICAgIGZ1KG8pOworICAgICAgICBiYXIoZiwgbyk7CisgICAgICAgIHZhciB0bXAgPSBvOwor
ICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAgICB9CisgICAgaWYgKG8uZSAhPSAy
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmU6ICIgKyBvLmU7CisgICAg
aWYgKG8uZiAhPSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmY6ICIg
KyBvLmY7CisgICAgaWYgKHAuZSAhPSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1
ZSBpbiBwLmU6ICIgKyBwLmU7CisgICAgaWYgKHAuZiAhPSAxKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCB2YWx1ZSBpbiBwLmY6ICIgKyBwLmY7Cit9KShmb28sIHtmOjQyLCBlOjIzfSwge2Y6
NDIsIGU6MjMsIGc6MTAwfSk7CisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wdXQtYnktb2Zmc2V0LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGkt
cHV0LWJ5LW9mZnNldC10by1wdXQtYnktb2Zmc2V0LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRv
LXB1dC1ieS1vZmZzZXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorZnVuY3Rp
b24gZm9vKG8pIHsKKyAgICBvLmYgPSAxOworfQorCitmdW5jdGlvbiBmdShvKSB7CisgICAgby5l
ID0gMjsKK30KKworZnVuY3Rpb24gYmFyKGYsIG8pIHsKKyAgICBmKG8pOworfQorCitmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgZm9vKHtmOjEsIGU6Mn0pOworICAgIGZvbyh7
ZToxLCBmOjJ9KTsKKyAgICBmb28oe2Q6MSwgZToyLCBmOjN9KTsKKyAgICBmdSh7ZjoxLCBlOjJ9
KTsKKyAgICBmdSh7ZToxLCBmOjJ9KTsKKyAgICBmdSh7ZDoxLCBlOjIsIGY6M30pOworfQorICAg
IAorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIGJhcihmb28sIHtmOjF9KTsK
KyAgICBiYXIoZnVuY3Rpb24oKSB7IH0sIG51bGwpOworICAgIGJhcihmdW5jdGlvbigpIHsgcmV0
dXJuIDQyIH0sIG51bGwpOworfQorICAgIAorKGZ1bmN0aW9uKGYsIG8pIHsKKyAgICB2YXIgcmVz
dWx0ID0gMDsKKyAgICB2YXIgbiA9IDEwMDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
OyArK2kpIHsKKyAgICAgICAgZnUobyk7CisgICAgICAgIGJhcihmLCBvKTsKKyAgICB9CisgICAg
aWYgKG8uZSAhPSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmU6ICIg
KyBvLmU7CisgICAgaWYgKG8uZiAhPSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1
ZSBpbiBvLmY6ICIgKyBvLmY7Cit9KShmb28sIHtmOjQyLCBlOjIzfSk7CisKSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10
by1yZXBsYWNlLW9yLXRyYW5zaXRpb24tcHV0LWJ5LW9mZnNldC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLW11bHRpLXB1dC1ieS1vZmZz
ZXQtdG8tcmVwbGFjZS1vci10cmFuc2l0aW9uLXB1dC1ieS1vZmZzZXQuanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLW11bHRpLXB1dC1i
eS1vZmZzZXQtdG8tcmVwbGFjZS1vci10cmFuc2l0aW9uLXB1dC1ieS1vZmZzZXQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBvLmYgPSAx
OworfQorCitmdW5jdGlvbiBmdShvKSB7CisgICAgby5lID0gMjsKK30KKworZnVuY3Rpb24gYmFy
KGYsIG8pIHsKKyAgICBmKG8pOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7
CisgICAgZm9vKHtmOjEsIGU6Mn0pOworICAgIGZvbyh7ZToxLCBmOjJ9KTsKKyAgICBmb28oe2Q6
MSwgZToyLCBmOjN9KTsKKyAgICBmdSh7ZjoxLCBlOjJ9KTsKKyAgICBmdSh7ZToxLCBmOjJ9KTsK
KyAgICBmdSh7ZDoxLCBlOjIsIGY6M30pOworfQorICAgIAorZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDA7ICsraSkgeworICAgIGJhcihmb28sIHtmOjF9KTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7IH0s
IG51bGwpOworICAgIGJhcihmdW5jdGlvbigpIHsgcmV0dXJuIDQyIH0sIG51bGwpOworfQorICAg
IAorKGZ1bmN0aW9uKGYsIG8pIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgbiA9IDEw
MDAwMDA7CisgICAgdmFyIHA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAg
ICAgICAgdmFyIHE7CisgICAgICAgIGlmIChpICYgMSkKKyAgICAgICAgICAgIHEgPSBvOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBwID0gcSA9IHtlOjYxfTsKKyAgICAgICAgZnUocSk7Cisg
ICAgICAgIGJhcihmLCBxKTsKKyAgICB9CisgICAgaWYgKG8uZSAhPSAyKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmU6ICIgKyBvLmU7CisgICAgaWYgKG8uZiAhPSAxKQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmY6ICIgKyBvLmY7CisgICAgaWYg
KHAuZSAhPSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBwLmU6ICIgKyBw
LmU7CisgICAgaWYgKHAuZiAhPSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBp
biBwLmY6ICIgKyBwLmY7Cit9KShmb28sIHtlOjIzLCBmOjQyfSk7CisKSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtcHV0LXN0cnVjdHVyZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXB1dC1zdHJ1
Y3R1cmUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9mb2xkLXB1dC1zdHJ1Y3R1cmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBA
QAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBvLmYgPSAxOworfQorCitmdW5jdGlvbiBmdShvKSB7
CisgICAgby5lID0gMjsKK30KKworZnVuY3Rpb24gYmFyKGYsIG8pIHsKKyAgICBmKG8pOworfQor
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgZm9vKHtlOjJ9KTsKKyAgICBm
b28oe2U6MSwgZjoyfSk7CisgICAgZnUoe2Y6MSwgZToyfSk7CisgICAgZnUoe2U6MSwgZjoyfSk7
CisgICAgZnUoe2Q6MSwgZToyLCBmOjN9KTsKK30KKyAgICAKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTAwOyArK2kpIHsKKyAgICBiYXIoZm9vLCB7ZToxfSk7CisgICAgYmFyKGZ1bmN0aW9uKCkgeyB9
LCBudWxsKTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7IHJldHVybiA0MiB9LCBudWxsKTsKK30KKyAg
ICAKKyhmdW5jdGlvbihmLCBvKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIG4gPSAx
MDAwMDAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIGZ1KG8p
OworICAgICAgICBiYXIoZiwgbyk7CisgICAgfQorICAgIGlmIChvLmUgIT0gMikKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gby5lOiAiICsgby5lOworICAgIGlmIChvLmYgIT0g
MSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gby5mOiAiICsgby5mOworfSko
Zm9vLCB7ZTo0MiwgZjoyM30pOworCg==
</data>
<flag name="review"
          id="257818"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>