<?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>237871</bug_id>
          
          <creation_ts>2022-03-14 20:39:21 -0700</creation_ts>
          <short_desc>[WebGPU] Implement first draft of buffer copying according to the spec</short_desc>
          <delta_ts>2022-03-16 15:14:16 -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>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</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>
          <dependson>237870</dependson>
          <blocked>237583</blocked>
    
    <blocked>237875</blocked>
    
    <blocked>237877</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>djg</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1851133</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 20:39:21 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851135</commentid>
    <comment_count>1</comment_count>
      <attachid>454658</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 20:44:09 -0700</bug_when>
    <thetext>Created attachment 454658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851144</commentid>
    <comment_count>2</comment_count>
      <attachid>454658</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 21:39:06 -0700</bug_when>
    <thetext>Comment on attachment 454658
Patch

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

&gt; Source/WebGPU/WebGPU/CommandEncoder.mm:144
&gt; +    if (validateCopyBufferToBuffer(source, sourceOffset, destination, destinationOffset, size)) {

if (!validateCopyBufferToBuffer(source, sourceOffset, destination, destinationOffset, size))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851152</commentid>
    <comment_count>3</comment_count>
      <attachid>454664</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 22:05:22 -0700</bug_when>
    <thetext>Created attachment 454664
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851772</commentid>
    <comment_count>4</comment_count>
      <attachid>454664</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-16 06:59:15 -0700</bug_when>
    <thetext>Comment on attachment 454664
Patch

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

&gt; Source/WebGPU/WebGPU/CommandEncoder.mm:52
&gt; +    commandBuffer.label = [NSString stringWithCString:descriptor.label encoding:NSUTF8StringEncoding];

nullptr label remark (in case it&apos;s not handled in the fromAPI patch)

&gt; Source/WebGPU/WebGPU/CommandsMixin.h:32
&gt; +class CommandsMixin : public RefCounted&lt;CommandsMixin&gt; {

Based on this commit alone, it&apos;s not clear why would the refcounted be in the mixin. it would indicate objects hold references to the mixin, which is counter (my) expectation of mixins being just &quot;way to import a bag of common functionality&quot;

Also having the WTF_MAKE_FAST_ALLOCATED here would imply you allocate the mixins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851774</commentid>
    <comment_count>5</comment_count>
      <attachid>454664</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-16 07:08:01 -0700</bug_when>
    <thetext>Comment on attachment 454664
Patch

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

&gt;&gt; Source/WebGPU/WebGPU/CommandEncoder.mm:52
&gt;&gt; +    commandBuffer.label = [NSString stringWithCString:descriptor.label encoding:NSUTF8StringEncoding];
&gt; 
&gt; nullptr label remark (in case it&apos;s not handled in the fromAPI patch)

Checked, I think the fromAPI patch was not written with this patch in, so there&apos;s that.
so probably you could have some sort of fromAPI&lt;NSString*&gt;(descriptor.label) for these cases (or something else you come up with)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852014</commentid>
    <comment_count>6</comment_count>
      <attachid>454664</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-16 15:08:32 -0700</bug_when>
    <thetext>Comment on attachment 454664
Patch

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

&gt;&gt;&gt; Source/WebGPU/WebGPU/CommandEncoder.mm:52
&gt;&gt;&gt; +    commandBuffer.label = [NSString stringWithCString:descriptor.label encoding:NSUTF8StringEncoding];
&gt;&gt; 
&gt;&gt; nullptr label remark (in case it&apos;s not handled in the fromAPI patch)
&gt; 
&gt; Checked, I think the fromAPI patch was not written with this patch in, so there&apos;s that.
&gt; so probably you could have some sort of fromAPI&lt;NSString*&gt;(descriptor.label) for these cases (or something else you come up with)

Right. I&apos;ll have to update the fromAPI patch after this lands.

&gt;&gt; Source/WebGPU/WebGPU/CommandsMixin.h:32
&gt;&gt; +class CommandsMixin : public RefCounted&lt;CommandsMixin&gt; {
&gt; 
&gt; Based on this commit alone, it&apos;s not clear why would the refcounted be in the mixin. it would indicate objects hold references to the mixin, which is counter (my) expectation of mixins being just &quot;way to import a bag of common functionality&quot;
&gt; 
&gt; Also having the WTF_MAKE_FAST_ALLOCATED here would imply you allocate the mixins

Ah, I see what you&apos;re saying. Yeah, I guess multiple inheritance is better than making a mixin class that appears to be refcounted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852015</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-16 15:13:51 -0700</bug_when>
    <thetext>Committed r291372 (248504@trunk): &lt;https://commits.webkit.org/248504@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852016</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-16 15:14:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/90394764&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454658</attachid>
            <date>2022-03-14 20:44:09 -0700</date>
            <delta_ts>2022-03-14 22:05:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>17299</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IGEyYzQyM2Q5Y2M3NWMzMDgwZDA2NjdiMzJmYjA4OTRiNTMxNWY1OWYKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBNb24gTWFyIDE0
IDIwOjQyOjUxIDIwMjIgLTA3MDAKCiAgICBQYXJ0IDcKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IGUxOTM1M2ViMTYw
OC4uYjg3NWQ5MWQ3YzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIyLTAzLTE0ICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQ
VV0gSW1wbGVtZW50IGZpcnN0IGRyYWZ0IG9mIGJ1ZmZlciBjb3B5aW5nIGFjY29yZGluZyB0byB0
aGUgc3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjM3ODcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9CdWZmZXIoKSBhbmQgQ29tbWFu
ZEVuY29kZXI6OmZpbmlzaCgpLAorICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGFsZ29yaXRobXMg
aW4gdGhlIHNwZWMuIFRoZXJlIGFyZSBhIGZldyB0aGluZ3Mgd2hpY2ggdGhlIHNwZWMKKyAgICAg
ICAgbGlzdHMgd2hpY2ggd2UgY2FuJ3QgZG8geWV0IChsaWtlIHJlcG9ydGluZyB2YWxpZGF0aW9u
IGVycm9ycyksIHNvIHRob3NlIHRoaW5ncworICAgICAgICBhcmUgbGVmdCB3aXRoIEZJWE1Fcy4g
RXZlcnkgc3RlcCBpcyBsaXN0ZWQgd2l0aCBsaW5rcyB0byB0aGUgc3BlYyB3aGVyZQorICAgICAg
ICBhcHByb3ByaWF0ZSwgYW5kIHdpdGggcXVvdGVzIHRvIHRoZSBzcGVjIGRlc2NyaWJpbmcgd2hh
dCBpcyBiZWluZyBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIFdlYkdQVS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkdQVS9Db21tYW5kRW5jb2Rlci5oOgorICAgICAg
ICAqIFdlYkdQVS9Db21tYW5kRW5jb2Rlci5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpj
cmVhdGVDb21tYW5kRW5jb2Rlcik6CisgICAgICAgIChXZWJHUFU6OkNvbW1hbmRFbmNvZGVyOjpl
bnN1cmVCbGl0Q29tbWFuZEVuY29kZXIpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rl
cjo6ZmluYWxpemVCbGl0Q29tbWFuZEVuY29kZXIpOgorICAgICAgICAoV2ViR1BVOjp2YWxpZGF0
ZUNvcHlCdWZmZXJUb0J1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OkNvbW1hbmRFbmNvZGVyOjpj
b3B5QnVmZmVyVG9CdWZmZXIpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rlcjo6dmFs
aWRhdGVGaW5pc2ggY29uc3QpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rlcjo6Zmlu
aXNoKToKKyAgICAgICAgKiBXZWJHUFUvQ29tbWFuZHNNaXhpbi5oOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJHUFUvQ29tbWFuZHNNaXhpbi5tbTogQWRkZWQuCisgICAgICAgIChXZWJHUFU6OkNvbW1h
bmRzTWl4aW46OnByZXBhcmVUaGVFbmNvZGVyU3RhdGUgY29uc3QpOgorCiAyMDIyLTAzLTE0ICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdQ
VV0gSW1wbGVtZW50IGZpcnN0IGRyYWZ0IG9mIGJ1ZmZlciBtYXBwaW5nIGFjY29yZGluZyB0byB0
aGUgc3BlYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggMmI3OTVkOWFlOGQxLi5kN2U3MGE4ZWVkOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMsNiArMTMsOCBAQAogCQkx
QzJDRURFRTI3MUU4QTczMDBFREMxNkYgLyogTWV0YWwuZnJhbWV3b3JrIGluIEZyYW1ld29ya3Mg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyQ0VERUQyNzFFOEE3MzAwRURD
MTZGIC8qIE1ldGFsLmZyYW1ld29yayAqLzsgfTsKIAkJMUM1MzE5QzAyN0JEQzZDQzAwQ0QxMjdF
IC8qIG1haW4uc3dpZnQgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQzUzMTlCRjI3QkRDNkNDMDBDRDEyN0UgLyogbWFpbi5zd2lmdCAqLzsgfTsKIAkJMUM1
MzE5QzUyN0JEQzcyNzAwQ0QxMjdFIC8qIFdlYkdQVS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0VCRDdFMzI3MTZBRkJBMDBBNTI1
NEQgLyogV2ViR1BVLmZyYW1ld29yayAqLzsgfTsKKwkJMUM1ODJGRjkyN0UwNDEzMTAwOUI0MEYw
IC8qIENvbW1hbmRzTWl4aW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzU4MkZGNzI3RTA0MTMxMDA5QjQwRjAgLyogQ29tbWFuZHNNaXhpbi5tbSAq
LzsgfTsKKwkJMUM1ODJGRkEyN0UwNDEzMTAwOUI0MEYwIC8qIENvbW1hbmRzTWl4aW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNTgyRkY4MjdFMDQx
MzEwMDlCNDBGMCAvKiBDb21tYW5kc01peGluLmggKi87IH07CiAJCTFDNUFDQTk0MjczQTQxQzIw
MDk1RjhENSAvKiBJbnN0YW5jZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDNUFDQTkyMjczQTQxQzIwMDk1RjhENSAvKiBJbnN0YW5jZS5tbSAqLzsg
fTsKIAkJMUM1QUNBQjYyNzNBNDI2RDAwOTVGOEQ1IC8qIFJlbmRlclBpcGVsaW5lLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM1QUNBOTgyNzNBNDI2
RDAwOTVGOEQ1IC8qIFJlbmRlclBpcGVsaW5lLm1tICovOyB9OwogCQkxQzVBQ0FCQjI3M0E0MjZE
MDA5NUY4RDUgLyogQnVmZmVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUM1QUNBOUQyNzNBNDI2RDAwOTVGOEQ1IC8qIEJ1ZmZlci5tbSAqLzsgfTsK
QEAgLTEzNCw2ICsxMzYsOCBAQAogCQkxQzUzMTlCRjI3QkRDNkNDMDBDRDEyN0UgLyogbWFpbi5z
d2lmdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuc3dpZnQ7IHBhdGggPSBtYWluLnN3aWZ0OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQzUzMTlDQTI3QkRENzAwMDBDRDEyN0UgLyogQ29tbWFuZExpbmVQbGF5Z3JvdW5k
LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IENvbW1hbmRMaW5lUGxheWdyb3VuZC54Y2NvbmZpZzsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM1ODJGRjYyN0UwM0U1NjAwOUI0MEYwIC8q
IFV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUM1ODJGRjcyN0UwNDEzMTAwOUI0MEYwIC8qIENvbW1hbmRzTWl4aW4u
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb21tYW5kc01peGluLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQzU4MkZGODI3RTA0MTMxMDA5QjQwRjAgLyogQ29tbWFuZHNNaXhp
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb21tYW5kc01peGluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFDNUFDQTkyMjczQTQxQzIwMDk1RjhENSAvKiBJbnN0YW5jZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEluc3RhbmNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQzVBQ0E5NjI3M0E0MjZEMDA5NUY4RDUgLyogU3VyZmFjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDNUFDQTk3MjczQTQyNkQwMDk1RjhENSAvKiBTd2FwQ2hhaW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3dhcENoYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0zNzUsNiArMzc5LDggQEAKIAkJCQkxQ0MwQzhDOTI3M0E3RDg5MDBEMEI0ODEgLyogV2Vi
R1BVLm1vZHVsZW1hcCAqLywKIAkJCQkxQzVBQ0FEMjI3M0E0Qzg2MDA5NUY4RDUgLyogV2ViR1BV
RXh0LmggKi8sCiAJCQkJMUM1ODJGRjYyN0UwM0U1NjAwOUI0MEYwIC8qIFV0aWxpdGllcy5oICov
LAorCQkJCTFDNTgyRkY3MjdFMDQxMzEwMDlCNDBGMCAvKiBDb21tYW5kc01peGluLm1tICovLAor
CQkJCTFDNTgyRkY4MjdFMDQxMzEwMDlCNDBGMCAvKiBDb21tYW5kc01peGluLmggKi8sCiAJCQkp
OwogCQkJcGF0aCA9IFdlYkdQVTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00Nzks
NiArNDg1LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTFDNUFDQUQ3MjczQTRENzAwMDk1RjhENSAv
KiBCaW5kR3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDRUJEN0U3MjcxNkFGQkEwMEE1MjU0
RCAvKiBXZWJHUFUuaCBpbiBIZWFkZXJzICovLAorCQkJCTFDNTgyRkZBMjdFMDQxMzEwMDlCNDBG
MCAvKiBDb21tYW5kc01peGluLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzVBQ0FEMzI3M0E0Qzg2
MDA5NUY4RDUgLyogV2ViR1BVRXh0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTcyNyw2ICs3MzQsNyBAQAogCQkJ
CTFDNUFDQUM2MjczQTQyNkQwMDk1RjhENSAvKiBDb21wdXRlUGFzc0VuY29kZXIubW0gaW4gU291
cmNlcyAqLywKIAkJCQkxQzVBQ0FDMDI3M0E0MjZEMDA5NUY4RDUgLyogQ29tcHV0ZVBpcGVsaW5l
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBQzEyNzNBNDI2RDAwOTVGOEQ1IC8qIERldmlj
ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFDNTgyRkY5MjdFMDQxMzEwMDlCNDBGMCAvKiBDb21t
YW5kc01peGluLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBOTQyNzNBNDFDMjAwOTVGOEQ1
IC8qIEluc3RhbmNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBRTUyNzNBNTVERDAwOTVG
OEQ1IC8qIFBpcGVsaW5lTGF5b3V0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBQkQyNzNB
NDI2RDAwOTVGOEQ1IC8qIFF1ZXJ5U2V0Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rlci5oIGIvU291cmNlL1dlYkdQVS9XZWJH
UFUvQ29tbWFuZEVuY29kZXIuaAppbmRleCBkYzk3MDE1NjdjNmQuLjI0NTNlZGFiZmQzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rlci5oCkBAIC0yNSw5ICsyNSw5IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW1wb3J0ICJDb21tYW5kc01peGluLmgiCiAjaW1wb3J0IDx3dGYvRmFz
dE1hbGxvYy5oPgogI2ltcG9ydCA8d3RmL1JlZi5oPgotI2ltcG9ydCA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkdQVSB7CkBAIC0zOCw3
ICszOCw3IEBAIGNsYXNzIENvbXB1dGVQYXNzRW5jb2RlcjsKIGNsYXNzIFF1ZXJ5U2V0OwogY2xh
c3MgUmVuZGVyUGFzc0VuY29kZXI7CiAKLWNsYXNzIENvbW1hbmRFbmNvZGVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8Q29tbWFuZEVuY29kZXI+IHsKK2NsYXNzIENvbW1hbmRFbmNvZGVyIDogcHVibGlj
IENvbW1hbmRzTWl4aW4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8Q29tbWFuZEVuY29kZXI+IGNyZWF0ZShpZDxNVExDb21tYW5kQnVmZmVy
PiBjb21tYW5kQnVmZmVyKQpAQCAtNjYsNyArNjYsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBDb21tYW5kRW5jb2RlcihpZDxNVExDb21tYW5kQnVmZmVyPik7CiAKKyAgICBib29sIHZhbGlk
YXRlRmluaXNoKCkgY29uc3Q7CisKKyAgICB2b2lkIGVuc3VyZUJsaXRDb21tYW5kRW5jb2Rlcigp
OworICAgIHZvaWQgZmluYWxpemVCbGl0Q29tbWFuZEVuY29kZXIoKTsKKwogICAgIGlkPE1UTENv
bW1hbmRCdWZmZXI+IG1fY29tbWFuZEJ1ZmZlciB7IG5pbCB9OworICAgIGlkPE1UTEJsaXRDb21t
YW5kRW5jb2Rlcj4gbV9ibGl0Q29tbWFuZEVuY29kZXIgeyBuaWwgfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVu
Y29kZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rlci5tbQppbmRleCA2
NjQwODVjNTAxMmUuLjc0NGM0MWRkODU1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJH
UFUvQ29tbWFuZEVuY29kZXIubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVu
Y29kZXIubW0KQEAgLTMyLDEzICszMiwyNiBAQAogI2ltcG9ydCAiRGV2aWNlLmgiCiAjaW1wb3J0
ICJRdWVyeVNldC5oIgogI2ltcG9ydCAiUmVuZGVyUGFzc0VuY29kZXIuaCIKKyNpbXBvcnQgIlV0
aWxpdGllcy5oIgogCiBuYW1lc3BhY2UgV2ViR1BVIHsKIAogUmVmUHRyPENvbW1hbmRFbmNvZGVy
PiBEZXZpY2U6OmNyZWF0ZUNvbW1hbmRFbmNvZGVyKGNvbnN0IFdHUFVDb21tYW5kRW5jb2RlckRl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc2NyaXB0b3IpOwot
ICAgIHJldHVybiBDb21tYW5kRW5jb2Rlcjo6Y3JlYXRlKG5pbCk7CisgICAgaWYgKGRlc2NyaXB0
b3IubmV4dEluQ2hhaW4pCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gaHR0cHM6
Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jZG9tLWdwdWRldmljZS1jcmVhdGVjb21tYW5kZW5j
b2RlcgorCisgICAgYXV0byAqY29tbWFuZEJ1ZmZlckRlc2NyaXB0b3IgPSBbTVRMQ29tbWFuZEJ1
ZmZlckRlc2NyaXB0b3IgbmV3XTsKKyAgICBjb21tYW5kQnVmZmVyRGVzY3JpcHRvci5lcnJvck9w
dGlvbnMgPSBNVExDb21tYW5kQnVmZmVyRXJyb3JPcHRpb25FbmNvZGVyRXhlY3V0aW9uU3RhdHVz
OworICAgIGlkPE1UTENvbW1hbmRCdWZmZXI+IGNvbW1hbmRCdWZmZXIgPSBbZ2V0UXVldWUoKS5j
b21tYW5kUXVldWUoKSBjb21tYW5kQnVmZmVyV2l0aERlc2NyaXB0b3I6Y29tbWFuZEJ1ZmZlckRl
c2NyaXB0b3JdOworICAgIGlmICghY29tbWFuZEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBjb21tYW5kQnVmZmVyLmxhYmVsID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDU3Ry
aW5nOmRlc2NyaXB0b3IubGFiZWwgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworCisg
ICAgcmV0dXJuIENvbW1hbmRFbmNvZGVyOjpjcmVhdGUoY29tbWFuZEJ1ZmZlcik7CiB9CiAKIENv
bW1hbmRFbmNvZGVyOjpDb21tYW5kRW5jb2RlcihpZDxNVExDb21tYW5kQnVmZmVyPiBjb21tYW5k
QnVmZmVyKQpAQCAtNDgsNiArNjEsMTggQEAgQ29tbWFuZEVuY29kZXI6OkNvbW1hbmRFbmNvZGVy
KGlkPE1UTENvbW1hbmRCdWZmZXI+IGNvbW1hbmRCdWZmZXIpCiAKIENvbW1hbmRFbmNvZGVyOjp+
Q29tbWFuZEVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKK3ZvaWQgQ29tbWFuZEVuY29kZXI6OmVuc3Vy
ZUJsaXRDb21tYW5kRW5jb2RlcigpCit7CisgICAgaWYgKCFtX2JsaXRDb21tYW5kRW5jb2RlcikK
KyAgICAgICAgbV9ibGl0Q29tbWFuZEVuY29kZXIgPSBbbV9jb21tYW5kQnVmZmVyIGJsaXRDb21t
YW5kRW5jb2Rlcl07Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXI6OmZpbmFsaXplQmxpdENvbW1h
bmRFbmNvZGVyKCkKK3sKKyAgICBpZiAobV9ibGl0Q29tbWFuZEVuY29kZXIpCisgICAgICAgIFtt
X2JsaXRDb21tYW5kRW5jb2RlciBlbmRFbmNvZGluZ107Cit9CisKIFJlZlB0cjxDb21wdXRlUGFz
c0VuY29kZXI+IENvbW1hbmRFbmNvZGVyOjpiZWdpbkNvbXB1dGVQYXNzKGNvbnN0IFdHUFVDb21w
dXRlUGFzc0Rlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGRlc2Ny
aXB0b3IpOwpAQCAtNjAsMTMgKzg1LDcwIEBAIFJlZlB0cjxSZW5kZXJQYXNzRW5jb2Rlcj4gQ29t
bWFuZEVuY29kZXI6OmJlZ2luUmVuZGVyUGFzcyhjb25zdCBXR1BVUmVuZGVyUGFzc0RlCiAgICAg
cmV0dXJuIFJlbmRlclBhc3NFbmNvZGVyOjpjcmVhdGUobmlsKTsKIH0KIAorc3RhdGljIGJvb2wg
dmFsaWRhdGVDb3B5QnVmZmVyVG9CdWZmZXIoY29uc3QgQnVmZmVyJiBzb3VyY2UsIHVpbnQ2NF90
IHNvdXJjZU9mZnNldCwgY29uc3QgQnVmZmVyJiBkZXN0aW5hdGlvbiwgdWludDY0X3QgZGVzdGlu
YXRpb25PZmZzZXQsIHVpbnQ2NF90IHNpemUpCit7CisgICAgLy8gRklYTUU6ICJzb3VyY2UgaXMg
dmFsaWQgdG8gdXNlIHdpdGggdGhpcy4iCisKKyAgICAvLyBGSVhNRTogImRlc3RpbmF0aW9uIGlz
IHZhbGlkIHRvIHVzZSB3aXRoIHRoaXMuIgorCisgICAgLy8gInNvdXJjZS5bW3VzYWdlXV0gY29u
dGFpbnMgQ09QWV9TUkMuIgorICAgIGlmICghKHNvdXJjZS51c2FnZSgpICYgV0dQVUJ1ZmZlclVz
YWdlX0NvcHlTcmMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiZGVzdGluYXRp
b24uW1t1c2FnZV1dIGNvbnRhaW5zIENPUFlfRFNULiIKKyAgICBpZiAoIShkZXN0aW5hdGlvbi51
c2FnZSgpICYgV0dQVUJ1ZmZlclVzYWdlX0NvcHlEc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyAic2l6ZSBpcyBhIG11bHRpcGxlIG9mIDQuIgorICAgIGlmIChpc05vdE11bHRp
cGxlT2ZQb3dlck9mVHdvKHNpemUsIDQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyAic291cmNlT2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgNC4iCisgICAgaWYgKGlzTm90TXVsdGlw
bGVPZlBvd2VyT2ZUd28oc291cmNlT2Zmc2V0LCA0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gImRlc3RpbmF0aW9uT2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgNC4iCisgICAgaWYg
KGlzTm90TXVsdGlwbGVPZlBvd2VyT2ZUd28oZGVzdGluYXRpb25PZmZzZXQsIDQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogIihzb3VyY2VPZmZzZXQgKyBzaXplKSBk
b2VzIG5vdCBvdmVyZmxvdyBhIEdQVVNpemU2NC4iCisKKyAgICAvLyBGSVhNRTogIihkZXN0aW5h
dGlvbk9mZnNldCArIHNpemUpIGRvZXMgbm90IG92ZXJmbG93IGEgR1BVU2l6ZTY0LiIKKworICAg
IC8vIEZJWE1FOiAic291cmNlLltbc2l6ZV1dIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAo
c291cmNlT2Zmc2V0ICsgc2l6ZSkuIgorICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1l
dGljCisgICAgaWYgKHNvdXJjZS5zaXplKCkgPCBzb3VyY2VPZmZzZXQgKyBzaXplKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogImRlc3RpbmF0aW9uLltbc2l6ZV1dIGlz
IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAoZGVzdGluYXRpb25PZmZzZXQgKyBzaXplKS4iCisg
ICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBpZiAoZGVzdGluYXRpb24u
c2l6ZSgpIDwgZGVzdGluYXRpb25PZmZzZXQgKyBzaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBGSVhNRTogInNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIG5vdCB0aGUgc2Ft
ZSBHUFVCdWZmZXIuIgorICAgIGlmICgmc291cmNlID09ICZkZXN0aW5hdGlvbikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgQ29tbWFuZEVuY29k
ZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcihjb25zdCBCdWZmZXImIHNvdXJjZSwgdWludDY0X3Qgc291
cmNlT2Zmc2V0LCBjb25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLCB1aW50NjRfdCBkZXN0aW5hdGlv
bk9mZnNldCwgdWludDY0X3Qgc2l6ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKLSAg
ICBVTlVTRURfUEFSQU0oc291cmNlT2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRp
b24pOwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbk9mZnNldCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHNpemUpOworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RvbS1n
cHVjb21tYW5kZW5jb2Rlci1jb3B5YnVmZmVydG9idWZmZXIKKworICAgIC8vICJQcmVwYXJlIHRo
ZSBlbmNvZGVyIHN0YXRlIG9mIHRoaXMuIElmIGl0IHJldHVybnMgZmFsc2UsIHN0b3AuIgorICAg
IGlmICghcHJlcGFyZVRoZUVuY29kZXJTdGF0ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyAiSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdW5zYXRpc2ZpZWQKKyAg
ICBpZiAodmFsaWRhdGVDb3B5QnVmZmVyVG9CdWZmZXIoc291cmNlLCBzb3VyY2VPZmZzZXQsIGRl
c3RpbmF0aW9uLCBkZXN0aW5hdGlvbk9mZnNldCwgc2l6ZSkpIHsKKyAgICAgICAgLy8gRklYTUU6
ICJnZW5lcmF0ZSBhIHZhbGlkYXRpb24gZXJyb3IgYW5kIHN0b3AuIgorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZW5zdXJlQmxpdENvbW1hbmRFbmNvZGVyKCk7CisKKyAgICBbbV9ibGl0
Q29tbWFuZEVuY29kZXIgY29weUZyb21CdWZmZXI6c291cmNlLmJ1ZmZlcigpIHNvdXJjZU9mZnNl
dDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzb3VyY2VPZmZzZXQpIHRvQnVmZmVyOmRlc3RpbmF0
aW9uLmJ1ZmZlcigpIGRlc3RpbmF0aW9uT2Zmc2V0OmRlc3RpbmF0aW9uT2Zmc2V0IHNpemU6c2l6
ZV07CiB9CiAKIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlCdWZmZXJUb1RleHR1cmUoY29uc3Qg
V0dQVUltYWdlQ29weUJ1ZmZlciYgc291cmNlLCBjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYg
ZGVzdGluYXRpb24sIGNvbnN0IFdHUFVFeHRlbnQzRCYgY29weVNpemUpCkBAIC05NywxMCArMTc5
LDUzIEBAIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNsZWFyQnVmZmVyKGNvbnN0IEJ1ZmZlciYgYnVm
ZmVyLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90CiAgICAgVU5VU0VEX1BBUkFNKHNpemUpOwog
fQogCitib29sIENvbW1hbmRFbmNvZGVyOjp2YWxpZGF0ZUZpbmlzaCgpIGNvbnN0Cit7CisgICAg
Ly8gIkxldCB2YWxpZGF0aW9uU3VjY2VlZGVkIGJlIHRydWUgaWYgYWxsIG9mIHRoZSBmb2xsb3dp
bmcgcmVxdWlyZW1lbnRzIGFyZSBtZXQsIGFuZCBmYWxzZSBvdGhlcndpc2UuIgorCisgICAgLy8g
RklYTUU6ICJ0aGlzIG11c3QgYmUgdmFsaWQuIgorCisgICAgLy8gInRoaXMuW1tzdGF0ZV1dIG11
c3QgYmUgIm9wZW4iLiIKKyAgICBpZiAobV9zdGF0ZSAhPSBFbmNvZGVyU3RhdGU6Ok9wZW4pCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiAidGhpcy5bW2RlYnVnX2dyb3Vw
X3N0YWNrXV0gbXVzdCBiZSBlbXB0eS4iCisKKyAgICAvLyBGSVhNRTogIkV2ZXJ5IHVzYWdlIHNj
b3BlIGNvbnRhaW5lZCBpbiB0aGlzIG11c3Qgc2F0aXNmeSB0aGUgdXNhZ2Ugc2NvcGUgdmFsaWRh
dGlvbi4iCisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogUmVmUHRyPENvbW1hbmRCdWZmZXI+IENv
bW1hbmRFbmNvZGVyOjpmaW5pc2goY29uc3QgV0dQVUNvbW1hbmRCdWZmZXJEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQogewotICAgIFVOVVNFRF9QQVJBTShkZXNjcmlwdG9yKTsKLSAgICByZXR1cm4g
Q29tbWFuZEJ1ZmZlcjo6Y3JlYXRlKG5pbCk7CisgICAgaWYgKGRlc2NyaXB0b3IubmV4dEluQ2hh
aW4pCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0
aHViLmlvL2dwdXdlYi8jZG9tLWdwdWNvbW1hbmRlbmNvZGVyLWZpbmlzaAorCisgICAgLy8gIkxl
dCB2YWxpZGF0aW9uU3VjY2VlZGVkIGJlIHRydWUgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgcmVx
dWlyZW1lbnRzIGFyZSBtZXQsIGFuZCBmYWxzZSBvdGhlcndpc2UuIgorICAgIGF1dG8gdmFsaWRh
dGlvbkZhaWxlZCA9ICF2YWxpZGF0ZUZpbmlzaCgpOworCisgICAgLy8gIlNldCB0aGlzLltbc3Rh
dGVdXSB0byAiZW5kZWQiLiIKKyAgICBtX3N0YXRlID0gRW5jb2RlclN0YXRlOjpFbmRlZDsKKwor
ICAgIC8vICJJZiB2YWxpZGF0aW9uU3VjY2VlZGVkIGlzIGZhbHNlLCB0aGVuOiIKKyAgICBpZiAo
dmFsaWRhdGlvbkZhaWxlZCkgeworICAgICAgICAvLyBGSVhNRTogIkdlbmVyYXRlIGEgdmFsaWRh
dGlvbiBlcnJvci4iCisKKyAgICAgICAgLy8gRklYTUU6ICJSZXR1cm4gYSBuZXcgaW52YWxpZCBH
UFVDb21tYW5kQnVmZmVyLiIKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
ZmluYWxpemVCbGl0Q29tbWFuZEVuY29kZXIoKTsKKworICAgIC8vICJTZXQgY29tbWFuZEJ1ZmZl
ci5bW2NvbW1hbmRfbGlzdF1dIHRvIHRoaXMuW1tjb21tYW5kc11dLiIKKyAgICBhdXRvICpjb21t
YW5kQnVmZmVyID0gbV9jb21tYW5kQnVmZmVyOworICAgIG1fY29tbWFuZEJ1ZmZlciA9IG5pbDsK
KworICAgIGNvbW1hbmRCdWZmZXIubGFiZWwgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6
ZGVzY3JpcHRvci5sYWJlbCBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisKKyAgICBy
ZXR1cm4gQ29tbWFuZEJ1ZmZlcjo6Y3JlYXRlKGNvbW1hbmRCdWZmZXIpOwogfQogCiB2b2lkIENv
bW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z01hcmtlcihjb25zdCBjaGFyKiBtYXJrZXJMYWJlbCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRzTWl4aW4uaCBiL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRzTWl4aW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLjI4ODU0YzVjYzlkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVL0NvbW1hbmRzTWl4aW4uaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBv
cnQgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBDb21t
YW5kc01peGluIDogcHVibGljIFJlZkNvdW50ZWQ8Q29tbWFuZHNNaXhpbj4geworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBwcmVw
YXJlVGhlRW5jb2RlclN0YXRlKCkgY29uc3Q7CisKKyAgICBlbnVtIGNsYXNzIEVuY29kZXJTdGF0
ZSA6IHVpbnQ4X3QgeworICAgICAgICBPcGVuLAorICAgICAgICBMb2NrZWQsCisgICAgICAgIEVu
ZGVkCisgICAgfTsKKyAgICBFbmNvZGVyU3RhdGUgbV9zdGF0ZSB7IEVuY29kZXJTdGF0ZTo6T3Bl
biB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL1dlYkdQVS9Db21tYW5kc01peGluLm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFu
ZHNNaXhpbi5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmY5ZTRh
OTQ3NmY5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRz
TWl4aW4ubW0KQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMS0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJDb21tYW5k
c01peGluLmgiCisKK25hbWVzcGFjZSBXZWJHUFUgeworCitib29sIENvbW1hbmRzTWl4aW46OnBy
ZXBhcmVUaGVFbmNvZGVyU3RhdGUoKSBjb25zdAoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdp
dGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVmLXByZXBhcmUtdGhlLWVuY29kZXItc3RhdGUK
KworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgRW5jb2RlclN0YXRlOjpPcGVuOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEVuY29kZXJTdGF0ZTo6TG9ja2VkOgorICAg
ICAgICAvLyBGSVhNRTogIk1ha2UgZW5jb2RlciBpbnZhbGlkIgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgY2FzZSBFbmNvZGVyU3RhdGU6OkVuZGVkOgorICAgICAgICAvLyBGSVhNRTogIkdl
bmVyYXRlIGEgdmFsaWRhdGlvbiBlcnJvciIKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViR1BVCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454664</attachid>
            <date>2022-03-14 22:05:22 -0700</date>
            <delta_ts>2022-03-16 06:59:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>17300</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IGEyYzQyM2Q5Y2M3NWMzMDgwZDA2NjdiMzJmYjA4OTRiNTMxNWY1OWYKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBNb24gTWFyIDE0
IDIwOjQyOjUxIDIwMjIgLTA3MDAKCiAgICBQYXJ0IDcKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IGUxOTM1M2ViMTYw
OC4uYjg3NWQ5MWQ3YzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIyLTAzLTE0ICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQ
VV0gSW1wbGVtZW50IGZpcnN0IGRyYWZ0IG9mIGJ1ZmZlciBjb3B5aW5nIGFjY29yZGluZyB0byB0
aGUgc3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjM3ODcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9CdWZmZXIoKSBhbmQgQ29tbWFu
ZEVuY29kZXI6OmZpbmlzaCgpLAorICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGFsZ29yaXRobXMg
aW4gdGhlIHNwZWMuIFRoZXJlIGFyZSBhIGZldyB0aGluZ3Mgd2hpY2ggdGhlIHNwZWMKKyAgICAg
ICAgbGlzdHMgd2hpY2ggd2UgY2FuJ3QgZG8geWV0IChsaWtlIHJlcG9ydGluZyB2YWxpZGF0aW9u
IGVycm9ycyksIHNvIHRob3NlIHRoaW5ncworICAgICAgICBhcmUgbGVmdCB3aXRoIEZJWE1Fcy4g
RXZlcnkgc3RlcCBpcyBsaXN0ZWQgd2l0aCBsaW5rcyB0byB0aGUgc3BlYyB3aGVyZQorICAgICAg
ICBhcHByb3ByaWF0ZSwgYW5kIHdpdGggcXVvdGVzIHRvIHRoZSBzcGVjIGRlc2NyaWJpbmcgd2hh
dCBpcyBiZWluZyBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIFdlYkdQVS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkdQVS9Db21tYW5kRW5jb2Rlci5oOgorICAgICAg
ICAqIFdlYkdQVS9Db21tYW5kRW5jb2Rlci5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpj
cmVhdGVDb21tYW5kRW5jb2Rlcik6CisgICAgICAgIChXZWJHUFU6OkNvbW1hbmRFbmNvZGVyOjpl
bnN1cmVCbGl0Q29tbWFuZEVuY29kZXIpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rl
cjo6ZmluYWxpemVCbGl0Q29tbWFuZEVuY29kZXIpOgorICAgICAgICAoV2ViR1BVOjp2YWxpZGF0
ZUNvcHlCdWZmZXJUb0J1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OkNvbW1hbmRFbmNvZGVyOjpj
b3B5QnVmZmVyVG9CdWZmZXIpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rlcjo6dmFs
aWRhdGVGaW5pc2ggY29uc3QpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rlcjo6Zmlu
aXNoKToKKyAgICAgICAgKiBXZWJHUFUvQ29tbWFuZHNNaXhpbi5oOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJHUFUvQ29tbWFuZHNNaXhpbi5tbTogQWRkZWQuCisgICAgICAgIChXZWJHUFU6OkNvbW1h
bmRzTWl4aW46OnByZXBhcmVUaGVFbmNvZGVyU3RhdGUgY29uc3QpOgorCiAyMDIyLTAzLTE0ICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdQ
VV0gSW1wbGVtZW50IGZpcnN0IGRyYWZ0IG9mIGJ1ZmZlciBtYXBwaW5nIGFjY29yZGluZyB0byB0
aGUgc3BlYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggMmI3OTVkOWFlOGQxLi5kN2U3MGE4ZWVkOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMsNiArMTMsOCBAQAogCQkx
QzJDRURFRTI3MUU4QTczMDBFREMxNkYgLyogTWV0YWwuZnJhbWV3b3JrIGluIEZyYW1ld29ya3Mg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyQ0VERUQyNzFFOEE3MzAwRURD
MTZGIC8qIE1ldGFsLmZyYW1ld29yayAqLzsgfTsKIAkJMUM1MzE5QzAyN0JEQzZDQzAwQ0QxMjdF
IC8qIG1haW4uc3dpZnQgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQzUzMTlCRjI3QkRDNkNDMDBDRDEyN0UgLyogbWFpbi5zd2lmdCAqLzsgfTsKIAkJMUM1
MzE5QzUyN0JEQzcyNzAwQ0QxMjdFIC8qIFdlYkdQVS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0VCRDdFMzI3MTZBRkJBMDBBNTI1
NEQgLyogV2ViR1BVLmZyYW1ld29yayAqLzsgfTsKKwkJMUM1ODJGRjkyN0UwNDEzMTAwOUI0MEYw
IC8qIENvbW1hbmRzTWl4aW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzU4MkZGNzI3RTA0MTMxMDA5QjQwRjAgLyogQ29tbWFuZHNNaXhpbi5tbSAq
LzsgfTsKKwkJMUM1ODJGRkEyN0UwNDEzMTAwOUI0MEYwIC8qIENvbW1hbmRzTWl4aW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNTgyRkY4MjdFMDQx
MzEwMDlCNDBGMCAvKiBDb21tYW5kc01peGluLmggKi87IH07CiAJCTFDNUFDQTk0MjczQTQxQzIw
MDk1RjhENSAvKiBJbnN0YW5jZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDNUFDQTkyMjczQTQxQzIwMDk1RjhENSAvKiBJbnN0YW5jZS5tbSAqLzsg
fTsKIAkJMUM1QUNBQjYyNzNBNDI2RDAwOTVGOEQ1IC8qIFJlbmRlclBpcGVsaW5lLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM1QUNBOTgyNzNBNDI2
RDAwOTVGOEQ1IC8qIFJlbmRlclBpcGVsaW5lLm1tICovOyB9OwogCQkxQzVBQ0FCQjI3M0E0MjZE
MDA5NUY4RDUgLyogQnVmZmVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUM1QUNBOUQyNzNBNDI2RDAwOTVGOEQ1IC8qIEJ1ZmZlci5tbSAqLzsgfTsK
QEAgLTEzNCw2ICsxMzYsOCBAQAogCQkxQzUzMTlCRjI3QkRDNkNDMDBDRDEyN0UgLyogbWFpbi5z
d2lmdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuc3dpZnQ7IHBhdGggPSBtYWluLnN3aWZ0OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQzUzMTlDQTI3QkRENzAwMDBDRDEyN0UgLyogQ29tbWFuZExpbmVQbGF5Z3JvdW5k
LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IENvbW1hbmRMaW5lUGxheWdyb3VuZC54Y2NvbmZpZzsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM1ODJGRjYyN0UwM0U1NjAwOUI0MEYwIC8q
IFV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUM1ODJGRjcyN0UwNDEzMTAwOUI0MEYwIC8qIENvbW1hbmRzTWl4aW4u
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb21tYW5kc01peGluLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQzU4MkZGODI3RTA0MTMxMDA5QjQwRjAgLyogQ29tbWFuZHNNaXhp
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb21tYW5kc01peGluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFDNUFDQTkyMjczQTQxQzIwMDk1RjhENSAvKiBJbnN0YW5jZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEluc3RhbmNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQzVBQ0E5NjI3M0E0MjZEMDA5NUY4RDUgLyogU3VyZmFjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDNUFDQTk3MjczQTQyNkQwMDk1RjhENSAvKiBTd2FwQ2hhaW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3dhcENoYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0zNzUsNiArMzc5LDggQEAKIAkJCQkxQ0MwQzhDOTI3M0E3RDg5MDBEMEI0ODEgLyogV2Vi
R1BVLm1vZHVsZW1hcCAqLywKIAkJCQkxQzVBQ0FEMjI3M0E0Qzg2MDA5NUY4RDUgLyogV2ViR1BV
RXh0LmggKi8sCiAJCQkJMUM1ODJGRjYyN0UwM0U1NjAwOUI0MEYwIC8qIFV0aWxpdGllcy5oICov
LAorCQkJCTFDNTgyRkY3MjdFMDQxMzEwMDlCNDBGMCAvKiBDb21tYW5kc01peGluLm1tICovLAor
CQkJCTFDNTgyRkY4MjdFMDQxMzEwMDlCNDBGMCAvKiBDb21tYW5kc01peGluLmggKi8sCiAJCQkp
OwogCQkJcGF0aCA9IFdlYkdQVTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00Nzks
NiArNDg1LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTFDNUFDQUQ3MjczQTRENzAwMDk1RjhENSAv
KiBCaW5kR3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDRUJEN0U3MjcxNkFGQkEwMEE1MjU0
RCAvKiBXZWJHUFUuaCBpbiBIZWFkZXJzICovLAorCQkJCTFDNTgyRkZBMjdFMDQxMzEwMDlCNDBG
MCAvKiBDb21tYW5kc01peGluLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzVBQ0FEMzI3M0E0Qzg2
MDA5NUY4RDUgLyogV2ViR1BVRXh0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTcyNyw2ICs3MzQsNyBAQAogCQkJ
CTFDNUFDQUM2MjczQTQyNkQwMDk1RjhENSAvKiBDb21wdXRlUGFzc0VuY29kZXIubW0gaW4gU291
cmNlcyAqLywKIAkJCQkxQzVBQ0FDMDI3M0E0MjZEMDA5NUY4RDUgLyogQ29tcHV0ZVBpcGVsaW5l
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBQzEyNzNBNDI2RDAwOTVGOEQ1IC8qIERldmlj
ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFDNTgyRkY5MjdFMDQxMzEwMDlCNDBGMCAvKiBDb21t
YW5kc01peGluLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBOTQyNzNBNDFDMjAwOTVGOEQ1
IC8qIEluc3RhbmNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBRTUyNzNBNTVERDAwOTVG
OEQ1IC8qIFBpcGVsaW5lTGF5b3V0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1QUNBQkQyNzNB
NDI2RDAwOTVGOEQ1IC8qIFF1ZXJ5U2V0Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rlci5oIGIvU291cmNlL1dlYkdQVS9XZWJH
UFUvQ29tbWFuZEVuY29kZXIuaAppbmRleCBkYzk3MDE1NjdjNmQuLjI0NTNlZGFiZmQzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rlci5oCkBAIC0yNSw5ICsyNSw5IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW1wb3J0ICJDb21tYW5kc01peGluLmgiCiAjaW1wb3J0IDx3dGYvRmFz
dE1hbGxvYy5oPgogI2ltcG9ydCA8d3RmL1JlZi5oPgotI2ltcG9ydCA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkdQVSB7CkBAIC0zOCw3
ICszOCw3IEBAIGNsYXNzIENvbXB1dGVQYXNzRW5jb2RlcjsKIGNsYXNzIFF1ZXJ5U2V0OwogY2xh
c3MgUmVuZGVyUGFzc0VuY29kZXI7CiAKLWNsYXNzIENvbW1hbmRFbmNvZGVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8Q29tbWFuZEVuY29kZXI+IHsKK2NsYXNzIENvbW1hbmRFbmNvZGVyIDogcHVibGlj
IENvbW1hbmRzTWl4aW4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8Q29tbWFuZEVuY29kZXI+IGNyZWF0ZShpZDxNVExDb21tYW5kQnVmZmVy
PiBjb21tYW5kQnVmZmVyKQpAQCAtNjYsNyArNjYsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBDb21tYW5kRW5jb2RlcihpZDxNVExDb21tYW5kQnVmZmVyPik7CiAKKyAgICBib29sIHZhbGlk
YXRlRmluaXNoKCkgY29uc3Q7CisKKyAgICB2b2lkIGVuc3VyZUJsaXRDb21tYW5kRW5jb2Rlcigp
OworICAgIHZvaWQgZmluYWxpemVCbGl0Q29tbWFuZEVuY29kZXIoKTsKKwogICAgIGlkPE1UTENv
bW1hbmRCdWZmZXI+IG1fY29tbWFuZEJ1ZmZlciB7IG5pbCB9OworICAgIGlkPE1UTEJsaXRDb21t
YW5kRW5jb2Rlcj4gbV9ibGl0Q29tbWFuZEVuY29kZXIgeyBuaWwgfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVu
Y29kZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rlci5tbQppbmRleCA2
NjQwODVjNTAxMmUuLjc0NGM0MWRkODU1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJH
UFUvQ29tbWFuZEVuY29kZXIubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVu
Y29kZXIubW0KQEAgLTMyLDEzICszMiwyNiBAQAogI2ltcG9ydCAiRGV2aWNlLmgiCiAjaW1wb3J0
ICJRdWVyeVNldC5oIgogI2ltcG9ydCAiUmVuZGVyUGFzc0VuY29kZXIuaCIKKyNpbXBvcnQgIlV0
aWxpdGllcy5oIgogCiBuYW1lc3BhY2UgV2ViR1BVIHsKIAogUmVmUHRyPENvbW1hbmRFbmNvZGVy
PiBEZXZpY2U6OmNyZWF0ZUNvbW1hbmRFbmNvZGVyKGNvbnN0IFdHUFVDb21tYW5kRW5jb2RlckRl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc2NyaXB0b3IpOwot
ICAgIHJldHVybiBDb21tYW5kRW5jb2Rlcjo6Y3JlYXRlKG5pbCk7CisgICAgaWYgKGRlc2NyaXB0
b3IubmV4dEluQ2hhaW4pCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gaHR0cHM6
Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jZG9tLWdwdWRldmljZS1jcmVhdGVjb21tYW5kZW5j
b2RlcgorCisgICAgYXV0byAqY29tbWFuZEJ1ZmZlckRlc2NyaXB0b3IgPSBbTVRMQ29tbWFuZEJ1
ZmZlckRlc2NyaXB0b3IgbmV3XTsKKyAgICBjb21tYW5kQnVmZmVyRGVzY3JpcHRvci5lcnJvck9w
dGlvbnMgPSBNVExDb21tYW5kQnVmZmVyRXJyb3JPcHRpb25FbmNvZGVyRXhlY3V0aW9uU3RhdHVz
OworICAgIGlkPE1UTENvbW1hbmRCdWZmZXI+IGNvbW1hbmRCdWZmZXIgPSBbZ2V0UXVldWUoKS5j
b21tYW5kUXVldWUoKSBjb21tYW5kQnVmZmVyV2l0aERlc2NyaXB0b3I6Y29tbWFuZEJ1ZmZlckRl
c2NyaXB0b3JdOworICAgIGlmICghY29tbWFuZEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBjb21tYW5kQnVmZmVyLmxhYmVsID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDU3Ry
aW5nOmRlc2NyaXB0b3IubGFiZWwgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworCisg
ICAgcmV0dXJuIENvbW1hbmRFbmNvZGVyOjpjcmVhdGUoY29tbWFuZEJ1ZmZlcik7CiB9CiAKIENv
bW1hbmRFbmNvZGVyOjpDb21tYW5kRW5jb2RlcihpZDxNVExDb21tYW5kQnVmZmVyPiBjb21tYW5k
QnVmZmVyKQpAQCAtNDgsNiArNjEsMTggQEAgQ29tbWFuZEVuY29kZXI6OkNvbW1hbmRFbmNvZGVy
KGlkPE1UTENvbW1hbmRCdWZmZXI+IGNvbW1hbmRCdWZmZXIpCiAKIENvbW1hbmRFbmNvZGVyOjp+
Q29tbWFuZEVuY29kZXIoKSA9IGRlZmF1bHQ7CiAKK3ZvaWQgQ29tbWFuZEVuY29kZXI6OmVuc3Vy
ZUJsaXRDb21tYW5kRW5jb2RlcigpCit7CisgICAgaWYgKCFtX2JsaXRDb21tYW5kRW5jb2RlcikK
KyAgICAgICAgbV9ibGl0Q29tbWFuZEVuY29kZXIgPSBbbV9jb21tYW5kQnVmZmVyIGJsaXRDb21t
YW5kRW5jb2Rlcl07Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXI6OmZpbmFsaXplQmxpdENvbW1h
bmRFbmNvZGVyKCkKK3sKKyAgICBpZiAobV9ibGl0Q29tbWFuZEVuY29kZXIpCisgICAgICAgIFtt
X2JsaXRDb21tYW5kRW5jb2RlciBlbmRFbmNvZGluZ107Cit9CisKIFJlZlB0cjxDb21wdXRlUGFz
c0VuY29kZXI+IENvbW1hbmRFbmNvZGVyOjpiZWdpbkNvbXB1dGVQYXNzKGNvbnN0IFdHUFVDb21w
dXRlUGFzc0Rlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGRlc2Ny
aXB0b3IpOwpAQCAtNjAsMTMgKzg1LDcwIEBAIFJlZlB0cjxSZW5kZXJQYXNzRW5jb2Rlcj4gQ29t
bWFuZEVuY29kZXI6OmJlZ2luUmVuZGVyUGFzcyhjb25zdCBXR1BVUmVuZGVyUGFzc0RlCiAgICAg
cmV0dXJuIFJlbmRlclBhc3NFbmNvZGVyOjpjcmVhdGUobmlsKTsKIH0KIAorc3RhdGljIGJvb2wg
dmFsaWRhdGVDb3B5QnVmZmVyVG9CdWZmZXIoY29uc3QgQnVmZmVyJiBzb3VyY2UsIHVpbnQ2NF90
IHNvdXJjZU9mZnNldCwgY29uc3QgQnVmZmVyJiBkZXN0aW5hdGlvbiwgdWludDY0X3QgZGVzdGlu
YXRpb25PZmZzZXQsIHVpbnQ2NF90IHNpemUpCit7CisgICAgLy8gRklYTUU6ICJzb3VyY2UgaXMg
dmFsaWQgdG8gdXNlIHdpdGggdGhpcy4iCisKKyAgICAvLyBGSVhNRTogImRlc3RpbmF0aW9uIGlz
IHZhbGlkIHRvIHVzZSB3aXRoIHRoaXMuIgorCisgICAgLy8gInNvdXJjZS5bW3VzYWdlXV0gY29u
dGFpbnMgQ09QWV9TUkMuIgorICAgIGlmICghKHNvdXJjZS51c2FnZSgpICYgV0dQVUJ1ZmZlclVz
YWdlX0NvcHlTcmMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiZGVzdGluYXRp
b24uW1t1c2FnZV1dIGNvbnRhaW5zIENPUFlfRFNULiIKKyAgICBpZiAoIShkZXN0aW5hdGlvbi51
c2FnZSgpICYgV0dQVUJ1ZmZlclVzYWdlX0NvcHlEc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyAic2l6ZSBpcyBhIG11bHRpcGxlIG9mIDQuIgorICAgIGlmIChpc05vdE11bHRp
cGxlT2ZQb3dlck9mVHdvKHNpemUsIDQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyAic291cmNlT2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgNC4iCisgICAgaWYgKGlzTm90TXVsdGlw
bGVPZlBvd2VyT2ZUd28oc291cmNlT2Zmc2V0LCA0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gImRlc3RpbmF0aW9uT2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgNC4iCisgICAgaWYg
KGlzTm90TXVsdGlwbGVPZlBvd2VyT2ZUd28oZGVzdGluYXRpb25PZmZzZXQsIDQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogIihzb3VyY2VPZmZzZXQgKyBzaXplKSBk
b2VzIG5vdCBvdmVyZmxvdyBhIEdQVVNpemU2NC4iCisKKyAgICAvLyBGSVhNRTogIihkZXN0aW5h
dGlvbk9mZnNldCArIHNpemUpIGRvZXMgbm90IG92ZXJmbG93IGEgR1BVU2l6ZTY0LiIKKworICAg
IC8vIEZJWE1FOiAic291cmNlLltbc2l6ZV1dIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAo
c291cmNlT2Zmc2V0ICsgc2l6ZSkuIgorICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1l
dGljCisgICAgaWYgKHNvdXJjZS5zaXplKCkgPCBzb3VyY2VPZmZzZXQgKyBzaXplKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogImRlc3RpbmF0aW9uLltbc2l6ZV1dIGlz
IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAoZGVzdGluYXRpb25PZmZzZXQgKyBzaXplKS4iCisg
ICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBpZiAoZGVzdGluYXRpb24u
c2l6ZSgpIDwgZGVzdGluYXRpb25PZmZzZXQgKyBzaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBGSVhNRTogInNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIG5vdCB0aGUgc2Ft
ZSBHUFVCdWZmZXIuIgorICAgIGlmICgmc291cmNlID09ICZkZXN0aW5hdGlvbikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgQ29tbWFuZEVuY29k
ZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcihjb25zdCBCdWZmZXImIHNvdXJjZSwgdWludDY0X3Qgc291
cmNlT2Zmc2V0LCBjb25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLCB1aW50NjRfdCBkZXN0aW5hdGlv
bk9mZnNldCwgdWludDY0X3Qgc2l6ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKLSAg
ICBVTlVTRURfUEFSQU0oc291cmNlT2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRp
b24pOwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbk9mZnNldCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHNpemUpOworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RvbS1n
cHVjb21tYW5kZW5jb2Rlci1jb3B5YnVmZmVydG9idWZmZXIKKworICAgIC8vICJQcmVwYXJlIHRo
ZSBlbmNvZGVyIHN0YXRlIG9mIHRoaXMuIElmIGl0IHJldHVybnMgZmFsc2UsIHN0b3AuIgorICAg
IGlmICghcHJlcGFyZVRoZUVuY29kZXJTdGF0ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyAiSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdW5zYXRpc2ZpZWQKKyAg
ICBpZiAoIXZhbGlkYXRlQ29weUJ1ZmZlclRvQnVmZmVyKHNvdXJjZSwgc291cmNlT2Zmc2V0LCBk
ZXN0aW5hdGlvbiwgZGVzdGluYXRpb25PZmZzZXQsIHNpemUpKSB7CisgICAgICAgIC8vIEZJWE1F
OiAiZ2VuZXJhdGUgYSB2YWxpZGF0aW9uIGVycm9yIGFuZCBzdG9wLiIKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGVuc3VyZUJsaXRDb21tYW5kRW5jb2RlcigpOworCisgICAgW21fYmxp
dENvbW1hbmRFbmNvZGVyIGNvcHlGcm9tQnVmZmVyOnNvdXJjZS5idWZmZXIoKSBzb3VyY2VPZmZz
ZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc291cmNlT2Zmc2V0KSB0b0J1ZmZlcjpkZXN0aW5h
dGlvbi5idWZmZXIoKSBkZXN0aW5hdGlvbk9mZnNldDpkZXN0aW5hdGlvbk9mZnNldCBzaXplOnNp
emVdOwogfQogCiB2b2lkIENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0
IFdHUFVJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUm
IGRlc3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQpAQCAtOTcsMTAgKzE3
OSw1MyBAQCB2b2lkIENvbW1hbmRFbmNvZGVyOjpjbGVhckJ1ZmZlcihjb25zdCBCdWZmZXImIGJ1
ZmZlciwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdAogICAgIFVOVVNFRF9QQVJBTShzaXplKTsK
IH0KIAorYm9vbCBDb21tYW5kRW5jb2Rlcjo6dmFsaWRhdGVGaW5pc2goKSBjb25zdAoreworICAg
IC8vICJMZXQgdmFsaWRhdGlvblN1Y2NlZWRlZCBiZSB0cnVlIGlmIGFsbCBvZiB0aGUgZm9sbG93
aW5nIHJlcXVpcmVtZW50cyBhcmUgbWV0LCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiIKKworICAgIC8v
IEZJWE1FOiAidGhpcyBtdXN0IGJlIHZhbGlkLiIKKworICAgIC8vICJ0aGlzLltbc3RhdGVdXSBt
dXN0IGJlICJvcGVuIi4iCisgICAgaWYgKG1fc3RhdGUgIT0gRW5jb2RlclN0YXRlOjpPcGVuKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogInRoaXMuW1tkZWJ1Z19ncm91
cF9zdGFja11dIG11c3QgYmUgZW1wdHkuIgorCisgICAgLy8gRklYTUU6ICJFdmVyeSB1c2FnZSBz
Y29wZSBjb250YWluZWQgaW4gdGhpcyBtdXN0IHNhdGlzZnkgdGhlIHVzYWdlIHNjb3BlIHZhbGlk
YXRpb24uIgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIFJlZlB0cjxDb21tYW5kQnVmZmVyPiBD
b21tYW5kRW5jb2Rlcjo6ZmluaXNoKGNvbnN0IFdHUFVDb21tYW5kQnVmZmVyRGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKIHsKLSAgICBVTlVTRURfUEFSQU0oZGVzY3JpcHRvcik7Ci0gICAgcmV0dXJu
IENvbW1hbmRCdWZmZXI6OmNyZWF0ZShuaWwpOworICAgIGlmIChkZXNjcmlwdG9yLm5leHRJbkNo
YWluKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdp
dGh1Yi5pby9ncHV3ZWIvI2RvbS1ncHVjb21tYW5kZW5jb2Rlci1maW5pc2gKKworICAgIC8vICJM
ZXQgdmFsaWRhdGlvblN1Y2NlZWRlZCBiZSB0cnVlIGlmIGFsbCBvZiB0aGUgZm9sbG93aW5nIHJl
cXVpcmVtZW50cyBhcmUgbWV0LCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiIKKyAgICBhdXRvIHZhbGlk
YXRpb25GYWlsZWQgPSAhdmFsaWRhdGVGaW5pc2goKTsKKworICAgIC8vICJTZXQgdGhpcy5bW3N0
YXRlXV0gdG8gImVuZGVkIi4iCisgICAgbV9zdGF0ZSA9IEVuY29kZXJTdGF0ZTo6RW5kZWQ7CisK
KyAgICAvLyAiSWYgdmFsaWRhdGlvblN1Y2NlZWRlZCBpcyBmYWxzZSwgdGhlbjoiCisgICAgaWYg
KHZhbGlkYXRpb25GYWlsZWQpIHsKKyAgICAgICAgLy8gRklYTUU6ICJHZW5lcmF0ZSBhIHZhbGlk
YXRpb24gZXJyb3IuIgorCisgICAgICAgIC8vIEZJWE1FOiAiUmV0dXJuIGEgbmV3IGludmFsaWQg
R1BVQ29tbWFuZEJ1ZmZlci4iCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IGZpbmFsaXplQmxpdENvbW1hbmRFbmNvZGVyKCk7CisKKyAgICAvLyAiU2V0IGNvbW1hbmRCdWZm
ZXIuW1tjb21tYW5kX2xpc3RdXSB0byB0aGlzLltbY29tbWFuZHNdXS4iCisgICAgYXV0byAqY29t
bWFuZEJ1ZmZlciA9IG1fY29tbWFuZEJ1ZmZlcjsKKyAgICBtX2NvbW1hbmRCdWZmZXIgPSBuaWw7
CisKKyAgICBjb21tYW5kQnVmZmVyLmxhYmVsID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDU3RyaW5n
OmRlc2NyaXB0b3IubGFiZWwgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworCisgICAg
cmV0dXJuIENvbW1hbmRCdWZmZXI6OmNyZWF0ZShjb21tYW5kQnVmZmVyKTsKIH0KIAogdm9pZCBD
b21tYW5kRW5jb2Rlcjo6aW5zZXJ0RGVidWdNYXJrZXIoY29uc3QgY2hhciogbWFya2VyTGFiZWwp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kc01peGluLmggYi9Tb3Vy
Y2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kc01peGluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi4yODg1NGM1Y2M5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViR1BVL1dlYkdQVS9Db21tYW5kc01peGluLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1w
b3J0IDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgQ29t
bWFuZHNNaXhpbiA6IHB1YmxpYyBSZWZDb3VudGVkPENvbW1hbmRzTWl4aW4+IHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworcHJvdGVjdGVkOgorICAgIGJvb2wgcHJl
cGFyZVRoZUVuY29kZXJTdGF0ZSgpIGNvbnN0OworCisgICAgZW51bSBjbGFzcyBFbmNvZGVyU3Rh
dGUgOiB1aW50OF90IHsKKyAgICAgICAgT3BlbiwKKyAgICAgICAgTG9ja2VkLAorICAgICAgICBF
bmRlZAorICAgIH07CisgICAgRW5jb2RlclN0YXRlIG1fc3RhdGUgeyBFbmNvZGVyU3RhdGU6Ok9w
ZW4gfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkdQVS9XZWJHUFUvQ29tbWFuZHNNaXhpbi5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1h
bmRzTWl4aW4ubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mOWU0
YTk0NzZmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5k
c01peGluLm1tCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiQ29tbWFu
ZHNNaXhpbi5oIgorCituYW1lc3BhY2UgV2ViR1BVIHsKKworYm9vbCBDb21tYW5kc01peGluOjpw
cmVwYXJlVGhlRW5jb2RlclN0YXRlKCkgY29uc3QKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5n
aXRodWIuaW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi1wcmVwYXJlLXRoZS1lbmNvZGVyLXN0YXRl
CisKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIEVuY29kZXJTdGF0ZTo6T3BlbjoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBFbmNvZGVyU3RhdGU6OkxvY2tlZDoKKyAg
ICAgICAgLy8gRklYTUU6ICJNYWtlIGVuY29kZXIgaW52YWxpZCIKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGNhc2UgRW5jb2RlclN0YXRlOjpFbmRlZDoKKyAgICAgICAgLy8gRklYTUU6ICJH
ZW5lcmF0ZSBhIHZhbGlkYXRpb24gZXJyb3IiCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQo=
</data>
<flag name="review"
          id="482384"
          type_id="1"
          status="+"
          setter="kkinnunen"
    />
          </attachment>
      

    </bug>

</bugzilla>