<?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>172738</bug_id>
          
          <creation_ts>2017-05-30 16:01:13 -0700</creation_ts>
          <short_desc>Implementors of memoryCost() need to be thread-safe</short_desc>
          <delta_ts>2019-08-07 13:30:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=200504</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1313915</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-05-30 16:01:13 -0700</bug_when>
    <thetext>JSC calls visitChildren(JSCell* cell, SlotVisitor&amp; visitor) on its GC threads, yet I don&apos;t expect that any implementers of visitChildren() or memoryCost() are thread-safe. For example, AudioBuffer::memoryCost() loops over channels with no lock, HTMLCollection::memoryCost() does a bunch of math on map sizes, HTMLCanvasElement::memoryCost() consults the image buffer, which races with image buffer assignment etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1313916</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-05-30 16:02:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/32474881&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1313933</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-30 16:49:36 -0700</bug_when>
    <thetext>1. It is safe for the GC to scan any JS object pointers in these DOM objects because the GC controls the life-cycle of JS objects referenced by those pointers.

2. It is safe for the GC to scan wrapped objects because:
   a. all JS DOM object wrappers extend JSDOMWrapper, and
   b. JSDOMWrapper has a Ref to the wrapped object.
   This means that the wrapped object is guaranteed to outlive the JS wrapper.

   Also, there&apos;s a 1 to 1 correspondence between the wrapper and the wrapped object.
   We never change the wrapped object after creation of the wrapper.

Based on the above, the work in visitChildren should be safe because the &quot;visiting&quot; is should only be done on JS objects pointers.  Calling memoryCost() on wrapped objects is safe because the wrapped object is guaranteed to be alive still.

The remaining question is whether the various implementations of memoryCost() does anything with sub-objects that are not tied to the liveness of JS objects.

We should still do a survey of the visitChildren implementations to see if they call any other C++ member functions that may also do thread unsafe work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328164</commentid>
    <comment_count>3</comment_count>
      <attachid>315267</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-12 12:03:49 -0700</bug_when>
    <thetext>Created attachment 315267
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328165</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-12 12:04:52 -0700</bug_when>
    <thetext>Attachment 315267 did not pass style-queue:


ERROR: Source/WebCore/dom/LiveNodeList.h:94:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/html/CachedHTMLCollection.h:45:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328503</commentid>
    <comment_count>5</comment_count>
      <attachid>315267</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-07-13 11:16:49 -0700</bug_when>
    <thetext>Comment on attachment 315267
proposed patch.

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328534</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-13 12:17:46 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r219460: &lt;http://trac.webkit.org/r219460&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315267</attachid>
            <date>2017-07-12 12:03:49 -0700</date>
            <delta_ts>2017-07-13 11:16:49 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-172738.patch</filename>
            <type>text/plain</type>
            <size>18834</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTQxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDE3LTA3LTEyICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnRvcnMgb2YgbWVtb3J5
Q29zdCgpIG5lZWQgdG8gYmUgdGhyZWFkLXNhZmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI3MzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMy
NDc0ODgxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4gVGhpcyBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGJ1ZyB0aGF0
IGNhbiByZXN1bHQgaW4gcmFuZG9tCisgICAgICAgIGNyYXNoZXMgKGFuZCBvdGhlciB1bnByZWRp
Y3RhYmxlIGJlaGF2aW9yKSwgYW5kIGlzIHZlcnkgZGlmZmljdWx0IHRvIHRlc3QgZm9yLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0J1ZmZlcjo6cmVsZWFzZU1lbW9yeSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0J1ZmZlcjo6bWVtb3J5Q29zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1
ZmZlci5oOgorICAgICAgICAqIGRvbS9DaGlsZE5vZGVMaXN0Lmg6CisgICAgICAgICogZG9tL0Nv
bGxlY3Rpb25JbmRleENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xsZWN0aW9uSW5kZXhD
YWNoZTo6bWVtb3J5Q29zdCk6CisgICAgICAgICogZG9tL0xpdmVOb2RlTGlzdC5oOgorICAgICAg
ICAqIGh0bWwvQ2FjaGVkSFRNTENvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxDYW52
YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjptZW1v
cnlDb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpleHRlcm5hbE1l
bW9yeUNvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldEltYWdl
QnVmZmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICog
aHRtbC9IVE1MQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlv
bjo6aW52YWxpZGF0ZU5hbWVkRWxlbWVudENhY2hlKToKKyAgICAgICAgKiBodG1sL0hUTUxDb2xs
ZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xsZWN0aW9uTmFtZWRFbGVtZW50Q2FjaGU6
Om1lbW9yeUNvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246Om1lbW9yeUNv
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnNldE5hbWVkSXRlbUNhY2hl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6bWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJu
YWxNZW1vcnlDb3N0KToKKwogMjAxNy0wNy0xMiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBw
bGUuY29tPgogCiAgICAgICAgIFBsYXliYWNrIGNvbnRyb2xzIHNob3VsZCBub3QgaGlkZSB3aGls
ZSBBaXJQbGF5IGlzIGFjdGl2ZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJKHJldmlzaW9uIDIxOTQxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA1LDYgKzEw
Niw3IEBAIHZvaWQgQXVkaW9CdWZmZXI6OmludmFsaWRhdGUoKQogCiB2b2lkIEF1ZGlvQnVmZmVy
OjpyZWxlYXNlTWVtb3J5KCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY2hhbm5l
bHNMb2NrKTsKICAgICBtX2NoYW5uZWxzLmNsZWFyKCk7CiB9CiAKQEAgLTEzMyw2ICsxMzUsMTIg
QEAgdm9pZCBBdWRpb0J1ZmZlcjo6emVybygpCiAKIHNpemVfdCBBdWRpb0J1ZmZlcjo6bWVtb3J5
Q29zdCgpIGNvbnN0CiB7CisgICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1
cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsCisgICAg
Ly8gYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuIFdlIG5lZWQgdG8gaG9s
ZCBhIGxvY2sgdG8gcHJldmVudCBtX2NoYW5uZWxzCisgICAgLy8gZnJvbSBiZWluZyBjaGFuZ2Vk
IHdoaWxlIHdlIGl0ZXJhdGUgaXQsIGJ1dCBjYWxsaW5nIGNoYW5uZWwtPmJ5dGVMZW5ndGgoKSBp
cyBzYWZlCisgICAgLy8gYmVjYXVzZSBpdCBkb2Vzbid0IGludm9sdmUgY2hhc2luZyBhbnkgcG9p
bnRlcnMgdGhhdCBjYW4gYmUgbnVsbGlmaWVkIHdoaWxlIHRoZQorICAgIC8vIEF1ZGlvQnVmZmVy
IGlzIGFsaXZlLgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jaGFubmVsc0xvY2spOwog
ICAgIHNpemVfdCBjb3N0ID0gMDsKICAgICBmb3IgKGF1dG8mIGNoYW5uZWwgOiBtX2NoYW5uZWxz
KQogICAgICAgICBjb3N0ICs9IGNoYW5uZWwtPmJ5dGVMZW5ndGgoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHJldmlzaW9uIDIxOTQx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMwLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9GbG9hdDMyQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzMsNiArNzUsNyBA
QCBwcml2YXRlOgogCiAgICAgZG91YmxlIG1fZ2FpbiB7IDEuMCB9OyAvLyBzY2FsYXIgZ2Fpbgog
ICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKKyAgICBtdXRhYmxlIExvY2sgbV9jaGFubmVsc0xvY2s7
CiAgICAgc2l6ZV90IG1fbGVuZ3RoOwogICAgIFZlY3RvcjxSZWZQdHI8RmxvYXQzMkFycmF5Pj4g
bV9jaGFubmVsczsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgJKHJldmlz
aW9uIDIxOTQxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNywgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTgwLDcg
KzgwLDEzIEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCBvdmVycmlk
ZTsKICAgICBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCBvdmVycmlkZTsKLSAgICBz
aXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faW5kZXhDYWNoZS5t
ZW1vcnlDb3N0KCk7IH0KKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5
IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwKKyAgICAgICAgLy8g
YWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuIEFjY2Vzc2luZyBtX2luZGV4
Q2FjaGUgaXMgc2FmZSBiZWNhdXNlCisgICAgICAgIC8vIGJlY2F1c2UgaXQgZG9lc24ndCBpbnZv
bHZlIGFueSBwb2ludGVyIGNoYXNpbmcuCisgICAgICAgIHJldHVybiBtX2luZGV4Q2FjaGUubWVt
b3J5Q29zdCgpOworICAgIH0KIAogICAgIGJvb2wgaXNDaGlsZE5vZGVMaXN0KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29sbGVj
dGlvbkluZGV4Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29sbGVj
dGlvbkluZGV4Q2FjaGUuaAkocmV2aXNpb24gMjE5NDExKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0NvbGxlY3Rpb25JbmRleENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3ICs0MywxMyBA
QCBwdWJsaWM6CiAKICAgICBib29sIGhhc1ZhbGlkQ2FjaGUoY29uc3QgQ29sbGVjdGlvbiYgY29s
bGVjdGlvbikgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50ICE9IGNvbGxlY3Rpb24uY29sbGVjdGlv
bkVuZCgpIHx8IG1fbm9kZUNvdW50VmFsaWQgfHwgbV9saXN0VmFsaWQ7IH0KICAgICB2b2lkIGlu
dmFsaWRhdGUoY29uc3QgQ29sbGVjdGlvbiYpOwotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgeyBy
ZXR1cm4gbV9jYWNoZWRMaXN0LmNhcGFjaXR5KCkgKiBzaXplb2YoTm9kZVR5cGUqKTsgfQorICAg
IHNpemVfdCBtZW1vcnlDb3N0KCkKKyAgICB7CisgICAgICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkg
YmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8g
YmUgY2FyZWZ1bAorICAgICAgICAvLyBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5k
IGhvdy4gQWNjZXNzaW5nIG1fY2FjaGVkTGlzdC5jYXBhY2l0eSgpIGlzIHNhZmUKKyAgICAgICAg
Ly8gYmVjYXVzZSBpdCBkb2Vzbid0IGludm9sdmUgYW55IHBvaW50ZXIgY2hhc2luZy4KKyAgICAg
ICAgcmV0dXJuIG1fY2FjaGVkTGlzdC5jYXBhY2l0eSgpICogc2l6ZW9mKE5vZGVUeXBlKik7Cisg
ICAgfQogCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIGNvbXB1dGVOb2RlQ291bnRVcGRhdGluZ0xp
c3RDYWNoZShjb25zdCBDb2xsZWN0aW9uJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTGl2
ZU5vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlz
dC5oCShyZXZpc2lvbiAyMTk0MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBL
b2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11
ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNi0yMDA3
LCAyMDEzLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC05MCw3ICs5MCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsVmFsaWRh
dGVJbmRleENhY2hlKCkgY29uc3QgeyBkb2N1bWVudCgpLnJlZ2lzdGVyTm9kZUxpc3RGb3JJbnZh
bGlkYXRpb24oY29uc3RfY2FzdDxDYWNoZWRMaXZlTm9kZUxpc3Q8Tm9kZUxpc3RUeXBlPiY+KCp0
aGlzKSk7IH0KIAogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlRm9yRG9jdW1lbnQoRG9jdW1lbnQm
KSBjb25zdCBmaW5hbDsKLSAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1faW5kZXhDYWNoZS5tZW1vcnlDb3N0KCk7IH0KKyAgICBzaXplX3QgbWVtb3J5Q29zdCgp
IGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9r
ZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVm
dWwKKyAgICAgICAgLy8gYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuIEFj
Y2Vzc2luZyBtX2luZGV4Q2FjaGUgaXMgc2FmZSBiZWNhdXNlCisgICAgICAgIC8vIGJlY2F1c2Ug
aXQgZG9lc24ndCBpbnZvbHZlIGFueSBwb2ludGVyIGNoYXNpbmcuCisgICAgICAgIHJldHVybiBt
X2luZGV4Q2FjaGUubWVtb3J5Q29zdCgpOworICAgIH0KIAogcHJvdGVjdGVkOgogICAgIENhY2hl
ZExpdmVOb2RlTGlzdChDb250YWluZXJOb2RlJiByb290Tm9kZSwgTm9kZUxpc3RJbnZhbGlkYXRp
b25UeXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2FjaGVkSFRNTENvbGxlY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0NhY2hlZEhUTUxDb2xsZWN0aW9u
LmgJKHJldmlzaW9uIDIxOTQxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2FjaGVkSFRNTENv
bGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSwxMyBAQCBwdWJsaWM6CiAgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pbmRleENhY2hlLm5vZGVDb3Vu
dChjb2xsZWN0aW9uKCkpOyB9CiAgICAgRWxlbWVudCogaXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faW5kZXhDYWNoZS5ub2RlQXQoY29sbGVjdGlvbigpLCBv
ZmZzZXQpOyB9CiAgICAgRWxlbWVudCogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2luZGV4Q2FjaGUubWVtb3J5Q29zdCgpICsgSFRNTENvbGxlY3Rpb246Om1lbW9y
eUNvc3QoKTsgfQorICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgZmluYWwKKyAgICB7Cisg
ICAgICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBh
IEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2Ug
YWNjZXNzIGhlcmUgYW5kIGhvdy4KKyAgICAgICAgLy8gQWNjZXNzaW5nIG1faW5kZXhDYWNoZS5t
ZW1vcnlDb3N0KCkgaXMgc2FmZSBiZWNhdXNlIGJlY2F1c2UgaXQgZG9lc24ndCBpbnZvbHZlIGFu
eSBwb2ludGVyIGNoYXNpbmcuCisgICAgICAgIC8vIEhUTUxDb2xsZWN0aW9uOjptZW1vcnlDb3N0
KCkgZW5zdXJlcyBpdHMgb3duIHRocmVhZCBzYWZldHkuCisgICAgICAgIHJldHVybiBtX2luZGV4
Q2FjaGUubWVtb3J5Q29zdCgpICsgSFRNTENvbGxlY3Rpb246Om1lbW9yeUNvc3QoKTsKKyAgICB9
CiAKICAgICAvLyBGb3IgQ29sbGVjdGlvbkluZGV4Q2FjaGU7IGRvIG5vdCB1c2UgZWxzZXdoZXJl
LgogICAgIHVzaW5nIENvbGxlY3Rpb25UcmF2ZXJzYWxJdGVyYXRvciA9IHR5cGVuYW1lIENvbGxl
Y3Rpb25UcmF2ZXJzYWw8dHJhdmVyc2FsVHlwZT46Okl0ZXJhdG9yOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDIxOTQxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAxMCBUb3Jj
aCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAt
Njc3LDYgKzY3NywxMCBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2NlbGVyYXRl
CiAKIHNpemVfdCBIVE1MQ2FudmFzRWxlbWVudDo6bWVtb3J5Q29zdCgpIGNvbnN0CiB7CisgICAg
Ly8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhy
ZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsCisgICAgLy8gYWJvdXQgd2hhdCBkYXRhIHdl
IGFjY2VzcyBoZXJlIGFuZCBob3cuIFdlIG5lZWQgdG8gaG9sZCBhIGxvY2sgdG8gcHJldmVudCBt
X2ltYWdlQnVmZmVyCisgICAgLy8gZnJvbSBiZWluZyBjaGFuZ2VkIHdoaWxlIHdlIGFjY2VzcyBp
dC4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50TG9j
ayk7CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlci0+bWVtb3J5Q29zdCgpOwpAQCAtNjg0LDYgKzY4OCwxMCBAQCBzaXpl
X3QgSFRNTENhbnZhc0VsZW1lbnQ6Om1lbW9yeUNvc3QoKSBjCiAKIHNpemVfdCBIVE1MQ2FudmFz
RWxlbWVudDo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKIHsKKyAgICAvLyBleHRlcm5hbE1l
bW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwg
YW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bAorICAgIC8vIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nl
c3MgaGVyZSBhbmQgaG93LiBXZSBuZWVkIHRvIGhvbGQgYSBsb2NrIHRvIHByZXZlbnQgbV9pbWFn
ZUJ1ZmZlcgorICAgIC8vIGZyb20gYmVpbmcgY2hhbmdlZCB3aGlsZSB3ZSBhY2Nlc3MgaXQuCisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ltYWdlQnVmZmVyQXNzaWdubWVudExvY2spOwog
ICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIG1f
aW1hZ2VCdWZmZXItPmV4dGVybmFsTWVtb3J5Q29zdCgpOwpAQCAtNzgzLDcgKzc5MSwxMCBAQCB2
b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRJbWFnZUJ1ZmZlcihzCiAgICAgc2l6ZV90IHByZXZp
b3VzTWVtb3J5Q29zdCA9IG1lbW9yeUNvc3QoKTsKICAgICByZW1vdmVGcm9tQWN0aXZlUGl4ZWxN
ZW1vcnkocHJldmlvdXNNZW1vcnlDb3N0KTsKIAotICAgIG1faW1hZ2VCdWZmZXIgPSBXVEZNb3Zl
KGJ1ZmZlcik7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW1hZ2VC
dWZmZXJBc3NpZ25tZW50TG9jayk7CisgICAgICAgIG1faW1hZ2VCdWZmZXIgPSBXVEZNb3ZlKGJ1
ZmZlcik7CisgICAgfQogCiAgICAgc2l6ZV90IGN1cnJlbnRNZW1vcnlDb3N0ID0gbWVtb3J5Q29z
dCgpOwogICAgIGFjdGl2ZVBpeGVsTWVtb3J5ICs9IGN1cnJlbnRNZW1vcnlDb3N0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkocmV2aXNpb24gMjE5NDExKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOSwg
MjAxMCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqIENvcHlyaWdodCAoQykg
MjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgpAQCAtMTkwLDYgKzE5MCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3VzZXNEaXNwbGF5
TGlzdERyYXdpbmcgeyBmYWxzZSB9OwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSB7IGZhbHNlIH07CiAKKyAgICBtdXRhYmxlIExvY2sgbV9pbWFnZUJ1ZmZlckFzc2lnbm1lbnRM
b2NrOworICAgIAogICAgIC8vIG1fY3JlYXRlZEltYWdlQnVmZmVyIG1lYW5zIHdlIHRyaWVkIHRv
IG1hbGxvYyB0aGUgYnVmZmVyLiAgV2UgZGlkbid0IG5lY2Vzc2FyaWx5IGdldCBpdC4KICAgICBt
dXRhYmxlIGJvb2wgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgeyBmYWxzZSB9OwogICAgIG11dGFi
bGUgYm9vbCBtX2RpZENsZWFySW1hZ2VCdWZmZXIgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDIxOTQxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMTQ4LDcgKzE0OCwxMCBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uOjppbnZhbGlk
YXRlTmFtZWRFbGVtCiB7CiAgICAgQVNTRVJUKGhhc05hbWVkRWxlbWVudENhY2hlKCkpOwogICAg
IGRvY3VtZW50LmNvbGxlY3Rpb25XaWxsQ2xlYXJJZE5hbWVNYXAoKnRoaXMpOwotICAgIG1fbmFt
ZWRFbGVtZW50Q2FjaGUgPSBudWxscHRyOworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX25hbWVkRWxlbWVudENhY2hlQXNzaWdubWVudExvY2spOworICAgICAgICBtX25h
bWVkRWxlbWVudENhY2hlID0gbnVsbHB0cjsKKyAgICB9CiB9CiAKIEVsZW1lbnQqIEhUTUxDb2xs
ZWN0aW9uOjpuYW1lZEl0ZW1TbG93KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDIxOTQxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEwNCw3ICsxMDQsOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgUmVmPENvbnRhaW5lck5vZGU+IG1fb3duZXJOb2RlOwogCiAgICAgbXV0YWJsZSBzdGQ6
OnVuaXF1ZV9wdHI8Q29sbGVjdGlvbk5hbWVkRWxlbWVudENhY2hlPiBtX25hbWVkRWxlbWVudENh
Y2hlOwotCisgICAgbXV0YWJsZSBMb2NrIG1fbmFtZWRFbGVtZW50Q2FjaGVBc3NpZ25tZW50TG9j
azsKKyAgICAKICAgICBjb25zdCB1bnNpZ25lZCBtX2NvbGxlY3Rpb25UeXBlIDogNTsKICAgICBj
b25zdCB1bnNpZ25lZCBtX2ludmFsaWRhdGlvblR5cGUgOiA0OwogICAgIGNvbnN0IHVuc2lnbmVk
IG1fcm9vdFR5cGUgOiAxOwpAQCAtMTQwLDYgKzE0MSw4IEBAIGlubGluZSB2b2lkIENvbGxlY3Rp
b25OYW1lZEVsZW1lbnRDYWNoZToKIAogaW5saW5lIHNpemVfdCBDb2xsZWN0aW9uTmFtZWRFbGVt
ZW50Q2FjaGU6Om1lbW9yeUNvc3QoKSBjb25zdAogeworICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkg
YmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8g
YmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KKyAgICAv
LyBJdCBpcyBzYWZlIHRvIGFjY2VzcyBtX2lkTWFwLnNpemUoKSwgbV9uYW1lTWFwLnNpemUoKSwg
YW5kIG1fcHJvcGVydHlOYW1lcy5zaXplKCkgYmVjYXVzZSB0aGV5IGRvbid0IGNoYXNlIHBvaW50
ZXJzLgogICAgIHJldHVybiAobV9pZE1hcC5zaXplKCkgKyBtX25hbWVNYXAuc2l6ZSgpKSAqIHNp
emVvZihFbGVtZW50KikgKyBtX3Byb3BlcnR5TmFtZXMuc2l6ZSgpICogc2l6ZW9mKEF0b21pY1N0
cmluZyk7CiB9CiAKQEAgLTE2OCw2ICsxNzEsOSBAQCBpbmxpbmUgdm9pZCBDb2xsZWN0aW9uTmFt
ZWRFbGVtZW50Q2FjaGU6CiAKIGlubGluZSBzaXplX3QgSFRNTENvbGxlY3Rpb246Om1lbW9yeUNv
c3QoKSBjb25zdAogeworICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJy
ZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3
aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KKyAgICAvLyBIZW5jZSwgd2UgbmVlZCB0
byBndWFyZCBtX25hbWVkRWxlbWVudENhY2hlIGZyb20gYmVpbmcgcmVwbGFjZWQgd2hpbGUgYWNj
ZXNzaW5nIGl0LgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9uYW1lZEVsZW1lbnRDYWNo
ZUFzc2lnbm1lbnRMb2NrKTsKICAgICByZXR1cm4gbV9uYW1lZEVsZW1lbnRDYWNoZSA/IG1fbmFt
ZWRFbGVtZW50Q2FjaGUtPm1lbW9yeUNvc3QoKSA6IDA7CiB9CiAKQEAgLTIxNCw3ICsyMjAsMTAg
QEAgaW5saW5lIHZvaWQgSFRNTENvbGxlY3Rpb246OnNldE5hbWVkSXRlbQogICAgIEFTU0VSVChj
YWNoZSk7CiAgICAgQVNTRVJUKCFtX25hbWVkRWxlbWVudENhY2hlKTsKICAgICBjYWNoZS0+ZGlk
UG9wdWxhdGUoKTsKLSAgICBtX25hbWVkRWxlbWVudENhY2hlID0gV1RGTW92ZShjYWNoZSk7Cisg
ICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbmFtZWRFbGVtZW50Q2FjaGVB
c3NpZ25tZW50TG9jayk7CisgICAgICAgIG1fbmFtZWRFbGVtZW50Q2FjaGUgPSBXVEZNb3ZlKGNh
Y2hlKTsKKyAgICB9CiAgICAgZG9jdW1lbnQoKS5jb2xsZWN0aW9uQ2FjaGVkSWROYW1lTWFwKCp0
aGlzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcAkocmV2aXNpb24gMjE5NDExKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIzMyw2ICsyMzMsOCBAQCBib29sIEltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4
CiAjaWYgIVVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCiBzaXplX3QgSW1hZ2VC
dWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAogeworICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUg
aW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUg
Y2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KKyAgICAvLyBJ
dCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBh
bnkgcG9pbnRlciBjaGFzaW5nLgogICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgo
KSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNp
b24gMjE5NDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMTIsNiArMjEyLDEw
IEBAIEZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW8KICNpZiBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQogc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlD
b3N0KCkgY29uc3QKIHsKKyAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3Vy
cmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQg
d2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCisgICAgLy8gSXQncyBzYWZlIHRvIGFj
Y2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hh
c2luZy4KKyAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2Ug
dGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0
aGlzIEltYWdlQnVmZmVyLgorICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZh
Y2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50
ZXJzLgogICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJm
YWNlLT50b3RhbEJ5dGVzKCk7CiAgICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgp
ICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CkBAIC0yMTksNiArMjIzLDkgQEAgc2l6ZV90IElt
YWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKIAogc2l6ZV90IEltYWdlQnVmZmVyOjpleHRl
cm5hbE1lbW9yeUNvc3QoKSBjb25zdAogeworICAgIC8vIGV4dGVybmFsTWVtb3J5Q29zdCgpIG1h
eSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0
byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgorICAg
IC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFj
ZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VC
dWZmZXIuCisgICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxC
eXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCiAgICAg
aWYgKG1fZGF0YS5zdXJmYWNlKQogICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFs
Qnl0ZXMoKTsKICAgICByZXR1cm4gMDsK
</data>
<flag name="review"
          id="336122"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>