<?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>135751</bug_id>
          
          <creation_ts>2014-08-08 00:55:54 -0700</creation_ts>
          <short_desc>[WebAudio] FFTFrame is cluttered with dead code</short_desc>
          <delta_ts>2014-08-12 00:50:09 -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>Web Audio</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>crogers</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1027815</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-08-08 00:55:54 -0700</bug_when>
    <thetext>There are currently 4 FFTFrame implementations but I think that only 2 are used, the one for Mac and the GStreamer implementation.

FFTFrame.h has also some ifdefs WEBAUDIO_OPENMAX_DL_FFT which were specific to Chromium, I think we should remove this.

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027849</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-08-08 08:43:15 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; There are currently 4 FFTFrame implementations but I think that only 2 are used, the one for Mac and the GStreamer implementation.
&gt; 
&gt; FFTFrame.h has also some ifdefs WEBAUDIO_OPENMAX_DL_FFT which were specific to Chromium, I think we should remove this.
&gt; 
&gt; Thoughts?

Out with the old and unused!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027855</commentid>
    <comment_count>2</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-08-08 09:08:58 -0700</bug_when>
    <thetext>Ok, I&apos;m too busy now but I&apos;ll prepare a patch next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028137</commentid>
    <comment_count>3</comment_count>
      <attachid>236354</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-08-11 00:34:49 -0700</bug_when>
    <thetext>Created attachment 236354
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028149</commentid>
    <comment_count>4</comment_count>
      <attachid>236359</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-08-11 02:13:03 -0700</bug_when>
    <thetext>Created attachment 236359
Patch

Also removing unused ifdefs from AudioArray.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028176</commentid>
    <comment_count>5</comment_count>
      <attachid>236359</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-08-11 06:52:39 -0700</bug_when>
    <thetext>Comment on attachment 236359
Patch

Thanks Philippe!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028447</commentid>
    <comment_count>6</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-08-12 00:50:09 -0700</bug_when>
    <thetext>Committed r172431: &lt;http://trac.webkit.org/changeset/172431&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236354</attachid>
            <date>2014-08-11 00:34:49 -0700</date>
            <delta_ts>2014-08-11 02:13:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>25726</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBjMWZkYWQ0NzM5M2E1MDU5YzE5YzdkYTM3MzE4ZmVmODNjMDA4YjJkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDExIEF1ZyAyMDE0IDA4OjUwOjU2ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
UGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMzEgKysrCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3Bw
ICAgICAgICAgICB8ICAzMSArLS0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVh
ZC5oICAgICAgICAgICAgIHwgICA4IC0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Rp
cmVjdENvbnZvbHZlci5jcHAgIHwgIDIwIC0tCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9EaXJlY3RDb252b2x2ZXIuaCAgICB8ICAgNyAtCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9GRlRGcmFtZS5oICAgICAgICAgICB8ICA2MiArLS0tLQogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcCAgICAgfCAgIDQgKy0KIC4uLi9wbGF0Zm9ybS9h
dWRpby9mZm1wZWcvRkZURnJhbWVGRk1QRUcuY3BwICAgICAgIHwgMjUzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaXBwL0ZGVEZyYW1lSVBQLmNw
cCAgfCAxODkgLS0tLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9t
YWMvRkZURnJhbWVNYWMuY3BwICB8ICAgNCArLQogMTAgZmlsZXMgY2hhbmdlZCwgMzkgaW5zZXJ0
aW9ucygrKSwgNTcwIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2ZmbXBlZy9GRlRGcmFtZUZGTVBFRy5jcHAKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pcHAvRkZURnJhbWVJUFAuY3Bw
CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGRiNjMwYmMuLjg3NWNlM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
NCBAQAorMjAxNC0wOC0xMCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW1dlYkF1ZGlvXSBGRlRGcmFtZSBpcyBjbHV0dGVyZWQgd2l0aCBkZWFkIGNv
ZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTc1
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsZWFu
ZWQgdXAgdW51c2VkIEZGVEZyYW1lIGltcGxlbWVudGF0aW9ucyBmcm9tIHRoZSB0cmVlLiBJZiB0
aGUKKyAgICAgICAgRkZNUEVHIG9yIElQUCB2ZXJzaW9ucyBhcmUgbmVlZGVkIGxhdGVyIG9uIGFn
YWluIHRoaXMgcGF0Y2ggY2FuIGJlCisgICAgICAgIHJvbGxlZCBvdXQuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCB0aGUgY29kZSByZW1vdmVkIHdhcyBkaXNhYmxlZCBvbiBhbGwgcG9ydHMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QmlxdWFkOjpCaXF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjp+QmlxdWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1
YWQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0Tm9ybWFsaXplZENvZWZm
aWNpZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmg6CisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
cmVjdENvbnZvbHZlcjo6RGlyZWN0Q29udm9sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVj
dENvbnZvbHZlcjo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RDb252b2x2ZXI6
OnJlc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1
ZGlvL0ZGVEZyYW1lU3R1Yi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZmZtcGVnL0ZG
VEZyYW1lRkZNUEVHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pcHAv
RkZURnJhbWVJUFAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9G
RlRGcmFtZU1hYy5jcHA6CisKIDIwMTQtMDgtMTAgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGlucHV0U3BlZWNoLnBuZwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKaW5kZXggMmU0MGFjZi4uZThmOTBmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCkBAIC01NSwxMiArNTUsNiBA
QCBCaXF1YWQ6OkJpcXVhZCgpCiAgICAgbV9vdXRwdXRCdWZmZXIuYWxsb2NhdGUoa0J1ZmZlclNp
emUgKyAyKTsKICNlbmRpZgogCi0jaWYgVVNFKFdFQkFVRElPX0lQUCkKLSAgICBpbnQgYnVmZmVy
U2l6ZTsKLSAgICBpcHBzSUlSR2V0U3RhdGVTaXplNjRmX0JpUXVhZF8zMmYoMSwgJmJ1ZmZlclNp
emUpOwotICAgIG1faXBwSW50ZXJuYWxCdWZmZXIgPSBpcHBzTWFsbG9jXzh1KGJ1ZmZlclNpemUp
OwotI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFApCi0KICAgICAvLyBJbml0aWFsaXplIGFzIHBh
c3MtdGhydSAoc3RyYWlnaHQtd2lyZSwgbm8gZmlsdGVyIGVmZmVjdCkKICAgICBzZXROb3JtYWxp
emVkQ29lZmZpY2llbnRzKDEsIDAsIDAsIDEsIDAsIDApOwogCkBAIC02OSw5ICs2Myw2IEBAIEJp
cXVhZDo6QmlxdWFkKCkKIAogQmlxdWFkOjp+QmlxdWFkKCkKIHsKLSNpZiBVU0UoV0VCQVVESU9f
SVBQKQotICAgIGlwcHNGcmVlKG1faXBwSW50ZXJuYWxCdWZmZXIpOwotI2VuZGlmIC8vIFVTRShX
RUJBVURJT19JUFApCiB9CiAKIHZvaWQgQmlxdWFkOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3Vy
Y2VQLCBmbG9hdCogZGVzdFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCkBAIC04MCw5ICs3MSw3
IEBAIHZvaWQgQmlxdWFkOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VQLCBmbG9hdCogZGVz
dFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiAgICAgLy8gVXNlIHZlY0xpYiBpZiBhdmFpbGFi
bGUKICAgICBwcm9jZXNzRmFzdChzb3VyY2VQLCBkZXN0UCwgZnJhbWVzVG9Qcm9jZXNzKTsKIAot
I2VsaWYgVVNFKFdFQkFVRElPX0lQUCkKLSAgICBpcHBzSUlSNjRmXzMyZihzb3VyY2VQLCBkZXN0
UCwgc3RhdGljX2Nhc3Q8aW50PihmcmFtZXNUb1Byb2Nlc3MpLCBtX2JpcXVhZFN0YXRlKTsKLSNl
bHNlIC8vIFVTRShXRUJBVURJT19JUFApCisjZWxzZQogCiAgICAgaW50IG4gPSBmcmFtZXNUb1By
b2Nlc3M7CiAKQEAgLTE5NiwxMSArMTg1LDYgQEAgdm9pZCBCaXF1YWQ6OnJlc2V0KCkKICAgICBv
dXRwdXRQWzBdID0gMDsKICAgICBvdXRwdXRQWzFdID0gMDsKIAotI2VsaWYgVVNFKFdFQkFVRElP
X0lQUCkKLSAgICBpbnQgYnVmZmVyU2l6ZTsKLSAgICBpcHBzSUlSR2V0U3RhdGVTaXplNjRmX0Jp
UXVhZF8zMmYoMSwgJmJ1ZmZlclNpemUpOwotICAgIGlwcHNaZXJvXzh1KG1faXBwSW50ZXJuYWxC
dWZmZXIsIGJ1ZmZlclNpemUpOwotCiAjZWxzZQogICAgIG1feDEgPSBtX3gyID0gbV95MSA9IG1f
eTIgPSAwOwogI2VuZGlmCkBAIC0yODksMTkgKzI3Myw2IEBAIHZvaWQgQmlxdWFkOjpzZXROb3Jt
YWxpemVkQ29lZmZpY2llbnRzKGRvdWJsZSBiMCwgZG91YmxlIGIxLCBkb3VibGUgYjIsIGRvdWJs
ZSBhCiAgICAgbV9iMiA9IGIyICogYTBJbnZlcnNlOwogICAgIG1fYTEgPSBhMSAqIGEwSW52ZXJz
ZTsKICAgICBtX2EyID0gYTIgKiBhMEludmVyc2U7Ci0KLSNpZiBVU0UoV0VCQVVESU9fSVBQKQot
ICAgIElwcDY0ZiB0YXBzWzZdOwotICAgIHRhcHNbMF0gPSBtX2IwOwotICAgIHRhcHNbMV0gPSBt
X2IxOwotICAgIHRhcHNbMl0gPSBtX2IyOwotICAgIHRhcHNbM10gPSAxOwotICAgIHRhcHNbNF0g
PSBtX2ExOwotICAgIHRhcHNbNV0gPSBtX2EyOwotICAgIG1fYmlxdWFkU3RhdGUgPSAwOwotCi0g
ICAgaXBwc0lJUkluaXQ2NGZfQmlRdWFkXzMyZigmbV9iaXF1YWRTdGF0ZSwgdGFwcywgMSwgMCwg
bV9pcHBJbnRlcm5hbEJ1ZmZlcik7Ci0jZW5kaWYgLy8gVVNFKFdFQkFVRElPX0lQUCkKIH0KIAog
dm9pZCBCaXF1YWQ6OnNldExvd1NoZWxmUGFyYW1zKGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJsZSBk
YkdhaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5oCmluZGV4IGUwNTJkNzUu
LmU3MTA5MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVh
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5oCkBAIC0zMiwx
MCArMzIsNiBAQAogI2luY2x1ZGUgIkF1ZGlvQXJyYXkuaCIKICNpbmNsdWRlIDxjb21wbGV4Pgog
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgotIAotI2lmIFVTRShXRUJBVURJT19JUFApCi0jaW5jbHVk
ZSA8aXBwcy5oPgotI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFApCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtOTksMTAgKzk1LDYgQEAgcHJpdmF0ZToKICAgICBBdWRpb0RvdWJsZUFycmF5
IG1faW5wdXRCdWZmZXI7CiAgICAgQXVkaW9Eb3VibGVBcnJheSBtX291dHB1dEJ1ZmZlcjsKIAot
I2VsaWYgVVNFKFdFQkFVRElPX0lQUCkKLSAgICBJcHBzSUlSU3RhdGU2NGZfMzJmKiBtX2JpcXVh
ZFN0YXRlOwotICAgIElwcDh1KiBtX2lwcEludGVybmFsQnVmZmVyOwotCiAjZWxzZQogICAgIC8v
IEZpbHRlciBtZW1vcnkKICAgICBkb3VibGUgbV94MTsgLy8gaW5wdXQgZGVsYXllZCBieSAxIHNh
bXBsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29u
dm9sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZl
ci5jcHAKaW5kZXggZmVjNDM2YS4uZWRmYWVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwCkBAIC00NCw5ICs0NCw2IEBAIHVzaW5n
IG5hbWVzcGFjZSBWZWN0b3JNYXRoOwogICAgIAogRGlyZWN0Q29udm9sdmVyOjpEaXJlY3RDb252
b2x2ZXIoc2l6ZV90IGlucHV0QmxvY2tTaXplKQogICAgIDogbV9pbnB1dEJsb2NrU2l6ZShpbnB1
dEJsb2NrU2l6ZSkKLSNpZiBVU0UoV0VCQVVESU9fSVBQKQotICAgICwgbV9vdmVybGF5QnVmZmVy
KGlucHV0QmxvY2tTaXplKQotI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFApCiAgICAgLCBtX2J1
ZmZlcihpbnB1dEJsb2NrU2l6ZSAqIDIpCiB7CiB9CkBAIC03MSwxOSArNjgsNiBAQCB2b2lkIERp
cmVjdENvbnZvbHZlcjo6cHJvY2VzcyhBdWRpb0Zsb2F0QXJyYXkqIGNvbnZvbHV0aW9uS2VybmVs
LCBjb25zdCBmbG9hdCogcwogICAgIGlmICghaXNDb3B5R29vZCkKICAgICAgICAgcmV0dXJuOwog
Ci0jaWYgVVNFKFdFQkFVRElPX0lQUCkKLSAgICBmbG9hdCogb3V0cHV0QnVmZmVyID0gbV9idWZm
ZXIuZGF0YSgpOwotICAgIGZsb2F0KiBvdmVybGF5QnVmZmVyID0gbV9vdmVybGF5QnVmZmVyLmRh
dGEoKTsKLSAgICBib29sIGlzQ29weUdvb2QyID0gb3ZlcmxheUJ1ZmZlciAmJiBtX292ZXJsYXlC
dWZmZXIuc2l6ZSgpID49IGtlcm5lbFNpemUgJiYgbV9idWZmZXIuc2l6ZSgpID09IG1faW5wdXRC
bG9ja1NpemUgKiAyOwotICAgIEFTU0VSVChpc0NvcHlHb29kMik7Ci0gICAgaWYgKCFpc0NvcHlH
b29kMikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXBwc0NvbnZfMzJmKHN0YXRpY19jYXN0PGNv
bnN0IElwcDMyZio+KHNvdXJjZVApLCBmcmFtZXNUb1Byb2Nlc3MsIHN0YXRpY19jYXN0PElwcDMy
Zio+KGtlcm5lbFApLCBrZXJuZWxTaXplLCBzdGF0aWNfY2FzdDxJcHAzMmYqPihvdXRwdXRCdWZm
ZXIpKTsKLQotICAgIHZhZGQob3V0cHV0QnVmZmVyLCAxLCBvdmVybGF5QnVmZmVyLCAxLCBkZXN0
UCwgMSwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICBtZW1jcHkob3ZlcmxheUJ1ZmZlciwgb3V0cHV0
QnVmZmVyICsgbV9pbnB1dEJsb2NrU2l6ZSwgc2l6ZW9mKGZsb2F0KSAqIGtlcm5lbFNpemUpOwot
I2Vsc2UKICAgICBmbG9hdCogaW5wdXRQID0gbV9idWZmZXIuZGF0YSgpICsgbV9pbnB1dEJsb2Nr
U2l6ZTsKIAogICAgIC8vIENvcHkgc2FtcGxlcyB0byAybmQgaGFsZiBvZiBpbnB1dCBidWZmZXIu
CkBAIC0zNjksMTUgKzM1MywxMSBAQCB2b2lkIERpcmVjdENvbnZvbHZlcjo6cHJvY2VzcyhBdWRp
b0Zsb2F0QXJyYXkqIGNvbnZvbHV0aW9uS2VybmVsLCBjb25zdCBmbG9hdCogcwogCiAgICAgLy8g
Q29weSAybmQgaGFsZiBvZiBpbnB1dCBidWZmZXIgdG8gMXN0IGhhbGYuCiAgICAgbWVtY3B5KG1f
YnVmZmVyLmRhdGEoKSwgaW5wdXRQLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsK
LSNlbmRpZgogfQogCiB2b2lkIERpcmVjdENvbnZvbHZlcjo6cmVzZXQoKQogewogICAgIG1fYnVm
ZmVyLnplcm8oKTsKLSNpZiBVU0UoV0VCQVVESU9fSVBQKQotICAgIG1fb3ZlcmxheUJ1ZmZlci56
ZXJvKCk7Ci0jZW5kaWYgLy8gVVNFKFdFQkFVRElPX0lQUCkKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0
Q29udm9sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2
ZXIuaAppbmRleCA1OGYwMTJhLi43Y2Q4NzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaApAQCAtMzEsMTAgKzMxLDYgQEAKIAogI2luY2x1
ZGUgIkF1ZGlvQXJyYXkuaCIKIAotI2lmIFVTRShXRUJBVURJT19JUFApCi0jaW5jbHVkZSA8aXBw
cy5oPgotI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFApCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRGlyZWN0Q29udm9sdmVyIHsKQEAgLTQ4LDkgKzQ0LDYgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBzaXplX3QgbV9pbnB1dEJsb2NrU2l6ZTsKIAotI2lmIFVTRShXRUJBVURJT19J
UFApCi0gICAgQXVkaW9GbG9hdEFycmF5IG1fb3ZlcmxheUJ1ZmZlcjsKLSNlbmRpZiAvLyBVU0Uo
V0VCQVVESU9fSVBQKQogICAgIEF1ZGlvRmxvYXRBcnJheSBtX2J1ZmZlcjsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oCmluZGV4IDhlMGYyOTMuLjdhM2ExNDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaApAQCAtMzEsMTggKzMx
LDEwIEBACiAKICNpbmNsdWRlICJBdWRpb0FycmF5LmgiCiAKLSNpZiBPUyhEQVJXSU4pICYmICFV
U0UoV0VCQVVESU9fRkZNUEVHKQotI2RlZmluZSBVU0VfQUNDRUxFUkFURV9GRlQgMQotI2Vsc2UK
LSNkZWZpbmUgVVNFX0FDQ0VMRVJBVEVfRkZUIDAKLSNlbmRpZgotCi0jaWYgVVNFX0FDQ0VMRVJB
VEVfRkZUCisjaWYgT1MoREFSV0lOKQogI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5o
PgogI2VuZGlmCiAKLSNpZiAhVVNFX0FDQ0VMRVJBVEVfRkZUCi0KICNpZiBVU0UoV0VCQVVESU9f
R1NUUkVBTUVSKQogI2luY2x1ZGUgPGdsaWIuaD4KIEdfQkVHSU5fREVDTFMKQEAgLTUwLDE5ICs0
Miw2IEBAIEdfQkVHSU5fREVDTFMKIEdfRU5EX0RFQ0xTCiAjZW5kaWYgLy8gVVNFKFdFQkFVRElP
X0dTVFJFQU1FUikKIAotI2lmIFVTRShXRUJBVURJT19PUEVOTUFYX0RMX0ZGVCkKLSNpbmNsdWRl
ICJkbC9zcC9hcGkvYXJtU1AuaCIKLSNpbmNsdWRlICJkbC9zcC9hcGkvb214U1AuaCIKLSNlbGlm
IFVTRShXRUJBVURJT19GRk1QRUcpCi1zdHJ1Y3QgUkRGVENvbnRleHQ7Ci0jZW5kaWYKLQotI2Vu
ZGlmIC8vICFVU0VfQUNDRUxFUkFURV9GRlQKLQotI2lmIFVTRShXRUJBVURJT19JUFApCi0jaW5j
bHVkZSA8aXBwcy5oPgotI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFApCi0KICNpbmNsdWRlIDxt
ZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CkBAIC0xMTEsNyArOTAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBpbnRlcnBvbGF0ZUZy
ZXF1ZW5jeUNvbXBvbmVudHMoY29uc3QgRkZURnJhbWUmIGZyYW1lMSwgY29uc3QgRkZURnJhbWUm
IGZyYW1lMiwgZG91YmxlIHgpOwogCi0jaWYgVVNFX0FDQ0VMRVJBVEVfRkZUCisjaWYgT1MoREFS
V0lOKQogICAgIERTUFNwbGl0Q29tcGxleCYgZHNwU3BsaXRDb21wbGV4KCkgeyByZXR1cm4gbV9m
cmFtZTsgfQogICAgIERTUFNwbGl0Q29tcGxleCBkc3BTcGxpdENvbXBsZXgoKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lOyB9CiAKQEAgLTEyNCwxOSArMTAzLDcgQEAgcHJpdmF0ZToKICAgICBEU1BT
cGxpdENvbXBsZXggbV9mcmFtZTsKICAgICBBdWRpb0Zsb2F0QXJyYXkgbV9yZWFsRGF0YTsKICAg
ICBBdWRpb0Zsb2F0QXJyYXkgbV9pbWFnRGF0YTsKLSNlbHNlIC8vICFVU0VfQUNDRUxFUkFURV9G
RlQKLQotI2lmIFVTRShXRUJBVURJT19GRk1QRUcpCi0gICAgc3RhdGljIFJERlRDb250ZXh0KiBj
b250ZXh0Rm9yU2l6ZSh1bnNpZ25lZCBmZnRTaXplLCBpbnQgdHJhbnMpOwotCi0gICAgUkRGVENv
bnRleHQqIG1fZm9yd2FyZENvbnRleHQ7Ci0gICAgUkRGVENvbnRleHQqIG1faW52ZXJzZUNvbnRl
eHQ7Ci0KLSAgICBmbG9hdCogZ2V0VXBUb0RhdGVDb21wbGV4RGF0YSgpOwotICAgIEF1ZGlvRmxv
YXRBcnJheSBtX2NvbXBsZXhEYXRhOwotICAgIEF1ZGlvRmxvYXRBcnJheSBtX3JlYWxEYXRhOwot
ICAgIEF1ZGlvRmxvYXRBcnJheSBtX2ltYWdEYXRhOwotI2VuZGlmIC8vIFVTRShXRUJBVURJT19G
Rk1QRUcpCisjZW5kaWYKIAogI2lmIFVTRShXRUJBVURJT19HU1RSRUFNRVIpCiAgICAgR3N0RkZU
RjMyKiBtX2ZmdDsKQEAgLTE0NSwyOSArMTEyLDYgQEAgcHJpdmF0ZToKICAgICBBdWRpb0Zsb2F0
QXJyYXkgbV9yZWFsRGF0YTsKICAgICBBdWRpb0Zsb2F0QXJyYXkgbV9pbWFnRGF0YTsKICNlbmRp
ZiAvLyBVU0UoV0VCQVVESU9fR1NUUkVBTUVSKQotCi0jaWYgVVNFKFdFQkFVRElPX0lQUCkKLSAg
ICBJcHA4dSogbV9idWZmZXI7Ci0gICAgSXBwc0RGVFNwZWNfUl8zMmYqIG1fREZUU3BlYzsKLQot
ICAgIGZsb2F0KiBnZXRVcFRvRGF0ZUNvbXBsZXhEYXRhKCk7Ci0gICAgQXVkaW9GbG9hdEFycmF5
IG1fY29tcGxleERhdGE7Ci0gICAgQXVkaW9GbG9hdEFycmF5IG1fcmVhbERhdGE7Ci0gICAgQXVk
aW9GbG9hdEFycmF5IG1faW1hZ0RhdGE7Ci0jZW5kaWYgLy8gVVNFKFdFQkFVRElPX0lQUCkKLQot
I2lmIFVTRShXRUJBVURJT19PUEVOTUFYX0RMX0ZGVCkKLSAgICBzdGF0aWMgT01YRkZUU3BlY19S
X0YzMiogY29udGV4dEZvclNpemUodW5zaWduZWQgbG9nMkZGVFNpemUpOwotCi0gICAgT01YRkZU
U3BlY19SX0YzMiogbV9mb3J3YXJkQ29udGV4dDsKLSAgICBPTVhGRlRTcGVjX1JfRjMyKiBtX2lu
dmVyc2VDb250ZXh0OwotCi0gICAgQXVkaW9GbG9hdEFycmF5IG1fY29tcGxleERhdGE7Ci0gICAg
QXVkaW9GbG9hdEFycmF5IG1fcmVhbERhdGE7Ci0gICAgQXVkaW9GbG9hdEFycmF5IG1faW1hZ0Rh
dGE7Ci0jZW5kaWYKLSAgICAKLSNlbmRpZiAvLyAhVVNFX0FDQ0VMRVJBVEVfRkZUCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
RkZURnJhbWVTdHViLmNwcAppbmRleCA1NmM4Zjc2Li4zZTQyNTdhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHAKQEAgLTI5LDcgKzI5LDcgQEAK
IAogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAKLSNpZiAhT1MoREFSV0lOKSAmJiAhVVNFKFdFQkFV
RElPX0ZGTVBFRykgJiYgIVVTRShXRUJBVURJT19HU1RSRUFNRVIpICYmICFVU0UoV0VCQVVESU9f
SVBQKSAmJiAhVVNFKFdFQkFVRElPX09QRU5NQVhfRExfRkZUKQorI2lmICFPUyhEQVJXSU4pICYm
ICFVU0UoV0VCQVVESU9fR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiRkZURnJhbWUuaCIKIApAQCAt
MTAyLDYgKzEwMiw2IEBAIGZsb2F0KiBGRlRGcmFtZTo6aW1hZ0RhdGEoKSBjb25zdAogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyAhT1MoREFSV0lOKSAmJiAhVVNFKFdFQkFV
RElPX0ZGTVBFRykgJiYgIVVTRShXRUJBVURJT19HU1RSRUFNRVIpICYmICFVU0UoV0VCQVVESU9f
SVBQKQorI2VuZGlmIC8vICFPUyhEQVJXSU4pICYmICFVU0UoV0VCQVVESU9fR1NUUkVBTUVSKQog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2ZmbXBlZy9GRlRGcmFtZUZGTVBFRy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9mZm1wZWcvRkZURnJhbWVGRk1QRUcuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyMGNiODA4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2ZmbXBlZy9GRlRGcmFtZUZGTVBFRy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIEZGVEZyYW1lIGltcGxlbWVudGF0aW9uIHVzaW5nIEZG
bXBlZydzIFJERlQgYWxnb3JpdGhtLAotLy8gc3VpdGFibGUgZm9yIHVzZSBvbiBXaW5kb3dzIGFu
ZCBMaW51eC4KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykK
LQotI2lmIFVTRShXRUJBVURJT19GRk1QRUcpCi0KLSNpbmNsdWRlICJGRlRGcmFtZS5oIgotCi0j
aW5jbHVkZSAiVmVjdG9yTWF0aC5oIgotCi1leHRlcm4gIkMiIHsKLSAgICAjaW5jbHVkZSA8bGli
YXZjb2RlYy9hdmZmdC5oPgotfQotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFt
ZXNwYWNlIHsKLQotc3RydWN0IEZGVENvbXBsZXhQcm94eSB7Ci0gICAgaW50MTZfdCByZTsKLSAg
ICBpbnQxNl90IGltOwotfTsKLQotc3RydWN0IEZGVENvbnRleHRQcm94eSB7Ci0gICAgaW50IG5i
aXRzOwotICAgIGludCBpbnZlcnNlOwotICAgIHVpbnQxNl90KiByZXZ0YWI7Ci0gICAgRkZUQ29t
cGxleFByb3h5KiB0bXBCdWY7Ci0gICAgaW50IG1kY3RTaXplOwotICAgIGludCBtZGN0Qml0czsK
LSAgICB2b2lkKiB0Y29zOwotICAgIHZvaWQqIHRzaW47Ci0gICAgdm9pZCAoKmZmdFBlcm11dGUp
KCk7Ci0gICAgdm9pZCAoKmZmdENhbGMpKCk7Ci0gICAgdm9pZCAoKmltZGN0Q2FsYykoKTsKLSAg
ICB2b2lkICgqaW1kY3RIYWxmKSgpOwotICAgIHZvaWQgKCptZGN0Q2FsYykoKTsKLSAgICB2b2lk
ICgqbWRjdENhbGN3KSgpOwotICAgIGludCBmZnRQZXJtdXRhdGlvbjsKLSAgICBpbnQgbWRjdFBl
cm11dGF0aW9uOwotfTsKLQotc3RydWN0IFJERlRDb250ZXh0UHJveHkgewotICAgIGludCBuYml0
czsKLSAgICBpbnQgaW52ZXJzZTsKLSAgICBpbnQgc2lnbkNvbnZlbnRpb247Ci0gICAgY29uc3Qg
dm9pZCogdGNvczsKLSAgICBjb25zdCB2b2lkKiB0c2luOwotICAgIEZGVENvbnRleHRQcm94eSBm
ZnQ7Ci0gICAgdm9pZCAoKnJkZnRfY2FsYykoKTsKLX07Ci0KLX0KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jb25zdCBpbnQga01heEZGVFBvdzJTaXplID0gMjQ7Ci0KLS8vIE5vcm1hbCBjb25z
dHJ1Y3RvcjogYWxsb2NhdGVzIGZvciBhIGdpdmVuIGZmdFNpemUuCi1GRlRGcmFtZTo6RkZURnJh
bWUodW5zaWduZWQgZmZ0U2l6ZSkKLSAgICA6IG1fRkZUU2l6ZShmZnRTaXplKQotICAgICwgbV9s
b2cyRkZUU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nMihmZnRTaXplKSkpCi0gICAgLCBt
X2ZvcndhcmRDb250ZXh0KDApCi0gICAgLCBtX2ludmVyc2VDb250ZXh0KDApCi0gICAgLCBtX2Nv
bXBsZXhEYXRhKGZmdFNpemUpCi0gICAgLCBtX3JlYWxEYXRhKGZmdFNpemUgLyAyKQotICAgICwg
bV9pbWFnRGF0YShmZnRTaXplIC8gMikKLXsKLSAgICAvLyBXZSBvbmx5IGFsbG93IHBvd2VyIG9m
IHR3by4KLSAgICBBU1NFUlQoMVVMIDw8IG1fbG9nMkZGVFNpemUgPT0gbV9GRlRTaXplKTsKLQot
ICAgIG1fZm9yd2FyZENvbnRleHQgPSBjb250ZXh0Rm9yU2l6ZShmZnRTaXplLCBERlRfUjJDKTsK
LSAgICBtX2ludmVyc2VDb250ZXh0ID0gY29udGV4dEZvclNpemUoZmZ0U2l6ZSwgSURGVF9DMlIp
OwotfQotCi0vLyBDcmVhdGVzIGEgYmxhbmsvZW1wdHkgZnJhbWUgKGludGVycG9sYXRlKCkgbXVz
dCBsYXRlciBiZSBjYWxsZWQpLgotRkZURnJhbWU6OkZGVEZyYW1lKCkKLSAgICA6IG1fRkZUU2l6
ZSgwKQotICAgICwgbV9sb2cyRkZUU2l6ZSgwKQotICAgICwgbV9mb3J3YXJkQ29udGV4dCgwKQot
ICAgICwgbV9pbnZlcnNlQ29udGV4dCgwKQotewotfQotCi0vLyBDb3B5IGNvbnN0cnVjdG9yLgot
RkZURnJhbWU6OkZGVEZyYW1lKGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fRkZUU2l6
ZShmcmFtZS5tX0ZGVFNpemUpCi0gICAgLCBtX2xvZzJGRlRTaXplKGZyYW1lLm1fbG9nMkZGVFNp
emUpCi0gICAgLCBtX2ZvcndhcmRDb250ZXh0KDApCi0gICAgLCBtX2ludmVyc2VDb250ZXh0KDAp
Ci0gICAgLCBtX2NvbXBsZXhEYXRhKGZyYW1lLm1fRkZUU2l6ZSkKLSAgICAsIG1fcmVhbERhdGEo
ZnJhbWUubV9GRlRTaXplIC8gMikKLSAgICAsIG1faW1hZ0RhdGEoZnJhbWUubV9GRlRTaXplIC8g
MikKLXsKLSAgICBtX2ZvcndhcmRDb250ZXh0ID0gY29udGV4dEZvclNpemUobV9GRlRTaXplLCBE
RlRfUjJDKTsKLSAgICBtX2ludmVyc2VDb250ZXh0ID0gY29udGV4dEZvclNpemUobV9GRlRTaXpl
LCBJREZUX0MyUik7Ci0KLSAgICAvLyBDb3B5L3NldHVwIGZyYW1lIGRhdGEuCi0gICAgdW5zaWdu
ZWQgbmJ5dGVzID0gc2l6ZW9mKGZsb2F0KSAqIChtX0ZGVFNpemUgLyAyKTsKLSAgICBtZW1jcHko
cmVhbERhdGEoKSwgZnJhbWUucmVhbERhdGEoKSwgbmJ5dGVzKTsKLSAgICBtZW1jcHkoaW1hZ0Rh
dGEoKSwgZnJhbWUuaW1hZ0RhdGEoKSwgbmJ5dGVzKTsKLX0KLQotdm9pZCBGRlRGcmFtZTo6aW5p
dGlhbGl6ZSgpCi17Ci19Ci0KLXZvaWQgRkZURnJhbWU6OmNsZWFudXAoKQotewotfQotCi1GRlRG
cmFtZTo6fkZGVEZyYW1lKCkKLXsKLSAgICBhdl9yZGZ0X2VuZChtX2ZvcndhcmRDb250ZXh0KTsK
LSAgICBhdl9yZGZ0X2VuZChtX2ludmVyc2VDb250ZXh0KTsKLX0KLQotdm9pZCBGRlRGcmFtZTo6
bXVsdGlwbHkoY29uc3QgRkZURnJhbWUmIGZyYW1lKQotewotICAgIEZGVEZyYW1lJiBmcmFtZTEg
PSAqdGhpczsKLSAgICBGRlRGcmFtZSYgZnJhbWUyID0gY29uc3RfY2FzdDxGRlRGcmFtZSY+KGZy
YW1lKTsKLQotICAgIGZsb2F0KiByZWFsUDEgPSBmcmFtZTEucmVhbERhdGEoKTsKLSAgICBmbG9h
dCogaW1hZ1AxID0gZnJhbWUxLmltYWdEYXRhKCk7Ci0gICAgY29uc3QgZmxvYXQqIHJlYWxQMiA9
IGZyYW1lMi5yZWFsRGF0YSgpOwotICAgIGNvbnN0IGZsb2F0KiBpbWFnUDIgPSBmcmFtZTIuaW1h
Z0RhdGEoKTsKLQotICAgIHVuc2lnbmVkIGhhbGZTaXplID0gZmZ0U2l6ZSgpIC8gMjsKLSAgICBm
bG9hdCByZWFsMCA9IHJlYWxQMVswXTsKLSAgICBmbG9hdCBpbWFnMCA9IGltYWdQMVswXTsKLQot
ICAgIFZlY3Rvck1hdGg6Onp2bXVsKHJlYWxQMSwgaW1hZ1AxLCByZWFsUDIsIGltYWdQMiwgcmVh
bFAxLCBpbWFnUDEsIGhhbGZTaXplKTsgCi0KLSAgICAvLyBNdWx0aXBseSB0aGUgcGFja2VkIERD
L255cXVpc3QgY29tcG9uZW50Ci0gICAgcmVhbFAxWzBdID0gcmVhbDAgKiByZWFsUDJbMF07Ci0g
ICAgaW1hZ1AxWzBdID0gaW1hZzAgKiBpbWFnUDJbMF07Ci0KLSAgICAvLyBTY2FsZSBhY2NvdW50
cyB0aGUgcGVjdWxpYXIgc2NhbGluZyBvZiB2ZWNMaWIgb24gdGhlIE1hYy4KLSAgICAvLyBUaGlz
IGVuc3VyZXMgdGhlIHJpZ2h0IHNjYWxpbmcgYWxsIHRoZSB3YXkgYmFjayB0byBpbnZlcnNlIEZG
VC4KLSAgICAvLyBGSVhNRTogaWYgd2UgY2hhbmdlIHRoZSBzY2FsaW5nIG9uIHRoZSBNYWMgdGhl
biB0aGlzIHNjYWxlCi0gICAgLy8gZmFjdG9yIHdpbGwgbmVlZCB0byBjaGFuZ2UgdG9vLgotICAg
IGZsb2F0IHNjYWxlID0gMC41ZjsKLQotICAgIFZlY3Rvck1hdGg6OnZzbXVsKHJlYWxQMSwgMSwg
JnNjYWxlLCByZWFsUDEsIDEsIGhhbGZTaXplKTsKLSAgICBWZWN0b3JNYXRoOjp2c211bChpbWFn
UDEsIDEsICZzY2FsZSwgaW1hZ1AxLCAxLCBoYWxmU2l6ZSk7Ci19Ci0KLXZvaWQgRkZURnJhbWU6
OmRvRkZUKGNvbnN0IGZsb2F0KiBkYXRhKQotewotICAgIC8vIENvcHkgc2luY2UgcHJvY2Vzc2lu
ZyBpcyBpbi1wbGFjZS4KLSAgICBmbG9hdCogcCA9IG1fY29tcGxleERhdGEuZGF0YSgpOwotICAg
IG1lbWNweShwLCBkYXRhLCBzaXplb2YoZmxvYXQpICogbV9GRlRTaXplKTsKLQotICAgIC8vIENv
bXB1dGUgRm9yd2FyZCB0cmFuc2Zvcm0uCi0gICAgYXZfcmRmdF9jYWxjKG1fZm9yd2FyZENvbnRl
eHQsIHApOwotCi0gICAgLy8gRGUtaW50ZXJsZWF2ZSB0byBzZXBhcmF0ZSByZWFsIGFuZCBjb21w
bGV4IGFycmF5cy4KLSAgICBpbnQgbGVuID0gbV9GRlRTaXplIC8gMjsKLQotICAgIC8vIEZJWE1F
OiBzZWUgYWJvdmUgY29tbWVudCBpbiBtdWx0aXBseSgpIGFib3V0IHNjYWxpbmcuCi0gICAgY29u
c3QgZmxvYXQgc2NhbGUgPSAyLjBmOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsr
aSkgewotICAgICAgICBpbnQgYmFzZUNvbXBsZXhJbmRleCA9IDIgKiBpOwotICAgICAgICAvLyBt
X3JlYWxEYXRhWzBdIGlzIHRoZSBEQyBjb21wb25lbnQgYW5kIG1faW1hZ0RhdGFbMF0gaXMgdGhl
IG55cXVpc3QgY29tcG9uZW50Ci0gICAgICAgIC8vIHNpbmNlIHRoZSBpbnRlcmxlYXZlZCBjb21w
bGV4IGRhdGEgaXMgcGFja2VkLgotICAgICAgICBtX3JlYWxEYXRhW2ldID0gc2NhbGUgKiBwW2Jh
c2VDb21wbGV4SW5kZXhdOwotICAgICAgICBtX2ltYWdEYXRhW2ldID0gc2NhbGUgKiBwW2Jhc2VD
b21wbGV4SW5kZXggKyAxXTsKLSAgICB9Ci19Ci0KLXZvaWQgRkZURnJhbWU6OmRvSW52ZXJzZUZG
VChmbG9hdCogZGF0YSkKLXsKLSAgICAvLyBQcmVwYXJlIGludGVybGVhdmVkIGRhdGEuCi0gICAg
ZmxvYXQqIGludGVybGVhdmVkRGF0YSA9IGdldFVwVG9EYXRlQ29tcGxleERhdGEoKTsKLQotICAg
IC8vIENvbXB1dGUgaW52ZXJzZSB0cmFuc2Zvcm0uCi0gICAgYXZfcmRmdF9jYWxjKG1faW52ZXJz
ZUNvbnRleHQsIGludGVybGVhdmVkRGF0YSk7Ci0KLSAgICAvLyBTY2FsZSBzbyB0aGF0IGEgZm9y
d2FyZCB0aGVuIGludmVyc2UgRkZUIHlpZWxkcyBleGFjdGx5IHRoZSBvcmlnaW5hbCBkYXRhLgot
ICAgIGNvbnN0IGZsb2F0IHNjYWxlID0gMS4wIC8gbV9GRlRTaXplOwotICAgIFZlY3Rvck1hdGg6
OnZzbXVsKGludGVybGVhdmVkRGF0YSwgMSwgJnNjYWxlLCBkYXRhLCAxLCBtX0ZGVFNpemUpOwot
fQotCi1mbG9hdCogRkZURnJhbWU6OnJlYWxEYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29u
c3RfY2FzdDxmbG9hdCo+KG1fcmVhbERhdGEuZGF0YSgpKTsKLX0KLQotZmxvYXQqIEZGVEZyYW1l
OjppbWFnRGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8ZmxvYXQqPihtX2lt
YWdEYXRhLmRhdGEoKSk7Ci19Ci0KLWZsb2F0KiBGRlRGcmFtZTo6Z2V0VXBUb0RhdGVDb21wbGV4
RGF0YSgpCi17Ci0gICAgLy8gRklYTUU6IGlmIHdlIGNhbid0IGNvbXBsZXRlbHkgZ2V0IHJpZCBv
ZiB0aGlzIG1ldGhvZCwgU1NFCi0gICAgLy8gb3B0aW1pemF0aW9uIGNvdWxkIGJlIGNvbnNpZGVy
ZWQgaWYgaXQgc2hvd3MgdXAgaG90IG9uIHByb2ZpbGVzLgotICAgIGludCBsZW4gPSBtX0ZGVFNp
emUgLyAyOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgaW50
IGJhc2VDb21wbGV4SW5kZXggPSAyICogaTsKLSAgICAgICAgbV9jb21wbGV4RGF0YVtiYXNlQ29t
cGxleEluZGV4XSA9IG1fcmVhbERhdGFbaV07Ci0gICAgICAgIG1fY29tcGxleERhdGFbYmFzZUNv
bXBsZXhJbmRleCArIDFdID0gbV9pbWFnRGF0YVtpXTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8ZmxvYXQqPihtX2NvbXBsZXhEYXRhLmRhdGEoKSk7Ci19Ci0KLVJERlRDb250ZXh0KiBG
RlRGcmFtZTo6Y29udGV4dEZvclNpemUodW5zaWduZWQgZmZ0U2l6ZSwgaW50IHRyYW5zKQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vbi1vcHRpbWFsLiBJZGVhbGx5LCB3ZSdkIGxpa2UgdG8g
c2hhcmUgdGhlIGNvbnRleHRzIGZvciBGRlRGcmFtZXMgb2YgdGhlIHNhbWUgc2l6ZS4KLSAgICAv
LyBCdXQgRkZtcGVnJ3MgUkRGVCB1c2VzIGEgc2NyYXRjaCBidWZmZXIgaW5zaWRlIHRoZSBjb250
ZXh0IGFuZCBzbyB0aGV5IGFyZSBub3QgdGhyZWFkLXNhZmUuCi0gICAgLy8gV2UgY291bGQgaW1w
cm92ZSB0aGlzIGJ5IHNoYXJpbmcgdGhlIEZGVEZyYW1lcyBvbiBhIHBlci10aHJlYWQgYmFzaXMu
Ci0gICAgQVNTRVJUKGZmdFNpemUpOwotICAgIGludCBwb3cyc2l6ZSA9IHN0YXRpY19jYXN0PGlu
dD4obG9nMihmZnRTaXplKSk7Ci0gICAgQVNTRVJUKHBvdzJzaXplIDwga01heEZGVFBvdzJTaXpl
KTsKLQotICAgIFJERlRDb250ZXh0KiBjb250ZXh0ID0gYXZfcmRmdF9pbml0KHBvdzJzaXplLCAo
UkRGVHJhbnNmb3JtVHlwZSl0cmFucyk7Ci0gICAgcmV0dXJuIGNvbnRleHQ7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vICFPUyhEQVJXSU4pICYmIFVTRShXRUJBVURJ
T19GRk1QRUcpCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaXBwL0ZGVEZyYW1lSVBQLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lwcC9GRlRGcmFtZUlQUC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDc0NzA1NzMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vaXBwL0ZGVEZyYW1lSVBQLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIEZGVEZyYW1lIGltcGxlbWVudGF0aW9uIHVzaW5nIEludGVsIElQUCdz
IERGVCBhbGdvcml0aG0sCi0vLyBzdWl0YWJsZSBmb3IgdXNlIG9uIExpbnV4LgotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaWYgVVNFKFdFQkFVRElP
X0lQUCkKLQotI2luY2x1ZGUgIkZGVEZyYW1lLmgiCi0KLSNpbmNsdWRlICJWZWN0b3JNYXRoLmgi
Ci0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNvbnN0IHVuc2lnbmVkIG1heGltdW1GRlRQb3dlcjJTaXplID0gMjQ7Ci0KLS8vIE5vcm1hbCBj
b25zdHJ1Y3RvcjogYWxsb2NhdGVzIGZvciBhIGdpdmVuIGZmdFNpemUuCi1GRlRGcmFtZTo6RkZU
RnJhbWUodW5zaWduZWQgZmZ0U2l6ZSkKLSAgICA6IG1fRkZUU2l6ZShmZnRTaXplKQotICAgICwg
bV9sb2cyRkZUU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nMihmZnRTaXplKSkpCi0gICAg
LCBtX2NvbXBsZXhEYXRhKGZmdFNpemUpCi0gICAgLCBtX3JlYWxEYXRhKGZmdFNpemUgLyAyKQot
ICAgICwgbV9pbWFnRGF0YShmZnRTaXplIC8gMikKLXsKLSAgICAvLyBXZSBvbmx5IGFsbG93IHBv
d2VyIG9mIHR3by4KLSAgICBBU1NFUlQoMVVMIDw8IG1fbG9nMkZGVFNpemUgPT0gbV9GRlRTaXpl
KTsKLSAgICBBU1NFUlQobV9sb2cyRkZUU2l6ZSA8PSBtYXhpbXVtRkZUUG93ZXIyU2l6ZSk7Ci0K
LSAgICBpcHBzREZUSW5pdEFsbG9jX1JfMzJmKCZtX0RGVFNwZWMsIG1fRkZUU2l6ZSwgSVBQX0ZG
VF9OT0RJVl9CWV9BTlksIGlwcEFsZ0hpbnRGYXN0KTsKLSAgICBpbnQgYnVmZmVyU2l6ZSA9IDA7
Ci0gICAgaXBwc0RGVEdldEJ1ZlNpemVfUl8zMmYobV9ERlRTcGVjLCAmYnVmZmVyU2l6ZSk7Ci0g
ICAgbV9idWZmZXIgPSBpcHBzTWFsbG9jXzh1KGJ1ZmZlclNpemUpOwotfQotCi0vLyBDcmVhdGVz
IGEgYmxhbmsvZW1wdHkgZnJhbWUgKGludGVycG9sYXRlKCkgbXVzdCBsYXRlciBiZSBjYWxsZWQp
LgotRkZURnJhbWU6OkZGVEZyYW1lKCkKLSAgICA6IG1fRkZUU2l6ZSgwKQotICAgICwgbV9sb2cy
RkZUU2l6ZSgwKQotewotfQotCi0vLyBDb3B5IGNvbnN0cnVjdG9yLgotRkZURnJhbWU6OkZGVEZy
YW1lKGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fRkZUU2l6ZShmcmFtZS5tX0ZGVFNp
emUpCi0gICAgLCBtX2xvZzJGRlRTaXplKGZyYW1lLm1fbG9nMkZGVFNpemUpCi0gICAgLCBtX2Nv
bXBsZXhEYXRhKGZyYW1lLm1fRkZUU2l6ZSkKLSAgICAsIG1fcmVhbERhdGEoZnJhbWUubV9GRlRT
aXplIC8gMikKLSAgICAsIG1faW1hZ0RhdGEoZnJhbWUubV9GRlRTaXplIC8gMikKLXsKLSAgICBp
cHBzREZUSW5pdEFsbG9jX1JfMzJmKCZtX0RGVFNwZWMsIG1fRkZUU2l6ZSwgSVBQX0ZGVF9OT0RJ
Vl9CWV9BTlksIGlwcEFsZ0hpbnRGYXN0KTsKLSAgICBpbnQgYnVmZmVyU2l6ZSA9IDA7Ci0gICAg
aXBwc0RGVEdldEJ1ZlNpemVfUl8zMmYobV9ERlRTcGVjLCAmYnVmZmVyU2l6ZSk7Ci0gICAgbV9i
dWZmZXIgPSBpcHBzTWFsbG9jXzh1KGJ1ZmZlclNpemUpOwotCi0gICAgLy8gQ29weS9zZXR1cCBm
cmFtZSBkYXRhLgotICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXMgPSBzaXplb2YoZmxvYXQpICog
bV9GRlRTaXplOwotICAgIG1lbWNweShyZWFsRGF0YSgpLCBmcmFtZS5yZWFsRGF0YSgpLCBudW1i
ZXJPZkJ5dGVzKTsKLSAgICBtZW1jcHkoaW1hZ0RhdGEoKSwgZnJhbWUuaW1hZ0RhdGEoKSwgbnVt
YmVyT2ZCeXRlcyk7Ci19Ci0KLXZvaWQgRkZURnJhbWU6OmluaXRpYWxpemUoKQotewotfQotCi12
b2lkIEZGVEZyYW1lOjpjbGVhbnVwKCkKLXsKLX0KLQotRkZURnJhbWU6On5GRlRGcmFtZSgpCi17
Ci0gICAgaXBwc0ZyZWUobV9idWZmZXIpOwotICAgIGlwcHNERlRGcmVlX1JfMzJmKG1fREZUU3Bl
Yyk7Ci19Ci0KLXZvaWQgRkZURnJhbWU6Om11bHRpcGx5KGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkK
LXsKLSAgICBGRlRGcmFtZSYgZnJhbWUxID0gKnRoaXM7Ci0gICAgRkZURnJhbWUmIGZyYW1lMiA9
IGNvbnN0X2Nhc3Q8RkZURnJhbWUmPihmcmFtZSk7Ci0KLSAgICBmbG9hdCogcmVhbFAxID0gZnJh
bWUxLnJlYWxEYXRhKCk7Ci0gICAgZmxvYXQqIGltYWdQMSA9IGZyYW1lMS5pbWFnRGF0YSgpOwot
ICAgIGNvbnN0IGZsb2F0KiByZWFsUDIgPSBmcmFtZTIucmVhbERhdGEoKTsKLSAgICBjb25zdCBm
bG9hdCogaW1hZ1AyID0gZnJhbWUyLmltYWdEYXRhKCk7Ci0KLSAgICB1bnNpZ25lZCBoYWxmU2l6
ZSA9IGZmdFNpemUoKSAvIDI7Ci0gICAgZmxvYXQgcmVhbDAgPSByZWFsUDFbMF07Ci0gICAgZmxv
YXQgaW1hZzAgPSBpbWFnUDFbMF07Ci0KLSAgICBWZWN0b3JNYXRoOjp6dm11bChyZWFsUDEsIGlt
YWdQMSwgcmVhbFAyLCBpbWFnUDIsIHJlYWxQMSwgaW1hZ1AxLCBoYWxmU2l6ZSk7IAotCi0gICAg
Ly8gTXVsdGlwbHkgdGhlIHBhY2tlZCBEQy9ueXF1aXN0IGNvbXBvbmVudAotICAgIHJlYWxQMVsw
XSA9IHJlYWwwICogcmVhbFAyWzBdOwotICAgIGltYWdQMVswXSA9IGltYWcwICogaW1hZ1AyWzBd
OwotCi0gICAgLy8gU2NhbGUgYWNjb3VudHMgdGhlIHBlY3VsaWFyIHNjYWxpbmcgb2YgdmVjTGli
IG9uIHRoZSBNYWMuCi0gICAgLy8gVGhpcyBlbnN1cmVzIHRoZSByaWdodCBzY2FsaW5nIGFsbCB0
aGUgd2F5IGJhY2sgdG8gaW52ZXJzZSBGRlQuCi0gICAgLy8gRklYTUU6IGlmIHdlIGNoYW5nZSB0
aGUgc2NhbGluZyBvbiB0aGUgTWFjIHRoZW4gdGhpcyBzY2FsZQotICAgIC8vIGZhY3RvciB3aWxs
IG5lZWQgdG8gY2hhbmdlIHRvby4KLSAgICBmbG9hdCBzY2FsZSA9IDAuNWY7Ci0KLSAgICBWZWN0
b3JNYXRoOjp2c211bChyZWFsUDEsIDEsICZzY2FsZSwgcmVhbFAxLCAxLCBoYWxmU2l6ZSk7Ci0g
ICAgVmVjdG9yTWF0aDo6dnNtdWwoaW1hZ1AxLCAxLCAmc2NhbGUsIGltYWdQMSwgMSwgaGFsZlNp
emUpOwotfQotCi12b2lkIEZGVEZyYW1lOjpkb0ZGVChjb25zdCBmbG9hdCogZGF0YSkKLXsKLSAg
ICBJcHAzMmYqIGNvbXBsZXhQID0gbV9jb21wbGV4RGF0YS5kYXRhKCk7Ci0KLSAgICAvLyBDb21w
dXRlIEZvcndhcmQgdHJhbnNmb3JtIHRvIHBlcm0gZm9ybWF0LgotICAgIGlwcHNERlRGd2RfUlRv
UGVybV8zMmYocmVpbnRlcnByZXRfY2FzdDxJcHAzMmYqPihjb25zdF9jYXN0PGZsb2F0Kj4oZGF0
YSkpLCBjb21wbGV4UCwgbV9ERlRTcGVjLCBtX2J1ZmZlcik7Ci0KLSAgICBjb25zdCBJcHAzMmYg
c2NhbGUgPSAyLjBmOwotCi0gICAgaXBwc011bENfMzJmX0koc2NhbGUsIGNvbXBsZXhQLCBtX0ZG
VFNpemUpOwotCi0gICAgSXBwMzJmKiByZWFsUCA9IG1fcmVhbERhdGEuZGF0YSgpOwotICAgIElw
cDMyZiogaW1hZ1AgPSBtX2ltYWdEYXRhLmRhdGEoKTsKLSAgICBpcHBzQ3BseFRvUmVhbF8zMmZj
KHJlaW50ZXJwcmV0X2Nhc3Q8SXBwMzJmYyo+KGNvbXBsZXhQKSwgcmVhbFAsIGltYWdQLCBtX0ZG
VFNpemUgPj4gMSk7Ci19Ci0KLXZvaWQgRkZURnJhbWU6OmRvSW52ZXJzZUZGVChmbG9hdCogZGF0
YSkKLXsKLSAgICBJcHAzMmYqIGNvbXBsZXhQID0gZ2V0VXBUb0RhdGVDb21wbGV4RGF0YSgpOwot
Ci0gICAgLy8gQ29tcHV0ZSBpbnZlcnNlIHRyYW5zZm9ybS4KLSAgICBpcHBzREZUSW52X1Blcm1U
b1JfMzJmKGNvbXBsZXhQLCByZWludGVycHJldF9jYXN0PElwcDMyZio+KGRhdGEpLCBtX0RGVFNw
ZWMsIG1fYnVmZmVyKTsKLQotICAgIC8vIFNjYWxlIHNvIHRoYXQgYSBmb3J3YXJkIHRoZW4gaW52
ZXJzZSBGRlQgeWllbGRzIGV4YWN0bHkgdGhlIG9yaWdpbmFsIGRhdGEuCi0gICAgY29uc3QgZmxv
YXQgc2NhbGUgPSAxLjAgLyAoMiAqIG1fRkZUU2l6ZSk7Ci0KLSAgICBpcHBzTXVsQ18zMmZfSShz
Y2FsZSwgcmVpbnRlcnByZXRfY2FzdDxJcHAzMmYqPihkYXRhKSwgbV9GRlRTaXplKTsKLX0KLQot
ZmxvYXQqIEZGVEZyYW1lOjpyZWFsRGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8ZmxvYXQqPihtX3JlYWxEYXRhLmRhdGEoKSk7Ci19Ci0KLWZsb2F0KiBGRlRGcmFtZTo6aW1h
Z0RhdGEoKSBjb25zdAotewotICAgIHJldHVybiBjb25zdF9jYXN0PGZsb2F0Kj4obV9pbWFnRGF0
YS5kYXRhKCkpOwotfQotCi1mbG9hdCogRkZURnJhbWU6OmdldFVwVG9EYXRlQ29tcGxleERhdGEo
KQotewotICAgIGludCBsZW4gPSBtX0ZGVFNpemUgPj4gMTsKLSAgICAvLyBNZXJnZSB0aGUgcmVh
bCBhbmQgaW1hZ2ltYXJ5IHZlY3RvcnMgdG8gY29tcGxleCB2ZWN0b3IuCi0gICAgSXBwMzJmKiBy
ZWFsUCA9IG1fcmVhbERhdGEuZGF0YSgpOwotICAgIElwcDMyZiogaW1hZ1AgPSBtX2ltYWdEYXRh
LmRhdGEoKTsKLSAgICBJcHAzMmZjKiBjb21wbGV4UCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SXBwMzJm
Yyo+KG1fY29tcGxleERhdGEuZGF0YSgpKTsKLSAgICBpcHBzUmVhbFRvQ3BseF8zMmYocmVhbFAs
IGltYWdQLCBjb21wbGV4UCwgbGVuKTsKLQotICAgIHJldHVybiBjb25zdF9jYXN0PGZsb2F0Kj4o
bV9jb21wbGV4RGF0YS5kYXRhKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBVU0UoV0VCQVVESU9fSVBQKQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1h
Yy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvRkZURnJhbWVNYWMuY3Bw
CmluZGV4IDk3NWYyODUuLjM2NDFmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFjLmNwcApAQCAtMzIsNyArMzIsNyBAQAogCiAjaWYgRU5B
QkxFKFdFQl9BVURJTykKIAotI2lmIE9TKERBUldJTikgJiYgIVVTRShXRUJBVURJT19GRk1QRUcp
CisjaWYgT1MoREFSV0lOKQogCiAjaW5jbHVkZSAiRkZURnJhbWUuaCIKIApAQCAtMTg4LDYgKzE4
OCw2IEBAIGZsb2F0KiBGRlRGcmFtZTo6aW1hZ0RhdGEoKSBjb25zdAogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyAjaWYgT1MoREFSV0lOKSAmJiAhVVNFKFdFQkFVRElPX0ZG
TVBFRykKKyNlbmRpZiAvLyAjaWYgT1MoREFSV0lOKQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9B
VURJTykKLS0gCjIuMS4wLnJjMQ==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236359</attachid>
            <date>2014-08-11 02:13:03 -0700</date>
            <delta_ts>2014-08-11 06:52:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>26360</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA5ZDgxMDI0YWQyMTllOGJhOGQ5MDQwNTM5Y2ZjMjU0NmRmZWEzMDQ2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDExIEF1ZyAyMDE0IDA4OjUwOjU2ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
UGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMzEgKysrCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0FycmF5
LmggICAgICAgICB8ICAgNSAtCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQu
Y3BwICAgICAgICAgICB8ICAzMSArLS0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Jp
cXVhZC5oICAgICAgICAgICAgIHwgICA4IC0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0RpcmVjdENvbnZvbHZlci5jcHAgIHwgIDIwIC0tCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9EaXJlY3RDb252b2x2ZXIuaCAgICB8ICAgNyAtCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9GRlRGcmFtZS5oICAgICAgICAgICB8ICA2MiArLS0tLQogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcCAgICAgfCAgIDQgKy0KIC4uLi9wbGF0Zm9y
bS9hdWRpby9mZm1wZWcvRkZURnJhbWVGRk1QRUcuY3BwICAgICAgIHwgMjUzIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaXBwL0ZGVEZyYW1lSVBQ
LmNwcCAgfCAxODkgLS0tLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9tYWMvRkZURnJhbWVNYWMuY3BwICB8ICAgNCArLQogMTEgZmlsZXMgY2hhbmdlZCwgMzkgaW5z
ZXJ0aW9ucygrKSwgNTc1IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2ZmbXBlZy9GRlRGcmFtZUZGTVBFRy5jcHAKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pcHAvRkZURnJhbWVJUFAu
Y3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IGRiNjMwYmMuLjg3NWNlM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzNCBAQAorMjAxNC0wOC0xMCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW1dlYkF1ZGlvXSBGRlRGcmFtZSBpcyBjbHV0dGVyZWQgd2l0aCBkZWFk
IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NTc1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENs
ZWFuZWQgdXAgdW51c2VkIEZGVEZyYW1lIGltcGxlbWVudGF0aW9ucyBmcm9tIHRoZSB0cmVlLiBJ
ZiB0aGUKKyAgICAgICAgRkZNUEVHIG9yIElQUCB2ZXJzaW9ucyBhcmUgbmVlZGVkIGxhdGVyIG9u
IGFnYWluIHRoaXMgcGF0Y2ggY2FuIGJlCisgICAgICAgIHJvbGxlZCBvdXQuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCB0aGUgY29kZSByZW1vdmVkIHdhcyBkaXNhYmxlZCBvbiBhbGwgcG9ydHMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QmlxdWFkOjpCaXF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjp+QmlxdWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpC
aXF1YWQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0Tm9ybWFsaXplZENv
ZWZmaWNpZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmg6CisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRpcmVjdENvbnZvbHZlcjo6RGlyZWN0Q29udm9sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
cmVjdENvbnZvbHZlcjo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RDb252b2x2
ZXI6OnJlc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZmZtcGVn
L0ZGVEZyYW1lRkZNUEVHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9p
cHAvRkZURnJhbWVJUFAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21h
Yy9GRlRGcmFtZU1hYy5jcHA6CisKIDIwMTQtMDgtMTAgIEJlbmphbWluIFBvdWxhaW4gIDxicG91
bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGlucHV0U3BlZWNoLnBuZwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9BcnJheS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9BcnJheS5oCmluZGV4IDdmMDE4YzkuLjYzMDdl
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQXJyYXku
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0FycmF5LmgKQEAgLTU1
LDEyICs1NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFsbG9jYXRlKENoZWNrZWQ8c2l6ZV90PiBu
KQogICAgIHsKICAgICAgICAgQ2hlY2tlZDx1bnNpZ25lZD4gaW5pdGlhbFNpemUgPSBzaXplb2Yo
VCkgKiBuOwotCi0jaWYgVVNFKFdFQkFVRElPX0ZGTVBFRykgfHwgVVNFKFdFQkFVRElPX09QRU5N
QVhfRExfRkZUKQotICAgICAgICBjb25zdCBzaXplX3QgYWxpZ25tZW50ID0gMzI7Ci0jZWxzZQog
ICAgICAgICBjb25zdCBzaXplX3QgYWxpZ25tZW50ID0gMTY7Ci0jZW5kaWYKIAogICAgICAgICBp
ZiAobV9hbGxvY2F0aW9uKQogICAgICAgICAgICAgZmFzdEZyZWUobV9hbGxvY2F0aW9uKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCmluZGV4IDJlNDBhY2YuLmU4Zjkw
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcApAQCAtNTUsMTIg
KzU1LDYgQEAgQmlxdWFkOjpCaXF1YWQoKQogICAgIG1fb3V0cHV0QnVmZmVyLmFsbG9jYXRlKGtC
dWZmZXJTaXplICsgMik7CiAjZW5kaWYKIAotI2lmIFVTRShXRUJBVURJT19JUFApCi0gICAgaW50
IGJ1ZmZlclNpemU7Ci0gICAgaXBwc0lJUkdldFN0YXRlU2l6ZTY0Zl9CaVF1YWRfMzJmKDEsICZi
dWZmZXJTaXplKTsKLSAgICBtX2lwcEludGVybmFsQnVmZmVyID0gaXBwc01hbGxvY184dShidWZm
ZXJTaXplKTsKLSNlbmRpZiAvLyBVU0UoV0VCQVVESU9fSVBQKQotCiAgICAgLy8gSW5pdGlhbGl6
ZSBhcyBwYXNzLXRocnUgKHN0cmFpZ2h0LXdpcmUsIG5vIGZpbHRlciBlZmZlY3QpCiAgICAgc2V0
Tm9ybWFsaXplZENvZWZmaWNpZW50cygxLCAwLCAwLCAxLCAwLCAwKTsKIApAQCAtNjksOSArNjMs
NiBAQCBCaXF1YWQ6OkJpcXVhZCgpCiAKIEJpcXVhZDo6fkJpcXVhZCgpCiB7Ci0jaWYgVVNFKFdF
QkFVRElPX0lQUCkKLSAgICBpcHBzRnJlZShtX2lwcEludGVybmFsQnVmZmVyKTsKLSNlbmRpZiAv
LyBVU0UoV0VCQVVESU9fSVBQKQogfQogCiB2b2lkIEJpcXVhZDo6cHJvY2Vzcyhjb25zdCBmbG9h
dCogc291cmNlUCwgZmxvYXQqIGRlc3RQLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQpAQCAtODAs
OSArNzEsNyBAQCB2b2lkIEJpcXVhZDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlUCwgZmxv
YXQqIGRlc3RQLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogICAgIC8vIFVzZSB2ZWNMaWIgaWYg
YXZhaWxhYmxlCiAgICAgcHJvY2Vzc0Zhc3Qoc291cmNlUCwgZGVzdFAsIGZyYW1lc1RvUHJvY2Vz
cyk7CiAKLSNlbGlmIFVTRShXRUJBVURJT19JUFApCi0gICAgaXBwc0lJUjY0Zl8zMmYoc291cmNl
UCwgZGVzdFAsIHN0YXRpY19jYXN0PGludD4oZnJhbWVzVG9Qcm9jZXNzKSwgbV9iaXF1YWRTdGF0
ZSk7Ci0jZWxzZSAvLyBVU0UoV0VCQVVESU9fSVBQKQorI2Vsc2UKIAogICAgIGludCBuID0gZnJh
bWVzVG9Qcm9jZXNzOwogCkBAIC0xOTYsMTEgKzE4NSw2IEBAIHZvaWQgQmlxdWFkOjpyZXNldCgp
CiAgICAgb3V0cHV0UFswXSA9IDA7CiAgICAgb3V0cHV0UFsxXSA9IDA7CiAKLSNlbGlmIFVTRShX
RUJBVURJT19JUFApCi0gICAgaW50IGJ1ZmZlclNpemU7Ci0gICAgaXBwc0lJUkdldFN0YXRlU2l6
ZTY0Zl9CaVF1YWRfMzJmKDEsICZidWZmZXJTaXplKTsKLSAgICBpcHBzWmVyb184dShtX2lwcElu
dGVybmFsQnVmZmVyLCBidWZmZXJTaXplKTsKLQogI2Vsc2UKICAgICBtX3gxID0gbV94MiA9IG1f
eTEgPSBtX3kyID0gMDsKICNlbmRpZgpAQCAtMjg5LDE5ICsyNzMsNiBAQCB2b2lkIEJpcXVhZDo6
c2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhkb3VibGUgYjAsIGRvdWJsZSBiMSwgZG91YmxlIGIy
LCBkb3VibGUgYQogICAgIG1fYjIgPSBiMiAqIGEwSW52ZXJzZTsKICAgICBtX2ExID0gYTEgKiBh
MEludmVyc2U7CiAgICAgbV9hMiA9IGEyICogYTBJbnZlcnNlOwotCi0jaWYgVVNFKFdFQkFVRElP
X0lQUCkKLSAgICBJcHA2NGYgdGFwc1s2XTsKLSAgICB0YXBzWzBdID0gbV9iMDsKLSAgICB0YXBz
WzFdID0gbV9iMTsKLSAgICB0YXBzWzJdID0gbV9iMjsKLSAgICB0YXBzWzNdID0gMTsKLSAgICB0
YXBzWzRdID0gbV9hMTsKLSAgICB0YXBzWzVdID0gbV9hMjsKLSAgICBtX2JpcXVhZFN0YXRlID0g
MDsKLQotICAgIGlwcHNJSVJJbml0NjRmX0JpUXVhZF8zMmYoJm1fYmlxdWFkU3RhdGUsIHRhcHMs
IDEsIDAsIG1faXBwSW50ZXJuYWxCdWZmZXIpOwotI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFAp
CiB9CiAKIHZvaWQgQmlxdWFkOjpzZXRMb3dTaGVsZlBhcmFtcyhkb3VibGUgZnJlcXVlbmN5LCBk
b3VibGUgZGJHYWluKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
QmlxdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuaAppbmRleCBl
MDUyZDc1Li5lNzEwOTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9CaXF1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuaApA
QCAtMzIsMTAgKzMyLDYgQEAKICNpbmNsdWRlICJBdWRpb0FycmF5LmgiCiAjaW5jbHVkZSA8Y29t
cGxleD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAKLSNpZiBVU0UoV0VCQVVESU9fSVBQKQot
I2luY2x1ZGUgPGlwcHMuaD4KLSNlbmRpZiAvLyBVU0UoV0VCQVVESU9fSVBQKQogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTk5LDEwICs5NSw2IEBAIHByaXZhdGU6CiAgICAgQXVkaW9Eb3Vi
bGVBcnJheSBtX2lucHV0QnVmZmVyOwogICAgIEF1ZGlvRG91YmxlQXJyYXkgbV9vdXRwdXRCdWZm
ZXI7CiAKLSNlbGlmIFVTRShXRUJBVURJT19JUFApCi0gICAgSXBwc0lJUlN0YXRlNjRmXzMyZiog
bV9iaXF1YWRTdGF0ZTsKLSAgICBJcHA4dSogbV9pcHBJbnRlcm5hbEJ1ZmZlcjsKLQogI2Vsc2UK
ICAgICAvLyBGaWx0ZXIgbWVtb3J5CiAgICAgZG91YmxlIG1feDE7IC8vIGlucHV0IGRlbGF5ZWQg
YnkgMSBzYW1wbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Rp
cmVjdENvbnZvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RD
b252b2x2ZXIuY3BwCmluZGV4IGZlYzQzNmEuLmVkZmFlZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmNwcApAQCAtNDQsOSArNDQsNiBA
QCB1c2luZyBuYW1lc3BhY2UgVmVjdG9yTWF0aDsKICAgICAKIERpcmVjdENvbnZvbHZlcjo6RGly
ZWN0Q29udm9sdmVyKHNpemVfdCBpbnB1dEJsb2NrU2l6ZSkKICAgICA6IG1faW5wdXRCbG9ja1Np
emUoaW5wdXRCbG9ja1NpemUpCi0jaWYgVVNFKFdFQkFVRElPX0lQUCkKLSAgICAsIG1fb3Zlcmxh
eUJ1ZmZlcihpbnB1dEJsb2NrU2l6ZSkKLSNlbmRpZiAvLyBVU0UoV0VCQVVESU9fSVBQKQogICAg
ICwgbV9idWZmZXIoaW5wdXRCbG9ja1NpemUgKiAyKQogewogfQpAQCAtNzEsMTkgKzY4LDYgQEAg
dm9pZCBEaXJlY3RDb252b2x2ZXI6OnByb2Nlc3MoQXVkaW9GbG9hdEFycmF5KiBjb252b2x1dGlv
bktlcm5lbCwgY29uc3QgZmxvYXQqIHMKICAgICBpZiAoIWlzQ29weUdvb2QpCiAgICAgICAgIHJl
dHVybjsKIAotI2lmIFVTRShXRUJBVURJT19JUFApCi0gICAgZmxvYXQqIG91dHB1dEJ1ZmZlciA9
IG1fYnVmZmVyLmRhdGEoKTsKLSAgICBmbG9hdCogb3ZlcmxheUJ1ZmZlciA9IG1fb3ZlcmxheUJ1
ZmZlci5kYXRhKCk7Ci0gICAgYm9vbCBpc0NvcHlHb29kMiA9IG92ZXJsYXlCdWZmZXIgJiYgbV9v
dmVybGF5QnVmZmVyLnNpemUoKSA+PSBrZXJuZWxTaXplICYmIG1fYnVmZmVyLnNpemUoKSA9PSBt
X2lucHV0QmxvY2tTaXplICogMjsKLSAgICBBU1NFUlQoaXNDb3B5R29vZDIpOwotICAgIGlmICgh
aXNDb3B5R29vZDIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlwcHNDb252XzMyZihzdGF0aWNf
Y2FzdDxjb25zdCBJcHAzMmYqPihzb3VyY2VQKSwgZnJhbWVzVG9Qcm9jZXNzLCBzdGF0aWNfY2Fz
dDxJcHAzMmYqPihrZXJuZWxQKSwga2VybmVsU2l6ZSwgc3RhdGljX2Nhc3Q8SXBwMzJmKj4ob3V0
cHV0QnVmZmVyKSk7Ci0KLSAgICB2YWRkKG91dHB1dEJ1ZmZlciwgMSwgb3ZlcmxheUJ1ZmZlciwg
MSwgZGVzdFAsIDEsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbWVtY3B5KG92ZXJsYXlCdWZmZXIs
IG91dHB1dEJ1ZmZlciArIG1faW5wdXRCbG9ja1NpemUsIHNpemVvZihmbG9hdCkgKiBrZXJuZWxT
aXplKTsKLSNlbHNlCiAgICAgZmxvYXQqIGlucHV0UCA9IG1fYnVmZmVyLmRhdGEoKSArIG1faW5w
dXRCbG9ja1NpemU7CiAKICAgICAvLyBDb3B5IHNhbXBsZXMgdG8gMm5kIGhhbGYgb2YgaW5wdXQg
YnVmZmVyLgpAQCAtMzY5LDE1ICszNTMsMTEgQEAgdm9pZCBEaXJlY3RDb252b2x2ZXI6OnByb2Nl
c3MoQXVkaW9GbG9hdEFycmF5KiBjb252b2x1dGlvbktlcm5lbCwgY29uc3QgZmxvYXQqIHMKIAog
ICAgIC8vIENvcHkgMm5kIGhhbGYgb2YgaW5wdXQgYnVmZmVyIHRvIDFzdCBoYWxmLgogICAgIG1l
bWNweShtX2J1ZmZlci5kYXRhKCksIGlucHV0UCwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc1RvUHJv
Y2Vzcyk7Ci0jZW5kaWYKIH0KIAogdm9pZCBEaXJlY3RDb252b2x2ZXI6OnJlc2V0KCkKIHsKICAg
ICBtX2J1ZmZlci56ZXJvKCk7Ci0jaWYgVVNFKFdFQkFVRElPX0lQUCkKLSAgICBtX292ZXJsYXlC
dWZmZXIuemVybygpOwotI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFApCiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0RpcmVjdENvbnZvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0
Q29udm9sdmVyLmgKaW5kZXggNThmMDEyYS4uN2NkODc5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmgKQEAgLTMxLDEwICszMSw2IEBACiAK
ICNpbmNsdWRlICJBdWRpb0FycmF5LmgiCiAKLSNpZiBVU0UoV0VCQVVESU9fSVBQKQotI2luY2x1
ZGUgPGlwcHMuaD4KLSNlbmRpZiAvLyBVU0UoV0VCQVVESU9fSVBQKQotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIERpcmVjdENvbnZvbHZlciB7CkBAIC00OCw5ICs0NCw2IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgc2l6ZV90IG1faW5wdXRCbG9ja1NpemU7CiAKLSNpZiBVU0UoV0VC
QVVESU9fSVBQKQotICAgIEF1ZGlvRmxvYXRBcnJheSBtX292ZXJsYXlCdWZmZXI7Ci0jZW5kaWYg
Ly8gVVNFKFdFQkFVRElPX0lQUCkKICAgICBBdWRpb0Zsb2F0QXJyYXkgbV9idWZmZXI7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaAppbmRleCA4ZTBmMjkzLi43
YTNhMTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFt
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmgKQEAgLTMx
LDE4ICszMSwxMCBAQAogCiAjaW5jbHVkZSAiQXVkaW9BcnJheS5oIgogCi0jaWYgT1MoREFSV0lO
KSAmJiAhVVNFKFdFQkFVRElPX0ZGTVBFRykKLSNkZWZpbmUgVVNFX0FDQ0VMRVJBVEVfRkZUIDEK
LSNlbHNlCi0jZGVmaW5lIFVTRV9BQ0NFTEVSQVRFX0ZGVCAwCi0jZW5kaWYKLQotI2lmIFVTRV9B
Q0NFTEVSQVRFX0ZGVAorI2lmIE9TKERBUldJTikKICNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2Vs
ZXJhdGUuaD4KICNlbmRpZgogCi0jaWYgIVVTRV9BQ0NFTEVSQVRFX0ZGVAotCiAjaWYgVVNFKFdF
QkFVRElPX0dTVFJFQU1FUikKICNpbmNsdWRlIDxnbGliLmg+CiBHX0JFR0lOX0RFQ0xTCkBAIC01
MCwxOSArNDIsNiBAQCBHX0JFR0lOX0RFQ0xTCiBHX0VORF9ERUNMUwogI2VuZGlmIC8vIFVTRShX
RUJBVURJT19HU1RSRUFNRVIpCiAKLSNpZiBVU0UoV0VCQVVESU9fT1BFTk1BWF9ETF9GRlQpCi0j
aW5jbHVkZSAiZGwvc3AvYXBpL2FybVNQLmgiCi0jaW5jbHVkZSAiZGwvc3AvYXBpL29teFNQLmgi
Ci0jZWxpZiBVU0UoV0VCQVVESU9fRkZNUEVHKQotc3RydWN0IFJERlRDb250ZXh0OwotI2VuZGlm
Ci0KLSNlbmRpZiAvLyAhVVNFX0FDQ0VMRVJBVEVfRkZUCi0KLSNpZiBVU0UoV0VCQVVESU9fSVBQ
KQotI2luY2x1ZGUgPGlwcHMuaD4KLSNlbmRpZiAvLyBVU0UoV0VCQVVESU9fSVBQKQotCiAjaW5j
bHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgpAQCAtMTExLDcgKzkwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW50ZXJw
b2xhdGVGcmVxdWVuY3lDb21wb25lbnRzKGNvbnN0IEZGVEZyYW1lJiBmcmFtZTEsIGNvbnN0IEZG
VEZyYW1lJiBmcmFtZTIsIGRvdWJsZSB4KTsKIAotI2lmIFVTRV9BQ0NFTEVSQVRFX0ZGVAorI2lm
IE9TKERBUldJTikKICAgICBEU1BTcGxpdENvbXBsZXgmIGRzcFNwbGl0Q29tcGxleCgpIHsgcmV0
dXJuIG1fZnJhbWU7IH0KICAgICBEU1BTcGxpdENvbXBsZXggZHNwU3BsaXRDb21wbGV4KCkgY29u
c3QgeyByZXR1cm4gbV9mcmFtZTsgfQogCkBAIC0xMjQsMTkgKzEwMyw3IEBAIHByaXZhdGU6CiAg
ICAgRFNQU3BsaXRDb21wbGV4IG1fZnJhbWU7CiAgICAgQXVkaW9GbG9hdEFycmF5IG1fcmVhbERh
dGE7CiAgICAgQXVkaW9GbG9hdEFycmF5IG1faW1hZ0RhdGE7Ci0jZWxzZSAvLyAhVVNFX0FDQ0VM
RVJBVEVfRkZUCi0KLSNpZiBVU0UoV0VCQVVESU9fRkZNUEVHKQotICAgIHN0YXRpYyBSREZUQ29u
dGV4dCogY29udGV4dEZvclNpemUodW5zaWduZWQgZmZ0U2l6ZSwgaW50IHRyYW5zKTsKLQotICAg
IFJERlRDb250ZXh0KiBtX2ZvcndhcmRDb250ZXh0OwotICAgIFJERlRDb250ZXh0KiBtX2ludmVy
c2VDb250ZXh0OwotCi0gICAgZmxvYXQqIGdldFVwVG9EYXRlQ29tcGxleERhdGEoKTsKLSAgICBB
dWRpb0Zsb2F0QXJyYXkgbV9jb21wbGV4RGF0YTsKLSAgICBBdWRpb0Zsb2F0QXJyYXkgbV9yZWFs
RGF0YTsKLSAgICBBdWRpb0Zsb2F0QXJyYXkgbV9pbWFnRGF0YTsKLSNlbmRpZiAvLyBVU0UoV0VC
QVVESU9fRkZNUEVHKQorI2VuZGlmCiAKICNpZiBVU0UoV0VCQVVESU9fR1NUUkVBTUVSKQogICAg
IEdzdEZGVEYzMiogbV9mZnQ7CkBAIC0xNDUsMjkgKzExMiw2IEBAIHByaXZhdGU6CiAgICAgQXVk
aW9GbG9hdEFycmF5IG1fcmVhbERhdGE7CiAgICAgQXVkaW9GbG9hdEFycmF5IG1faW1hZ0RhdGE7
CiAjZW5kaWYgLy8gVVNFKFdFQkFVRElPX0dTVFJFQU1FUikKLQotI2lmIFVTRShXRUJBVURJT19J
UFApCi0gICAgSXBwOHUqIG1fYnVmZmVyOwotICAgIElwcHNERlRTcGVjX1JfMzJmKiBtX0RGVFNw
ZWM7Ci0KLSAgICBmbG9hdCogZ2V0VXBUb0RhdGVDb21wbGV4RGF0YSgpOwotICAgIEF1ZGlvRmxv
YXRBcnJheSBtX2NvbXBsZXhEYXRhOwotICAgIEF1ZGlvRmxvYXRBcnJheSBtX3JlYWxEYXRhOwot
ICAgIEF1ZGlvRmxvYXRBcnJheSBtX2ltYWdEYXRhOwotI2VuZGlmIC8vIFVTRShXRUJBVURJT19J
UFApCi0KLSNpZiBVU0UoV0VCQVVESU9fT1BFTk1BWF9ETF9GRlQpCi0gICAgc3RhdGljIE9NWEZG
VFNwZWNfUl9GMzIqIGNvbnRleHRGb3JTaXplKHVuc2lnbmVkIGxvZzJGRlRTaXplKTsKLQotICAg
IE9NWEZGVFNwZWNfUl9GMzIqIG1fZm9yd2FyZENvbnRleHQ7Ci0gICAgT01YRkZUU3BlY19SX0Yz
MiogbV9pbnZlcnNlQ29udGV4dDsKLQotICAgIEF1ZGlvRmxvYXRBcnJheSBtX2NvbXBsZXhEYXRh
OwotICAgIEF1ZGlvRmxvYXRBcnJheSBtX3JlYWxEYXRhOwotICAgIEF1ZGlvRmxvYXRBcnJheSBt
X2ltYWdEYXRhOwotI2VuZGlmCi0gICAgCi0jZW5kaWYgLy8gIVVTRV9BQ0NFTEVSQVRFX0ZGVAog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHAKaW5kZXggNTZjOGY3Ni4uM2U0MjU3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwCkBAIC0yOSw3ICsy
OSw3IEBACiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQogCi0jaWYgIU9TKERBUldJTikgJiYgIVVT
RShXRUJBVURJT19GRk1QRUcpICYmICFVU0UoV0VCQVVESU9fR1NUUkVBTUVSKSAmJiAhVVNFKFdF
QkFVRElPX0lQUCkgJiYgIVVTRShXRUJBVURJT19PUEVOTUFYX0RMX0ZGVCkKKyNpZiAhT1MoREFS
V0lOKSAmJiAhVVNFKFdFQkFVRElPX0dTVFJFQU1FUikKIAogI2luY2x1ZGUgIkZGVEZyYW1lLmgi
CiAKQEAgLTEwMiw2ICsxMDIsNiBAQCBmbG9hdCogRkZURnJhbWU6OmltYWdEYXRhKCkgY29uc3QK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gIU9TKERBUldJTikgJiYgIVVT
RShXRUJBVURJT19GRk1QRUcpICYmICFVU0UoV0VCQVVESU9fR1NUUkVBTUVSKSAmJiAhVVNFKFdF
QkFVRElPX0lQUCkKKyNlbmRpZiAvLyAhT1MoREFSV0lOKSAmJiAhVVNFKFdFQkFVRElPX0dTVFJF
QU1FUikKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9mZm1wZWcvRkZURnJhbWVGRk1QRUcuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZmZtcGVnL0ZGVEZyYW1lRkZNUEVHLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjYjgwOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9mZm1wZWcvRkZURnJhbWVGRk1QRUcuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBGRlRGcmFtZSBpbXBsZW1lbnRhdGlvbiB1
c2luZyBGRm1wZWcncyBSREZUIGFsZ29yaXRobSwKLS8vIHN1aXRhYmxlIGZvciB1c2Ugb24gV2lu
ZG93cyBhbmQgTGludXguCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJf
QVVESU8pCi0KLSNpZiBVU0UoV0VCQVVESU9fRkZNUEVHKQotCi0jaW5jbHVkZSAiRkZURnJhbWUu
aCIKLQotI2luY2x1ZGUgIlZlY3Rvck1hdGguaCIKLQotZXh0ZXJuICJDIiB7Ci0gICAgI2luY2x1
ZGUgPGxpYmF2Y29kZWMvYXZmZnQuaD4KLX0KLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBGRlRDb21wbGV4UHJveHkgewotICAgIGludDE2X3Qg
cmU7Ci0gICAgaW50MTZfdCBpbTsKLX07Ci0KLXN0cnVjdCBGRlRDb250ZXh0UHJveHkgewotICAg
IGludCBuYml0czsKLSAgICBpbnQgaW52ZXJzZTsKLSAgICB1aW50MTZfdCogcmV2dGFiOwotICAg
IEZGVENvbXBsZXhQcm94eSogdG1wQnVmOwotICAgIGludCBtZGN0U2l6ZTsKLSAgICBpbnQgbWRj
dEJpdHM7Ci0gICAgdm9pZCogdGNvczsKLSAgICB2b2lkKiB0c2luOwotICAgIHZvaWQgKCpmZnRQ
ZXJtdXRlKSgpOwotICAgIHZvaWQgKCpmZnRDYWxjKSgpOwotICAgIHZvaWQgKCppbWRjdENhbGMp
KCk7Ci0gICAgdm9pZCAoKmltZGN0SGFsZikoKTsKLSAgICB2b2lkICgqbWRjdENhbGMpKCk7Ci0g
ICAgdm9pZCAoKm1kY3RDYWxjdykoKTsKLSAgICBpbnQgZmZ0UGVybXV0YXRpb247Ci0gICAgaW50
IG1kY3RQZXJtdXRhdGlvbjsKLX07Ci0KLXN0cnVjdCBSREZUQ29udGV4dFByb3h5IHsKLSAgICBp
bnQgbmJpdHM7Ci0gICAgaW50IGludmVyc2U7Ci0gICAgaW50IHNpZ25Db252ZW50aW9uOwotICAg
IGNvbnN0IHZvaWQqIHRjb3M7Ci0gICAgY29uc3Qgdm9pZCogdHNpbjsKLSAgICBGRlRDb250ZXh0
UHJveHkgZmZ0OwotICAgIHZvaWQgKCpyZGZ0X2NhbGMpKCk7Ci19OwotCi19Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY29uc3QgaW50IGtNYXhGRlRQb3cyU2l6ZSA9IDI0OwotCi0vLyBOb3Jt
YWwgY29uc3RydWN0b3I6IGFsbG9jYXRlcyBmb3IgYSBnaXZlbiBmZnRTaXplLgotRkZURnJhbWU6
OkZGVEZyYW1lKHVuc2lnbmVkIGZmdFNpemUpCi0gICAgOiBtX0ZGVFNpemUoZmZ0U2l6ZSkKLSAg
ICAsIG1fbG9nMkZGVFNpemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxvZzIoZmZ0U2l6ZSkpKQot
ICAgICwgbV9mb3J3YXJkQ29udGV4dCgwKQotICAgICwgbV9pbnZlcnNlQ29udGV4dCgwKQotICAg
ICwgbV9jb21wbGV4RGF0YShmZnRTaXplKQotICAgICwgbV9yZWFsRGF0YShmZnRTaXplIC8gMikK
LSAgICAsIG1faW1hZ0RhdGEoZmZ0U2l6ZSAvIDIpCi17Ci0gICAgLy8gV2Ugb25seSBhbGxvdyBw
b3dlciBvZiB0d28uCi0gICAgQVNTRVJUKDFVTCA8PCBtX2xvZzJGRlRTaXplID09IG1fRkZUU2l6
ZSk7Ci0KLSAgICBtX2ZvcndhcmRDb250ZXh0ID0gY29udGV4dEZvclNpemUoZmZ0U2l6ZSwgREZU
X1IyQyk7Ci0gICAgbV9pbnZlcnNlQ29udGV4dCA9IGNvbnRleHRGb3JTaXplKGZmdFNpemUsIElE
RlRfQzJSKTsKLX0KLQotLy8gQ3JlYXRlcyBhIGJsYW5rL2VtcHR5IGZyYW1lIChpbnRlcnBvbGF0
ZSgpIG11c3QgbGF0ZXIgYmUgY2FsbGVkKS4KLUZGVEZyYW1lOjpGRlRGcmFtZSgpCi0gICAgOiBt
X0ZGVFNpemUoMCkKLSAgICAsIG1fbG9nMkZGVFNpemUoMCkKLSAgICAsIG1fZm9yd2FyZENvbnRl
eHQoMCkKLSAgICAsIG1faW52ZXJzZUNvbnRleHQoMCkKLXsKLX0KLQotLy8gQ29weSBjb25zdHJ1
Y3Rvci4KLUZGVEZyYW1lOjpGRlRGcmFtZShjb25zdCBGRlRGcmFtZSYgZnJhbWUpCi0gICAgOiBt
X0ZGVFNpemUoZnJhbWUubV9GRlRTaXplKQotICAgICwgbV9sb2cyRkZUU2l6ZShmcmFtZS5tX2xv
ZzJGRlRTaXplKQotICAgICwgbV9mb3J3YXJkQ29udGV4dCgwKQotICAgICwgbV9pbnZlcnNlQ29u
dGV4dCgwKQotICAgICwgbV9jb21wbGV4RGF0YShmcmFtZS5tX0ZGVFNpemUpCi0gICAgLCBtX3Jl
YWxEYXRhKGZyYW1lLm1fRkZUU2l6ZSAvIDIpCi0gICAgLCBtX2ltYWdEYXRhKGZyYW1lLm1fRkZU
U2l6ZSAvIDIpCi17Ci0gICAgbV9mb3J3YXJkQ29udGV4dCA9IGNvbnRleHRGb3JTaXplKG1fRkZU
U2l6ZSwgREZUX1IyQyk7Ci0gICAgbV9pbnZlcnNlQ29udGV4dCA9IGNvbnRleHRGb3JTaXplKG1f
RkZUU2l6ZSwgSURGVF9DMlIpOwotCi0gICAgLy8gQ29weS9zZXR1cCBmcmFtZSBkYXRhLgotICAg
IHVuc2lnbmVkIG5ieXRlcyA9IHNpemVvZihmbG9hdCkgKiAobV9GRlRTaXplIC8gMik7Ci0gICAg
bWVtY3B5KHJlYWxEYXRhKCksIGZyYW1lLnJlYWxEYXRhKCksIG5ieXRlcyk7Ci0gICAgbWVtY3B5
KGltYWdEYXRhKCksIGZyYW1lLmltYWdEYXRhKCksIG5ieXRlcyk7Ci19Ci0KLXZvaWQgRkZURnJh
bWU6OmluaXRpYWxpemUoKQotewotfQotCi12b2lkIEZGVEZyYW1lOjpjbGVhbnVwKCkKLXsKLX0K
LQotRkZURnJhbWU6On5GRlRGcmFtZSgpCi17Ci0gICAgYXZfcmRmdF9lbmQobV9mb3J3YXJkQ29u
dGV4dCk7Ci0gICAgYXZfcmRmdF9lbmQobV9pbnZlcnNlQ29udGV4dCk7Ci19Ci0KLXZvaWQgRkZU
RnJhbWU6Om11bHRpcGx5KGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkKLXsKLSAgICBGRlRGcmFtZSYg
ZnJhbWUxID0gKnRoaXM7Ci0gICAgRkZURnJhbWUmIGZyYW1lMiA9IGNvbnN0X2Nhc3Q8RkZURnJh
bWUmPihmcmFtZSk7Ci0KLSAgICBmbG9hdCogcmVhbFAxID0gZnJhbWUxLnJlYWxEYXRhKCk7Ci0g
ICAgZmxvYXQqIGltYWdQMSA9IGZyYW1lMS5pbWFnRGF0YSgpOwotICAgIGNvbnN0IGZsb2F0KiBy
ZWFsUDIgPSBmcmFtZTIucmVhbERhdGEoKTsKLSAgICBjb25zdCBmbG9hdCogaW1hZ1AyID0gZnJh
bWUyLmltYWdEYXRhKCk7Ci0KLSAgICB1bnNpZ25lZCBoYWxmU2l6ZSA9IGZmdFNpemUoKSAvIDI7
Ci0gICAgZmxvYXQgcmVhbDAgPSByZWFsUDFbMF07Ci0gICAgZmxvYXQgaW1hZzAgPSBpbWFnUDFb
MF07Ci0KLSAgICBWZWN0b3JNYXRoOjp6dm11bChyZWFsUDEsIGltYWdQMSwgcmVhbFAyLCBpbWFn
UDIsIHJlYWxQMSwgaW1hZ1AxLCBoYWxmU2l6ZSk7IAotCi0gICAgLy8gTXVsdGlwbHkgdGhlIHBh
Y2tlZCBEQy9ueXF1aXN0IGNvbXBvbmVudAotICAgIHJlYWxQMVswXSA9IHJlYWwwICogcmVhbFAy
WzBdOwotICAgIGltYWdQMVswXSA9IGltYWcwICogaW1hZ1AyWzBdOwotCi0gICAgLy8gU2NhbGUg
YWNjb3VudHMgdGhlIHBlY3VsaWFyIHNjYWxpbmcgb2YgdmVjTGliIG9uIHRoZSBNYWMuCi0gICAg
Ly8gVGhpcyBlbnN1cmVzIHRoZSByaWdodCBzY2FsaW5nIGFsbCB0aGUgd2F5IGJhY2sgdG8gaW52
ZXJzZSBGRlQuCi0gICAgLy8gRklYTUU6IGlmIHdlIGNoYW5nZSB0aGUgc2NhbGluZyBvbiB0aGUg
TWFjIHRoZW4gdGhpcyBzY2FsZQotICAgIC8vIGZhY3RvciB3aWxsIG5lZWQgdG8gY2hhbmdlIHRv
by4KLSAgICBmbG9hdCBzY2FsZSA9IDAuNWY7Ci0KLSAgICBWZWN0b3JNYXRoOjp2c211bChyZWFs
UDEsIDEsICZzY2FsZSwgcmVhbFAxLCAxLCBoYWxmU2l6ZSk7Ci0gICAgVmVjdG9yTWF0aDo6dnNt
dWwoaW1hZ1AxLCAxLCAmc2NhbGUsIGltYWdQMSwgMSwgaGFsZlNpemUpOwotfQotCi12b2lkIEZG
VEZyYW1lOjpkb0ZGVChjb25zdCBmbG9hdCogZGF0YSkKLXsKLSAgICAvLyBDb3B5IHNpbmNlIHBy
b2Nlc3NpbmcgaXMgaW4tcGxhY2UuCi0gICAgZmxvYXQqIHAgPSBtX2NvbXBsZXhEYXRhLmRhdGEo
KTsKLSAgICBtZW1jcHkocCwgZGF0YSwgc2l6ZW9mKGZsb2F0KSAqIG1fRkZUU2l6ZSk7Ci0KLSAg
ICAvLyBDb21wdXRlIEZvcndhcmQgdHJhbnNmb3JtLgotICAgIGF2X3JkZnRfY2FsYyhtX2Zvcndh
cmRDb250ZXh0LCBwKTsKLQotICAgIC8vIERlLWludGVybGVhdmUgdG8gc2VwYXJhdGUgcmVhbCBh
bmQgY29tcGxleCBhcnJheXMuCi0gICAgaW50IGxlbiA9IG1fRkZUU2l6ZSAvIDI7Ci0KLSAgICAv
LyBGSVhNRTogc2VlIGFib3ZlIGNvbW1lbnQgaW4gbXVsdGlwbHkoKSBhYm91dCBzY2FsaW5nLgot
ICAgIGNvbnN0IGZsb2F0IHNjYWxlID0gMi4wZjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuOyArK2kpIHsKLSAgICAgICAgaW50IGJhc2VDb21wbGV4SW5kZXggPSAyICogaTsKLSAgICAg
ICAgLy8gbV9yZWFsRGF0YVswXSBpcyB0aGUgREMgY29tcG9uZW50IGFuZCBtX2ltYWdEYXRhWzBd
IGlzIHRoZSBueXF1aXN0IGNvbXBvbmVudAotICAgICAgICAvLyBzaW5jZSB0aGUgaW50ZXJsZWF2
ZWQgY29tcGxleCBkYXRhIGlzIHBhY2tlZC4KLSAgICAgICAgbV9yZWFsRGF0YVtpXSA9IHNjYWxl
ICogcFtiYXNlQ29tcGxleEluZGV4XTsKLSAgICAgICAgbV9pbWFnRGF0YVtpXSA9IHNjYWxlICog
cFtiYXNlQ29tcGxleEluZGV4ICsgMV07Ci0gICAgfQotfQotCi12b2lkIEZGVEZyYW1lOjpkb0lu
dmVyc2VGRlQoZmxvYXQqIGRhdGEpCi17Ci0gICAgLy8gUHJlcGFyZSBpbnRlcmxlYXZlZCBkYXRh
LgotICAgIGZsb2F0KiBpbnRlcmxlYXZlZERhdGEgPSBnZXRVcFRvRGF0ZUNvbXBsZXhEYXRhKCk7
Ci0KLSAgICAvLyBDb21wdXRlIGludmVyc2UgdHJhbnNmb3JtLgotICAgIGF2X3JkZnRfY2FsYyht
X2ludmVyc2VDb250ZXh0LCBpbnRlcmxlYXZlZERhdGEpOwotCi0gICAgLy8gU2NhbGUgc28gdGhh
dCBhIGZvcndhcmQgdGhlbiBpbnZlcnNlIEZGVCB5aWVsZHMgZXhhY3RseSB0aGUgb3JpZ2luYWwg
ZGF0YS4KLSAgICBjb25zdCBmbG9hdCBzY2FsZSA9IDEuMCAvIG1fRkZUU2l6ZTsKLSAgICBWZWN0
b3JNYXRoOjp2c211bChpbnRlcmxlYXZlZERhdGEsIDEsICZzY2FsZSwgZGF0YSwgMSwgbV9GRlRT
aXplKTsKLX0KLQotZmxvYXQqIEZGVEZyYW1lOjpyZWFsRGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8ZmxvYXQqPihtX3JlYWxEYXRhLmRhdGEoKSk7Ci19Ci0KLWZsb2F0KiBG
RlRGcmFtZTo6aW1hZ0RhdGEoKSBjb25zdAotewotICAgIHJldHVybiBjb25zdF9jYXN0PGZsb2F0
Kj4obV9pbWFnRGF0YS5kYXRhKCkpOwotfQotCi1mbG9hdCogRkZURnJhbWU6OmdldFVwVG9EYXRl
Q29tcGxleERhdGEoKQotewotICAgIC8vIEZJWE1FOiBpZiB3ZSBjYW4ndCBjb21wbGV0ZWx5IGdl
dCByaWQgb2YgdGhpcyBtZXRob2QsIFNTRQotICAgIC8vIG9wdGltaXphdGlvbiBjb3VsZCBiZSBj
b25zaWRlcmVkIGlmIGl0IHNob3dzIHVwIGhvdCBvbiBwcm9maWxlcy4KLSAgICBpbnQgbGVuID0g
bV9GRlRTaXplIC8gMjsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAg
ICAgIGludCBiYXNlQ29tcGxleEluZGV4ID0gMiAqIGk7Ci0gICAgICAgIG1fY29tcGxleERhdGFb
YmFzZUNvbXBsZXhJbmRleF0gPSBtX3JlYWxEYXRhW2ldOwotICAgICAgICBtX2NvbXBsZXhEYXRh
W2Jhc2VDb21wbGV4SW5kZXggKyAxXSA9IG1faW1hZ0RhdGFbaV07Ci0gICAgfQotICAgIHJldHVy
biBjb25zdF9jYXN0PGZsb2F0Kj4obV9jb21wbGV4RGF0YS5kYXRhKCkpOwotfQotCi1SREZUQ29u
dGV4dCogRkZURnJhbWU6OmNvbnRleHRGb3JTaXplKHVuc2lnbmVkIGZmdFNpemUsIGludCB0cmFu
cykKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBub24tb3B0aW1hbC4gSWRlYWxseSwgd2UnZCBs
aWtlIHRvIHNoYXJlIHRoZSBjb250ZXh0cyBmb3IgRkZURnJhbWVzIG9mIHRoZSBzYW1lIHNpemUu
Ci0gICAgLy8gQnV0IEZGbXBlZydzIFJERlQgdXNlcyBhIHNjcmF0Y2ggYnVmZmVyIGluc2lkZSB0
aGUgY29udGV4dCBhbmQgc28gdGhleSBhcmUgbm90IHRocmVhZC1zYWZlLgotICAgIC8vIFdlIGNv
dWxkIGltcHJvdmUgdGhpcyBieSBzaGFyaW5nIHRoZSBGRlRGcmFtZXMgb24gYSBwZXItdGhyZWFk
IGJhc2lzLgotICAgIEFTU0VSVChmZnRTaXplKTsKLSAgICBpbnQgcG93MnNpemUgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGxvZzIoZmZ0U2l6ZSkpOwotICAgIEFTU0VSVChwb3cyc2l6ZSA8IGtNYXhGRlRQ
b3cyU2l6ZSk7Ci0KLSAgICBSREZUQ29udGV4dCogY29udGV4dCA9IGF2X3JkZnRfaW5pdChwb3cy
c2l6ZSwgKFJERlRyYW5zZm9ybVR5cGUpdHJhbnMpOwotICAgIHJldHVybiBjb250ZXh0OwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyAhT1MoREFSV0lOKSAmJiBVU0Uo
V0VCQVVESU9fRkZNUEVHKQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lwcC9GRlRGcmFtZUlQUC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pcHAvRkZURnJhbWVJUFAuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDcwNTczLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2lwcC9GRlRGcmFtZUlQUC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBGRlRGcmFtZSBpbXBsZW1lbnRhdGlvbiB1c2luZyBJbnRl
bCBJUFAncyBERlQgYWxnb3JpdGhtLAotLy8gc3VpdGFibGUgZm9yIHVzZSBvbiBMaW51eC4KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2lmIFVTRShX
RUJBVURJT19JUFApCi0KLSNpbmNsdWRlICJGRlRGcmFtZS5oIgotCi0jaW5jbHVkZSAiVmVjdG9y
TWF0aC5oIgotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jb25zdCB1bnNpZ25lZCBtYXhpbXVtRkZUUG93ZXIyU2l6ZSA9IDI0OwotCi0vLyBO
b3JtYWwgY29uc3RydWN0b3I6IGFsbG9jYXRlcyBmb3IgYSBnaXZlbiBmZnRTaXplLgotRkZURnJh
bWU6OkZGVEZyYW1lKHVuc2lnbmVkIGZmdFNpemUpCi0gICAgOiBtX0ZGVFNpemUoZmZ0U2l6ZSkK
LSAgICAsIG1fbG9nMkZGVFNpemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxvZzIoZmZ0U2l6ZSkp
KQotICAgICwgbV9jb21wbGV4RGF0YShmZnRTaXplKQotICAgICwgbV9yZWFsRGF0YShmZnRTaXpl
IC8gMikKLSAgICAsIG1faW1hZ0RhdGEoZmZ0U2l6ZSAvIDIpCi17Ci0gICAgLy8gV2Ugb25seSBh
bGxvdyBwb3dlciBvZiB0d28uCi0gICAgQVNTRVJUKDFVTCA8PCBtX2xvZzJGRlRTaXplID09IG1f
RkZUU2l6ZSk7Ci0gICAgQVNTRVJUKG1fbG9nMkZGVFNpemUgPD0gbWF4aW11bUZGVFBvd2VyMlNp
emUpOwotCi0gICAgaXBwc0RGVEluaXRBbGxvY19SXzMyZigmbV9ERlRTcGVjLCBtX0ZGVFNpemUs
IElQUF9GRlRfTk9ESVZfQllfQU5ZLCBpcHBBbGdIaW50RmFzdCk7Ci0gICAgaW50IGJ1ZmZlclNp
emUgPSAwOwotICAgIGlwcHNERlRHZXRCdWZTaXplX1JfMzJmKG1fREZUU3BlYywgJmJ1ZmZlclNp
emUpOwotICAgIG1fYnVmZmVyID0gaXBwc01hbGxvY184dShidWZmZXJTaXplKTsKLX0KLQotLy8g
Q3JlYXRlcyBhIGJsYW5rL2VtcHR5IGZyYW1lIChpbnRlcnBvbGF0ZSgpIG11c3QgbGF0ZXIgYmUg
Y2FsbGVkKS4KLUZGVEZyYW1lOjpGRlRGcmFtZSgpCi0gICAgOiBtX0ZGVFNpemUoMCkKLSAgICAs
IG1fbG9nMkZGVFNpemUoMCkKLXsKLX0KLQotLy8gQ29weSBjb25zdHJ1Y3Rvci4KLUZGVEZyYW1l
OjpGRlRGcmFtZShjb25zdCBGRlRGcmFtZSYgZnJhbWUpCi0gICAgOiBtX0ZGVFNpemUoZnJhbWUu
bV9GRlRTaXplKQotICAgICwgbV9sb2cyRkZUU2l6ZShmcmFtZS5tX2xvZzJGRlRTaXplKQotICAg
ICwgbV9jb21wbGV4RGF0YShmcmFtZS5tX0ZGVFNpemUpCi0gICAgLCBtX3JlYWxEYXRhKGZyYW1l
Lm1fRkZUU2l6ZSAvIDIpCi0gICAgLCBtX2ltYWdEYXRhKGZyYW1lLm1fRkZUU2l6ZSAvIDIpCi17
Ci0gICAgaXBwc0RGVEluaXRBbGxvY19SXzMyZigmbV9ERlRTcGVjLCBtX0ZGVFNpemUsIElQUF9G
RlRfTk9ESVZfQllfQU5ZLCBpcHBBbGdIaW50RmFzdCk7Ci0gICAgaW50IGJ1ZmZlclNpemUgPSAw
OwotICAgIGlwcHNERlRHZXRCdWZTaXplX1JfMzJmKG1fREZUU3BlYywgJmJ1ZmZlclNpemUpOwot
ICAgIG1fYnVmZmVyID0gaXBwc01hbGxvY184dShidWZmZXJTaXplKTsKLQotICAgIC8vIENvcHkv
c2V0dXAgZnJhbWUgZGF0YS4KLSAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzID0gc2l6ZW9mKGZs
b2F0KSAqIG1fRkZUU2l6ZTsKLSAgICBtZW1jcHkocmVhbERhdGEoKSwgZnJhbWUucmVhbERhdGEo
KSwgbnVtYmVyT2ZCeXRlcyk7Ci0gICAgbWVtY3B5KGltYWdEYXRhKCksIGZyYW1lLmltYWdEYXRh
KCksIG51bWJlck9mQnl0ZXMpOwotfQotCi12b2lkIEZGVEZyYW1lOjppbml0aWFsaXplKCkKLXsK
LX0KLQotdm9pZCBGRlRGcmFtZTo6Y2xlYW51cCgpCi17Ci19Ci0KLUZGVEZyYW1lOjp+RkZURnJh
bWUoKQotewotICAgIGlwcHNGcmVlKG1fYnVmZmVyKTsKLSAgICBpcHBzREZURnJlZV9SXzMyZiht
X0RGVFNwZWMpOwotfQotCi12b2lkIEZGVEZyYW1lOjptdWx0aXBseShjb25zdCBGRlRGcmFtZSYg
ZnJhbWUpCi17Ci0gICAgRkZURnJhbWUmIGZyYW1lMSA9ICp0aGlzOwotICAgIEZGVEZyYW1lJiBm
cmFtZTIgPSBjb25zdF9jYXN0PEZGVEZyYW1lJj4oZnJhbWUpOwotCi0gICAgZmxvYXQqIHJlYWxQ
MSA9IGZyYW1lMS5yZWFsRGF0YSgpOwotICAgIGZsb2F0KiBpbWFnUDEgPSBmcmFtZTEuaW1hZ0Rh
dGEoKTsKLSAgICBjb25zdCBmbG9hdCogcmVhbFAyID0gZnJhbWUyLnJlYWxEYXRhKCk7Ci0gICAg
Y29uc3QgZmxvYXQqIGltYWdQMiA9IGZyYW1lMi5pbWFnRGF0YSgpOwotCi0gICAgdW5zaWduZWQg
aGFsZlNpemUgPSBmZnRTaXplKCkgLyAyOwotICAgIGZsb2F0IHJlYWwwID0gcmVhbFAxWzBdOwot
ICAgIGZsb2F0IGltYWcwID0gaW1hZ1AxWzBdOwotCi0gICAgVmVjdG9yTWF0aDo6enZtdWwocmVh
bFAxLCBpbWFnUDEsIHJlYWxQMiwgaW1hZ1AyLCByZWFsUDEsIGltYWdQMSwgaGFsZlNpemUpOyAK
LQotICAgIC8vIE11bHRpcGx5IHRoZSBwYWNrZWQgREMvbnlxdWlzdCBjb21wb25lbnQKLSAgICBy
ZWFsUDFbMF0gPSByZWFsMCAqIHJlYWxQMlswXTsKLSAgICBpbWFnUDFbMF0gPSBpbWFnMCAqIGlt
YWdQMlswXTsKLQotICAgIC8vIFNjYWxlIGFjY291bnRzIHRoZSBwZWN1bGlhciBzY2FsaW5nIG9m
IHZlY0xpYiBvbiB0aGUgTWFjLgotICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgcmlnaHQgc2NhbGlu
ZyBhbGwgdGhlIHdheSBiYWNrIHRvIGludmVyc2UgRkZULgotICAgIC8vIEZJWE1FOiBpZiB3ZSBj
aGFuZ2UgdGhlIHNjYWxpbmcgb24gdGhlIE1hYyB0aGVuIHRoaXMgc2NhbGUKLSAgICAvLyBmYWN0
b3Igd2lsbCBuZWVkIHRvIGNoYW5nZSB0b28uCi0gICAgZmxvYXQgc2NhbGUgPSAwLjVmOwotCi0g
ICAgVmVjdG9yTWF0aDo6dnNtdWwocmVhbFAxLCAxLCAmc2NhbGUsIHJlYWxQMSwgMSwgaGFsZlNp
emUpOwotICAgIFZlY3Rvck1hdGg6OnZzbXVsKGltYWdQMSwgMSwgJnNjYWxlLCBpbWFnUDEsIDEs
IGhhbGZTaXplKTsKLX0KLQotdm9pZCBGRlRGcmFtZTo6ZG9GRlQoY29uc3QgZmxvYXQqIGRhdGEp
Ci17Ci0gICAgSXBwMzJmKiBjb21wbGV4UCA9IG1fY29tcGxleERhdGEuZGF0YSgpOwotCi0gICAg
Ly8gQ29tcHV0ZSBGb3J3YXJkIHRyYW5zZm9ybSB0byBwZXJtIGZvcm1hdC4KLSAgICBpcHBzREZU
RndkX1JUb1Blcm1fMzJmKHJlaW50ZXJwcmV0X2Nhc3Q8SXBwMzJmKj4oY29uc3RfY2FzdDxmbG9h
dCo+KGRhdGEpKSwgY29tcGxleFAsIG1fREZUU3BlYywgbV9idWZmZXIpOwotCi0gICAgY29uc3Qg
SXBwMzJmIHNjYWxlID0gMi4wZjsKLQotICAgIGlwcHNNdWxDXzMyZl9JKHNjYWxlLCBjb21wbGV4
UCwgbV9GRlRTaXplKTsKLQotICAgIElwcDMyZiogcmVhbFAgPSBtX3JlYWxEYXRhLmRhdGEoKTsK
LSAgICBJcHAzMmYqIGltYWdQID0gbV9pbWFnRGF0YS5kYXRhKCk7Ci0gICAgaXBwc0NwbHhUb1Jl
YWxfMzJmYyhyZWludGVycHJldF9jYXN0PElwcDMyZmMqPihjb21wbGV4UCksIHJlYWxQLCBpbWFn
UCwgbV9GRlRTaXplID4+IDEpOwotfQotCi12b2lkIEZGVEZyYW1lOjpkb0ludmVyc2VGRlQoZmxv
YXQqIGRhdGEpCi17Ci0gICAgSXBwMzJmKiBjb21wbGV4UCA9IGdldFVwVG9EYXRlQ29tcGxleERh
dGEoKTsKLQotICAgIC8vIENvbXB1dGUgaW52ZXJzZSB0cmFuc2Zvcm0uCi0gICAgaXBwc0RGVElu
dl9QZXJtVG9SXzMyZihjb21wbGV4UCwgcmVpbnRlcnByZXRfY2FzdDxJcHAzMmYqPihkYXRhKSwg
bV9ERlRTcGVjLCBtX2J1ZmZlcik7Ci0KLSAgICAvLyBTY2FsZSBzbyB0aGF0IGEgZm9yd2FyZCB0
aGVuIGludmVyc2UgRkZUIHlpZWxkcyBleGFjdGx5IHRoZSBvcmlnaW5hbCBkYXRhLgotICAgIGNv
bnN0IGZsb2F0IHNjYWxlID0gMS4wIC8gKDIgKiBtX0ZGVFNpemUpOwotCi0gICAgaXBwc011bENf
MzJmX0koc2NhbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8SXBwMzJmKj4oZGF0YSksIG1fRkZUU2l6ZSk7
Ci19Ci0KLWZsb2F0KiBGRlRGcmFtZTo6cmVhbERhdGEoKSBjb25zdAotewotICAgIHJldHVybiBj
b25zdF9jYXN0PGZsb2F0Kj4obV9yZWFsRGF0YS5kYXRhKCkpOwotfQotCi1mbG9hdCogRkZURnJh
bWU6OmltYWdEYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxmbG9hdCo+KG1f
aW1hZ0RhdGEuZGF0YSgpKTsKLX0KLQotZmxvYXQqIEZGVEZyYW1lOjpnZXRVcFRvRGF0ZUNvbXBs
ZXhEYXRhKCkKLXsKLSAgICBpbnQgbGVuID0gbV9GRlRTaXplID4+IDE7Ci0gICAgLy8gTWVyZ2Ug
dGhlIHJlYWwgYW5kIGltYWdpbWFyeSB2ZWN0b3JzIHRvIGNvbXBsZXggdmVjdG9yLgotICAgIElw
cDMyZiogcmVhbFAgPSBtX3JlYWxEYXRhLmRhdGEoKTsKLSAgICBJcHAzMmYqIGltYWdQID0gbV9p
bWFnRGF0YS5kYXRhKCk7Ci0gICAgSXBwMzJmYyogY29tcGxleFAgPSByZWludGVycHJldF9jYXN0
PElwcDMyZmMqPihtX2NvbXBsZXhEYXRhLmRhdGEoKSk7Ci0gICAgaXBwc1JlYWxUb0NwbHhfMzJm
KHJlYWxQLCBpbWFnUCwgY29tcGxleFAsIGxlbik7Ci0KLSAgICByZXR1cm4gY29uc3RfY2FzdDxm
bG9hdCo+KG1fY29tcGxleERhdGEuZGF0YSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gVVNFKFdFQkFVRElPX0lQUCkKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvRkZU
RnJhbWVNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0ZGVEZyYW1l
TWFjLmNwcAppbmRleCA5NzVmMjg1Li4zNjQxZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9tYWMvRkZURnJhbWVNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAog
I2lmIEVOQUJMRShXRUJfQVVESU8pCiAKLSNpZiBPUyhEQVJXSU4pICYmICFVU0UoV0VCQVVESU9f
RkZNUEVHKQorI2lmIE9TKERBUldJTikKIAogI2luY2x1ZGUgIkZGVEZyYW1lLmgiCiAKQEAgLTE4
OCw2ICsxODgsNiBAQCBmbG9hdCogRkZURnJhbWU6OmltYWdEYXRhKCkgY29uc3QKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gI2lmIE9TKERBUldJTikgJiYgIVVTRShXRUJB
VURJT19GRk1QRUcpCisjZW5kaWYgLy8gI2lmIE9TKERBUldJTikKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVESU8pCi0tIAoyLjEuMC5yYzE=
</data>
<flag name="review"
          id="260969"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>