<?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>137596</bug_id>
          
          <creation_ts>2014-10-09 23:14:34 -0700</creation_ts>
          <short_desc>Have the ProfileType node in the DFG convert to a structure check where it can</short_desc>
          <delta_ts>2014-10-16 14:28:17 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1040817</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-10-09 23:14:34 -0700</bug_when>
    <thetext>Implementing this would require each TypeSet keeping track of which StructureIDs it has seen that have been garbage collected.
Currently, when a GC happens, each TypeSet will clear its StructureID cache, this change would require a more sophisticated purging
of the StructureIDs a TypeSet has seen to only remove the StructureIDs that are being GCed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041811</commentid>
    <comment_count>1</comment_count>
      <attachid>239854</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-10-15 00:38:49 -0700</bug_when>
    <thetext>Created attachment 239854
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042148</commentid>
    <comment_count>2</comment_count>
      <attachid>239854</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-10-16 11:29:56 -0700</bug_when>
    <thetext>Comment on attachment 239854
patch

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

&gt; Source/JavaScriptCore/runtime/TypeProfiler.h:117
&gt; +    std::unique_ptr&lt;Bag&lt;TypeLocation&gt;&gt; m_typeLocationInfo;

Maybe you could just do Bag&lt;TypeLocation&gt;.  A Bag is just a pointer-sized word if it&apos;s empty;

&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:115
&gt; +    Vector&lt;Structure*&gt; willBeSwept;
&gt; +    for (Structure* structure : m_structureSet) {
&gt; +        if (!Heap::isMarked(structure))
&gt; +            willBeSwept.append(structure);
&gt; +    }
&gt; +    for (Structure* structure : willBeSwept)
&gt; +        m_structureSet.remove(structure);

Now that we have all of the C++, this could be written as:

m_structureSet.genericFilter([] (Structure* structure) -&gt; bool { return Heap::isMarked(sturcture); });</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042150</commentid>
    <comment_count>3</comment_count>
      <attachid>239956</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-10-16 12:13:28 -0700</bug_when>
    <thetext>Created attachment 239956
patch

with suggested changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042193</commentid>
    <comment_count>4</comment_count>
      <attachid>239956</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-10-16 14:28:07 -0700</bug_when>
    <thetext>Comment on attachment 239956
patch

Committed r174789: http://trac.webkit.org/changeset/174789</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239854</attachid>
            <date>2014-10-15 00:38:49 -0700</date>
            <delta_ts>2014-10-16 12:13:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>21460</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0NzIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBA
CisyMDE0LTEwLTE1ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBIYXZlIHRoZSBQcm9maWxlVHlwZSBub2RlIGluIHRoZSBERkcgY29udmVydCB0byBhIHN0
cnVjdHVyZSBjaGVjayB3aGVyZSBpdCBjYW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNzU5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFR5cGVTZXQgbm93IGtlZXBzIHRyYWNrIG9mIHRoZSBsaXZlIHNl
dCBvZiBTdHJ1Y3R1cmVzIGl0IGhhcyBzZWVuLgorICAgICAgICBJdCBubyBsb25nZXIgbnVrZXMg
ZXZlcnl0aGluZyBkdXJpbmcgR0MuIEl0IG5vdyBvbmx5IHJlbW92ZXMgdW5tYXJrZWQKKyAgICAg
ICAgc3RydWN0dXJlcyBkdXJpbmcgR0MuIFRoaXMgbW9kaWZpY2F0aW9uIGFsbG93cyB0aGUgUHJv
ZmlsZVR5cGUgbm9kZSAKKyAgICAgICAgdG8gY29udmVydCBpbnRvIGEgQ2hlY2tTdHJ1Y3R1cmUg
bm9kZSBzYWZlbHkgaW4gdGhlIERGRy4gCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYnJpbmdzIHVw
IHRoZSBjb252ZXJzaW9uIHJhdGUgZnJvbSBQcm9maWxlVHlwZSB0byBDaGVjayAKKyAgICAgICAg
b3IgQ2hlY2tTdHJ1Y3RydWUgZnJvbSB+NDUlIHRvIH42NSUuIFRoaXMgY2hhbmdlIGFsc28gc3Bl
ZWRzIHRoZSAKKyAgICAgICAgdHlwZSBwcm9maWxlciB1cCBzaWduaWZpY2FudGx5OiBjb25zaXN0
ZW50bHkgYmV0d2VlbiAyeC0yMHggZmFzdGVyLiAKKworICAgICAgICBUaGlzIHBhdGNoIGFsc28g
ZG9lcyBzb21lIHNsaWdodCByZWZhY3RvcmluZzogYSBmZXcgdHlwZSBwcm9maWxlcgorICAgICAg
ICByZWxhdGVkIGZpZWxkcyBhcmUgbW92ZWQgZnJvbSBWTSB0byBUeXBlUHJvZmlsZXIuCisKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OkNvZGVCbG9jayk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGUu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9DaGVja1N0cnVjdHVyZSk6Cisg
ICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6Cisg
ICAgICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OlN5bWJvbFRh
YmxlOjp1bmlxdWVJREZvclZhcmlhYmxlKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxl
Lmg6CisgICAgICAgICogcnVudGltZS9UeXBlTG9jYXRpb25DYWNoZS5jcHA6CisgICAgICAgIChK
U0M6OlR5cGVMb2NhdGlvbkNhY2hlOjpnZXRUeXBlTG9jYXRpb24pOgorICAgICAgICAqIHJ1bnRp
bWUvVHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVByb2ZpbGVyOjpUeXBlUHJv
ZmlsZXIpOgorICAgICAgICAoSlNDOjpUeXBlUHJvZmlsZXI6Om5leHRUeXBlTG9jYXRpb24pOgor
ICAgICAgICAoSlNDOjpUeXBlUHJvZmlsZXI6OmludmFsaWRhdGVUeXBlU2V0Q2FjaGUpOgorICAg
ICAgICAoSlNDOjpUeXBlUHJvZmlsZXI6OmR1bXBUeXBlUHJvZmlsZXJEYXRhKToKKyAgICAgICAg
KiBydW50aW1lL1R5cGVQcm9maWxlci5oOgorICAgICAgICAoSlNDOjpUeXBlUHJvZmlsZXI6Omdl
dE5leHRVbmlxdWVWYXJpYWJsZUlEKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVQcm9maWxlckxv
Zy5jcHA6CisgICAgICAgIChKU0M6OlR5cGVQcm9maWxlckxvZzo6cHJvY2Vzc0xvZ0VudHJpZXMp
OgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5jcHA6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6
OmFkZFR5cGVJbmZvcm1hdGlvbik6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmludmFsaWRhdGVD
YWNoZSk6CisgICAgICAgICogcnVudGltZS9UeXBlU2V0Lmg6CisgICAgICAgIChKU0M6OlR5cGVT
ZXQ6OnN0cnVjdHVyZVNldCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChK
U0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjplbmFibGVUeXBlUHJvZmlsZXIpOgorICAg
ICAgICAoSlNDOjpWTTo6ZGlzYWJsZVR5cGVQcm9maWxlcik6CisgICAgICAgIChKU0M6OlZNOjpk
dW1wVHlwZVByb2ZpbGVyRGF0YSk6CisgICAgICAgIChKU0M6OlZNOjpuZXh0VHlwZUxvY2F0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Vk06OmludmFsaWRhdGVUeXBlU2V0Q2FjaGUpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OnR5cGVQ
cm9maWxlcik6CisgICAgICAgIChKU0M6OlZNOjpnZXROZXh0VW5pcXVlVmFyaWFibGVJRCk6IERl
bGV0ZWQuCisgICAgICAgICogdGVzdHMvdHlwZVByb2ZpbGVyL2RmZy1qaXQtb3B0aW1pemF0aW9u
cy5qczoKKwogMjAxNC0xMC0xNCAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcu
Y29tPgogCiAgICAgICAgIENsZWFuIHVwIHVubmVjZXNzYXJ5IFBhc3NPd25QdHIuaCBpbmNsdXNp
b24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAxNzQ3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwNSw2ICsyMDA1LDcgQEAgQ29kZUJsb2Nr
OjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9wcm9maWxlX3R5cGU6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPnR5
cGVQcm9maWxlcigpKTsKICAgICAgICAgICAgIC8vIFRoZSBmb3JtYXQgb2YgdGhpcyBpbnN0cnVj
dGlvbiBpczogb3BfcHJvZmlsZV90eXBlIHJlZ1RvUHJvZmlsZSwgVHlwZUxvY2F0aW9uKiwgZmxh
ZywgaWRlbnRpZmllcj8sIHJlc29sdmVUeXBlPwogICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0
aW9uT2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKICAgICAgICAgICAgIHVuc2lnbmVkIGRpdm90
U3RhcnQsIGRpdm90RW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNzQ3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTM1LDYgKzExMzUsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZVNldC0+ZG9lc1R5cGVDb25m
b3JtVG8oVHlwZVVuZGVmaW5lZCB8IFR5cGVOdWxsKSAmJiAoc2VlblR5cGVzICYgVHlwZVVuZGVm
aW5lZCkgJiYgKHNlZW5UeXBlcyAmIFR5cGVOdWxsKSkgewogICAgICAgICAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb0NoZWNrKCk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxPdGhlclVzZT4obm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlU2V0LT5kb2VzVHlwZUNv
bmZvcm1UbyhUeXBlT2JqZWN0KSkgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQg
PSB0eXBlU2V0LT5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNldC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvQ2hlY2tTdHJ1Y3R1
cmUobV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIGZp
eEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMTc0NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw2ICszODAsMTIgQEAgc3RydWN0IE5v
ZGUgewogICAgIHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3MoQ2hlY2spOwogICAgIH0K
KworICAgIHZvaWQgY29udmVydFRvQ2hlY2tTdHJ1Y3R1cmUoU3RydWN0dXJlU2V0KiBzZXQpCisg
ICAgeworICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhDaGVja1N0cnVjdHVyZSk7CisgICAg
ICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc2V0KTsgCisgICAgfQogICAg
IAogICAgIHZvaWQgcmVwbGFjZVdpdGgoTm9kZSogb3RoZXIpCiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE3NDcyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODIsNyArOTgyLDYg
QEAgdm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29sbGVjdAogICAgIGlmICh2bSgp
LT50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhp
cyk7CiAgICAgICAgIHZtKCktPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhB
U0NJSUxpdGVyYWwoIkdDIikpOwotICAgICAgICB2bSgpLT5pbnZhbGlkYXRlVHlwZVNldENhY2hl
KCk7CiAgICAgfQogICAgIAogICAgIGlmICh2bSgpLT5jYWxsRWRnZUxvZykgewpAQCAtMTAxMiw2
ICsxMDExLDkgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29sbGVjdAogCiAg
ICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CiAKKyAgICBpZiAodm0oKS0+dHlwZVByb2Zp
bGVyKCkpCisgICAgICAgIHZtKCktPnR5cGVQcm9maWxlcigpLT5pbnZhbGlkYXRlVHlwZVNldENh
Y2hlKCk7CisKICAgICByZWFwV2Vha0hhbmRsZXMoKTsKICAgICBzd2VlcEFycmF5QnVmZmVycygp
OwogICAgIHNuYXBzaG90TWFya2VkU3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDE3NDcyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgorI2lu
Y2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldElu
bGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0yMTEsNyArMjEyLDcgQEAgR2xvYmFsVmFy
aWFibGVJRCBTeW1ib2xUYWJsZTo6dW5pcXVlSURGbwogCiAgICAgR2xvYmFsVmFyaWFibGVJRCBp
ZCA9IGl0ZXItPnZhbHVlOwogICAgIGlmIChpZCA9PSBUeXBlUHJvZmlsZXJOZWVkc1VuaXF1ZUlE
R2VuZXJhdGlvbikgewotICAgICAgICBpZCA9IHZtLmdldE5leHRVbmlxdWVWYXJpYWJsZUlEKCk7
CisgICAgICAgIGlkID0gdm0udHlwZVByb2ZpbGVyKCktPmdldE5leHRVbmlxdWVWYXJpYWJsZUlE
KCk7CiAgICAgICAgIG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZUlETWFwLnNldChr
ZXksIGlkKTsKICAgICAgICAgbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlVHlwZVNl
dE1hcC5zZXQoa2V5LCBUeXBlU2V0OjpjcmVhdGUoKSk7IC8vIE1ha2UgYSBuZXcgZ2xvYmFsIHR5
cGVzZXQgZm9yIHRoaXMgY29ycmVzcG9uZGluZyBJRC4KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE3NDcyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAj
aW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJUeXBlU2V0LmgiCisjaW5jbHVkZSAiVHlw
ZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAjaW5jbHVk
ZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlTG9jYXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZUxvY2F0aW9uQ2FjaGUuY3BwCShyZXZp
c2lvbiAxNzQ3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlTG9jYXRp
b25DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb25DYWNoZS5oIgogCisjaW5jbHVkZSAiVHlw
ZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MSw3
ICs0Miw4IEBAIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBUeXBlTG9jYXQKIAogICAg
IGJvb2wgaXNOZXdMb2NhdGlvbiA9IGZhbHNlOwogICAgIGlmIChtX2xvY2F0aW9uTWFwLmZpbmQo
a2V5KSA9PSBtX2xvY2F0aW9uTWFwLmVuZCgpKSB7Ci0gICAgICAgIFR5cGVMb2NhdGlvbiogbG9j
YXRpb24gPSB2bS0+bmV4dFR5cGVMb2NhdGlvbigpOworICAgICAgICBBU1NFUlQodm0tPnR5cGVQ
cm9maWxlcigpKTsKKyAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHZtLT50eXBlUHJv
ZmlsZXIoKS0+bmV4dFR5cGVMb2NhdGlvbigpOwogICAgICAgICBsb2NhdGlvbi0+bV9nbG9iYWxW
YXJpYWJsZUlEID0gZ2xvYmFsVmFyaWFibGVJRDsKICAgICAgICAgbG9jYXRpb24tPm1fc291cmNl
SUQgPSBzb3VyY2VJRDsKICAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RTdGFydCA9IHN0YXJ0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuY3Bw
CShyZXZpc2lvbiAxNzQ3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
UHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCitUeXBlUHJvZmls
ZXI6OlR5cGVQcm9maWxlcigpCisgICAgOiBtX25leHRVbmlxdWVWYXJpYWJsZUlEKDEpCisgICAg
LCBtX3R5cGVMb2NhdGlvbkluZm8oc3RkOjptYWtlX3VuaXF1ZTxCYWc8VHlwZUxvY2F0aW9uPj4o
KSkKK3sgCit9CisKIHZvaWQgVHlwZVByb2ZpbGVyOjpsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbihU
eXBlTG9jYXRpb24qIGxvY2F0aW9uKQogewogICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0
b3IgZGVzY3JpcHRvciA9IGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gVHlwZVByb2Zp
bGVyUmV0dXJuU3RhdGVtZW50ID8gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9u
UmV0dXJuIDogVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbDsKQEAgLTEzNiw0ICsx
NDIsMjcgQEAgVHlwZUxvY2F0aW9uKiBUeXBlUHJvZmlsZXI6OmZpbmRMb2NhdGlvbgogICAgIHJl
dHVybiBiZXN0TWF0Y2g7CiB9CiAKK1R5cGVMb2NhdGlvbiogVHlwZVByb2ZpbGVyOjpuZXh0VHlw
ZUxvY2F0aW9uKCkgCit7IAorICAgIHJldHVybiBtX3R5cGVMb2NhdGlvbkluZm8tPmFkZCgpOyAK
K30KKwordm9pZCBUeXBlUHJvZmlsZXI6OmludmFsaWRhdGVUeXBlU2V0Q2FjaGUoKQoreworICAg
IGZvciAoQmFnPFR5cGVMb2NhdGlvbj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3R5cGVMb2NhdGlvbklu
Zm8tPmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIFR5cGVMb2NhdGlvbiogbG9j
YXRpb24gPSAqaXRlcjsKKyAgICAgICAgbG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5p
bnZhbGlkYXRlQ2FjaGUoKTsKKyAgICAgICAgaWYgKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQp
CisgICAgICAgICAgICBsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5pbnZhbGlkYXRlQ2FjaGUo
KTsKKyAgICB9Cit9CisKK3ZvaWQgVHlwZVByb2ZpbGVyOjpkdW1wVHlwZVByb2ZpbGVyRGF0YSgp
Cit7CisgICAgZm9yIChCYWc8VHlwZUxvY2F0aW9uPjo6aXRlcmF0b3IgaXRlciA9IG1fdHlwZUxv
Y2F0aW9uSW5mby0+YmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKKyAgICAgICAgVHlwZUxvY2F0
aW9uKiBsb2NhdGlvbiA9ICppdGVyOworICAgICAgICBsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbihs
b2NhdGlvbik7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5oCShyZXZpc2lvbiAxNzQ3MjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsOSBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCisjaW5jbHVkZSAiVHlwZUxvY2F0aW9u
LmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9uQ2FjaGUuaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zOSw4ICs0MSw2IEBAIGNsYXNzIFR5cGVE
ZXNjcmlwdGlvbjsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFR5cGVMb2NhdGlvbjsKLQog
c3RydWN0IFF1ZXJ5S2V5IHsKICAgICBRdWVyeUtleSgpCiAgICAgICAgIDogbV9zb3VyY2VJRCgw
KQpAQCAtOTQsMTIgKzk0LDE3IEBAIGVudW0gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciB7
CiAKIGNsYXNzIFR5cGVQcm9maWxlciB7CiBwdWJsaWM6CisgICAgVHlwZVByb2ZpbGVyKCk7CiAg
ICAgdm9pZCBsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbihUeXBlTG9jYXRpb24qKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBTdHJpbmcgdHlwZUluZm9ybWF0aW9uRm9yRXhwcmVzc2lvbkF0T2Zmc2V0
KFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IsIHVuc2lnbmVkIG9mZnNldCwgaW50cHRyX3Qg
c291cmNlSUQpOwogICAgIHZvaWQgaW5zZXJ0TmV3TG9jYXRpb24oVHlwZUxvY2F0aW9uKik7CiAg
ICAgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKiBmdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKSB7
IHJldHVybiAmbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7IH0KICAgICBUeXBlTG9jYXRpb25D
YWNoZSogdHlwZUxvY2F0aW9uQ2FjaGUoKSB7IHJldHVybiAmbV90eXBlTG9jYXRpb25DYWNoZTsg
fQogICAgIFR5cGVMb2NhdGlvbiogZmluZExvY2F0aW9uKHVuc2lnbmVkIGRpdm90LCBpbnRwdHJf
dCBzb3VyY2VJRCwgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvcik7CisgICAgR2xvYmFsVmFy
aWFibGVJRCBnZXROZXh0VW5pcXVlVmFyaWFibGVJRCgpIHsgcmV0dXJuIG1fbmV4dFVuaXF1ZVZh
cmlhYmxlSUQrKzsgfQorICAgIFR5cGVMb2NhdGlvbiogbmV4dFR5cGVMb2NhdGlvbigpOworICAg
IHZvaWQgaW52YWxpZGF0ZVR5cGVTZXRDYWNoZSgpOworICAgIHZvaWQgZHVtcFR5cGVQcm9maWxl
ckRhdGEoKTsKICAgICAKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludHB0cl90LCBW
ZWN0b3I8VHlwZUxvY2F0aW9uKj4+IFNvdXJjZUlEVG9Mb2NhdGlvbkJ1Y2tldE1hcDsKQEAgLTEw
OCw2ICsxMTMsOCBAQCBwcml2YXRlOgogICAgIFR5cGVMb2NhdGlvbkNhY2hlIG1fdHlwZUxvY2F0
aW9uQ2FjaGU7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFF1ZXJ5S2V5LCBUeXBlTG9jYXRpb24qPiBU
eXBlTG9jYXRpb25RdWVyeUNhY2hlOwogICAgIFR5cGVMb2NhdGlvblF1ZXJ5Q2FjaGUgbV9xdWVy
eUNhY2hlOworICAgIEdsb2JhbFZhcmlhYmxlSUQgbV9uZXh0VW5pcXVlVmFyaWFibGVJRDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QmFnPFR5cGVMb2NhdGlvbj4+IG1fdHlwZUxvY2F0aW9uSW5mbzsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCShyZXZpc2lvbiAxNzQ3MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OSwxNiArNTksMTggQEAgdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnByb2Nlc3NM
b2dFbnRyaWVzKAogCiAgICAgZG91YmxlIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsKICAgICBM
b2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyOwotICAgIEhhc2hNYXA8U3RydWN0dXJlSUQs
IFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+IHNlZW5TaGFwZXM7CisgICAgSGFzaE1hcDxTdHJ1Y3R1
cmUqLCBSZWZQdHI8U3RydWN0dXJlU2hhcGU+PiBzZWVuU2hhcGVzOwogICAgIHdoaWxlIChlbnRy
eSAhPSBtX2N1cnJlbnRMb2dFbnRyeVB0cikgewogICAgICAgICBTdHJ1Y3R1cmVJRCBpZCA9IGVu
dHJ5LT5zdHJ1Y3R1cmVJRDsKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFwZTsg
CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBlbnRyeS0+dmFsdWU7CisgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gMDsKICAgICAgICAgaWYgKGlkKSB7Ci0gICAgICAgICAgICBhdXRvIGl0
ZXIgPSBzZWVuU2hhcGVzLmZpbmQoaWQpOworICAgICAgICAgICAgc3RydWN0dXJlID0gSGVhcDo6
aGVhcCh2YWx1ZS5hc0NlbGwoKSktPnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoaWQpOyAKKyAgICAg
ICAgICAgIGF1dG8gaXRlciA9IHNlZW5TaGFwZXMuZmluZChzdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgaWYgKGl0ZXIgPT0gc2VlblNoYXBlcy5lbmQoKSkgewotICAgICAgICAgICAgICAgIHNoYXBl
ID0gSGVhcDo6aGVhcCh2YWx1ZS5hc0NlbGwoKSktPnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoZW50
cnktPnN0cnVjdHVyZUlEKS0+dG9TdHJ1Y3R1cmVTaGFwZSh2YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgc2VlblNoYXBlcy5zZXQoaWQsIHNoYXBlKTsKKyAgICAgICAgICAgICAgICBzaGFwZSA9IHN0
cnVjdHVyZS0+dG9TdHJ1Y3R1cmVTaGFwZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgc2VlblNo
YXBlcy5zZXQoc3RydWN0dXJlLCBzaGFwZSk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICBzaGFwZSA9IGl0ZXItPnZhbHVlOwogICAgICAgICB9CkBAIC03Nyw4ICs3OSw4IEBA
IHZvaWQgVHlwZVByb2ZpbGVyTG9nOjpwcm9jZXNzTG9nRW50cmllcygKICAgICAgICAgVHlwZUxv
Y2F0aW9uKiBsb2NhdGlvbiA9IGVudHJ5LT5sb2NhdGlvbjsKICAgICAgICAgbG9jYXRpb24tPm1f
bGFzdFNlZW5UeXBlID0gdHlwZTsKICAgICAgICAgaWYgKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVT
ZXQpCi0gICAgICAgICAgICBsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5hZGRUeXBlSW5mb3Jt
YXRpb24odHlwZSwgc2hhcGUsIGlkKTsKLSAgICAgICAgbG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25U
eXBlU2V0LT5hZGRUeXBlSW5mb3JtYXRpb24odHlwZSwgc2hhcGUsIGlkKTsKKyAgICAgICAgICAg
IGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmFkZFR5cGVJbmZvcm1hdGlvbih0eXBlLCBzaGFw
ZSwgc3RydWN0dXJlKTsKKyAgICAgICAgbG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5h
ZGRUeXBlSW5mb3JtYXRpb24odHlwZSwgc2hhcGUsIHN0cnVjdHVyZSk7CiAKICAgICAgICAgZW50
cnkrKzsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0
LmNwcAkocmV2aXNpb24gMTc0NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDE3ICs2NywxNiBAQCBSdW50aW1lVHlw
ZSBUeXBlU2V0OjpnZXRSdW50aW1lVHlwZUZvclZhCiAgICAgcmV0dXJuIHJldDsKIH0KIAotdm9p
ZCBUeXBlU2V0OjphZGRUeXBlSW5mb3JtYXRpb24oUnVudGltZVR5cGUgdHlwZSwgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmVTaGFwZT4gcHJwTmV3U2hhcGUsIFN0cnVjdHVyZUlEIGlkKSAKK3ZvaWQgVHlw
ZVNldDo6YWRkVHlwZUluZm9ybWF0aW9uKFJ1bnRpbWVUeXBlIHR5cGUsIFBhc3NSZWZQdHI8U3Ry
dWN0dXJlU2hhcGU+IHBycE5ld1NoYXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgCiB7CiAgICAg
UmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBuZXdTaGFwZSA9IHBycE5ld1NoYXBlOwogICAgIG1fc2Vl
blR5cGVzID0gbV9zZWVuVHlwZXMgfCB0eXBlOwogCi0gICAgaWYgKGlkICYmIG5ld1NoYXBlICYm
IHR5cGUgIT0gVHlwZVN0cmluZykgewotICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmVJRENhY2hl
LmlzVmFsaWRWYWx1ZShpZCkpOwotICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc3RydWN0dXJl
SURDYWNoZS5hZGQoaWQpOwotICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAg
ICBpZiAoc3RydWN0dXJlICYmIG5ld1NoYXBlICYmIHR5cGUgIT0gVHlwZVN0cmluZykgeworICAg
ICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpIHsKKyAgICAgICAg
ICAgIG1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgLy8gTWFrZSBv
bmUgbW9yZSBwYXNzIG1ha2luZyBzdXJlIHRoYXQ6IAotICAgICAgICAgICAgLy8gLSBXZSBkb24n
dCBoYXZlIHR3byBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgc2hhcGUuIChTYW1lIHNoYXBlcyBtYXkg
aGF2ZSBkaWZmZXJlbnQgU3RydWN0dXJlSURzKS4KKyAgICAgICAgICAgIC8vIC0gV2UgZG9uJ3Qg
aGF2ZSB0d28gaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHNoYXBlLiAoU2FtZSBzaGFwZXMgbWF5IGhh
dmUgZGlmZmVyZW50IFN0cnVjdHVyZXMpLgogICAgICAgICAgICAgLy8gLSBXZSBkb24ndCBoYXZl
IHR3byBzaGFwZXMgdGhhdCBzaGFyZSB0aGUgc2FtZSBwcm90b3R5cGUgY2hhaW4uIElmIHRoZXNl
IHNoYXBlcyBzaGFyZSB0aGUgc2FtZSAKICAgICAgICAgICAgIC8vICAgcHJvdG90eXBlIGNoYWlu
LCB0aGV5IHdpbGwgYmUgbWVyZ2VkIGludG8gb25lIHNoYXBlLgogICAgICAgICAgICAgYm9vbCBm
b3VuZCA9IGZhbHNlOwpAQCAtMTA3LDcgKzEwNiwxMyBAQCB2b2lkIFR5cGVTZXQ6OmFkZFR5cGVJ
bmZvcm1hdGlvbihSdW50aW1lCiAKIHZvaWQgVHlwZVNldDo6aW52YWxpZGF0ZUNhY2hlKCkKIHsK
LSAgICBtX3N0cnVjdHVyZUlEQ2FjaGUuY2xlYXIoKTsKKyAgICBWZWN0b3I8U3RydWN0dXJlKj4g
d2lsbEJlU3dlcHQ7CisgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IG1fc3RydWN0dXJl
U2V0KSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQoc3RydWN0dXJlKSkKKyAgICAgICAg
ICAgIHdpbGxCZVN3ZXB0LmFwcGVuZChzdHJ1Y3R1cmUpOworICAgIH0KKyAgICBmb3IgKFN0cnVj
dHVyZSogc3RydWN0dXJlIDogd2lsbEJlU3dlcHQpCisgICAgICAgIG1fc3RydWN0dXJlU2V0LnJl
bW92ZShzdHJ1Y3R1cmUpOwogfQogCiBTdHJpbmcgVHlwZVNldDo6ZHVtcFR5cGVzKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJldmlzaW9uIDE3
NDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBUeXBlU2V0X2gKICNkZWZpbmUgVHlw
ZVNldF9oCiAKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCisjaW5jbHVkZSAiU3RydWN0
dXJlU2V0LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtOTcsNyArOTcsNyBA
QCBjbGFzcyBUeXBlU2V0IDogcHVibGljIFJlZkNvdW50ZWQ8VHlwZVNlCiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8VHlwZVNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IFR5cGVTZXQpOyB9CiAgICAgVHlwZVNldCgpOwotICAgIHZvaWQgYWRkVHlwZUluZm9ybWF0aW9u
KFJ1bnRpbWVUeXBlLCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiwgU3RydWN0dXJlSUQpOwor
ICAgIHZvaWQgYWRkVHlwZUluZm9ybWF0aW9uKFJ1bnRpbWVUeXBlLCBQYXNzUmVmUHRyPFN0cnVj
dHVyZVNoYXBlPiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIFJ1bnRpbWVUeXBlIGdldFJ1bnRp
bWVUeXBlRm9yVmFsdWUoSlNWYWx1ZSk7CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGUoKTsKICAg
ICBTdHJpbmcgZHVtcFR5cGVzKCkgY29uc3Q7CkBAIC0xMTAsMTMgKzExMCwxMyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zZWVuVHlwZXMgPT0gVHlwZU5v
dGhpbmc7IH0KICAgICBib29sIGRvZXNUeXBlQ29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0
OwogICAgIHVpbnQzMl90IHNlZW5UeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VlblR5cGVzOyB9
CisgICAgU3RydWN0dXJlU2V0IHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0
dXJlU2V0OyB9OwogCiBwcml2YXRlOgotCiAgICAgdWludDMyX3QgbV9zZWVuVHlwZXM7CiAgICAg
Ym9vbCBtX2lzT3ZlcmZsb3duOwogICAgIFZlY3RvcjxSZWZQdHI8U3RydWN0dXJlU2hhcGU+PiBt
X3N0cnVjdHVyZUhpc3Rvcnk7Ci0gICAgSGFzaFNldDxTdHJ1Y3R1cmVJRD4gbV9zdHJ1Y3R1cmVJ
RENhY2hlOworICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKIH07CiAKIH0gLy9uYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lv
biAxNzQ3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5
cGUgaGVhcFR5cGUpCiAgICAgLCBtX2NvZGVDYWNoZShDb2RlQ2FjaGU6OmNyZWF0ZSgpKQogICAg
ICwgbV9lbmFibGVkUHJvZmlsZXIobnVsbHB0cikKICAgICAsIG1fYnVpbHRpbkV4ZWN1dGFibGVz
KEJ1aWx0aW5FeGVjdXRhYmxlczo6Y3JlYXRlKCp0aGlzKSkKLSAgICAsIG1fbmV4dFVuaXF1ZVZh
cmlhYmxlSUQoMSkKICAgICAsIG1fdHlwZVByb2ZpbGVyRW5hYmxlZENvdW50KDApCiB7CiAgICAg
aW50ZXJwcmV0ZXIgPSBuZXcgSW50ZXJwcmV0ZXIoKnRoaXMpOwpAQCAtODk4LDIwICs4OTcsMTIg
QEAgdm9pZCBWTTo6c2V0RW5hYmxlZFByb2ZpbGVyKExlZ2FjeVByb2ZpbAogICAgIH0KIH0KIAot
VHlwZUxvY2F0aW9uKiBWTTo6bmV4dFR5cGVMb2NhdGlvbigpIAoteyAKLSAgICBSRUxFQVNFX0FT
U0VSVCghIW1fdHlwZUxvY2F0aW9uSW5mbyk7Ci0KLSAgICByZXR1cm4gbV90eXBlTG9jYXRpb25J
bmZvLT5hZGQoKTsgCi19Ci0KIGJvb2wgVk06OmVuYWJsZVR5cGVQcm9maWxlcigpCiB7CiAgICAg
Ym9vbCBuZWVkc1RvUmVjb21waWxlID0gZmFsc2U7CiAgICAgaWYgKCFtX3R5cGVQcm9maWxlckVu
YWJsZWRDb3VudCkgewogICAgICAgICBtX3R5cGVQcm9maWxlciA9IHN0ZDo6bWFrZV91bmlxdWU8
VHlwZVByb2ZpbGVyPigpOwogICAgICAgICBtX3R5cGVQcm9maWxlckxvZyA9IHN0ZDo6bWFrZV91
bmlxdWU8VHlwZVByb2ZpbGVyTG9nPigpOwotICAgICAgICBtX3R5cGVMb2NhdGlvbkluZm8gPSBz
dGQ6Om1ha2VfdW5pcXVlPEJhZzxUeXBlTG9jYXRpb24+PigpOwogICAgICAgICBuZWVkc1RvUmVj
b21waWxlID0gdHJ1ZTsKICAgICB9CiAgICAgbV90eXBlUHJvZmlsZXJFbmFibGVkQ291bnQrKzsK
QEAgLTkyOCw3ICs5MTksNiBAQCBib29sIFZNOjpkaXNhYmxlVHlwZVByb2ZpbGVyKCkKICAgICBp
ZiAoIW1fdHlwZVByb2ZpbGVyRW5hYmxlZENvdW50KSB7CiAgICAgICAgIG1fdHlwZVByb2ZpbGVy
LnJlc2V0KG51bGxwdHIpOwogICAgICAgICBtX3R5cGVQcm9maWxlckxvZy5yZXNldChudWxscHRy
KTsKLSAgICAgICAgbV90eXBlTG9jYXRpb25JbmZvLnJlc2V0KG51bGxwdHIpOwogICAgICAgICBu
ZWVkc1RvUmVjb21waWxlID0gdHJ1ZTsKICAgICB9CiAKQEAgLTk0MSwyMyArOTMxLDcgQEAgdm9p
ZCBWTTo6ZHVtcFR5cGVQcm9maWxlckRhdGEoKQogICAgICAgICByZXR1cm47CiAKICAgICB0eXBl
UHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJWTSBEdW1wIFR5
cGVzIikpOwotICAgIFR5cGVQcm9maWxlciogcHJvZmlsZXIgPSBtX3R5cGVQcm9maWxlci5nZXQo
KTsKLSAgICBmb3IgKEJhZzxUeXBlTG9jYXRpb24+OjppdGVyYXRvciBpdGVyID0gbV90eXBlTG9j
YXRpb25JbmZvLT5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewotICAgICAgICBUeXBlTG9jYXRp
b24qIGxvY2F0aW9uID0gKml0ZXI7Ci0gICAgICAgIHByb2ZpbGVyLT5sb2dUeXBlc0ZvclR5cGVM
b2NhdGlvbihsb2NhdGlvbik7Ci0gICAgfQotfQotCi12b2lkIFZNOjppbnZhbGlkYXRlVHlwZVNl
dENhY2hlKCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCh0eXBlUHJvZmlsZXIoKSk7Ci0KLSAgICBm
b3IgKEJhZzxUeXBlTG9jYXRpb24+OjppdGVyYXRvciBpdGVyID0gbV90eXBlTG9jYXRpb25JbmZv
LT5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewotICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0
aW9uID0gKml0ZXI7Ci0gICAgICAgIGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+aW52
YWxpZGF0ZUNhY2hlKCk7Ci0gICAgICAgIGlmIChsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0KQot
ICAgICAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+aW52YWxpZGF0ZUNhY2hlKCk7
Ci0gICAgfQorICAgIHR5cGVQcm9maWxlcigpLT5kdW1wVHlwZVByb2ZpbGVyRGF0YSgpOwogfQog
CiB2b2lkIHNhbml0aXplU3RhY2tGb3JWTShWTSogdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgJKHJldmlzaW9uIDE3NDcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlICJT
dHJvbmcuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlZEFy
cmF5Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlZN
RW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldhdGNocG9p
bnQuaCIKQEAgLTUxNSwxMCArNTE0LDcgQEAgcHVibGljOgogICAgIGJvb2wgZGlzYWJsZVR5cGVQ
cm9maWxlcigpOwogICAgIFR5cGVQcm9maWxlckxvZyogdHlwZVByb2ZpbGVyTG9nKCkgeyByZXR1
cm4gbV90eXBlUHJvZmlsZXJMb2cuZ2V0KCk7IH0KICAgICBUeXBlUHJvZmlsZXIqIHR5cGVQcm9m
aWxlcigpIHsgcmV0dXJuIG1fdHlwZVByb2ZpbGVyLmdldCgpOyB9Ci0gICAgVHlwZUxvY2F0aW9u
KiBuZXh0VHlwZUxvY2F0aW9uKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wVHlw
ZVByb2ZpbGVyRGF0YSgpOwotICAgIHZvaWQgaW52YWxpZGF0ZVR5cGVTZXRDYWNoZSgpOwotICAg
IEdsb2JhbFZhcmlhYmxlSUQgZ2V0TmV4dFVuaXF1ZVZhcmlhYmxlSUQoKSB7IHJldHVybiBtX25l
eHRVbmlxdWVWYXJpYWJsZUlEKys7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtNTcwLDkgKzU2Niw3IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxTdHJpbmcsIFJlZlB0cjxXYXRjaHBvaW50U2V0Pj4gbV9pbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnRTZXRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsZXI+IG1fdHlwZVByb2Zp
bGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsZXJMb2c+IG1fdHlwZVByb2ZpbGVy
TG9nOwotICAgIEdsb2JhbFZhcmlhYmxlSUQgbV9uZXh0VW5pcXVlVmFyaWFibGVJRDsKICAgICB1
bnNpZ25lZCBtX3R5cGVQcm9maWxlckVuYWJsZWRDb3VudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
QmFnPFR5cGVMb2NhdGlvbj4+IG1fdHlwZUxvY2F0aW9uSW5mbzsKIH07CiAKICNpZiBFTkFCTEUo
R0NfVkFMSURBVElPTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJv
ZmlsZXIvZGZnLWppdC1vcHRpbWl6YXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIvZGZnLWppdC1vcHRpbWl6YXRpb25zLmpzCShy
ZXZpc2lvbiAxNzQ3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVByb2Zp
bGVyL2RmZy1qaXQtb3B0aW1pemF0aW9ucy5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsMyArMzYs
MTcgQEAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewogICAgICAgICBh
c3NlcnQodHlwZUluZm8uaW5zdHJ1Y3Rpb25UeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRl
eE9mKHR5cGVzW2pdKSAhPT0gLTEsICJTaG91bGQgaGF2ZSBzZWVuIHR5cGU6ICIgKyB0eXBlc1tq
XSArICIgIiArIGkgKyAiLCIgKyBqKTsKICAgICB9CiB9CisKK2Z1bmN0aW9uIHRlc3RTdHJ1Y3Vy
ZShvYmopIHsgcmV0dXJuIG9iajsgfQordmFyIG9iaiA9IHt4OiAyMH07Cit0aWVyVXBUb0RGRyh0
ZXN0U3RydWN1cmUsIG9iaik7Cit2YXIgdHlwZXMgPSBmaW5kVHlwZUZvckV4cHJlc3Npb24odGVz
dFN0cnVjdXJlLCAib2JqIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVj
dHVyZXMubGVuZ3RoID09PSAxLCAidmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBoYXZlIGV4YWN0bHkg
c3RydWN0dXJlIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVyZXNb
MF0uZmllbGRzLmxlbmd0aCA9PT0gMSwgInZhcmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSBleGFj
dGx5IE9ORSBmaWVsZCIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1
cmVzWzBdLmZpZWxkcy5pbmRleE9mKCJ4IikgIT09IC0xLCAidmFyaWFibGUgJ3Rlc3QnIHNob3Vs
ZCBoYXZlIGZpZWxkICd4JyIpOworCit0ZXN0U3RydWN1cmUoe3g6MjAsIHk6IDQwfSkKK3R5cGVz
ID0gZmluZFR5cGVGb3JFeHByZXNzaW9uKHRlc3RTdHJ1Y3VyZSwgIm9iaiIpOworYXNzZXJ0KHR5
cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzLmxlbmd0aCA9PT0gMSwgInZhcmlhYmxl
ICd0ZXN0JyBzaG91bGQgaGF2ZSBzdGlsbCBoYXZlIGV4YWN0bHkgb25lIHN0cnVjdHVyZSIpOwor
YXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLmZpZWxkcy5pbmRl
eE9mKCJ4IikgIT09IC0xLCAidmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBoYXZlIGZpZWxkICd4JyIp
OworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFs
RmllbGRzLmluZGV4T2YoInkiKSAhPT0gLTEsICJ2YXJpYWJsZSAndGVzdCcgc2hvdWxkIGhhdmUg
ZmllbGQgb3B0aW9uYWwgZmllbGQgJ3knIik7Cg==
</data>
<flag name="review"
          id="264601"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>239956</attachid>
            <date>2014-10-16 12:13:28 -0700</date>
            <delta_ts>2014-10-16 14:28:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>21286</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0Nzg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBA
CisyMDE0LTEwLTE2ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBIYXZlIHRoZSBQcm9maWxlVHlwZSBub2RlIGluIHRoZSBERkcgY29udmVydCB0byBhIHN0
cnVjdHVyZSBjaGVjayB3aGVyZSBpdCBjYW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNzU5NgorCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBp
emxvLgorCisgICAgICAgIFR5cGVTZXQgbm93IGtlZXBzIHRyYWNrIG9mIHRoZSBsaXZlIHNldCBv
ZiBTdHJ1Y3R1cmVzIGl0IGhhcyBzZWVuLgorICAgICAgICBJdCBubyBsb25nZXIgbnVrZXMgZXZl
cnl0aGluZyBkdXJpbmcgR0MuIEl0IG5vdyBvbmx5IHJlbW92ZXMgdW5tYXJrZWQKKyAgICAgICAg
c3RydWN0dXJlcyBkdXJpbmcgR0MuIFRoaXMgbW9kaWZpY2F0aW9uIGFsbG93cyB0aGUgUHJvZmls
ZVR5cGUgbm9kZSAKKyAgICAgICAgdG8gY29udmVydCBpbnRvIGEgQ2hlY2tTdHJ1Y3R1cmUgbm9k
ZSBzYWZlbHkgaW4gdGhlIERGRy4gCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYnJpbmdzIHVwIHRo
ZSBjb252ZXJzaW9uIHJhdGUgZnJvbSBQcm9maWxlVHlwZSB0byBDaGVjayAKKyAgICAgICAgb3Ig
Q2hlY2tTdHJ1Y3RydWUgZnJvbSB+NDUlIHRvIH42NSUuIFRoaXMgY2hhbmdlIGFsc28gc3BlZWRz
IHRoZSAKKyAgICAgICAgdHlwZSBwcm9maWxlciB1cCBzaWduaWZpY2FudGx5OiBjb25zaXN0ZW50
bHkgYmV0d2VlbiAyeC0yMHggZmFzdGVyLiAKKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZG9l
cyBzb21lIHNsaWdodCByZWZhY3RvcmluZzogYSBmZXcgdHlwZSBwcm9maWxlcgorICAgICAgICBy
ZWxhdGVkIGZpZWxkcyBhcmUgbW92ZWQgZnJvbSBWTSB0byBUeXBlUHJvZmlsZXIuCisKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNv
ZGVCbG9jayk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9DaGVja1N0cnVjdHVyZSk6CisgICAg
ICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAg
ICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxl
Ojp1bmlxdWVJREZvclZhcmlhYmxlKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmg6
CisgICAgICAgICogcnVudGltZS9UeXBlTG9jYXRpb25DYWNoZS5jcHA6CisgICAgICAgIChKU0M6
OlR5cGVMb2NhdGlvbkNhY2hlOjpnZXRUeXBlTG9jYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUv
VHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVByb2ZpbGVyOjpUeXBlUHJvZmls
ZXIpOgorICAgICAgICAoSlNDOjpUeXBlUHJvZmlsZXI6Om5leHRUeXBlTG9jYXRpb24pOgorICAg
ICAgICAoSlNDOjpUeXBlUHJvZmlsZXI6OmludmFsaWRhdGVUeXBlU2V0Q2FjaGUpOgorICAgICAg
ICAoSlNDOjpUeXBlUHJvZmlsZXI6OmR1bXBUeXBlUHJvZmlsZXJEYXRhKToKKyAgICAgICAgKiBy
dW50aW1lL1R5cGVQcm9maWxlci5oOgorICAgICAgICAoSlNDOjpUeXBlUHJvZmlsZXI6OmdldE5l
eHRVbmlxdWVWYXJpYWJsZUlEKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVQcm9maWxlckxvZy5j
cHA6CisgICAgICAgIChKU0M6OlR5cGVQcm9maWxlckxvZzo6cHJvY2Vzc0xvZ0VudHJpZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5jcHA6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmFk
ZFR5cGVJbmZvcm1hdGlvbik6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmludmFsaWRhdGVDYWNo
ZSk6CisgICAgICAgICogcnVudGltZS9UeXBlU2V0Lmg6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6
OnN0cnVjdHVyZVNldCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6
OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjplbmFibGVUeXBlUHJvZmlsZXIpOgorICAgICAg
ICAoSlNDOjpWTTo6ZGlzYWJsZVR5cGVQcm9maWxlcik6CisgICAgICAgIChKU0M6OlZNOjpkdW1w
VHlwZVByb2ZpbGVyRGF0YSk6CisgICAgICAgIChKU0M6OlZNOjpuZXh0VHlwZUxvY2F0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Vk06OmludmFsaWRhdGVUeXBlU2V0Q2FjaGUpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OnR5cGVQcm9m
aWxlcik6CisgICAgICAgIChKU0M6OlZNOjpnZXROZXh0VW5pcXVlVmFyaWFibGVJRCk6IERlbGV0
ZWQuCisgICAgICAgICogdGVzdHMvdHlwZVByb2ZpbGVyL2RmZy1qaXQtb3B0aW1pemF0aW9ucy5q
czoKKwogMjAxNC0xMC0xNiAgQWRyaWVuIERlc3R1Z3VlcyAgPHB1bGtvbWFuZHlAZ21haWwuY29t
PgogCiAgICAgICAgIFVzZSBpc25hbiBmcm9tIHN0ZCBuYW1lc3BhY2UgaW4gUHJvZmlsZUdlbmVy
YXRvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAxNzQ3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwNSw2ICsyMDA1LDcgQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZt
KCktPnR5cGVQcm9maWxlcigpKTsKICAgICAgICAgICAgIC8vIFRoZSBmb3JtYXQgb2YgdGhpcyBp
bnN0cnVjdGlvbiBpczogb3BfcHJvZmlsZV90eXBlIHJlZ1RvUHJvZmlsZSwgVHlwZUxvY2F0aW9u
KiwgZmxhZywgaWRlbnRpZmllcj8sIHJlc29sdmVUeXBlPwogICAgICAgICAgICAgc2l6ZV90IGlu
c3RydWN0aW9uT2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKICAgICAgICAgICAgIHVuc2lnbmVk
IGRpdm90U3RhcnQsIGRpdm90RW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNzQ3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTM1LDYgKzEx
MzUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZVNldC0+ZG9lc1R5
cGVDb25mb3JtVG8oVHlwZVVuZGVmaW5lZCB8IFR5cGVOdWxsKSAmJiAoc2VlblR5cGVzICYgVHlw
ZVVuZGVmaW5lZCkgJiYgKHNlZW5UeXBlcyAmIFR5cGVOdWxsKSkgewogICAgICAgICAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb0NoZWNrKCk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxPdGhlclVz
ZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlU2V0LT5kb2Vz
VHlwZUNvbmZvcm1UbyhUeXBlT2JqZWN0KSkgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNl
dCBzZXQgPSB0eXBlU2V0LT5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNl
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvQ2hlY2tT
dHJ1Y3R1cmUobV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc2V0KSk7CisgICAgICAgICAgICAgICAg
ICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTc0Nzg1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw2ICszODAsMTIgQEAgc3Ry
dWN0IE5vZGUgewogICAgIHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3MoQ2hlY2spOwog
ICAgIH0KKworICAgIHZvaWQgY29udmVydFRvQ2hlY2tTdHJ1Y3R1cmUoU3RydWN0dXJlU2V0KiBz
ZXQpCisgICAgeworICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhDaGVja1N0cnVjdHVyZSk7
CisgICAgICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc2V0KTsgCisgICAg
fQogICAgIAogICAgIHZvaWQgcmVwbGFjZVdpdGgoTm9kZSogb3RoZXIpCiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE3NDc4NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODIsNyAr
OTgyLDYgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29sbGVjdAogICAgIGlm
ICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGls
ZSgqdGhpcyk7CiAgICAgICAgIHZtKCktPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50
cmllcyhBU0NJSUxpdGVyYWwoIkdDIikpOwotICAgICAgICB2bSgpLT5pbnZhbGlkYXRlVHlwZVNl
dENhY2hlKCk7CiAgICAgfQogICAgIAogICAgIGlmICh2bSgpLT5jYWxsRWRnZUxvZykgewpAQCAt
MTAxMiw2ICsxMDExLDkgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29sbGVj
dAogCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CiAKKyAgICBpZiAodm0oKS0+dHlw
ZVByb2ZpbGVyKCkpCisgICAgICAgIHZtKCktPnR5cGVQcm9maWxlcigpLT5pbnZhbGlkYXRlVHlw
ZVNldENhY2hlKCk7CisKICAgICByZWFwV2Vha0hhbmRsZXMoKTsKICAgICBzd2VlcEFycmF5QnVm
ZmVycygpOwogICAgIHNuYXBzaG90TWFya2VkU3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDE3NDc4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5o
IgorI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2lu
dFNldElubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0yMTEsNyArMjEyLDcgQEAgR2xv
YmFsVmFyaWFibGVJRCBTeW1ib2xUYWJsZTo6dW5pcXVlSURGbwogCiAgICAgR2xvYmFsVmFyaWFi
bGVJRCBpZCA9IGl0ZXItPnZhbHVlOwogICAgIGlmIChpZCA9PSBUeXBlUHJvZmlsZXJOZWVkc1Vu
aXF1ZUlER2VuZXJhdGlvbikgewotICAgICAgICBpZCA9IHZtLmdldE5leHRVbmlxdWVWYXJpYWJs
ZUlEKCk7CisgICAgICAgIGlkID0gdm0udHlwZVByb2ZpbGVyKCktPmdldE5leHRVbmlxdWVWYXJp
YWJsZUlEKCk7CiAgICAgICAgIG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZUlETWFw
LnNldChrZXksIGlkKTsKICAgICAgICAgbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVl
VHlwZVNldE1hcC5zZXQoa2V5LCBUeXBlU2V0OjpjcmVhdGUoKSk7IC8vIE1ha2UgYSBuZXcgZ2xv
YmFsIHR5cGVzZXQgZm9yIHRoaXMgY29ycmVzcG9uZGluZyBJRC4KICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE3NDc4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2Nr
LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJUeXBlU2V0LmgiCisjaW5jbHVk
ZSAiVHlwZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAj
aW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlTG9jYXRpb25DYWNoZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZUxvY2F0aW9uQ2FjaGUuY3Bw
CShyZXZpc2lvbiAxNzQ3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
TG9jYXRpb25DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb25DYWNoZS5oIgogCisjaW5jbHVk
ZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC00MSw3ICs0Miw4IEBAIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBUeXBlTG9jYXQK
IAogICAgIGJvb2wgaXNOZXdMb2NhdGlvbiA9IGZhbHNlOwogICAgIGlmIChtX2xvY2F0aW9uTWFw
LmZpbmQoa2V5KSA9PSBtX2xvY2F0aW9uTWFwLmVuZCgpKSB7Ci0gICAgICAgIFR5cGVMb2NhdGlv
biogbG9jYXRpb24gPSB2bS0+bmV4dFR5cGVMb2NhdGlvbigpOworICAgICAgICBBU1NFUlQodm0t
PnR5cGVQcm9maWxlcigpKTsKKyAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHZtLT50
eXBlUHJvZmlsZXIoKS0+bmV4dFR5cGVMb2NhdGlvbigpOwogICAgICAgICBsb2NhdGlvbi0+bV9n
bG9iYWxWYXJpYWJsZUlEID0gZ2xvYmFsVmFyaWFibGVJRDsKICAgICAgICAgbG9jYXRpb24tPm1f
c291cmNlSUQgPSBzb3VyY2VJRDsKICAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RTdGFydCA9IHN0
YXJ0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmls
ZXIuY3BwCShyZXZpc2lvbiAxNzQ3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxMSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCitUeXBl
UHJvZmlsZXI6OlR5cGVQcm9maWxlcigpCisgICAgOiBtX25leHRVbmlxdWVWYXJpYWJsZUlEKDEp
Cit7IAorfQorCiB2b2lkIFR5cGVQcm9maWxlcjo6bG9nVHlwZXNGb3JUeXBlTG9jYXRpb24oVHlw
ZUxvY2F0aW9uKiBsb2NhdGlvbikKIHsKICAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9y
IGRlc2NyaXB0b3IgPSBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IFR5cGVQcm9maWxl
clJldHVyblN0YXRlbWVudCA/IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJl
dHVybiA6IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWw7CkBAIC0xMzYsNCArMTQx
LDI3IEBAIFR5cGVMb2NhdGlvbiogVHlwZVByb2ZpbGVyOjpmaW5kTG9jYXRpb24KICAgICByZXR1
cm4gYmVzdE1hdGNoOwogfQogCitUeXBlTG9jYXRpb24qIFR5cGVQcm9maWxlcjo6bmV4dFR5cGVM
b2NhdGlvbigpIAoreyAKKyAgICByZXR1cm4gbV90eXBlTG9jYXRpb25JbmZvLmFkZCgpOyAKK30K
Kwordm9pZCBUeXBlUHJvZmlsZXI6OmludmFsaWRhdGVUeXBlU2V0Q2FjaGUoKQoreworICAgIGZv
ciAoQmFnPFR5cGVMb2NhdGlvbj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3R5cGVMb2NhdGlvbkluZm8u
YmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKKyAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlv
biA9ICppdGVyOworICAgICAgICBsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPmludmFs
aWRhdGVDYWNoZSgpOworICAgICAgICBpZiAobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCkKKyAg
ICAgICAgICAgIGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmludmFsaWRhdGVDYWNoZSgpOwor
ICAgIH0KK30KKwordm9pZCBUeXBlUHJvZmlsZXI6OmR1bXBUeXBlUHJvZmlsZXJEYXRhKCkKK3sK
KyAgICBmb3IgKEJhZzxUeXBlTG9jYXRpb24+OjppdGVyYXRvciBpdGVyID0gbV90eXBlTG9jYXRp
b25JbmZvLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIFR5cGVMb2NhdGlvbiog
bG9jYXRpb24gPSAqaXRlcjsKKyAgICAgICAgbG9nVHlwZXNGb3JUeXBlTG9jYXRpb24obG9jYXRp
b24pOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuaAkocmV2aXNpb24gMTc0Nzg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDkgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIgorI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgog
I2luY2x1ZGUgIlR5cGVMb2NhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSA8d3RmL0JhZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzksOCArNDEsNiBAQCBjbGFzcyBUeXBlRGVzY3Jp
cHRpb247CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBUeXBlTG9jYXRpb247Ci0KIHN0cnVj
dCBRdWVyeUtleSB7CiAgICAgUXVlcnlLZXkoKQogICAgICAgICA6IG1fc291cmNlSUQoMCkKQEAg
LTk0LDEyICs5NCwxNyBAQCBlbnVtIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgewogCiBj
bGFzcyBUeXBlUHJvZmlsZXIgewogcHVibGljOgorICAgIFR5cGVQcm9maWxlcigpOwogICAgIHZv
aWQgbG9nVHlwZXNGb3JUeXBlTG9jYXRpb24oVHlwZUxvY2F0aW9uKik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU3RyaW5nIHR5cGVJbmZvcm1hdGlvbkZvckV4cHJlc3Npb25BdE9mZnNldChUeXBl
UHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLCB1bnNpZ25lZCBvZmZzZXQsIGludHB0cl90IHNvdXJj
ZUlEKTsKICAgICB2b2lkIGluc2VydE5ld0xvY2F0aW9uKFR5cGVMb2NhdGlvbiopOwogICAgIEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSogZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCkgeyByZXR1
cm4gJm1fZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlOyB9CiAgICAgVHlwZUxvY2F0aW9uQ2FjaGUq
IHR5cGVMb2NhdGlvbkNhY2hlKCkgeyByZXR1cm4gJm1fdHlwZUxvY2F0aW9uQ2FjaGU7IH0KICAg
ICBUeXBlTG9jYXRpb24qIGZpbmRMb2NhdGlvbih1bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291
cmNlSUQsIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IpOworICAgIEdsb2JhbFZhcmlhYmxl
SUQgZ2V0TmV4dFVuaXF1ZVZhcmlhYmxlSUQoKSB7IHJldHVybiBtX25leHRVbmlxdWVWYXJpYWJs
ZUlEKys7IH0KKyAgICBUeXBlTG9jYXRpb24qIG5leHRUeXBlTG9jYXRpb24oKTsKKyAgICB2b2lk
IGludmFsaWRhdGVUeXBlU2V0Q2FjaGUoKTsKKyAgICB2b2lkIGR1bXBUeXBlUHJvZmlsZXJEYXRh
KCk7CiAgICAgCiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgVmVjdG9y
PFR5cGVMb2NhdGlvbio+PiBTb3VyY2VJRFRvTG9jYXRpb25CdWNrZXRNYXA7CkBAIC0xMDgsNiAr
MTEzLDggQEAgcHJpdmF0ZToKICAgICBUeXBlTG9jYXRpb25DYWNoZSBtX3R5cGVMb2NhdGlvbkNh
Y2hlOwogICAgIHR5cGVkZWYgSGFzaE1hcDxRdWVyeUtleSwgVHlwZUxvY2F0aW9uKj4gVHlwZUxv
Y2F0aW9uUXVlcnlDYWNoZTsKICAgICBUeXBlTG9jYXRpb25RdWVyeUNhY2hlIG1fcXVlcnlDYWNo
ZTsKKyAgICBHbG9iYWxWYXJpYWJsZUlEIG1fbmV4dFVuaXF1ZVZhcmlhYmxlSUQ7CisgICAgQmFn
PFR5cGVMb2NhdGlvbj4gbV90eXBlTG9jYXRpb25JbmZvOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlckxvZy5jcHAJKHJldmlzaW9uIDE3NDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDE2ICs1OSwx
OCBAQCB2b2lkIFR5cGVQcm9maWxlckxvZzo6cHJvY2Vzc0xvZ0VudHJpZXMoCiAKICAgICBkb3Vi
bGUgYmVmb3JlID0gY3VycmVudFRpbWVNUygpOwogICAgIExvZ0VudHJ5KiBlbnRyeSA9IG1fbG9n
U3RhcnRQdHI7Ci0gICAgSGFzaE1hcDxTdHJ1Y3R1cmVJRCwgUmVmUHRyPFN0cnVjdHVyZVNoYXBl
Pj4gc2VlblNoYXBlczsKKyAgICBIYXNoTWFwPFN0cnVjdHVyZSosIFJlZlB0cjxTdHJ1Y3R1cmVT
aGFwZT4+IHNlZW5TaGFwZXM7CiAgICAgd2hpbGUgKGVudHJ5ICE9IG1fY3VycmVudExvZ0VudHJ5
UHRyKSB7CiAgICAgICAgIFN0cnVjdHVyZUlEIGlkID0gZW50cnktPnN0cnVjdHVyZUlEOwogICAg
ICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlOyAKICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGVudHJ5LT52YWx1ZTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSAwOwogICAg
ICAgICBpZiAoaWQpIHsKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IHNlZW5TaGFwZXMuZmluZChp
ZCk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBIZWFwOjpoZWFwKHZhbHVlLmFzQ2VsbCgpKS0+
c3RydWN0dXJlSURUYWJsZSgpLmdldChpZCk7IAorICAgICAgICAgICAgYXV0byBpdGVyID0gc2Vl
blNoYXBlcy5maW5kKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSBzZWVuU2hh
cGVzLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgc2hhcGUgPSBIZWFwOjpoZWFwKHZhbHVlLmFz
Q2VsbCgpKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChlbnRyeS0+c3RydWN0dXJlSUQpLT50b1N0
cnVjdHVyZVNoYXBlKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzZWVuU2hhcGVzLnNldChpZCwg
c2hhcGUpOworICAgICAgICAgICAgICAgIHNoYXBlID0gc3RydWN0dXJlLT50b1N0cnVjdHVyZVNo
YXBlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBzZWVuU2hhcGVzLnNldChzdHJ1Y3R1cmUsIHNo
YXBlKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHNoYXBlID0gaXRlci0+
dmFsdWU7CiAgICAgICAgIH0KQEAgLTc3LDggKzc5LDggQEAgdm9pZCBUeXBlUHJvZmlsZXJMb2c6
OnByb2Nlc3NMb2dFbnRyaWVzKAogICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gZW50
cnktPmxvY2F0aW9uOwogICAgICAgICBsb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPSB0eXBlOwog
ICAgICAgICBpZiAobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCkKLSAgICAgICAgICAgIGxvY2F0
aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmFkZFR5cGVJbmZvcm1hdGlvbih0eXBlLCBzaGFwZSwgaWQp
OwotICAgICAgICBsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPmFkZFR5cGVJbmZvcm1h
dGlvbih0eXBlLCBzaGFwZSwgaWQpOworICAgICAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVHlw
ZVNldC0+YWRkVHlwZUluZm9ybWF0aW9uKHR5cGUsIHNoYXBlLCBzdHJ1Y3R1cmUpOworICAgICAg
ICBsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPmFkZFR5cGVJbmZvcm1hdGlvbih0eXBl
LCBzaGFwZSwgc3RydWN0dXJlKTsKIAogICAgICAgICBlbnRyeSsrOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCShyZXZpc2lvbiAxNzQ3ODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjcsMTcgKzY3LDE2IEBAIFJ1bnRpbWVUeXBlIFR5cGVTZXQ6OmdldFJ1bnRpbWVU
eXBlRm9yVmEKICAgICByZXR1cm4gcmV0OwogfQogCi12b2lkIFR5cGVTZXQ6OmFkZFR5cGVJbmZv
cm1hdGlvbihSdW50aW1lVHlwZSB0eXBlLCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBwcnBO
ZXdTaGFwZSwgU3RydWN0dXJlSUQgaWQpIAordm9pZCBUeXBlU2V0OjphZGRUeXBlSW5mb3JtYXRp
b24oUnVudGltZVR5cGUgdHlwZSwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gcHJwTmV3U2hh
cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKSAKIHsKICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+
IG5ld1NoYXBlID0gcHJwTmV3U2hhcGU7CiAgICAgbV9zZWVuVHlwZXMgPSBtX3NlZW5UeXBlcyB8
IHR5cGU7CiAKLSAgICBpZiAoaWQgJiYgbmV3U2hhcGUgJiYgdHlwZSAhPSBUeXBlU3RyaW5nKSB7
Ci0gICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZUlEQ2FjaGUuaXNWYWxpZFZhbHVlKGlkKSk7Ci0g
ICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zdHJ1Y3R1cmVJRENhY2hlLmFkZChpZCk7Ci0gICAg
ICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgIGlmIChzdHJ1Y3R1cmUgJiYgbmV3
U2hhcGUgJiYgdHlwZSAhPSBUeXBlU3RyaW5nKSB7CisgICAgICAgIGlmICghbV9zdHJ1Y3R1cmVT
ZXQuY29udGFpbnMoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmVTZXQuYWRk
KHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAvLyBNYWtlIG9uZSBtb3JlIHBhc3MgbWFraW5nIHN1
cmUgdGhhdDogCi0gICAgICAgICAgICAvLyAtIFdlIGRvbid0IGhhdmUgdHdvIGluc3RhbmNlcyBv
ZiB0aGUgc2FtZSBzaGFwZS4gKFNhbWUgc2hhcGVzIG1heSBoYXZlIGRpZmZlcmVudCBTdHJ1Y3R1
cmVJRHMpLgorICAgICAgICAgICAgLy8gLSBXZSBkb24ndCBoYXZlIHR3byBpbnN0YW5jZXMgb2Yg
dGhlIHNhbWUgc2hhcGUuIChTYW1lIHNoYXBlcyBtYXkgaGF2ZSBkaWZmZXJlbnQgU3RydWN0dXJl
cykuCiAgICAgICAgICAgICAvLyAtIFdlIGRvbid0IGhhdmUgdHdvIHNoYXBlcyB0aGF0IHNoYXJl
IHRoZSBzYW1lIHByb3RvdHlwZSBjaGFpbi4gSWYgdGhlc2Ugc2hhcGVzIHNoYXJlIHRoZSBzYW1l
IAogICAgICAgICAgICAgLy8gICBwcm90b3R5cGUgY2hhaW4sIHRoZXkgd2lsbCBiZSBtZXJnZWQg
aW50byBvbmUgc2hhcGUuCiAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CkBAIC0xMDcs
NyArMTA2LDggQEAgdm9pZCBUeXBlU2V0OjphZGRUeXBlSW5mb3JtYXRpb24oUnVudGltZQogCiB2
b2lkIFR5cGVTZXQ6OmludmFsaWRhdGVDYWNoZSgpCiB7Ci0gICAgbV9zdHJ1Y3R1cmVJRENhY2hl
LmNsZWFyKCk7CisgICAgYXV0byBrZWVwTWFya2VkU3RydWN0dXJlc0ZpbHRlciA9IFtdIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9vbCB7IHJldHVybiBIZWFwOjppc01hcmtlZChzdHJ1Y3R1
cmUpOyB9OworICAgIG1fc3RydWN0dXJlU2V0LmdlbmVyaWNGaWx0ZXIoa2VlcE1hcmtlZFN0cnVj
dHVyZXNGaWx0ZXIpOwogfQogCiBTdHJpbmcgVHlwZVNldDo6ZHVtcFR5cGVzKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJldmlzaW9uIDE3NDc4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBUeXBlU2V0X2gKICNkZWZpbmUgVHlwZVNl
dF9oCiAKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJl
U2V0LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtOTcsNyArOTcsNyBAQCBj
bGFzcyBUeXBlU2V0IDogcHVibGljIFJlZkNvdW50ZWQ8VHlwZVNlCiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8VHlwZVNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFR5
cGVTZXQpOyB9CiAgICAgVHlwZVNldCgpOwotICAgIHZvaWQgYWRkVHlwZUluZm9ybWF0aW9uKFJ1
bnRpbWVUeXBlLCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiwgU3RydWN0dXJlSUQpOworICAg
IHZvaWQgYWRkVHlwZUluZm9ybWF0aW9uKFJ1bnRpbWVUeXBlLCBQYXNzUmVmUHRyPFN0cnVjdHVy
ZVNoYXBlPiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIFJ1bnRpbWVUeXBlIGdldFJ1bnRpbWVU
eXBlRm9yVmFsdWUoSlNWYWx1ZSk7CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGUoKTsKICAgICBT
dHJpbmcgZHVtcFR5cGVzKCkgY29uc3Q7CkBAIC0xMTAsMTMgKzExMCwxMyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zZWVuVHlwZXMgPT0gVHlwZU5vdGhp
bmc7IH0KICAgICBib29sIGRvZXNUeXBlQ29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0Owog
ICAgIHVpbnQzMl90IHNlZW5UeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VlblR5cGVzOyB9Cisg
ICAgU3RydWN0dXJlU2V0IHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJl
U2V0OyB9OwogCiBwcml2YXRlOgotCiAgICAgdWludDMyX3QgbV9zZWVuVHlwZXM7CiAgICAgYm9v
bCBtX2lzT3ZlcmZsb3duOwogICAgIFZlY3RvcjxSZWZQdHI8U3RydWN0dXJlU2hhcGU+PiBtX3N0
cnVjdHVyZUhpc3Rvcnk7Ci0gICAgSGFzaFNldDxTdHJ1Y3R1cmVJRD4gbV9zdHJ1Y3R1cmVJRENh
Y2hlOworICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKIH07CiAKIH0gLy9uYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAx
NzQ3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5MSw3ICsxOTEsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgLCBtX2NvZGVDYWNoZShDb2RlQ2FjaGU6OmNyZWF0ZSgpKQogICAgICwg
bV9lbmFibGVkUHJvZmlsZXIobnVsbHB0cikKICAgICAsIG1fYnVpbHRpbkV4ZWN1dGFibGVzKEJ1
aWx0aW5FeGVjdXRhYmxlczo6Y3JlYXRlKCp0aGlzKSkKLSAgICAsIG1fbmV4dFVuaXF1ZVZhcmlh
YmxlSUQoMSkKICAgICAsIG1fdHlwZVByb2ZpbGVyRW5hYmxlZENvdW50KDApCiB7CiAgICAgaW50
ZXJwcmV0ZXIgPSBuZXcgSW50ZXJwcmV0ZXIoKnRoaXMpOwpAQCAtODk4LDIwICs4OTcsMTIgQEAg
dm9pZCBWTTo6c2V0RW5hYmxlZFByb2ZpbGVyKExlZ2FjeVByb2ZpbAogICAgIH0KIH0KIAotVHlw
ZUxvY2F0aW9uKiBWTTo6bmV4dFR5cGVMb2NhdGlvbigpIAoteyAKLSAgICBSRUxFQVNFX0FTU0VS
VCghIW1fdHlwZUxvY2F0aW9uSW5mbyk7Ci0KLSAgICByZXR1cm4gbV90eXBlTG9jYXRpb25JbmZv
LT5hZGQoKTsgCi19Ci0KIGJvb2wgVk06OmVuYWJsZVR5cGVQcm9maWxlcigpCiB7CiAgICAgYm9v
bCBuZWVkc1RvUmVjb21waWxlID0gZmFsc2U7CiAgICAgaWYgKCFtX3R5cGVQcm9maWxlckVuYWJs
ZWRDb3VudCkgewogICAgICAgICBtX3R5cGVQcm9maWxlciA9IHN0ZDo6bWFrZV91bmlxdWU8VHlw
ZVByb2ZpbGVyPigpOwogICAgICAgICBtX3R5cGVQcm9maWxlckxvZyA9IHN0ZDo6bWFrZV91bmlx
dWU8VHlwZVByb2ZpbGVyTG9nPigpOwotICAgICAgICBtX3R5cGVMb2NhdGlvbkluZm8gPSBzdGQ6
Om1ha2VfdW5pcXVlPEJhZzxUeXBlTG9jYXRpb24+PigpOwogICAgICAgICBuZWVkc1RvUmVjb21w
aWxlID0gdHJ1ZTsKICAgICB9CiAgICAgbV90eXBlUHJvZmlsZXJFbmFibGVkQ291bnQrKzsKQEAg
LTkyOCw3ICs5MTksNiBAQCBib29sIFZNOjpkaXNhYmxlVHlwZVByb2ZpbGVyKCkKICAgICBpZiAo
IW1fdHlwZVByb2ZpbGVyRW5hYmxlZENvdW50KSB7CiAgICAgICAgIG1fdHlwZVByb2ZpbGVyLnJl
c2V0KG51bGxwdHIpOwogICAgICAgICBtX3R5cGVQcm9maWxlckxvZy5yZXNldChudWxscHRyKTsK
LSAgICAgICAgbV90eXBlTG9jYXRpb25JbmZvLnJlc2V0KG51bGxwdHIpOwogICAgICAgICBuZWVk
c1RvUmVjb21waWxlID0gdHJ1ZTsKICAgICB9CiAKQEAgLTk0MSwyMyArOTMxLDcgQEAgdm9pZCBW
TTo6ZHVtcFR5cGVQcm9maWxlckRhdGEoKQogICAgICAgICByZXR1cm47CiAKICAgICB0eXBlUHJv
ZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJWTSBEdW1wIFR5cGVz
IikpOwotICAgIFR5cGVQcm9maWxlciogcHJvZmlsZXIgPSBtX3R5cGVQcm9maWxlci5nZXQoKTsK
LSAgICBmb3IgKEJhZzxUeXBlTG9jYXRpb24+OjppdGVyYXRvciBpdGVyID0gbV90eXBlTG9jYXRp
b25JbmZvLT5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewotICAgICAgICBUeXBlTG9jYXRpb24q
IGxvY2F0aW9uID0gKml0ZXI7Ci0gICAgICAgIHByb2ZpbGVyLT5sb2dUeXBlc0ZvclR5cGVMb2Nh
dGlvbihsb2NhdGlvbik7Ci0gICAgfQotfQotCi12b2lkIFZNOjppbnZhbGlkYXRlVHlwZVNldENh
Y2hlKCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCh0eXBlUHJvZmlsZXIoKSk7Ci0KLSAgICBmb3Ig
KEJhZzxUeXBlTG9jYXRpb24+OjppdGVyYXRvciBpdGVyID0gbV90eXBlTG9jYXRpb25JbmZvLT5i
ZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewotICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9u
ID0gKml0ZXI7Ci0gICAgICAgIGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+aW52YWxp
ZGF0ZUNhY2hlKCk7Ci0gICAgICAgIGlmIChsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0KQotICAg
ICAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+aW52YWxpZGF0ZUNhY2hlKCk7Ci0g
ICAgfQorICAgIHR5cGVQcm9maWxlcigpLT5kdW1wVHlwZVByb2ZpbGVyRGF0YSgpOwogfQogCiB2
b2lkIHNhbml0aXplU3RhY2tGb3JWTShWTSogdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgJKHJldmlzaW9uIDE3NDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlICJTdHJv
bmcuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlZNRW50
cnlSZWNvcmQuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQu
aCIKQEAgLTUxNSwxMCArNTE0LDcgQEAgcHVibGljOgogICAgIGJvb2wgZGlzYWJsZVR5cGVQcm9m
aWxlcigpOwogICAgIFR5cGVQcm9maWxlckxvZyogdHlwZVByb2ZpbGVyTG9nKCkgeyByZXR1cm4g
bV90eXBlUHJvZmlsZXJMb2cuZ2V0KCk7IH0KICAgICBUeXBlUHJvZmlsZXIqIHR5cGVQcm9maWxl
cigpIHsgcmV0dXJuIG1fdHlwZVByb2ZpbGVyLmdldCgpOyB9Ci0gICAgVHlwZUxvY2F0aW9uKiBu
ZXh0VHlwZUxvY2F0aW9uKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wVHlwZVBy
b2ZpbGVyRGF0YSgpOwotICAgIHZvaWQgaW52YWxpZGF0ZVR5cGVTZXRDYWNoZSgpOwotICAgIEds
b2JhbFZhcmlhYmxlSUQgZ2V0TmV4dFVuaXF1ZVZhcmlhYmxlSUQoKSB7IHJldHVybiBtX25leHRV
bmlxdWVWYXJpYWJsZUlEKys7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwpAQCAtNTcwLDkgKzU2Niw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxXYXRjaHBvaW50U2V0Pj4gbV9pbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnRTZXRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsZXI+IG1fdHlwZVByb2ZpbGVy
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsZXJMb2c+IG1fdHlwZVByb2ZpbGVyTG9n
OwotICAgIEdsb2JhbFZhcmlhYmxlSUQgbV9uZXh0VW5pcXVlVmFyaWFibGVJRDsKICAgICB1bnNp
Z25lZCBtX3R5cGVQcm9maWxlckVuYWJsZWRDb3VudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFn
PFR5cGVMb2NhdGlvbj4+IG1fdHlwZUxvY2F0aW9uSW5mbzsKIH07CiAKICNpZiBFTkFCTEUoR0Nf
VkFMSURBVElPTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmls
ZXIvZGZnLWppdC1vcHRpbWl6YXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIvZGZnLWppdC1vcHRpbWl6YXRpb25zLmpzCShyZXZp
c2lvbiAxNzQ3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVByb2ZpbGVy
L2RmZy1qaXQtb3B0aW1pemF0aW9ucy5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsMyArMzYsMTcg
QEAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewogICAgICAgICBhc3Nl
cnQodHlwZUluZm8uaW5zdHJ1Y3Rpb25UeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRleE9m
KHR5cGVzW2pdKSAhPT0gLTEsICJTaG91bGQgaGF2ZSBzZWVuIHR5cGU6ICIgKyB0eXBlc1tqXSAr
ICIgIiArIGkgKyAiLCIgKyBqKTsKICAgICB9CiB9CisKK2Z1bmN0aW9uIHRlc3RTdHJ1Y3VyZShv
YmopIHsgcmV0dXJuIG9iajsgfQordmFyIG9iaiA9IHt4OiAyMH07Cit0aWVyVXBUb0RGRyh0ZXN0
U3RydWN1cmUsIG9iaik7Cit2YXIgdHlwZXMgPSBmaW5kVHlwZUZvckV4cHJlc3Npb24odGVzdFN0
cnVjdXJlLCAib2JqIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVy
ZXMubGVuZ3RoID09PSAxLCAidmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBoYXZlIGV4YWN0bHkgc3Ry
dWN0dXJlIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVyZXNbMF0u
ZmllbGRzLmxlbmd0aCA9PT0gMSwgInZhcmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSBleGFjdGx5
IE9ORSBmaWVsZCIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVz
WzBdLmZpZWxkcy5pbmRleE9mKCJ4IikgIT09IC0xLCAidmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBo
YXZlIGZpZWxkICd4JyIpOworCit0ZXN0U3RydWN1cmUoe3g6MjAsIHk6IDQwfSkKK3R5cGVzID0g
ZmluZFR5cGVGb3JFeHByZXNzaW9uKHRlc3RTdHJ1Y3VyZSwgIm9iaiIpOworYXNzZXJ0KHR5cGVz
Lmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzLmxlbmd0aCA9PT0gMSwgInZhcmlhYmxlICd0
ZXN0JyBzaG91bGQgaGF2ZSBzdGlsbCBoYXZlIGV4YWN0bHkgb25lIHN0cnVjdHVyZSIpOworYXNz
ZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLmZpZWxkcy5pbmRleE9m
KCJ4IikgIT09IC0xLCAidmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBoYXZlIGZpZWxkICd4JyIpOwor
YXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmll
bGRzLmluZGV4T2YoInkiKSAhPT0gLTEsICJ2YXJpYWJsZSAndGVzdCcgc2hvdWxkIGhhdmUgZmll
bGQgb3B0aW9uYWwgZmllbGQgJ3knIik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>