<?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>219285</bug_id>
          
          <creation_ts>2020-11-25 09:06:27 -0800</creation_ts>
          <short_desc>WTF::StringImpl is not thread-safe</short_desc>
          <delta_ts>2021-02-01 02:10:13 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <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="Chris Lord">clord</reporter>
          <assigned_to name="Chris Lord">clord</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1710062</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-11-25 09:06:27 -0800</bug_when>
    <thetext>It would be useful in many situations to be able to use Strings across multiple threads, especially now that Workers, OffscreenCanvas and GPUProcess have become/are becoming things. Blink has already managed this (I think?), their plan is detailed here: https://docs.google.com/document/d/1hp7h6zfD5S6mnMI4cHe1PpacRnb2rNpRRkn1gBBJHuQ/edit#heading=h.erv1bv18t616

The founding part of making this work is to make ref-counting on WTF::StringImpl atomic. We could then have global string and symbol tables guarded by locks, and remove a bunch of now-unnecessary API. It looks like Google dealt with the performance degradation by optimising the worst-hit areas and adding special API for bulk creation of strings - certainly that latter part seems like a very reasonable idea, to me. Antti has suggested removing destruction from deref and having a separate &apos;GC&apos; thread to perform periodic destruction to possibly optimise both performance and size - we should probably look at this after seeing the impact without it first.

A rough, high-level plan;

1- Make ref/deref on StringImpl atomic and benchmark impact
2- Make string/symbol table static and guarded by a lock (already the case in some situations)
3- Remove now-unnecessary API (isolatedCopy, StringTableProvider...)
X- Experiment with GC thread as a way of mitigating performance impact of 1/2
X- Identify and optimise badly-impacted areas

I&apos;m going to attempt to have a go at this, given its need in both OffscreenCanvas and GPUProcess. All suggestions/help/discussion appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710296</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-11-27 07:32:22 -0800</bug_when>
    <thetext>Using a very simple ref/deref benchmark on StringImpl, changing m_refCount to std::atomic&lt;unsigned&gt; makes it run at about 35% of current speed on a release build on this Xeon machine. Making refs use relaxed memory ordering makes that 40%, making them both relaxed to gauge what a GC thread might give us in terms of ref/deref perf increase is about the same (which surprised me a bit...)

Switching to an atomic ref count has a significant hit, the question will be how significant is it on real-world use-cases, once code has been refactored to take into account that Strings can be shared across threads now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710994</commentid>
    <comment_count>2</comment_count>
      <attachid>415120</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-12-01 02:52:24 -0800</bug_when>
    <thetext>Created attachment 415120
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711014</commentid>
    <comment_count>3</comment_count>
      <attachid>415130</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-12-01 05:03:38 -0800</bug_when>
    <thetext>Created attachment 415130
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711023</commentid>
    <comment_count>4</comment_count>
      <attachid>415133</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-12-01 06:22:15 -0800</bug_when>
    <thetext>Created attachment 415133
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711047</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-12-01 08:50:21 -0800</bug_when>
    <thetext>The attached patch is a first run at (1) and (2).

speedtest goes from a 64.9 to a 60 on my machine (an 8% hit, which is above the error threshold) and Jetstream 1.1 is basically the same, I couldn&apos;t get Jetstream 2.0 to run (it hangs on bomb-workers).

I haven&apos;t done any profiling yet to see where the hits are, but I think it&apos;s worth doing a first run at (3) before that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711105</commentid>
    <comment_count>6</comment_count>
      <attachid>415133</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-12-01 11:09:25 -0800</bug_when>
    <thetext>Comment on attachment 415133
Patch

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

&gt; Source/WTF/wtf/text/StringImpl.h:1124
&gt; +        if (!(refCount - s_refCountIncrement)) {
&gt; +            StringImpl::destroy(this);
&gt; +            return;
&gt; +        }

I think this is not safe. Let&apos;s consider the following scenario.

1. There are two threads, A and B.
2. A thread deref-ed an atomic string &quot;TEST&quot;, and about to calling StringImpl::destroy
3. But at (2), still the atomic string &quot;TEST&quot; is in AtomStringTable
4. B thread attempts to get &quot;TEST&quot; atomic string from the table, and B thread found (2)&apos;s atomic string. Ref it and start using it.
5. A thread starts calling StringImpl::destroy and (2)&apos;s string gets destroyed
6. Now, B thread is having destroyed StringImpl, UAF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711351</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-02 09:07:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/71896341&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724149</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-01 02:10:13 -0800</bug_when>
    <thetext>I think blink&apos;s StringImpl is not thread-safe too.

https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/platform/wtf/text/string_impl.h;l=267?q=StringImpl&amp;ss=chromium</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415120</attachid>
            <date>2020-12-01 02:52:24 -0800</date>
            <delta_ts>2020-12-01 05:03:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219285-20201201105223.patch</filename>
            <type>text/plain</type>
            <size>17560</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9S
ZWN1cnNpdmVMb2NrQWRhcHRlci5oIGIvU291cmNlL1dURi93dGYvUmVjdXJzaXZlTG9ja0FkYXB0
ZXIuaAppbmRleCBmNTYwNTcyYzE1ZjYwZTViMjhhNTgzOWQ1MDZjNDk4NmY4ODM1NWZmLi45MDJj
ZTE0NDdkYWE0OTg1ZDYyMTkwMGE0NGQ1Nzc5ZjFjMzVmOGE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9SZWN1cnNpdmVMb2NrQWRhcHRlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlY3Vy
c2l2ZUxvY2tBZGFwdGVyLmgKQEAgLTg4LDcgKzg4LDkgQEAgcHJpdmF0ZToKIH07CiAKIHVzaW5n
IFJlY3Vyc2l2ZUxvY2sgPSBSZWN1cnNpdmVMb2NrQWRhcHRlcjxMb2NrPjsKK3VzaW5nIFJlY3Vy
c2l2ZUxvY2tIb2xkZXIgPSBMb2NrZXI8UmVjdXJzaXZlTG9jaz47CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgogCiB1c2luZyBXVEY6OlJlY3Vyc2l2ZUxvY2s7Cit1c2luZyBXVEY6OlJlY3Vyc2l2ZUxv
Y2tIb2xkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAppbmRleCA1ZDdkNmQzYjNkZDYwNzVjYmUzOWE2MjNl
MDNlMjdhNWVjMTc3ODRmLi44OTQwMmJmN2Y3MmIzY2M1ZGU1OWFkMTY0N2Q0NWI3Y2VjZjAxNmI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZy5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDx3dGYvVGhy
ZWFkR3JvdXAuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogI2luY2x1
ZGUgPHd0Zi9XVEZDb25maWcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUu
aD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNpZiBIQVZFKFFPU19DTEFT
U0VTKQpAQCAtMTMwLDExICsxMzEsMTMgQEAgY29uc3QgY2hhciogVGhyZWFkOjpub3JtYWxpemVU
aHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiAKIHZvaWQgVGhyZWFkOjppbml0aWFs
aXplSW5UaHJlYWQoKQogeworICAgIHN0YXRpYyBBdG9tU3RyaW5nVGFibGUgc19kZWZhdWx0QXRv
bVN0cmluZ1RhYmxlOworCiAgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQogICAgICAgICBtX3N0
YWNrID0gU3RhY2tCb3VuZHM6OmN1cnJlbnRUaHJlYWRTdGFja0JvdW5kcygpOwogICAgIG1fc2F2
ZWRMYXN0U3RhY2tUb3AgPSBzdGFjaygpLm9yaWdpbigpOwogCi0gICAgbV9jdXJyZW50QXRvbVN0
cmluZ1RhYmxlID0gJm1fZGVmYXVsdEF0b21TdHJpbmdUYWJsZTsKKyAgICBtX2N1cnJlbnRBdG9t
U3RyaW5nVGFibGUgPSAmc19kZWZhdWx0QXRvbVN0cmluZ1RhYmxlOwogI2lmIFVTRShXRUJfVEhS
RUFEKQogICAgIC8vIE9uIGlPUywgb25lIEF0b21TdHJpbmdUYWJsZSBpcyBzaGFyZWQgYmV0d2Vl
biB0aGUgbWFpbiBVSSB0aHJlYWQgYW5kIHRoZSBXZWJUaHJlYWQuCiAgICAgaWYgKGlzV2ViVGhy
ZWFkKCkgfHwgaXNVSVRocmVhZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IDc2ZjAyOGNmYTcwMzdl
OWMzYTliNzEzNjMxZWY3MzZkYzczNDI4NDUuLjAxNjk0MzI5NGM0MTQ3ZTdjNDBlMDQ0MjNjYWU3
NDI2OWNmZTQwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdUYWJs
ZS5oPgogCiAjaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQogI2luY2x1ZGUgPHNpZ25h
bC5oPgpAQCAtNTksNiArNTgsNyBAQAogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIEFic3RyYWN0
TG9ja2VyOworY2xhc3MgQXRvbVN0cmluZ1RhYmxlOwogY2xhc3MgVGhyZWFkTWVzc2FnZURhdGE7
CiAKIGVudW0gY2xhc3MgVGhyZWFkR3JvdXBBZGRSZXN1bHQ7CkBAIC0zNDUsNyArMzQ1LDYgQEAg
cHJvdGVjdGVkOgogI2VuZGlmCiAKICAgICBBdG9tU3RyaW5nVGFibGUqIG1fY3VycmVudEF0b21T
dHJpbmdUYWJsZSB7IG51bGxwdHIgfTsKLSAgICBBdG9tU3RyaW5nVGFibGUgbV9kZWZhdWx0QXRv
bVN0cmluZ1RhYmxlOwogCiAjaWYgRU5BQkxFKFNUQUNLX1NUQVRTKQogICAgIFN0YWNrU3RhdHM6
OlBlclRocmVhZFN0YXRzIG1fc3RhY2tTdGF0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5n
SW1wbC5jcHAKaW5kZXggMmY3NjcwYjQ4MTJkZjBiY2ZlZjE0NmMzYjJlZTg5ZmU3MTE3ZjVmYS4u
Njk5OTAzZjllMTY0NzUyOTg4OTdiNGRkOTNiY2Q3ZGMyYTYyNmRjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKQEAgLTMwLDQ0ICszMCwyNCBAQAogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Q29udmVyc2lv
bi5oPgogCi0jaWYgVVNFKFdFQl9USFJFQUQpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNlbmRp
ZgotCiBuYW1lc3BhY2UgV1RGIHsKIAogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKLSNpZiBV
U0UoV0VCX1RIUkVBRCkKLQotY2xhc3MgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIDogcHVibGljIExv
Y2tIb2xkZXIgeworY2xhc3MgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIDogcHVibGljIFJlY3Vyc2l2
ZUxvY2tIb2xkZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEF0b21TdHJpbmdUYWJsZUxv
Y2tlcik7Ci0KLSAgICBzdGF0aWMgTG9jayBzX3N0cmluZ1RhYmxlTG9jazsKIHB1YmxpYzoKICAg
ICBBdG9tU3RyaW5nVGFibGVMb2NrZXIoKQotICAgICAgICA6IExvY2tIb2xkZXIoJnNfc3RyaW5n
VGFibGVMb2NrKQorICAgICAgICA6IFJlY3Vyc2l2ZUxvY2tIb2xkZXIoVGhyZWFkOjpjdXJyZW50
KCkuYXRvbVN0cmluZ1RhYmxlKCktPmxvY2soKSkKICAgICB7CiAgICAgfQogfTsKIAotTG9jayBB
dG9tU3RyaW5nVGFibGVMb2NrZXI6OnNfc3RyaW5nVGFibGVMb2NrOwotCi0jZWxzZQotCi1jbGFz
cyBBdG9tU3RyaW5nVGFibGVMb2NrZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEF0b21T
dHJpbmdUYWJsZUxvY2tlcik7Ci1wdWJsaWM6Ci0gICAgQXRvbVN0cmluZ1RhYmxlTG9ja2VyKCkg
eyB9Ci19OwotCi0jZW5kaWYgLy8gVVNFKFdFQl9USFJFQUQpCi0KIHVzaW5nIFN0cmluZ1RhYmxl
SW1wbCA9IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PjsKIAotc3RhdGljIEFMV0FZU19J
TkxJTkUgU3RyaW5nVGFibGVJbXBsJiBzdHJpbmdUYWJsZSgpCitzdGF0aWMgQUxXQVlTX0lOTElO
RSBTdHJpbmdUYWJsZUltcGwmIHN0cmluZ1RhYmxlKGNvbnN0IFJlY3Vyc2l2ZUxvY2tIb2xkZXIm
IGxvY2tIb2xkZXIpCiB7Ci0gICAgcmV0dXJuIFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdU
YWJsZSgpLT50YWJsZSgpOworICAgIHJldHVybiBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9tU3RyaW5n
VGFibGUoKS0+dGFibGUobG9ja0hvbGRlcik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgpAQCAtODYsNyArNjYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4KIHN0YXRpYyBpbmxpbmUgUmVmPEF0b21TdHJp
bmdJbXBsPiBhZGRUb1N0cmluZ1RhYmxlKGNvbnN0IFQmIHZhbHVlKQogewogICAgIEF0b21TdHJp
bmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgcmV0dXJuIGFkZFRvU3RyaW5nVGFibGU8VCwgSGFz
aFRyYW5zbGF0b3I+KGxvY2tlciwgc3RyaW5nVGFibGUoKSwgdmFsdWUpOworICAgIHJldHVybiBh
ZGRUb1N0cmluZ1RhYmxlPFQsIEhhc2hUcmFuc2xhdG9yPihsb2NrZXIsIHN0cmluZ1RhYmxlKGxv
Y2tlciksIHZhbHVlKTsKIH0KIAogc3RydWN0IENTdHJpbmdUcmFuc2xhdG9yIHsKQEAgLTM3Nyw3
ICszNTcsNyBAQCBzdGF0aWMgUmVmPEF0b21TdHJpbmdJbXBsPiBhZGRTeW1ib2woQXRvbVN0cmlu
Z1RhYmxlTG9ja2VyJiBsb2NrZXIsIFN0cmluZ1RhYmxlSQogc3RhdGljIGlubGluZSBSZWY8QXRv
bVN0cmluZ0ltcGw+IGFkZFN5bWJvbChTdHJpbmdJbXBsJiBiYXNlKQogewogICAgIEF0b21TdHJp
bmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgcmV0dXJuIGFkZFN5bWJvbChsb2NrZXIsIHN0cmlu
Z1RhYmxlKCksIGJhc2UpOworICAgIHJldHVybiBhZGRTeW1ib2wobG9ja2VyLCBzdHJpbmdUYWJs
ZShsb2NrZXIpLCBiYXNlKTsKIH0KIAogc3RhdGljIFJlZjxBdG9tU3RyaW5nSW1wbD4gYWRkU3Rh
dGljKEF0b21TdHJpbmdUYWJsZUxvY2tlciYgbG9ja2VyLCBTdHJpbmdUYWJsZUltcGwmIGF0b21T
dHJpbmdUYWJsZSwgY29uc3QgU3RyaW5nSW1wbCYgYmFzZSkKQEAgLTM5Niw3ICszNzYsNyBAQCBz
dGF0aWMgUmVmPEF0b21TdHJpbmdJbXBsPiBhZGRTdGF0aWMoQXRvbVN0cmluZ1RhYmxlTG9ja2Vy
JiBsb2NrZXIsIFN0cmluZ1RhYmxlSQogc3RhdGljIGlubGluZSBSZWY8QXRvbVN0cmluZ0ltcGw+
IGFkZFN0YXRpYyhjb25zdCBTdHJpbmdJbXBsJiBiYXNlKQogewogICAgIEF0b21TdHJpbmdUYWJs
ZUxvY2tlciBsb2NrZXI7Ci0gICAgcmV0dXJuIGFkZFN0YXRpYyhsb2NrZXIsIHN0cmluZ1RhYmxl
KCksIGJhc2UpOworICAgIHJldHVybiBhZGRTdGF0aWMobG9ja2VyLCBzdHJpbmdUYWJsZShsb2Nr
ZXIpLCBiYXNlKTsKIH0KIAogUmVmUHRyPEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6
YWRkKGNvbnN0IFN0YXRpY1N0cmluZ0ltcGwqIHN0cmluZykKQEAgLTQyMiw3ICs0MDIsNyBAQCBS
ZWY8QXRvbVN0cmluZ0ltcGw+IEF0b21TdHJpbmdJbXBsOjphZGRTbG93Q2FzZShTdHJpbmdJbXBs
JiBzdHJpbmcpCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc3RyaW5nLmlzQXRvbSgpLCAiQXRv
bVN0cmluZ0ltcGwgc2hvdWxkIG5vdCBoaXQgdGhlIHNsb3cgY2FzZSBpZiB0aGUgc3RyaW5nIGlz
IGFscmVhZHkgYW4gYXRvbS4iKTsKIAogICAgIEF0b21TdHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7
Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZSgpLmFkZCgmc3RyaW5nKTsKKyAgICBh
dXRvIGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxlKGxvY2tlcikuYWRkKCZzdHJpbmcpOwogCiAgICAg
aWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIEFTU0VSVChhZGRSZXN1bHQuaXRl
cmF0b3ItPmdldCgpID09ICZzdHJpbmcpOwpAQCAtNDQxLDE4ICs0MjEsMTggQEAgUmVmPEF0b21T
dHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6YWRkU2xvd0Nhc2UoQXRvbVN0cmluZ1RhYmxlJiBz
dHJpbmdUYWJsZSwgU3QKIAogICAgIGlmIChzdHJpbmcuaXNTdGF0aWMoKSkgewogICAgICAgICBB
dG9tU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOwotICAgICAgICByZXR1cm4gYWRkU3RhdGljKGxv
Y2tlciwgc3RyaW5nVGFibGUudGFibGUoKSwgc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIGFkZFN0
YXRpYyhsb2NrZXIsIHN0cmluZ1RhYmxlLnRhYmxlKGxvY2tlciksIHN0cmluZyk7CiAgICAgfQog
CiAgICAgaWYgKHN0cmluZy5pc1N5bWJvbCgpKSB7CiAgICAgICAgIEF0b21TdHJpbmdUYWJsZUxv
Y2tlciBsb2NrZXI7Ci0gICAgICAgIHJldHVybiBhZGRTeW1ib2wobG9ja2VyLCBzdHJpbmdUYWJs
ZS50YWJsZSgpLCBzdHJpbmcpOworICAgICAgICByZXR1cm4gYWRkU3ltYm9sKGxvY2tlciwgc3Ry
aW5nVGFibGUudGFibGUobG9ja2VyKSwgc3RyaW5nKTsKICAgICB9CiAKICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKCFzdHJpbmcuaXNBdG9tKCksICJBdG9tU3RyaW5nSW1wbCBzaG91bGQgbm90IGhp
dCB0aGUgc2xvdyBjYXNlIGlmIHRoZSBzdHJpbmcgaXMgYWxyZWFkeSBhbiBhdG9tLiIpOwogCiAg
ICAgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IHN0
cmluZ1RhYmxlLnRhYmxlKCkuYWRkKCZzdHJpbmcpOworICAgIGF1dG8gYWRkUmVzdWx0ID0gc3Ry
aW5nVGFibGUudGFibGUobG9ja2VyKS5hZGQoJnN0cmluZyk7CiAKICAgICBpZiAoYWRkUmVzdWx0
LmlzTmV3RW50cnkpIHsKICAgICAgICAgQVNTRVJUKGFkZFJlc3VsdC5pdGVyYXRvci0+Z2V0KCkg
PT0gJnN0cmluZyk7CkBAIC00NjYsNyArNDQ2LDcgQEAgdm9pZCBBdG9tU3RyaW5nSW1wbDo6cmVt
b3ZlKEF0b21TdHJpbmdJbXBsKiBzdHJpbmcpCiB7CiAgICAgQVNTRVJUKHN0cmluZy0+aXNBdG9t
KCkpOwogICAgIEF0b21TdHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgYXV0byYgYXRvbVN0
cmluZ1RhYmxlID0gc3RyaW5nVGFibGUoKTsKKyAgICBhdXRvJiBhdG9tU3RyaW5nVGFibGUgPSBz
dHJpbmdUYWJsZShsb2NrZXIpOwogICAgIGF1dG8gaXRlcmF0b3IgPSBhdG9tU3RyaW5nVGFibGUu
ZmluZChzdHJpbmcpOwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gYXRvbVN0
cmluZ1RhYmxlLmVuZCgpLCAiVGhlIHN0cmluZyBiZWluZyByZW1vdmVkIGlzIGFuIGF0b20gaW4g
dGhlIHN0cmluZyB0YWJsZSBvZiBhbiBvdGhlciB0aHJlYWQhIik7CiAgICAgQVNTRVJUKHN0cmlu
ZyA9PSBpdGVyYXRvci0+Z2V0KCkpOwpAQCAtNDgxLDcgKzQ2MSw3IEBAIFJlZlB0cjxBdG9tU3Ry
aW5nSW1wbD4gQXRvbVN0cmluZ0ltcGw6Omxvb2tVcFNsb3dDYXNlKFN0cmluZ0ltcGwmIHN0cmlu
ZykKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21TdHJpbmdJbXBsKj4oU3RyaW5nSW1w
bDo6ZW1wdHkoKSk7CiAKICAgICBBdG9tU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOwotICAgIGF1
dG8mIGF0b21TdHJpbmdUYWJsZSA9IHN0cmluZ1RhYmxlKCk7CisgICAgYXV0byYgYXRvbVN0cmlu
Z1RhYmxlID0gc3RyaW5nVGFibGUobG9ja2VyKTsKICAgICBhdXRvIGl0ZXJhdG9yID0gYXRvbVN0
cmluZ1RhYmxlLmZpbmQoJnN0cmluZyk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IGF0b21TdHJpbmdU
YWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21TdHJpbmdJbXBsKj4o
aXRlcmF0b3ItPmdldCgpKTsKQEAgLTUwMyw3ICs0ODMsNyBAQCBSZWZQdHI8QXRvbVN0cmluZ0lt
cGw+IEF0b21TdHJpbmdJbXBsOjphZGRVVEY4KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnNTdGFydCwg
Y29ucwogUmVmUHRyPEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6bG9va1VwKGNvbnN0
IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgQXRvbVN0cmluZ1Rh
YmxlTG9ja2VyIGxvY2tlcjsKLSAgICBhdXRvJiB0YWJsZSA9IHN0cmluZ1RhYmxlKCk7CisgICAg
YXV0byYgdGFibGUgPSBzdHJpbmdUYWJsZShsb2NrZXIpOwogCiAgICAgTENoYXJCdWZmZXIgYnVm
ZmVyID0geyBjaGFyYWN0ZXJzLCBsZW5ndGggfTsKICAgICBhdXRvIGl0ZXJhdG9yID0gdGFibGUu
ZmluZDxMQ2hhckJ1ZmZlclRyYW5zbGF0b3I+KGJ1ZmZlcik7CkBAIC01MTUsNyArNDk1LDcgQEAg
UmVmUHRyPEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6bG9va1VwKGNvbnN0IExDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZAogUmVmUHRyPEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5n
SW1wbDo6bG9va1VwKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7
CiAgICAgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKLSAgICBhdXRvJiB0YWJsZSA9IHN0
cmluZ1RhYmxlKCk7CisgICAgYXV0byYgdGFibGUgPSBzdHJpbmdUYWJsZShsb2NrZXIpOwogCiAg
ICAgVUNoYXJCdWZmZXIgYnVmZmVyIHsgY2hhcmFjdGVycywgbGVuZ3RoIH07CiAgICAgYXV0byBp
dGVyYXRvciA9IHRhYmxlLmZpbmQ8VUNoYXJCdWZmZXJUcmFuc2xhdG9yPihidWZmZXIpOwpAQCAt
NTI4LDcgKzUwOCw3IEBAIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4gQXRvbVN0cmluZ0ltcGw6Omxv
b2tVcChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQKIGJvb2wgQXRvbVN0cmluZ0lt
cGw6OmlzSW5BdG9tU3RyaW5nVGFibGUoU3RyaW5nSW1wbCogc3RyaW5nKQogewogICAgIEF0b21T
dHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgcmV0dXJuIHN0cmluZ1RhYmxlKCkuY29udGFp
bnMoc3RyaW5nKTsKKyAgICByZXR1cm4gc3RyaW5nVGFibGUobG9ja2VyKS5jb250YWlucyhzdHJp
bmcpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0
cmluZ1RhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCmluZGV4
IDJmMDg5Y2U5NjA4MWFhNmM3ZTU4YzFiYzEyYzRlMzA0NTExM2E1N2UuLjZjNDQ0NTU2N2FhMTkx
ZDYxZmQyNjQyZGYwMGZlZjdhYmRiMzJhYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvQXRvbVN0cmluZ1RhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5n
VGFibGUuaApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvUGFja2VkLmg+CisjaW5jbHVkZSA8d3RmL1JlY3Vyc2l2ZUxvY2tBZGFwdGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
QEAgLTM1LDkgKzM2LDExIEBAIGNsYXNzIEF0b21TdHJpbmdUYWJsZSB7CiBwdWJsaWM6CiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIH5BdG9tU3RyaW5nVGFibGUoKTsKIAotICAgIEhhc2hTZXQ8UGFj
a2VkUHRyPFN0cmluZ0ltcGw+PiYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CisgICAgUmVj
dXJzaXZlTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorICAgIEhhc2hTZXQ8UGFja2Vk
UHRyPFN0cmluZ0ltcGw+PiYgdGFibGUoY29uc3QgUmVjdXJzaXZlTG9ja0hvbGRlciYpIHsgcmV0
dXJuIG1fdGFibGU7IH0KIAogcHJpdmF0ZToKKyAgICBSZWN1cnNpdmVMb2NrIG1fbG9jazsKICAg
ICBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4gbV90YWJsZTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvRXh0ZXJuYWxTdHJpbmdJbXBsLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvRXh0ZXJuYWxTdHJpbmdJbXBsLmNwcAppbmRleCA5NmFjYWM4MWYwOTM3MTdh
ZmY1ZjJjNTg4NjAyMzA0MGVjNTI5OWViLi5hNWJkYzA2YjU2OTczNDgyNzE3NTE0MjU3NDdmOThm
ODllYWJkOGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0V4dGVybmFsU3RyaW5n
SW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9FeHRlcm5hbFN0cmluZ0ltcGwuY3Bw
CkBAIC00Myw3ICs0Myw3IEBAIEV4dGVybmFsU3RyaW5nSW1wbDo6RXh0ZXJuYWxTdHJpbmdJbXBs
KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsCiAgICAgLCBtX2ZyZWUo
V1RGTW92ZShmcmVlKSkKIHsKICAgICBBU1NFUlQobV9mcmVlKTsKLSAgICBtX2hhc2hBbmRGbGFn
cyA9IChtX2hhc2hBbmRGbGFncyAmIH5zX2hhc2hNYXNrQnVmZmVyT3duZXJzaGlwKSB8IEJ1ZmZl
ckV4dGVybmFsOworICAgIG1faGFzaEFuZEZsYWdzLnN0b3JlKChtX2hhc2hBbmRGbGFncy5sb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgfnNfaGFzaE1hc2tCdWZmZXJPd25lcnNoaXAp
IHwgQnVmZmVyRXh0ZXJuYWwsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwogfQogCiBFeHRl
cm5hbFN0cmluZ0ltcGw6OkV4dGVybmFsU3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoLCBFeHRlcm5hbFN0cmluZ0ltcGxGcmVlRnVuY3Rpb24mJiBmcmVl
KQpAQCAtNTEsNyArNTEsNyBAQCBFeHRlcm5hbFN0cmluZ0ltcGw6OkV4dGVybmFsU3RyaW5nSW1w
bChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLAogICAgICwgbV9mcmVl
KFdURk1vdmUoZnJlZSkpCiB7CiAgICAgQVNTRVJUKG1fZnJlZSk7Ci0gICAgbV9oYXNoQW5kRmxh
Z3MgPSAobV9oYXNoQW5kRmxhZ3MgJiB+c19oYXNoTWFza0J1ZmZlck93bmVyc2hpcCkgfCBCdWZm
ZXJFeHRlcm5hbDsKKyAgICBtX2hhc2hBbmRGbGFncy5zdG9yZSgobV9oYXNoQW5kRmxhZ3MubG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIH5zX2hhc2hNYXNrQnVmZmVyT3duZXJzaGlw
KSB8IEJ1ZmZlckV4dGVybmFsLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0lt
cGwuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IDRkNjZmZDVlNjQ1
MmU0OWEwYzhmOTlhMzA3MmYyYzgzMTU2NjU4OTUuLjc5NDU0NDE1MjYxOTkzYzRkNDBlNzY5MWI1
NDFhMDI2YzA4ZjQ4ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1w
bC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCkBAIC0yMiw2ICsyMiw3
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8YXRvbWljPgogI2luY2x1ZGUgPGxpbWl0
cy5oPgogI2luY2x1ZGUgPHVuaWNvZGUvdXN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNU
eXBlLmg+CkBAIC0xNDIsNyArMTQzLDcgQEAgcHJvdGVjdGVkOgogICAgIHRlbXBsYXRlPHVuc2ln
bmVkIGNoYXJhY3RlckNvdW50PiBjb25zdGV4cHIgU3RyaW5nSW1wbFNoYXBlKHVuc2lnbmVkIHJl
ZkNvdW50LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0
ZXJDb3VudF0sIHVuc2lnbmVkIGhhc2hBbmRGbGFncywgQ29uc3RydWN0V2l0aENvbnN0RXhwclRh
Zyk7CiAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+IGNvbnN0ZXhwciBTdHJp
bmdJbXBsU2hhcGUodW5zaWduZWQgcmVmQ291bnQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgY2hh
cjE2X3QgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0sIHVuc2lnbmVkIGhhc2hBbmRGbGFn
cywgQ29uc3RydWN0V2l0aENvbnN0RXhwclRhZyk7CiAKLSAgICB1bnNpZ25lZCBtX3JlZkNvdW50
OworICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBtX3JlZkNvdW50OwogICAgIHVuc2lnbmVkIG1f
bGVuZ3RoOwogICAgIHVuaW9uIHsKICAgICAgICAgY29uc3QgTENoYXIqIG1fZGF0YTg7CkBAIC0x
NTIsNyArMTUzLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBjb25zdCBjaGFyKiBtX2RhdGE4Q2hh
cjsKICAgICAgICAgY29uc3QgY2hhcjE2X3QqIG1fZGF0YTE2Q2hhcjsKICAgICB9OwotICAgIG11
dGFibGUgdW5zaWduZWQgbV9oYXNoQW5kRmxhZ3M7CisgICAgbXV0YWJsZSBzdGQ6OmF0b21pYzx1
bnNpZ25lZD4gbV9oYXNoQW5kRmxhZ3M7CiB9OwogCiAvLyBGSVhNRTogVXNlIG9mIFN0cmluZ0lt
cGwgYW5kIGNvbnN0IGlzIHJhdGhlciBjb25mdXNlZC4KQEAgLTI4Miw3ICsyODMsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhNZW1vcnlPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoU3RyaW5nSW1wbCwgbV9sZW5ndGgpOyB9CiAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gIW1fbGVuZ3RoOyB9CiAKLSAgICBib29sIGlzOEJpdCgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzaEFuZEZsYWdzICYgc19oYXNoRmxhZzhCaXRCdWZmZXI7IH0KKyAgICBi
b29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEFuZEZsYWdzLmxvYWQoc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSkgJiBzX2hhc2hGbGFnOEJpdEJ1ZmZlcjsgfQogICAgIEFMV0FZU19J
TkxJTkUgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QgeyBBU1NFUlQoaXM4Qml0KCkp
OyByZXR1cm4gbV9kYXRhODsgfQogICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMxNigpIGNvbnN0IHsgQVNTRVJUKCFpczhCaXQoKSk7IHJldHVybiBtX2RhdGExNjsgfQog
CkBAIC0yOTMsOCArMjk0LDggQEAgcHVibGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNp
emVfdCBzaXplSW5CeXRlcygpIGNvbnN0OwogCi0gICAgYm9vbCBpc1N5bWJvbCgpIGNvbnN0IHsg
cmV0dXJuIG1faGFzaEFuZEZsYWdzICYgc19oYXNoRmxhZ1N0cmluZ0tpbmRJc1N5bWJvbDsgfQot
ICAgIGJvb2wgaXNBdG9tKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hG
bGFnU3RyaW5nS2luZElzQXRvbTsgfQorICAgIGJvb2wgaXNTeW1ib2woKSBjb25zdCB7IHJldHVy
biBtX2hhc2hBbmRGbGFncy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgc19oYXNo
RmxhZ1N0cmluZ0tpbmRJc1N5bWJvbDsgfQorICAgIGJvb2wgaXNBdG9tKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNoQW5kRmxhZ3MubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIHNfaGFz
aEZsYWdTdHJpbmdLaW5kSXNBdG9tOyB9CiAgICAgdm9pZCBzZXRJc0F0b20oYm9vbCk7CiAgICAg
CiAgICAgYm9vbCBpc0V4dGVybmFsKCkgY29uc3QgeyByZXR1cm4gYnVmZmVyT3duZXJzaGlwKCkg
PT0gQnVmZmVyRXh0ZXJuYWw7IH0KQEAgLTMxNiw3ICszMTcsNyBAQCBwcml2YXRlOgogICAgIC8v
IFNvLCB3ZSBzaGlmdCBsZWZ0IGFuZCByaWdodCB3aGVuIHNldHRpbmcgYW5kIGdldHRpbmcgb3Vy
IGhhc2ggY29kZS4KICAgICB2b2lkIHNldEhhc2godW5zaWduZWQpIGNvbnN0OwogCi0gICAgdW5z
aWduZWQgcmF3SGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEFuZEZsYWdzID4+IHNfZmxhZ0Nv
dW50OyB9CisgICAgdW5zaWduZWQgcmF3SGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEFuZEZs
YWdzLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgPj4gc19mbGFnQ291bnQ7IH0KIAog
cHVibGljOgogICAgIGJvb2wgaGFzSGFzaCgpIGNvbnN0IHsgcmV0dXJuICEhcmF3SGFzaCgpOyB9
CkBAIC0zMjksMTEgKzMzMCwxMSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgc3ltYm9sQXdhcmVI
YXNoKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgZXhpc3RpbmdTeW1ib2xBd2FyZUhhc2goKSBjb25z
dDsKIAotICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJldHVybiBtX3JlZkNvdW50ICYgc19y
ZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZzsgfQorICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7
IHJldHVybiBtX3JlZkNvdW50LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCkgJiBzX3Jl
ZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nOyB9CiAKLSAgICBzaXplX3QgcmVmQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX3JlZkNvdW50IC8gc19yZWZDb3VudEluY3JlbWVudDsgfQotICAgIGJvb2wg
aGFzT25lUmVmKCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3VudCA9PSBzX3JlZkNvdW50SW5jcmVt
ZW50OyB9Ci0gICAgYm9vbCBoYXNBdExlYXN0T25lUmVmKCkgY29uc3QgeyByZXR1cm4gbV9yZWZD
b3VudDsgfSAvLyBGb3IgYXNzZXJ0aW9ucy4KKyAgICBzaXplX3QgcmVmQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX3JlZkNvdW50LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgLyBzX3Jl
ZkNvdW50SW5jcmVtZW50OyB9CisgICAgYm9vbCBoYXNPbmVSZWYoKSBjb25zdCB7IHJldHVybiBt
X3JlZkNvdW50LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgPT0gc19yZWZDb3VudElu
Y3JlbWVudDsgfQorICAgIGJvb2wgaGFzQXRMZWFzdE9uZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1f
cmVmQ291bnQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsgfSAvLyBGb3IgYXNzZXJ0
aW9ucy4KIAogICAgIHZvaWQgcmVmKCk7CiAgICAgdm9pZCBkZXJlZigpOwpAQCAtNDg1LDcgKzQ4
Niw3IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBTdHJpbmdTdGF0cyYgc3Ry
aW5nU3RhdHMoKSB7IHJldHVybiBtX3N0cmluZ1N0YXRzOyB9CiAjZW5kaWYKIAotICAgIEJ1ZmZl
ck93bmVyc2hpcCBidWZmZXJPd25lcnNoaXAoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxC
dWZmZXJPd25lcnNoaXA+KG1faGFzaEFuZEZsYWdzICYgc19oYXNoTWFza0J1ZmZlck93bmVyc2hp
cCk7IH0KKyAgICBCdWZmZXJPd25lcnNoaXAgYnVmZmVyT3duZXJzaGlwKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8QnVmZmVyT3duZXJzaGlwPihtX2hhc2hBbmRGbGFncy5sb2FkKHN0ZDo6
bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgc19oYXNoTWFza0J1ZmZlck93bmVyc2hpcCk7IH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0
dXJuIHRhaWxPZmZzZXQ8VD4oKTsgfQogICAgIApAQCAtMTA0OCwxMCArMTA0OSwxMCBAQCBpbmxp
bmUgc2l6ZV90IFN0cmluZ0ltcGw6OmNvc3QoKSBjb25zdAogICAgIC8vIFdlIGVuc3VyZSB0aGlz
IGJ5IHByZS1zZXR0aW5nIHRoZSBzX2hhc2hGbGFnRGlkUmVwb3J0Q29zdCBiaXQgaW4gYWxsIGlu
c3RhbmNlcyBvZgogICAgIC8vIFN0YXRpY1N0cmluZ0ltcGwuIEFzIGEgcmVzdWx0LCBTdGF0aWNT
dHJpbmdJbXBsIGluc3RhbmNlcyB3aWxsIGFsd2F5cyByZXR1cm4gYSBjb3N0IG9mCiAgICAgLy8g
MCBoZXJlIGFuZCBhdm9pZCBtb2RpZnlpbmcgbV9oYXNoQW5kRmxhZ3MuCi0gICAgaWYgKG1faGFz
aEFuZEZsYWdzICYgc19oYXNoRmxhZ0RpZFJlcG9ydENvc3QpCisgICAgaWYgKG1faGFzaEFuZEZs
YWdzLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBzX2hhc2hGbGFnRGlkUmVwb3J0
Q29zdCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBtX2hhc2hBbmRGbGFncyB8PSBzX2hhc2hG
bGFnRGlkUmVwb3J0Q29zdDsKKyAgICBtX2hhc2hBbmRGbGFncy5mZXRjaF9vcihzX2hhc2hGbGFn
RGlkUmVwb3J0Q29zdCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CiAgICAgc2l6ZV90IHJl
c3VsdCA9IG1fbGVuZ3RoOwogICAgIGlmICghaXM4Qml0KCkpCiAgICAgICAgIHJlc3VsdCA8PD0g
MTsKQEAgLTEwNzcsOSArMTA3OCw5IEBAIGlubGluZSB2b2lkIFN0cmluZ0ltcGw6OnNldElzQXRv
bShib29sIGlzQXRvbSkKICAgICBBU1NFUlQoIWlzU3RhdGljKCkpOwogICAgIEFTU0VSVCghaXNT
eW1ib2woKSk7CiAgICAgaWYgKGlzQXRvbSkKLSAgICAgICAgbV9oYXNoQW5kRmxhZ3MgfD0gc19o
YXNoRmxhZ1N0cmluZ0tpbmRJc0F0b207CisgICAgICAgIG1faGFzaEFuZEZsYWdzLmZldGNoX29y
KHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNBdG9tLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsK
ICAgICBlbHNlCi0gICAgICAgIG1faGFzaEFuZEZsYWdzICY9IH5zX2hhc2hGbGFnU3RyaW5nS2lu
ZElzQXRvbTsKKyAgICAgICAgbV9oYXNoQW5kRmxhZ3MuZmV0Y2hfYW5kKH5zX2hhc2hGbGFnU3Ry
aW5nS2luZElzQXRvbSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CiB9CiAKIGlubGluZSB2
b2lkIFN0cmluZ0ltcGw6OnNldEhhc2godW5zaWduZWQgaGFzaCkgY29uc3QKQEAgLTEwOTUsMjkg
KzEwOTYsMzMgQEAgaW5saW5lIHZvaWQgU3RyaW5nSW1wbDo6c2V0SGFzaCh1bnNpZ25lZCBoYXNo
KSBjb25zdAogICAgIEFTU0VSVCghKGhhc2ggJiAoc19mbGFnTWFzayA8PCAoOCAqIHNpemVvZiho
YXNoKSAtIHNfZmxhZ0NvdW50KSkpKTsgLy8gVmVyaWZ5IHRoYXQgZW5vdWdoIGhpZ2ggYml0cyBh
cmUgZW1wdHkuCiAKICAgICBoYXNoIDw8PSBzX2ZsYWdDb3VudDsKLSAgICBBU1NFUlQoIShoYXNo
ICYgbV9oYXNoQW5kRmxhZ3MpKTsgLy8gVmVyaWZ5IHRoYXQgZW5vdWdoIGxvdyBiaXRzIGFyZSBl
bXB0eSBhZnRlciBzaGlmdC4KKyAgICBBU1NFUlQoIShoYXNoICYgbV9oYXNoQW5kRmxhZ3MubG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpOyAvLyBWZXJpZnkgdGhhdCBlbm91Z2ggbG93
IGJpdHMgYXJlIGVtcHR5IGFmdGVyIHNoaWZ0LgogICAgIEFTU0VSVChoYXNoKTsgLy8gVmVyaWZ5
IHRoYXQgMCBpcyBhIHZhbGlkIHNlbnRpbmVsIGhhc2ggdmFsdWUuCiAKLSAgICBtX2hhc2hBbmRG
bGFncyB8PSBoYXNoOyAvLyBTdG9yZSBoYXNoIHdpdGggZmxhZ3MgaW4gbG93IGJpdHMuCisgICAg
bV9oYXNoQW5kRmxhZ3MuZmV0Y2hfb3IoaGFzaCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7
IC8vIFN0b3JlIGhhc2ggd2l0aCBmbGFncyBpbiBsb3cgYml0cy4KIH0KIAogaW5saW5lIHZvaWQg
U3RyaW5nSW1wbDo6cmVmKCkKIHsKICAgICBTVFJJTkdfU1RBVFNfUkVGX1NUUklORygqdGhpcyk7
CiAKLSAgICBtX3JlZkNvdW50ICs9IHNfcmVmQ291bnRJbmNyZW1lbnQ7CisgICAgbV9yZWZDb3Vu
dC5mZXRjaF9hZGQoc19yZWZDb3VudEluY3JlbWVudCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhl
ZCk7CiB9CiAKIGlubGluZSB2b2lkIFN0cmluZ0ltcGw6OmRlcmVmKCkKIHsKICAgICBTVFJJTkdf
U1RBVFNfREVSRUZfU1RSSU5HKCp0aGlzKTsKIAotICAgIHVuc2lnbmVkIHRlbXBSZWZDb3VudCA9
IG1fcmVmQ291bnQgLSBzX3JlZkNvdW50SW5jcmVtZW50OwotICAgIGlmICghdGVtcFJlZkNvdW50
KSB7Ci0gICAgICAgIFN0cmluZ0ltcGw6OmRlc3Ryb3kodGhpcyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgbV9yZWZDb3VudCA9IHRlbXBSZWZDb3VudDsKKyAgICAvLyBGSVhNRTogVGhp
cyBpcyB0byBhdm9pZCBtX3JlZkNvdW50IGFjdHVhbGx5IHJlYWNoaW5nIHplcm8gYW5kIHRoZSBs
b2dpYyBpcyBjb3BpZWQgZnJvbSBDaHJvbWl1bSwKKyAgICAvLyAgICAgICAgYnV0IEkgZG9uJ3Qg
dW5kZXJzdGFuZCB3aHkgd2UgZG8gaXQgdGhpcyB3YXk/IFdoeSBub3QganVzdCBsZXQgaXQgZ2V0
IHRvIHplcm8gYW5kIGFzc2VydAorICAgIC8vICAgICAgICByZWZDb3VudCBpcyA+MCBiZWZvcmUg
ZGVyZWY/CisgICAgYXV0byByZWZDb3VudCA9IG1fcmVmQ291bnQubG9hZChzdGQ6Om1lbW9yeV9v
cmRlcl9hY3F1aXJlKTsKKyAgICBkbyB7CisgICAgICAgIGlmICghKHJlZkNvdW50IC0gc19yZWZD
b3VudEluY3JlbWVudCkpIHsKKyAgICAgICAgICAgIFN0cmluZ0ltcGw6OmRlc3Ryb3kodGhpcyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IHdoaWxlICghbV9yZWZDb3Vu
dC5jb21wYXJlX2V4Y2hhbmdlX3dlYWsocmVmQ291bnQsIHJlZkNvdW50IC0gc19yZWZDb3VudElu
Y3JlbWVudCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBTb3VyY2VDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBEZXN0aW5hdGlvbkNoYXJhY3RlclR5
cGU+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415130</attachid>
            <date>2020-12-01 05:03:38 -0800</date>
            <delta_ts>2020-12-01 06:22:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219285-20201201130336.patch</filename>
            <type>text/plain</type>
            <size>17567</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9S
ZWN1cnNpdmVMb2NrQWRhcHRlci5oIGIvU291cmNlL1dURi93dGYvUmVjdXJzaXZlTG9ja0FkYXB0
ZXIuaAppbmRleCBmNTYwNTcyYzE1ZjYwZTViMjhhNTgzOWQ1MDZjNDk4NmY4ODM1NWZmLi45MDJj
ZTE0NDdkYWE0OTg1ZDYyMTkwMGE0NGQ1Nzc5ZjFjMzVmOGE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9SZWN1cnNpdmVMb2NrQWRhcHRlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlY3Vy
c2l2ZUxvY2tBZGFwdGVyLmgKQEAgLTg4LDcgKzg4LDkgQEAgcHJpdmF0ZToKIH07CiAKIHVzaW5n
IFJlY3Vyc2l2ZUxvY2sgPSBSZWN1cnNpdmVMb2NrQWRhcHRlcjxMb2NrPjsKK3VzaW5nIFJlY3Vy
c2l2ZUxvY2tIb2xkZXIgPSBMb2NrZXI8UmVjdXJzaXZlTG9jaz47CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgogCiB1c2luZyBXVEY6OlJlY3Vyc2l2ZUxvY2s7Cit1c2luZyBXVEY6OlJlY3Vyc2l2ZUxv
Y2tIb2xkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAppbmRleCA1ZDdkNmQzYjNkZDYwNzVjYmUzOWE2MjNl
MDNlMjdhNWVjMTc3ODRmLi45OWM1OGFlMjZiMjA1ODEyYmZjZmIyNmI0MzFjYmI4ZjBkYjljNDI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZy5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDx3dGYvVGhy
ZWFkR3JvdXAuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogI2luY2x1
ZGUgPHd0Zi9XVEZDb25maWcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUu
aD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNpZiBIQVZFKFFPU19DTEFT
U0VTKQpAQCAtMTI4LDEzICsxMjksMTUgQEAgY29uc3QgY2hhciogVGhyZWFkOjpub3JtYWxpemVU
aHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiAjZW5kaWYKIH0KIAorc3RhdGljIEF0
b21TdHJpbmdUYWJsZSBzX2RlZmF1bHRBdG9tU3RyaW5nVGFibGU7CisKIHZvaWQgVGhyZWFkOjpp
bml0aWFsaXplSW5UaHJlYWQoKQogewogICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKICAgICAg
ICAgbV9zdGFjayA9IFN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tCb3VuZHMoKTsKICAg
ICBtX3NhdmVkTGFzdFN0YWNrVG9wID0gc3RhY2soKS5vcmlnaW4oKTsKIAotICAgIG1fY3VycmVu
dEF0b21TdHJpbmdUYWJsZSA9ICZtX2RlZmF1bHRBdG9tU3RyaW5nVGFibGU7CisgICAgbV9jdXJy
ZW50QXRvbVN0cmluZ1RhYmxlID0gJnNfZGVmYXVsdEF0b21TdHJpbmdUYWJsZTsKICNpZiBVU0Uo
V0VCX1RIUkVBRCkKICAgICAvLyBPbiBpT1MsIG9uZSBBdG9tU3RyaW5nVGFibGUgaXMgc2hhcmVk
IGJldHdlZW4gdGhlIG1haW4gVUkgdGhyZWFkIGFuZCB0aGUgV2ViVGhyZWFkLgogICAgIGlmIChp
c1dlYlRocmVhZCgpIHx8IGlzVUlUaHJlYWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCA3NmYwMjhj
ZmE3MDM3ZTljM2E5YjcxMzYzMWVmNzM2ZGM3MzQyODQ1Li4wMTY5NDMyOTRjNDE0N2U3YzQwZTA0
NDIzY2FlNzQyNjljZmU0MGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtNDYsNyArNDYsNiBAQAogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3Ry
aW5nVGFibGUuaD4KIAogI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKICNpbmNsdWRl
IDxzaWduYWwuaD4KQEAgLTU5LDYgKzU4LDcgQEAKIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBB
YnN0cmFjdExvY2tlcjsKK2NsYXNzIEF0b21TdHJpbmdUYWJsZTsKIGNsYXNzIFRocmVhZE1lc3Nh
Z2VEYXRhOwogCiBlbnVtIGNsYXNzIFRocmVhZEdyb3VwQWRkUmVzdWx0OwpAQCAtMzQ1LDcgKzM0
NSw2IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiAgICAgQXRvbVN0cmluZ1RhYmxlKiBtX2N1cnJl
bnRBdG9tU3RyaW5nVGFibGUgeyBudWxscHRyIH07Ci0gICAgQXRvbVN0cmluZ1RhYmxlIG1fZGVm
YXVsdEF0b21TdHJpbmdUYWJsZTsKIAogI2lmIEVOQUJMRShTVEFDS19TVEFUUykKICAgICBTdGFj
a1N0YXRzOjpQZXJUaHJlYWRTdGF0cyBtX3N0YWNrU3RhdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRv
bVN0cmluZ0ltcGwuY3BwCmluZGV4IDJmNzY3MGI0ODEyZGYwYmNmZWYxNDZjM2IyZWU4OWZlNzEx
N2Y1ZmEuLjY5OTkwM2Y5ZTE2NDc1Mjk4ODk3YjRkZDkzYmNkN2RjMmE2MjZkYzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCkBAIC0zMCw0NCArMzAsMjQgQEAKICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOENv
bnZlcnNpb24uaD4KIAotI2lmIFVTRShXRUJfVEhSRUFEKQotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdURiB7CiAKIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwog
Ci0jaWYgVVNFKFdFQl9USFJFQUQpCi0KLWNsYXNzIEF0b21TdHJpbmdUYWJsZUxvY2tlciA6IHB1
YmxpYyBMb2NrSG9sZGVyIHsKK2NsYXNzIEF0b21TdHJpbmdUYWJsZUxvY2tlciA6IHB1YmxpYyBS
ZWN1cnNpdmVMb2NrSG9sZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBdG9tU3RyaW5n
VGFibGVMb2NrZXIpOwotCi0gICAgc3RhdGljIExvY2sgc19zdHJpbmdUYWJsZUxvY2s7CiBwdWJs
aWM6CiAgICAgQXRvbVN0cmluZ1RhYmxlTG9ja2VyKCkKLSAgICAgICAgOiBMb2NrSG9sZGVyKCZz
X3N0cmluZ1RhYmxlTG9jaykKKyAgICAgICAgOiBSZWN1cnNpdmVMb2NrSG9sZGVyKFRocmVhZDo6
Y3VycmVudCgpLmF0b21TdHJpbmdUYWJsZSgpLT5sb2NrKCkpCiAgICAgewogICAgIH0KIH07CiAK
LUxvY2sgQXRvbVN0cmluZ1RhYmxlTG9ja2VyOjpzX3N0cmluZ1RhYmxlTG9jazsKLQotI2Vsc2UK
LQotY2xhc3MgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShBdG9tU3RyaW5nVGFibGVMb2NrZXIpOwotcHVibGljOgotICAgIEF0b21TdHJpbmdUYWJsZUxv
Y2tlcigpIHsgfQotfTsKLQotI2VuZGlmIC8vIFVTRShXRUJfVEhSRUFEKQotCiB1c2luZyBTdHJp
bmdUYWJsZUltcGwgPSBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj47CiAKLXN0YXRpYyBB
TFdBWVNfSU5MSU5FIFN0cmluZ1RhYmxlSW1wbCYgc3RyaW5nVGFibGUoKQorc3RhdGljIEFMV0FZ
U19JTkxJTkUgU3RyaW5nVGFibGVJbXBsJiBzdHJpbmdUYWJsZShjb25zdCBSZWN1cnNpdmVMb2Nr
SG9sZGVyJiBsb2NrSG9sZGVyKQogewotICAgIHJldHVybiBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9t
U3RyaW5nVGFibGUoKS0+dGFibGUoKTsKKyAgICByZXR1cm4gVGhyZWFkOjpjdXJyZW50KCkuYXRv
bVN0cmluZ1RhYmxlKCktPnRhYmxlKGxvY2tIb2xkZXIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4KQEAgLTg2LDcgKzY2LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+CiBzdGF0aWMgaW5saW5lIFJlZjxB
dG9tU3RyaW5nSW1wbD4gYWRkVG9TdHJpbmdUYWJsZShjb25zdCBUJiB2YWx1ZSkKIHsKICAgICBB
dG9tU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOwotICAgIHJldHVybiBhZGRUb1N0cmluZ1RhYmxl
PFQsIEhhc2hUcmFuc2xhdG9yPihsb2NrZXIsIHN0cmluZ1RhYmxlKCksIHZhbHVlKTsKKyAgICBy
ZXR1cm4gYWRkVG9TdHJpbmdUYWJsZTxULCBIYXNoVHJhbnNsYXRvcj4obG9ja2VyLCBzdHJpbmdU
YWJsZShsb2NrZXIpLCB2YWx1ZSk7CiB9CiAKIHN0cnVjdCBDU3RyaW5nVHJhbnNsYXRvciB7CkBA
IC0zNzcsNyArMzU3LDcgQEAgc3RhdGljIFJlZjxBdG9tU3RyaW5nSW1wbD4gYWRkU3ltYm9sKEF0
b21TdHJpbmdUYWJsZUxvY2tlciYgbG9ja2VyLCBTdHJpbmdUYWJsZUkKIHN0YXRpYyBpbmxpbmUg
UmVmPEF0b21TdHJpbmdJbXBsPiBhZGRTeW1ib2woU3RyaW5nSW1wbCYgYmFzZSkKIHsKICAgICBB
dG9tU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOwotICAgIHJldHVybiBhZGRTeW1ib2wobG9ja2Vy
LCBzdHJpbmdUYWJsZSgpLCBiYXNlKTsKKyAgICByZXR1cm4gYWRkU3ltYm9sKGxvY2tlciwgc3Ry
aW5nVGFibGUobG9ja2VyKSwgYmFzZSk7CiB9CiAKIHN0YXRpYyBSZWY8QXRvbVN0cmluZ0ltcGw+
IGFkZFN0YXRpYyhBdG9tU3RyaW5nVGFibGVMb2NrZXImIGxvY2tlciwgU3RyaW5nVGFibGVJbXBs
JiBhdG9tU3RyaW5nVGFibGUsIGNvbnN0IFN0cmluZ0ltcGwmIGJhc2UpCkBAIC0zOTYsNyArMzc2
LDcgQEAgc3RhdGljIFJlZjxBdG9tU3RyaW5nSW1wbD4gYWRkU3RhdGljKEF0b21TdHJpbmdUYWJs
ZUxvY2tlciYgbG9ja2VyLCBTdHJpbmdUYWJsZUkKIHN0YXRpYyBpbmxpbmUgUmVmPEF0b21TdHJp
bmdJbXBsPiBhZGRTdGF0aWMoY29uc3QgU3RyaW5nSW1wbCYgYmFzZSkKIHsKICAgICBBdG9tU3Ry
aW5nVGFibGVMb2NrZXIgbG9ja2VyOwotICAgIHJldHVybiBhZGRTdGF0aWMobG9ja2VyLCBzdHJp
bmdUYWJsZSgpLCBiYXNlKTsKKyAgICByZXR1cm4gYWRkU3RhdGljKGxvY2tlciwgc3RyaW5nVGFi
bGUobG9ja2VyKSwgYmFzZSk7CiB9CiAKIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4gQXRvbVN0cmlu
Z0ltcGw6OmFkZChjb25zdCBTdGF0aWNTdHJpbmdJbXBsKiBzdHJpbmcpCkBAIC00MjIsNyArNDAy
LDcgQEAgUmVmPEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6YWRkU2xvd0Nhc2UoU3Ry
aW5nSW1wbCYgc3RyaW5nKQogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXN0cmluZy5pc0F0b20o
KSwgIkF0b21TdHJpbmdJbXBsIHNob3VsZCBub3QgaGl0IHRoZSBzbG93IGNhc2UgaWYgdGhlIHN0
cmluZyBpcyBhbHJlYWR5IGFuIGF0b20uIik7CiAKICAgICBBdG9tU3RyaW5nVGFibGVMb2NrZXIg
bG9ja2VyOwotICAgIGF1dG8gYWRkUmVzdWx0ID0gc3RyaW5nVGFibGUoKS5hZGQoJnN0cmluZyk7
CisgICAgYXV0byBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZShsb2NrZXIpLmFkZCgmc3RyaW5nKTsK
IAogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBBU1NFUlQoYWRkUmVz
dWx0Lml0ZXJhdG9yLT5nZXQoKSA9PSAmc3RyaW5nKTsKQEAgLTQ0MSwxOCArNDIxLDE4IEBAIFJl
ZjxBdG9tU3RyaW5nSW1wbD4gQXRvbVN0cmluZ0ltcGw6OmFkZFNsb3dDYXNlKEF0b21TdHJpbmdU
YWJsZSYgc3RyaW5nVGFibGUsIFN0CiAKICAgICBpZiAoc3RyaW5nLmlzU3RhdGljKCkpIHsKICAg
ICAgICAgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKLSAgICAgICAgcmV0dXJuIGFkZFN0
YXRpYyhsb2NrZXIsIHN0cmluZ1RhYmxlLnRhYmxlKCksIHN0cmluZyk7CisgICAgICAgIHJldHVy
biBhZGRTdGF0aWMobG9ja2VyLCBzdHJpbmdUYWJsZS50YWJsZShsb2NrZXIpLCBzdHJpbmcpOwog
ICAgIH0KIAogICAgIGlmIChzdHJpbmcuaXNTeW1ib2woKSkgewogICAgICAgICBBdG9tU3RyaW5n
VGFibGVMb2NrZXIgbG9ja2VyOwotICAgICAgICByZXR1cm4gYWRkU3ltYm9sKGxvY2tlciwgc3Ry
aW5nVGFibGUudGFibGUoKSwgc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIGFkZFN5bWJvbChsb2Nr
ZXIsIHN0cmluZ1RhYmxlLnRhYmxlKGxvY2tlciksIHN0cmluZyk7CiAgICAgfQogCiAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRSghc3RyaW5nLmlzQXRvbSgpLCAiQXRvbVN0cmluZ0ltcGwgc2hvdWxk
IG5vdCBoaXQgdGhlIHNsb3cgY2FzZSBpZiB0aGUgc3RyaW5nIGlzIGFscmVhZHkgYW4gYXRvbS4i
KTsKIAogICAgIEF0b21TdHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgYXV0byBhZGRSZXN1
bHQgPSBzdHJpbmdUYWJsZS50YWJsZSgpLmFkZCgmc3RyaW5nKTsKKyAgICBhdXRvIGFkZFJlc3Vs
dCA9IHN0cmluZ1RhYmxlLnRhYmxlKGxvY2tlcikuYWRkKCZzdHJpbmcpOwogCiAgICAgaWYgKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIEFTU0VSVChhZGRSZXN1bHQuaXRlcmF0b3It
PmdldCgpID09ICZzdHJpbmcpOwpAQCAtNDY2LDcgKzQ0Niw3IEBAIHZvaWQgQXRvbVN0cmluZ0lt
cGw6OnJlbW92ZShBdG9tU3RyaW5nSW1wbCogc3RyaW5nKQogewogICAgIEFTU0VSVChzdHJpbmct
PmlzQXRvbSgpKTsKICAgICBBdG9tU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOwotICAgIGF1dG8m
IGF0b21TdHJpbmdUYWJsZSA9IHN0cmluZ1RhYmxlKCk7CisgICAgYXV0byYgYXRvbVN0cmluZ1Rh
YmxlID0gc3RyaW5nVGFibGUobG9ja2VyKTsKICAgICBhdXRvIGl0ZXJhdG9yID0gYXRvbVN0cmlu
Z1RhYmxlLmZpbmQoc3RyaW5nKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXJhdG9yICE9
IGF0b21TdHJpbmdUYWJsZS5lbmQoKSwgIlRoZSBzdHJpbmcgYmVpbmcgcmVtb3ZlZCBpcyBhbiBh
dG9tIGluIHRoZSBzdHJpbmcgdGFibGUgb2YgYW4gb3RoZXIgdGhyZWFkISIpOwogICAgIEFTU0VS
VChzdHJpbmcgPT0gaXRlcmF0b3ItPmdldCgpKTsKQEAgLTQ4MSw3ICs0NjEsNyBAQCBSZWZQdHI8
QXRvbVN0cmluZ0ltcGw+IEF0b21TdHJpbmdJbXBsOjpsb29rVXBTbG93Q2FzZShTdHJpbmdJbXBs
JiBzdHJpbmcpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdG9tU3RyaW5nSW1wbCo+KFN0
cmluZ0ltcGw6OmVtcHR5KCkpOwogCiAgICAgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsK
LSAgICBhdXRvJiBhdG9tU3RyaW5nVGFibGUgPSBzdHJpbmdUYWJsZSgpOworICAgIGF1dG8mIGF0
b21TdHJpbmdUYWJsZSA9IHN0cmluZ1RhYmxlKGxvY2tlcik7CiAgICAgYXV0byBpdGVyYXRvciA9
IGF0b21TdHJpbmdUYWJsZS5maW5kKCZzdHJpbmcpOwogICAgIGlmIChpdGVyYXRvciAhPSBhdG9t
U3RyaW5nVGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdG9tU3RyaW5n
SW1wbCo+KGl0ZXJhdG9yLT5nZXQoKSk7CkBAIC01MDMsNyArNDgzLDcgQEAgUmVmUHRyPEF0b21T
dHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6YWRkVVRGOChjb25zdCBjaGFyKiBjaGFyYWN0ZXJz
U3RhcnQsIGNvbnMKIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4gQXRvbVN0cmluZ0ltcGw6Omxvb2tV
cChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEF0b21T
dHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgYXV0byYgdGFibGUgPSBzdHJpbmdUYWJsZSgp
OworICAgIGF1dG8mIHRhYmxlID0gc3RyaW5nVGFibGUobG9ja2VyKTsKIAogICAgIExDaGFyQnVm
ZmVyIGJ1ZmZlciA9IHsgY2hhcmFjdGVycywgbGVuZ3RoIH07CiAgICAgYXV0byBpdGVyYXRvciA9
IHRhYmxlLmZpbmQ8TENoYXJCdWZmZXJUcmFuc2xhdG9yPihidWZmZXIpOwpAQCAtNTE1LDcgKzQ5
NSw3IEBAIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4gQXRvbVN0cmluZ0ltcGw6Omxvb2tVcChjb25z
dCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQKIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4gQXRv
bVN0cmluZ0ltcGw6Omxvb2tVcChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQogewogICAgIEF0b21TdHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgYXV0byYgdGFi
bGUgPSBzdHJpbmdUYWJsZSgpOworICAgIGF1dG8mIHRhYmxlID0gc3RyaW5nVGFibGUobG9ja2Vy
KTsKIAogICAgIFVDaGFyQnVmZmVyIGJ1ZmZlciB7IGNoYXJhY3RlcnMsIGxlbmd0aCB9OwogICAg
IGF1dG8gaXRlcmF0b3IgPSB0YWJsZS5maW5kPFVDaGFyQnVmZmVyVHJhbnNsYXRvcj4oYnVmZmVy
KTsKQEAgLTUyOCw3ICs1MDgsNyBAQCBSZWZQdHI8QXRvbVN0cmluZ0ltcGw+IEF0b21TdHJpbmdJ
bXBsOjpsb29rVXAoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkCiBib29sIEF0b21T
dHJpbmdJbXBsOjppc0luQXRvbVN0cmluZ1RhYmxlKFN0cmluZ0ltcGwqIHN0cmluZykKIHsKICAg
ICBBdG9tU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOwotICAgIHJldHVybiBzdHJpbmdUYWJsZSgp
LmNvbnRhaW5zKHN0cmluZyk7CisgICAgcmV0dXJuIHN0cmluZ1RhYmxlKGxvY2tlcikuY29udGFp
bnMoc3RyaW5nKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L0F0b21TdHJpbmdUYWJsZS5oIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUu
aAppbmRleCAyZjA4OWNlOTYwODFhYTZjN2U1OGMxYmMxMmM0ZTMwNDUxMTNhNTdlLi42YzQ0NDU1
NjdhYTE5MWQ2MWZkMjY0MmRmMDBmZWY3YWJkYjMyYWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRv
bVN0cmluZ1RhYmxlLmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL1BhY2tlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWN1cnNpdmVMb2Nr
QWRhcHRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNl
IFdURiB7CkBAIC0zNSw5ICszNiwxMSBAQCBjbGFzcyBBdG9tU3RyaW5nVGFibGUgewogcHVibGlj
OgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+QXRvbVN0cmluZ1RhYmxlKCk7CiAKLSAgICBIYXNo
U2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4mIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQor
ICAgIFJlY3Vyc2l2ZUxvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKyAgICBIYXNoU2V0
PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4mIHRhYmxlKGNvbnN0IFJlY3Vyc2l2ZUxvY2tIb2xkZXIm
KSB7IHJldHVybiBtX3RhYmxlOyB9CiAKIHByaXZhdGU6CisgICAgUmVjdXJzaXZlTG9jayBtX2xv
Y2s7CiAgICAgSGFzaFNldDxQYWNrZWRQdHI8U3RyaW5nSW1wbD4+IG1fdGFibGU7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0V4dGVybmFsU3RyaW5nSW1wbC5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L0V4dGVybmFsU3RyaW5nSW1wbC5jcHAKaW5kZXggOTZhY2FjODFm
MDkzNzE3YWZmNWYyYzU4ODYwMjMwNDBlYzUyOTllYi4uYTViZGMwNmI1Njk3MzQ4MjcxNzUxNDI1
NzQ3Zjk4Zjg5ZWFiZDhjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9FeHRlcm5h
bFN0cmluZ0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvRXh0ZXJuYWxTdHJpbmdJ
bXBsLmNwcApAQCAtNDMsNyArNDMsNyBAQCBFeHRlcm5hbFN0cmluZ0ltcGw6OkV4dGVybmFsU3Ry
aW5nSW1wbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLAogICAgICwg
bV9mcmVlKFdURk1vdmUoZnJlZSkpCiB7CiAgICAgQVNTRVJUKG1fZnJlZSk7Ci0gICAgbV9oYXNo
QW5kRmxhZ3MgPSAobV9oYXNoQW5kRmxhZ3MgJiB+c19oYXNoTWFza0J1ZmZlck93bmVyc2hpcCkg
fCBCdWZmZXJFeHRlcm5hbDsKKyAgICBtX2hhc2hBbmRGbGFncy5zdG9yZSgobV9oYXNoQW5kRmxh
Z3MubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIH5zX2hhc2hNYXNrQnVmZmVyT3du
ZXJzaGlwKSB8IEJ1ZmZlckV4dGVybmFsLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKIH0K
IAogRXh0ZXJuYWxTdHJpbmdJbXBsOjpFeHRlcm5hbFN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgRXh0ZXJuYWxTdHJpbmdJbXBsRnJlZUZ1bmN0aW9u
JiYgZnJlZSkKQEAgLTUxLDcgKzUxLDcgQEAgRXh0ZXJuYWxTdHJpbmdJbXBsOjpFeHRlcm5hbFN0
cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwKICAgICAs
IG1fZnJlZShXVEZNb3ZlKGZyZWUpKQogewogICAgIEFTU0VSVChtX2ZyZWUpOwotICAgIG1faGFz
aEFuZEZsYWdzID0gKG1faGFzaEFuZEZsYWdzICYgfnNfaGFzaE1hc2tCdWZmZXJPd25lcnNoaXAp
IHwgQnVmZmVyRXh0ZXJuYWw7CisgICAgbV9oYXNoQW5kRmxhZ3Muc3RvcmUoKG1faGFzaEFuZEZs
YWdzLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiB+c19oYXNoTWFza0J1ZmZlck93
bmVyc2hpcCkgfCBCdWZmZXJFeHRlcm5hbCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCA0ZDY2
ZmQ1ZTY0NTJlNDlhMGM4Zjk5YTMwNzJmMmM4MzE1NjY1ODk1Li43OTQ1NDQxNTI2MTk5M2M0ZDQw
ZTc2OTFiNTQxYTAyNmMwOGY0OGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaApAQCAtMjIs
NiArMjIsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPGF0b21pYz4KICNpbmNsdWRl
IDxsaW1pdHMuaD4KICNpbmNsdWRlIDx1bmljb2RlL3VzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYv
QVNDSUlDVHlwZS5oPgpAQCAtMTQyLDcgKzE0Myw3IEBAIHByb3RlY3RlZDoKICAgICB0ZW1wbGF0
ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4gY29uc3RleHByIFN0cmluZ0ltcGxTaGFwZSh1bnNp
Z25lZCByZWZDb3VudCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylb
Y2hhcmFjdGVyQ291bnRdLCB1bnNpZ25lZCBoYXNoQW5kRmxhZ3MsIENvbnN0cnVjdFdpdGhDb25z
dEV4cHJUYWcpOwogICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PiBjb25zdGV4
cHIgU3RyaW5nSW1wbFNoYXBlKHVuc2lnbmVkIHJlZkNvdW50LCB1bnNpZ25lZCBsZW5ndGgsIGNv
bnN0IGNoYXIxNl90ICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRdLCB1bnNpZ25lZCBoYXNo
QW5kRmxhZ3MsIENvbnN0cnVjdFdpdGhDb25zdEV4cHJUYWcpOwogCi0gICAgdW5zaWduZWQgbV9y
ZWZDb3VudDsKKyAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbV9yZWZDb3VudDsKICAgICB1bnNp
Z25lZCBtX2xlbmd0aDsKICAgICB1bmlvbiB7CiAgICAgICAgIGNvbnN0IExDaGFyKiBtX2RhdGE4
OwpAQCAtMTUyLDcgKzE1Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgY29uc3QgY2hhciogbV9k
YXRhOENoYXI7CiAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBtX2RhdGExNkNoYXI7CiAgICAgfTsK
LSAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzaEFuZEZsYWdzOworICAgIG11dGFibGUgc3RkOjph
dG9taWM8dW5zaWduZWQ+IG1faGFzaEFuZEZsYWdzOwogfTsKIAogLy8gRklYTUU6IFVzZSBvZiBT
dHJpbmdJbXBsIGFuZCBjb25zdCBpcyByYXRoZXIgY29uZnVzZWQuCkBAIC0yODIsNyArMjgzLDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoTWVtb3J5T2Zmc2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cmluZ0ltcGwsIG1fbGVuZ3RoKTsgfQogICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2xlbmd0aDsgfQogCi0gICAgYm9vbCBpczhCaXQo
KSBjb25zdCB7IHJldHVybiBtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWc4Qml0QnVmZmVyOyB9
CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX2hhc2hBbmRGbGFncy5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgc19oYXNoRmxhZzhCaXRCdWZmZXI7IH0KICAgICBB
TFdBWVNfSU5MSU5FIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0IHsgQVNTRVJUKGlz
OEJpdCgpKTsgcmV0dXJuIG1fZGF0YTg7IH0KICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IEFTU0VSVCghaXM4Qml0KCkpOyByZXR1cm4gbV9kYXRh
MTY7IH0KIApAQCAtMjkzLDggKzI5NCw4IEBAIHB1YmxpYzoKIAogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdDsKIAotICAgIGJvb2wgaXNTeW1ib2woKSBj
b25zdCB7IHJldHVybiBtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1i
b2w7IH0KLSAgICBib29sIGlzQXRvbSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEFuZEZsYWdzICYg
c19oYXNoRmxhZ1N0cmluZ0tpbmRJc0F0b207IH0KKyAgICBib29sIGlzU3ltYm9sKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNoQW5kRmxhZ3MubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAm
IHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1ib2w7IH0KKyAgICBib29sIGlzQXRvbSgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzaEFuZEZsYWdzLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkg
JiBzX2hhc2hGbGFnU3RyaW5nS2luZElzQXRvbTsgfQogICAgIHZvaWQgc2V0SXNBdG9tKGJvb2wp
OwogICAgIAogICAgIGJvb2wgaXNFeHRlcm5hbCgpIGNvbnN0IHsgcmV0dXJuIGJ1ZmZlck93bmVy
c2hpcCgpID09IEJ1ZmZlckV4dGVybmFsOyB9CkBAIC0zMTYsNyArMzE3LDcgQEAgcHJpdmF0ZToK
ICAgICAvLyBTbywgd2Ugc2hpZnQgbGVmdCBhbmQgcmlnaHQgd2hlbiBzZXR0aW5nIGFuZCBnZXR0
aW5nIG91ciBoYXNoIGNvZGUuCiAgICAgdm9pZCBzZXRIYXNoKHVuc2lnbmVkKSBjb25zdDsKIAot
ICAgIHVuc2lnbmVkIHJhd0hhc2goKSBjb25zdCB7IHJldHVybiBtX2hhc2hBbmRGbGFncyA+PiBz
X2ZsYWdDb3VudDsgfQorICAgIHVuc2lnbmVkIHJhd0hhc2goKSBjb25zdCB7IHJldHVybiBtX2hh
c2hBbmRGbGFncy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpID4+IHNfZmxhZ0NvdW50
OyB9CiAKIHB1YmxpYzoKICAgICBib29sIGhhc0hhc2goKSBjb25zdCB7IHJldHVybiAhIXJhd0hh
c2goKTsgfQpAQCAtMzI5LDExICszMzAsMTEgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHN5bWJv
bEF3YXJlSGFzaCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGV4aXN0aW5nU3ltYm9sQXdhcmVIYXNo
KCkgY29uc3Q7CiAKLSAgICBib29sIGlzU3RhdGljKCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3Vu
dCAmIHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmc7IH0KKyAgICBib29sIGlzU3RhdGljKCkg
Y29uc3QgeyByZXR1cm4gbV9yZWZDb3VudC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQp
ICYgc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZzsgfQogCi0gICAgc2l6ZV90IHJlZkNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3VudCAvIHNfcmVmQ291bnRJbmNyZW1lbnQ7IH0KLSAg
ICBib29sIGhhc09uZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1fcmVmQ291bnQgPT0gc19yZWZDb3Vu
dEluY3JlbWVudDsgfQotICAgIGJvb2wgaGFzQXRMZWFzdE9uZVJlZigpIGNvbnN0IHsgcmV0dXJu
IG1fcmVmQ291bnQ7IH0gLy8gRm9yIGFzc2VydGlvbnMuCisgICAgc2l6ZV90IHJlZkNvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWZDb3VudC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUp
IC8gc19yZWZDb3VudEluY3JlbWVudDsgfQorICAgIGJvb2wgaGFzT25lUmVmKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWZDb3VudC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpID09IHNfcmVm
Q291bnRJbmNyZW1lbnQ7IH0KKyAgICBib29sIGhhc0F0TGVhc3RPbmVSZWYoKSBjb25zdCB7IHJl
dHVybiBtX3JlZkNvdW50LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7IH0gLy8gRm9y
IGFzc2VydGlvbnMuCiAKICAgICB2b2lkIHJlZigpOwogICAgIHZvaWQgZGVyZWYoKTsKQEAgLTQ4
NSw3ICs0ODYsNyBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgU3RyaW5nU3Rh
dHMmIHN0cmluZ1N0YXRzKCkgeyByZXR1cm4gbV9zdHJpbmdTdGF0czsgfQogI2VuZGlmCiAKLSAg
ICBCdWZmZXJPd25lcnNoaXAgYnVmZmVyT3duZXJzaGlwKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8QnVmZmVyT3duZXJzaGlwPihtX2hhc2hBbmRGbGFncyAmIHNfaGFzaE1hc2tCdWZmZXJP
d25lcnNoaXApOyB9CisgICAgQnVmZmVyT3duZXJzaGlwIGJ1ZmZlck93bmVyc2hpcCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEJ1ZmZlck93bmVyc2hpcD4obV9oYXNoQW5kRmxhZ3MubG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIHNfaGFzaE1hc2tCdWZmZXJPd25lcnNoaXAp
OyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUo
KSB7IHJldHVybiB0YWlsT2Zmc2V0PFQ+KCk7IH0KICAgICAKQEAgLTEwNDgsMTAgKzEwNDksMTAg
QEAgaW5saW5lIHNpemVfdCBTdHJpbmdJbXBsOjpjb3N0KCkgY29uc3QKICAgICAvLyBXZSBlbnN1
cmUgdGhpcyBieSBwcmUtc2V0dGluZyB0aGUgc19oYXNoRmxhZ0RpZFJlcG9ydENvc3QgYml0IGlu
IGFsbCBpbnN0YW5jZXMgb2YKICAgICAvLyBTdGF0aWNTdHJpbmdJbXBsLiBBcyBhIHJlc3VsdCwg
U3RhdGljU3RyaW5nSW1wbCBpbnN0YW5jZXMgd2lsbCBhbHdheXMgcmV0dXJuIGEgY29zdCBvZgog
ICAgIC8vIDAgaGVyZSBhbmQgYXZvaWQgbW9kaWZ5aW5nIG1faGFzaEFuZEZsYWdzLgotICAgIGlm
IChtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdEaWRSZXBvcnRDb3N0KQorICAgIGlmIChtX2hh
c2hBbmRGbGFncy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgc19oYXNoRmxhZ0Rp
ZFJlcG9ydENvc3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9oYXNoQW5kRmxhZ3MgfD0g
c19oYXNoRmxhZ0RpZFJlcG9ydENvc3Q7CisgICAgbV9oYXNoQW5kRmxhZ3MuZmV0Y2hfb3Ioc19o
YXNoRmxhZ0RpZFJlcG9ydENvc3QsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwogICAgIHNp
emVfdCByZXN1bHQgPSBtX2xlbmd0aDsKICAgICBpZiAoIWlzOEJpdCgpKQogICAgICAgICByZXN1
bHQgPDw9IDE7CkBAIC0xMDc3LDkgKzEwNzgsOSBAQCBpbmxpbmUgdm9pZCBTdHJpbmdJbXBsOjpz
ZXRJc0F0b20oYm9vbCBpc0F0b20pCiAgICAgQVNTRVJUKCFpc1N0YXRpYygpKTsKICAgICBBU1NF
UlQoIWlzU3ltYm9sKCkpOwogICAgIGlmIChpc0F0b20pCi0gICAgICAgIG1faGFzaEFuZEZsYWdz
IHw9IHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNBdG9tOworICAgICAgICBtX2hhc2hBbmRGbGFncy5m
ZXRjaF9vcihzX2hhc2hGbGFnU3RyaW5nS2luZElzQXRvbSwgc3RkOjptZW1vcnlfb3JkZXJfcmVs
YXhlZCk7CiAgICAgZWxzZQotICAgICAgICBtX2hhc2hBbmRGbGFncyAmPSB+c19oYXNoRmxhZ1N0
cmluZ0tpbmRJc0F0b207CisgICAgICAgIG1faGFzaEFuZEZsYWdzLmZldGNoX2FuZCh+c19oYXNo
RmxhZ1N0cmluZ0tpbmRJc0F0b20sIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwogfQogCiBp
bmxpbmUgdm9pZCBTdHJpbmdJbXBsOjpzZXRIYXNoKHVuc2lnbmVkIGhhc2gpIGNvbnN0CkBAIC0x
MDk1LDI5ICsxMDk2LDMzIEBAIGlubGluZSB2b2lkIFN0cmluZ0ltcGw6OnNldEhhc2godW5zaWdu
ZWQgaGFzaCkgY29uc3QKICAgICBBU1NFUlQoIShoYXNoICYgKHNfZmxhZ01hc2sgPDwgKDggKiBz
aXplb2YoaGFzaCkgLSBzX2ZsYWdDb3VudCkpKSk7IC8vIFZlcmlmeSB0aGF0IGVub3VnaCBoaWdo
IGJpdHMgYXJlIGVtcHR5LgogCiAgICAgaGFzaCA8PD0gc19mbGFnQ291bnQ7Ci0gICAgQVNTRVJU
KCEoaGFzaCAmIG1faGFzaEFuZEZsYWdzKSk7IC8vIFZlcmlmeSB0aGF0IGVub3VnaCBsb3cgYml0
cyBhcmUgZW1wdHkgYWZ0ZXIgc2hpZnQuCisgICAgQVNTRVJUKCEoaGFzaCAmIG1faGFzaEFuZEZs
YWdzLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKTsgLy8gVmVyaWZ5IHRoYXQgZW5v
dWdoIGxvdyBiaXRzIGFyZSBlbXB0eSBhZnRlciBzaGlmdC4KICAgICBBU1NFUlQoaGFzaCk7IC8v
IFZlcmlmeSB0aGF0IDAgaXMgYSB2YWxpZCBzZW50aW5lbCBoYXNoIHZhbHVlLgogCi0gICAgbV9o
YXNoQW5kRmxhZ3MgfD0gaGFzaDsgLy8gU3RvcmUgaGFzaCB3aXRoIGZsYWdzIGluIGxvdyBiaXRz
LgorICAgIG1faGFzaEFuZEZsYWdzLmZldGNoX29yKGhhc2gsIHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGF4ZWQpOyAvLyBTdG9yZSBoYXNoIHdpdGggZmxhZ3MgaW4gbG93IGJpdHMuCiB9CiAKIGlubGlu
ZSB2b2lkIFN0cmluZ0ltcGw6OnJlZigpCiB7CiAgICAgU1RSSU5HX1NUQVRTX1JFRl9TVFJJTkco
KnRoaXMpOwogCi0gICAgbV9yZWZDb3VudCArPSBzX3JlZkNvdW50SW5jcmVtZW50OworICAgIG1f
cmVmQ291bnQuZmV0Y2hfYWRkKHNfcmVmQ291bnRJbmNyZW1lbnQsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGF4ZWQpOwogfQogCiBpbmxpbmUgdm9pZCBTdHJpbmdJbXBsOjpkZXJlZigpCiB7CiAgICAg
U1RSSU5HX1NUQVRTX0RFUkVGX1NUUklORygqdGhpcyk7CiAKLSAgICB1bnNpZ25lZCB0ZW1wUmVm
Q291bnQgPSBtX3JlZkNvdW50IC0gc19yZWZDb3VudEluY3JlbWVudDsKLSAgICBpZiAoIXRlbXBS
ZWZDb3VudCkgewotICAgICAgICBTdHJpbmdJbXBsOjpkZXN0cm95KHRoaXMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1fcmVmQ291bnQgPSB0ZW1wUmVmQ291bnQ7CisgICAgLy8gRklY
TUU6IFRoaXMgaXMgdG8gYXZvaWQgbV9yZWZDb3VudCBhY3R1YWxseSByZWFjaGluZyB6ZXJvIGFu
ZCB0aGUgbG9naWMgaXMgY29waWVkIGZyb20gQ2hyb21pdW0sCisgICAgLy8gICAgICAgIGJ1dCBJ
IGRvbid0IHVuZGVyc3RhbmQgd2h5IHdlIGRvIGl0IHRoaXMgd2F5PyBXaHkgbm90IGp1c3QgbGV0
IGl0IGdldCB0byB6ZXJvIGFuZCBhc3NlcnQKKyAgICAvLyAgICAgICAgcmVmQ291bnQgaXMgPjAg
YmVmb3JlIGRlcmVmPworICAgIGF1dG8gcmVmQ291bnQgPSBtX3JlZkNvdW50LmxvYWQoc3RkOjpt
ZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAgZG8geworICAgICAgICBpZiAoIShyZWZDb3VudCAt
IHNfcmVmQ291bnRJbmNyZW1lbnQpKSB7CisgICAgICAgICAgICBTdHJpbmdJbXBsOjpkZXN0cm95
KHRoaXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSB3aGlsZSAoIW1f
cmVmQ291bnQuY29tcGFyZV9leGNoYW5nZV93ZWFrKHJlZkNvdW50LCByZWZDb3VudCAtIHNfcmVm
Q291bnRJbmNyZW1lbnQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgU291cmNlQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRGVzdGluYXRpb25DaGFy
YWN0ZXJUeXBlPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415133</attachid>
            <date>2020-12-01 06:22:15 -0800</date>
            <delta_ts>2020-12-01 17:03:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219285-20201201142213.patch</filename>
            <type>text/plain</type>
            <size>17734</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9S
ZWN1cnNpdmVMb2NrQWRhcHRlci5oIGIvU291cmNlL1dURi93dGYvUmVjdXJzaXZlTG9ja0FkYXB0
ZXIuaAppbmRleCBmNTYwNTcyYzE1ZjYwZTViMjhhNTgzOWQ1MDZjNDk4NmY4ODM1NWZmLi45MDJj
ZTE0NDdkYWE0OTg1ZDYyMTkwMGE0NGQ1Nzc5ZjFjMzVmOGE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9SZWN1cnNpdmVMb2NrQWRhcHRlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlY3Vy
c2l2ZUxvY2tBZGFwdGVyLmgKQEAgLTg4LDcgKzg4LDkgQEAgcHJpdmF0ZToKIH07CiAKIHVzaW5n
IFJlY3Vyc2l2ZUxvY2sgPSBSZWN1cnNpdmVMb2NrQWRhcHRlcjxMb2NrPjsKK3VzaW5nIFJlY3Vy
c2l2ZUxvY2tIb2xkZXIgPSBMb2NrZXI8UmVjdXJzaXZlTG9jaz47CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgogCiB1c2luZyBXVEY6OlJlY3Vyc2l2ZUxvY2s7Cit1c2luZyBXVEY6OlJlY3Vyc2l2ZUxv
Y2tIb2xkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAppbmRleCA1ZDdkNmQzYjNkZDYwNzVjYmUzOWE2MjNl
MDNlMjdhNWVjMTc3ODRmLi5hMTE1NDgxMzMyNTkyZDA1ZGE0ODBjMTA4ZTQ1ZWMyMTMyMzM3ZGQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZy5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDx3dGYvVGhy
ZWFkR3JvdXAuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogI2luY2x1
ZGUgPHd0Zi9XVEZDb25maWcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUu
aD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNpZiBIQVZFKFFPU19DTEFT
U0VTKQpAQCAtMTI4LDEzICsxMjksMjAgQEAgY29uc3QgY2hhciogVGhyZWFkOjpub3JtYWxpemVU
aHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiAjZW5kaWYKIH0KIAorc3RhdGljIEF0
b21TdHJpbmdUYWJsZSogc19kZWZhdWx0QXRvbVN0cmluZ1RhYmxlOworCiB2b2lkIFRocmVhZDo6
aW5pdGlhbGl6ZUluVGhyZWFkKCkKIHsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlh
bGl6ZVN0cmluZ1RhYmxlOworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVTdHJpbmdUYWJs
ZSwgWyZdIHsKKyAgICAgICAgc19kZWZhdWx0QXRvbVN0cmluZ1RhYmxlID0gbmV3IEF0b21TdHJp
bmdUYWJsZTsKKyAgICB9KTsKKwogICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKICAgICAgICAg
bV9zdGFjayA9IFN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tCb3VuZHMoKTsKICAgICBt
X3NhdmVkTGFzdFN0YWNrVG9wID0gc3RhY2soKS5vcmlnaW4oKTsKIAotICAgIG1fY3VycmVudEF0
b21TdHJpbmdUYWJsZSA9ICZtX2RlZmF1bHRBdG9tU3RyaW5nVGFibGU7CisgICAgbV9jdXJyZW50
QXRvbVN0cmluZ1RhYmxlID0gc19kZWZhdWx0QXRvbVN0cmluZ1RhYmxlOwogI2lmIFVTRShXRUJf
VEhSRUFEKQogICAgIC8vIE9uIGlPUywgb25lIEF0b21TdHJpbmdUYWJsZSBpcyBzaGFyZWQgYmV0
d2VlbiB0aGUgbWFpbiBVSSB0aHJlYWQgYW5kIHRoZSBXZWJUaHJlYWQuCiAgICAgaWYgKGlzV2Vi
VGhyZWFkKCkgfHwgaXNVSVRocmVhZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IDc2ZjAyOGNmYTcw
MzdlOWMzYTliNzEzNjMxZWY3MzZkYzczNDI4NDUuLjAxNjk0MzI5NGM0MTQ3ZTdjNDBlMDQ0MjNj
YWU3NDI2OWNmZTQwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdU
YWJsZS5oPgogCiAjaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQogI2luY2x1ZGUgPHNp
Z25hbC5oPgpAQCAtNTksNiArNTgsNyBAQAogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIEFic3Ry
YWN0TG9ja2VyOworY2xhc3MgQXRvbVN0cmluZ1RhYmxlOwogY2xhc3MgVGhyZWFkTWVzc2FnZURh
dGE7CiAKIGVudW0gY2xhc3MgVGhyZWFkR3JvdXBBZGRSZXN1bHQ7CkBAIC0zNDUsNyArMzQ1LDYg
QEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKICAgICBBdG9tU3RyaW5nVGFibGUqIG1fY3VycmVudEF0
b21TdHJpbmdUYWJsZSB7IG51bGxwdHIgfTsKLSAgICBBdG9tU3RyaW5nVGFibGUgbV9kZWZhdWx0
QXRvbVN0cmluZ1RhYmxlOwogCiAjaWYgRU5BQkxFKFNUQUNLX1NUQVRTKQogICAgIFN0YWNrU3Rh
dHM6OlBlclRocmVhZFN0YXRzIG1fc3RhY2tTdGF0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3Ry
aW5nSW1wbC5jcHAKaW5kZXggMmY3NjcwYjQ4MTJkZjBiY2ZlZjE0NmMzYjJlZTg5ZmU3MTE3ZjVm
YS4uNjk5OTAzZjllMTY0NzUyOTg4OTdiNGRkOTNiY2Q3ZGMyYTYyNmRjMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKQEAgLTMwLDQ0ICszMCwyNCBAQAogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Q29udmVy
c2lvbi5oPgogCi0jaWYgVVNFKFdFQl9USFJFQUQpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNl
bmRpZgotCiBuYW1lc3BhY2UgV1RGIHsKIAogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKLSNp
ZiBVU0UoV0VCX1RIUkVBRCkKLQotY2xhc3MgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIDogcHVibGlj
IExvY2tIb2xkZXIgeworY2xhc3MgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIDogcHVibGljIFJlY3Vy
c2l2ZUxvY2tIb2xkZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEF0b21TdHJpbmdUYWJs
ZUxvY2tlcik7Ci0KLSAgICBzdGF0aWMgTG9jayBzX3N0cmluZ1RhYmxlTG9jazsKIHB1YmxpYzoK
ICAgICBBdG9tU3RyaW5nVGFibGVMb2NrZXIoKQotICAgICAgICA6IExvY2tIb2xkZXIoJnNfc3Ry
aW5nVGFibGVMb2NrKQorICAgICAgICA6IFJlY3Vyc2l2ZUxvY2tIb2xkZXIoVGhyZWFkOjpjdXJy
ZW50KCkuYXRvbVN0cmluZ1RhYmxlKCktPmxvY2soKSkKICAgICB7CiAgICAgfQogfTsKIAotTG9j
ayBBdG9tU3RyaW5nVGFibGVMb2NrZXI6OnNfc3RyaW5nVGFibGVMb2NrOwotCi0jZWxzZQotCi1j
bGFzcyBBdG9tU3RyaW5nVGFibGVMb2NrZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEF0
b21TdHJpbmdUYWJsZUxvY2tlcik7Ci1wdWJsaWM6Ci0gICAgQXRvbVN0cmluZ1RhYmxlTG9ja2Vy
KCkgeyB9Ci19OwotCi0jZW5kaWYgLy8gVVNFKFdFQl9USFJFQUQpCi0KIHVzaW5nIFN0cmluZ1Rh
YmxlSW1wbCA9IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PjsKIAotc3RhdGljIEFMV0FZ
U19JTkxJTkUgU3RyaW5nVGFibGVJbXBsJiBzdHJpbmdUYWJsZSgpCitzdGF0aWMgQUxXQVlTX0lO
TElORSBTdHJpbmdUYWJsZUltcGwmIHN0cmluZ1RhYmxlKGNvbnN0IFJlY3Vyc2l2ZUxvY2tIb2xk
ZXImIGxvY2tIb2xkZXIpCiB7Ci0gICAgcmV0dXJuIFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJp
bmdUYWJsZSgpLT50YWJsZSgpOworICAgIHJldHVybiBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9tU3Ry
aW5nVGFibGUoKS0+dGFibGUobG9ja0hvbGRlcik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgpAQCAtODYsNyArNjYsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4KIHN0YXRpYyBpbmxpbmUgUmVmPEF0b21T
dHJpbmdJbXBsPiBhZGRUb1N0cmluZ1RhYmxlKGNvbnN0IFQmIHZhbHVlKQogewogICAgIEF0b21T
dHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgcmV0dXJuIGFkZFRvU3RyaW5nVGFibGU8VCwg
SGFzaFRyYW5zbGF0b3I+KGxvY2tlciwgc3RyaW5nVGFibGUoKSwgdmFsdWUpOworICAgIHJldHVy
biBhZGRUb1N0cmluZ1RhYmxlPFQsIEhhc2hUcmFuc2xhdG9yPihsb2NrZXIsIHN0cmluZ1RhYmxl
KGxvY2tlciksIHZhbHVlKTsKIH0KIAogc3RydWN0IENTdHJpbmdUcmFuc2xhdG9yIHsKQEAgLTM3
Nyw3ICszNTcsNyBAQCBzdGF0aWMgUmVmPEF0b21TdHJpbmdJbXBsPiBhZGRTeW1ib2woQXRvbVN0
cmluZ1RhYmxlTG9ja2VyJiBsb2NrZXIsIFN0cmluZ1RhYmxlSQogc3RhdGljIGlubGluZSBSZWY8
QXRvbVN0cmluZ0ltcGw+IGFkZFN5bWJvbChTdHJpbmdJbXBsJiBiYXNlKQogewogICAgIEF0b21T
dHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgcmV0dXJuIGFkZFN5bWJvbChsb2NrZXIsIHN0
cmluZ1RhYmxlKCksIGJhc2UpOworICAgIHJldHVybiBhZGRTeW1ib2wobG9ja2VyLCBzdHJpbmdU
YWJsZShsb2NrZXIpLCBiYXNlKTsKIH0KIAogc3RhdGljIFJlZjxBdG9tU3RyaW5nSW1wbD4gYWRk
U3RhdGljKEF0b21TdHJpbmdUYWJsZUxvY2tlciYgbG9ja2VyLCBTdHJpbmdUYWJsZUltcGwmIGF0
b21TdHJpbmdUYWJsZSwgY29uc3QgU3RyaW5nSW1wbCYgYmFzZSkKQEAgLTM5Niw3ICszNzYsNyBA
QCBzdGF0aWMgUmVmPEF0b21TdHJpbmdJbXBsPiBhZGRTdGF0aWMoQXRvbVN0cmluZ1RhYmxlTG9j
a2VyJiBsb2NrZXIsIFN0cmluZ1RhYmxlSQogc3RhdGljIGlubGluZSBSZWY8QXRvbVN0cmluZ0lt
cGw+IGFkZFN0YXRpYyhjb25zdCBTdHJpbmdJbXBsJiBiYXNlKQogewogICAgIEF0b21TdHJpbmdU
YWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgcmV0dXJuIGFkZFN0YXRpYyhsb2NrZXIsIHN0cmluZ1Rh
YmxlKCksIGJhc2UpOworICAgIHJldHVybiBhZGRTdGF0aWMobG9ja2VyLCBzdHJpbmdUYWJsZShs
b2NrZXIpLCBiYXNlKTsKIH0KIAogUmVmUHRyPEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1w
bDo6YWRkKGNvbnN0IFN0YXRpY1N0cmluZ0ltcGwqIHN0cmluZykKQEAgLTQyMiw3ICs0MDIsNyBA
QCBSZWY8QXRvbVN0cmluZ0ltcGw+IEF0b21TdHJpbmdJbXBsOjphZGRTbG93Q2FzZShTdHJpbmdJ
bXBsJiBzdHJpbmcpCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc3RyaW5nLmlzQXRvbSgpLCAi
QXRvbVN0cmluZ0ltcGwgc2hvdWxkIG5vdCBoaXQgdGhlIHNsb3cgY2FzZSBpZiB0aGUgc3RyaW5n
IGlzIGFscmVhZHkgYW4gYXRvbS4iKTsKIAogICAgIEF0b21TdHJpbmdUYWJsZUxvY2tlciBsb2Nr
ZXI7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZSgpLmFkZCgmc3RyaW5nKTsKKyAg
ICBhdXRvIGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxlKGxvY2tlcikuYWRkKCZzdHJpbmcpOwogCiAg
ICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIEFTU0VSVChhZGRSZXN1bHQu
aXRlcmF0b3ItPmdldCgpID09ICZzdHJpbmcpOwpAQCAtNDQxLDE4ICs0MjEsMTggQEAgUmVmPEF0
b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6YWRkU2xvd0Nhc2UoQXRvbVN0cmluZ1RhYmxl
JiBzdHJpbmdUYWJsZSwgU3QKIAogICAgIGlmIChzdHJpbmcuaXNTdGF0aWMoKSkgewogICAgICAg
ICBBdG9tU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOwotICAgICAgICByZXR1cm4gYWRkU3RhdGlj
KGxvY2tlciwgc3RyaW5nVGFibGUudGFibGUoKSwgc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIGFk
ZFN0YXRpYyhsb2NrZXIsIHN0cmluZ1RhYmxlLnRhYmxlKGxvY2tlciksIHN0cmluZyk7CiAgICAg
fQogCiAgICAgaWYgKHN0cmluZy5pc1N5bWJvbCgpKSB7CiAgICAgICAgIEF0b21TdHJpbmdUYWJs
ZUxvY2tlciBsb2NrZXI7Ci0gICAgICAgIHJldHVybiBhZGRTeW1ib2wobG9ja2VyLCBzdHJpbmdU
YWJsZS50YWJsZSgpLCBzdHJpbmcpOworICAgICAgICByZXR1cm4gYWRkU3ltYm9sKGxvY2tlciwg
c3RyaW5nVGFibGUudGFibGUobG9ja2VyKSwgc3RyaW5nKTsKICAgICB9CiAKICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKCFzdHJpbmcuaXNBdG9tKCksICJBdG9tU3RyaW5nSW1wbCBzaG91bGQgbm90
IGhpdCB0aGUgc2xvdyBjYXNlIGlmIHRoZSBzdHJpbmcgaXMgYWxyZWFkeSBhbiBhdG9tLiIpOwog
CiAgICAgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKLSAgICBhdXRvIGFkZFJlc3VsdCA9
IHN0cmluZ1RhYmxlLnRhYmxlKCkuYWRkKCZzdHJpbmcpOworICAgIGF1dG8gYWRkUmVzdWx0ID0g
c3RyaW5nVGFibGUudGFibGUobG9ja2VyKS5hZGQoJnN0cmluZyk7CiAKICAgICBpZiAoYWRkUmVz
dWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgQVNTRVJUKGFkZFJlc3VsdC5pdGVyYXRvci0+Z2V0
KCkgPT0gJnN0cmluZyk7CkBAIC00NjYsNyArNDQ2LDcgQEAgdm9pZCBBdG9tU3RyaW5nSW1wbDo6
cmVtb3ZlKEF0b21TdHJpbmdJbXBsKiBzdHJpbmcpCiB7CiAgICAgQVNTRVJUKHN0cmluZy0+aXNB
dG9tKCkpOwogICAgIEF0b21TdHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgYXV0byYgYXRv
bVN0cmluZ1RhYmxlID0gc3RyaW5nVGFibGUoKTsKKyAgICBhdXRvJiBhdG9tU3RyaW5nVGFibGUg
PSBzdHJpbmdUYWJsZShsb2NrZXIpOwogICAgIGF1dG8gaXRlcmF0b3IgPSBhdG9tU3RyaW5nVGFi
bGUuZmluZChzdHJpbmcpOwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gYXRv
bVN0cmluZ1RhYmxlLmVuZCgpLCAiVGhlIHN0cmluZyBiZWluZyByZW1vdmVkIGlzIGFuIGF0b20g
aW4gdGhlIHN0cmluZyB0YWJsZSBvZiBhbiBvdGhlciB0aHJlYWQhIik7CiAgICAgQVNTRVJUKHN0
cmluZyA9PSBpdGVyYXRvci0+Z2V0KCkpOwpAQCAtNDgxLDcgKzQ2MSw3IEBAIFJlZlB0cjxBdG9t
U3RyaW5nSW1wbD4gQXRvbVN0cmluZ0ltcGw6Omxvb2tVcFNsb3dDYXNlKFN0cmluZ0ltcGwmIHN0
cmluZykKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21TdHJpbmdJbXBsKj4oU3RyaW5n
SW1wbDo6ZW1wdHkoKSk7CiAKICAgICBBdG9tU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOwotICAg
IGF1dG8mIGF0b21TdHJpbmdUYWJsZSA9IHN0cmluZ1RhYmxlKCk7CisgICAgYXV0byYgYXRvbVN0
cmluZ1RhYmxlID0gc3RyaW5nVGFibGUobG9ja2VyKTsKICAgICBhdXRvIGl0ZXJhdG9yID0gYXRv
bVN0cmluZ1RhYmxlLmZpbmQoJnN0cmluZyk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IGF0b21TdHJp
bmdUYWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21TdHJpbmdJbXBs
Kj4oaXRlcmF0b3ItPmdldCgpKTsKQEAgLTUwMyw3ICs0ODMsNyBAQCBSZWZQdHI8QXRvbVN0cmlu
Z0ltcGw+IEF0b21TdHJpbmdJbXBsOjphZGRVVEY4KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnNTdGFy
dCwgY29ucwogUmVmUHRyPEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6bG9va1VwKGNv
bnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgQXRvbVN0cmlu
Z1RhYmxlTG9ja2VyIGxvY2tlcjsKLSAgICBhdXRvJiB0YWJsZSA9IHN0cmluZ1RhYmxlKCk7Cisg
ICAgYXV0byYgdGFibGUgPSBzdHJpbmdUYWJsZShsb2NrZXIpOwogCiAgICAgTENoYXJCdWZmZXIg
YnVmZmVyID0geyBjaGFyYWN0ZXJzLCBsZW5ndGggfTsKICAgICBhdXRvIGl0ZXJhdG9yID0gdGFi
bGUuZmluZDxMQ2hhckJ1ZmZlclRyYW5zbGF0b3I+KGJ1ZmZlcik7CkBAIC01MTUsNyArNDk1LDcg
QEAgUmVmUHRyPEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6bG9va1VwKGNvbnN0IExD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZAogUmVmUHRyPEF0b21TdHJpbmdJbXBsPiBBdG9tU3Ry
aW5nSW1wbDo6bG9va1VwKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
CiB7CiAgICAgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKLSAgICBhdXRvJiB0YWJsZSA9
IHN0cmluZ1RhYmxlKCk7CisgICAgYXV0byYgdGFibGUgPSBzdHJpbmdUYWJsZShsb2NrZXIpOwog
CiAgICAgVUNoYXJCdWZmZXIgYnVmZmVyIHsgY2hhcmFjdGVycywgbGVuZ3RoIH07CiAgICAgYXV0
byBpdGVyYXRvciA9IHRhYmxlLmZpbmQ8VUNoYXJCdWZmZXJUcmFuc2xhdG9yPihidWZmZXIpOwpA
QCAtNTI4LDcgKzUwOCw3IEBAIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4gQXRvbVN0cmluZ0ltcGw6
Omxvb2tVcChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQKIGJvb2wgQXRvbVN0cmlu
Z0ltcGw6OmlzSW5BdG9tU3RyaW5nVGFibGUoU3RyaW5nSW1wbCogc3RyaW5nKQogewogICAgIEF0
b21TdHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgcmV0dXJuIHN0cmluZ1RhYmxlKCkuY29u
dGFpbnMoc3RyaW5nKTsKKyAgICByZXR1cm4gc3RyaW5nVGFibGUobG9ja2VyKS5jb250YWlucyhz
dHJpbmcpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRv
bVN0cmluZ1RhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCmlu
ZGV4IDJmMDg5Y2U5NjA4MWFhNmM3ZTU4YzFiYzEyYzRlMzA0NTExM2E1N2UuLjZjNDQ0NTU2N2Fh
MTkxZDYxZmQyNjQyZGYwMGZlZjdhYmRiMzJhYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3Ry
aW5nVGFibGUuaApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvUGFja2VkLmg+CisjaW5jbHVkZSA8d3RmL1JlY3Vyc2l2ZUxvY2tBZGFw
dGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTM1LDkgKzM2LDExIEBAIGNsYXNzIEF0b21TdHJpbmdUYWJsZSB7CiBwdWJsaWM6CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIH5BdG9tU3RyaW5nVGFibGUoKTsKIAotICAgIEhhc2hTZXQ8
UGFja2VkUHRyPFN0cmluZ0ltcGw+PiYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CisgICAg
UmVjdXJzaXZlTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorICAgIEhhc2hTZXQ8UGFj
a2VkUHRyPFN0cmluZ0ltcGw+PiYgdGFibGUoY29uc3QgUmVjdXJzaXZlTG9ja0hvbGRlciYpIHsg
cmV0dXJuIG1fdGFibGU7IH0KIAogcHJpdmF0ZToKKyAgICBSZWN1cnNpdmVMb2NrIG1fbG9jazsK
ICAgICBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4gbV90YWJsZTsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvRXh0ZXJuYWxTdHJpbmdJbXBsLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvRXh0ZXJuYWxTdHJpbmdJbXBsLmNwcAppbmRleCA5NmFjYWM4MWYwOTM3
MTdhZmY1ZjJjNTg4NjAyMzA0MGVjNTI5OWViLi5hNWJkYzA2YjU2OTczNDgyNzE3NTE0MjU3NDdm
OThmODllYWJkOGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0V4dGVybmFsU3Ry
aW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9FeHRlcm5hbFN0cmluZ0ltcGwu
Y3BwCkBAIC00Myw3ICs0Myw3IEBAIEV4dGVybmFsU3RyaW5nSW1wbDo6RXh0ZXJuYWxTdHJpbmdJ
bXBsKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsCiAgICAgLCBtX2Zy
ZWUoV1RGTW92ZShmcmVlKSkKIHsKICAgICBBU1NFUlQobV9mcmVlKTsKLSAgICBtX2hhc2hBbmRG
bGFncyA9IChtX2hhc2hBbmRGbGFncyAmIH5zX2hhc2hNYXNrQnVmZmVyT3duZXJzaGlwKSB8IEJ1
ZmZlckV4dGVybmFsOworICAgIG1faGFzaEFuZEZsYWdzLnN0b3JlKChtX2hhc2hBbmRGbGFncy5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgfnNfaGFzaE1hc2tCdWZmZXJPd25lcnNo
aXApIHwgQnVmZmVyRXh0ZXJuYWwsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwogfQogCiBF
eHRlcm5hbFN0cmluZ0ltcGw6OkV4dGVybmFsU3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoLCBFeHRlcm5hbFN0cmluZ0ltcGxGcmVlRnVuY3Rpb24mJiBm
cmVlKQpAQCAtNTEsNyArNTEsNyBAQCBFeHRlcm5hbFN0cmluZ0ltcGw6OkV4dGVybmFsU3RyaW5n
SW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLAogICAgICwgbV9m
cmVlKFdURk1vdmUoZnJlZSkpCiB7CiAgICAgQVNTRVJUKG1fZnJlZSk7Ci0gICAgbV9oYXNoQW5k
RmxhZ3MgPSAobV9oYXNoQW5kRmxhZ3MgJiB+c19oYXNoTWFza0J1ZmZlck93bmVyc2hpcCkgfCBC
dWZmZXJFeHRlcm5hbDsKKyAgICBtX2hhc2hBbmRGbGFncy5zdG9yZSgobV9oYXNoQW5kRmxhZ3Mu
bG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIH5zX2hhc2hNYXNrQnVmZmVyT3duZXJz
aGlwKSB8IEJ1ZmZlckV4dGVybmFsLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0ltcGwuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IDRkNjZmZDVl
NjQ1MmU0OWEwYzhmOTlhMzA3MmYyYzgzMTU2NjU4OTUuLjc5NDU0NDE1MjYxOTkzYzRkNDBlNzY5
MWI1NDFhMDI2YzA4ZjQ4ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SW1wbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCkBAIC0yMiw2ICsy
Miw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8YXRvbWljPgogI2luY2x1ZGUgPGxp
bWl0cy5oPgogI2luY2x1ZGUgPHVuaWNvZGUvdXN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+CkBAIC0xNDIsNyArMTQzLDcgQEAgcHJvdGVjdGVkOgogICAgIHRlbXBsYXRlPHVu
c2lnbmVkIGNoYXJhY3RlckNvdW50PiBjb25zdGV4cHIgU3RyaW5nSW1wbFNoYXBlKHVuc2lnbmVk
IHJlZkNvdW50LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFy
YWN0ZXJDb3VudF0sIHVuc2lnbmVkIGhhc2hBbmRGbGFncywgQ29uc3RydWN0V2l0aENvbnN0RXhw
clRhZyk7CiAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+IGNvbnN0ZXhwciBT
dHJpbmdJbXBsU2hhcGUodW5zaWduZWQgcmVmQ291bnQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3Qg
Y2hhcjE2X3QgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0sIHVuc2lnbmVkIGhhc2hBbmRG
bGFncywgQ29uc3RydWN0V2l0aENvbnN0RXhwclRhZyk7CiAKLSAgICB1bnNpZ25lZCBtX3JlZkNv
dW50OworICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBtX3JlZkNvdW50OwogICAgIHVuc2lnbmVk
IG1fbGVuZ3RoOwogICAgIHVuaW9uIHsKICAgICAgICAgY29uc3QgTENoYXIqIG1fZGF0YTg7CkBA
IC0xNTIsNyArMTUzLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBjb25zdCBjaGFyKiBtX2RhdGE4
Q2hhcjsKICAgICAgICAgY29uc3QgY2hhcjE2X3QqIG1fZGF0YTE2Q2hhcjsKICAgICB9OwotICAg
IG11dGFibGUgdW5zaWduZWQgbV9oYXNoQW5kRmxhZ3M7CisgICAgbXV0YWJsZSBzdGQ6OmF0b21p
Yzx1bnNpZ25lZD4gbV9oYXNoQW5kRmxhZ3M7CiB9OwogCiAvLyBGSVhNRTogVXNlIG9mIFN0cmlu
Z0ltcGwgYW5kIGNvbnN0IGlzIHJhdGhlciBjb25mdXNlZC4KQEAgLTI4Miw3ICsyODMsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhNZW1vcnlPZmZzZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoU3RyaW5nSW1wbCwgbV9sZW5ndGgpOyB9CiAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gIW1fbGVuZ3RoOyB9CiAKLSAgICBib29sIGlzOEJpdCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzaEFuZEZsYWdzICYgc19oYXNoRmxhZzhCaXRCdWZmZXI7IH0KKyAg
ICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEFuZEZsYWdzLmxvYWQoc3RkOjpt
ZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBzX2hhc2hGbGFnOEJpdEJ1ZmZlcjsgfQogICAgIEFMV0FZ
U19JTkxJTkUgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QgeyBBU1NFUlQoaXM4Qml0
KCkpOyByZXR1cm4gbV9kYXRhODsgfQogICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMxNigpIGNvbnN0IHsgQVNTRVJUKCFpczhCaXQoKSk7IHJldHVybiBtX2RhdGExNjsg
fQogCkBAIC0yOTMsOCArMjk0LDggQEAgcHVibGljOgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0OwogCi0gICAgYm9vbCBpc1N5bWJvbCgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzaEFuZEZsYWdzICYgc19oYXNoRmxhZ1N0cmluZ0tpbmRJc1N5bWJvbDsg
fQotICAgIGJvb2wgaXNBdG9tKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoQW5kRmxhZ3MgJiBzX2hh
c2hGbGFnU3RyaW5nS2luZElzQXRvbTsgfQorICAgIGJvb2wgaXNTeW1ib2woKSBjb25zdCB7IHJl
dHVybiBtX2hhc2hBbmRGbGFncy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgc19o
YXNoRmxhZ1N0cmluZ0tpbmRJc1N5bWJvbDsgfQorICAgIGJvb2wgaXNBdG9tKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNoQW5kRmxhZ3MubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIHNf
aGFzaEZsYWdTdHJpbmdLaW5kSXNBdG9tOyB9CiAgICAgdm9pZCBzZXRJc0F0b20oYm9vbCk7CiAg
ICAgCiAgICAgYm9vbCBpc0V4dGVybmFsKCkgY29uc3QgeyByZXR1cm4gYnVmZmVyT3duZXJzaGlw
KCkgPT0gQnVmZmVyRXh0ZXJuYWw7IH0KQEAgLTMxNiw3ICszMTcsNyBAQCBwcml2YXRlOgogICAg
IC8vIFNvLCB3ZSBzaGlmdCBsZWZ0IGFuZCByaWdodCB3aGVuIHNldHRpbmcgYW5kIGdldHRpbmcg
b3VyIGhhc2ggY29kZS4KICAgICB2b2lkIHNldEhhc2godW5zaWduZWQpIGNvbnN0OwogCi0gICAg
dW5zaWduZWQgcmF3SGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEFuZEZsYWdzID4+IHNfZmxh
Z0NvdW50OyB9CisgICAgdW5zaWduZWQgcmF3SGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEFu
ZEZsYWdzLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgPj4gc19mbGFnQ291bnQ7IH0K
IAogcHVibGljOgogICAgIGJvb2wgaGFzSGFzaCgpIGNvbnN0IHsgcmV0dXJuICEhcmF3SGFzaCgp
OyB9CkBAIC0zMjksMTEgKzMzMCwxMSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgc3ltYm9sQXdh
cmVIYXNoKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgZXhpc3RpbmdTeW1ib2xBd2FyZUhhc2goKSBj
b25zdDsKIAotICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJldHVybiBtX3JlZkNvdW50ICYg
c19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZzsgfQorICAgIGJvb2wgaXNTdGF0aWMoKSBjb25z
dCB7IHJldHVybiBtX3JlZkNvdW50LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCkgJiBz
X3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nOyB9CiAKLSAgICBzaXplX3QgcmVmQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX3JlZkNvdW50IC8gc19yZWZDb3VudEluY3JlbWVudDsgfQotICAgIGJv
b2wgaGFzT25lUmVmKCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3VudCA9PSBzX3JlZkNvdW50SW5j
cmVtZW50OyB9Ci0gICAgYm9vbCBoYXNBdExlYXN0T25lUmVmKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWZDb3VudDsgfSAvLyBGb3IgYXNzZXJ0aW9ucy4KKyAgICBzaXplX3QgcmVmQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX3JlZkNvdW50LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgLyBz
X3JlZkNvdW50SW5jcmVtZW50OyB9CisgICAgYm9vbCBoYXNPbmVSZWYoKSBjb25zdCB7IHJldHVy
biBtX3JlZkNvdW50LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgPT0gc19yZWZDb3Vu
dEluY3JlbWVudDsgfQorICAgIGJvb2wgaGFzQXRMZWFzdE9uZVJlZigpIGNvbnN0IHsgcmV0dXJu
IG1fcmVmQ291bnQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsgfSAvLyBGb3IgYXNz
ZXJ0aW9ucy4KIAogICAgIHZvaWQgcmVmKCk7CiAgICAgdm9pZCBkZXJlZigpOwpAQCAtNDg1LDcg
KzQ4Niw3IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBTdHJpbmdTdGF0cyYg
c3RyaW5nU3RhdHMoKSB7IHJldHVybiBtX3N0cmluZ1N0YXRzOyB9CiAjZW5kaWYKIAotICAgIEJ1
ZmZlck93bmVyc2hpcCBidWZmZXJPd25lcnNoaXAoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxCdWZmZXJPd25lcnNoaXA+KG1faGFzaEFuZEZsYWdzICYgc19oYXNoTWFza0J1ZmZlck93bmVy
c2hpcCk7IH0KKyAgICBCdWZmZXJPd25lcnNoaXAgYnVmZmVyT3duZXJzaGlwKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8QnVmZmVyT3duZXJzaGlwPihtX2hhc2hBbmRGbGFncy5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgc19oYXNoTWFza0J1ZmZlck93bmVyc2hpcCk7IH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsg
cmV0dXJuIHRhaWxPZmZzZXQ8VD4oKTsgfQogICAgIApAQCAtMTA0OCwxMCArMTA0OSwxMCBAQCBp
bmxpbmUgc2l6ZV90IFN0cmluZ0ltcGw6OmNvc3QoKSBjb25zdAogICAgIC8vIFdlIGVuc3VyZSB0
aGlzIGJ5IHByZS1zZXR0aW5nIHRoZSBzX2hhc2hGbGFnRGlkUmVwb3J0Q29zdCBiaXQgaW4gYWxs
IGluc3RhbmNlcyBvZgogICAgIC8vIFN0YXRpY1N0cmluZ0ltcGwuIEFzIGEgcmVzdWx0LCBTdGF0
aWNTdHJpbmdJbXBsIGluc3RhbmNlcyB3aWxsIGFsd2F5cyByZXR1cm4gYSBjb3N0IG9mCiAgICAg
Ly8gMCBoZXJlIGFuZCBhdm9pZCBtb2RpZnlpbmcgbV9oYXNoQW5kRmxhZ3MuCi0gICAgaWYgKG1f
aGFzaEFuZEZsYWdzICYgc19oYXNoRmxhZ0RpZFJlcG9ydENvc3QpCisgICAgaWYgKG1faGFzaEFu
ZEZsYWdzLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBzX2hhc2hGbGFnRGlkUmVw
b3J0Q29zdCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBtX2hhc2hBbmRGbGFncyB8PSBzX2hh
c2hGbGFnRGlkUmVwb3J0Q29zdDsKKyAgICBtX2hhc2hBbmRGbGFncy5mZXRjaF9vcihzX2hhc2hG
bGFnRGlkUmVwb3J0Q29zdCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CiAgICAgc2l6ZV90
IHJlc3VsdCA9IG1fbGVuZ3RoOwogICAgIGlmICghaXM4Qml0KCkpCiAgICAgICAgIHJlc3VsdCA8
PD0gMTsKQEAgLTEwNzcsOSArMTA3OCw5IEBAIGlubGluZSB2b2lkIFN0cmluZ0ltcGw6OnNldElz
QXRvbShib29sIGlzQXRvbSkKICAgICBBU1NFUlQoIWlzU3RhdGljKCkpOwogICAgIEFTU0VSVCgh
aXNTeW1ib2woKSk7CiAgICAgaWYgKGlzQXRvbSkKLSAgICAgICAgbV9oYXNoQW5kRmxhZ3MgfD0g
c19oYXNoRmxhZ1N0cmluZ0tpbmRJc0F0b207CisgICAgICAgIG1faGFzaEFuZEZsYWdzLmZldGNo
X29yKHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNBdG9tLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
KTsKICAgICBlbHNlCi0gICAgICAgIG1faGFzaEFuZEZsYWdzICY9IH5zX2hhc2hGbGFnU3RyaW5n
S2luZElzQXRvbTsKKyAgICAgICAgbV9oYXNoQW5kRmxhZ3MuZmV0Y2hfYW5kKH5zX2hhc2hGbGFn
U3RyaW5nS2luZElzQXRvbSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CiB9CiAKIGlubGlu
ZSB2b2lkIFN0cmluZ0ltcGw6OnNldEhhc2godW5zaWduZWQgaGFzaCkgY29uc3QKQEAgLTEwOTUs
MjkgKzEwOTYsMzMgQEAgaW5saW5lIHZvaWQgU3RyaW5nSW1wbDo6c2V0SGFzaCh1bnNpZ25lZCBo
YXNoKSBjb25zdAogICAgIEFTU0VSVCghKGhhc2ggJiAoc19mbGFnTWFzayA8PCAoOCAqIHNpemVv
ZihoYXNoKSAtIHNfZmxhZ0NvdW50KSkpKTsgLy8gVmVyaWZ5IHRoYXQgZW5vdWdoIGhpZ2ggYml0
cyBhcmUgZW1wdHkuCiAKICAgICBoYXNoIDw8PSBzX2ZsYWdDb3VudDsKLSAgICBBU1NFUlQoISho
YXNoICYgbV9oYXNoQW5kRmxhZ3MpKTsgLy8gVmVyaWZ5IHRoYXQgZW5vdWdoIGxvdyBiaXRzIGFy
ZSBlbXB0eSBhZnRlciBzaGlmdC4KKyAgICBBU1NFUlQoIShoYXNoICYgbV9oYXNoQW5kRmxhZ3Mu
bG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpOyAvLyBWZXJpZnkgdGhhdCBlbm91Z2gg
bG93IGJpdHMgYXJlIGVtcHR5IGFmdGVyIHNoaWZ0LgogICAgIEFTU0VSVChoYXNoKTsgLy8gVmVy
aWZ5IHRoYXQgMCBpcyBhIHZhbGlkIHNlbnRpbmVsIGhhc2ggdmFsdWUuCiAKLSAgICBtX2hhc2hB
bmRGbGFncyB8PSBoYXNoOyAvLyBTdG9yZSBoYXNoIHdpdGggZmxhZ3MgaW4gbG93IGJpdHMuCisg
ICAgbV9oYXNoQW5kRmxhZ3MuZmV0Y2hfb3IoaGFzaCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhl
ZCk7IC8vIFN0b3JlIGhhc2ggd2l0aCBmbGFncyBpbiBsb3cgYml0cy4KIH0KIAogaW5saW5lIHZv
aWQgU3RyaW5nSW1wbDo6cmVmKCkKIHsKICAgICBTVFJJTkdfU1RBVFNfUkVGX1NUUklORygqdGhp
cyk7CiAKLSAgICBtX3JlZkNvdW50ICs9IHNfcmVmQ291bnRJbmNyZW1lbnQ7CisgICAgbV9yZWZD
b3VudC5mZXRjaF9hZGQoc19yZWZDb3VudEluY3JlbWVudCwgc3RkOjptZW1vcnlfb3JkZXJfcmVs
YXhlZCk7CiB9CiAKIGlubGluZSB2b2lkIFN0cmluZ0ltcGw6OmRlcmVmKCkKIHsKICAgICBTVFJJ
TkdfU1RBVFNfREVSRUZfU1RSSU5HKCp0aGlzKTsKIAotICAgIHVuc2lnbmVkIHRlbXBSZWZDb3Vu
dCA9IG1fcmVmQ291bnQgLSBzX3JlZkNvdW50SW5jcmVtZW50OwotICAgIGlmICghdGVtcFJlZkNv
dW50KSB7Ci0gICAgICAgIFN0cmluZ0ltcGw6OmRlc3Ryb3kodGhpcyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbV9yZWZDb3VudCA9IHRlbXBSZWZDb3VudDsKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyB0byBhdm9pZCBtX3JlZkNvdW50IGFjdHVhbGx5IHJlYWNoaW5nIHplcm8gYW5kIHRo
ZSBsb2dpYyBpcyBjb3BpZWQgZnJvbSBDaHJvbWl1bSwKKyAgICAvLyAgICAgICAgYnV0IEkgZG9u
J3QgdW5kZXJzdGFuZCB3aHkgd2UgZG8gaXQgdGhpcyB3YXk/IFdoeSBub3QganVzdCBsZXQgaXQg
Z2V0IHRvIHplcm8gYW5kIGFzc2VydAorICAgIC8vICAgICAgICByZWZDb3VudCBpcyA+MCBiZWZv
cmUgZGVyZWY/CisgICAgYXV0byByZWZDb3VudCA9IG1fcmVmQ291bnQubG9hZChzdGQ6Om1lbW9y
eV9vcmRlcl9hY3F1aXJlKTsKKyAgICBkbyB7CisgICAgICAgIGlmICghKHJlZkNvdW50IC0gc19y
ZWZDb3VudEluY3JlbWVudCkpIHsKKyAgICAgICAgICAgIFN0cmluZ0ltcGw6OmRlc3Ryb3kodGhp
cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IHdoaWxlICghbV9yZWZD
b3VudC5jb21wYXJlX2V4Y2hhbmdlX3dlYWsocmVmQ291bnQsIHJlZkNvdW50IC0gc19yZWZDb3Vu
dEluY3JlbWVudCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbCkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBTb3VyY2VDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBEZXN0aW5hdGlvbkNoYXJhY3Rl
clR5cGU+Cg==
</data>
<flag name="commit-queue"
          id="432320"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>