<?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>128297</bug_id>
          
          <creation_ts>2014-02-05 22:25:38 -0800</creation_ts>
          <short_desc>GC should safepoint the DFG worklist in a smarter way rather than just waiting for everything to complete</short_desc>
          <delta_ts>2014-02-07 22:30:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>128291</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>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>977244</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-05 22:25:38 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978001</commentid>
    <comment_count>1</comment_count>
      <attachid>223488</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-07 13:17:38 -0800</bug_when>
    <thetext>Created attachment 223488
getting close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978031</commentid>
    <comment_count>2</comment_count>
      <attachid>223495</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-07 14:03:42 -0800</bug_when>
    <thetext>Created attachment 223495
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978040</commentid>
    <comment_count>3</comment_count>
      <attachid>223495</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-02-07 14:11:38 -0800</bug_when>
    <thetext>Comment on attachment 223495
the patch

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:897
&gt; -
&gt; +    

drop this change

&gt; Source/JavaScriptCore/dfg/DFGDesiredStructureChains.cpp:48
&gt; +    for (unsigned i = m_vector.size(); i--;)
&gt; +        m_vector[i]-&gt;visitChildren(visitor);

Why reverse iteration?  Forward iteration is much nicer.

&gt; Source/JavaScriptCore/dfg/DFGDesiredWeakReferences.cpp:63
&gt; +        visitor.appendUnbarrieredPointer(&amp;m_references[i]);

and again, what&apos;s the reasoning here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978044</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-07 14:14:27 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 223495 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=223495&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.h:897
&gt; &gt; -
&gt; &gt; +    
&gt; 
&gt; drop this change
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGDesiredStructureChains.cpp:48
&gt; &gt; +    for (unsigned i = m_vector.size(); i--;)
&gt; &gt; +        m_vector[i]-&gt;visitChildren(visitor);
&gt; 
&gt; Why reverse iteration?  Forward iteration is much nicer.

It takes less code.  It makes no difference which direction you use.  There is a lot of code in JSC that uses reverse iteration.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGDesiredWeakReferences.cpp:63
&gt; &gt; +        visitor.appendUnbarrieredPointer(&amp;m_references[i]);
&gt; 
&gt; and again, what&apos;s the reasoning here?

Less code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978273</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-07 21:02:54 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/163691</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978290</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-07 22:27:53 -0800</bug_when>
    <thetext>Some new test assertions after this http://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK1%20(Tests)/r163691%20(2720)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978292</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-07 22:30:05 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Some new test assertions after this http://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK1%20(Tests)/r163691%20(2720)/results.html

I claim this will fix it: https://bugs.webkit.org/show_bug.cgi?id=128443</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223488</attachid>
            <date>2014-02-07 13:17:38 -0800</date>
            <delta_ts>2014-02-07 14:03:42 -0800</delta_ts>
            <desc>getting close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>20102</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDE2MzYzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtODk0LDcgKzg5NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFN0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGUpOwogCiAgICAgdm9pZCBjbGVhckRlYnVnZ2VyUmVx
dWVzdHMoKSB7IG1fZGVidWdnZXJSZXF1ZXN0cyA9IDA7IH0KLQorICAgIAogICAgIC8vIEZJWE1F
OiBNYWtlIHRoZXNlIHJlbWFpbmluZyBtZW1iZXJzIHByaXZhdGUuCiAKICAgICBpbnQgbV9udW1D
YWxsZWVSZWdpc3RlcnM7CkBAIC0xMjczLDcgKzEyNzMsMTggQEAgaW5saW5lIHZvaWQgQ29kZUJs
b2NrU2V0OjptYXJrKHZvaWQqIGNhbgogICAgIGlmIChpdGVyID09IG1fc2V0LmVuZCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgKCppdGVyKS0+bV9tYXlCZUV4ZWN1dGluZyA9IHRydWU7
CisgICAgbWFyaygqaXRlcik7Cit9CisKK2lubGluZSB2b2lkIENvZGVCbG9ja1NldDo6bWFyayhD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBpZiAoIWNvZGVCbG9jaykKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGlmIChjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcgPSB0cnVlOwog
I2lmIEVOQUJMRShHR0MpCiAgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuYXBwZW5kKHN0YXRpY19j
YXN0PENvZGVCbG9jayo+KGNhbmRpZGF0ZUNvZGVCbG9jaykpOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0aW9uS2V5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0aW9uS2V5LmNwcAkocmV2aXNp
b24gMTYzNjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxhdGlvbktl
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJERkdDb21waWxh
dGlvbktleS5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2Nr
U2V0LmgiCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIApAQCAtNDEsNiArNDIsMTEgQEAgdm9pZCBD
b21waWxhdGlvbktleTo6ZHVtcChQcmludFN0cmVhbSYgbwogICAgIG91dC5wcmludCgiKENvbXBp
bGUgb2YgIiwgKm1fcHJvZmlsZWRCbG9jaywgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKIH0KIAor
dm9pZCBDb21waWxhdGlvbktleTo6dmlzaXRDaGlsZHJlbihDb2RlQmxvY2tTZXQmIGNvZGVCbG9j
a3MpCit7CisgICAgY29kZUJsb2Nrcy5tYXJrKG1fcHJvZmlsZWRCbG9jayk7Cit9CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbXBpbGF0aW9uS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21waWxhdGlvbktleS5oCShyZXZpc2lvbiAxNjM2MzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0aW9uS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYg
KzMyLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBDb2Rl
QmxvY2tTZXQ7CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC03OSw2ICs4MCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RGOjpQdHJIYXNoPENvZGVCbG9jayo+
OjpoYXNoKG1fcHJvZmlsZWRCbG9jayksIG1fbW9kZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihDb2RlQmxvY2tTZXQmKTsKKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcAkocmV2aXNpb24g
MTYzNjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkU3RydWN0dXJl
Q2hhaW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNiArNDIsMTIgQEAgYm9vbCBEZXNpcmVkU3Ry
dWN0dXJlQ2hhaW5zOjphcmVTdGlsbFZhbAogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIERl
c2lyZWRTdHJ1Y3R1cmVDaGFpbnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV92ZWN0b3Iuc2l6ZSgpOyBpLS07KQorICAgICAg
ICBtX3ZlY3RvcltpXS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKK30KKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMu
aAkocmV2aXNpb24gMTYzNjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkU3RydWN0dXJlQ2hhaW5zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDYgKzQ2LDkgQEAgcHVibGlj
OgogICAgIH0KICAgICAKICAgICBib29sIGFyZVN0aWxsVmFsaWQoKSBjb25zdDsKKyAgICAKKyAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICAKIHByaXZhdGU6CiAgICAg
VmVjdG9yPFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPj4gbV92ZWN0b3I7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtS
ZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMTYzNjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw2ICs1
NiwxMiBAQCB2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6cmVhbGx5QWRkKFZNCiAgICAgfQog
fQogCit2b2lkIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3JlZmVyZW5jZXMuc2l6ZSgp
OyBpLS07KQorICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcigmbV9yZWZl
cmVuY2VzW2ldKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDE2MzYzOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRMYXppbHkoSlNDZWxs
Kik7CiAgICAgdm9pZCByZWFsbHlBZGQoVk0mLCBDb21tb25EYXRhKik7CisgICAgCisgICAgdm9p
ZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CiAgICAgQ29kZUJsb2Nr
KiBtX2NvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdyaXRlQmFycmllcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdyaXRlQmFycmllcnMuY3BwCShyZXZpc2lvbiAxNjM2MzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXcml0ZUJhcnJpZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNjgsNiArNjgsMjQgQEAgdm9pZCBEZXNpcmVkV3JpdGVCYXJyaWVyOjp0cmlnZ2Vy
KFZNJiB2bQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgRGVz
aXJlZFdyaXRlQmFycmllcnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIENvbnN0YW50VHlwZTogeworICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGJhcnJpZXIgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRz
KClbbV93aGljaC5pbmRleF07CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZiYXJyaWVyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWVF
eGVjdXRhYmxlVHlwZTogeworICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IG1fd2hpY2guaW5saW5lQ2FsbEZyYW1lOworICAgICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0
RXhlY3V0YWJsZT4mIGV4ZWN1dGFibGUgPSBpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGU7Cisg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZleGVjdXRhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0gfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIERlc2lyZWRXcml0
ZUJhcnJpZXJzOjpEZXNpcmVkV3JpdGVCYXJyaWVycygpCiB7CiB9CkBAIC04Miw2ICsxMDAsMTIg
QEAgdm9pZCBEZXNpcmVkV3JpdGVCYXJyaWVyczo6dHJpZ2dlcihWTSYgdgogICAgICAgICBtX2Jh
cnJpZXJzW2ldLnRyaWdnZXIodm0pOwogfQogCit2b2lkIERlc2lyZWRXcml0ZUJhcnJpZXJzOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2JhcnJpZXJzLnNpemUoKTsgaSsrKQorICAgICAgICBtX2JhcnJpZXJzW2ld
LnZpc2l0Q2hpbGRyZW4oJm1fYmFycmllcnNbaV0pOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdyaXRlQmFycmllcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXcml0ZUJhcnJpZXJzLmgJKHJldmlzaW9u
IDE2MzYzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdyaXRlQmFy
cmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6CiAgICAgRGVzaXJl
ZFdyaXRlQmFycmllcihUeXBlLCBDb2RlQmxvY2sqLCBJbmxpbmVDYWxsRnJhbWUqLCBKU0NlbGwq
IG93bmVyKTsKIAogICAgIHZvaWQgdHJpZ2dlcihWTSYpOworICAgIAorICAgIHZvaWQgdmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIEpTQ2VsbCogbV9vd25lcjsK
QEAgLTc4LDYgKzgwLDggQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgdHJpZ2dlcihWTSYp
OworICAgIAorICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogCiBwcml2YXRl
OgogICAgIFZlY3RvcjxEZXNpcmVkV3JpdGVCYXJyaWVyPiBtX2JhcnJpZXJzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNjM2MzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDQs
NiArNDA0LDIwIEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBp
bGF0aW9uS2V5KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9CiAKK3ZvaWQgUGxh
bjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvciwgQ29kZUJsb2NrU2V0JiBjb2Rl
QmxvY2tzKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgp
OyBpLS07KQorICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJm11c3RIYW5k
bGVWYWx1ZXNbaV0pOworICAgIAorICAgIGNvZGVCbG9ja3MubWFyayhjb2RlQmxvY2suZ2V0KCkp
OworICAgIGNvZGVCbG9ja3MubWFyayhwcm9maWxlZERGR0NvZGVCbG9jay5nZXQoKSk7CisgICAg
CisgICAgY2hhaW5zLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgd2Vha1JlZmVyZW5jZXMu
dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICB3cml0ZUJhcnJpZXJzLnZpc2l0Q2hpbGRyZW4o
dmlzaXRvcik7CisgICAgdHJhbnNpdGlvbnMudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKK30KKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMTYzNjM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBD
b2RlQmxvY2tTZXQ7CitjbGFzcyBTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAg
LTY5LDYgKzcxLDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQog
ICAgIAogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAorICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYsIENvZGVCbG9ja1NldCYpOworICAgIAogICAgIFZNJiB2bTsKICAg
ICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2s7CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gcHJv
ZmlsZWRERkdDb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0LmNwcAkocmV2aXNpb24gMTYzNjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDE1ICs0OSwxOSBAQCBXb3JrbGlz
dDo6fldvcmtsaXN0KCkKICAgICAgICAgbV9wbGFuRW5xdWV1ZWQuYnJvYWRjYXN0KCk7CiAgICAg
fQogICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGktLTspCi0gICAgICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkc1tpXSk7CisgICAgICAgIHdhaXRGb3JU
aHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkc1tpXS0+bV9pZGVudGlmaWVyKTsKICAgICBBU1NFUlQo
IW1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKTsKIH0KIAogdm9pZCBXb3JrbGlzdDo6ZmluaXNoQ3Jl
YXRpb24odW5zaWduZWQgbnVtYmVyT2ZUaHJlYWRzKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG51
bWJlck9mVGhyZWFkcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZUaHJlYWRzOyBp
LS07KQotICAgICAgICBtX3RocmVhZHMuYXBwZW5kKGNyZWF0ZVRocmVhZCh0aHJlYWRGdW5jdGlv
biwgdGhpcywgIkpTQyBDb21waWxhdGlvbiBUaHJlYWQiKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtYmVyT2ZUaHJlYWRzOyBpLS07KSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJl
YWREYXRhPiBkYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWREYXRhPigpOworICAgICAgICBk
YXRhLT5tX3dvcmtsaXN0ID0gdGhpczsKKyAgICAgICAgZGF0YS0+bV9pZGVudGlmaWVyID0gY3Jl
YXRlVGhyZWFkKHRocmVhZEZ1bmN0aW9uLCBkYXRhLmdldCgpLCAiSlNDIENvbXBpbGF0aW9uIFRo
cmVhZCIpOworICAgICAgICBtX3RocmVhZHMuYXBwZW5kKHN0ZDo6bW92ZShkYXRhKSk7CisgICAg
fQogfQogCiBQYXNzUmVmUHRyPFdvcmtsaXN0PiBXb3JrbGlzdDo6Y3JlYXRlKHVuc2lnbmVkIG51
bWJlck9mVGhyZWFkcykKQEAgLTE4OCw2ICsxOTIsMjYgQEAgdm9pZCBXb3JrbGlzdDo6Y29tcGxl
dGVBbGxQbGFuc0ZvclZNKFZNJgogICAgIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsK
IH0KIAordm9pZCBXb3JrbGlzdDo6c3VzcGVuZEFsbFRocmVhZHMoKQoreworICAgIGZvciAodW5z
aWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGktLTspCisgICAgICAgIG1fdGhyZWFkc1tpXS0+
bV9yaWdodFRvUnVuLmxvY2soKTsKK30KKwordm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFk
cygpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV90aHJlYWRzLnNpemUoKTsgaS0tOykKKyAg
ICAgICAgbV90aHJlYWRzW2ldLT5tX3JpZ2h0VG9SdW4udW5sb2NrKCk7Cit9CisKK3ZvaWQgV29y
a2xpc3Q6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIENvZGVCbG9ja1NldCYg
Y29kZUJsb2NrcykKK3sKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5z
LmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGl0ZXIt
PmtleS52aXNpdENoaWxkcmVuKGNvZGVCbG9ja3MpOworICAgICAgICBpdGVyLT52YWx1ZS0+dmlz
aXRDaGlsZHJlbih2aXNpdG9yLCBjb2RlQmxvY2tzKTsKKyAgICB9Cit9CisKIHNpemVfdCBXb3Jr
bGlzdDo6cXVldWVMZW5ndGgoKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOwpA
QCAtMjA4LDcgKzIzMiw3IEBAIHZvaWQgV29ya2xpc3Q6OmR1bXAoY29uc3QgTXV0ZXhMb2NrZXIm
LCAKICAgICAgICAgIiwgTnVtIEFjdGl2ZSBUaHJlYWRzID0gIiwgbV9udW1iZXJPZkFjdGl2ZVRo
cmVhZHMsICIvIiwgbV90aHJlYWRzLnNpemUoKSwgIl0iKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6
cnVuVGhyZWFkKCkKK3ZvaWQgV29ya2xpc3Q6OnJ1blRocmVhZChUaHJlYWREYXRhKiBkYXRhKQog
ewogICAgIENvbXBpbGF0aW9uU2NvcGUgY29tcGlsYXRpb25TY29wZTsKICAgICAKQEAgLTIyMyw2
ICsyNDcsNyBAQCB2b2lkIFdvcmtsaXN0OjpydW5UaHJlYWQoKQogICAgICAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgICAgICB3aGlsZSAobV9xdWV1ZS5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgbV9wbGFuRW5xdWV1ZWQud2FpdChtX2xvY2spOworICAgICAg
ICAgICAgCiAgICAgICAgICAgICBwbGFuID0gbV9xdWV1ZS50YWtlRmlyc3QoKTsKICAgICAgICAg
ICAgIGlmIChwbGFuKQogICAgICAgICAgICAgICAgIG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKys7
CkBAIC0yMzQsMTAgKzI1OSwxNCBAQCB2b2lkIFdvcmtsaXN0OjpydW5UaHJlYWQoKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkKLSAgICAgICAgICAgIGRhdGFMb2coKnRoaXMsICI6
IENvbXBpbGluZyAiLCBwbGFuLT5rZXkoKSwgIiBhc3luY2hyb25vdXNseVxuIik7CisgICAgICAg
IHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihkYXRhLT5tX3JpZ2h0VG9SdW4pOwor
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1
ZSgpKQorICAgICAgICAgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IENvbXBpbGluZyAiLCBwbGFu
LT5rZXkoKSwgIiBhc3luY2hyb25vdXNseVxuIik7CiAgICAgICAgIAotICAgICAgICBwbGFuLT5j
b21waWxlSW5UaHJlYWQobG9uZ0xpdmVkU3RhdGUpOworICAgICAgICAgICAgcGxhbi0+Y29tcGls
ZUluVGhyZWFkKGxvbmdMaXZlZFN0YXRlKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
ewogICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7CkBAIC0yNTgsNyArMjg3
LDggQEAgdm9pZCBXb3JrbGlzdDo6cnVuVGhyZWFkKCkKIAogdm9pZCBXb3JrbGlzdDo6dGhyZWFk
RnVuY3Rpb24odm9pZCogYXJndW1lbnQpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8V29ya2xpc3QqPihh
cmd1bWVudCktPnJ1blRocmVhZCgpOworICAgIFRocmVhZERhdGEqIGRhdGEgPSBzdGF0aWNfY2Fz
dDxUaHJlYWREYXRhKj4oYXJndW1lbnQpOworICAgIGRhdGEtPm1fd29ya2xpc3QtPnJ1blRocmVh
ZChkYXRhKTsKIH0KIAogc3RhdGljIFdvcmtsaXN0KiB0aGVHbG9iYWxERkdXb3JrbGlzdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDE2MzYz
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzcsNyArMzcsMTIgQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2tTZXQ7CitjbGFzcyBT
bG90VmlzaXRvcjsKKworbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIFdvcmtsaXN0IDogcHVibGlj
IFJlZkNvdW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKQEAgLTYxLDEzICs2NiwxOSBAQCBwdWJs
aWM6CiAgICAgU3RhdGUgY29tcGlsYXRpb25TdGF0ZShDb21waWxhdGlvbktleSk7CiAgICAgCiAg
ICAgc2l6ZV90IHF1ZXVlTGVuZ3RoKCk7CisgICAgCisgICAgdm9pZCBzdXNwZW5kQWxsVGhyZWFk
cygpOworICAgIHZvaWQgcmVzdW1lQWxsVGhyZWFkcygpOworICAgIAorICAgIHZvaWQgdmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYsIENvZGVCbG9ja1NldCYpOyAvLyBPbmx5IGNhbGxlZCBvbiB0
aGUgbWFpbiB0aHJlYWQgYWZ0ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KKyAgICAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAgICAgV29ya2xp
c3QoKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcyk7
CiAgICAgCi0gICAgdm9pZCBydW5UaHJlYWQoKTsKKyAgICB2b2lkIHJ1blRocmVhZChUaHJlYWRE
YXRhKik7CiAgICAgc3RhdGljIHZvaWQgdGhyZWFkRnVuY3Rpb24odm9pZCogYXJndW1lbnQpOwog
ICAgIAogICAgIHZvaWQgcmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgVmVjdG9yPFJlZlB0
cjxQbGFuPiwgOD4mKTsKQEAgLTkxLDcgKzEwMiwxNCBAQCBwcml2YXRlOgogICAgIG11dGFibGUg
TXV0ZXggbV9sb2NrOwogICAgIFRocmVhZENvbmRpdGlvbiBtX3BsYW5FbnF1ZXVlZDsKICAgICBU
aHJlYWRDb25kaXRpb24gbV9wbGFuQ29tcGlsZWQ7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50aWZp
ZXI+IG1fdGhyZWFkczsKKyAgICAKKyAgICBzdHJ1Y3QgVGhyZWFkRGF0YSB7CisgICAgICAgIFdv
cmtsaXN0KiBtX3dvcmtsaXN0OworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1faWRlbnRpZmll
cjsKKyAgICAgICAgTXV0ZXggbV9yaWdodFRvUnVuOworICAgIH07CisgICAgCisgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWREYXRhPj4gbV90aHJlYWRzOwogICAgIHVuc2lnbmVkIG1f
bnVtYmVyT2ZBY3RpdmVUaHJlYWRzOwogfTsKIApAQCAtMTA1LDYgKzEyMywyMSBAQCBXb3JrbGlz
dCogZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9yTnVsCiAKIFdvcmtsaXN0KiBlbnN1cmVHbG9i
YWxXb3JrbGlzdEZvcihDb21waWxhdGlvbk1vZGUpOwogCisvLyBTaW1wbGlmeSBkb2luZyB0aGlu
Z3MgZm9yIGFsbCB3b3JrbGlzdHMuCitpbmxpbmUgdW5zaWduZWQgbnVtYmVyT2ZXb3JrbGlzdHMo
KSB7IHJldHVybiAyOyB9CitpbmxpbmUgV29ya2xpc3QqIHdvcmtsaXN0Rm9ySW5kZXhPck51bGwo
dW5zaWduZWQgaW5kZXgpCit7CisgICAgc3dpdGNoIChpbmRleCkgeworICAgIGNhc2UgMDoKKyAg
ICAgICAgcmV0dXJuIGV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKTsKKyAgICBjYXNl
IDE6CisgICAgICAgIHJldHVybiBleGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvZGVCbG9ja1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvZGVCbG9ja1NldC5oCShyZXZpc2lvbiAxNjM2MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgLy8gTWFyayBhIHBvaW50ZXIgdGhhdCBtYXkgYmUgYSBDb2RlQmxv
Y2sgdGhhdCBiZWxvbmdzIHRvIHRoZSBzZXQgb2YgREZHCiAgICAgLy8gYmxvY2tzLiBUaGlzIGlz
IGRlZmluZWQgaW4gQ29kZUJsb2NrLmguCisgICAgdm9pZCBtYXJrKENvZGVCbG9jayogY2FuZGlk
YXRlQ29kZUJsb2NrKTsKICAgICB2b2lkIG1hcmsodm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKTsK
ICAgICAKICAgICAvLyBEZWxldGUgYWxsIGNvZGUgYmxvY2tzIHRoYXQgYXJlIG9ubHkgcmVmZXJl
bmNlZCBieSB0aGlzIHNldCAoaS5lLiBvd25lZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAJKHJldmlzaW9uIDE2MzYzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjQsNiArNTI0LDE0IEBAIHZvaWQgSGVhcDo6
bWFya1Jvb3RzKCkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHNjcmF0Y2hCdWZmZXJSb290
cyk7CiAgICAgICAgICAgICB2aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CiAgICAgICAgIH0KKyAg
ICAgICAgeworICAgICAgICAgICAgR0NQSEFTRShWaXNpdERGR1dvcmtsaXN0cyk7CisgICAgICAg
ICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJERkcgV29ya2xpc3RzIik7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKKyAg
ICAgICAgICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OndvcmtsaXN0
Rm9ySW5kZXhPck51bGwoaSkpCisgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LT52aXNpdENo
aWxkcmVuKHZpc2l0b3IsIG1fY29kZUJsb2NrU2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICAgIEdDUEhBU0UoVmlzaXRQcm90ZWN0ZWRP
YmplY3RzKTsKQEAgLTgwMSw5ICs4MDksOSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoKQogICAgIEpB
VkFTQ1JJUFRDT1JFX0dDX0JFR0lOKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vcGVyYXRpb25J
blByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKICAgICAKLSAgICB7Ci0gICAgICAgIFJlY3Vyc2l2
ZUFsbG9jYXRpb25TY29wZSBzY29wZSgqdGhpcyk7Ci0gICAgICAgIG1fdm0tPnByZXBhcmVUb0Rp
c2NhcmRDb2RlKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0
cygpOyBpLS07KSB7CisgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6
d29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKKyAgICAgICAgICAgIHdvcmtsaXN0LT5zdXNwZW5k
QWxsVGhyZWFkcygpOwogICAgIH0KIAogICAgIGJvb2wgaXNGdWxsQ29sbGVjdGlvbiA9IG1fc2hv
dWxkRG9GdWxsQ29sbGVjdGlvbjsKQEAgLTk1MCw2ICs5NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xs
ZWN0KCkKICAgICBpZiAoT3B0aW9uczo6c2hvd09iamVjdFN0YXRpc3RpY3MoKSkKICAgICAgICAg
SGVhcFN0YXRpc3RpY3M6OnNob3dPYmplY3RTdGF0aXN0aWNzKHRoaXMpOwogICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgeworICAgICAg
ICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OndvcmtsaXN0Rm9ySW5kZXhPck51
bGwoaSkpCisgICAgICAgICAgICB3b3JrbGlzdC0+cmVzdW1lQWxsVGhyZWFkcygpOworICAgIH0K
KwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7CiAgICAgICAgIGRvdWJsZSBhZnRlciA9IGN1
cnJlbnRUaW1lTVMoKTsKICAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtcywgIiwg
Y3VycmVudEhlYXBTaXplIC8gMTAyNCwgIiBrYl1cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJ
KHJldmlzaW9uIDE2MzYzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzcsNSArMTM3LDEzIEBAIEpT
T2JqZWN0KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp0ZXJtaW4KICAgICByZXR1cm4gYXNPYmpl
Y3QobV92ZWN0b3JbbV92ZWN0b3Iuc2l6ZSgpIC0gMl0tPnN0b3JlZFByb3RvdHlwZSgpKTsKIH0K
IAordm9pZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRQb2ludGVyKCZtX2ds
b2JhbE9iamVjdCk7CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1faGVh
ZCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV92ZWN0b3Iuc2l6ZSgpOyBpLS07KQorICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcigmbV92ZWN0b3JbaV0pOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMTYzNjM5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01OSw2ICs1OSw5IEBAIHB1YmxpYzoKICAgICBKU09iamVjdCogdGVy
bWluYWxQcm90b3R5cGUoKSBjb25zdDsKICAgICAKICAgICBTdHJ1Y3R1cmUqIGxhc3QoKSBjb25z
dCB7IHJldHVybiBtX3ZlY3Rvci5sYXN0KCk7IH0KKyAgICAKKyAgICB2b2lkIHZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKyAgICAKIHByaXZhdGU6CiAgICAgSlNHbG9iYWxPYmplY3QqIG1f
Z2xvYmFsT2JqZWN0OwogICAgIFN0cnVjdHVyZSogbV9oZWFkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223495</attachid>
            <date>2014-02-07 14:03:42 -0800</date>
            <delta_ts>2014-02-07 14:11:38 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>28266</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzNjQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDE0LTAyLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R0Mgc2hvdWxkIHNhZmVwb2ludCB0aGUgREZHIHdvcmtsaXN0IGluIGEgc21hcnRlciB3YXkgcmF0
aGVyIHRoYW4ganVzdCB3YWl0aW5nIGZvciBldmVyeXRoaW5nIHRvIGNvbXBsZXRlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjgyOTcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFr
ZXMgREZHIHdvcmtsaXN0IHRocmVhZHMgaGF2ZSBhIHJpZ2h0VG9SdW4gbG9jayB0aGF0IGdpdmVz
IHRoZW0gdGhlIGFiaWxpdHkgdG8KKyAgICAgICAgYmUgc2FmZXBvaW50ZWQgYnkgdGhlIEdDIGlu
IG11Y2ggdGhlIHNhbWUgd2F5IGFzIHlvdSdkIGV4cGVjdCBmcm9tIGEgZnVsbHkKKyAgICAgICAg
bXVsdGl0aHJlYWRlZCBWTS4KKyAgICAgICAgCisgICAgICAgIFRoZSBpZGVhIGlzIHRoYXQgdGhl
IHdvcmtsaXN0IHRocmVhZHMncyByb290cyBhcmUgdGhlIERGRzo6UGxhbi4gVGhleSBvbmx5IHRv
dWNoIHRob3NlCisgICAgICAgIHJvb3RzIHdoZW4gaG9sZGluZyB0aGUgcmlnaHRUb1J1biBsb2Nr
LiBUaGV5IGN1cnJlbnRseSBncmFiIHRoYXQgbG9jayB0byBydW4gdGhlCisgICAgICAgIGNvbXBp
bGVyLCBidXQgcmVsaW5xdWlzaCBpdCB3aGVuIGFjY2Vzc2luZyAtIGFuZCB3YWl0aW5nIG9uIC0g
dGhlIHdvcmtsaXN0LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OkNvZGVCbG9ja1NldDo6bWFyayk6CisgICAgICAgICogZGZnL0RGR0NvbXBpbGF0aW9u
S2V5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21waWxhdGlvbktleTo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgICogZGZnL0RGR0NvbXBpbGF0aW9uS2V5Lmg6CisgICAgICAgICogZGZnL0RG
R0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRT
dHJ1Y3R1cmVDaGFpbnM6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVk
U3RydWN0dXJlQ2hhaW5zLmg6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRUcmFuc2l0aW9uczo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oOgorICAgICAgICAqIGRmZy9E
RkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRX
ZWFrUmVmZXJlbmNlczo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRX
ZWFrUmVmZXJlbmNlcy5oOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV3JpdGVCYXJyaWVycy5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdyaXRlQmFycmllcjo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdyaXRlQmFycmllcnM6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV3JpdGVCYXJyaWVycy5oOgorICAgICAgICAq
IGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5oOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6On5Xb3JrbGlzdCk6CisgICAgICAgIChK
U0M6OkRGRzo6V29ya2xpc3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpX
b3JrbGlzdDo6c3VzcGVuZEFsbFRocmVhZHMpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0
OjpyZXN1bWVBbGxUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJ1blRocmVhZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnRocmVhZEZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHV29ya2xpc3QuaDoKKyAgICAgICAgKEpTQzo6REZHOjpudW1iZXJPZldvcmtsaXN0cyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6d29ya2xpc3RGb3JJbmRleE9yTnVsbCk6CisgICAgICAgICogaGVh
cC9Db2RlQmxvY2tTZXQuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlND
OjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAg
ICAgKiBydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1l
L0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06On5WTSk6CisgICAgICAgIChKU0M6OlZNOjpwcmVwYXJlVG9EaXNjYXJk
Q29kZSk6CisKIDIwMTQtMDItMDcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSRUdSRVNTSU9OIChyMTYwNjI4KTogTExpbnQgZG9lcyBub3QgYXBwZWFyIHRvIGhh
bmRsZSBpbXB1cmUgZ2V0IG93biBwcm9wZXJ0eSBwcm9wZXJseQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTYzNjM5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC04OTQsNyArODk0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RlcHBpbmdNb2RlKFN0ZXBw
aW5nTW9kZSk7CiAKICAgICB2b2lkIGNsZWFyRGVidWdnZXJSZXF1ZXN0cygpIHsgbV9kZWJ1Z2dl
clJlcXVlc3RzID0gMDsgfQotCisgICAgCiAgICAgLy8gRklYTUU6IE1ha2UgdGhlc2UgcmVtYWlu
aW5nIG1lbWJlcnMgcHJpdmF0ZS4KIAogICAgIGludCBtX251bUNhbGxlZVJlZ2lzdGVyczsKQEAg
LTEyNzMsOSArMTI3MywyMCBAQCBpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsodm9pZCog
Y2FuCiAgICAgaWYgKGl0ZXIgPT0gbV9zZXQuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICAoKml0ZXIpLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKKyAgICBtYXJrKCppdGVyKTsK
K30KKworaW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKENvZGVCbG9jayogY29kZUJsb2Nr
KQoreworICAgIGlmICghY29kZUJsb2NrKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYg
KGNvZGVCbG9jay0+bV9tYXlCZUV4ZWN1dGluZykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGNvZGVCbG9jay0+bV9tYXlCZUV4ZWN1dGluZyA9IHRydWU7CiAjaWYgRU5BQkxFKEdHQykKLSAg
ICBtX2N1cnJlbnRseUV4ZWN1dGluZy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oY2Fu
ZGlkYXRlQ29kZUJsb2NrKSk7CisgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuYXBwZW5kKGNvZGVC
bG9jayk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21waWxhdGlvbktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21waWxhdGlvbktleS5jcHAJKHJldmlzaW9uIDE2MzYzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tcGlsYXRpb25LZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2
ICsyNyw3IEBACiAjaW5jbHVkZSAiREZHQ29tcGlsYXRpb25LZXkuaCIKIAogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAKQEAgLTQxLDYgKzQyLDExIEBAIHZvaWQgQ29tcGlsYXRpb25LZXk6OmR1bXAoUHJpbnRT
dHJlYW0mIG8KICAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIsICptX3Byb2ZpbGVkQmxvY2ss
ICIgd2l0aCAiLCBtX21vZGUsICIpIik7CiB9CiAKK3ZvaWQgQ29tcGlsYXRpb25LZXk6OnZpc2l0
Q2hpbGRyZW4oQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQoreworICAgIGNvZGVCbG9ja3MubWFy
ayhtX3Byb2ZpbGVkQmxvY2spOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxhdGlvbktleS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGlsYXRpb25LZXkuaAko
cmV2aXNpb24gMTYzNjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxh
dGlvbktleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICszMiw3IEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgQ29kZUJsb2NrU2V0OwogCiBuYW1lc3BhY2UgREZH
IHsKIApAQCAtNzksNiArODAsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBXVEY6OnBhaXJJ
bnRIYXNoKFdURjo6UHRySGFzaDxDb2RlQmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVkQmxvY2spLCBt
X21vZGUpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oQ29kZUJsb2NrU2V0
Jik7CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFp
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFN0cnVjdHVyZUNoYWlucy5jcHAJKHJldmlzaW9uIDE2MzYzOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQyLDYgKzQyLDEyIEBAIGJvb2wgRGVzaXJlZFN0cnVjdHVyZUNoYWluczo6YXJlU3RpbGxWYWwK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBEZXNpcmVkU3RydWN0dXJlQ2hhaW5zOjp2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAodW5zaWduZWQgaSA9
IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV92ZWN0b3JbaV0tPnZpc2l0Q2hpbGRy
ZW4odmlzaXRvcik7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkU3RydWN0dXJlQ2hhaW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmgJKHJldmlzaW9uIDE2MzYzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00Niw2ICs0Niw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgYm9vbCBh
cmVTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisgICAgCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8SW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbj4+IG1fdmVjdG9yOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAJKHJldmlzaW9uIDE2MzYzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTEsNiArNTEsMTMgQEAgdm9pZCBEZXNpcmVkVHJhbnNpdGlvbjo6cmVh
bGx5QWRkKFZNJiB2bQogICAgICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUsIG1fbmV3U3RydWN0dXJl
KSk7CiB9CiAKK3ZvaWQgRGVzaXJlZFRyYW5zaXRpb246OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1f
Y29kZU9yaWdpbk93bmVyKTsKKyAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcigm
bV9vbGRTdHJ1Y3R1cmUpOworICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRQb2ludGVyKCZt
X25ld1N0cnVjdHVyZSk7Cit9CisKIERlc2lyZWRUcmFuc2l0aW9uczo6RGVzaXJlZFRyYW5zaXRp
b25zKCkKIHsKIH0KQEAgLTcwLDYgKzc3LDEyIEBAIHZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjpy
ZWFsbHlBZGQoVk0mIHYKICAgICAgICAgbV90cmFuc2l0aW9uc1tpXS5yZWFsbHlBZGQodm0sIGNv
bW1vbik7CiB9CiAKK3ZvaWQgRGVzaXJlZFRyYW5zaXRpb25zOjp2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RyYW5z
aXRpb25zLnNpemUoKTsgaSsrKQorICAgICAgICBtX3RyYW5zaXRpb25zW2ldLnZpc2l0Q2hpbGRy
ZW4odmlzaXRvcik7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkVHJhbnNpdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCShyZXZpc2lvbiAxNjM2MzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NCw2ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyAKIAogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3Mg
U2NyaXB0RXhlY3V0YWJsZTsKK2NsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3RydWN0dXJlOwog
Y2xhc3MgVk07CiAKQEAgLTQ2LDYgKzQ3LDggQEAgcHVibGljOgogICAgIERlc2lyZWRUcmFuc2l0
aW9uKENvZGVCbG9jayosIFNjcmlwdEV4ZWN1dGFibGUqLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUq
KTsKIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOworICAgIAorICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7CkBAIC02MSw2ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRk
TGF6aWx5KENvZGVCbG9jayosIFNjcmlwdEV4ZWN1dGFibGUqLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1
cmUqKTsKICAgICB2b2lkIHJlYWxseUFkZChWTSYsIENvbW1vbkRhdGEqKTsKKyAgICB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8RGVzaXJl
ZFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAx
NjM2MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJl
bmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25z
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNTYsNiArNTcsMTIg
QEAgdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnJlYWxseUFkZChWTQogICAgIH0KIH0KIAor
dm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9yZWZlcmVuY2VzLnNpemUoKTsgaS0t
OykKKyAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fcmVmZXJlbmNl
c1tpXSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vh
a1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAxNjM2MzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNCw2ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyAKIAogY2xhc3MgQ29kZUJsb2NrOwogY2xh
c3MgSlNDZWxsOworY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERG
RyB7CkBAIC00Nyw2ICs0OCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkTGF6aWx5KEpTQ2Vs
bCopOwogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOworICAgIAorICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXcml0ZUJhcnJpZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXcml0ZUJhcnJpZXJzLmNwcAkocmV2aXNpb24gMTYzNjM5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV3JpdGVCYXJyaWVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJERkdEZXNpcmVkV3JpdGVCYXJyaWVy
cy5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIApAQCAtNjgsNiArNjgsMjQgQEAgdm9pZCBEZXNpcmVkV3JpdGVCYXJyaWVyOjp0
cmlnZ2VyKFZNJiB2bQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3Zv
aWQgRGVzaXJlZFdyaXRlQmFycmllcjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQ29uc3RhbnRUeXBlOiB7Cisg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgYmFycmllciA9IG1fY29kZUJsb2NrLT5jb25z
dGFudHMoKVttX3doaWNoLmluZGV4XTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJhcnJpZXIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIElubGluZUNhbGxG
cmFtZUV4ZWN1dGFibGVUeXBlOiB7CisgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gbV93aGljaC5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIFdyaXRlQmFycmllcjxT
Y3JpcHRFeGVjdXRhYmxlPiYgZXhlY3V0YWJsZSA9IGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJs
ZTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmV4ZWN1dGFibGUpOworICAgICAgICByZXR1cm47
CisgICAgfSB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogRGVzaXJl
ZFdyaXRlQmFycmllcnM6OkRlc2lyZWRXcml0ZUJhcnJpZXJzKCkKIHsKIH0KQEAgLTgyLDYgKzEw
MCwxMiBAQCB2b2lkIERlc2lyZWRXcml0ZUJhcnJpZXJzOjp0cmlnZ2VyKFZNJiB2CiAgICAgICAg
IG1fYmFycmllcnNbaV0udHJpZ2dlcih2bSk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdyaXRlQmFycmll
cnM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fYmFycmllcnMuc2l6ZSgpOyBpKyspCisgICAgICAgIG1fYmFycmll
cnNbaV0udmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXcml0ZUJhcnJpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV3JpdGVCYXJyaWVycy5oCShyZXZpc2lvbiAx
NjM2MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXcml0ZUJhcnJp
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpTRnVuY3Rpb247CiBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworY2xhc3MgU2xvdFZpc2l0
b3I7CiBjbGFzcyBWTTsKIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWU7CiAKQEAgLTUwLDYgKzUxLDgg
QEAgcHVibGljOgogICAgIERlc2lyZWRXcml0ZUJhcnJpZXIoVHlwZSwgQ29kZUJsb2NrKiwgSW5s
aW5lQ2FsbEZyYW1lKiwgSlNDZWxsKiBvd25lcik7CiAKICAgICB2b2lkIHRyaWdnZXIoVk0mKTsK
KyAgICAKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToK
ICAgICBKU0NlbGwqIG1fb3duZXI7CkBAIC03OCw2ICs4MSw4IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICB2b2lkIHRyaWdnZXIoVk0mKTsKKyAgICAKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKICAgICBWZWN0b3I8RGVzaXJlZFdyaXRlQmFycmllcj4g
bV9iYXJyaWVyczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2
aXNpb24gMTYzNjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDA0LDYgKzQwNCwyMCBAQCBDb21waWxhdGlvbktleSBQbGFuOjpr
ZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmFsdGVybmF0aXZlKCks
IG1vZGUpOwogfQogCit2b2lkIFBsYW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
dXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgaS0tOykKKyAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZFZhbHVlKCZtdXN0SGFuZGxlVmFsdWVzW2ldKTsKKyAgICAKKyAgICBjb2RlQmxvY2tz
Lm1hcmsoY29kZUJsb2NrLmdldCgpKTsKKyAgICBjb2RlQmxvY2tzLm1hcmsocHJvZmlsZWRERkdD
b2RlQmxvY2suZ2V0KCkpOworICAgIAorICAgIGNoYWlucy52aXNpdENoaWxkcmVuKHZpc2l0b3Ip
OworICAgIHdlYWtSZWZlcmVuY2VzLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgd3JpdGVC
YXJyaWVycy52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgIHRyYW5zaXRpb25zLnZpc2l0Q2hp
bGRyZW4odmlzaXRvcik7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJ
KHJldmlzaW9uIDE2MzYzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgQ29kZUJsb2NrOworY2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgU2xvdFZpc2l0b3I7CiAK
IG5hbWVzcGFjZSBERkcgewogCkBAIC02OSw2ICs3MSw4IEBAIHN0cnVjdCBQbGFuIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGUKICAgICAKICAgICBDb21waWxhdGlvbktleSBrZXkoKTsKICAg
ICAKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImLCBDb2RlQmxvY2tTZXQmKTsK
KyAgICAKICAgICBWTSYgdm07CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAg
IFJlZlB0cjxDb2RlQmxvY2s+IHByb2ZpbGVkREZHQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDE2MzYzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
OSwxNSArNDksMTkgQEAgV29ya2xpc3Q6On5Xb3JrbGlzdCgpCiAgICAgICAgIG1fcGxhbkVucXVl
dWVkLmJyb2FkY2FzdCgpOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RocmVhZHMu
c2l6ZSgpOyBpLS07KQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZHNb
aV0pOworICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZHNbaV0tPm1faWRl
bnRpZmllcik7CiAgICAgQVNTRVJUKCFtX251bWJlck9mQWN0aXZlVGhyZWFkcyk7CiB9CiAKIHZv
aWQgV29ya2xpc3Q6OmZpbmlzaENyZWF0aW9uKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcykKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZlRocmVhZHMpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IG51bWJlck9mVGhyZWFkczsgaS0tOykKLSAgICAgICAgbV90aHJlYWRzLmFwcGVuZChjcmVh
dGVUaHJlYWQodGhyZWFkRnVuY3Rpb24sIHRoaXMsICJKU0MgQ29tcGlsYXRpb24gVGhyZWFkIikp
OworICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mVGhyZWFkczsgaS0tOykgeworICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRGF0YT4gZGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8VGhy
ZWFkRGF0YT4oKTsKKyAgICAgICAgZGF0YS0+bV93b3JrbGlzdCA9IHRoaXM7CisgICAgICAgIGRh
dGEtPm1faWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCh0aHJlYWRGdW5jdGlvbiwgZGF0YS5nZXQo
KSwgIkpTQyBDb21waWxhdGlvbiBUaHJlYWQiKTsKKyAgICAgICAgbV90aHJlYWRzLmFwcGVuZChz
dGQ6Om1vdmUoZGF0YSkpOworICAgIH0KIH0KIAogUGFzc1JlZlB0cjxXb3JrbGlzdD4gV29ya2xp
c3Q6OmNyZWF0ZSh1bnNpZ25lZCBudW1iZXJPZlRocmVhZHMpCkBAIC0xODgsNiArMTkyLDI2IEBA
IHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFs
bFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9CiAKK3ZvaWQgV29ya2xpc3Q6OnN1c3BlbmRBbGxUaHJl
YWRzKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RocmVhZHMuc2l6ZSgpOyBpLS07KQor
ICAgICAgICBtX3RocmVhZHNbaV0tPm1fcmlnaHRUb1J1bi5sb2NrKCk7Cit9CisKK3ZvaWQgV29y
a2xpc3Q6OnJlc3VtZUFsbFRocmVhZHMoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhy
ZWFkcy5zaXplKCk7IGktLTspCisgICAgICAgIG1fdGhyZWFkc1tpXS0+bV9yaWdodFRvUnVuLnVu
bG9jaygpOworfQorCit2b2lkIFdvcmtsaXN0Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9ja3MpCit7CisgICAgZm9yIChQbGFuTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsr
aXRlcikgeworICAgICAgICBpdGVyLT5rZXkudmlzaXRDaGlsZHJlbihjb2RlQmxvY2tzKTsKKyAg
ICAgICAgaXRlci0+dmFsdWUtPnZpc2l0Q2hpbGRyZW4odmlzaXRvciwgY29kZUJsb2Nrcyk7Cisg
ICAgfQorfQorCiBzaXplX3QgV29ya2xpc3Q6OnF1ZXVlTGVuZ3RoKCkKIHsKICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTIwOCw3ICsyMzIsNyBAQCB2b2lkIFdvcmtsaXN0Ojpk
dW1wKGNvbnN0IE11dGV4TG9ja2VyJiwgCiAgICAgICAgICIsIE51bSBBY3RpdmUgVGhyZWFkcyA9
ICIsIG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzLCAiLyIsIG1fdGhyZWFkcy5zaXplKCksICJdIik7
CiB9CiAKLXZvaWQgV29ya2xpc3Q6OnJ1blRocmVhZCgpCit2b2lkIFdvcmtsaXN0OjpydW5UaHJl
YWQoVGhyZWFkRGF0YSogZGF0YSkKIHsKICAgICBDb21waWxhdGlvblNjb3BlIGNvbXBpbGF0aW9u
U2NvcGU7CiAgICAgCkBAIC0yMjMsNiArMjQ3LDcgQEAgdm9pZCBXb3JrbGlzdDo6cnVuVGhyZWFk
KCkKICAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICAgICAg
d2hpbGUgKG1fcXVldWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIG1fcGxhbkVucXVldWVk
LndhaXQobV9sb2NrKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgcGxhbiA9IG1fcXVldWUu
dGFrZUZpcnN0KCk7CiAgICAgICAgICAgICBpZiAocGxhbikKICAgICAgICAgICAgICAgICBtX251
bWJlck9mQWN0aXZlVGhyZWFkcysrOwpAQCAtMjM0LDEwICsyNTksMTQgQEAgdm9pZCBXb3JrbGlz
dDo6cnVuVGhyZWFkKCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpCi0gICAgICAg
ICAgICBkYXRhTG9nKCp0aGlzLCAiOiBDb21waWxpbmcgIiwgcGxhbi0+a2V5KCksICIgYXN5bmNo
cm9ub3VzbHlcbiIpOworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
ZGF0YS0+bV9yaWdodFRvUnVuKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCp0aGlz
LCAiOiBDb21waWxpbmcgIiwgcGxhbi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHlcbiIpOwogICAg
ICAgICAKLSAgICAgICAgcGxhbi0+Y29tcGlsZUluVGhyZWFkKGxvbmdMaXZlZFN0YXRlKTsKKyAg
ICAgICAgICAgIHBsYW4tPmNvbXBpbGVJblRocmVhZChsb25nTGl2ZWRTdGF0ZSk7CisgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHsKICAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X2xvY2spOwpAQCAtMjU4LDcgKzI4Nyw4IEBAIHZvaWQgV29ya2xpc3Q6OnJ1blRocmVhZCgpCiAK
IHZvaWQgV29ya2xpc3Q6OnRocmVhZEZ1bmN0aW9uKHZvaWQqIGFyZ3VtZW50KQogewotICAgIHN0
YXRpY19jYXN0PFdvcmtsaXN0Kj4oYXJndW1lbnQpLT5ydW5UaHJlYWQoKTsKKyAgICBUaHJlYWRE
YXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkRGF0YSo+KGFyZ3VtZW50KTsKKyAgICBkYXRh
LT5tX3dvcmtsaXN0LT5ydW5UaHJlYWQoZGF0YSk7CiB9CiAKIHN0YXRpYyBXb3JrbGlzdCogdGhl
R2xvYmFsREZHV29ya2xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5oCShyZXZpc2lvbiAxNjM2MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDEyIEBACiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCi1u
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
Q29kZUJsb2NrU2V0OworY2xhc3MgU2xvdFZpc2l0b3I7CisKK25hbWVzcGFjZSBERkcgewogCiBj
bGFzcyBXb3JrbGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtsaXN0PiB7CiBwdWJsaWM6CkBA
IC02MSwxMyArNjYsMjUgQEAgcHVibGljOgogICAgIFN0YXRlIGNvbXBpbGF0aW9uU3RhdGUoQ29t
cGlsYXRpb25LZXkpOwogICAgIAogICAgIHNpemVfdCBxdWV1ZUxlbmd0aCgpOworICAgIAorICAg
IHZvaWQgc3VzcGVuZEFsbFRocmVhZHMoKTsKKyAgICB2b2lkIHJlc3VtZUFsbFRocmVhZHMoKTsK
KyAgICAKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImLCBDb2RlQmxvY2tTZXQm
KTsgLy8gT25seSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxs
IHRocmVhZHMuCisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAg
CiBwcml2YXRlOgorICAgIHN0cnVjdCBUaHJlYWREYXRhIHsKKyAgICAgICAgV29ya2xpc3QqIG1f
d29ya2xpc3Q7CisgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgICAg
ICBNdXRleCBtX3JpZ2h0VG9SdW47CisgICAgfTsKKyAgICAKICAgICBXb3JrbGlzdCgpOwogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24odW5zaWduZWQgbnVtYmVyT2ZUaHJlYWRzKTsKICAgICAKLSAg
ICB2b2lkIHJ1blRocmVhZCgpOworICAgIHZvaWQgcnVuVGhyZWFkKFRocmVhZERhdGEqKTsKICAg
ICBzdGF0aWMgdm9pZCB0aHJlYWRGdW5jdGlvbih2b2lkKiBhcmd1bWVudCk7CiAgICAgCiAgICAg
dm9pZCByZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBWZWN0b3I8UmVmUHRyPFBsYW4+LCA4
PiYpOwpAQCAtOTEsNyArMTA4LDggQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIE11dGV4IG1fbG9j
azsKICAgICBUaHJlYWRDb25kaXRpb24gbV9wbGFuRW5xdWV1ZWQ7CiAgICAgVGhyZWFkQ29uZGl0
aW9uIG1fcGxhbkNvbXBpbGVkOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBtX3RocmVh
ZHM7CisgICAgCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWREYXRhPj4gbV90aHJl
YWRzOwogICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzOwogfTsKIApAQCAtMTA1
LDYgKzEyMywyMSBAQCBXb3JrbGlzdCogZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9yTnVsCiAK
IFdvcmtsaXN0KiBlbnN1cmVHbG9iYWxXb3JrbGlzdEZvcihDb21waWxhdGlvbk1vZGUpOwogCisv
LyBTaW1wbGlmeSBkb2luZyB0aGluZ3MgZm9yIGFsbCB3b3JrbGlzdHMuCitpbmxpbmUgdW5zaWdu
ZWQgbnVtYmVyT2ZXb3JrbGlzdHMoKSB7IHJldHVybiAyOyB9CitpbmxpbmUgV29ya2xpc3QqIHdv
cmtsaXN0Rm9ySW5kZXhPck51bGwodW5zaWduZWQgaW5kZXgpCit7CisgICAgc3dpdGNoIChpbmRl
eCkgeworICAgIGNhc2UgMDoKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nR2xvYmFsREZHV29ya2xp
c3RPck51bGwoKTsKKyAgICBjYXNlIDE6CisgICAgICAgIHJldHVybiBleGlzdGluZ0dsb2JhbEZU
TFdvcmtsaXN0T3JOdWxsKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCShyZXZpc2lvbiAxNjM2MzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gTWFyayBhIHBvaW50ZXIg
dGhhdCBtYXkgYmUgYSBDb2RlQmxvY2sgdGhhdCBiZWxvbmdzIHRvIHRoZSBzZXQgb2YgREZHCiAg
ICAgLy8gYmxvY2tzLiBUaGlzIGlzIGRlZmluZWQgaW4gQ29kZUJsb2NrLmguCisgICAgdm9pZCBt
YXJrKENvZGVCbG9jayogY2FuZGlkYXRlQ29kZUJsb2NrKTsKICAgICB2b2lkIG1hcmsodm9pZCog
Y2FuZGlkYXRlQ29kZUJsb2NrKTsKICAgICAKICAgICAvLyBEZWxldGUgYWxsIGNvZGUgYmxvY2tz
IHRoYXQgYXJlIG9ubHkgcmVmZXJlbmNlZCBieSB0aGlzIHNldCAoaS5lLiBvd25lZApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE2MzYzOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjQsNiAr
NTI0LDE0IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKHNjcmF0Y2hCdWZmZXJSb290cyk7CiAgICAgICAgICAgICB2aXNpdG9yLmRvbmF0ZUFuZERy
YWluKCk7CiAgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgR0NQSEFTRShWaXNpdERG
R1dvcmtsaXN0cyk7CisgICAgICAgICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJERkcgV29y
a2xpc3RzIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29y
a2xpc3RzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29y
a2xpc3QgPSBERkc6OndvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCisgICAgICAgICAgICAgICAg
ICAgIHdvcmtsaXN0LT52aXNpdENoaWxkcmVuKHZpc2l0b3IsIG1fY29kZUJsb2Nrcyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KICNlbmRpZgogICAgICAgICB7CiAgICAgICAgICAgICBHQ1BI
QVNFKFZpc2l0UHJvdGVjdGVkT2JqZWN0cyk7CkBAIC04MDEsMTAgKzgwOSwxMiBAQCB2b2lkIEhl
YXA6OmNvbGxlY3QoKQogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0JFR0lOKCk7CiAgICAgUkVMRUFT
RV9BU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKICAgICAKLSAg
ICB7Ci0gICAgICAgIFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZSBzY29wZSgqdGhpcyk7Ci0gICAg
ICAgIG1fdm0tPnByZXBhcmVUb0Rpc2NhcmRDb2RlKCk7CisjaWYgRU5BQkxFKERGR19KSVQpCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7Cisg
ICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6d29ya2xpc3RGb3JJbmRl
eE9yTnVsbChpKSkKKyAgICAgICAgICAgIHdvcmtsaXN0LT5zdXNwZW5kQWxsVGhyZWFkcygpOwog
ICAgIH0KKyNlbmRpZgogCiAgICAgYm9vbCBpc0Z1bGxDb2xsZWN0aW9uID0gbV9zaG91bGREb0Z1
bGxDb2xsZWN0aW9uOwogICAgIGlmIChpc0Z1bGxDb2xsZWN0aW9uKSB7CkBAIC05NTAsNiArOTYw
LDEzIEBAIHZvaWQgSGVhcDo6Y29sbGVjdCgpCiAgICAgaWYgKE9wdGlvbnM6OnNob3dPYmplY3RT
dGF0aXN0aWNzKCkpCiAgICAgICAgIEhlYXBTdGF0aXN0aWNzOjpzaG93T2JqZWN0U3RhdGlzdGlj
cyh0aGlzKTsKICAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKKyAgICAgICAgaWYgKERGRzo6V29y
a2xpc3QqIHdvcmtsaXN0ID0gREZHOjp3b3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQorICAgICAg
ICAgICAgd29ya2xpc3QtPnJlc3VtZUFsbFRocmVhZHMoKTsKKyAgICB9CisjZW5kaWYKKwogICAg
IGlmIChPcHRpb25zOjpsb2dHQygpKSB7CiAgICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRU
aW1lTVMoKTsKICAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtcywgIiwgY3VycmVu
dEhlYXBTaXplIC8gMTAyNCwgIiBrYl1cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlz
aW9uIDE2MzYzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzcsNSArMTM3LDEzIEBAIEpTT2JqZWN0
KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp0ZXJtaW4KICAgICByZXR1cm4gYXNPYmplY3QobV92
ZWN0b3JbbV92ZWN0b3Iuc2l6ZSgpIC0gMl0tPnN0b3JlZFByb3RvdHlwZSgpKTsKIH0KIAordm9p
ZCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRQb2ludGVyKCZtX2dsb2JhbE9i
amVjdCk7CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1faGVhZCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV92ZWN0b3Iuc2l6ZSgpOyBpLS07KQorICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcigmbV92ZWN0b3JbaV0pOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMTYzNjM5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01OSw2ICs1OSw5IEBAIHB1YmxpYzoKICAgICBKU09iamVjdCogdGVybWluYWxQ
cm90b3R5cGUoKSBjb25zdDsKICAgICAKICAgICBTdHJ1Y3R1cmUqIGxhc3QoKSBjb25zdCB7IHJl
dHVybiBtX3ZlY3Rvci5sYXN0KCk7IH0KKyAgICAKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKyAgICAKIHByaXZhdGU6CiAgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFs
T2JqZWN0OwogICAgIFN0cnVjdHVyZSogbV9oZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTYzNjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsMTYgKzMxNyw2IEBAIFZNOjpW
TShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBtX3R5cGVkQXJyYXlDb250
cm9sbGVyID0gYWRvcHRSZWYobmV3IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkpOwogfQog
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi1zdGF0aWMgdm9pZCBjbGVhbldvcmtsaXN0KFZNJiB2bSwg
REZHOjpXb3JrbGlzdCogd29ya2xpc3QpCi17Ci0gICAgaWYgKCF3b3JrbGlzdCkKLSAgICAgICAg
cmV0dXJuOwotICAgIHdvcmtsaXN0LT53YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkodm0p
OwotICAgIHdvcmtsaXN0LT5yZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwotfQotI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQotCiBWTTo6flZNKCkKIHsKICAgICAvLyBOZXZlciBHQywgZXZl
ciBhZ2Fpbi4KQEAgLTMzNSw4ICszMjUsMTIgQEAgVk06On5WTSgpCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgLy8gTWFrZSBzdXJlIGNvbmN1cnJlbnQgY29tcGlsYXRpb25zIGFyZSBkb25lLCBi
dXQgZG9uJ3QgaW5zdGFsbCB0aGVtLCBzaW5jZSB0aGVyZSBpcwogICAgIC8vIG5vIHBvaW50IHRv
IGRvaW5nIHNvLgotICAgIGNsZWFuV29ya2xpc3QoKnRoaXMsIERGRzo6ZXhpc3RpbmdHbG9iYWxE
RkdXb3JrbGlzdE9yTnVsbCgpKTsKLSAgICBjbGVhbldvcmtsaXN0KCp0aGlzLCBERkc6OmV4aXN0
aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gREZH
OjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CisgICAgICAgIGlmIChERkc6OldvcmtsaXN0
KiB3b3JrbGlzdCA9IERGRzo6d29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkgeworICAgICAgICAg
ICAgd29ya2xpc3QtPndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeSgqdGhpcyk7CisgICAg
ICAgICAgICB3b3JrbGlzdC0+cmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKCp0aGlzKTsKKyAgICAg
ICAgfQorICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKICAgICAKICAgICAvLyBDbGVh
ciB0aGlzIGZpcnN0IHRvIGVuc3VyZSB0aGF0IG5vYm9keSB0cmllcyB0byByZW1vdmUgdGhlbXNl
bHZlcyBmcm9tIGl0LgpAQCAtNTA5LDIwICs1MDMsMTMgQEAgdm9pZCBWTTo6c3RvcFNhbXBsaW5n
KCkKICAgICBpbnRlcnByZXRlci0+c3RvcFNhbXBsaW5nKCk7CiB9CiAKLSNpZiBFTkFCTEUoREZH
X0pJVCkKLXN0YXRpYyB2b2lkIHByZXBhcmVUb0Rpc2NhcmRDb2RlRm9yKFZNJiB2bSwgREZHOjpX
b3JrbGlzdCogd29ya2xpc3QpCi17Ci0gICAgaWYgKCF3b3JrbGlzdCkKLSAgICAgICAgcmV0dXJu
OwotICAgIHdvcmtsaXN0LT5jb21wbGV0ZUFsbFBsYW5zRm9yVk0odm0pOwotfQotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQotCiB2b2lkIFZNOjpwcmVwYXJlVG9EaXNjYXJkQ29kZSgpCiB7CiAj
aWYgRU5BQkxFKERGR19KSVQpCi0gICAgcHJlcGFyZVRvRGlzY2FyZENvZGVGb3IoKnRoaXMsIERG
Rzo6ZXhpc3RpbmdHbG9iYWxERkdXb3JrbGlzdE9yTnVsbCgpKTsKLSAgICBwcmVwYXJlVG9EaXNj
YXJkQ29kZUZvcigqdGhpcywgREZHOjpleGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykg
eworICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OndvcmtsaXN0Rm9y
SW5kZXhPck51bGwoaSkpCisgICAgICAgICAgICB3b3JrbGlzdC0+Y29tcGxldGVBbGxQbGFuc0Zv
clZNKCp0aGlzKTsKKyAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAK
</data>
<flag name="review"
          id="247534"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>