<?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>28943</bug_id>
          
          <creation_ts>2009-09-03 05:29:57 -0700</creation_ts>
          <short_desc>Logging fast* allocated heap usage</short_desc>
          <delta_ts>2009-10-08 03:47:14 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>0</everconfirmed>
          <reporter name="Balazs Kelemen">kbalazs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mrowe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>144483</commentid>
    <comment_count>0</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2009-09-03 05:29:57 -0700</bug_when>
    <thetext>I have implemented the possibility to logging all allocations and deallocations that goes through fast* allocation functions. This could help us profiling heap usage. The implementation is restricted to linux/qt at the time,
because I used glibc&apos;s backtrace function to programmatically create backtraces, and I extended only the qt build system with the option. You can build it as &quot;build-webkit --qt --debug CONFIG+=memlogger&quot; (building in release makes no sense since than the backtraces would not be informative). I implemented a dbus listener to create the output and a new tool -MemLogDumper- what can be used to trigger it. It has the advantage that you can create it by running any of the binaries (QtLauncher/jsc/DumpRenderTree). I am gladly welcome all suggestions about the stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144484</commentid>
    <comment_count>1</comment_count>
      <attachid>38982</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2009-09-03 05:31:05 -0700</bug_when>
    <thetext>Created attachment 38982
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144486</commentid>
    <comment_count>2</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2009-09-03 05:47:37 -0700</bug_when>
    <thetext>I would note that I used stl containers because those supports custom allocators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144670</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-09-03 19:23:28 -0700</bug_when>
    <thetext>The purpose of this code isn&apos;t particularly clear to me.  The comments say that it is only useful in debug builds, but debug builds of WebKit use the system memory allocator rather than TCMalloc.  This means that the usual memory profiling tools can easily be used to analyze memory usage.  That seems like a much more effective route to take.

I&apos;d also recommend that you take a look at the WebKit coding style guidelines: &lt;http://webkit.org/coding/coding-style.html&gt;.  Of particular note are the lack of license headers on newly-added files, naming conventions, and brace placement.

The change to the fastMalloc function seems incorrect, as the early-return bypasses the &quot;if (!result) CRASH;&quot; when ENABLE(FAST_MALLOC_MATCH_VALIDATION) is true.

It&apos;s not clear to me what this has to do with DBus or why there is DBus-specific code in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144818</commentid>
    <comment_count>4</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2009-09-04 09:03:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; The purpose of this code isn&apos;t particularly clear to me.  The comments say that
&gt; it is only useful in debug builds, but debug builds of WebKit use the system
&gt; memory allocator rather than TCMalloc.  This means that the usual memory
&gt; profiling tools can easily be used to analyze memory usage.  That seems like a
&gt; much more effective route to take.
&gt; 

I think doing the profiling in the code directly (not with external tools)
has the advantage that we can better trust to the results. Btw, if you - the core developers - does not agree with that, then this patch is not valid.

&gt; I&apos;d also recommend that you take a look at the WebKit coding style guidelines:
&gt; &lt;http://webkit.org/coding/coding-style.html&gt;.  Of particular note are the lack
&gt; of license headers on newly-added files, naming conventions, and brace
&gt; placement.

This patch would be an initial version for starting konversation about the stuff, so I did not deal with copyright or changelog.

&gt; 
&gt; The change to the fastMalloc function seems incorrect, as the early-return
&gt; bypasses the &quot;if (!result) CRASH;&quot; when ENABLE(FAST_MALLOC_MATCH_VALIDATION) is
&gt; true.

Rigth, it was a mistake.

&gt; 
&gt; It&apos;s not clear to me what this has to do with DBus or why there is
&gt; DBus-specific code in this patch.

I used DBus to send a message to the MemLogger object what forces it to generating a memory dump.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38982</attachid>
            <date>2009-09-03 05:31:05 -0700</date>
            <delta_ts>2009-09-03 19:23:40 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>03.diff</filename>
            <type>text/plain</type>
            <size>28807</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaSBiL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaQppbmRleCAwZjNmOTA5Li5kOGRiZjQ2IDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkKKysrIGIvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUucHJpCkBAIC0yMjAsNiArMjIwLDE5IEBAIFNPVVJDRVMgKz0gXAog
ICAgIHd0Zi9UaHJlYWRpbmcuY3BwIFwKICAgICB3dGYvcXQvTWFpblRocmVhZFF0LmNwcAogCitD
T05GSUcobWVtbG9nZ2VyKSB7CisgICAgUVQgKz0gZGJ1cworICAgIEhFQURFUlMgKz0gd3RmL01l
bUxvZ0FsbG9jYXRpb25CYWNrdHJhY2UuaCBcCisgICAgICAgICAgICAgICB3dGYvTWVtTG9nREJ1
c0xpc3RlbmVyLmggXAorICAgICAgICAgICAgICAgd3RmL01lbUxvZ2dlci5oIFwKKyAgICAgICAg
ICAgICAgIHd0Zi9xdC9NZW1Mb2dQbGF0Zm9ybURCdXNMaXN0ZW5lci5oCisKKyAgICBTT1VSQ0VT
ICs9IHd0Zi9NZW1Mb2dBbGxvY2F0aW9uQmFja3RyYWNlLmNwcCBcCisgICAgICAgICAgICAgICB3
dGYvTWVtTG9nZ2VyLmNwcCBcCisgICAgICAgICAgICAgICB3dGYvcXQvTWVtTG9nREJ1c0xpc3Rl
bmVyUXQuY3BwIFwKKyAgICAgICAgICAgICAgIHd0Zi9xdC9NZW1Mb2dQbGF0Zm9ybURCdXNMaXN0
ZW5lclF0LmNwcAorfQorCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NJTkdMRV9USFJFQURF
RD0xKSB7CiAgICAgU09VUkNFUyArPSB3dGYvcXQvVGhyZWFkaW5nUXQuY3BwCiB9IGVsc2Ugewpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvanNjLnBybyBiL0phdmFTY3JpcHRDb3JlL2pzYy5w
cm8KaW5kZXggYmE4ODBmZi4uMTQyMjcwMCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvanNj
LnBybworKysgYi9KYXZhU2NyaXB0Q29yZS9qc2MucHJvCkBAIC0yNyw1ICsyNyw5IEBAIGxlc3NU
aGFuKFFUX01JTk9SX1ZFUlNJT04sIDQpIHsKICAgICBERUZJTkVTICs9IFFUX0JFR0lOX05BTUVT
UEFDRT0iIiBRVF9FTkRfTkFNRVNQQUNFPSIiCiB9CiAKK0NPTkZJRyhtZW1sb2dnZXIpIHsKKyAg
ICBRVCArPSBkYnVzCit9CisKICotZysrKjpRTUFLRV9DWFhGTEFHU19SRUxFQVNFIC09IC1PMgog
Ki1nKysqOlFNQUtFX0NYWEZMQUdTX1JFTEVBU0UgKz0gLU8zCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS93dGYvRmFzdE1hbGxvYy5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxv
Yy5jcHAKaW5kZXggYWZiMDIyMC4uNWE3NDcwYSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
d3RmL0Zhc3RNYWxsb2MuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmNw
cApAQCAtMTAzLDYgKzEwMywyMyBAQAogI2RlZmluZSBVU0VfQkFDS0dST1VORF9USFJFQURfVE9f
U0NBVkVOR0VfTUVNT1JZIDEKICNlbmRpZgogCisjaWYgRU5BQkxFKEZBU1RfTUFMTE9DX0xPR0dJ
TkcpCisKKyNpbmNsdWRlICJNZW1Mb2dnZXIuaCIKKyNpbmNsdWRlIDxleGVjaW5mby5oPgorCisj
ZGVmaW5lIGxvZ0FsbG9jKHB0ciwgYWxsb2NTaXplKSBcCisgICAgZG8geyBcCisgICAgICAgIHVu
c2lnbmVkIGJhY2t0cmFjZURlcHRoID0gTWVtTG9nOjpNZW1Mb2dnZXI6Omluc3RhbmNlKCktPmJh
Y2t0cmFjZURlcHRoKCk7IFwKKyAgICAgICAgdm9pZCogc3ltYm9sc1tiYWNrdHJhY2VEZXB0aF07
IFwKKyAgICAgICAgaW50IGJ0U2l6ZSA9IGJhY2t0cmFjZShzeW1ib2xzLCBiYWNrdHJhY2VEZXB0
aCk7IFwKKyAgICAgICAgY2hhcioqIHN0ckFycmF5ID0gYmFja3RyYWNlX3N5bWJvbHMoc3ltYm9s
cywgYnRTaXplKTsgXAorICAgICAgICBNZW1Mb2c6Ok1lbUxvZ2dlcjo6aW5zdGFuY2UoKS0+bG9n
QWxsb2MocHRyLCBhbGxvY1NpemUsIHN0ckFycmF5LCBidFNpemUpOyBcCisgICAgICAgIGZyZWUo
c3RyQXJyYXkpOyBcCisgICAgfSB3aGlsZSgwKQorCisjZW5kaWYKKwogI2lmbmRlZiBOREVCVUcK
IG5hbWVzcGFjZSBXVEYgewogCkBAIC0yMTQsMTEgKzIzMSwxNSBAQCBUcnlNYWxsb2NSZXR1cm5W
YWx1ZSB0cnlGYXN0TWFsbG9jKHNpemVfdCBuKQogCiAgICAgKnN0YXRpY19jYXN0PEFsbG9jQWxp
Z25tZW50SW50ZWdlcio+KHJlc3VsdCkgPSBJbnRlcm5hbDo6QWxsb2NUeXBlTWFsbG9jOwogICAg
IHJlc3VsdCA9IHN0YXRpY19jYXN0PEFsbG9jQWxpZ25tZW50SW50ZWdlcio+KHJlc3VsdCkgKyAx
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKICNlbHNlCi0gICAgcmV0dXJuIG1hbGxvYyhuKTsKKyAg
ICB2b2lkKiByZXN1bHQgPSBtYWxsb2Mobik7CisjZW5kaWYKKworI2lmIEVOQUJMRShGQVNUX01B
TExPQ19MT0dHSU5HKQorICAgIGxvZ0FsbG9jKHJlc3VsdCwgbik7CiAjZW5kaWYKKworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIHZvaWQqIGZhc3RNYWxsb2Moc2l6ZV90IG4pIApAQCAtMjI5LDEy
ICsyNTAsMTggQEAgdm9pZCogZmFzdE1hbGxvYyhzaXplX3QgbikKICAgICBUcnlNYWxsb2NSZXR1
cm5WYWx1ZSByZXR1cm5WYWx1ZSA9IHRyeUZhc3RNYWxsb2Mobik7CiAgICAgdm9pZCogcmVzdWx0
OwogICAgIHJldHVyblZhbHVlLmdldFZhbHVlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
ICNlbHNlCiAgICAgdm9pZCogcmVzdWx0ID0gbWFsbG9jKG4pOwogI2VuZGlmCiAKICAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgQ1JBU0goKTsKKworI2lmIEVOQUJMRShGQVNUX01BTExPQ19MT0dH
SU5HKSAmJiAhRU5BQkxFKEZBU1RfTUFMTE9DX01BVENIX1ZBTElEQVRJT04pCisgICAgbG9nQWxs
b2MocmVzdWx0LCBuKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjU1
LDEwICsyODIsMTUgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplX3Qg
bl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSkKICAgICBtZW1zZXQocmVzdWx0LCAwLCB0
b3RhbEJ5dGVzKTsKICAgICAqc3RhdGljX2Nhc3Q8QWxsb2NBbGlnbm1lbnRJbnRlZ2VyKj4ocmVz
dWx0KSA9IEludGVybmFsOjpBbGxvY1R5cGVNYWxsb2M7CiAgICAgcmVzdWx0ID0gc3RhdGljX2Nh
c3Q8QWxsb2NBbGlnbm1lbnRJbnRlZ2VyKj4ocmVzdWx0KSArIDE7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKICNlbHNlCi0gICAgcmV0dXJuIGNhbGxvYyhuX2VsZW1lbnRzLCBlbGVtZW50X3NpemUpOwor
ICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYyhuX2VsZW1lbnRzLCBlbGVtZW50X3NpemUpOwogI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoRkFTVF9NQUxMT0NfTE9HR0lORykKKyAgICBsb2dBbGxvYyhyZXN1
bHQsIG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemUpOworI2VuZGlmCisKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiB2b2lkKiBmYXN0Q2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxl
bWVudF9zaXplKQpAQCAtMjc1LDYgKzMwNywxMSBAQCB2b2lkKiBmYXN0Q2FsbG9jKHNpemVfdCBu
X2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKQogCiAgICAgaWYgKCFyZXN1bHQpCiAgICAg
ICAgIENSQVNIKCk7CisKKyNpZiBFTkFCTEUoRkFTVF9NQUxMT0NfTE9HR0lORykgJiYgIUVOQUJM
RShGQVNUX01BTExPQ19NQVRDSF9WQUxJREFUSU9OKQorICAgIGxvZ0FsbG9jKHJlc3VsdCwgbl9l
bGVtZW50cyAqIGVsZW1lbnRfc2l6ZSk7CisjZW5kaWYKKwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTI5Myw2ICszMzAsMTAgQEAgdm9pZCBmYXN0RnJlZSh2b2lkKiBwKQogI2Vsc2UKICAg
ICBmcmVlKHApOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoRkFTVF9NQUxMT0NfTE9HR0lORykKKyAg
ICBNZW1Mb2c6Ok1lbUxvZ2dlcjo6aW5zdGFuY2UoKS0+bG9nRnJlZShwKTsKKyNlbmRpZgogfQog
CiBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0UmVhbGxvYyh2b2lkKiBwLCBzaXplX3QgbikK
QEAgLTMxMywxMyArMzU0LDE4IEBAIFRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RSZWFsbG9j
KHZvaWQqIHAsIHNpemVfdCBuKQogICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgYmUgbmVlZGVk
IGJlY2F1c2UgdGhlIHZhbHVlIGlzIGFscmVhZHkgdGhlcmU6CiAgICAgICAgIC8vICpzdGF0aWNf
Y2FzdDxBbGxvY0FsaWdubWVudEludGVnZXIqPihyZXN1bHQpID0gSW50ZXJuYWw6OkFsbG9jVHlw
ZU1hbGxvYzsKICAgICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8QWxsb2NBbGlnbm1lbnRJbnRl
Z2VyKj4ocmVzdWx0KSArIDE7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgcmV0dXJuIGZhc3RNYWxsb2Mobik7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGZh
c3RNYWxsb2Mobik7CiAgICAgfQogI2Vsc2UKLSAgICByZXR1cm4gcmVhbGxvYyhwLCBuKTsKKyAg
ICB2b2lkKiByZXN1bHQgPSByZWFsbG9jKHAsIG4pOworI2VuZGlmCisKKyNpZiBFTkFCTEUoRkFT
VF9NQUxMT0NfTE9HR0lORykKKyAgICBNZW1Mb2c6Ok1lbUxvZ2dlcjo6aW5zdGFuY2UoKS0+bG9n
UmVhbGxvYyhwLCByZXN1bHQsIG4pOwogI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB2b2lkKiBmYXN0UmVhbGxvYyh2b2lkKiBwLCBzaXplX3QgbikKQEAgLTMzNiw2ICszODIsMTEg
QEAgdm9pZCogZmFzdFJlYWxsb2Modm9pZCogcCwgc2l6ZV90IG4pCiAKICAgICBpZiAoIXJlc3Vs
dCkKICAgICAgICAgQ1JBU0goKTsKKworI2lmIEVOQUJMRShGQVNUX01BTExPQ19MT0dHSU5HKSAm
JiAhRU5BQkxFKEZBU1RfTUFMTE9DX01BVENIX1ZBTElEQVRJT04pCisgICAgTWVtTG9nOjpNZW1M
b2dnZXI6Omluc3RhbmNlKCktPmxvZ1JlYWxsb2MocCwgcmVzdWx0LCBuKTsKKyNlbmRpZgorCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL0Zh
c3RNYWxsb2MuaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmgKaW5kZXggYjIzZTdi
MC4uZGY5NGU5ZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5oCkBAIC0yMDQsNyArMjA0LDExIEBA
IHVzaW5nIFdURjo6ZmFzdE1hbGxvY0FsbG93OwogI2RlZmluZSBXVEZfUFJJVkFURV9JTkxJTkUg
aW5saW5lCiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKF9DUlREQkdfTUFQX0FMTE9DKSAmJiAhKGRl
ZmluZWQoVVNFX1NZU1RFTV9NQUxMT0MpICYmIFVTRV9TWVNURU1fTUFMTE9DKQorI2lmICFkZWZp
bmVkKF9DUlREQkdfTUFQX0FMTE9DKSAmJiAoIShkZWZpbmVkKFVTRV9TWVNURU1fTUFMTE9DKSAm
JiBVU0VfU1lTVEVNX01BTExPQykpIHx8IEVOQUJMRShGQVNUX01BTExPQ19MT0dHSU5HKQorCisj
aWYgIShkZWZpbmVkKFVTRV9TWVNURU1fTUFMTE9DKSAmJiBVU0VfU1lTVEVNX01BTExPQykgJiYg
RU5BQkxFKEZBU1RfTUFMTE9DX0xPR0dJTkcpCisjZXJyb3IgIkVOQUJMRV9GQVNUX01BTExPQ19M
T0dHSU5HIG11c3QgYmUgdXNlZCB0b2dhdGhlciB3aXRoIFVTRV9TWVNURU1fTUFMTE9DIgorI2Vu
ZGlmCiAKIC8vIFRoZSBub3Rocm93IGZ1bmN0aW9ucyBoZXJlIGFyZSBhY3R1YWxseSBub3QgYWxs
IHRoYXQgaGVscGZ1bCwgYmVjYXVzZSBmYXN0TWFsbG9jIHdpbGwKIC8vIGNhbGwgQ1JBU0goKSBy
YXRoZXIgdGhhbiByZXR1cm5pbmcgMCwgYW5kIHJldHVybmluZyAwIGlzIHdoYXQgbm90aHJvdyBp
cyBhbGwgYWJvdXQuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvTWVtTG9nQWxsb2Nh
dGlvbkJhY2t0cmFjZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvTWVtTG9nQWxsb2NhdGlvbkJh
Y2t0cmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2YmRmOQot
LS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9NZW1Mb2dBbGxvY2F0aW9uQmFj
a3RyYWNlLmNwcApAQCAtMCwwICsxLDU5IEBACisjaW5jbHVkZSAiTWVtTG9nQWxsb2NhdGlvbkJh
Y2t0cmFjZS5oIgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3N0cmluZz4KKwordXNp
bmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBNZW1Mb2cg
eworCitBbGxvY2F0aW9uQmFja3RyYWNlOjpBbGxvY2F0aW9uQmFja3RyYWNlKCkgOiBtX2hhc2go
MCkKK3sKK30KKworQWxsb2NhdGlvbkJhY2t0cmFjZTo6QWxsb2NhdGlvbkJhY2t0cmFjZShjaGFy
KiogYmFja3RyYWNlLCBpbnQgYmFja3RyYWNlU2l6ZSwgc2l6ZV90IHNpemVPZikKKyAgICA6IG1f
YmFja3RyYWNlU2l6ZShiYWNrdHJhY2VTaXplKQorICAgICwgbV9zaXplT2Yoc2l6ZU9mKQorICAg
ICwgbV9pblVzZSgwKQorICAgICwgbV9hbGxvY2F0ZWQoMCkKKyAgICAsIG1fY291bnRlcigwKQor
ICAgICwgbV9yZWFsbG9jQ291bnRlcigwKQoreworICAgIG1fYmFja3RyYWNlID0gKGNoYXIqKilt
YWxsb2MoYmFja3RyYWNlU2l6ZSAqIHNpemVvZihjaGFyKikpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgYmFja3RyYWNlU2l6ZTsgKytpKSB7CisgICAgICAgIG1fYmFja3RyYWNlW2ldID0gKGNo
YXIqKW1hbGxvYyhzdHJsZW4oYmFja3RyYWNlW2ldKSArIDEpOworICAgICAgICBzdHJjcHkobV9i
YWNrdHJhY2VbaV0sIGJhY2t0cmFjZVtpXSk7CisgICAgfQorICAgIGhhc2goKTsKK30KKworQWxs
b2NhdGlvbkJhY2t0cmFjZTo6fkFsbG9jYXRpb25CYWNrdHJhY2UoKQoreworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbV9iYWNrdHJhY2VTaXplOyArK2kpCisgICAgICAgIGZyZWUobV9iYWNrdHJh
Y2VbaV0pOworICAgIGZyZWUobV9iYWNrdHJhY2UpOworfQorCit2b2lkIG9wZXJhdG9yPDwob3N0
cmVhbSYgb3MsIGNvbnN0IEFsbG9jYXRpb25CYWNrdHJhY2UmIHRyYWNlKQoreworICAgIG9zIDw8
ICJpbiB1c2U6ICIgPDwgdHJhY2UubV9pblVzZSA8PCAiOyBhbGxvY2F0ZWQ6ICIgPDwgdHJhY2Uu
bV9hbGxvY2F0ZWQKKyAgICAgICAgPDwgIjsgYWxsb2NhdGlvbnM6ICIgPDwgdHJhY2UubV9jb3Vu
dGVyOworICAgIGlmICh0cmFjZS5tX3NpemVPZikKKyAgICAgICAgb3MgPDwgIjsgY2h1bmsgc2l6
ZTogIiA8PCB0cmFjZS5tX3NpemVPZjsKKyAgICBlbHNlIHsKKyAgICAgICAgb3MgPDwgIjsgYXJy
YXkiOworICAgICAgICBpZiAodHJhY2UubV9yZWFsbG9jQ291bnRlcikKKyAgICAgICAgICAgIG9z
IDw8ICI7IHJlYWxsb2NhdGVkICIgPDwgdHJhY2UubV9yZWFsbG9jQ291bnRlciA8PCAiIHRpbWVz
IjsKKyAgICB9CisgICAgb3MgPDwgJ1xuJzsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJh
Y2UubV9iYWNrdHJhY2VTaXplOyArK2kpIHsKKyAgICAgICAgb3MgPDwgIiAgIiA8PCAoIGkgPyAi
YnkgIiA6ICJhdCAiICkgPDwgdHJhY2UubV9iYWNrdHJhY2VbaV0gPDwgZW5kbDsKKyAgICB9Cisg
ICAgb3MgPDwgJ1xuJyA8PCBlbmRsOworfQorCit9IC8vIG5hbWVzcGFjZSBNZW1Mb2cKKworfSAv
LyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvTWVtTG9nQWxs
b2NhdGlvbkJhY2t0cmFjZS5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL01lbUxvZ0FsbG9jYXRpb25C
YWNrdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTA4NjMxCi0t
LSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL01lbUxvZ0FsbG9jYXRpb25CYWNr
dHJhY2UuaApAQCAtMCwwICsxLDkzIEBACisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxm
c3RyZWFtPgorCituYW1lc3BhY2UgV1RGIHsKKworICAgIG5hbWVzcGFjZSBNZW1Mb2cgeworCisg
ICAgICAgIC8vIFJlcHJlc2VudHMgYW4gYWxsb2NhdGlvbiBzaXRlIHdpdGggaXQncyBiYWNrdHJh
Y2UuCisgICAgICAgIGNsYXNzIEFsbG9jYXRpb25CYWNrdHJhY2UgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBBbGxvY2F0aW9uQmFja3RyYWNlKCk7CisgICAgICAgICAgICBBbGxvY2F0
aW9uQmFja3RyYWNlKGNoYXIqKiBiYWNrdHJhY2UsIGludCBiYWNrdHJhY2VTaXplLCBzaXplX3Qg
c2l6ZU9mKTsKKyAgICAgICAgICAgIH5BbGxvY2F0aW9uQmFja3RyYWNlKCk7CisKKyAgICAgICAg
ICAgIHNpemVfdCBzaXplT2YoKSBjb25zdCB7IHJldHVybiBtX3NpemVPZjsgfQorICAgICAgICAg
ICAgdm9pZCBzZXRTaXplT2Yoc2l6ZV90IHNpemVPZikgY29uc3QgeyBtX3NpemVPZiA9IHNpemVP
ZjsgfQorICAgICAgICAgICAgaW50IGFsbG9jQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY291
bnRlcjsgfQorICAgICAgICAgICAgc2l6ZV90IGluVXNlKCkgY29uc3QgeyByZXR1cm4gbV9pblVz
ZTsgfQorICAgICAgICAgICAgaW50IHJlYWxsb2NDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWFsbG9jQ291bnRlcjsgfQorCisgICAgICAgICAgICB2b2lkIGxvZ0FsbG9jKHNpemVfdCBzaXpl
KSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fYWxsb2NhdGVkICs9IHNp
emU7CisgICAgICAgICAgICAgICAgbV9pblVzZSArPSBzaXplOworICAgICAgICAgICAgICAgICsr
bV9jb3VudGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGxvZ0ZyZWUoc2l6
ZV90IHNpemUpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pblVzZSAt
PSBzaXplOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGxvZ1JlYWxsb2Moc2l6
ZV90IG9sZHNpemUsIHNpemVfdCBuZXdzaXplKSBjb25zdAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG1fYWxsb2NhdGVkICs9IG5ld3NpemUgLSBvbGRzaXplOworICAgICAgICAgICAg
ICAgIG1faW5Vc2UgKz0gbmV3c2l6ZSAtIG9sZHNpemU7CisgICAgICAgICAgICAgICAgKyttX3Jl
YWxsb2NDb3VudGVyOworICAgICAgICAgICAgICAgIG1fc2l6ZU9mID0gMDsgICAvLyB0aGlzIGNv
dWxkIG5vdCBiZSBhbnl0aGluZyBlbHNlIHRoYW4gYW4gYXJyYXkKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQWxsb2NhdGlvbkJhY2t0cmFjZSYgcnZh
bCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9oYXNoIDwg
cnZhbC5tX2hhc2g7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgbGVzc1VzYWdl
KGNvbnN0IEFsbG9jYXRpb25CYWNrdHJhY2UmIHJ2YWwpIGNvbnN0CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1faW5Vc2UgPCBydmFsLm1faW5Vc2U7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZyaWVuZCB2b2lkIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiwg
Y29uc3QgQWxsb2NhdGlvbkJhY2t0cmFjZSYpOworCisgICAgICAgICAgICAvLyByZWRpcmVjdCBu
ZXcvZGVsZXRlIHRvIGF2b2lkIGxvZ2dpbmcgYWxsb2NhdGlvbnMgb2YgQWxsb2NhdGlvbkJhY3Ry
YWNlIG9iamVjdHMKKyAgICAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwg
dm9pZCogPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtYWxsb2Mo
c2l6ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRl
KHZvaWQqIHApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJlZShwKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgLy8gZGpiMiBoYXNoLiBo
dHRwOi8vd3d3LmNzZS55b3JrdS5jYS9+b3ovaGFzaC5odG1sCisgICAgICAgICAgICB2b2lkIGhh
c2goKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaGFzaCA9
IDUzODE7CisgICAgICAgICAgICAgICAgaW50IGM7CisgICAgICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBtX2JhY2t0cmFjZVNpemU7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBj
aGFyKiBzdHIgPSBtX2JhY2t0cmFjZVtpXTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMg
PSAqc3RyKyspCisgICAgICAgICAgICAgICAgICAgICAgICBoYXNoID0gKChoYXNoIDw8IDUpICsg
aGFzaCkgKyBjOyAvKiBoYXNoICogMzMgKyBjICovCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG1faGFzaCA9IGhhc2g7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFs
bG9jYXRpb25CYWNrdHJhY2UoY29uc3QgQWxsb2NhdGlvbkJhY2t0cmFjZSYpOworICAgICAgICAg
ICAgQWxsb2NhdGlvbkJhY2t0cmFjZSYgb3BlcmF0b3I9KGNvbnN0IEFsbG9jYXRpb25CYWNrdHJh
Y2UmKTsKKworICAgICAgICAgICAgY2hhcioqIG1fYmFja3RyYWNlOworICAgICAgICAgICAgaW50
IG1fYmFja3RyYWNlU2l6ZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbV9oYXNoOworICAg
ICAgICAgICAgbXV0YWJsZSBzaXplX3QgbV9zaXplT2Y7CisgICAgICAgICAgICBtdXRhYmxlIHNp
emVfdCBtX2luVXNlOworICAgICAgICAgICAgbXV0YWJsZSBzaXplX3QgbV9hbGxvY2F0ZWQ7Cisg
ICAgICAgICAgICBtdXRhYmxlIGludCBtX2NvdW50ZXI7CisgICAgICAgICAgICBtdXRhYmxlIGlu
dCBtX3JlYWxsb2NDb3VudGVyOworICAgICAgICB9OworCisgICAgfSAvLyBuYW1lc3BhY2UgTWVt
TG9nCisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3Rm
L01lbUxvZ0RCdXNMaXN0ZW5lci5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL01lbUxvZ0RCdXNMaXN0
ZW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2YTRjNjcKLS0tIC9k
ZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvTWVtTG9nREJ1c0xpc3RlbmVyLmgKQEAg
LTAsMCArMSwzNSBAQAorI2lmbmRlZiBNZW1Mb2dEQnVzTGlzdGVuZXJfaAorI2RlZmluZSBNZW1M
b2dEQnVzTGlzdGVuZXJfaAorCituYW1lc3BhY2UgV1RGIHsKKworICAgIG5hbWVzcGFjZSBNZW1M
b2cgeworCisgICAgICAgIGNsYXNzIFBsYXRmb3JtREJ1c0xpc3RlbmVyOworICAgICAgICBjbGFz
cyBNZW1Mb2dnZXI7CisKKyAgICAgICAgY2xhc3MgREJ1c0xpc3RlbmVyIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgREJ1c0xpc3RlbmVyKE1lbUxvZ2dlciogbG9nZ2VyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGluaXQobG9nZ2VyKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgfkRCdXNMaXN0ZW5lcigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY2xvc2UoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAg
ICAgLy8gaW1wbGVtZW50ZWQgcGVyIHBsYXRmb3JtCisgICAgICAgICAgICB2b2lkIGluaXQoTWVt
TG9nZ2VyKiBsb2dnZXIpOworICAgICAgICAgICAgdm9pZCBjbG9zZSgpOworCisgICAgICAgICAg
ICBQbGF0Zm9ybURCdXNMaXN0ZW5lciogbV9wbGF0Zm9ybUxpc3RlbmVyOworICAgICAgICB9Owor
CisgICAgfSAvLyBuYW1lc3BhY2UgTWVtTG9nCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9NZW1Mb2dnZXIuY3BwIGIvSmF2YVNj
cmlwdENvcmUvd3RmL01lbUxvZ2dlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYTZhZmE1ZQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9NZW1M
b2dnZXIuY3BwCkBAIC0wLDAgKzEsMTk5IEBACisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorI2lu
Y2x1ZGUgIk1lbUxvZ2dlci5oIgorI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCisjaW5jbHVkZSA8
Y3N0ZGxpYj4KKyNpbmNsdWRlIDxuZXc+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxleGVjaW5mby5oPgorI2lu
Y2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxpb3N0cmVhbT4K
KyNpbmNsdWRlIDxpb21hbmlwPgorI2luY2x1ZGUgPGN0aW1lPgorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1l
c3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIE1lbUxvZyB7CisKK01lbUxvZ2dlciogTWVtTG9nZ2Vy
OjpzX2luc3RhbmNlID0gMDsKKworTWVtTG9nZ2VyKiBNZW1Mb2dnZXI6Omluc3RhbmNlKCkKK3sK
KyAgICBpZiAoIXNfaW5zdGFuY2UpIHsKKyAgICAgICAgLy8gYXZvaWQgdXNpbmcgbmV3CisgICAg
ICAgIHZvaWQqIHAgPSBtYWxsb2Moc2l6ZW9mKE1lbUxvZ2dlcikpOworICAgICAgICBzX2luc3Rh
bmNlID0gbmV3IChwKSBNZW1Mb2dnZXIoKTsKKyAgICB9CisgICAgcmV0dXJuIHNfaW5zdGFuY2U7
Cit9CisKK01lbUxvZ2dlcjo6TWVtTG9nZ2VyKCkKKyAgICA6IG1fYmFja3RyYWNlTWFwKCkKKyAg
ICAsIG1fbG9va3VwTWFwKCkKKyAgICAsIG1fY29uc3VtcHRpb24oMCkKKyAgICAsIG1fbWF4Q29u
c3VtcHRpb24oMCkKKyAgICAsIG1fYWxsb2NhdGlvbnMoMCkKKyAgICAsIG1fZGVhbGxvY2F0aW9u
cygwKQorICAgICwgbV9kdW1wUHJlZml4KCJtZW1sb2ciKQorICAgICwgbV9iYWNrdHJhY2VEZXB0
aCgxMikKKyAgICAsIG1fZm9yYmlkZGVuKHRydWUpIC8vIENhbm5vdCBsb2dnaW5nIHN0YXRpY3Mg
YmFjYXVzZSB0aHJlYWRpbmcgc2hvdWxkIGJlIGluaXRhbGl6ZWQgZmlyc3QuCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBOZWVkIHRvIGJlIGVuYWJsZWQgaW4gaW5pdGFsaXplVGhyZWFkaW5n
LgorICAgICwgbV9kYnVzTGlzdGVuZXIodGhpcykKK3sKK30KKworc3RhdGljIE11dGV4IG1lbU1h
cHNNdXRleDsKKworLyoqIGxvZ2dpbmcgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ki8KKwordm9pZCBNZW1Mb2dnZXI6OmxvZ0FsbG9jKGNvbnN0
IHZvaWQqIHB0ciwgc2l6ZV90IHNpemUsIGNoYXIqKiBidFN0ckFycmF5LCBpbnQgYnRTaXplKQor
eworICAgIGlmIChtX2ZvcmJpZGRlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1lbU1hcHNNdXRleCk7CisKKyAgICBjb25zdCBBbGxvY2F0aW9uQmFja3RyYWNl
KiBjb25zdCB0cmFjZSA9IG5ldyBBbGxvY2F0aW9uQmFja3RyYWNlKGJ0U3RyQXJyYXksIGJ0U2l6
ZSwgc2l6ZSk7CisgICAgQmFja3RyYWNlTWFwOjppdGVyYXRvciBpdCA9IG1fYmFja3RyYWNlTWFw
LmZpbmQodHJhY2UpOworICAgIEJhY2t0cmFjZU1hcDo6aXRlcmF0b3IgbG9jYXRpb247CisgICAg
aWYgKGl0ID09IG1fYmFja3RyYWNlTWFwLmVuZCgpKSB7CisgICAgICAgIHZvaWQqIHAgPSBtYWxs
b2Moc2l6ZW9mKE1lbU1hcCkpOworICAgICAgICBNZW1NYXAqIG1hcCA9IG5ldyAocCkgTWVtTWFw
OworICAgICAgICBtYXAtPmluc2VydChtYWtlX3BhaXIoY29uc3RfY2FzdDxjb25zdCB2b2lkKiBj
b25zdD4ocHRyKSwgc2l6ZSkpOworICAgICAgICB0cmFjZS0+bG9nQWxsb2Moc2l6ZSk7CisgICAg
ICAgIGxvY2F0aW9uID0gbV9iYWNrdHJhY2VNYXAuaW5zZXJ0KG1ha2VfcGFpcih0cmFjZSwgbWFw
KSkuZmlyc3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9jYXRpb24gPSBpdDsKKyAgICAgICAg
aXQtPnNlY29uZC0+aW5zZXJ0KG1ha2VfcGFpcihjb25zdF9jYXN0PGNvbnN0IHZvaWQqIGNvbnN0
PihwdHIpLCBzaXplKSk7CisgICAgICAgIGl0LT5maXJzdC0+bG9nQWxsb2Moc2l6ZSk7CisgICAg
ICAgIGlmIChpdC0+Zmlyc3QtPnNpemVPZigpICE9IHNpemUpCisgICAgICAgICAgICBpdC0+Zmly
c3QtPnNldFNpemVPZigwKTsKKyAgICAgICAgZGVsZXRlIHRyYWNlOworICAgIH0KKworICAgIHBh
aXI8Y29uc3QgQWxsb2NhdGlvbkJhY2t0cmFjZSogY29uc3QsIE1lbU1hcCo+KiBwYWlyQWRkcmVz
cyA9ICYqbG9jYXRpb247CisgICAgbV9sb29rdXBNYXAuaW5zZXJ0KG1ha2VfcGFpcihwdHIsIHBh
aXJBZGRyZXNzKSk7CisgICAgbV9jb25zdW1wdGlvbiArPSBzaXplOworICAgIGlmIChtX2NvbnN1
bXB0aW9uID4gbV9tYXhDb25zdW1wdGlvbikKKyAgICAgICAgbV9tYXhDb25zdW1wdGlvbiA9IG1f
Y29uc3VtcHRpb247CisgICAgKyttX2FsbG9jYXRpb25zOworfQorCit2b2lkIE1lbUxvZ2dlcjo6
bG9nRnJlZShjb25zdCB2b2lkKiBwdHIpCit7CisgICAgaWYgKG1fZm9yYmlkZGVuKQorICAgICAg
ICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobWVtTWFwc011dGV4KTsKKworICAg
IExvb2t1cE1hcDo6aXRlcmF0b3IgbG9va3VwaXQgPSBtX2xvb2t1cE1hcC5maW5kKHB0cik7Cisg
ICAgaWYgKGxvb2t1cGl0ICE9IG1fbG9va3VwTWFwLmVuZCgpKSB7CisgICAgICAgIE1lbU1hcDo6
aXRlcmF0b3IgbWVtbWFwaXQgPSBsb29rdXBpdC0+c2Vjb25kLT5zZWNvbmQtPmZpbmQocHRyKTsK
KyAgICAgICAgc2l6ZV90IHNpemUgPSBtZW1tYXBpdC0+c2Vjb25kOworICAgICAgICBtX2NvbnN1
bXB0aW9uIC09IHNpemU7CisgICAgICAgIGxvb2t1cGl0LT5zZWNvbmQtPmZpcnN0LT5sb2dGcmVl
KHNpemUpOworICAgICAgICBsb29rdXBpdC0+c2Vjb25kLT5zZWNvbmQtPmVyYXNlKG1lbW1hcGl0
KTsKKyAgICAgICAgbV9sb29rdXBNYXAuZXJhc2UobG9va3VwaXQpOworICAgICAgICArK21fZGVh
bGxvY2F0aW9uczsKKyAgICB9Cit9CisKK3ZvaWQgTWVtTG9nZ2VyOjpsb2dSZWFsbG9jKGNvbnN0
IHZvaWQqIG9sZHB0ciwgY29uc3Qgdm9pZCogbmV3cHRyLCBzaXplX3QgbmV3c2l6ZSkKK3sKKyAg
ICBpZiAobV9mb3JiaWRkZW4pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGFyZSBhY2Nv
Y2lhdGluZyB0aGUgcmVhbGxvY2F0aW9uIHdpdGggdGhlIG9yaWdpbmFsIGJhY2t0cmFjZS4KKyAg
ICAvLyBUT0RPOiBoYW5kbGUgcmVhbGxvY3MgaW4gYSBtb3JlIGNsZXZlciB3YXkKKworICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtZW1NYXBzTXV0ZXgpOworCisgICAgTG9va3VwTWFwOjppdGVyYXRv
ciBsb29rdXBpdCA9IG1fbG9va3VwTWFwLmZpbmQob2xkcHRyKTsKKyAgICBpZiAobG9va3VwaXQg
PT0gbV9sb29rdXBNYXAuZW5kKCkpIHsKKyAgICAgICAgLy8gc291bmRzIHN0dXBpZAorICAgICAg
ICAvLyBpZ25vcmUgdGhlIGxhc3Qgc3ltYm9sICh0aGlzIGZ1bmN0aW9uKQorICAgICAgICB2b2lk
KiBzeW1ib2xzW21fYmFja3RyYWNlRGVwdGggKyAxXTsKKyAgICAgICAgaW50IGJ0U2l6ZSA9IGJh
Y2t0cmFjZShzeW1ib2xzLCBtX2JhY2t0cmFjZURlcHRoICsgMSk7CisgICAgICAgIGNoYXIqKiBz
dHJBcnJheSA9IGJhY2t0cmFjZV9zeW1ib2xzKHN5bWJvbHMsIGJ0U2l6ZSk7CisgICAgICAgIE1l
bUxvZ2dlcjo6aW5zdGFuY2UoKS0+bG9nQWxsb2MobmV3cHRyLCBuZXdzaXplLCBzdHJBcnJheSAr
IDEsIGJ0U2l6ZSAtIDEpOworICAgICAgICBmcmVlKHN0ckFycmF5KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIE1lbU1hcDo6aXRlcmF0b3IgbWVtbWFwaXQgPSBsb29rdXBpdC0+c2Vj
b25kLT5zZWNvbmQtPmZpbmQob2xkcHRyKTsKKyAgICBzaXplX3Qgb2xkc2l6ZSA9IG1lbW1hcGl0
LT5zZWNvbmQ7CisgICAgbG9va3VwaXQtPnNlY29uZC0+Zmlyc3QtPmxvZ1JlYWxsb2Mob2xkc2l6
ZSwgbmV3c2l6ZSk7CisgICAgaWYgKG9sZHB0ciA9PSBuZXdwdHIpCisgICAgICAgIG1lbW1hcGl0
LT5zZWNvbmQgPSBuZXdzaXplOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQobV9sb29rdXBN
YXAuZmluZChuZXdwdHIpID09IG1fbG9va3VwTWFwLmVuZCgpKTsKKyAgICAgICAgbG9va3VwaXQt
PnNlY29uZC0+c2Vjb25kLT5lcmFzZShvbGRwdHIpOworICAgICAgICBsb29rdXBpdC0+c2Vjb25k
LT5zZWNvbmQtPmluc2VydChtYWtlX3BhaXIobmV3cHRyLCBuZXdzaXplKSk7CisgICAgICAgIG1f
bG9va3VwTWFwLmluc2VydChtYWtlX3BhaXIoY29uc3RfY2FzdDxjb25zdCB2b2lkKiBjb25zdD4o
bmV3cHRyKSwgbG9va3VwaXQtPnNlY29uZCkpOworICAgICAgICBtX2xvb2t1cE1hcC5lcmFzZShv
bGRwdHIpOworICAgIH0KKworICAgIG1fY29uc3VtcHRpb24gKz0gbmV3c2l6ZSAtIG9sZHNpemU7
CisgICAgaWYgKG1fY29uc3VtcHRpb24gPiBtX21heENvbnN1bXB0aW9uKQorICAgICAgICBtX21h
eENvbnN1bXB0aW9uID0gbV9jb25zdW1wdGlvbjsKK30KKworLyoqIGR1bXAgKi8KKy8qID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGJv
b2wgaW5kaXJlY3RMZXNzVXNhZ2UoY29uc3QgQWxsb2NhdGlvbkJhY2t0cmFjZSogY29uc3QgYSwg
Y29uc3QgQWxsb2NhdGlvbkJhY2t0cmFjZSogY29uc3QgYikKK3sKKyAgICByZXR1cm4gYS0+bGVz
c1VzYWdlKCpiKTsKK30KKwordm9pZCBNZW1Mb2dnZXI6OmR1bXAoKQoreworICAgIGZvcmJpZExv
Z2dpbmcoKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtZW1NYXBzTXV0ZXgpOworCisgICAg
c3RhdGljIGludCBkdW1wQ291bnRlciA9IDE7CisgICAgc3RhdGljIHBpZF90IHBpZCA9IGdldHBp
ZCgpOworICAgIGludCB2ZWN0b3JTaXplID0gYWxsb2NhdGlvblNpdGVzKCksIGkgPSAwOworICAg
IGNvbnN0IEFsbG9jYXRpb25CYWNrdHJhY2UqKiBiYWNrdHJhY2VWZWN0b3IgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IEFsbG9jYXRpb25CYWNrdHJhY2UqKj4obWFsbG9jKHZlY3RvclNpemUgKiBz
aXplb2YoQWxsb2NhdGlvbkJhY2t0cmFjZSopKSk7CisgICAgQmFja3RyYWNlTWFwOjppdGVyYXRv
ciBlbmQgPSBtX2JhY2t0cmFjZU1hcC5lbmQoKTsKKyAgICBmb3IgKEJhY2t0cmFjZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX2JhY2t0cmFjZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQsICsraSkg
eworICAgICAgICBiYWNrdHJhY2VWZWN0b3JbaV0gPSBpdC0+Zmlyc3Q7CisgICAgfQorCisgICAg
c3RkOjpzb3J0KGJhY2t0cmFjZVZlY3RvciwgYmFja3RyYWNlVmVjdG9yICsgdmVjdG9yU2l6ZSwg
aW5kaXJlY3RMZXNzVXNhZ2UpOworCisgICAgc3RyaW5nc3RyZWFtIGZpbGVuYW1lOworICAgIGZp
bGVuYW1lIDw8IG1fZHVtcFByZWZpeCA8PCAiLiIgPDwgcGlkIDw8ICIuIiA8PCBkdW1wQ291bnRl
cisrOworICAgIG9mc3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0ub3BlbihmaWxlbmFtZS5zdHIo
KS5jX3N0cigpLCBpb3NfYmFzZTo6b3V0KTsKKyAgICBpZiAoc3RyZWFtLmJhZCgpKQorICAgICAg
ICBjZXJyIDw8ICJDYW5ub3Qgb3BlbiIgPDwgZmlsZW5hbWUuc3RyKCkgPDwgImZvciB3cml0aW5n
LiIgPDwgZW5kbDsKKworICAgIHN0cmVhbSA8PCAiSGVhcCB1c2FnZSBzdGF0aXN0aWNzXG4iOwor
ICAgIHN0cmVhbSA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVxuIjsKKyAgICBzdHJlYW0gPDwgIkNvbnN1bXB0aW9uOiAgICAgICIgPDwgc2V0dygxMCkgPDwg
bV9jb25zdW1wdGlvbiA8PCAnXG4nCisgICAgICAgICAgIDw8ICJNYXggY29uc3VtcHRpb246ICAi
IDw8IHNldHcoMTApIDw8IG1fbWF4Q29uc3VtcHRpb24gPDwgJ1xuJworICAgICAgICAgICA8PCAi
QWxsb2NhdGlvbnM6ICAgICAgIiA8PCBzZXR3KDEwKSA8PCBtX2FsbG9jYXRpb25zIDw8ICdcbicK
KyAgICAgICAgICAgPDwgIkRlYWxsb2NhdGlvbnM6ICAgICIgPDwgc2V0dygxMCkgPDwgbV9kZWFs
bG9jYXRpb25zIDw8ICdcbicKKyAgICAgICAgICAgPDwgIkFsbG9jYXRpb24gc2l0ZXM6ICIgPDwg
c2V0dygxMCkgPDwgYWxsb2NhdGlvblNpdGVzKCkgPDwgJ1xuJzsKKyAgICBzdHJlYW0gPDwgIi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIiA8PCBlbmRsOwor
CisgICAgZm9yIChpbnQgaSA9IHZlY3RvclNpemUgLSAxOyBpID49IDA7IC0taSkgeworICAgICAg
ICBzdHJlYW0gPDwgKmJhY2t0cmFjZVZlY3RvcltpXTsKKyAgICB9CisKKyAgICBhbGxvd0xvZ2dp
bmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTWVtTG9nCisKK30gLy8gbmFtZXNwYWNlIFdURgpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL01lbUxvZ2dlci5oIGIvSmF2YVNjcmlwdENv
cmUvd3RmL01lbUxvZ2dlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFj
NDNhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvTWVtTG9nZ2VyLmgK
QEAgLTAsMCArMSwxMTcgQEAKKyNpZm5kZWYgTWVtTG9nZ2VyX2gKKyNkZWZpbmUgTWVtTG9nZ2Vy
X2gKKworI2luY2x1ZGUgIk1lbUxvZ0FsbG9jYXRpb25CYWNrdHJhY2UuaCIKKyNpbmNsdWRlICJN
ZW1Mb2dEQnVzTGlzdGVuZXIuaCIKKworI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8bWFw
PgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBzdGQg
eworICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBsZXNzPGNvbnN0IFdURjo6TWVtTG9nOjpBbGxvY2F0
aW9uQmFja3RyYWNlKiBjb25zdD4KKyAgICB7CisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBXVEY6Ok1lbUxvZzo6QWxsb2NhdGlvbkJhY2t0cmFjZSogY29uc3QgYSwgY29uc3QgV1RGOjpN
ZW1Mb2c6OkFsbG9jYXRpb25CYWNrdHJhY2UqIGNvbnN0IGIpIGNvbnN0IHsKKyAgICAgICAgICAg
IHJldHVybiAqYSA8ICpiOworICAgICAgICB9CisgICAgfTsKK30KKworbmFtZXNwYWNlIFdURiB7
CisKKyAgICBuYW1lc3BhY2UgTWVtTG9nIHsKKworICAgICAgICAvLyBQcml2YXRlIGFsbG9jYXRv
ciBmb3IgYXZvaWQgdXNpbmcgdGhlIGdsb2JhbCBuZXcvZGVsZXRlIG9wZXJhdG9ycy4KKyAgICAg
ICAgdGVtcGxhdGU8Y2xhc3MgVD4KKyAgICAgICAgY2xhc3MgcHJpdmF0ZV9hbGxvY2F0b3Igewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKKyAgICAg
ICAgICAgIHR5cGVkZWYgVCogcG9pbnRlcjsKKyAgICAgICAgICAgIHR5cGVkZWYgVCYgcmVmZXJl
bmNlOworICAgICAgICAgICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdF9wb2ludGVyOworICAgICAg
ICAgICAgdHlwZWRlZiBjb25zdCBUJiBjb25zdF9yZWZlcmVuY2U7CisgICAgICAgICAgICB0eXBl
ZGVmIHNpemVfdCBzaXplX3R5cGU7CisgICAgICAgICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CisKKyAgICAgICAgICAgIHByaXZhdGVfYWxsb2NhdG9yKCkgeyB9CisKKyAg
ICAgICAgICAgIHBvaW50ZXIgYWxsb2NhdGUoc2l6ZV90eXBlIG4pIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4obWFsbG9jKG4gKiBzaXplb2YoVCkpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIHAsIHNpemVf
dHlwZSkgeworICAgICAgICAgICAgICAgIGZyZWUocCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgcCwgY29uc3RfcmVmZXJlbmNlIHZhbCkgewor
ICAgICAgICAgICAgICAgIG5ldyAocCkgVCh2YWwpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICB2b2lkIGRlc3Ryb3kocG9pbnRlciBwKSB7IHAtPn5UKCk7IH0KKworICAgICAgICAgICAg
c2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90KC0xKTsgfQorCisgICAg
ICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4KKyAgICAgICAgICAgIHN0cnVjdCByZWJpbmQgeyB0
eXBlZGVmIHByaXZhdGVfYWxsb2NhdG9yPFU+IG90aGVyOyB9OworCisgICAgICAgICAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVT4KKyAgICAgICAgICAgIHByaXZhdGVfYWxsb2NhdG9yKGNvbnN0IHByaXZh
dGVfYWxsb2NhdG9yPFU+Jikge30KKyAgICAgICAgfTsKKworICAgICAgICAvLyBBY2NvY2lhdGVz
IGFsbG9jYXRpb24gc2l0ZXMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYmFja3RyYWNlLgorICAgICAg
ICBjbGFzcyBNZW1Mb2dnZXIgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICB0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgbG9uZyBjb25zdW1wdGlvbl90OworCisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIHN0YXRpYyBNZW1Mb2dnZXIqIGluc3RhbmNlKCk7CisgICAgICAgICAgICB2b2lk
IGxvZ0FsbG9jKGNvbnN0IHZvaWQqIHB0ciwgc2l6ZV90IHNpemUsIGNoYXIqKiBiYWNrdHJhY2Us
IGludCBiYWNrdHJhY2VTaXplKTsKKyAgICAgICAgICAgIHZvaWQgbG9nRnJlZShjb25zdCB2b2lk
KiBwdHIpOworICAgICAgICAgICAgdm9pZCBsb2dSZWFsbG9jKGNvbnN0IHZvaWQqIG9sZHB0ciwg
Y29uc3Qgdm9pZCogbmV3cHRyLCBzaXplX3QgbmV3c2l6ZSk7CisgICAgICAgICAgICB2b2lkIGR1
bXAoKTsKKworICAgICAgICAgICAgdm9pZCBmb3JiaWRMb2dnaW5nKCkgeyBtX2ZvcmJpZGRlbiA9
IHRydWU7IH0KKyAgICAgICAgICAgIHZvaWQgYWxsb3dMb2dnaW5nKCkgeyBtX2ZvcmJpZGRlbiA9
IGZhbHNlOyB9CisKKyAgICAgICAgICAgIHZvaWQgc2V0RHVtcFByZWZpeChzdGQ6OnN0cmluZyBw
cmVmaXgpIHsgbV9kdW1wUHJlZml4ID0gcHJlZml4OyB9CisKKyAgICAgICAgICAgIGNvbnN1bXB0
aW9uX3QgY29uc3VtcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnN1bXB0aW9uOyB9CisgICAg
ICAgICAgICBjb25zdW1wdGlvbl90IG1heENvbnN1bXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9t
YXhDb25zdW1wdGlvbjsgfQorICAgICAgICAgICAgdW5zaWduZWQgYWxsb2NhdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX2FsbG9jYXRpb25zOyB9CisgICAgICAgICAgICB1bnNpZ25lZCBkZWFsbG9j
YXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9kZWFsbG9jYXRpb25zOyB9CisgICAgICAgICAgICB1
bnNpZ25lZCBhbGxvY2F0aW9uU2l0ZXMoKSBjb25zdCB7IHJldHVybiBtX2JhY2t0cmFjZU1hcC5z
aXplKCk7IH0KKyAgICAgICAgICAgIHVuc2lnbmVkIGJhY2t0cmFjZURlcHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrdHJhY2VEZXB0aDsgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICB0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCB2b2lkKiBjb25zdCwgc2l6ZV90PiBNZW1NYXBQYWly
OworICAgICAgICAgICAgdHlwZWRlZiBzdGQ6Om1hcDxjb25zdCB2b2lkKiBjb25zdCwgc2l6ZV90
LCBzdGQ6Omxlc3M8Y29uc3Qgdm9pZCogY29uc3Q+LCBwcml2YXRlX2FsbG9jYXRvcjwgTWVtTWFw
UGFpciA+ID4gTWVtTWFwOworICAgICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgQWxs
b2NhdGlvbkJhY2t0cmFjZSogY29uc3QsIE1lbU1hcCo+IEJhY2t0cmFjZU1hcFBhaXI7CisgICAg
ICAgICAgICB0eXBlZGVmIHN0ZDo6bWFwPGNvbnN0IEFsbG9jYXRpb25CYWNrdHJhY2UqIGNvbnN0
LCBNZW1NYXAqLCBzdGQ6Omxlc3M8Y29uc3QgQWxsb2NhdGlvbkJhY2t0cmFjZSogY29uc3Q+LCBw
cml2YXRlX2FsbG9jYXRvcjwgQmFja3RyYWNlTWFwUGFpciA+ID4gQmFja3RyYWNlTWFwOworICAg
ICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3Qgdm9pZCogY29uc3QsIEJhY2t0cmFjZU1h
cFBhaXIqPiBMb29rdXBNYXBQYWlyOworICAgICAgICAgICAgdHlwZWRlZiBzdGQ6Om1hcDxjb25z
dCB2b2lkKiBjb25zdCwgQmFja3RyYWNlTWFwUGFpciosIHN0ZDo6bGVzczxjb25zdCB2b2lkKiBj
b25zdD4sIHByaXZhdGVfYWxsb2NhdG9yPCBMb29rdXBNYXBQYWlyID4gPiBMb29rdXBNYXA7CisK
KyAgICAgICAgICAgIE1lbUxvZ2dlcigpOworICAgICAgICAgICAgTWVtTG9nZ2VyKGNvbnN0IE1l
bUxvZ2dlciYpOworICAgICAgICAgICAgTWVtTG9nZ2VyJiBvcGVyYXRvcj0oY29uc3QgTWVtTG9n
Z2VyJik7CisKKyAgICAgICAgICAgIEJhY2t0cmFjZU1hcCBtX2JhY2t0cmFjZU1hcDsKKyAgICAg
ICAgICAgIExvb2t1cE1hcCBtX2xvb2t1cE1hcDsKKworICAgICAgICAgICAgY29uc3VtcHRpb25f
dCBtX2NvbnN1bXB0aW9uOworICAgICAgICAgICAgY29uc3VtcHRpb25fdCBtX21heENvbnN1bXB0
aW9uOworICAgICAgICAgICAgdW5zaWduZWQgbV9hbGxvY2F0aW9uczsKKyAgICAgICAgICAgIHVu
c2lnbmVkIG1fZGVhbGxvY2F0aW9uczsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG1fZHVtcFBy
ZWZpeDsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1fYmFja3RyYWNlRGVwdGg7CisgICAgICAgICAg
ICBib29sIG1fZm9yYmlkZGVuOworICAgICAgICAgICAgREJ1c0xpc3RlbmVyIG1fZGJ1c0xpc3Rl
bmVyOworCisgICAgICAgICAgICBzdGF0aWMgTWVtTG9nZ2VyKiBzX2luc3RhbmNlOworICAgICAg
ICB9OworCisgICAgfSAvLyBuYW1lc3BhY2UgTWVtTG9nCisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gTWVtTG9nZ2VyX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9x
dC9NZW1Mb2dEQnVzTGlzdGVuZXJRdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvcXQvTWVtTG9n
REJ1c0xpc3RlbmVyUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZl
YWE0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvcXQvTWVtTG9nREJ1
c0xpc3RlbmVyUXQuY3BwCkBAIC0wLDAgKzEsMjAgQEAKKyNpbmNsdWRlICJNZW1Mb2dEQnVzTGlz
dGVuZXIuaCIKKyNpbmNsdWRlICJNZW1Mb2dQbGF0Zm9ybURCdXNMaXN0ZW5lci5oIgorCituYW1l
c3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIE1lbUxvZyB7CisKK3ZvaWQgREJ1c0xpc3RlbmVyOjpp
bml0KE1lbUxvZ2dlciogbG9nZ2VyKQoreworICAgIG1fcGxhdGZvcm1MaXN0ZW5lciA9IG5ldyBQ
bGF0Zm9ybURCdXNMaXN0ZW5lcihsb2dnZXIpOworfQorCit2b2lkIERCdXNMaXN0ZW5lcjo6Y2xv
c2UoKQoreworICAgIGRlbGV0ZSBtX3BsYXRmb3JtTGlzdGVuZXI7Cit9CisKK30gLy8gbmFtZXNw
YWNlIE1lbUxvZworCit9IC8vIG5hbWVzcGFjZSBXVEYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvcXQvTWVtTG9nUGxhdGZvcm1EQnVz
TGlzdGVuZXIuaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9xdC9NZW1Mb2dQbGF0Zm9ybURCdXNMaXN0
ZW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFjMTQ0OWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvcXQvTWVtTG9nUGxhdGZvcm1EQnVzTGlz
dGVuZXIuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIE1lbUxvZ1BsYXRmb3JtREJ1c0xpc3Rl
bmVyX2gKKyNkZWZpbmUgTWVtTG9nUGxhdGZvcm1EQnVzTGlzdGVuZXJfaAorCisjaW5jbHVkZSA8
UU9iamVjdD4KKworbmFtZXNwYWNlIFdURiB7CisKKyAgICBuYW1lc3BhY2UgTWVtTG9nIHsKKwor
ICAgICAgICBjbGFzcyBNZW1Mb2dnZXI7CisKKyAgICAgICAgY2xhc3MgUGxhdGZvcm1EQnVzTGlz
dGVuZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgICAgICAgICBRX09CSkVDVAorICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBQbGF0Zm9ybURCdXNMaXN0ZW5lcihNZW1Mb2dnZXIqIGxvZ2dl
cik7CisKKyAgICAgICAgcHVibGljIHNsb3RzOgorICAgICAgICAgICAgdm9pZCBtZW1EdW1wU2xv
dCgpOworCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBNZW1Mb2dnZXIqIG1fbG9nZ2Vy
OworICAgICAgICB9OworICAgIH0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS93dGYvcXQvTWVtTG9nUGxhdGZvcm1EQnVzTGlzdGVuZXJRdC5jcHAgYi9KYXZhU2NyaXB0
Q29yZS93dGYvcXQvTWVtTG9nUGxhdGZvcm1EQnVzTGlzdGVuZXJRdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2Q4NzdjMgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3d0Zi9xdC9NZW1Mb2dQbGF0Zm9ybURCdXNMaXN0ZW5lclF0LmNwcApAQCAtMCww
ICsxLDI2IEBACisjaW5jbHVkZSAiTWVtTG9nUGxhdGZvcm1EQnVzTGlzdGVuZXIuaCIKKyNpbmNs
dWRlICJNZW1Mb2dnZXIuaCIKKworI2luY2x1ZGUgPFF0REJ1cy9RREJ1c0Nvbm5lY3Rpb24+Cisj
aW5jbHVkZSA8UURlYnVnPgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIE1lbUxvZyB7
CisKK1BsYXRmb3JtREJ1c0xpc3RlbmVyOjpQbGF0Zm9ybURCdXNMaXN0ZW5lcihNZW1Mb2dnZXIq
IGxvZ2dlcikKKyAgICA6IG1fbG9nZ2VyKGxvZ2dlcikKK3sKKyAgICBRREJ1c0Nvbm5lY3Rpb246
OnNlc3Npb25CdXMoKS5jb25uZWN0KAorICAgICAgICAgICAgUVN0cmluZygiIiksIFFTdHJpbmco
IiIpLCBRU3RyaW5nKCJxdHdlYmtpdC5tZW1sb2dnZXIiKSwgUVN0cmluZygiZHVtcCIpICwgdGhp
cywgU0xPVChtZW1EdW1wU2xvdCgpKSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1EQnVzTGlzdGVuZXI6
Om1lbUR1bXBTbG90KCkKK3sKKyAgICBxRGVidWcoKSA8PCAiQ3JlYXRpbmcgZHVtcCIgPDwgZW5k
bDsKKyAgICBtX2xvZ2dlci0+ZHVtcCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBNZW1Mb2cKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvcXQvVGhy
ZWFkaW5nUXQuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL3F0L1RocmVhZGluZ1F0LmNwcAppbmRl
eCAxZmRkMmJiLi4wMDIwZWY4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvcXQvVGhy
ZWFkaW5nUXQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9xdC9UaHJlYWRpbmdRdC5jcHAK
QEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSAiTWFpblRocmVhZC5oIgogI2luY2x1ZGUgIlJh
bmRvbU51bWJlclNlZWQuaCIKIAorI2lmIEVOQUJMRShGQVNUX01BTExPQ19MT0dHSU5HKQorI2lu
Y2x1ZGUgIk1lbUxvZ2dlci5oIgorI2VuZGlmCisKICNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9u
PgogI2luY2x1ZGUgPFFNdXRleD4KICNpbmNsdWRlIDxRVGhyZWFkPgpAQCAtMTM0LDYgKzEzOCw5
IEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiAgICAgICAgIGlmICghbWFpblRocmVhZElk
ZW50aWZpZXIpCiAgICAgICAgICAgICBtYWluVGhyZWFkSWRlbnRpZmllciA9IGVzdGFibGlzaElk
ZW50aWZpZXJGb3JUaHJlYWQobWFpblRocmVhZCk7CiAgICAgICAgIGluaXRpYWxpemVNYWluVGhy
ZWFkKCk7CisjaWYgRU5BQkxFKEZBU1RfTUFMTE9DX0xPR0dJTkcpCisgICAgICAgIE1lbUxvZzo6
TWVtTG9nZ2VyOjppbnN0YW5jZSgpLT5hbGxvd0xvZ2dpbmcoKTsKKyNlbmRpZgogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8K
aW5kZXggOGVhNjJkZC4uZWViZTRiOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybwor
KysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yLDYgKzIsMTAgQEAKIENPTkZJRyArPSBidWls
ZGluZy1saWJzCiBDT05GSUcgKz0gZGVwZW5kX2luY2x1ZGVwYXRoCiAKK0NPTkZJRyhtZW1sb2dn
ZXIpIHsKKyAgICBDT05GSUcgKz0gc3RhdGljbGliCit9CisKIHN5bWJpYW46IHsKICAgICBUQVJH
RVQuRVBPQ0FMTE9XRExMREFUQT0xCiAgICAgVEFSR0VULkVQT0NIRUFQU0laRSA9IDB4MjAwMDAg
MHgyMDAwMDAwIC8vIE1pbiAxMjhrQiwgTWF4IDMyTUIKQEAgLTMyNDQsNiArMzI0OCw5IEBAIEhF
QURFUlMgKz0gJCRXRUJLSVRfQVBJX0hFQURFUlMKIAogICAgIHVuaXggewogICAgICAgICBDT05G
SUcgKz0gY3JlYXRlX3BjIGNyZWF0ZV9wcmwKKyAgICAgICAgQ09ORklHKG1lbWxvZ2dlcikgewor
ICAgICAgICAgICAgQ09ORklHICs9IHN0YXRpY2xpYgorICAgICAgICB9CiAgICAgICAgIFFNQUtF
X1BLR0NPTkZJR19MSUJESVIgPSAkJHRhcmdldC5wYXRoCiAgICAgICAgIFFNQUtFX1BLR0NPTkZJ
R19JTkNESVIgPSAkJGhlYWRlcnMucGF0aAogICAgICAgICBRTUFLRV9QS0dDT05GSUdfREVTVERJ
UiA9IHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvV2ViS2l0LnByaSBiL1dlYktpdC5wcmkKaW5kZXgg
NmU3MjFkNi4uMWM5ZTAxYiAxMDA2NDQKLS0tIGEvV2ViS2l0LnByaQorKysgYi9XZWJLaXQucHJp
CkBAIC0zNiw2ICszNiwxMSBAQCBDT05GSUcocmVsZWFzZSwgZGVidWd8cmVsZWFzZSkgewogICAg
IERFRklORVMgKz0gTkRFQlVHCiB9CiAKK0NPTkZJRyhtZW1sb2dnZXIpIHsKKyAgICBERUZJTkVT
ICs9IEVOQUJMRV9GQVNUX01BTExPQ19MT0dHSU5HCisgICAgUU1BS0VfTEZMQUdTICs9IC1yZHlu
YW1pYworfQorCiBCQVNFX0RJUiA9ICQkUFdECiBJTkNMVURFUEFUSCArPSAkJFBXRC9XZWJLaXQv
cXQvQXBpCiAKZGlmZiAtLWdpdCBhL1dlYktpdC5wcm8gYi9XZWJLaXQucHJvCmluZGV4IDBiYTE0
ZTQuLjA5YzExM2EgMTAwNjQ0Ci0tLSBhL1dlYktpdC5wcm8KKysrIGIvV2ViS2l0LnBybwpAQCAt
Nyw2ICs3LDEwIEBAIFNVQkRJUlMgKz0gXAogICAgICAgICBXZWJLaXQvcXQvUXRMYXVuY2hlciBc
CiAgICAgICAgIFdlYktpdC9xdC90ZXN0cwogCitDT05GSUcobWVtbG9nZ2VyKSB7CisgICAgU1VC
RElSUyArPSBXZWJLaXRUb29scy9NZW1Mb2dEdW1wZXIKK30KKwogIXdpbjMyOiFzeW1iaWFuIHsK
ICAgICBTVUJESVJTICs9IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJU
cmVlLnBybwogICAgIFNVQkRJUlMgKz0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvSW1h
Z2VEaWZmLnBybwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvTWVtTG9nRHVtcGVyL01lbUxvZ0R1
bXBlci5oIGIvV2ViS2l0VG9vbHMvTWVtTG9nRHVtcGVyL01lbUxvZ0R1bXBlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNkMjljY2UKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9NZW1Mb2dEdW1wZXIvTWVtTG9nRHVtcGVyLmgKQEAgLTAsMCArMSwxOSBAQAor
I2lmbmRlZiBNZW1Mb2dEdW1wZXJfaAorI2RlZmluZSBNZW1Mb2dEdW1wZXJfaAorCisjaW5jbHVk
ZSA8UU9iamVjdD4KKyNpbmNsdWRlIDxRdERCdXMvUURCdXNDb25uZWN0aW9uPgorI2luY2x1ZGUg
PFF0REJ1cy9RREJ1c01lc3NhZ2U+CisKK2NsYXNzIE1lbUxvZ0R1bXBlciA6IHB1YmxpYyBRT2Jq
ZWN0IHsKKyAgICBRX09CSkVDVAorCitwdWJsaWM6CisgICAgdm9pZCBkdW1wKCkKKyAgICB7Cisg
ICAgICAgIFFEQnVzTWVzc2FnZSBtc2cgPSBRREJ1c01lc3NhZ2U6OmNyZWF0ZVNpZ25hbChRU3Ry
aW5nKCIvIiksIFFTdHJpbmcoInF0d2Via2l0Lm1lbWxvZ2dlciIpLCBRU3RyaW5nKCJkdW1wIikp
OworICAgICAgICBRREJ1c0Nvbm5lY3Rpb246OnNlc3Npb25CdXMoKS5zZW5kKG1zZyk7CisgICAg
fQorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9NZW1Mb2dEdW1wZXIvTWVt
TG9nRHVtcGVyLnBybyBiL1dlYktpdFRvb2xzL01lbUxvZ0R1bXBlci9NZW1Mb2dEdW1wZXIucHJv
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcwOTcxOTgKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9NZW1Mb2dEdW1wZXIvTWVtTG9nRHVtcGVyLnBybwpAQCAtMCww
ICsxLDExIEBACitRVCArPSBkYnVzCitUQVJHRVQgPSBNZW1Mb2dEdW1wZXIKK0NPTkZJRyArPSBj
b25zb2xlCitDT05GSUcgKz0gZGJ1cworVEVNUExBVEUgPSBhcHAKKworaW5jbHVkZSguLi8uLi9X
ZWJLaXQucHJpKQorREVTVERJUiA9IC4uLy4uL2JpbgorCitIRUFERVJTICs9IE1lbUxvZ0R1bXBl
ci5oCitTT1VSQ0VTICs9IG1haW4uY3BwCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9NZW1Mb2dE
dW1wZXIvbWFpbi5jcHAgYi9XZWJLaXRUb29scy9NZW1Mb2dEdW1wZXIvbWFpbi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzM5YThiZQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdFRvb2xzL01lbUxvZ0R1bXBlci9tYWluLmNwcApAQCAtMCwwICsxLDI5IEBACisjaW5j
bHVkZSAiTWVtTG9nRHVtcGVyLmgiCisjaW5jbHVkZSA8UXRDb3JlL1FDb3JlQXBwbGljYXRpb24+
CisjaW5jbHVkZSA8UVRleHRTdHJlYW0+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNz
dGRsaWI+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICBRQ29yZUFw
cGxpY2F0aW9uIGEoYXJnYywgYXJndik7CisgICAgTWVtTG9nRHVtcGVyIGR1bXBlcjsKKyAgICBR
VGV4dFN0cmVhbSBzdGRJbihzdGRpbiwgUUlPRGV2aWNlOjpSZWFkT25seSk7CisgICAgUVRleHRT
dHJlYW0gc3RkT3V0KHN0ZG91dCwgUUlPRGV2aWNlOjpXcml0ZU9ubHkpOworICAgIFFTdHJpbmcg
Y21kOworICAgIHN0ZE91dCA8PCAiVHlwZSBkdW1wIHRvIGNyZWF0ZSBhIGR1bXAuIFR5cGUgcXVp
dCB0byBleGl0LiIgPDwgZW5kbDsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBzdGRPdXQg
PDwgIj86ICAiOworICAgICAgICBzdGRPdXQuZmx1c2goKTsKKyAgICAgICAgc3RkSW4gPj4gY21k
OworICAgICAgICBpZiAoY21kID09IFFMYXRpbjFTdHJpbmcoImR1bXAiKSkgeworICAgICAgICAg
ICAgc3RkT3V0IDw8ICJDcmVhdGluZyBkdW1wLi4uIiA8PCBlbmRsOworICAgICAgICAgICAgZHVt
cGVyLmR1bXAoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjbWQgPT0gUUxhdGluMVN0
cmluZygicXVpdCIpKQorICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc3RkT3V0IDw8ICJVbmtub3duIGNvbW1hbmQ6ICIgPDwgY21kIDw8IGVuZGw7CisgICAg
fQorCisgICAgcmV0dXJuIDA7Cit9Cg==
</data>
<flag name="review"
          id="20000"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
      

    </bug>

</bugzilla>