<?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>171690</bug_id>
          
          <creation_ts>2017-05-04 14:11:23 -0700</creation_ts>
          <short_desc>JSC::Heap should expose a richer API for requesting GCs</short_desc>
          <delta_ts>2017-05-04 16:38:21 -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 Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>171689</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1304826</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-05-04 14:11:23 -0700</bug_when>
    <thetext>In the process of experimenting with https://bugs.webkit.org/show_bug.cgi?id=171689, I found the need to do these things:

- Request that JSC perform some action after GC finishes.
- Request that incremental sweeping releases fastMalloc memory after it finishes.
- Request async collections that run immediately if possible.
- Request sync collections that synchronously sweep.

This bug is about introducing some nicer APIs to do all of these things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304830</commentid>
    <comment_count>1</comment_count>
      <attachid>309101</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-05-04 14:18:20 -0700</bug_when>
    <thetext>Created attachment 309101
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304854</commentid>
    <comment_count>2</comment_count>
      <attachid>309101</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-05-04 15:21:12 -0700</bug_when>
    <thetext>Comment on attachment 309101
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304857</commentid>
    <comment_count>3</comment_count>
      <attachid>309101</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-04 15:24:49 -0700</bug_when>
    <thetext>Comment on attachment 309101
the patch

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

&gt; Source/JavaScriptCore/heap/Heap.cpp:984
&gt; +    } }

style nit: I think there should be a newline between braces here.

&gt; Source/JavaScriptCore/heap/Heap.cpp:997
&gt; +            if (request.subsumedBy(request)) {

This confuses me. Why are we calling subsumedBy always passing in the self object?

&gt; Source/JavaScriptCore/heap/Synchronousness.h:30
&gt; +enum Synchronousness {

style nit: How about an enum class here since this only used in a handful of locations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304858</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-04 15:25:04 -0700</bug_when>
    <thetext>Sorry did not mean to clear Geoff&apos;s r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304886</commentid>
    <comment_count>5</comment_count>
      <attachid>309101</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-05-04 16:16:00 -0700</bug_when>
    <thetext>Comment on attachment 309101
the patch

r=ggaren+saam</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304887</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-05-04 16:16:30 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #3)
&gt; Comment on attachment 309101 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=309101&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:984
&gt; &gt; +    } }
&gt; 
&gt; style nit: I think there should be a newline between braces here.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:997
&gt; &gt; +            if (request.subsumedBy(request)) {
&gt; 
&gt; This confuses me. Why are we calling subsumedBy always passing in the self
&gt; object?

oops.  That&apos;s a bug!  I&apos;ll test the fix.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Synchronousness.h:30
&gt; &gt; +enum Synchronousness {
&gt; 
&gt; style nit: How about an enum class here since this only used in a handful of
&gt; locations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304894</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-05-04 16:38:21 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/216218/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309101</attachid>
            <date>2017-05-04 14:18:20 -0700</date>
            <delta_ts>2017-05-04 16:16:00 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>45393</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE2MjA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBA
CisyMDE3LTA1LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDOjpIZWFwIHNob3VsZCBleHBvc2UgYSByaWNoZXIgQVBJIGZvciByZXF1ZXN0aW5nIEdDcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNjkwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJ
IHdhbnQgdG8gc3RvcCBXZWJDb3JlIGZyb20gcmVxdWVzdGluZyBzeW5jaHJvbm91cyBHQ3MuIEJ1
dCB2YXJpb3VzIHBhcnRzIG9mIHRoYXQgd29yaworICAgICAgICBtYXkgY2F1c2UgcmVncmVzc2lv
bnMsIHNvIEknZCBsaWtlIHRvIGxhbmQgaXQgc2VwYXJhdGVseSBmcm9tIHRoZSBmdW5jdGlvbmFs
aXR5IHRoYXQgaXMKKyAgICAgICAgbmVlZGVkIG9uIHRoZSBKU0Mgc2lkZS4gVGhpcyBjaGFuZ2Ug
aXMgbW9zdGx5IGEgSlNDLXNpZGUgcmVmYWN0b3JpbmcgdGhhdCBkb2VzIG5vdAorICAgICAgICBj
aGFuZ2UgYmVoYXZpb3IuIEluIHRoZSBmdXR1cmUgSSdsbCBsYW5kIHRoZSBiZWhhdmlvciBjaGFu
Z2VzIChpLmUuIG5vdCByZXF1ZXN0aW5nIHN5bmMKKyAgICAgICAgR0NzKS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgY2hhbmdlIGFsbG93cyB5b3UgdG8gZW51bWVyYXRlIG92ZXIgc3luY2hyb25v
dXNuZXNzLCBzbyB0aGF0IHdlIGNhbiBtYWtlIGFsbCBBUElzCisgICAgICAgIHRha2Ugc3luY2hy
b25vdXNuZXNzIGFzIGFuIGFyZ3VtZW50LiBJdCByZXBsYWNlcyB0aGUgY29sbGVjdEFsbEdhcmJh
Z2UgQVBJIHdpdGggYQorICAgICAgICBjb2xsZWN0Tm93KFN5bmNocm9ub3VzbmVzcywgR0NSZXF1
ZXN0KSBBUEkuIEdDUmVxdWVzdCBpcyBhIG5ldyBjb25jZXB0LCB3aGljaCBzdWJzdW1lcworICAg
ICAgICBzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gYW5kIGdpdmVzIHVzIHRoZSBhYmls
aXR5IHRvIHJlZ2lzdGVyIGNhbGxiYWNrcyBhbG9uZworICAgICAgICB3aXRoIGEgR0MuIFNvLCB5
b3UgY2FuIGFzayBmb3IgYW4gYXN5bmMgR0MgYW5kIGdldCBhIGNhbGxiYWNrIHdoZW4gaXQncyBk
b25lLgorICAgICAgICAKKyAgICAgICAgQWxzbyBhZGRzIGFiaWxpdHkgdG8gcmVxdWVzdCB0aGF0
IGZhc3RNYWxsb2MgbWVtb3J5IGJlIHJlbGVhc2VkIGFmdGVyIHRoZSBpbmNyZW1lbnRhbAorICAg
ICAgICBzd2VlcGVyIGZpbmlzaGVzLgorICAgICAgICAKKyAgICAgICAgKiBBUEkvSlNCYXNlLmNw
cDoKKyAgICAgICAgKEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyk6Cisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0Z1bGxHQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwOgorICAgICAgICAoSlNDOjpGdWxsR0NBY3Rpdml0eUNhbGxiYWNrOjpkb0NvbGxlY3Rp
b24pOgorICAgICAgICAqIGhlYXAvRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAgICAq
IGhlYXAvR0NSZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkdDUmVxdWVzdDo6c3Vi
c3VtZWRCeSk6CisgICAgICAgIChKU0M6OkdDUmVxdWVzdDo6ZHVtcCk6CisgICAgICAgICogaGVh
cC9HQ1JlcXVlc3QuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkdDUmVxdWVzdDo6R0NSZXF1ZXN0
KToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdE5vdyk6CisgICAgICAgIChKU0M6OkhlYXA6
OmNvbGxlY3RBc3luYyk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RTeW5jKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6cnVuQmVnaW5QaGFzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkVu
ZFBoYXNlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVxdWVzdENvbGxlY3Rpb24pOgorICAgICAg
ICAoSlNDOjpIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
c3dlZXBlcik6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3ROb3dGdWxsSWZOb3REb25lUmVj
ZW50bHkpOgorICAgICAgICAoSlNDOjpIZWFwOjpzaG91bGREb0Z1bGxDb2xsZWN0aW9uKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdEFsbEdhcmJhZ2UpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZUlmTm90RG9uZVJlY2VudGx5KTogRGVsZXRlZC4K
KyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdEJ1aWxk
ZXIuY3BwOgorICAgICAgICAoSlNDOjpIZWFwU25hcHNob3RCdWlsZGVyOjpidWlsZFNuYXBzaG90
KToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6
OkluY3JlbWVudGFsU3dlZXBlcjo6ZG9Td2VlcCk6CisgICAgICAgICogaGVhcC9JbmNyZW1lbnRh
bFN3ZWVwZXIuaDoKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpmcmVlRmFzdE1h
bGxvY01lbW9yeUFmdGVyU3dlZXBpbmcpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lm
TmVlZGVkKToKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6
TWFya2VkU3BhY2U6OnN3ZWVwKToKKyAgICAgICAgKiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHA6
IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBoZWFwL1N5
bmNocm9ub3VzbmVzcy5oOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckhlYXBBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckhlYXBBZ2Vu
dDo6Z2MpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvbkdDQW5kU3dlZXAp
OgorICAgICAgICAocnVuSlNDKToKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTVByb3RvdHlwZTo6Z2MpOgorICAgICAgICAq
IHdhc20vV2FzbU1lbW9yeS5jcHA6CisKIDIwMTctMDUtMDQgIFNhbSBXZWluaWcgIDxzYW1Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgbGVnYWN5IE5vdGlmaWNhdGlv
bnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNTg2
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNTAwLDYgKzUwMCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVh
cC9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwCiAgICAgaGVhcC9HQ0NvbmR1Y3Rvci5jcHAKICAgICBo
ZWFwL0dDTG9nZ2luZy5jcHAKKyAgICBoZWFwL0dDUmVxdWVzdC5jcHAKICAgICBoZWFwL0hhbmRs
ZVNldC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNwcAogICAgIGhlYXAvSGVhcC5jcHAKQEAg
LTUyNiw2ICs1MjcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGhlYXAvU3Rv
cElmTmVjZXNzYXJ5VGltZXIuY3BwCiAgICAgaGVhcC9TdWJzcGFjZS5jcHAKICAgICBoZWFwL1N5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAKKyAgICBoZWFwL1N5bmNo
cm9ub3VzbmVzcy5jcHAKICAgICBoZWFwL1Zpc2l0UmFjZUtleS5jcHAKICAgICBoZWFwL1dlYWsu
Y3BwCiAgICAgaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2
aXNpb24gMjE1ODY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMjQsNyArMjAyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25TZXQKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQ0FuZFN3
ZWVwKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAg
ICBleGVjLT5oZWFwKCktPmNvbGxlY3RBbGxHYXJiYWdlKCk7CisgICAgZXhlYy0+aGVhcCgpLT5j
b2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihleGVjLT5oZWFwKCktPnNpemVBZnRlckxhc3RGdWxsQ29sbGVj
dGlvbigpKSk7CiB9CiAKQEAgLTM4NTcsNyArMzg1Nyw3IEBAIGludCBydW5KU0MoQ29tbWFuZExp
bmUgb3B0aW9ucywgY29uc3QgRnUKICAgICBpZiAoT3B0aW9uczo6Z2NBdEVuZCgpKSB7CiAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gaG9sZCB0aGUgQVBJIGxvY2sgdG8gZG8gYSBHQy4KICAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2tlcigmdm0pOwotICAgICAgICB2bS5oZWFwLmNvbGxlY3RBbGxHYXJi
YWdlKCk7CisgICAgICAgIHZtLmhlYXAuY29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6
OkZ1bGwpOwogICAgIH0KIAogICAgIGlmIChvcHRpb25zLm1fZHVtcFNhbXBsaW5nUHJvZmlsZXJE
YXRhKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCShyZXZpc2lvbiAy
MTU4NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVj
dEZvckRlYnVnCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcihleGVjKTsKLSAgICBleGVjLT52bSgpLmhlYXAuY29sbGVjdEFsbEdhcmJh
Z2UoKTsKKyAgICBleGVjLT52bSgpLmhlYXAuY29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2Nv
cGU6OkZ1bGwpOwogfQogCiB2b2lkIEpTU3luY2hyb25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2lu
ZyhKU0NvbnRleHRSZWYgY3R4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIxNTg2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MjksNiArNjI5LDgg
QEAKIAkJMEY5NjMwM0MxRDQxOTJDRDAwNTYwOUQ5IC8qIERlc3RydWN0aW9uTW9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzgxRDQxOTJD
MzAwNTYwOUQ5IC8qIERlc3RydWN0aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1
ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2RUJCMzE2Njc2RUY2MDA4
QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxv
Y2tXaXRoSklUVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGOTcxNTMwMUVCMjhCRUIwMEExNjQ1RCAvKiBHQ1JlcXVlc3QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NzE1MkUxRUIyOEJF
OTAwQTE2NDVEIC8qIEdDUmVxdWVzdC5jcHAgKi87IH07CisJCTBGOTcxNTMxMUVCMjhCRUUwMEEx
NjQ1RCAvKiBHQ1JlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTcxNTJGMUVCMjhCRTkwMEExNjQ1RCAvKiBHQ1JlcXVlc3QuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk3NDk3MTE2ODdB
REU0MDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NzQ5NkYxNjg3QURFMjAwQTRGRjZBIC8qIEpTQ2VsbElu
bGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjk3OEIzQjFBQUVBNzFEMDA3QzczNjkgLyogQ29uc3RhbnRNb2RlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTc4QjNBMUFBRUE3MUQwMDdD
NzM2OSAvKiBDb25zdGFudE1vZGUuY3BwICovOyB9OwogCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBE
MDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTgyMDVEMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVt
cFRhcmdldHMuY3BwICovOyB9OwpAQCAtNzgxLDYgKzc4Myw4IEBACiAJCTBGRDNFNDBDMUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFBy
b3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5j
cHAgKi87IH07CiAJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0
MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZENzlBMkQxRUJCQkRCQjAwREE4
OEQzIC8qIFN5bmNocm9ub3VzbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZENzlBMkMxRUJCQkRCMjAwREE4OEQzIC8qIFN5bmNocm9ub3VzbmVz
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
RDc5QTJFMUVCQkJEQzAwMERBODhEMyAvKiBTeW5jaHJvbm91c25lc3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZENzlBMkIxRUJCQkRCMjAwREE4
OEQzIC8qIFN5bmNocm9ub3VzbmVzcy5jcHAgKi87IH07CiAJCTBGRDgxQUQzMTU0RkI0RjAwMDk4
M0U3MiAvKiBERkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkQ4MUFEMDE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5o
ICovOyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFF
MTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovOyB9OwogCQkwRkQ4MkUz
OTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAv
KiBDb21wYWN0SklUQ29kZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMTc4LDYgKzMxODIsOCBAQAogCQkwRjk2MzAzODFENDE5MkMzMDA1
NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERlc3RydWN0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2
M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjk2RUJCMTE2Njc2RUY0MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrV2l0aEpJVFR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NzE1MkUxRUIyOEJFOTAwQTE2NDVEIC8q
IEdDUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ1Jl
cXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk3MTUyRjFFQjI4QkU5
MDBBMTY0NUQgLyogR0NSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdDUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3NDk2RjE2ODdB
REUyMDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0NlbGxJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
OTc4QjNBMUFBRUE3MUQwMDdDNzM2OSAvKiBDb25zdGFudE1vZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRNb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFy
Z2V0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmVjaXNlSnVt
cFRhcmdldHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM0Myw2ICszMzQ5
LDggQEAKIAkJMEZEM0U0MDcxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5Q29uZGl0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0U0MDgxQjYxOEI2NjAwQzgw
RTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFByb3BlcnR5Q29uZGl0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDU2NTIyMTZBQjc4MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBwYXRoID0g
ZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDc5QTJCMUVCQkJEQjIwMERBODhEMyAvKiBTeW5jaHJvbm91c25lc3MuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3luY2hyb25vdXNuZXNzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZENzlBMkMxRUJCQkRCMjAwREE4OEQzIC8qIFN5bmNo
cm9ub3VzbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jaHJvbm91
c25lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBRDAxNTRGQjRFQjAw
OTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRG9taW5hdG9ycy5oOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFi
aWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDYXBh
YmlsaXRpZXMuY3BwOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmls
aXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVz
Lmg7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01OTc2LDYgKzU5ODQsOCBAQAogCQkJCTBGMkI2NkFCMTdCNkI1M0QwMEE3QUUzRiAv
KiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLywKIAkJCQkyQURGQTI2MjE4RUYz
NTQwMDA0RjlGQ0MgLyogR0NMb2dnaW5nLmNwcCAqLywKIAkJCQkyQUFCQ0RFNjE4RUYyOTQyMDAw
MDIwOTYgLyogR0NMb2dnaW5nLmggKi8sCisJCQkJMEY5NzE1MkUxRUIyOEJFOTAwQTE2NDVEIC8q
IEdDUmVxdWVzdC5jcHAgKi8sCisJCQkJMEY5NzE1MkYxRUIyOEJFOTAwQTE2NDVEIC8qIEdDUmVx
dWVzdC5oICovLAogCQkJCTJBMzQzRjc0MThBMTc0OEIwMDM5QjA4NSAvKiBHQ1NlZ21lbnRlZEFy
cmF5LmggKi8sCiAJCQkJMkEzNDNGNzcxOEExNzQ5RDAwMzlCMDg1IC8qIEdDU2VnbWVudGVkQXJy
YXlJbmxpbmVzLmggKi8sCiAJCQkJMEY4NkEyNkUxRDZGN0IzMTAwQ0IwQzkyIC8qIEdDVHlwZU1h
cC5oICovLApAQCAtNjA1Niw2ICs2MDY2LDggQEAKIAkJCQkwRjdERjEzMjFFMjk3MEQ1MDA5NTk1
MUIgLyogU3Vic3BhY2UuaCAqLywKIAkJCQkwRjdERjEzMzFFMjk3MEQ1MDA5NTk1MUIgLyogU3Vi
c3BhY2VJbmxpbmVzLmggKi8sCiAJCQkJMEZEMEU1RUQxRTQ2OEE1NDAwMDZBQjA4IC8qIFN3ZWVw
aW5nU2NvcGUuaCAqLywKKwkJCQkwRkQ3OUEyQjFFQkJCREIyMDBEQTg4RDMgLyogU3luY2hyb25v
dXNuZXNzLmNwcCAqLywKKwkJCQkwRkQ3OUEyQzFFQkJCREIyMDBEQTg4RDMgLyogU3luY2hyb25v
dXNuZXNzLmggKi8sCiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3Vz
U3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYxRkIzOEIxRTE3M0E2
MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICov
LAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywK
QEAgLTg2MjQsNiArODYzNiw3IEBACiAJCQkJMEY2Mzk0M0YxNUM3NUYxOTAwNkE1OTdDIC8qIERG
R1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkUwRjc3MTZD
MURCMTIwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEY5NzE1MzExRUIyOEJFRTAwQTE2NDVEIC8qIEdDUmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCREM0ODE1MjI4MDI5MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDEyMzMzMTk0NEVBMUIwMDg0M0EwQyAvKiBERkdWYWx1
ZVN0cmVuZ3RoLmggaW4gSGVhZGVycyAqLywKQEAgLTkzMjIsNiArOTMzNSw3IEBACiAJCQkJQTU1
RDkzQTYxODUwMTJBODAwNDAwREVEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTU0Q0YyRkExODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTU1MTY1RDUxQkRGMTM1QTAwM0I3NUMxIC8qIFNjcmlwdFByb2ZpbGlu
Z1Njb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ3OUEyRDFFQkJCREJCMDBEQTg4RDMgLyog
U3luY2hyb25vdXNuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTRDRjJGNjE4NEVBQjI0MDAy
MzdGMTkgLyogU2NyaXB0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mjk5REE2MTdEMTI4
NTgwMDVGNUZGOSAvKiBTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5MERE
NkUxODJGNDk5NzAwNTg4ODA3IC8qIFNldEl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKQEAgLTEwMDY3LDYgKzEwMDgxLDcgQEAKIAkJCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQg
LyogQWlyVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5NjMwMzkxRDQxOTJDNjAw
NTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5QkQxMDdFQzM3NjAwNDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEY5NzE1MzAxRUIyOEJFQjAwQTE2NDVEIC8qIEdDUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3OUEyMjgzNTFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyogQVJN
QXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA3NjksNiArMTA3ODQsNyBAQAogCQkJ
CURDNjA1QjVEMUNFMjZFQTAwMDU5MzcxOCAvKiBQcm9maWxlckV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMTkwQ0FDMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVh
c29uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQ
cm9maWxlck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQ3OUEyRTFFQkJCREMwMDBE
QTg4RDMgLyogU3luY2hyb25vdXNuZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0
MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NS
RXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9GdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9GdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcAkocmV2aXNpb24gMjE1
ODY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnVsbEdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgRnVsbEdDQWN0aXZpdHlDYWxs
YmFjazo6RnVsbEdDQWN0aXZpdHlDYQogdm9pZCBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrOjpkb0Nv
bGxlY3Rpb24oKQogewogICAgIEhlYXAmIGhlYXAgPSBtX3ZtLT5oZWFwOwotICAgIG1fZGlkU3lu
Y0dDUmVjZW50bHkgPSBmYWxzZTsKKyAgICBtX2RpZEdDUmVjZW50bHkgPSBmYWxzZTsKIAogI2lm
ICFQTEFURk9STShJT1MpCiAgICAgZG91YmxlIHN0YXJ0VGltZSA9IFdURjo6bW9ub3RvbmljYWxs
eUluY3JlYXNpbmdUaW1lKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GdWxs
R0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oCShyZXZpc2lvbiAyMTU4NjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDE1ICszNSwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRvQ29sbGVjdGlv
bigpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBkaWRTeW5jR0NSZWNlbnRseSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlkU3luY0dDUmVjZW50bHk7IH0KLSAgICB2b2lkIHNldERpZFN5bmNHQ1JlY2VudGx5
KCkgeyBtX2RpZFN5bmNHQ1JlY2VudGx5ID0gdHJ1ZTsgfQorICAgIGJvb2wgZGlkR0NSZWNlbnRs
eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlkR0NSZWNlbnRseTsgfQorICAgIHZvaWQgc2V0RGlkR0NS
ZWNlbnRseSgpIHsgbV9kaWRHQ1JlY2VudGx5ID0gdHJ1ZTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAg
U2Vjb25kcyBsYXN0R0NMZW5ndGgoKSBvdmVycmlkZTsKICAgICBkb3VibGUgZ2NUaW1lU2xpY2Uo
c2l6ZV90IGJ5dGVzKSBvdmVycmlkZTsKICAgICBkb3VibGUgZGVhdGhSYXRlKCkgb3ZlcnJpZGU7
CiAKLSAgICBib29sIG1fZGlkU3luY0dDUmVjZW50bHkgeyBmYWxzZSB9OworICAgIGJvb2wgbV9k
aWRHQ1JlY2VudGx5IHsgZmFsc2UgfTsKIH07CiAKIGlubGluZSBSZWZQdHI8RnVsbEdDQWN0aXZp
dHlDYWxsYmFjaz4gR0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGVGdWxsVGltZXIoSGVhcCogaGVh
cCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDUmVxdWVzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NSZXF1ZXN0LmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1JlcXVlc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdDUmVxdWVz
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworYm9vbCBHQ1JlcXVlc3Q6OnN1YnN1bWVkQnkoY29u
c3QgR0NSZXF1ZXN0JiBvdGhlcikgY29uc3QKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGNhbGxiYWNr
cywgdGhlbiB0aGVyZSBpcyBubyBjaGFuY2UgdGhhdCB3ZSdyZSBzdWJzdW1lZCBieSBhbiBleGlz
dGluZyByZXF1ZXN0LgorICAgIGlmIChkaWRGaW5pc2hFbmRQaGFzZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGlmIChvdGhlci5zY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1
bGwpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChzY29wZSkgeworICAgICAg
ICAvLyBJZiB3ZSdyZSBlZGVuLCB0aGVuIHdlJ3JlIHN1YnN1bWVkIGJ5IHRoZSBvdGhlciBzY29w
ZSBiZWNhdXNlIHRoZSBvdGhlciBzY29wZSBpcyBlaXRoZXIgZWRlbgorICAgICAgICAvLyBvciBk
aXNlbmdhZ2VkIChzbyBlaXRoZXIgZWRlbiBvciBmdWxsKS4gSWYgd2UncmUgZnVsbCwgdGhlbiB3
ZSdyZSBub3Qgc3Vic3VtZWQsIGZvciB0aGUgc2FtZQorICAgICAgICAvLyByZWFzb24uCisgICAg
ICAgIHJldHVybiBzY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW47CisgICAgfQorICAgIAor
ICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IG90aGVyLnNjb3BlIGlzIGVpdGhlciBu
b3QgZW5nYWdlZCBvciBFZGVuLCBhbmQgdGhpcy5zY29wZSBpcyBub3QKKyAgICAvLyBlbmdhZ2Vk
LiBTbywgd2UncmUgZXhwZWN0aW5nIHRvIGRvIGVpdGhlciBhbiBlZGVuIG9yIGZ1bGwgY29sbGVj
dGlvbiwgYW5kIHRoZSBvdGhlciBzY29wZSBpcworICAgIC8vIGVpdGhlciB0aGUgc2FtZSBvciBp
cyByZXF1ZXN0aW5nIHNwZWNpZmljYWxseSBhIGZ1bGwgY29sbGVjdGlvbi4gV2UgYXJlIHN1YnN1
bWVkIGlmIHRoZSBvdGhlcgorICAgIC8vIHNjb3BlIGlzIGRpc2VuZ2FnZWQgKHNvIHNhbWUgYXMg
dXMpLgorICAgIHJldHVybiAhb3RoZXIuc2NvcGU7Cit9CisKK3ZvaWQgR0NSZXF1ZXN0OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJ7c2NvcGUgPSAiLCBz
Y29wZSwgIiwgZGlkRmluaXNoRW5kUGhhc2UgPSAiLCBkaWRGaW5pc2hFbmRQaGFzZSA/ICJlbmdh
Z2VkIiA6ICJudWxsIiwgIn0iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDUmVxdWVzdC5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xsZWN0aW9uU2NvcGUuaCIKKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK3N0cnVjdCBHQ1JlcXVlc3QgeworICAgIEdDUmVxdWVzdCgpIHsgfQorICAgIAorICAg
IEdDUmVxdWVzdChDb2xsZWN0aW9uU2NvcGUgc2NvcGUpCisgICAgICAgIDogc2NvcGUoc2NvcGUp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBHQ1JlcXVlc3Qoc3RkOjpvcHRpb25hbDxDb2xsZWN0
aW9uU2NvcGU+IHNjb3BlKQorICAgICAgICA6IHNjb3BlKHNjb3BlKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBzdWJzdW1lZEJ5KGNvbnN0IEdDUmVxdWVzdCYgb3RoZXIpIGNvbnN0Owor
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIHN0ZDo6
b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBzY29wZTsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKCk+PiBkaWRGaW5pc2hFbmRQaGFzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjE1ODY3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0
MCwzMSArOTQwLDUyIEBAIHZvaWQgSGVhcDo6c3dlZXBTeW5jaHJvbm91c2x5KCkKICAgICB9CiB9
CiAKLXZvaWQgSGVhcDo6Y29sbGVjdEFsbEdhcmJhZ2UoKQordm9pZCBIZWFwOjpjb2xsZWN0KFN5
bmNocm9ub3VzbmVzcyBzeW5jaHJvbm91c25lc3MsIEdDUmVxdWVzdCByZXF1ZXN0KQogewotICAg
IGlmICghbV9pc1NhZmVUb0NvbGxlY3QpCisgICAgc3dpdGNoIChzeW5jaHJvbm91c25lc3MpIHsK
KyAgICBjYXNlIEFzeW5jOgorICAgICAgICBjb2xsZWN0QXN5bmMocmVxdWVzdCk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFN5bmM6CisgICAgICAgIGNvbGxlY3RTeW5jKHJlcXVlc3QpOwog
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgY29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpG
dWxsKTsKLQotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqdGhpcyk7Ci0gICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6OnVzZUltbW9ydGFsT2JqZWN0cygpKSkKLSAgICAgICAgc3dlZXBlcigp
LT5zdG9wU3dlZXBpbmcoKTsKLQotICAgIGJvb2wgYWxyZWFkeVN3ZXB0SW5Db2xsZWN0U3luYyA9
IE9wdGlvbnM6OnN3ZWVwU3luY2hyb25vdXNseSgpOwotICAgIGlmICghYWxyZWFkeVN3ZXB0SW5D
b2xsZWN0U3luYykgewotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAg
IGRhdGFMb2coIltHQzwiLCBSYXdQb2ludGVyKHRoaXMpLCAiPjogIik7Ci0gICAgICAgIHN3ZWVw
U3luY2hyb25vdXNseSgpOwotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAg
ICAgIGRhdGFMb2coIl1cbiIpOwogICAgIH0KLSAgICBtX29iamVjdFNwYWNlLmFzc2VydE5vVW5z
d2VwdCgpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKLSAgICBzd2Vl
cEFsbExvZ2ljYWxseUVtcHR5V2Vha0Jsb2NrcygpOwordm9pZCBIZWFwOjpjb2xsZWN0Tm93KFN5
bmNocm9ub3VzbmVzcyBzeW5jaHJvbm91c25lc3MsIEdDUmVxdWVzdCByZXF1ZXN0KQoreworICAg
IHN3aXRjaCAoc3luY2hyb25vdXNuZXNzKSB7CisgICAgY2FzZSBBc3luYzogeworICAgICAgICBj
b2xsZWN0QXN5bmMocmVxdWVzdCk7CisgICAgICAgIHN0b3BJZk5lY2Vzc2FyeSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFN5bmM6IHsKKyAgICAgICAgY29s
bGVjdFN5bmMocmVxdWVzdCk7CisgICAgICAgIAorICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGRl
ZmVyR0MoKnRoaXMpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dXNlSW1tb3J0YWxP
YmplY3RzKCkpKQorICAgICAgICAgICAgc3dlZXBlcigpLnN0b3BTd2VlcGluZygpOworICAgICAg
ICAKKyAgICAgICAgYm9vbCBhbHJlYWR5U3dlcHRJbkNvbGxlY3RTeW5jID0gT3B0aW9uczo6c3dl
ZXBTeW5jaHJvbm91c2x5KCk7CisgICAgICAgIGlmICghYWxyZWFkeVN3ZXB0SW5Db2xsZWN0U3lu
YykgeworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICAgICAg
ZGF0YUxvZygiW0dDPCIsIFJhd1BvaW50ZXIodGhpcyksICI+OiAiKTsKKyAgICAgICAgICAgIHN3
ZWVwU3luY2hyb25vdXNseSgpOworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiXVxuIik7CisgICAgICAgIH0KKyAgICAgICAgbV9vYmpl
Y3RTcGFjZS5hc3NlcnROb1Vuc3dlcHQoKTsKKyAgICAgICAgCisgICAgICAgIHN3ZWVwQWxsTG9n
aWNhbGx5RW1wdHlXZWFrQmxvY2tzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9IH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEhlYXA6OmNvbGxlY3RBc3lu
YyhzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gc2NvcGUpCit2b2lkIEhlYXA6OmNvbGxl
Y3RBc3luYyhHQ1JlcXVlc3QgcmVxdWVzdCkKIHsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0
KQogICAgICAgICByZXR1cm47CkBAIC05NzIsMzggKzk5MywyNSBAQCB2b2lkIEhlYXA6OmNvbGxl
Y3RBc3luYyhzdGQ6Om9wdGlvbmFsPENvCiAgICAgYm9vbCBhbHJlYWR5UmVxdWVzdGVkID0gZmFs
c2U7CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV90aHJlYWRMb2NrKTsKLSAg
ICAgICAgZm9yIChzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gcmVxdWVzdCA6IG1fcmVx
dWVzdHMpIHsKLSAgICAgICAgICAgIGlmIChzY29wZSkgewotICAgICAgICAgICAgICAgIGlmIChz
Y29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgYWxy
ZWFkeVJlcXVlc3RlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNj
b3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChy
ZXF1ZXN0ID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYWxyZWFkeVJlcXVlc3RlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QgPT0gQ29s
bGVjdGlvblNjb3BlOjpGdWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFscmVhZHlSZXF1ZXN0
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgIGZvciAoY29uc3QgR0NSZXF1ZXN0JiByZXF1ZXN0IDogbV9yZXF1ZXN0cykgewor
ICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3Vic3VtZWRCeShyZXF1ZXN0KSkgeworICAgICAgICAg
ICAgICAgIGFscmVhZHlSZXF1ZXN0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGlmIChhbHJlYWR5UmVxdWVzdGVk
KQogICAgICAgICByZXR1cm47CiAKLSAgICByZXF1ZXN0Q29sbGVjdGlvbihzY29wZSk7CisgICAg
cmVxdWVzdENvbGxlY3Rpb24ocmVxdWVzdCk7CiB9CiAKLXZvaWQgSGVhcDo6Y29sbGVjdFN5bmMo
c3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IHNjb3BlKQordm9pZCBIZWFwOjpjb2xsZWN0
U3luYyhHQ1JlcXVlc3QgcmVxdWVzdCkKIHsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgd2FpdEZvckNvbGxlY3Rpb24ocmVxdWVzdENvbGxl
Y3Rpb24oc2NvcGUpKTsKKyAgICB3YWl0Rm9yQ29sbGVjdGlvbihyZXF1ZXN0Q29sbGVjdGlvbihy
ZXF1ZXN0KSk7CiB9CiAKIGJvb2wgSGVhcDo6c2hvdWxkQ29sbGVjdEluQ29sbGVjdG9yVGhyZWFk
KGNvbnN0IEFic3RyYWN0TG9ja2VyJikKQEAgLTExMDgsMTIgKzExMTYsMTEgQEAgTkVWRVJfSU5M
SU5FIGJvb2wgSGVhcDo6cnVuTm90UnVubmluZ1BoYQogTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6
cnVuQmVnaW5QaGFzZShHQ0NvbmR1Y3RvciBjb25uKQogewogICAgIG1fY3VycmVudEdDU3RhcnRU
aW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgICAgIAotICAgIHN0ZDo6b3B0aW9uYWw8
Q29sbGVjdGlvblNjb3BlPiBzY29wZTsKKyAgICAKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKCptX3RocmVhZExvY2spOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZXF1ZXN0
cy5pc0VtcHR5KCkpOwotICAgICAgICBzY29wZSA9IG1fcmVxdWVzdHMuZmlyc3QoKTsKKyAgICAg
ICAgbV9jdXJyZW50UmVxdWVzdCA9IG1fcmVxdWVzdHMuZmlyc3QoKTsKICAgICB9CiAgICAgICAg
IAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQpAQCAtMTEyNSw4ICsxMTMyLDggQEAgTkVWRVJf
SU5MSU5FIGJvb2wgSGVhcDo6cnVuQmVnaW5QaGFzZShHQwogICAgICAgICBkYXRhTG9nKCJDb2xs
ZWN0aW9uIHNjb3BlIGFscmVhZHkgc2V0IGR1cmluZyBHQzogIiwgKm1fY29sbGVjdGlvblNjb3Bl
LCAiXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0g
ICAgICAgIAotICAgIHdpbGxTdGFydENvbGxlY3Rpb24oc2NvcGUpOworICAgIAorICAgIHdpbGxT
dGFydENvbGxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgaWYgKFVOTElLRUxZKG1fdmVyaWZpZXIp
KSB7CiAgICAgICAgIC8vIFZlcmlmeSB0aGF0IGxpdmUgb2JqZWN0cyBmcm9tIHRoZSBsYXN0IEdD
IGN5Y2xlIGhhdmVuJ3QgYmVlbiBjb3JydXB0ZWQgYnkKQEAgLTEzOTQsNyArMTQwMSwxMCBAQCBO
RVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5FbmRQaGFzZShHQ0NvCiAgICAgfQogCiAgICAgZGlk
RmluaXNoQ29sbGVjdGlvbigpOwotCisgICAgCisgICAgaWYgKG1fY3VycmVudFJlcXVlc3QuZGlk
RmluaXNoRW5kUGhhc2UpCisgICAgICAgIG1fY3VycmVudFJlcXVlc3QuZGlkRmluaXNoRW5kUGhh
c2UtPnJ1bigpOworICAgIAogICAgIGlmIChmYWxzZSkgewogICAgICAgICBkYXRhTG9nKCJIZWFw
IHN0YXRlIGFmdGVyIEdDOlxuIik7CiAgICAgICAgIG1fb2JqZWN0U3BhY2UuZHVtcEJpdHMoKTsK
QEAgLTE5ODAsNyArMTk5MCw3IEBAIHZvaWQgSGVhcDo6ZmluYWxpemUoKQogICAgIH0KIH0KIAot
SGVhcDo6VGlja2V0IEhlYXA6OnJlcXVlc3RDb2xsZWN0aW9uKHN0ZDo6b3B0aW9uYWw8Q29sbGVj
dGlvblNjb3BlPiBzY29wZSkKK0hlYXA6OlRpY2tldCBIZWFwOjpyZXF1ZXN0Q29sbGVjdGlvbihH
Q1JlcXVlc3QgcmVxdWVzdCkKIHsKICAgICBzdG9wSWZOZWNlc3NhcnkoKTsKICAgICAKQEAgLTE5
OTgsNyArMjAwOCw3IEBAIEhlYXA6OlRpY2tldCBIZWFwOjpyZXF1ZXN0Q29sbGVjdGlvbihzdGQK
ICAgICAgICAgbV93b3JsZFN0YXRlLmV4Y2hhbmdlT3IobXV0YXRvckhhc0Nvbm5CaXQpOwogICAg
IH0KICAgICAKLSAgICBtX3JlcXVlc3RzLmFwcGVuZChzY29wZSk7CisgICAgbV9yZXF1ZXN0cy5h
cHBlbmQocmVxdWVzdCk7CiAgICAgbV9sYXN0R3JhbnRlZFRpY2tldCsrOwogICAgIGlmICghKG1f
d29ybGRTdGF0ZS5sb2FkKCkgJiBtdXRhdG9ySGFzQ29ubkJpdCkpCiAgICAgICAgIG1fdGhyZWFk
Q29uZGl0aW9uLT5ub3RpZnlPbmUobG9ja2VyKTsKQEAgLTIwMjksMTIgKzIwMzksMTIgQEAgdm9p
ZCBIZWFwOjpzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCkKICNlbmRpZgogfQogCi12b2lkIEhlYXA6
OndpbGxTdGFydENvbGxlY3Rpb24oc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IHNjb3Bl
KQordm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKCkKIHsKICAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiPT4gIik7CiAgICAgCi0gICAgaWYgKHNob3VsZERv
RnVsbENvbGxlY3Rpb24oc2NvcGUpKSB7CisgICAgaWYgKHNob3VsZERvRnVsbENvbGxlY3Rpb24o
KSkgewogICAgICAgICBtX2NvbGxlY3Rpb25TY29wZSA9IENvbGxlY3Rpb25TY29wZTo6RnVsbDsK
ICAgICAgICAgbV9zaG91bGREb0Z1bGxDb2xsZWN0aW9uID0gZmFsc2U7CiAgICAgICAgIGlmIChP
cHRpb25zOjpsb2dHQygpKQpAQCAtMjI1Myw5ICsyMjYzLDkgQEAgR0NBY3Rpdml0eUNhbGxiYWNr
KiBIZWFwOjplZGVuQWN0aXZpdHlDYQogICAgIHJldHVybiBtX2VkZW5BY3Rpdml0eUNhbGxiYWNr
LmdldCgpOwogfQogCi1JbmNyZW1lbnRhbFN3ZWVwZXIqIEhlYXA6OnN3ZWVwZXIoKQorSW5jcmVt
ZW50YWxTd2VlcGVyJiBIZWFwOjpzd2VlcGVyKCkKIHsKLSAgICByZXR1cm4gbV9zd2VlcGVyLmdl
dCgpOworICAgIHJldHVybiAqbV9zd2VlcGVyOwogfQogCiB2b2lkIEhlYXA6OnNldEdhcmJhZ2VD
b2xsZWN0aW9uVGltZXJFbmFibGVkKGJvb2wgZW5hYmxlKQpAQCAtMjMwOCwzMSArMjMxOCwzMSBA
QCB2b2lkIEhlYXA6OmFkZEV4ZWN1dGFibGUoRXhlY3V0YWJsZUJhc2UqCiAgICAgbV9leGVjdXRh
Ymxlcy5hcHBlbmQoZXhlY3V0YWJsZSk7CiB9CiAKLXZvaWQgSGVhcDo6Y29sbGVjdEFsbEdhcmJh
Z2VJZk5vdERvbmVSZWNlbnRseSgpCit2b2lkIEhlYXA6OmNvbGxlY3ROb3dGdWxsSWZOb3REb25l
UmVjZW50bHkoU3luY2hyb25vdXNuZXNzIHN5bmNocm9ub3VzbmVzcykKIHsKICAgICBpZiAoIW1f
ZnVsbEFjdGl2aXR5Q2FsbGJhY2spIHsKLSAgICAgICAgY29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAg
ICAgICAgY29sbGVjdE5vdyhzeW5jaHJvbm91c25lc3MsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9mdWxsQWN0aXZpdHlDYWxsYmFj
ay0+ZGlkU3luY0dDUmVjZW50bHkoKSkgeworICAgIGlmIChtX2Z1bGxBY3Rpdml0eUNhbGxiYWNr
LT5kaWRHQ1JlY2VudGx5KCkpIHsKICAgICAgICAgLy8gQSBzeW5jaHJvbm91cyBHQyB3YXMgYWxy
ZWFkeSByZXF1ZXN0ZWQgcmVjZW50bHkgc28gd2UgbWVyZWx5IGFjY2VsZXJhdGUgbmV4dCBjb2xs
ZWN0aW9uLgogICAgICAgICByZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9mdWxsQWN0aXZpdHlDYWxsYmFjay0+c2V0RGlkU3luY0dD
UmVjZW50bHkoKTsKLSAgICBjb2xsZWN0QWxsR2FyYmFnZSgpOworICAgIG1fZnVsbEFjdGl2aXR5
Q2FsbGJhY2stPnNldERpZEdDUmVjZW50bHkoKTsKKyAgICBjb2xsZWN0Tm93KHN5bmNocm9ub3Vz
bmVzcywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKIH0KIAotYm9vbCBIZWFwOjpzaG91bGREb0Z1
bGxDb2xsZWN0aW9uKHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBzY29wZSkgY29uc3QK
K2Jvb2wgSGVhcDo6c2hvdWxkRG9GdWxsQ29sbGVjdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKCFP
cHRpb25zOjp1c2VHZW5lcmF0aW9uYWxHQygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGlmICghc2NvcGUpCisgICAgaWYgKCFtX2N1cnJlbnRSZXF1ZXN0LnNjb3BlKQogICAgICAgICBy
ZXR1cm4gbV9zaG91bGREb0Z1bGxDb2xsZWN0aW9uIHx8IHdlYkFzc2VtYmx5RmFzdE1lbW9yaWVz
VGhpc0N5Y2xlQXRUaHJlc2hvbGQoKTsKLSAgICByZXR1cm4gKnNjb3BlID09IENvbGxlY3Rpb25T
Y29wZTo6RnVsbDsKKyAgICByZXR1cm4gKm1fY3VycmVudFJlcXVlc3Quc2NvcGUgPT0gQ29sbGVj
dGlvblNjb3BlOjpGdWxsOwogfQogCiB2b2lkIEhlYXA6OmFkZExvZ2ljYWxseUVtcHR5V2Vha0Js
b2NrKFdlYWtCbG9jayogYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShy
ZXZpc2lvbiAyMTU4NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJEZWxldGVBbGxDb2RlRWZm
b3J0LmgiCiAjaW5jbHVkZSAiR0NDb25kdWN0b3IuaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVm
Q291bnRlZFNldC5oIgorI2luY2x1ZGUgIkdDUmVxdWVzdC5oIgogI2luY2x1ZGUgIkhhbmRsZVNl
dC5oIgogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCiAjaW5jbHVkZSAiSGVhcE9ic2VydmVyLmgi
CkBAIC0zOCw2ICszOSw3IEBACiAjaW5jbHVkZSAiTXV0YXRvclN0YXRlLmgiCiAjaW5jbHVkZSAi
T3B0aW9ucy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKKyNpbmNsdWRlICJTeW5j
aHJvbm91c25lc3MuaCIKICNpbmNsdWRlICJUaW55Qmxvb21GaWx0ZXIuaCIKICNpbmNsdWRlICJV
bmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCkBAIC0x
NDYsNyArMTQ4LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlD
YWxsYmFjayogZWRlbkFjdGl2aXR5Q2FsbGJhY2soKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHNldEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFibGVkKGJvb2wpOwogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSW5jcmVtZW50YWxTd2VlcGVyKiBzd2VlcGVyKCk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgSW5jcmVtZW50YWxTd2VlcGVyJiBzd2VlcGVyKCk7CiAKICAgICB2b2lkIGFkZE9i
c2VydmVyKEhlYXBPYnNlcnZlciogb2JzZXJ2ZXIpIHsgbV9vYnNlcnZlcnMuYXBwZW5kKG9ic2Vy
dmVyKTsgfQogICAgIHZvaWQgcmVtb3ZlT2JzZXJ2ZXIoSGVhcE9ic2VydmVyKiBvYnNlcnZlcikg
eyBtX29ic2VydmVycy5yZW1vdmVGaXJzdChvYnNlcnZlcik7IH0KQEAgLTE2OSw4ICsxNzEsNiBA
QCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzSGVhcFNuYXBzaG90dGlu
ZygpIGNvbnN0OwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb2xsZWN0QWxsR2FyYmFn
ZUlmTm90RG9uZVJlY2VudGx5KCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb2xsZWN0
QWxsR2FyYmFnZSgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3dlZXBTeW5jaHJvbm91
c2x5KCk7CiAKICAgICBib29sIHNob3VsZENvbGxlY3RIZXVyaXN0aWMoKTsKQEAgLTE4MCwxNCAr
MTgwLDIyIEBAIHB1YmxpYzoKICAgICAvLyBhbmQgc3RkOjpudWxsb3B0IGNvbGxlY3Rpb25zIGFy
ZSBzdHJvbmdlciB0aGFuIEVkZW4gY29sbGVjdGlvbnMuIHN0ZDo6bnVsbG9wdCBtZWFucyB0aGF0
IHRoZSBHQyBjYW4KICAgICAvLyBjaG9vc2UgRWRlbiBvciBGdWxsLiBUaGlzIGltcGxpZXMgdGhh
dCBpZiB5b3UgcmVxdWVzdCBhIEdDIHdoaWxlIHRoYXQgR0MgaXMgb25nb2luZywgbm90aGluZwog
ICAgIC8vIHdpbGwgaGFwcGVuLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVjdEFz
eW5jKHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb2xsZWN0QXN5bmMoR0NSZXF1ZXN0ID0gR0NSZXF1ZXN0
KCkpOwogICAgIAogICAgIC8vIFF1ZXVlIHVwIGEgY29sbGVjdGlvbiBhbmQgd2FpdCBmb3IgaXQg
dG8gY29tcGxldGUuIFRoaXMgd29uJ3QgcmV0dXJuIHVudGlsIHlvdSBnZXQgeW91ciBvd24KICAg
ICAvLyBjb21wbGV0ZSBjb2xsZWN0aW9uLiBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgd2FzIGFuIG9u
Z29pbmcgYXN5bmNocm9ub3VzIGNvbGxlY3Rpb24gYXQgdGhlIHRpbWUKICAgICAvLyB5b3UgY2Fs
bGVkIHRoaXMsIHRoZW4gdGhpcyB3b3VsZCB3YWl0IGZvciB0aGF0IG9uZSB0byBjb21wbGV0ZSBh
bmQgdGhlbiB0cmlnZ2VyIHlvdXIKICAgICAvLyBjb2xsZWN0aW9uIGFuZCB0aGVuIHJldHVybi4g
SW4gd2VpcmQgY2FzZXMsIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIEdDIHJlcXVlc3RzIGluIHRo
ZSBiYWNrbG9nCiAgICAgLy8gYW5kIHRoaXMgd2lsbCB3YWl0IGZvciB0aGF0IGJhY2tsb2cgYmVm
b3JlIHJ1bm5pbmcgaXRzIEdDIGFuZCByZXR1cm5pbmcuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBjb2xsZWN0U3luYyhzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gPSBzdGQ6Om51
bGxvcHQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVjdFN5bmMoR0NSZXF1ZXN0
ID0gR0NSZXF1ZXN0KCkpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVj
dChTeW5jaHJvbm91c25lc3MsIEdDUmVxdWVzdCA9IEdDUmVxdWVzdCgpKTsKKyAgICAKKyAgICAv
LyBMaWtlIGNvbGxlY3QoKSwgYnV0IGluIHRoZSBjYXNlIG9mIEFzeW5jIHRoaXMgd2lsbCBzdG9w
SWZOZWNlc3NhcnkoKSBhbmQgaW4gdGhlIGNhc2Ugb2YKKyAgICAvLyBTeW5jIHRoaXMgd2lsbCBz
d2VlcCBzeW5jaHJvbm91c2x5LgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVjdE5v
dyhTeW5jaHJvbm91c25lc3MsIEdDUmVxdWVzdCA9IEdDUmVxdWVzdCgpKTsKKyAgICAKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbGxlY3ROb3dGdWxsSWZOb3REb25lUmVjZW50bHkoU3lu
Y2hyb25vdXNuZXNzKTsKICAgICAKICAgICB2b2lkIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIo
R0NEZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7CiAKQEAgLTQzOCw3ICs0NDYsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgc3RvcFRoZU11dGF0b3IoKTsKICAgICB2b2lkIHJlc3VtZVRoZU11dGF0
b3IoKTsKICAgICAKLSAgICB2b2lkIHN0b3BJZk5lY2Vzc2FyeVNsb3coKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHN0b3BJZk5lY2Vzc2FyeVNsb3coKTsKICAgICBib29sIHN0b3BJZk5l
Y2Vzc2FyeVNsb3codW5zaWduZWQgZXh0cmFTdGF0ZUJpdHMpOwogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CkBAIC00NjUsMTEgKzQ3MywxMSBAQCBwcml2YXRlOgogICAgIHZvaWQg
bm90aWZ5VGhyZWFkU3RvcHBpbmcoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKICAgICAKICAgICB0
eXBlZGVmIHVpbnQ2NF90IFRpY2tldDsKLSAgICBUaWNrZXQgcmVxdWVzdENvbGxlY3Rpb24oc3Rk
OjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+KTsKKyAgICBUaWNrZXQgcmVxdWVzdENvbGxlY3Rp
b24oR0NSZXF1ZXN0KTsKICAgICB2b2lkIHdhaXRGb3JDb2xsZWN0aW9uKFRpY2tldCk7CiAgICAg
CiAgICAgdm9pZCBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7Ci0gICAgdm9pZCB3aWxsU3RhcnRD
b2xsZWN0aW9uKHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPik7CisgICAgdm9pZCB3aWxs
U3RhcnRDb2xsZWN0aW9uKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yTWFya2luZygpOwogICAgIAog
ICAgIHZvaWQgZ2F0aGVyU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwpAQCAtNTAzLDcg
KzUxMSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzd2VlcEFsbExvZ2ljYWxseUVtcHR5V2Vha0Js
b2NrcygpOwogICAgIGJvb2wgc3dlZXBOZXh0TG9naWNhbGx5RW1wdHlXZWFrQmxvY2soKTsKIAot
ICAgIGJvb2wgc2hvdWxkRG9GdWxsQ29sbGVjdGlvbihzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25T
Y29wZT4gcmVxdWVzdGVkQ29sbGVjdGlvblNjb3BlKSBjb25zdDsKKyAgICBib29sIHNob3VsZERv
RnVsbENvbGxlY3Rpb24oKSBjb25zdDsKIAogICAgIHZvaWQgaW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpOwogICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwpAQCAtNjY0LDcgKzY3Miw4
IEBAIHByaXZhdGU6CiAgICAgTW9ub3RvbmljVGltZSBtX2FmdGVyR0M7CiAgICAgTW9ub3Rvbmlj
VGltZSBtX3N0b3BUaW1lOwogICAgIAotICAgIERlcXVlPHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlv
blNjb3BlPj4gbV9yZXF1ZXN0czsKKyAgICBEZXF1ZTxHQ1JlcXVlc3Q+IG1fcmVxdWVzdHM7Cisg
ICAgR0NSZXF1ZXN0IG1fY3VycmVudFJlcXVlc3Q7CiAgICAgVGlja2V0IG1fbGFzdFNlcnZlZFRp
Y2tldCB7IDAgfTsKICAgICBUaWNrZXQgbV9sYXN0R3JhbnRlZFRpY2tldCB7IDAgfTsKICAgICBD
b2xsZWN0b3JQaGFzZSBtX2N1cnJlbnRQaGFzZSB7IENvbGxlY3RvclBoYXNlOjpOb3RSdW5uaW5n
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNo
b3RCdWlsZGVyLmNwcAkocmV2aXNpb24gMjE1ODY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4
LDcgQEAgdm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjpidWlsZFNuYXBzaG90KAogICAgIG1fc25h
cHNob3QgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBTbmFwc2hvdD4obV9wcm9maWxlci5tb3N0UmVj
ZW50U25hcHNob3QoKSk7CiAgICAgewogICAgICAgICBtX3Byb2ZpbGVyLnNldEFjdGl2ZVNuYXBz
aG90QnVpbGRlcih0aGlzKTsKLSAgICAgICAgbV9wcm9maWxlci52bSgpLmhlYXAuY29sbGVjdEFs
bEdhcmJhZ2UoKTsKKyAgICAgICAgbV9wcm9maWxlci52bSgpLmhlYXAuY29sbGVjdE5vdyhTeW5j
LCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwogICAgICAgICBtX3Byb2ZpbGVyLnNldEFjdGl2ZVNu
YXBzaG90QnVpbGRlcihudWxscHRyKTsKICAgICB9CiAgICAgbV9zbmFwc2hvdC0+ZmluYWxpemUo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxT
d2VlcGVyLmNwcAkocmV2aXNpb24gMjE1ODY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTAg
QEAgdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OmRvU3dlZXAoTW9ub3RvbgogICAgICAgICByZXR1
cm47CiAgICAgfQogCisgICAgaWYgKG1fc2hvdWxkRnJlZUZhc3RNYWxsb2NNZW1vcnlBZnRlclN3
ZWVwaW5nKSB7CisgICAgICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5KCk7Cisg
ICAgICAgIG1fc2hvdWxkRnJlZUZhc3RNYWxsb2NNZW1vcnlBZnRlclN3ZWVwaW5nID0gZmFsc2U7
CisgICAgfQogICAgIGNhbmNlbFRpbWVyKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCShyZXZpc2lvbiAyMTU4NjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zOSw2ICszOSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBleHBsaWNpdCBJbmNyZW1lbnRhbFN3ZWVwZXIoSGVhcCopOwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBzdGFydFN3ZWVwaW5nKCk7CisgICAgdm9pZCBmcmVlRmFzdE1hbGxvY01lbW9y
eUFmdGVyU3dlZXBpbmcoKSB7IG1fc2hvdWxkRnJlZUZhc3RNYWxsb2NNZW1vcnlBZnRlclN3ZWVw
aW5nID0gdHJ1ZTsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkb1dvcmsoKSBvdmVy
cmlkZTsKICAgICBib29sIHN3ZWVwTmV4dEJsb2NrKCk7CkBAIC00OSw2ICs1MCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzY2hlZHVsZVRpbWVyKCk7CiAgICAgCiAgICAgTWFya2VkQWxsb2NhdG9y
KiBtX2N1cnJlbnRBbGxvY2F0b3I7CisgICAgYm9vbCBtX3Nob3VsZEZyZWVGYXN0TWFsbG9jTWVt
b3J5QWZ0ZXJTd2VlcGluZyB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAko
cmV2aXNpb24gMjE1ODY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDcgKzE4Miw3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGUKICAgICAgICAgICAgIGlmIChkZWZlcnJhbENv
bnRleHQpCiAgICAgICAgICAgICAgICAgZGVmZXJyYWxDb250ZXh0LT5tX3Nob3VsZEdDID0gdHJ1
ZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2hlYXAtPmNvbGxlY3RBbGxH
YXJiYWdlKCk7CisgICAgICAgICAgICAgICAgbV9oZWFwLT5jb2xsZWN0Tm93KFN5bmMsIENvbGxl
Y3Rpb25TY29wZTo6RnVsbCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCsrYWxsb2NhdGlv
bkNvdW50ID49IE9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjE1ODY3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBNYXJrZWRTcGFjZTo6bGFzdENoYW5jZVRv
RmluYWxpemUoKQogCiB2b2lkIE1hcmtlZFNwYWNlOjpzd2VlcCgpCiB7Ci0gICAgbV9oZWFwLT5z
d2VlcGVyKCktPnN0b3BTd2VlcGluZygpOworICAgIG1faGVhcC0+c3dlZXBlcigpLnN0b3BTd2Vl
cGluZygpOwogICAgIGZvckVhY2hBbGxvY2F0b3IoCiAgICAgICAgIFsmXSAoTWFya2VkQWxsb2Nh
dG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAgICAgICAgICAgICBhbGxvY2F0
b3Iuc3dlZXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNocm9ub3Vz
bmVzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hy
b25vdXNuZXNzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TeW5jaHJvbm91c25lc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3luY2hyb25vdXNuZXNz
LmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBTeW5jaHJvbm91c25lc3Mgc3luY2hyb25vdXNuZXNzKQoreworICAgIHN3aXRjaCAoc3lu
Y2hyb25vdXNuZXNzKSB7CisgICAgY2FzZSBBc3luYzoKKyAgICAgICAgb3V0LnByaW50KCJBc3lu
YyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTeW5jOgorICAgICAgICBvdXQucHJpbnQo
IlN5bmMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNuZXNzLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNuZXNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ug
SlNDIHsKKworZW51bSBTeW5jaHJvbm91c25lc3MgeworICAgIEFzeW5jLAorICAgIFN5bmMKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRT
dHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OlN5bmNo
cm9ub3VzbmVzcyk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvckhl
YXBBZ2VudC5jcHAJKHJldmlzaW9uIDIxNTg2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkxLDcgKzkxLDcgQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdjKEVycm9yU3RyaW5nJgog
ICAgIFZNJiB2bSA9IG1fZW52aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CiAgICAgc2FuaXRpemVTdGFja0ZvclZNKCZ2bSk7Ci0gICAgdm0uaGVhcC5jb2xsZWN0QWxs
R2FyYmFnZSgpOworICAgIHZtLmhlYXAuY29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6
OkZ1bGwpOwogfQogCiB2b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6c25hcHNob3QoRXJyb3JTdHJp
bmcmLCBkb3VibGUqIHRpbWVzdGFtcCwgU3RyaW5nKiBzbmFwc2hvdERhdGEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAyMTU4NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lk
IEpTRG9sbGFyVk1Qcm90b3R5cGU6OmdjKEV4ZWNTdGF0ZSogCiB7CiAgICAgaWYgKCFlbnN1cmVD
dXJyZW50VGhyZWFkT3duc0pTTG9jayhleGVjKSkKICAgICAgICAgcmV0dXJuOwotICAgIGV4ZWMt
PmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICBleGVjLT5oZWFwKCktPmNvbGxlY3RO
b3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKIH0KICAgICAKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKiBleGVjKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAJKHJldmlzaW9uIDIxNTg2
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTEsOSArMTUxLDkgQEAgdm9pZCogdHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0p
CiAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAidHJ5R2V0RmFzdE1lbW9yeSByZS11
c2luZyAiLCBSYXdQb2ludGVyKG1lbW9yeSkpOwogICAgICAgICBlbHNlIGlmIChjdXJyZW50bHlB
bGxvY2F0ZWRGYXN0TWVtb3JpZXMubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSA+PSAx
KSB7CiAgICAgICAgICAgICAvLyBObyBtZW1vcnkgd2FzIGF2YWlsYWJsZSBpbiB0aGUgY2FjaGUs
IGJ1dCB3ZSBrbm93IHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGN1cnJlbnRseSBsaXZlLiBNYXliZSBH
QyB3aWxsIGZpbmQgYSBmcmVlIG9uZS4KLSAgICAgICAgICAgIC8vIEZJWE1FIGNvbGxlY3RTeW5j
KEZ1bGwpIGFuZCBjdXN0b20gZWFnZXIgZGVzdHJ1Y3Rpb24gb2Ygd2FzbSBtZW1vcmllcyBjb3Vs
ZCBiZSBiZXR0ZXIuIEZvciBub3cgdXNlIGNvbGxlY3RBbGxHYXJiYWdlLiBBbHNvLCBub3RoaW5n
IHRlbGxzIHVzIHRoZSBjdXJyZW50IFZNIGlzIGhvbGRpbmcgb250byBmYXN0IG1lbW9yaWVzLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzQ4CisgICAgICAgICAg
ICAvLyBGSVhNRSBjb2xsZWN0U3luYyhGdWxsKSBhbmQgY3VzdG9tIGVhZ2VyIGRlc3RydWN0aW9u
IG9mIHdhc20gbWVtb3JpZXMgY291bGQgYmUgYmV0dGVyLiBGb3Igbm93IHVzZSBjb2xsZWN0Tm93
LiBBbHNvLCBub3RoaW5nIHRlbGxzIHVzIHRoZSBjdXJyZW50IFZNIGlzIGhvbGRpbmcgb250byBm
YXN0IG1lbW9yaWVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcw
NzQ4CiAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAidHJ5R2V0RmFzdE1lbW9yeSB3
YWl0aW5nIG9uIEdDIGFuZCByZXRyeWluZyIpOwotICAgICAgICAgICAgdm0uaGVhcC5jb2xsZWN0
QWxsR2FyYmFnZSgpOworICAgICAgICAgICAgdm0uaGVhcC5jb2xsZWN0Tm93KFN5bmMsIENvbGxl
Y3Rpb25TY29wZTo6RnVsbCk7CiAgICAgICAgICAgICBtZW1vcnkgPSB0cnlHZXRDYWNoZWRGYXN0
TWVtb3J5KCk7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAidHJ5R2V0RmFzdE1l
bW9yeSB3YWl0ZWQgb24gR0MgYW5kIHJldHJpZWQgIiwgbWVtb3J5PyAic3VjY2Vzc2Z1bGx5IiA6
ICJ1bnNlY2Nlc3NmdWxseSIpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MTU4NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOSBAQAorMjAxNy0wNS0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEpTQzo6SGVhcCBzaG91bGQgZXhwb3NlIGEgcmljaGVyIEFQSSBmb3IgcmVxdWVz
dGluZyBHQ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MTY5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoaXMgaXMganVzdCBhIHJlZmFjdG9yaW5nLgorICAgICAg
ICAKKyAgICAgICAgQ2hhbmdlIHNvbWUgZnVuY3Rpb24gY2FsbHMgbm93IHRoYXQgc29tZSBKU0M6
OkhlYXAgQVBJcyBnb3QgcmVuYW1lZC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0ND
b250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vd0lmTm90RG9uZVJlY2VudGx5KToKKwogMjAxNy0w
NC0yNyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFRleHQgZ2V0
cyBjdXQgb2ZmIHdoZW4gYmFpbGluZyBvdXQgb2Ygc2ltcGxlIGxpbmUgbGF5b3V0IHdpdGggd2lk
b3dzLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiAyMTU4NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHN0YXRpYyB2b2lkIGNvbGxlY3Qodm9pZCopCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soY29tbW9uVk0oKSk7Ci0gICAgY29tbW9uVk0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7
CisgICAgY29tbW9uVk0oKS5oZWFwLmNvbGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpG
dWxsKTsKIH0KIAogR0NDb250cm9sbGVyJiBHQ0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpCkBAIC04
Myw3ICs4Myw3IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vdygpCiB7CiAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgaWYgKCFjb21tb25WTSgpLmhl
YXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpKSB7Ci0gICAgICAgIGNvbW1vblZNKCkuaGVhcC5jb2xs
ZWN0QWxsR2FyYmFnZSgpOworICAgICAgICBjb21tb25WTSgpLmhlYXAuY29sbGVjdE5vdyhTeW5j
LCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwogICAgICAgICBXVEY6OnJlbGVhc2VGYXN0TWFsbG9j
RnJlZU1lbW9yeSgpOwogICAgIH0KIH0KQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBHQ0NvbnRyb2xs
ZXI6OmdhcmJhZ2VDb2xsZWN0Tm93SWZObwogI2lmIFVTRShDRikgfHwgVVNFKEdMSUIpCiAgICAg
SlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgaWYgKCFjb21tb25WTSgpLmhlYXAu
aXNDdXJyZW50VGhyZWFkQnVzeSgpKQotICAgICAgICBjb21tb25WTSgpLmhlYXAuY29sbGVjdEFs
bEdhcmJhZ2VJZk5vdERvbmVSZWNlbnRseSgpOworICAgICAgICBjb21tb25WTSgpLmhlYXAuY29s
bGVjdE5vd0Z1bGxJZk5vdERvbmVSZWNlbnRseShTeW5jKTsKICNlbHNlCiAgICAgZ2FyYmFnZUNv
bGxlY3RTb29uKCk7CiAjZW5kaWYK
</data>
<flag name="review"
          id="330263"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>