<?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>7775</bug_id>
          
          <creation_ts>2006-03-14 23:10:38 -0800</creation_ts>
          <short_desc>KJS::Node and KJS::StatementNode are bigger than they need to be</short_desc>
          <delta_ts>2006-03-17 14:48:53 -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>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>36390</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-03-14 23:10:38 -0800</bug_when>
    <thetext>KJS::Node and KJS::StatementNode are bigger than they need to be. Many fields could be removed entirely, or the info could be stored elsewhere more efficiently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36391</commentid>
    <comment_count>1</comment_count>
      <attachid>7075</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-03-14 23:12:49 -0800</bug_when>
    <thetext>Created attachment 7075
this could reduce memory use by a decent chunk for big widgets</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36392</commentid>
    <comment_count>2</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-03-14 23:15:49 -0800</bug_when>
    <thetext>Also &lt;rdar://problem/4478522&gt;
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36393</commentid>
    <comment_count>3</comment_count>
      <attachid>7075</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-03-14 23:34:30 -0800</bug_when>
    <thetext>Comment on attachment 7075
this could reduce memory use by a decent chunk for big widgets

Just two small comments:

+        (KJS::StatementNode::lastLine): Renamed l1 to m_line

this should be m_lastLine

+    int m_lastLine;;

has an extra semi-colon.

Otherwise, looks great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36450</commentid>
    <comment_count>4</comment_count>
      <attachid>7075</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-15 09:36:42 -0800</bug_when>
    <thetext>Comment on attachment 7075
this could reduce memory use by a decent chunk for big widgets

I&apos;d like to see more consistency assertions.

For example, an assertion that a node is either in newNodes or nodeExtraRefCounts but not both. An assertion in Node::deref that the node is not in newNodes. An assertion in clearNewNodes that none of the nodes in newNodes are also in nodeExtraRefCounts. None of these are likely to immediately find a problem, but I&apos;d like to have those.

Instead of implementing Node::refcount() I think you should have removed the function. I can&apos;t find a single caller.

I&apos;m surprised by the use of &quot;unsigned int&quot;. Do we use &quot;unsigned&quot; or &quot;unsigned int&quot;, idiomatically?

Very nice stuff. I&apos;d been wondering for a long time why every single object needed a source URL and this seems a good solution.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7075</attachid>
            <date>2006-03-14 23:12:49 -0800</date>
            <delta_ts>2006-03-14 23:34:30 -0800</delta_ts>
            <desc>this could reduce memory use by a decent chunk for big widgets</desc>
            <filename>shrink-node-tree-3.patch.txt</filename>
            <type>text/plain</type>
            <size>33116</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjk5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA1IEBACisyMDA2LTAz
LTEzICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICAtIEtKUzo6Tm9kZSBhbmQg
S0pTOjpTdGF0ZW1lbnROb2RlIGFyZSBiaWdnZXIgdGhhbiB0aGV5IG5lZWQgdG8gYmUKKyAgICAg
ICAgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzc1CisK
KyAgICAgICAgVGhlIG1lbW9yeSB1c2FnZSBvZiBOb2RlIHdhcyByZWR1Y2VkIGJ5IDIgbWFjaGlu
ZSB3b3JkcyBwZXIgbm9kZToKKworICAgICAgICAtIHNvdXJjZVVSTCB3YXMgcmVtb3ZlZCBhbmQg
b25seSBrZXB0IG9uIEZ1bmN0aW9uQm9keU5vZGUuIFRoZQorICAgICAgICBzb3VyY2UgVVJMIGNh
biBvbmx5IGJlIGRpc3RpbmN0IHBlciBmdW5jdGlvbiBvciB0b3AtbGV2ZWwgcHJvZ3JhbSBub2Rl
LCAKKyAgICAgICAgYW5kIHlvdSBhbHdheXMgaGF2ZSBvbmUuCisgICAgICAgIAorICAgICAgICAt
IHJlZmNvdW50IHdhcyByZW1vdmVkIGFuZCBrZXB0IGluIGEgc2VwYXJhdGUgaGFzaHRhYmxlIHdo
ZW4KKyAgICAgICAgZ3JlYXRlciB0aGFuIDEuIG5ld05vZGVzIHNldCByZXByZXNlbnRzIGZsb2F0
aW5nIG5vZGVzIHdpdGgKKyAgICAgICAgcmVmY291bnQgb2YgMC4gVGhpcyBoZWxwcyBiZWNhdXNl
IGFsbW9zdCBhbGwgbm9kZXMgaGF2ZSBhIHJlZmNvdW50IG9mIDEKKyAgICAgICAgZm9yIGFsbW9z
dCBhbGwgb2YgdGhlaXIgbGlmZXRpbWUuCisgICAgICAgIAorICAgICAgICAqIGJpbmRpbmdzL3J1
bnRpbWVfbWV0aG9kLmNwcDoKKyAgICAgICAgKFJ1bnRpbWVNZXRob2Q6OlJ1bnRpbWVNZXRob2Qp
OiBQYXNzIG51bGwgYm9keSwgYWRkZWQgRklYTUUuCisgICAgICAgICoga2pzL1BhcnNlci5jcHA6
CisgICAgICAgIChLSlM6OmNsZWFyTmV3Tm9kZXMpOiBOZXcgbm9kZXMgYXJlIHRyYWNrZWQgaW4g
bm9kZXMuY3BwIG5vdywgYnV0IHN0aWxsIGNsZWFyCisgICAgICAgIHRoZW0gYXQgdGhlIGFwcHJv
cHJpYXRlIHRpbWUuCisgICAgICAgICoga2pzL2NvbnRleHQuaDoKKyAgICAgICAgKEtKUzo6Q29u
dGV4dEltcDo6Y3VycmVudEJvZHkpOiBhZGRlZDsgdXNlZCB0byByZXRyaWV2ZSBzb3VyY2UgVVJM
IGFuZCBzaWQKKyAgICAgICAgZm9yIGN1cnJlbnQgY29kZS4KKyAgICAgICAgKEtKUzo6Q29udGV4
dEltcDo6cHVzaEl0ZXJhdGlvbik6IG1vdmVkIGhlcmUgZnJvbSBMYWJlbFN0YWNrCisgICAgICAg
IChLSlM6OkNvbnRleHRJbXA6OnBvcEl0ZXJhdGlvbik6IGRpdHRvCisgICAgICAgIChLSlM6OkNv
bnRleHRJbXA6OmluSXRlcmF0aW9uKTogZGl0dG8KKyAgICAgICAgKEtKUzo6Q29udGV4dEltcDo6
cHVzaFN3aXRjaCk6IGRpdHRvCisgICAgICAgIChLSlM6OkNvbnRleHRJbXA6OnBvcFN3aXRjaCk6
IGRpdHRvCisgICAgICAgIChLSlM6OkNvbnRleHRJbXA6OmluU3dpdGNoKTogZGl0dG8KKyAgICAg
ICAgKiBranMvZnVuY3Rpb24uY3BwOgorICAgICAgICAoS0pTOjpGdW5jdGlvbkltcDo6RnVuY3Rp
b25JbXApOiBBZGQgRnVuY3Rpb25Cb2R5Tm9kZSogcGFyYW1ldGVyLgorICAgICAgICAoS0pTOjpG
dW5jdGlvbkltcDo6Y2FsbEFzRnVuY3Rpb24pOiBQYXNzIGJvZHkgdG8gQ29udGV4dEltcC4KKyAg
ICAgICAgKEtKUzo6RnVuY3Rpb25JbXA6OmFyZ3VtZW50c0dldHRlcik6IF9jb250ZXh0IHJlbmFt
ZWQgdG8gbV9jb250ZXh0LgorICAgICAgICAoS0pTOjpEZWNsYXJlZEZ1bmN0aW9uSW1wOjpEZWNs
YXJlZEZ1bmN0aW9uSW1wKTogUGFzcyBib2R5IHRvIHN1cGVyY2xhc3MKKyAgICAgICAgY29uc3Ry
dWN0b3IuCisgICAgICAgIChLSlM6Okdsb2JhbEZ1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKTogUGFz
cyBwcm9nTm9kZSBhcyBib2R5IGZvciBDb250ZXh0SW1wIGluCisgICAgICAgIGV2YWwuCisgICAg
ICAgICoga2pzL2Z1bmN0aW9uLmg6IE1vdmUgYm9keSBmaWVsZCBmcm9tIERlY2xhcmVkRnVuY3Rp
b25JbXAgdG8KKyAgICAgICAgRnVuY3Rpb25JbXAuCisgICAgICAgICoga2pzL2dyYW1tYXIueTog
Q2hhbmdlIERCRzsgc3RhdGVtZW50cyBubyBsb25nZXIgaGF2ZSBhIHNvdXJjZWlkLgorICAgICAg
ICAqIGtqcy9pbnRlcm5hbC5jcHA6CisgICAgICAgIChLSlM6OkNvbnRleHRJbXA6OkNvbnRleHRJ
bXApOiBJbml0aWFsaXplIG5ldyBtX2N1cnJlbnRCb2R5LCBtX2l0ZXJhdGlvbkRlcHRoCisgICAg
ICAgIGFuZCBtX3N3aXRjaERlcHRoIGRhdGEgbWVtYmVycy4gTmV3IEZ1bmN0aW9uQm9keU5vZGUq
IHBhcmFtZXRlciAtIHRoZQorICAgICAgICBmdW5jdGlvbiBib2R5IHByb3ZpZGVzIHNvdXJjZSBV
UkwgYW5kIFNvdXJjZUlkLgorICAgICAgICAoS0pTOjpJbnRlcnByZXRlckltcDo6bWFyayk6IFVz
ZSBleGNlcHRpb24oKSBmdW5jdGlvbiwgbm90IF9leGNlcHRpb24gZGlyZWN0bHkuCisgICAgICAg
IChLSlM6OkludGVycHJldGVySW1wOjpldmFsdWF0ZSk6IFBhc3MgcHJvZ05vZGUgdG8gQ29udGV4
dEltcCBjb25zdHJ1Y3RvcgorICAgICAgICB0byB1c2UgYXMgdGhlIGJvZHkuCisgICAgICAgICog
a2pzL2ludGVybmFsLmg6CisgICAgICAgIChLSlM6OkxhYmVsU3RhY2s6OkxhYmVsU3RhY2spOiBS
ZW1vdmUgaXRlcmF0aW9uIGRlcHRoIGFuZCBzd2l0Y2ggZGVwdGg7CisgICAgICAgIHN0YXRlbWVu
dCBsYWJlbCBzdGFja3MgZG9uJ3QgbmVlZCB0aGVzZSBhbmQgaXQgYmxvYXRzIHRoZWlyIHNpemUu
IFB1dCB0aGVtCisgICAgICAgIGluIHRoZSBDb250ZXh0SW1wIGluc3RlYWQuCisgICAgICAgICog
a2pzL2ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEtKUzo6RXhlY1N0YXRlOjpsZXhpY2FsSW50
ZXJwcmV0ZXIpOiBSZW5hbWVkIF9jb250ZXh0IHRvIG1fY29udGV4dC4KKyAgICAgICAgKiBranMv
aW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEtKUzo6RXhlY1N0YXRlOjpkeW5hbWljSW50ZXJwcmV0
ZXIpOiBSZW5hbWVkIF9jb250ZXh0IHRvIG1fY29udGV4dC4KKyAgICAgICAgKEtKUzo6RXhlY1N0
YXRlOjpjb250ZXh0KTogZGl0dG8KKyAgICAgICAgKEtKUzo6RXhlY1N0YXRlOjpzZXRFeGNlcHRp
b24pOiBSZW5hbWVkIF9leGNlcHRpb24gdG8gbV9leGNlcHRpb24KKyAgICAgICAgKEtKUzo6RXhl
Y1N0YXRlOjpjbGVhckV4Y2VwdGlvbik6IGRpdHRvCisgICAgICAgIChLSlM6OkV4ZWNTdGF0ZTo6
ZXhjZXB0aW9uKTogZGl0dG8KKyAgICAgICAgKEtKUzo6RXhlY1N0YXRlOjpoYWRFeGNlcHRpb24p
OiBkaXR0bworICAgICAgICAoS0pTOjpFeGVjU3RhdGU6OkV4ZWNTdGF0ZSk6IGRpdHRvIGJvdGgg
YWJvdmUgcmVuYW1lcworICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6CisgICAgICAgIChOb2RlOjpO
b2RlKTogUmVtb3ZlZCBpbml0aWFsaXphdGlvbiBvZiBsaW5lLCBzb3VyY2UgVVJMIGFuZCByZWZj
b3VudC4gQWRkIHRvCisgICAgICAgIGxvY2FsIG5ld05vZGVzIHNldCBpbnN0ZWFkIG9mIGludm9s
dmluZyBwYXJzZXIuCisgICAgICAgIChOb2RlOjpyZWYpOiBJbnN0ZWFkIG9mIG1hbmFnaW5nIHJl
ZmNvdW50IGRpcmVjdGx5LCBzdG9yeSByZWZjb3VudCBvdmVyIDEgaW4gYQorICAgICAgICBIYXNo
Q291bnRlZFNldCwgYW5kIGtlZXAgYSBzZXBhcmF0ZSBIYXNoU2V0IG9mICJmbG9hdGluZyIgbm9k
ZXMgd2l0aCByZWZjb3VudAorICAgICAgICAwLgorICAgICAgICAoTm9kZTo6ZGVyZWYpOiBkaXR0
bworICAgICAgICAoTm9kZTo6cmVmY291bnQpOiBkaXR0bworICAgICAgICAoTm9kZTo6Y2xlYXJO
ZXdOb2Rlcyk6IERlc3Ryb3kgYW55dGhpbmcgbGVmdCBpbiB0aGUgbmV3IG5vZGVzIHNldC4KKyAg
ICAgICAgKGN1cnJlbnRTb3VyY2VJZCk6IElubGluZSBoZWxwZXIgdG8gZ2V0IHNvdXJjZUlkIGZy
b20gZnVuY3Rpb24gYm9keSB2aWEgY29udGV4dC4KKyAgICAgICAgKGN1cnJlbnRTb3VyY2VVUkwp
OiBkaXR0byBmb3Igc291cmNlVVJMLgorICAgICAgICAoTm9kZTo6Y3JlYXRlRXJyb3JDb21wbGV0
aW9uKTogdXNlIG5ldyBoZWxwZXIKKyAgICAgICAgKE5vZGU6OnRocm93RXJyb3IpOiBkaXR0bwor
ICAgICAgICAoTm9kZTo6c2V0RXhjZXB0aW9uRGV0YWlsc0lmTmVlZGVkKTogZGl0dG8KKyAgICAg
ICAgKFN0YXRlbWVudE5vZGU6OlN0YXRlbWVudE5vZGUpOiByZW1vdmUgaW5pdGlhbGl6YXRpb24g
b2YgbDAgYW5kIHNpZCwgcmVuYW1lCisgICAgICAgIGwxIHRvIG1fbGFzdExpbmUuCisgICAgICAg
IChTdGF0ZW1lbnROb2RlOjpzZXRMb2MpOiBTZXQgb3duIG1fbGFzdExpbmUgYW5kIE5vZGUncyBt
X2xpbmUuCisgICAgICAgIChTdGF0ZW1lbnROb2RlOjpoaXRTdGF0ZW1lbnQpOiBHZXQgc2lkLCBm
aXJzdCBsaW5lLCBsYXN0IGxpbmUgaW4gdGhlIHByb3BlciBuZXcgd2F5cy4KKyAgICAgICAgKFN0
YXRMaXN0Tm9kZTo6U3RhdExpc3ROb2RlKTogdXBkYXRlZCBmb3Igc2V0TG9jIGNoYW5nZXMKKyAg
ICAgICAgKEJsb2NrTm9kZTo6QmxvY2tOb2RlKTogZGl0dG8KKyAgICAgICAgKERvV2hpbGVOb2Rl
OjpleGVjdXRlKTogZXhjcGVjdCBpdGVyYXRvbiBjb3VudHMgb24gQ29udGV4dEltcCwgbm90IExh
YmVsU3RhY2sKKyAgICAgICAgKFdoaWxlTm9kZTo6ZXhlY3V0ZSk6IGRpdHRvCisgICAgICAgIChG
b3JOb2RlOjpleGVjdXRlKTogZGl0dG8KKyAgICAgICAgKEZvckluTm9kZTo6ZXhlY3V0ZSk6IGRp
dHRvCisgICAgICAgIChDb250aW51ZU5vZGU6OmV4ZWN1dGUpOiBleGNwZWN0IGluSXRlcmF0aW9u
IG9uIENvbnRleHRJbXAsIG5vdCBMYWJlbFN0YWNrCisgICAgICAgIChCcmVha05vZGU6OmV4ZWN1
dGUpOiBleGNwZWN0IGluSXRlcmF0aW9uIGFuZCBpblN3aXRjaCBvbiBDb250ZXh0SW1wLCBub3Qg
TGFiZWxTdGFjaworICAgICAgICAoU3dpdGNoTm9kZTo6ZXhlY3V0ZSk6IGV4cGVjdCBzd2l0Y2gg
Y291bnRzIG9uIENvbnRleHRJbXAsIG5vdCBMYWJlbFN0YWNrCisgICAgICAgIChGdW5jdGlvbkJv
ZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKTogdXBkYXRlIGZvciBuZXcgc2V0TG9jCisgICAgICAg
IChGdW5jdGlvbkJvZHlOb2RlOjpwcm9jZXNzRnVuY0RlY2wpOiByZWluZGVudAorICAgICAgICAo
U291cmNlRWxlbWVudHNOb2RlOjpTb3VyY2VFbGVtZW50c05vZGUpOiB1cGRhdGUgZm9yIG5ldyBz
ZXRMb2MKKyAgICAgICAgKiBranMvbm9kZXMuaDoKKyAgICAgICAgKEtKUzo6Tm9kZTo6bGluZU5v
KTogUmVuYW1lZCBfbGluZSB0byBtX2xpbmUKKyAgICAgICAgKEtKUzo6U3RhdGVtZW50Tm9kZTo6
Zmlyc3RMaW5lKTogVXNlIGxpbmVObygpCisgICAgICAgIChLSlM6OlN0YXRlbWVudE5vZGU6Omxh
c3RMaW5lKTogUmVuYW1lZCBsMSB0byBtX2xpbmUKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25Cb2R5
Tm9kZTo6c291cmNlSWQpOiBhZGRlZAorICAgICAgICAoS0pTOjpGdW5jdGlvbkJvZHlOb2RlOjpz
b3VyY2VVUkwpOiBhZGRlZAorICAgICAgICAqIGtqcy90ZXN0a2pzLmNwcDoKKwogMjAwNi0wMy0x
NCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIC0gRml4ZWQg
PHJkYXI6Ly9wcm9ibGVtLzQ0NzgyMzk+IHN0cmluZyBzb3J0IHB1dHMgImNsb3NlZCIgYmVmb3Jl
IApJbmRleDoga2pzL2ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvaW50ZXJwcmV0
ZXIuY3BwCShyZXZpc2lvbiAxMzI5OSkKKysrIGtqcy9pbnRlcnByZXRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2MSwxMSArMzYxLDExIEBAIHZvaWQgSW50ZXJwcmV0ZXI6OnZpcnR1YWxfaG9v
ayggaW50LCB2b2kKIAogSW50ZXJwcmV0ZXIgKkV4ZWNTdGF0ZTo6bGV4aWNhbEludGVycHJldGVy
KCkgY29uc3QKIHsKLSAgaWYgKCFfY29udGV4dCkgeworICBpZiAoIW1fY29udGV4dCkgewogICAg
IHJldHVybiBkeW5hbWljSW50ZXJwcmV0ZXIoKTsKICAgfQogCi0gIEludGVycHJldGVySW1wICpy
ZXN1bHQgPSBJbnRlcnByZXRlckltcDo6aW50ZXJwcmV0ZXJXaXRoR2xvYmFsT2JqZWN0KF9jb250
ZXh0LT5zY29wZUNoYWluKCkuYm90dG9tKCkpOworICBJbnRlcnByZXRlckltcCAqcmVzdWx0ID0g
SW50ZXJwcmV0ZXJJbXA6OmludGVycHJldGVyV2l0aEdsb2JhbE9iamVjdChtX2NvbnRleHQtPnNj
b3BlQ2hhaW4oKS5ib3R0b20oKSk7CiAKICAgaWYgKCFyZXN1bHQpIHsKICAgICByZXR1cm4gZHlu
YW1pY0ludGVycHJldGVyKCk7CkluZGV4OiBranMvaW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtqcy9pbnRlcm5hbC5jcHAJKHJldmlzaW9uIDEzMjk5KQorKysga2pzL2ludGVybmFsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg4LDkgKzE4OCwxNSBAQCBib29sIExhYmVsU3RhY2s6OmNvbnRh
aW5zKGNvbnN0IElkZW50aWZpCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29u
dGV4dEltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBFQ01BIDEw
LjIKLUNvbnRleHRJbXA6OkNvbnRleHRJbXAoSlNPYmplY3QgKmdsb2IsIEludGVycHJldGVySW1w
ICppbnRlcnByZXRlciwgSlNPYmplY3QgKnRoaXNWLCBDb2RlVHlwZSB0eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICBDb250ZXh0SW1wICpjYWxsaW5nQ29uLCBGdW5jdGlvbkltcCAqZnVuYywg
Y29uc3QgTGlzdCAqYXJncykKLSAgICA6IF9pbnRlcnByZXRlcihpbnRlcnByZXRlciksIF9mdW5j
dGlvbihmdW5jKSwgX2FyZ3VtZW50cyhhcmdzKQorQ29udGV4dEltcDo6Q29udGV4dEltcChKU09i
amVjdCAqZ2xvYiwgSW50ZXJwcmV0ZXJJbXAgKmludGVycHJldGVyLCBKU09iamVjdCAqdGhpc1Ys
IEZ1bmN0aW9uQm9keU5vZGUqIGN1cnJlbnRCb2R5LAorICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgQ29kZVR5cGUgdHlwZSwgQ29udGV4dEltcCAqY2FsbGlu
Z0NvbiwgRnVuY3Rpb25JbXAgKmZ1bmMsIGNvbnN0IExpc3QgKmFyZ3MpCisgICAgOiBfaW50ZXJw
cmV0ZXIoaW50ZXJwcmV0ZXIpCisgICAgLCBtX2N1cnJlbnRCb2R5KGN1cnJlbnRCb2R5KQorICAg
ICwgX2Z1bmN0aW9uKGZ1bmMpCisgICAgLCBfYXJndW1lbnRzKGFyZ3MpCisgICAgLCBtX2l0ZXJh
dGlvbkRlcHRoKDApCisgICAgLCBtX3N3aXRjaERlcHRoKDApIAogewogICBtX2NvZGVUeXBlID0g
dHlwZTsKICAgX2NhbGxpbmdDb250ZXh0ID0gY2FsbGluZ0NvbjsKQEAgLTQ0Miw4ICs0NDgsOCBA
QCB2b2lkIEludGVycHJldGVySW1wOjptYXJrKCkKICAgICBfY29udGV4dC0+bWFyaygpOwogICBp
ZiAoZ2xvYmFsKQogICAgICAgZ2xvYmFsLT5tYXJrKCk7Ci0gIGlmIChnbG9iRXhlYy5fZXhjZXB0
aW9uKQotICAgICAgZ2xvYkV4ZWMuX2V4Y2VwdGlvbi0+bWFyaygpOworICBpZiAoZ2xvYkV4ZWMu
ZXhjZXB0aW9uKCkpCisgICAgICBnbG9iRXhlYy5leGNlcHRpb24oKS0+bWFyaygpOwogfQogCiBi
b29sIEludGVycHJldGVySW1wOjpjaGVja1N5bnRheChjb25zdCBVU3RyaW5nICZjb2RlKQpAQCAt
NDk3LDcgKzUwMyw3IEBAIENvbXBsZXRpb24gSW50ZXJwcmV0ZXJJbXA6OmV2YWx1YXRlKGNvbnMK
ICAgICByZXMgPSBDb21wbGV0aW9uKFRocm93LCBnbG9iRXhlYy5leGNlcHRpb24oKSk7CiAgIGVs
c2UgewogICAgIC8vIGV4ZWN1dGUgdGhlIGNvZGUKLSAgICBDb250ZXh0SW1wIGN0eChnbG9iYWxP
YmosIHRoaXMsIHRoaXNPYmopOworICAgIENvbnRleHRJbXAgY3R4KGdsb2JhbE9iaiwgdGhpcywg
dGhpc09iaiwgcHJvZ05vZGUuZ2V0KCkpOwogICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKG1faW50ZXJw
cmV0ZXIsICZjdHgpOwogICAgIHByb2dOb2RlLT5wcm9jZXNzVmFyRGVjbHMoJm5ld0V4ZWMpOwog
ICAgIHJlcyA9IHByb2dOb2RlLT5leGVjdXRlKCZuZXdFeGVjKTsKSW5kZXg6IGtqcy9mdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtqcy9mdW5jdGlvbi5oCShyZXZpc2lvbiAxMzI5OSkKKysrIGtq
cy9mdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICBjbGFzcyBGdW5jdGlvbkltcCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsK
ICAgICBmcmllbmQgY2xhc3MgQWN0aXZhdGlvbkltcDsKICAgcHVibGljOgotICAgIEZ1bmN0aW9u
SW1wKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmbiA9IElkZW50aWZpZXI6Om51
bGwoKSk7CisgICAgRnVuY3Rpb25JbXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBuLCBGdW5jdGlvbkJvZHlOb2RlKiBiKTsKICAgICB2aXJ0dWFsIH5GdW5jdGlvbkltcCgpOwog
CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3Qg
SWRlbnRpZmllciAmLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTU4LDYgKzU4LDkgQEAgbmFtZXNwYWNl
IEtKUyB7CiAKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CisKKyAg
ICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keTsKKwogICBwcm90ZWN0ZWQ6CiAgICAgT3du
UHRyPFBhcmFtZXRlcj4gcGFyYW07CiAKQEAgLTc5LDEwICs4MiwxMCBAQCBuYW1lc3BhY2UgS0pT
IHsKIAogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAg
ICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBGdW5jdGlvbkNvZGU7IH0KLSAg
ICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keTsKIAogICAgIHZpcnR1YWwgY29uc3QgQ2xh
c3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gaW5mbzsKKwogICBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsKICAgfTsKSW5kZXg6IGtqcy9pbnRlcm5hbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtqcy9pbnRlcm5hbC5oCShyZXZpc2lvbiAxMzI5OSkKKysrIGtqcy9p
bnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5MywxMCBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICovCiAgIGNsYXNzIExhYmVsU3RhY2sgOiBOb25jb3B5YWJsZSB7CiAgIHB1YmxpYzoK
LSAgICBMYWJlbFN0YWNrKCk6IHRvcygwKSwgaXRlcmF0aW9uRGVwdGgoMCksIHN3aXRjaERlcHRo
KDApIHt9CisgICAgTGFiZWxTdGFjaygpCisgICAgICA6IHRvcygwKQorICAgIHsKKyAgICB9CiAg
ICAgfkxhYmVsU3RhY2soKTsKIAogICAgIC8qKgpAQCAtMTEwLDE0ICsxMTMsNiBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgKi8KICAgICB2b2lkIHBvcCgpOwogICAgIAotICAgIHZvaWQgcHVzaEl0
ZXJhdGlvbigpIHsgaXRlcmF0aW9uRGVwdGgrKzsgfQotICAgIHZvaWQgcG9wSXRlcmF0aW9uKCkg
eyBpdGVyYXRpb25EZXB0aC0tOyB9Ci0gICAgYm9vbCBpbkl0ZXJhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIChpdGVyYXRpb25EZXB0aCA+IDApOyB9Ci0gICAgCi0gICAgdm9pZCBwdXNoU3dpdGNoKCkg
eyBzd2l0Y2hEZXB0aCsrOyB9Ci0gICAgdm9pZCBwb3BTd2l0Y2goKSB7IHN3aXRjaERlcHRoLS07
IH0KLSAgICBib29sIGluU3dpdGNoKCkgY29uc3QgeyByZXR1cm4gKHN3aXRjaERlcHRoID4gMCk7
IH0KLSAgICAKICAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgU3RhY2tFbGVtIHsKICAgICAgIElkZW50
aWZpZXIgaWQ7CkBAIC0xMjUsOCArMTIwLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgfTsKIAog
ICAgIFN0YWNrRWxlbSAqdG9zOwotICAgIGludCBpdGVyYXRpb25EZXB0aDsKLSAgICBpbnQgc3dp
dGNoRGVwdGg7CiAgIH07CiAKIApJbmRleDoga2pzL2Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBranMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxMzI5OSkKKysrIGtqcy9mdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDkgKzU1LDEwIEBAIGNvbnN0IENsYXNzSW5mbyBGdW5jdGlv
bkltcDo6aW5mbyA9IHsiRnUKICAgICBPd25QdHI8UGFyYW1ldGVyPiBuZXh0OwogICB9OwogCi1G
dW5jdGlvbkltcDo6RnVuY3Rpb25JbXAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZuKQorRnVuY3Rpb25JbXA6OkZ1bmN0aW9uSW1wKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmbiwgRnVuY3Rpb25Cb2R5Tm9kZSogYikKICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1w
KHN0YXRpY19jYXN0PEZ1bmN0aW9uUHJvdG90eXBlKj4KICAgICAgICAgICAgICAgICAgICAgICAg
IChleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkZ1bmN0aW9uUHJvdG90eXBlKCkp
LCBuKQorICAsIGJvZHkoYikKIHsKIH0KIApAQCAtNjUsMTMgKzY2LDEzIEBAIEZ1bmN0aW9uSW1w
Ojp+RnVuY3Rpb25JbXAoKQogewogfQogCi1KU1ZhbHVlICpGdW5jdGlvbkltcDo6Y2FsbEFzRnVu
Y3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cykKK0pTVmFsdWUgKkZ1bmN0aW9uSW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewogICBKU09iamVjdCAqZ2xv
YmFsT2JqID0gZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpOwogCiAg
IC8vIGVudGVyIGEgbmV3IGV4ZWN1dGlvbiBjb250ZXh0Ci0gIENvbnRleHRJbXAgY3R4KGdsb2Jh
bE9iaiwgZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmltcCgpLCB0aGlzT2JqLCBjb2RlVHlw
ZSgpLAotICAgICAgICAgICAgICAgICBleGVjLT5jb250ZXh0KCkuaW1wKCksIHRoaXMsICZhcmdz
KTsKKyAgQ29udGV4dEltcCBjdHgoZ2xvYmFsT2JqLCBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIo
KS0+aW1wKCksIHRoaXNPYmosIGJvZHkuZ2V0KCksCisgICAgICAgICAgICAgICAgIGNvZGVUeXBl
KCksIGV4ZWMtPmNvbnRleHQoKS5pbXAoKSwgdGhpcywgJmFyZ3MpOwogICBFeGVjU3RhdGUgbmV3
RXhlYyhleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKSwgJmN0eCk7CiAgIG5ld0V4ZWMuc2V0RXhj
ZXB0aW9uKGV4ZWMtPmV4Y2VwdGlvbigpKTsgLy8gY291bGQgYmUgbnVsbAogCkBAIC0yMDIsNyAr
MjAzLDcgQEAgdm9pZCBGdW5jdGlvbkltcDo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdAogSlNWYWx1
ZSAqRnVuY3Rpb25JbXA6OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgIEZ1bmN0aW9uSW1wICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25JbXAg
Kj4oc2xvdC5zbG90QmFzZSgpKTsKLSAgQ29udGV4dEltcCAqY29udGV4dCA9IGV4ZWMtPl9jb250
ZXh0OworICBDb250ZXh0SW1wICpjb250ZXh0ID0gZXhlYy0+bV9jb250ZXh0OwogICB3aGlsZSAo
Y29udGV4dCkgewogICAgIGlmIChjb250ZXh0LT5mdW5jdGlvbigpID09IHRoaXNPYmopIHsKICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wICo+KGNvbnRleHQtPmFjdGl2YXRp
b25PYmplY3QoKSktPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMjk0LDcgKzI5NSw3IEBA
IGNvbnN0IENsYXNzSW5mbyBEZWNsYXJlZEZ1bmN0aW9uSW1wOjppbmYKIAogRGVjbGFyZWRGdW5j
dGlvbkltcDo6RGVjbGFyZWRGdW5jdGlvbkltcChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJm4sCiAJCQkJCSBGdW5jdGlvbkJvZHlOb2RlICpiLCBjb25zdCBTY29wZUNoYWluICZz
YykKLSAgOiBGdW5jdGlvbkltcChleGVjLG4pLCBib2R5KGIpCisgIDogRnVuY3Rpb25JbXAoZXhl
YywgbiwgYikKIHsKICAgc2V0U2NvcGUoc2MpOwogfQpAQCAtODAzLDYgKzgwNCw3IEBAIEpTVmFs
dWUgKkdsb2JhbEZ1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKEUKICAgICAgICAgQ29udGV4dEltcCBj
dHgoZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+aW1wKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXNWYWwsCisgICAgICAgICAgICAgICAgICAgICAgIHByb2dOb2Rl
LmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICBFdmFsQ29kZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgZXhlYy0+Y29udGV4dCgpLmltcCgpKTsKICAgICAgICAgCkluZGV4OiBranMvbm9k
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDEzMjk5KQorKysg
a2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQAogI2luY2x1ZGUg
Im9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJ1c3RyaW5nLmgiCiAjaW5jbHVkZSAicmVmZXJlbmNl
X2xpc3QuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8a3htbGNv
cmUvSGFzaENvdW50ZWRTZXQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEtKUzsKIApAQCAtOTUsMTYg
Kzk3LDE4IEBAIGludCBOb2RlQ291bnRlcjo6Y291bnQgPSAwOwogc3RhdGljIE5vZGVDb3VudGVy
IG5vZGVJbXBsQ291bnRlcjsKICNlbmRpZiBOREVCVUcKIAorc3RhdGljIEhhc2hTZXQ8Tm9kZSo+
KiBuZXdOb2RlczsKK3N0YXRpYyBIYXNoQ291bnRlZFNldDxOb2RlKj4qIG5vZGVFeHRyYVJlZkNv
dW50czsKIAogTm9kZTo6Tm9kZSgpCiB7CiAjaWZuZGVmIE5ERUJVRwogICAgICsrTm9kZUNvdW50
ZXI6OmNvdW50OwogI2VuZGlmCi0gIGxpbmUgPSBMZXhlcjo6Y3VycigpLT5saW5lTm8oKTsKLSAg
c291cmNlVVJMID0gTGV4ZXI6OmN1cnIoKS0+c291cmNlVVJMKCk7Ci0gIG1fcmVmY291bnQgPSAw
OwotICBQYXJzZXI6OnNhdmVOZXdOb2RlKHRoaXMpOworICBtX2xpbmUgPSBMZXhlcjo6Y3Vycigp
LT5saW5lTm8oKTsKKyAgaWYgKCFuZXdOb2RlcykKKyAgICAgIG5ld05vZGVzID0gbmV3IEhhc2hT
ZXQ8Tm9kZSo+OworICBuZXdOb2Rlcy0+YWRkKHRoaXMpOwogfQogCiBOb2RlOjp+Tm9kZSgpCkBA
IC0xMTQsNiArMTE4LDUxIEBAIE5vZGU6On5Ob2RlKCkKICNlbmRpZgogfQogCit2b2lkIE5vZGU6
OnJlZigpCit7CisgICAgLy8gYnVtcGluZyBmcm9tIDAgdG8gMSBpcyBqdXN0IHJlbW92aW5nIGZy
b20gdGhlIG5ldyBub2RlcyBzZXQKKyAgICBpZiAobmV3Tm9kZXMpIHsKKyAgICAgICAgSGFzaFNl
dDxOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbmV3Tm9kZXMtPmZpbmQodGhpcyk7CisgICAgICAgIGlm
IChpdCAhPSBuZXdOb2Rlcy0+ZW5kKCkpIHsKKyAgICAgICAgICAgIG5ld05vZGVzLT5yZW1vdmUo
aXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSAgIAorICAgIAorICAg
IGlmICghbm9kZUV4dHJhUmVmQ291bnRzKQorICAgICAgICBub2RlRXh0cmFSZWZDb3VudHMgPSBu
ZXcgSGFzaENvdW50ZWRTZXQ8Tm9kZSo+OworICAgIG5vZGVFeHRyYVJlZkNvdW50cy0+YWRkKHRo
aXMpOworfQorCit2b2lkIE5vZGU6OmRlcmVmKCkKK3sKKyAgICBIYXNoQ291bnRlZFNldDxOb2Rl
Kj46Oml0ZXJhdG9yIGl0ID0gbm9kZUV4dHJhUmVmQ291bnRzLT5maW5kKHRoaXMpOworICAgIGlm
IChpdCA9PSBub2RlRXh0cmFSZWZDb3VudHMtPmVuZCgpKQorICAgICAgICBkZWxldGUgdGhpczsK
KyAgICBlbHNlCisgICAgICAgIG5vZGVFeHRyYVJlZkNvdW50cy0+cmVtb3ZlKGl0KTsKK30KKwor
dW5zaWduZWQgaW50IE5vZGU6OnJlZmNvdW50KCkgCit7CisgICAgaWYgKG5ld05vZGVzICYmIG5l
d05vZGVzLT5jb250YWlucyh0aGlzKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIW5v
ZGVFeHRyYVJlZkNvdW50cykKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMSArIG5v
ZGVFeHRyYVJlZkNvdW50cy0+Y291bnQodGhpcyk7Cit9CisKK3ZvaWQgTm9kZTo6Y2xlYXJOZXdO
b2RlcygpCit7CisgICAgaWYgKG5ld05vZGVzKSB7CisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygq
bmV3Tm9kZXMpOworICAgICAgICBkZWxldGUgbmV3Tm9kZXM7CisgICAgICAgIG5ld05vZGVzID0g
MDsKKyAgICB9Cit9CisKIHN0YXRpYyB2b2lkIHN1YnN0aXR1dGUoVVN0cmluZyAmc3RyaW5nLCBj
b25zdCBVU3RyaW5nICZzdWJzdHJpbmcpCiB7CiAgICAgaW50IHBvc2l0aW9uID0gc3RyaW5nLmZp
bmQoIiVzIik7CkBAIC0xMjEsMjEgKzE3MCwzMSBAQCBzdGF0aWMgdm9pZCBzdWJzdGl0dXRlKFVT
dHJpbmcgJnN0cmluZywgCiAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cigwLCBwb3NpdGlvbikg
KyBzdWJzdHJpbmcgKyBzdHJpbmcuc3Vic3RyKHBvc2l0aW9uICsgMik7CiB9CiAKLUNvbXBsZXRp
b24gTm9kZTo6Y3JlYXRlRXJyb3JDb21wbGV0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBl
IGUsIGNvbnN0IGNoYXIgKm1zZykKK3N0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRTb3VyY2VJZChF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csIEVycm9yOjpj
cmVhdGUoZXhlYywgZSwgbXNnLCBsaW5lTm8oKSwgc291cmNlSWQoKSwgJnNvdXJjZVVSTCkpOwor
ICAgIHJldHVybiBleGVjLT5jb250ZXh0KCkuaW1wKCktPmN1cnJlbnRCb2R5KCktPnNvdXJjZUlk
KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgVVN0cmluZyYgY3VycmVudFNvdXJjZVVSTChF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+Y3Vy
cmVudEJvZHkoKS0+c291cmNlVVJMKCk7Cit9CisKK0NvbXBsZXRpb24gTm9kZTo6Y3JlYXRlRXJy
b3JDb21wbGV0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1z
ZykKK3sKKyAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgRXJyb3I6OmNyZWF0ZShleGVjLCBl
LCBtc2csIGxpbmVObygpLCBjdXJyZW50U291cmNlSWQoZXhlYyksICZjdXJyZW50U291cmNlVVJM
KGV4ZWMpKSk7CiB9CiAKIENvbXBsZXRpb24gTm9kZTo6Y3JlYXRlRXJyb3JDb21wbGV0aW9uKEV4
ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1zZywgY29uc3QgSWRlbnRp
ZmllciAmaWRlbnQpCiB7CiAgICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOwogICAgIHN1YnN0aXR1
dGUobWVzc2FnZSwgaWRlbnQudXN0cmluZygpKTsKLSAgICByZXR1cm4gQ29tcGxldGlvbihUaHJv
dywgRXJyb3I6OmNyZWF0ZShleGVjLCBlLCBtZXNzYWdlLCBsaW5lTm8oKSwgc291cmNlSWQoKSwg
JnNvdXJjZVVSTCkpOworICAgIHJldHVybiBDb21wbGV0aW9uKFRocm93LCBFcnJvcjo6Y3JlYXRl
KGV4ZWMsIGUsIG1lc3NhZ2UsIGxpbmVObygpLCBjdXJyZW50U291cmNlSWQoZXhlYyksICZjdXJy
ZW50U291cmNlVVJMKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgKk5vZGU6OnRocm93RXJyb3IoRXhl
Y1N0YXRlICpleGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciAqbXNnKQorSlNWYWx1ZSAqTm9k
ZTo6dGhyb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyICpt
c2cpCiB7Ci0gICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtc2csIGxpbmVObygp
LCBzb3VyY2VJZCgpLCAmc291cmNlVVJMKTsKKyAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4
ZWMsIGUsIG1zZywgbGluZU5vKCksIGN1cnJlbnRTb3VyY2VJZChleGVjKSwgJmN1cnJlbnRTb3Vy
Y2VVUkwoZXhlYykpOwogfQogCiBKU1ZhbHVlICpOb2RlOjp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAq
ZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1zZywgSlNWYWx1ZSAqdiwgTm9kZSAqZXhw
cikKQEAgLTE0Myw3ICsyMDIsNyBAQCBKU1ZhbHVlICpOb2RlOjp0aHJvd0Vycm9yKEV4ZWNTdGF0
ZSAqZXhlCiAgICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOwogICAgIHN1YnN0aXR1dGUobWVzc2Fn
ZSwgdi0+dG9TdHJpbmcoZXhlYykpOwogICAgIHN1YnN0aXR1dGUobWVzc2FnZSwgZXhwci0+dG9T
dHJpbmcoKSk7Ci0gICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtZXNzYWdlLCBs
aW5lTm8oKSwgc291cmNlSWQoKSwgJnNvdXJjZVVSTCk7CisgICAgcmV0dXJuIEtKUzo6dGhyb3dF
cnJvcihleGVjLCBlLCBtZXNzYWdlLCBsaW5lTm8oKSwgY3VycmVudFNvdXJjZUlkKGV4ZWMpLCAm
Y3VycmVudFNvdXJjZVVSTChleGVjKSk7CiB9CiAKIApAQCAtMTUxLDcgKzIxMCw3IEBAIEpTVmFs
dWUgKk5vZGU6OnRocm93RXJyb3IoRXhlY1N0YXRlICpleGUKIHsKICAgICBVU3RyaW5nIG1lc3Nh
Z2UgPSBtc2c7CiAgICAgc3Vic3RpdHV0ZShtZXNzYWdlLCBsYWJlbC51c3RyaW5nKCkpOwotICAg
IHJldHVybiBLSlM6OnRocm93RXJyb3IoZXhlYywgZSwgbWVzc2FnZSwgbGluZU5vKCksIHNvdXJj
ZUlkKCksICZzb3VyY2VVUkwpOworICAgIHJldHVybiBLSlM6OnRocm93RXJyb3IoZXhlYywgZSwg
bWVzc2FnZSwgbGluZU5vKCksIGN1cnJlbnRTb3VyY2VJZChleGVjKSwgJmN1cnJlbnRTb3VyY2VV
UkwoZXhlYykpOwogfQogCiBKU1ZhbHVlICpOb2RlOjp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqZXhl
YywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1zZywgSlNWYWx1ZSAqdiwgTm9kZSAqZTEsIE5v
ZGUgKmUyKQpAQCAtMTYwLDcgKzIxOSw3IEBAIEpTVmFsdWUgKk5vZGU6OnRocm93RXJyb3IoRXhl
Y1N0YXRlICpleGUKICAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIHYtPnRvU3RyaW5nKGV4ZWMpKTsK
ICAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGUxLT50b1N0cmluZygpKTsKICAgICBzdWJzdGl0dXRl
KG1lc3NhZ2UsIGUyLT50b1N0cmluZygpKTsKLSAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4
ZWMsIGUsIG1lc3NhZ2UsIGxpbmVObygpLCBzb3VyY2VJZCgpLCAmc291cmNlVVJMKTsKKyAgICBy
ZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUsIG1lc3NhZ2UsIGxpbmVObygpLCBjdXJyZW50
U291cmNlSWQoZXhlYyksICZjdXJyZW50U291cmNlVVJMKGV4ZWMpKTsKIH0KIAogSlNWYWx1ZSAq
Tm9kZTo6dGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFy
ICptc2csIEpTVmFsdWUgKnYsIE5vZGUgKmV4cHIsIGNvbnN0IElkZW50aWZpZXIgJmxhYmVsKQpA
QCAtMTY5LDcgKzIyOCw3IEBAIEpTVmFsdWUgKk5vZGU6OnRocm93RXJyb3IoRXhlY1N0YXRlICpl
eGUKICAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIHYtPnRvU3RyaW5nKGV4ZWMpKTsKICAgICBzdWJz
dGl0dXRlKG1lc3NhZ2UsIGV4cHItPnRvU3RyaW5nKCkpOwogICAgIHN1YnN0aXR1dGUobWVzc2Fn
ZSwgbGFiZWwudXN0cmluZygpKTsKLSAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUs
IG1lc3NhZ2UsIGxpbmVObygpLCBzb3VyY2VJZCgpLCAmc291cmNlVVJMKTsKKyAgICByZXR1cm4g
S0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUsIG1lc3NhZ2UsIGxpbmVObygpLCBjdXJyZW50U291cmNl
SWQoZXhlYyksICZjdXJyZW50U291cmNlVVJMKGV4ZWMpKTsKIH0KIAogSlNWYWx1ZSAqTm9kZTo6
dGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyICptc2cs
IEpTVmFsdWUgKnYsIGNvbnN0IElkZW50aWZpZXIgJmxhYmVsKQpAQCAtMTc3LDcgKzIzNiw3IEBA
IEpTVmFsdWUgKk5vZGU6OnRocm93RXJyb3IoRXhlY1N0YXRlICpleGUKICAgICBVU3RyaW5nIG1l
c3NhZ2UgPSBtc2c7CiAgICAgc3Vic3RpdHV0ZShtZXNzYWdlLCB2LT50b1N0cmluZyhleGVjKSk7
CiAgICAgc3Vic3RpdHV0ZShtZXNzYWdlLCBsYWJlbC51c3RyaW5nKCkpOwotICAgIHJldHVybiBL
SlM6OnRocm93RXJyb3IoZXhlYywgZSwgbWVzc2FnZSwgbGluZU5vKCksIHNvdXJjZUlkKCksICZz
b3VyY2VVUkwpOworICAgIHJldHVybiBLSlM6OnRocm93RXJyb3IoZXhlYywgZSwgbWVzc2FnZSwg
bGluZU5vKCksIGN1cnJlbnRTb3VyY2VJZChleGVjKSwgJmN1cnJlbnRTb3VyY2VVUkwoZXhlYykp
OwogfQogCiBKU1ZhbHVlICpOb2RlOjp0aHJvd1VuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZpZGVudCkKQEAgLTE5MSw4ICsyNTAsOCBAQCB2
b2lkIE5vZGU6OnNldEV4Y2VwdGlvbkRldGFpbHNJZk5lZWRlZChFCiAgICAgaWYgKGV4Y2VwdGlv
blZhbHVlLT5pc09iamVjdCgpKSB7CiAgICAgICAgIEpTT2JqZWN0ICpleGNlcHRpb24gPSBzdGF0
aWNfY2FzdDxKU09iamVjdCAqPihleGNlcHRpb25WYWx1ZSk7CiAgICAgICAgIGlmICghZXhjZXB0
aW9uLT5oYXNQcm9wZXJ0eShleGVjLCAibGluZSIpICYmICFleGNlcHRpb24tPmhhc1Byb3BlcnR5
KGV4ZWMsICJzb3VyY2VVUkwiKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uLT5wdXQoZXhlYywg
ImxpbmUiLCBqc051bWJlcihsaW5lKSk7Ci0gICAgICAgICAgICBleGNlcHRpb24tPnB1dChleGVj
LCAic291cmNlVVJMIiwganNTdHJpbmcoc291cmNlVVJMKSk7CisgICAgICAgICAgICBleGNlcHRp
b24tPnB1dChleGVjLCAibGluZSIsIGpzTnVtYmVyKG1fbGluZSkpOworICAgICAgICAgICAgZXhj
ZXB0aW9uLT5wdXQoZXhlYywgInNvdXJjZVVSTCIsIGpzU3RyaW5nKGN1cnJlbnRTb3VyY2VVUkwo
ZXhlYykpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTIwNCwyMyArMjYzLDI0IEBAIE5vZGUg
Kk5vZGU6Om5vZGVJbnNpZGVBbGxQYXJlbnMoKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gU3RhdGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1TdGF0ZW1lbnROb2RlOjpTdGF0ZW1lbnROb2RlKCkgOiBsMCgtMSksIGwxKC0xKSwgc2lkKC0x
KQorU3RhdGVtZW50Tm9kZTo6U3RhdGVtZW50Tm9kZSgpIAorICAgIDogbV9sYXN0TGluZSgtMSkK
IHsKKyAgICBtX2xpbmUgPSAtMTsKIH0KIAotdm9pZCBTdGF0ZW1lbnROb2RlOjpzZXRMb2MoaW50
IGxpbmUwLCBpbnQgbGluZTEsIGludCBzb3VyY2VJZCkKK3ZvaWQgU3RhdGVtZW50Tm9kZTo6c2V0
TG9jKGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKIHsKLSAgICBsMCA9IGxpbmUwOwotICAg
IGwxID0gbGluZTE7Ci0gICAgc2lkID0gc291cmNlSWQ7CisgICAgbV9saW5lID0gZmlyc3RMaW5l
OworICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKIH0KIAogLy8gcmV0dXJuIHRydWUgaWYgdGhl
IGRlYnVnZ2VyIHdhbnRzIHVzIHRvIHN0b3AgYXQgdGhpcyBwb2ludAotYm9vbCBTdGF0ZW1lbnRO
b2RlOjpoaXRTdGF0ZW1lbnQoRXhlY1N0YXRlICpleGVjKQorYm9vbCBTdGF0ZW1lbnROb2RlOjpo
aXRTdGF0ZW1lbnQoRXhlY1N0YXRlKiBleGVjKQogewogICBEZWJ1Z2dlciAqZGJnID0gZXhlYy0+
ZHluYW1pY0ludGVycHJldGVyKCktPmltcCgpLT5kZWJ1Z2dlcigpOwogICBpZiAoZGJnKQotICAg
IHJldHVybiBkYmctPmF0U3RhdGVtZW50KGV4ZWMsc2lkLGwwLGwxKTsKKyAgICByZXR1cm4gZGJn
LT5hdFN0YXRlbWVudChleGVjLCBjdXJyZW50U291cmNlSWQoZXhlYyksIGZpcnN0TGluZSgpLCBs
YXN0TGluZSgpKTsKICAgZWxzZQogICAgIHJldHVybiB0cnVlOyAvLyBjb250aW51ZQogfQpAQCAt
MTQ0MiwxNCArMTUwMiwxNCBAQCBTdGF0TGlzdE5vZGU6OlN0YXRMaXN0Tm9kZShTdGF0ZW1lbnRO
b2RlCiAgIDogc3RhdGVtZW50KHMpLCBuZXh0KHRoaXMpCiB7CiAgICAgUGFyc2VyOjpub3RlTm9k
ZUN5Y2xlKHRoaXMpOwotICAgIHNldExvYyhzLT5maXJzdExpbmUoKSwgcy0+bGFzdExpbmUoKSwg
cy0+c291cmNlSWQoKSk7CisgICAgc2V0TG9jKHMtPmZpcnN0TGluZSgpLCBzLT5sYXN0TGluZSgp
KTsKIH0KICAKIFN0YXRMaXN0Tm9kZTo6U3RhdExpc3ROb2RlKFN0YXRMaXN0Tm9kZSAqbCwgU3Rh
dGVtZW50Tm9kZSAqcykKICAgOiBzdGF0ZW1lbnQocyksIG5leHQobC0+bmV4dCkKIHsKICAgbC0+
bmV4dCA9IHRoaXM7Ci0gIHNldExvYyhsLT5maXJzdExpbmUoKSwgcy0+bGFzdExpbmUoKSwgbC0+
c291cmNlSWQoKSk7CisgIHNldExvYyhsLT5maXJzdExpbmUoKSwgcy0+bGFzdExpbmUoKSk7CiB9
CiAKIC8vIEVDTUEgMTIuMQpAQCAtMTYwMCw3ICsxNjYwLDcgQEAgQmxvY2tOb2RlOjpCbG9ja05v
ZGUoU291cmNlRWxlbWVudHNOb2RlIAogICAgIHNvdXJjZSA9IHMtPm5leHQ7CiAgICAgUGFyc2Vy
OjpyZW1vdmVOb2RlQ3ljbGUoc291cmNlLmdldCgpKTsKICAgICBzLT5uZXh0ID0gMDsKLSAgICBz
ZXRMb2Mocy0+Zmlyc3RMaW5lKCksIHMtPmxhc3RMaW5lKCksIHMtPnNvdXJjZUlkKCkpOworICAg
IHNldExvYyhzLT5maXJzdExpbmUoKSwgcy0+bGFzdExpbmUoKSk7CiAgIH0gZWxzZSB7CiAgICAg
c291cmNlID0gMDsKICAgfQpAQCAtMTY4OSw5ICsxNzQ5LDkgQEAgQ29tcGxldGlvbiBEb1doaWxl
Tm9kZTo6ZXhlY3V0ZShFeGVjU3RhdAogICAgIC8vIGJhaWwgb3V0IG9uIGVycm9yCiAgICAgS0pT
X0NIRUNLRVhDRVBUSU9OCiAKLSAgICBleGVjLT5jb250ZXh0KCkuaW1wKCktPnNlZW5MYWJlbHMo
KS0+cHVzaEl0ZXJhdGlvbigpOworICAgIGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+cHVzaEl0ZXJh
dGlvbigpOwogICAgIGMgPSBzdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7Ci0gICAgZXhlYy0+Y29u
dGV4dCgpLmltcCgpLT5zZWVuTGFiZWxzKCktPnBvcEl0ZXJhdGlvbigpOworICAgIGV4ZWMtPmNv
bnRleHQoKS5pbXAoKS0+cG9wSXRlcmF0aW9uKCk7CiAgICAgaWYgKCEoKGMuY29tcGxUeXBlKCkg
PT0gQ29udGludWUpICYmIGxzLmNvbnRhaW5zKGMudGFyZ2V0KCkpKSkgewogICAgICAgaWYgKChj
LmNvbXBsVHlwZSgpID09IEJyZWFrKSAmJiBscy5jb250YWlucyhjLnRhcmdldCgpKSkKICAgICAg
ICAgcmV0dXJuIENvbXBsZXRpb24oTm9ybWFsLCAwKTsKQEAgLTE3MzMsOSArMTc5Myw5IEBAIENv
bXBsZXRpb24gV2hpbGVOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAKICAgICBpZiAoIWIpCiAgICAg
ICByZXR1cm4gQ29tcGxldGlvbihOb3JtYWwsIHZhbHVlKTsKIAotICAgIGV4ZWMtPmNvbnRleHQo
KS5pbXAoKS0+c2VlbkxhYmVscygpLT5wdXNoSXRlcmF0aW9uKCk7CisgICAgZXhlYy0+Y29udGV4
dCgpLmltcCgpLT5wdXNoSXRlcmF0aW9uKCk7CiAgICAgYyA9IHN0YXRlbWVudC0+ZXhlY3V0ZShl
eGVjKTsKLSAgICBleGVjLT5jb250ZXh0KCkuaW1wKCktPnNlZW5MYWJlbHMoKS0+cG9wSXRlcmF0
aW9uKCk7CisgICAgZXhlYy0+Y29udGV4dCgpLmltcCgpLT5wb3BJdGVyYXRpb24oKTsKICAgICBp
ZiAoYy5pc1ZhbHVlQ29tcGxldGlvbigpKQogICAgICAgdmFsdWUgPSBjLnZhbHVlKCk7CiAKQEAg
LTE3NzYsOSArMTgzNiw5IEBAIENvbXBsZXRpb24gRm9yTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUg
KmUKICAgICAvLyBiYWlsIG91dCBvbiBlcnJvcgogICAgIEtKU19DSEVDS0VYQ0VQVElPTgogCi0g
ICAgZXhlYy0+Y29udGV4dCgpLmltcCgpLT5zZWVuTGFiZWxzKCktPnB1c2hJdGVyYXRpb24oKTsK
KyAgICBleGVjLT5jb250ZXh0KCkuaW1wKCktPnB1c2hJdGVyYXRpb24oKTsKICAgICBDb21wbGV0
aW9uIGMgPSBzdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7Ci0gICAgZXhlYy0+Y29udGV4dCgpLmlt
cCgpLT5zZWVuTGFiZWxzKCktPnBvcEl0ZXJhdGlvbigpOworICAgIGV4ZWMtPmNvbnRleHQoKS5p
bXAoKS0+cG9wSXRlcmF0aW9uKCk7CiAgICAgaWYgKGMuaXNWYWx1ZUNvbXBsZXRpb24oKSkKICAg
ICAgIGN2YWwgPSBjLnZhbHVlKCk7CiAgICAgaWYgKCEoKGMuY29tcGxUeXBlKCkgPT0gQ29udGlu
dWUpICYmIGxzLmNvbnRhaW5zKGMudGFyZ2V0KCkpKSkgewpAQCAtMTkwNCw5ICsxOTY0LDkgQEAg
Q29tcGxldGlvbiBGb3JJbk5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlIAogCiAgICAgS0pTX0NIRUNL
RVhDRVBUSU9OCiAKLSAgICBleGVjLT5jb250ZXh0KCkuaW1wKCktPnNlZW5MYWJlbHMoKS0+cHVz
aEl0ZXJhdGlvbigpOworICAgIGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+cHVzaEl0ZXJhdGlvbigp
OwogICAgIGMgPSBzdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7Ci0gICAgZXhlYy0+Y29udGV4dCgp
LmltcCgpLT5zZWVuTGFiZWxzKCktPnBvcEl0ZXJhdGlvbigpOworICAgIGV4ZWMtPmNvbnRleHQo
KS5pbXAoKS0+cG9wSXRlcmF0aW9uKCk7CiAgICAgaWYgKGMuaXNWYWx1ZUNvbXBsZXRpb24oKSkK
ICAgICAgIHJldHZhbCA9IGMudmFsdWUoKTsKIApAQCAtMTk0MSw3ICsyMDAxLDcgQEAgQ29tcGxl
dGlvbiBDb250aW51ZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YQogewogICBLSlNfQlJFQUtQT0lOVDsK
IAotICBpZiAoaWRlbnQuaXNFbXB0eSgpICYmICFleGVjLT5jb250ZXh0KCkuaW1wKCktPnNlZW5M
YWJlbHMoKS0+aW5JdGVyYXRpb24oKSkKKyAgaWYgKGlkZW50LmlzRW1wdHkoKSAmJiAhZXhlYy0+
Y29udGV4dCgpLmltcCgpLT5pbkl0ZXJhdGlvbigpKQogICAgIHJldHVybiBjcmVhdGVFcnJvckNv
bXBsZXRpb24oZXhlYywgU3ludGF4RXJyb3IsICJJbnZhbGlkIGNvbnRpbnVlIHN0YXRlbWVudC4i
KTsKICAgZWxzZSBpZiAoIWlkZW50LmlzRW1wdHkoKSAmJiAhZXhlYy0+Y29udGV4dCgpLmltcCgp
LT5zZWVuTGFiZWxzKCktPmNvbnRhaW5zKGlkZW50KSkKICAgICByZXR1cm4gY3JlYXRlRXJyb3JD
b21wbGV0aW9uKGV4ZWMsIFN5bnRheEVycm9yLCAiTGFiZWwgJXMgbm90IGZvdW5kLiIsIGlkZW50
KTsKQEAgLTE5NTYsOCArMjAxNiw4IEBAIENvbXBsZXRpb24gQnJlYWtOb2RlOjpleGVjdXRlKEV4
ZWNTdGF0ZSAKIHsKICAgS0pTX0JSRUFLUE9JTlQ7CiAKLSAgaWYgKGlkZW50LmlzRW1wdHkoKSAm
JiAhZXhlYy0+Y29udGV4dCgpLmltcCgpLT5zZWVuTGFiZWxzKCktPmluSXRlcmF0aW9uKCkgJiYK
LSAgICAgICFleGVjLT5jb250ZXh0KCkuaW1wKCktPnNlZW5MYWJlbHMoKS0+aW5Td2l0Y2goKSkK
KyAgaWYgKGlkZW50LmlzRW1wdHkoKSAmJiAhZXhlYy0+Y29udGV4dCgpLmltcCgpLT5pbkl0ZXJh
dGlvbigpICYmCisgICAgICAhZXhlYy0+Y29udGV4dCgpLmltcCgpLT5pblN3aXRjaCgpKQogICAg
IHJldHVybiBjcmVhdGVFcnJvckNvbXBsZXRpb24oZXhlYywgU3ludGF4RXJyb3IsICJJbnZhbGlk
IGJyZWFrIHN0YXRlbWVudC4iKTsKICAgZWxzZSBpZiAoIWlkZW50LmlzRW1wdHkoKSAmJiAhZXhl
Yy0+Y29udGV4dCgpLmltcCgpLT5zZWVuTGFiZWxzKCktPmNvbnRhaW5zKGlkZW50KSkKICAgICBy
ZXR1cm4gY3JlYXRlRXJyb3JDb21wbGV0aW9uKGV4ZWMsIFN5bnRheEVycm9yLCAiTGFiZWwgJXMg
bm90IGZvdW5kLiIpOwpAQCAtMjE3MSw5ICsyMjMxLDkgQEAgQ29tcGxldGlvbiBTd2l0Y2hOb2Rl
OjpleGVjdXRlKEV4ZWNTdGF0ZQogICBKU1ZhbHVlICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7
CiAgIEtKU19DSEVDS0VYQ0VQVElPTgogCi0gIGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+c2Vlbkxh
YmVscygpLT5wdXNoU3dpdGNoKCk7CisgIGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+cHVzaFN3aXRj
aCgpOwogICBDb21wbGV0aW9uIHJlcyA9IGJsb2NrLT5ldmFsQmxvY2soZXhlYyx2KTsKLSAgZXhl
Yy0+Y29udGV4dCgpLmltcCgpLT5zZWVuTGFiZWxzKCktPnBvcFN3aXRjaCgpOworICBleGVjLT5j
b250ZXh0KCkuaW1wKCktPnBvcFN3aXRjaCgpOwogCiAgIGlmICgocmVzLmNvbXBsVHlwZSgpID09
IEJyZWFrKSAmJiBscy5jb250YWlucyhyZXMudGFyZ2V0KCkpKQogICAgIHJldHVybiBDb21wbGV0
aW9uKE5vcm1hbCwgcmVzLnZhbHVlKCkpOwpAQCAtMjI2OSwxNSArMjMyOSwxOCBAQCB2b2lkIFBh
cmFtZXRlck5vZGU6OmJyZWFrQ3ljbGUoKSAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBGdW5jdGlvbkJvZHlOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEZ1
bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoU291cmNlRWxlbWVudHNOb2RlICpzKQot
ICA6IEJsb2NrTm9kZShzKQorICAgIDogQmxvY2tOb2RlKHMpCisgICAgLCBtX3NvdXJjZVVSTChM
ZXhlcjo6Y3VycigpLT5zb3VyY2VVUkwoKSkKKyAgICAsIG1fc291cmNlSWQoUGFyc2VyOjpzaWQp
CiB7Ci0gIHNldExvYygtMSwgLTEsIC0xKTsKKworICBzZXRMb2MoLTEsIC0xKTsKIH0KIAogdm9p
ZCBGdW5jdGlvbkJvZHlOb2RlOjpwcm9jZXNzRnVuY0RlY2woRXhlY1N0YXRlICpleGVjKQogewot
ICBpZiAoc291cmNlKQotICAgIHNvdXJjZS0+cHJvY2Vzc0Z1bmNEZWNsKGV4ZWMpOworICAgIGlm
IChzb3VyY2UpCisgICAgICAgIHNvdXJjZS0+cHJvY2Vzc0Z1bmNEZWNsKGV4ZWMpOwogfQogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY0RlY2xOb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjM2MiwxNCArMjQyNSwxNCBAQCBTb3VyY2VFbGVt
ZW50c05vZGU6OlNvdXJjZUVsZW1lbnRzTm9kZShTCiAgIDogbm9kZShzMSksIG5leHQodGhpcykK
IHsKICAgICBQYXJzZXI6Om5vdGVOb2RlQ3ljbGUodGhpcyk7Ci0gICAgc2V0TG9jKHMxLT5maXJz
dExpbmUoKSwgczEtPmxhc3RMaW5lKCksIHMxLT5zb3VyY2VJZCgpKTsKKyAgICBzZXRMb2MoczEt
PmZpcnN0TGluZSgpLCBzMS0+bGFzdExpbmUoKSk7CiB9CiAKIFNvdXJjZUVsZW1lbnRzTm9kZTo6
U291cmNlRWxlbWVudHNOb2RlKFNvdXJjZUVsZW1lbnRzTm9kZSAqczEsIFN0YXRlbWVudE5vZGUg
KnMyKQogICA6IG5vZGUoczIpLCBuZXh0KHMxLT5uZXh0KQogewogICBzMS0+bmV4dCA9IHRoaXM7
Ci0gIHNldExvYyhzMS0+Zmlyc3RMaW5lKCksIHMyLT5sYXN0TGluZSgpLCBzMS0+c291cmNlSWQo
KSk7CisgIHNldExvYyhzMS0+Zmlyc3RMaW5lKCksIHMyLT5sYXN0TGluZSgpKTsKIH0KIAogLy8g
RUNNQSAxNApJbmRleDoga2pzL2dyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvZ3JhbW1hci55
CShyZXZpc2lvbiAxMzI5OSkKKysrIGtqcy9ncmFtbWFyLnkJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDcgKzQ4LDcgQEAgaW50IGtqc3l5ZXJyb3IoY29uc3QgY2hhciAqKTsKIHN0YXRpYyBib29sIGFs
bG93QXV0b21hdGljU2VtaWNvbG9uKCk7CiAKICNkZWZpbmUgQVVUT19TRU1JQ09MT04gZG8geyBp
ZiAoIWFsbG93QXV0b21hdGljU2VtaWNvbG9uKCkpIFlZQUJPUlQ7IH0gd2hpbGUgKDApCi0jZGVm
aW5lIERCRyhsLCBzLCBlKSAobCktPnNldExvYygocykuZmlyc3RfbGluZSwgKGUpLmxhc3RfbGlu
ZSwgUGFyc2VyOjpzaWQpCisjZGVmaW5lIERCRyhsLCBzLCBlKSAobCktPnNldExvYygocykuZmly
c3RfbGluZSwgKGUpLmxhc3RfbGluZSkKIAogdXNpbmcgbmFtZXNwYWNlIEtKUzsKIApJbmRleDog
a2pzL2ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL2ludGVycHJldGVyLmgJKHJldmlz
aW9uIDEzMjk5KQorKysga2pzL2ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0NCw3
ICs0NDQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGlu
dGVycHJldGVyIGV4ZWN1dGluZyB0aGUgc2NyaXB0CiAgICAgICovCi0gICAgSW50ZXJwcmV0ZXIg
KmR5bmFtaWNJbnRlcnByZXRlcigpIGNvbnN0IHsgcmV0dXJuIF9pbnRlcnByZXRlcjsgfQorICAg
IEludGVycHJldGVyICpkeW5hbWljSW50ZXJwcmV0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ludGVy
cHJldGVyOyB9CiAKICAgICAvLyBmb3IgY29tcGF0aWJpbGl0eQogICAgIEludGVycHJldGVyICpp
bnRlcnByZXRlcigpIGNvbnN0IHsgcmV0dXJuIGR5bmFtaWNJbnRlcnByZXRlcigpOyB9CkBAIC00
NjIsMTkgKzQ2MiwyMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKgogICAgICAqIEByZXR1cm4g
VGhlIGN1cnJlbnQgZXhlY3V0aW9uIHN0YXRlIGNvbnRleHQKICAgICAgKi8KLSAgICBDb250ZXh0
IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBfY29udGV4dDsgfQorICAgIENvbnRleHQgY29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQogCi0gICAgdm9pZCBzZXRFeGNlcHRpb24o
SlNWYWx1ZSogZSkgeyBfZXhjZXB0aW9uID0gZTsgfQotICAgIHZvaWQgY2xlYXJFeGNlcHRpb24o
KSB7IF9leGNlcHRpb24gPSAwOyB9Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gX2V4Y2VwdGlvbjsgfQotICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1
cm4gX2V4Y2VwdGlvbjsgfQorICAgIHZvaWQgc2V0RXhjZXB0aW9uKEpTVmFsdWUqIGUpIHsgbV9l
eGNlcHRpb24gPSBlOyB9CisgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24g
PSAwOyB9CisgICAgSlNWYWx1ZSogZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9leGNlcHRp
b247IH0KKyAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9u
OyB9CiAKICAgcHJpdmF0ZToKICAgICBFeGVjU3RhdGUoSW50ZXJwcmV0ZXIqIGludGVycCwgQ29u
dGV4dEltcCogY29uKQotICAgICAgICA6IF9pbnRlcnByZXRlcihpbnRlcnApLCBfY29udGV4dChj
b24pLCBfZXhjZXB0aW9uKDApIHsgfQotICAgIEludGVycHJldGVyKiBfaW50ZXJwcmV0ZXI7Ci0g
ICAgQ29udGV4dEltcCogX2NvbnRleHQ7Ci0gICAgSlNWYWx1ZSogX2V4Y2VwdGlvbjsKKyAgICAg
ICAgOiBtX2ludGVycHJldGVyKGludGVycCkKKyAgICAgICAgLCBtX2NvbnRleHQoY29uKQorICAg
ICAgICAsIG1fZXhjZXB0aW9uKDApCisgICAgeyAKKyAgICB9CisgICAgSW50ZXJwcmV0ZXIqIG1f
aW50ZXJwcmV0ZXI7CisgICAgQ29udGV4dEltcCogbV9jb250ZXh0OworICAgIEpTVmFsdWUqIG1f
ZXhjZXB0aW9uOwogICB9OwogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDoga2pzL25vZGVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2pzL25vZGVzLmgJKHJldmlzaW9uIDEzMjk5KQorKysga2pzL25vZGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDEyICs4MCwxMiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBV
U3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSAmcykgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVjbHMo
RXhlY1N0YXRlICopIHt9Ci0gICAgaW50IGxpbmVObygpIGNvbnN0IHsgcmV0dXJuIGxpbmU7IH0K
KyAgICBpbnQgbGluZU5vKCkgY29uc3QgeyByZXR1cm4gbV9saW5lOyB9CiAKLSAgICAvLyByZWZl
cmVuY2UgY291bnRpbmcgbWVjaGFuaXNtCi0gICAgdm9pZCByZWYoKSB7ICsrbV9yZWZjb3VudDsg
fQotICAgIHZvaWQgZGVyZWYoKSB7IC0tbV9yZWZjb3VudDsgaWYgKCFtX3JlZmNvdW50KSBkZWxl
dGUgdGhpczsgfQotICAgIHVuc2lnbmVkIGludCByZWZjb3VudCgpIHsgcmV0dXJuIG1fcmVmY291
bnQ7IH0KKyAgICB2b2lkIHJlZigpOworICAgIHZvaWQgZGVyZWYoKTsKKyAgICB1bnNpZ25lZCBp
bnQgcmVmY291bnQoKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhck5ld05vZGVzKCk7CiAKICAgICB2
aXJ0dWFsIE5vZGUgKm5vZGVJbnNpZGVBbGxQYXJlbnMoKTsKIApAQCAtMTEyLDExICsxMTIsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKIAogICAgIHZvaWQgc2V0RXhjZXB0aW9uRGV0YWlsc0lmTmVlZGVk
KEV4ZWNTdGF0ZSAqKTsKIAotICAgIGludCBsaW5lOwotICAgIFVTdHJpbmcgc291cmNlVVJMOwot
ICAgIHVuc2lnbmVkIGludCBtX3JlZmNvdW50OwotICAgIHZpcnR1YWwgaW50IHNvdXJjZUlkKCkg
Y29uc3QgeyByZXR1cm4gLTE7IH0KLQorICAgIGludCBtX2xpbmU7CiAgIHByaXZhdGU6CiAgICAg
Ly8gZGlzYWxsb3cgYXNzaWdubWVudAogICAgIE5vZGUmIG9wZXJhdG9yPShjb25zdCBOb2RlJik7
CkBAIC0xMjYsMTAgKzEyMiw5IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBTdGF0ZW1lbnRO
b2RlIDogcHVibGljIE5vZGUgewogICBwdWJsaWM6CiAgICAgU3RhdGVtZW50Tm9kZSgpOwotICAg
IHZvaWQgc2V0TG9jKGludCBsaW5lMCwgaW50IGxpbmUxLCBpbnQgc291cmNlSWQpOwotICAgIGlu
dCBmaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBsMDsgfQotICAgIGludCBsYXN0TGluZSgpIGNv
bnN0IHsgcmV0dXJuIGwxOyB9Ci0gICAgaW50IHNvdXJjZUlkKCkgY29uc3QgeyByZXR1cm4gc2lk
OyB9CisgICAgdm9pZCBzZXRMb2MoaW50IGxpbmUwLCBpbnQgbGluZTEpOworICAgIGludCBmaXJz
dExpbmUoKSBjb25zdCB7IHJldHVybiBsaW5lTm8oKTsgfQorICAgIGludCBsYXN0TGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGFzdExpbmU7IH0KICAgICBib29sIGhpdFN0YXRlbWVudChFeGVjU3Rh
dGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSAqZXhl
YykgPSAwOwogICAgIHZvaWQgcHVzaExhYmVsKGNvbnN0IElkZW50aWZpZXIgJmlkKSB7IGxzLnB1
c2goaWQpOyB9CkBAIC0xMzgsOCArMTMzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgTGFiZWxT
dGFjayBsczsKICAgcHJpdmF0ZToKICAgICBKU1ZhbHVlICpldmFsdWF0ZShFeGVjU3RhdGUgKi8q
ZXhlYyovKSB7IHJldHVybiBqc1VuZGVmaW5lZCgpOyB9Ci0gICAgaW50IGwwLCBsMTsKLSAgICBp
bnQgc2lkOworICAgIGludCBtX2xhc3RMaW5lOzsKICAgfTsKIAogICBjbGFzcyBOdWxsTm9kZSA6
IHB1YmxpYyBOb2RlIHsKQEAgLTEwNTMsOCArMTA0NywxMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
Ly8gaW5oZXJpdGVkIGJ5IFByb2dyYW1Ob2RlCiAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGUgOiBw
dWJsaWMgQmxvY2tOb2RlIHsKICAgcHVibGljOgotICAgIEZ1bmN0aW9uQm9keU5vZGUoU291cmNl
RWxlbWVudHNOb2RlICpzKTsKLSAgICB2b2lkIHByb2Nlc3NGdW5jRGVjbChFeGVjU3RhdGUgKmV4
ZWMpOworICAgIEZ1bmN0aW9uQm9keU5vZGUoU291cmNlRWxlbWVudHNOb2RlICopOworICAgIHZp
cnR1YWwgdm9pZCBwcm9jZXNzRnVuY0RlY2woRXhlY1N0YXRlICpleGVjKTsKKyAgICBpbnQgc291
cmNlSWQoKSB7IHJldHVybiBtX3NvdXJjZUlkOyB9CisgICAgY29uc3QgVVN0cmluZyYgc291cmNl
VVJMKCkgeyByZXR1cm4gbV9zb3VyY2VVUkw7IH0KKyAgcHJpdmF0ZToKKyAgICBVU3RyaW5nIG1f
c291cmNlVVJMOworICAgIGludCBtX3NvdXJjZUlkOwogICB9OwogCiAgIGNsYXNzIEZ1bmNFeHBy
Tm9kZSA6IHB1YmxpYyBOb2RlIHsKSW5kZXg6IGtqcy9jb250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2pzL2NvbnRleHQuaAkocmV2aXNpb24gMTMyOTkpCisrKyBranMvY29udGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwxMCArMzUsMTIgQEAgbmFtZXNwYWNlIEtKUyAgewogICAgKi8KICAgY2xh
c3MgQ29udGV4dEltcCB7CiAgIHB1YmxpYzoKLSAgICBDb250ZXh0SW1wKEpTT2JqZWN0ICpnbG9i
LCBJbnRlcnByZXRlckltcCAqLCBKU09iamVjdCAqdGhpc1YsIENvZGVUeXBlIHR5cGUgPSBHbG9i
YWxDb2RlLAotICAgICAgICAgICAgICAgQ29udGV4dEltcCAqY2FsbGluZ0NvbnRleHQgPSAwLCBG
dW5jdGlvbkltcCAqZnVuY3RpaW9uID0gMCwgY29uc3QgTGlzdCAqYXJncyA9IDApOworICAgIENv
bnRleHRJbXAoSlNPYmplY3QqIGdsb2JhbCwgSW50ZXJwcmV0ZXJJbXAqLCBKU09iamVjdCogdGhp
c1YsIEZ1bmN0aW9uQm9keU5vZGUqIGN1cnJlbnRCb2R5LAorICAgICAgICAgICAgICAgQ29kZVR5
cGUgdHlwZSA9IEdsb2JhbENvZGUsIENvbnRleHRJbXAqIGNhbGxpbmdDb250ZXh0ID0gMCwgRnVu
Y3Rpb25JbXAqIGZ1bmN0aW9uID0gMCwgY29uc3QgTGlzdCogYXJncyA9IDApOwogICAgIH5Db250
ZXh0SW1wKCk7CiAKKyAgICBGdW5jdGlvbkJvZHlOb2RlKiBjdXJyZW50Qm9keSgpIHsgcmV0dXJu
IG1fY3VycmVudEJvZHk7IH0KKwogICAgIGNvbnN0IFNjb3BlQ2hhaW4gJnNjb3BlQ2hhaW4oKSBj
b25zdCB7IHJldHVybiBzY29wZTsgfQogICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgeyByZXR1cm4g
bV9jb2RlVHlwZTsgfQogICAgIEpTT2JqZWN0ICp2YXJpYWJsZU9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIHZhcmlhYmxlOyB9CkBAIC01MiwxMiArNTQsMjMgQEAgbmFtZXNwYWNlIEtKUyAgewogICAg
IHZvaWQgcHVzaFNjb3BlKEpTT2JqZWN0ICpzKSB7IHNjb3BlLnB1c2gocyk7IH0KICAgICB2b2lk
IHBvcFNjb3BlKCkgeyBzY29wZS5wb3AoKTsgfQogICAgIExhYmVsU3RhY2sgKnNlZW5MYWJlbHMo
KSB7IHJldHVybiAmbHM7IH0KKworCisgICAgdm9pZCBwdXNoSXRlcmF0aW9uKCkgeyBtX2l0ZXJh
dGlvbkRlcHRoKys7IH0KKyAgICB2b2lkIHBvcEl0ZXJhdGlvbigpIHsgbV9pdGVyYXRpb25EZXB0
aC0tOyB9CisgICAgYm9vbCBpbkl0ZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIChtX2l0ZXJhdGlv
bkRlcHRoID4gMCk7IH0KICAgICAKKyAgICB2b2lkIHB1c2hTd2l0Y2goKSB7IG1fc3dpdGNoRGVw
dGgrKzsgfQorICAgIHZvaWQgcG9wU3dpdGNoKCkgeyBtX3N3aXRjaERlcHRoLS07IH0KKyAgICBi
b29sIGluU3dpdGNoKCkgY29uc3QgeyByZXR1cm4gKG1fc3dpdGNoRGVwdGggPiAwKTsgfQorICAg
ICAgICAKICAgICB2b2lkIG1hcmsoKTsKIAogICBwcml2YXRlOgogICAgIEludGVycHJldGVySW1w
ICpfaW50ZXJwcmV0ZXI7CiAgICAgQ29udGV4dEltcCAqX2NhbGxpbmdDb250ZXh0OworICAgIEZ1
bmN0aW9uQm9keU5vZGUqIG1fY3VycmVudEJvZHk7CisKICAgICBGdW5jdGlvbkltcCAqX2Z1bmN0
aW9uOwogICAgIGNvbnN0IExpc3QgKl9hcmd1bWVudHM7CiAgICAgLy8gYmVjYXVzZSBDb250ZXh0
SW1wIGlzIGFsd2F5cyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLApAQCAtNzAsNiArODMsOCBAQCBu
YW1lc3BhY2UgS0pTICB7CiAgICAgSlNPYmplY3QgKnRoaXNWYWw7CiAKICAgICBMYWJlbFN0YWNr
IGxzOworICAgIGludCBtX2l0ZXJhdGlvbkRlcHRoOworICAgIGludCBtX3N3aXRjaERlcHRoOwog
ICAgIENvZGVUeXBlIG1fY29kZVR5cGU7CiAgIH07CiAKSW5kZXg6IGtqcy9QYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtqcy9QYXJzZXIuY3BwCShyZXZpc2lvbiAxMzI5OSkKKysrIGtqcy9QYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNiArMzcsOCBAQCBuYW1lc3BhY2UgS0pTIHsK
IGludCBQYXJzZXI6OnNpZCA9IDA7CiAKIHN0YXRpYyBSZWZQdHI8UHJvZ3JhbU5vZGU+KiBwcm9n
Tm9kZTsKLXN0YXRpYyBWZWN0b3I8UmVmUHRyPE5vZGU+ID4qIG5ld05vZGVzOwogc3RhdGljIEhh
c2hTZXQ8Tm9kZSo+KiBub2RlQ3ljbGVzOwogCi12b2lkIFBhcnNlcjo6c2F2ZU5ld05vZGUoTm9k
ZSAqbm9kZSkKLXsKLSAgICBpZiAoIW5ld05vZGVzKQotICAgICAgICBuZXdOb2RlcyA9IG5ldyBW
ZWN0b3I8UmVmUHRyPE5vZGU+ID47Ci0gICAgbmV3Tm9kZXMtPmFwcGVuZChub2RlKTsKLX0KLQog
dm9pZCBQYXJzZXI6Om5vdGVOb2RlQ3ljbGUoTm9kZSAqbm9kZSkKIHsKICAgICBpZiAoIW5vZGVD
eWNsZXMpCkBAIC02OCw5ICs2MCw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyTmV3Tm9kZXMoKQogICAg
ICAgICBkZWxldGUgbm9kZUN5Y2xlczsKICAgICAgICAgbm9kZUN5Y2xlcyA9IDA7CiAgICAgfQot
Ci0gICAgZGVsZXRlIG5ld05vZGVzOwotICAgIG5ld05vZGVzID0gMDsKKyAgICBOb2RlOjpjbGVh
ck5ld05vZGVzKCk7CiB9CiAKIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFBhcnNlcjo6cGFyc2Uo
Y29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLApJbmRleDog
YmluZGluZ3MvcnVudGltZV9tZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3J1bnRp
bWVfbWV0aG9kLmNwcAkocmV2aXNpb24gMTMyOTkpCisrKyBiaW5kaW5ncy9ydW50aW1lX21ldGhv
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkgQEAKIHVzaW5nIG5hbWVzcGFjZSBL
SlM6OkJpbmRpbmdzOwogdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAotUnVudGltZU1ldGhvZDo6UnVu
dGltZU1ldGhvZChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJmlkZW50LCBCaW5k
aW5nczo6TWV0aG9kTGlzdCAmbSkgOiBGdW5jdGlvbkltcCAoZXhlYywgaWRlbnQpCisvLyBGSVhN
RTogdGhpcyBzaG91bGQgcHJvYmFibHkgdXNlIEludGVybmFsRnVuY3Rpb25JbXAsIG5vdCBGdW5j
dGlvbkltcAorUnVudGltZU1ldGhvZDo6UnVudGltZU1ldGhvZChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJmlkZW50LCBCaW5kaW5nczo6TWV0aG9kTGlzdCAmbSkgCisgICAgOiBG
dW5jdGlvbkltcCAoZXhlYywgaWRlbnQsIDApCiB7CiAgICAgX21ldGhvZExpc3QgPSBtOwogfQo=
</data>
<flag name="review"
          id="1845"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>