<?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>44682</bug_id>
          
          <creation_ts>2010-08-26 06:18:40 -0700</creation_ts>
          <short_desc>[CHROMIUM] Canvas2D shaders should have their own classes</short_desc>
          <delta_ts>2010-08-26 14:12:28 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</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="Stephen White">senorblanco</reporter>
          <assigned_to name="Stephen White">senorblanco</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>269847</commentid>
    <comment_count>0</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-08-26 06:18:40 -0700</bug_when>
    <thetext>GLES2Canvas currently contains all the shaders for 2D &lt;canvas&gt;.  They should be refactored out into their own class hierarchy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269857</commentid>
    <comment_count>1</comment_count>
      <attachid>65555</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-08-26 06:52:52 -0700</bug_when>
    <thetext>Created attachment 65555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269998</commentid>
    <comment_count>2</comment_count>
      <attachid>65555</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-26 11:37:55 -0700</bug_when>
    <thetext>Comment on attachment 65555
Patch

This refactoring looks good overall but I&apos;m concerned about putting a name as generic as Shader into the WebCore namespace. I will start sending out patches today which introduce a gpu2d sub-namespace into which I&apos;m also planning to put some shader-related classes that will need to be merged with your work. Once that is in place I think it would be best to scope Shader (and the other accelerated 2D canvas classes) within that namespace. I wonder whether you can hold off this commit for a day or two. If not, I&apos;ll r+ it and we can refactor things later. Up to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270023</commentid>
    <comment_count>3</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-08-26 12:14:54 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 65555 [details])
&gt; This refactoring looks good overall but I&apos;m concerned about putting a name as generic as Shader into the WebCore namespace. I will start sending out patches today which introduce a gpu2d sub-namespace into which I&apos;m also planning to put some shader-related classes that will need to be merged with your work. Once that is in place I think it would be best to scope Shader (and the other accelerated 2D canvas classes) within that namespace. I wonder whether you can hold off this commit for a day or two. If not, I&apos;ll r+ it and we can refactor things later. Up to you.

According to the EWS bots, it doesn&apos;t seem to conflict with anything yet.  I don&apos;t mind refactoring after your stuff goes in, as long as this change doesn&apos;t slow you down too much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270058</commentid>
    <comment_count>4</comment_count>
      <attachid>65555</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-26 13:06:27 -0700</bug_when>
    <thetext>Comment on attachment 65555
Patch

r+&apos;ing after offline discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270083</commentid>
    <comment_count>5</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-08-26 13:33:38 -0700</bug_when>
    <thetext>Committed r66130: &lt;http://trac.webkit.org/changeset/66130&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270109</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-26 14:12:28 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66130 might have broken Chromium Mac Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65555</attachid>
            <date>2010-08-26 06:52:52 -0700</date>
            <delta_ts>2010-08-26 13:06:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44682-20100826095250.patch</filename>
            <type>text/plain</type>
            <size>24877</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjEwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTAtMDgtMjYgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW0NIUk9NSVVNXSBHaXZlIDxjYW52YXM+IDJEIHNoYWRlcnMgdGhlaXIgb3duIGNsYXNz
IGhpZXJhcmNoeS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGZhc3QvY2FudmFzIGxheW91dCB0ZXN0
cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgQWRkIFNoYWRlci5jcHAsIFNo
YWRlci5oIHRvIGNocm9taXVtIGJ1aWxkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpH
TEVTMkNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6fkdMRVMyQ2FudmFz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpmaWxsUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdFRpbGUpOgorICAgICAgICBSaXAgb3V0IGFs
bCBzaGFkZXIgaW5pdGlhbGl6YXRpb24gYW5kIGNvbXBpbGF0aW9uIGNvZGUuCisgICAgICAgIElu
c3RhbnRpYXRlIHNwZWNpYWxpemVkIHNoYWRlcnMgaW5zdGVhZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NoYWRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6YWZm
aW5lVG8zeDMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZGVyOjpTaGFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhZGVyOjp+U2hhZGVyKToKKyAgICAgICAgSW1wbGVtZW50IFNoYWRlciBiYXNl
IGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6bG9hZFNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpsb2FkUHJvZ3JhbSk6CisgICAgICAgIFV0aWxpdHkgZnVuY3Rpb25zIHJlZmFjdG9yZWQgZnJv
bSBHTEVTMkNhbnZhcy4KKyAgICAgICAgKFdlYkNvcmU6OlNvbGlkRmlsbFNoYWRlcjo6U29saWRG
aWxsU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleFNoYWRlcjo6VGV4U2hhZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvbGlkRmlsbFNoYWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvbGlkRmlsbFNoYWRlcjo6dXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleFNoYWRlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleFNoYWRlcjo6dXNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXIuaDogQWRkZWQuCisKIDIwMTAtMDgtMjYg
IElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjYwMTQpCisrKyBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjI3MSw2ICsyMjcxLDggQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5
ZXJQcml2YXRlQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUGxhdGZvcm1JY29uLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NoYWRlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NoYWRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGluZ0RhdGEuaCcsCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2aXNp
b24gNjYwMTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2Fu
dmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSAiU2hhZGVyLmgiCiAKICNkZWZpbmUgX1VTRV9NQVRIX0RFRklO
RVMKICNpbmNsdWRlIDxtYXRoLmg+CkBAIC00OCwxOSArNDksNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhZmZpbmVUbzN4Myhjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSwgZmxvYXQgbWF0WzldKQotewotICAgIG1hdFswXSA9IHRyYW5zZm9y
bS5hKCk7Ci0gICAgbWF0WzFdID0gdHJhbnNmb3JtLmIoKTsKLSAgICBtYXRbMl0gPSAwLjBmOwot
ICAgIG1hdFszXSA9IHRyYW5zZm9ybS5jKCk7Ci0gICAgbWF0WzRdID0gdHJhbnNmb3JtLmQoKTsK
LSAgICBtYXRbNV0gPSAwLjBmOwotICAgIG1hdFs2XSA9IHRyYW5zZm9ybS5lKCk7Ci0gICAgbWF0
WzddID0gdHJhbnNmb3JtLmYoKTsKLSAgICBtYXRbOF0gPSAxLjBmOwotfQotCiBzdHJ1Y3QgR0xF
UzJDYW52YXM6OlN0YXRlIHsKICAgICBTdGF0ZSgpCiAgICAgICAgIDogbV9maWxsQ29sb3IoMCwg
MCwgMCwgMjU1KQpAQCAtNzcsMTYgKzY1LDggQEAgc3RydWN0IEdMRVMyQ2FudmFzOjpTdGF0ZSB7
CiBHTEVTMkNhbnZhczo6R0xFUzJDYW52YXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNv
bnN0IEludFNpemUmIHNpemUpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fcXVh
ZFZlcnRpY2VzKDApCi0gICAgLCBtX3NpbXBsZVByb2dyYW0oMCkKLSAgICAsIG1fdGV4UHJvZ3Jh
bSgwKQotICAgICwgbV9zaW1wbGVNYXRyaXhMb2NhdGlvbigtMSkKLSAgICAsIG1fc2ltcGxlQ29s
b3JMb2NhdGlvbigtMSkKLSAgICAsIG1fc2ltcGxlUG9zaXRpb25Mb2NhdGlvbigtMSkKLSAgICAs
IG1fdGV4TWF0cml4TG9jYXRpb24oLTEpCi0gICAgLCBtX3RleFRleE1hdHJpeExvY2F0aW9uKC0x
KQotICAgICwgbV90ZXhTYW1wbGVyTG9jYXRpb24oLTEpCi0gICAgLCBtX3RleEFscGhhTG9jYXRp
b24oLTEpCi0gICAgLCBtX3RleFBvc2l0aW9uTG9jYXRpb24oLTEpCisgICAgLCBtX3NvbGlkRmls
bFNoYWRlcihTb2xpZEZpbGxTaGFkZXI6OmNyZWF0ZShjb250ZXh0KSkKKyAgICAsIG1fdGV4U2hh
ZGVyKFRleFNoYWRlcjo6Y3JlYXRlKGNvbnRleHQpKQogICAgICwgbV9zdGF0ZSgwKQogewogICAg
IG1fZmxpcE1hdHJpeC50cmFuc2xhdGUoLTEuMGYsIDEuMGYpOwpAQCAtMTA1LDggKzg1LDYgQEAg
R0xFUzJDYW52YXM6OkdMRVMyQ2FudmFzKEdyYXBoaWNzQ29udGV4dAogCiBHTEVTMkNhbnZhczo6
fkdMRVMyQ2FudmFzKCkKIHsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9zaW1wbGVQ
cm9ncmFtKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV90ZXhQcm9ncmFtKTsKICAg
ICBtX2NvbnRleHQtPmRlbGV0ZUJ1ZmZlcihtX3F1YWRWZXJ0aWNlcyk7CiB9CiAKQEAgLTEzMSwy
MyArMTA5LDExIEBAIHZvaWQgR0xFUzJDYW52YXM6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmUKIAog
ICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVS
LCBnZXRRdWFkVmVydGljZXMoKSk7CiAKLSAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0oZ2V0U2lt
cGxlUHJvZ3JhbSgpKTsKLQotICAgIGZsb2F0IHJnYmFbNF07Ci0gICAgY29sb3IuZ2V0UkdCQShy
Z2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdLCByZ2JhWzNdKTsKLSAgICBtX2NvbnRleHQtPnVuaWZv
cm00ZihtX3NpbXBsZUNvbG9yTG9jYXRpb24sIHJnYmFbMF0gKiByZ2JhWzNdLCByZ2JhWzFdICog
cmdiYVszXSwgcmdiYVsyXSAqIHJnYmFbM10sIHJnYmFbM10pOwotCiAgICAgQWZmaW5lVHJhbnNm
b3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwogICAgIG1hdHJpeC5tdWx0TGVmdChtX3N0YXRlLT5t
X2N0bSk7CiAgICAgbWF0cml4LnRyYW5zbGF0ZShyZWN0LngoKSwgcmVjdC55KCkpOwogICAgIG1h
dHJpeC5zY2FsZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIGZsb2F0IG1hdFs5
XTsKLSAgICBhZmZpbmVUbzN4MyhtYXRyaXgsIG1hdCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3Jt
TWF0cml4M2Z2KG1fc2ltcGxlTWF0cml4TG9jYXRpb24sIGZhbHNlIC8qdHJhbnNwb3NlKi8sIG1h
dCwgMSAvKmNvdW50Ki8pOwotCi0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1f
c2ltcGxlUG9zaXRpb25Mb2NhdGlvbiwgMywgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxz
ZSwgMCwgMCk7Ci0KLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fc2lt
cGxlUG9zaXRpb25Mb2NhdGlvbik7CisgICAgbV9zb2xpZEZpbGxTaGFkZXItPnVzZShtYXRyaXgs
IGNvbG9yKTsKIAogICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6
VFJJQU5HTEVfU1RSSVAsIDAsIDQpOwogfQpAQCAtMjEyLDM3ICsxNzgsMjMgQEAgdm9pZCBHTEVT
MkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChHTEVTMgogICAgIG1fY29udGV4dC0+YmluZEJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBnZXRRdWFkVmVydGljZXMoKSk7CiAg
ICAgY2hlY2tHTEVycm9yKCJnbEJpbmRCdWZmZXIiKTsKIAotICAgIG1fY29udGV4dC0+dXNlUHJv
Z3JhbShnZXRUZXhQcm9ncmFtKCkpOwotICAgIGNoZWNrR0xFcnJvcigiZ2xVc2VQcm9ncmFtIik7
Ci0KLSAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKTsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fdGV4U2FtcGxlckxvY2F0aW9uLCAw
KTsKLSAgICBjaGVja0dMRXJyb3IoImdsVW5pZm9ybTFpIik7Ci0KLSAgICBtX2NvbnRleHQtPnVu
aWZvcm0xZihtX3RleEFscGhhTG9jYXRpb24sIGFscGhhKTsKLSAgICBjaGVja0dMRXJyb3IoImds
VW5pZm9ybTFmIGZvciBhbHBoYSIpOwotCi0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2lu
dGVyKG1fdGV4UG9zaXRpb25Mb2NhdGlvbiwgMywgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBm
YWxzZSwgMCwgMCk7Ci0KLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1f
dGV4UG9zaXRpb25Mb2NhdGlvbik7Ci0KICAgICBjb25zdCBUaWxpbmdEYXRhJiB0aWxlcyA9IHRl
eHR1cmUtPnRpbGVzKCk7CiAgICAgSW50UmVjdCB0aWxlSWR4UmVjdCA9IHRpbGVzLm92ZXJsYXBw
ZWRUaWxlSW5kaWNlcyhzcmNSZWN0KTsKIAogICAgIGZvciAoaW50IHkgPSB0aWxlSWR4UmVjdC55
KCk7IHkgPD0gdGlsZUlkeFJlY3QuYm90dG9tKCk7IHkrKykgewogICAgICAgICBmb3IgKGludCB4
ID0gdGlsZUlkeFJlY3QueCgpOyB4IDw9IHRpbGVJZHhSZWN0LnJpZ2h0KCk7IHgrKykKLSAgICAg
ICAgICAgIGRyYXdUZXh0dXJlZFJlY3RUaWxlKHRleHR1cmUsIHRpbGVzLnRpbGVJbmRleCh4LCB5
KSwgc3JjUmVjdCwgZHN0UmVjdCwgdHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGRyYXdUZXh0dXJl
ZFJlY3RUaWxlKHRleHR1cmUsIHRpbGVzLnRpbGVJbmRleCh4LCB5KSwgc3JjUmVjdCwgZHN0UmVj
dCwgdHJhbnNmb3JtLCBhbHBoYSk7CiAgICAgfQogfQogCi12b2lkIEdMRVMyQ2FudmFzOjpkcmF3
VGV4dHVyZWRSZWN0VGlsZShHTEVTMlRleHR1cmUqIHRleHR1cmUsIGludCB0aWxlLCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0
VGlsZShHTEVTMlRleHR1cmUqIHRleHR1cmUsIGludCB0aWxlLCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0sIGZsb2F0IGFscGhhKQogewogICAgIGlmIChkc3RSZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMgPSB0ZXh0dXJlLT50
aWxlcygpOwogCisgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFMCk7CiAgICAgdGV4dHVyZS0+YmluZFRpbGUodGlsZSk7CiAKICAgICBGbG9hdFJl
Y3Qgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZTsKQEAgLTI1NSwxOSArMjA3LDEzIEBAIHZvaWQg
R0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3RUaWxlKEcKICAgICBtYXRyaXgubXVsdExlZnQo
dHJhbnNmb3JtKTsKICAgICBtYXRyaXgudHJhbnNsYXRlKGRzdFJlY3RJbnRlcnNlY3RlZC54KCks
IGRzdFJlY3RJbnRlcnNlY3RlZC55KCkpOwogICAgIG1hdHJpeC5zY2FsZShkc3RSZWN0SW50ZXJz
ZWN0ZWQud2lkdGgoKSwgZHN0UmVjdEludGVyc2VjdGVkLmhlaWdodCgpKTsKLSAgICBmbG9hdCBt
YXRbOV07Ci0gICAgYWZmaW5lVG8zeDMobWF0cml4LCBtYXQpOwotICAgIG1fY29udGV4dC0+dW5p
Zm9ybU1hdHJpeDNmdihtX3RleE1hdHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCBt
YXQsIDEgLypjb3VudCovKTsKLSAgICBjaGVja0dMRXJyb3IoImdsVW5pZm9ybU1hdHJpeDNmdiIp
OwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHRleE1hdHJpeDsKICAgICB0ZXhNYXRyaXguc2NhbGUo
MS4wZiAvIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRoKCksIDEuMGYgLyB0aWxlQm91bmRzV2l0
aEJvcmRlci5oZWlnaHQoKSk7CiAgICAgdGV4TWF0cml4LnRyYW5zbGF0ZShzcmNSZWN0Q2xpcHBl
ZEluVGlsZVNwYWNlLngoKSwgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZS55KCkpOwogICAgIHRl
eE1hdHJpeC5zY2FsZShzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLndpZHRoKCksIHNyY1JlY3RD
bGlwcGVkSW5UaWxlU3BhY2UuaGVpZ2h0KCkpOwotICAgIGZsb2F0IHRleE1hdFs5XTsKLSAgICBh
ZmZpbmVUbzN4Myh0ZXhNYXRyaXgsIHRleE1hdCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0
cml4M2Z2KG1fdGV4VGV4TWF0cml4TG9jYXRpb24sIGZhbHNlIC8qdHJhbnNwb3NlKi8sIHRleE1h
dCwgMSAvKmNvdW50Ki8pOwotICAgIGNoZWNrR0xFcnJvcigiZ2xVbmlmb3JtTWF0cml4M2Z2Iik7
CisKKyAgICBtX3RleFNoYWRlci0+dXNlKG1hdHJpeCwgdGV4TWF0cml4LCAwLCBhbHBoYSk7CiAK
ICAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NU
UklQLCAwLCA0KTsKICAgICBjaGVja0dMRXJyb3IoImdsRHJhd0FycmF5cyIpOwpAQCAtMzc1LDk1
ICszMjEsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9hZFNoYWRlcihHcmFwaGljc0NvbnRlCiAgICAg
cmV0dXJuIHNoYWRlcjsKIH0KIAotdW5zaWduZWQgR0xFUzJDYW52YXM6OmdldFNpbXBsZVByb2dy
YW0oKQotewotICAgIGlmICghbV9zaW1wbGVQcm9ncmFtKSB7Ci0gICAgICAgIHVuc2lnbmVkIHZl
cnRleFNoYWRlciA9IGxvYWRTaGFkZXIobV9jb250ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX1NIQURFUiwKLSAgICAgICAgICAgICJ1bmlmb3JtIG1hdDMgbWF0cml4O1xuIgotICAgICAg
ICAgICAgInVuaWZvcm0gdmVjNCBjb2xvcjtcbiIKLSAgICAgICAgICAgICJhdHRyaWJ1dGUgdmVj
MyBwb3NpdGlvbjtcbiIKLSAgICAgICAgICAgICJ2b2lkIG1haW4oKSB7XG4iCi0gICAgICAgICAg
ICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChtYXRyaXggKiBwb3NpdGlvbiwgMS4wKTtcbiIKLSAg
ICAgICAgICAgICJ9XG4iKTsKLSAgICAgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVy
KG1fY29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUiwKLSAgICAgICAg
ICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKLSAgICAgICAgICAgICJ1bmlmb3JtIG1h
dDMgbWF0cml4O1xuIgotICAgICAgICAgICAgInVuaWZvcm0gdmVjNCBjb2xvcjtcbiIKLSAgICAg
ICAgICAgICJ2b2lkIG1haW4oKSB7XG4iCi0gICAgICAgICAgICAiICAgIGdsX0ZyYWdDb2xvciA9
IGNvbG9yO1xuIgotICAgICAgICAgICAgIn1cbiIpOwotICAgICAgICBpZiAoIWZyYWdtZW50U2hh
ZGVyKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIG1fc2ltcGxlUHJvZ3JhbSA9IG1f
Y29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwotICAgICAgICBpZiAoIW1fc2ltcGxlUHJvZ3JhbSkK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlciht
X3NpbXBsZVByb2dyYW0sIHZlcnRleFNoYWRlcik7Ci0gICAgICAgIG1fY29udGV4dC0+YXR0YWNo
U2hhZGVyKG1fc2ltcGxlUHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOwotICAgICAgICBtX2NvbnRl
eHQtPmxpbmtQcm9ncmFtKG1fc2ltcGxlUHJvZ3JhbSk7Ci0gICAgICAgIGludCBsaW5rU3RhdHVz
OwotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihtX3NpbXBsZVByb2dyYW0sIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUywgJmxpbmtTdGF0dXMpOwotICAgICAgICBpZiAoIWxp
bmtTdGF0dXMpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3NpbXBs
ZVByb2dyYW0pOwotICAgICAgICAgICAgbV9zaW1wbGVQcm9ncmFtID0gMDsKLSAgICAgICAgfQot
ICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBt
X2NvbnRleHQtPmRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIG1fc2ltcGxl
UG9zaXRpb25Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24obV9zaW1wbGVQ
cm9ncmFtLCAicG9zaXRpb24iKTsKLSAgICAgICAgbV9zaW1wbGVNYXRyaXhMb2NhdGlvbiA9IG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fc2ltcGxlUHJvZ3JhbSwgIm1hdHJpeCIpOwot
ICAgICAgICBtX3NpbXBsZUNvbG9yTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2Nh
dGlvbihtX3NpbXBsZVByb2dyYW0sICJjb2xvciIpOwotICAgIH0KLSAgICByZXR1cm4gbV9zaW1w
bGVQcm9ncmFtOwotfQotCi11bnNpZ25lZCBHTEVTMkNhbnZhczo6Z2V0VGV4UHJvZ3JhbSgpCi17
Ci0gICAgaWYgKCFtX3RleFByb2dyYW0pIHsKLSAgICAgICAgdW5zaWduZWQgdmVydGV4U2hhZGVy
ID0gbG9hZFNoYWRlcihtX2NvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVS
LAotICAgICAgICAgICAgInVuaWZvcm0gbWF0MyBtYXRyaXg7XG4iCi0gICAgICAgICAgICAidW5p
Zm9ybSBtYXQzIHRleE1hdHJpeDtcbiIKLSAgICAgICAgICAgICJhdHRyaWJ1dGUgdmVjMyBwb3Np
dGlvbjtcbiIKLSAgICAgICAgICAgICJ2YXJ5aW5nIHZlYzMgdGV4Q29vcmQ7XG4iCi0gICAgICAg
ICAgICAidm9pZCBtYWluKCkge1xuIgotICAgICAgICAgICAgIiAgICB0ZXhDb29yZCA9IHRleE1h
dHJpeCAqIHBvc2l0aW9uO1xuIgotICAgICAgICAgICAgIiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQo
bWF0cml4ICogcG9zaXRpb24sIDEuMCk7XG4iCi0gICAgICAgICAgICAifVxuIik7Ci0gICAgICAg
IGlmICghdmVydGV4U2hhZGVyKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHVuc2ln
bmVkIGZyYWdtZW50U2hhZGVyID0gbG9hZFNoYWRlcihtX2NvbnRleHQsIEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFHTUVOVF9TSEFERVIsCi0gICAgICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7XG4iCi0gICAgICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc2FtcGxlcjtcbiIKLSAgICAg
ICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhO1xuIgotICAgICAgICAgICAgInZhcnlpbmcgdmVj
MyB0ZXhDb29yZDtcbiIKLSAgICAgICAgICAgICJ2b2lkIG1haW4oKSB7XG4iCi0gICAgICAgICAg
ICAiICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRChzYW1wbGVyLCB0ZXhDb29yZC54eSkqIHZl
YzQoYWxwaGEpO1xuIgotICAgICAgICAgICAgIn1cbiIpOwotICAgICAgICBpZiAoIWZyYWdtZW50
U2hhZGVyKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIG1fdGV4UHJvZ3JhbSA9IG1f
Y29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwotICAgICAgICBpZiAoIW1fdGV4UHJvZ3JhbSkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX3Rl
eFByb2dyYW0sIHZlcnRleFNoYWRlcik7Ci0gICAgICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVy
KG1fdGV4UHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOwotICAgICAgICBtX2NvbnRleHQtPmxpbmtQ
cm9ncmFtKG1fdGV4UHJvZ3JhbSk7Ci0gICAgICAgIGludCBsaW5rU3RhdHVzOwotICAgICAgICBt
X2NvbnRleHQtPmdldFByb2dyYW1pdihtX3RleFByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5LX1NUQVRVUywgJmxpbmtTdGF0dXMpOwotICAgICAgICBpZiAoIWxpbmtTdGF0dXMpIHsKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3RleFByb2dyYW0pOwotICAgICAg
ICAgICAgbV90ZXhQcm9ncmFtID0gMDsKLSAgICAgICAgfQotICAgICAgICBtX2NvbnRleHQtPmRl
bGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRl
cihmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIG1fdGV4TWF0cml4TG9jYXRpb24gPSBtX2NvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dyYW0sICJtYXRyaXgiKTsKLSAgICAgICAg
bV90ZXhTYW1wbGVyTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3Rl
eFByb2dyYW0sICJzYW1wbGVyIik7Ci0gICAgICAgIG1fdGV4VGV4TWF0cml4TG9jYXRpb24gPSBt
X2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dyYW0sICJ0ZXhNYXRyaXgiKTsK
LSAgICAgICAgbV90ZXhQb3NpdGlvbkxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2Nh
dGlvbihtX3RleFByb2dyYW0sICJwb3NpdGlvbiIpOwotICAgICAgICBtX3RleEFscGhhTG9jYXRp
b24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RleFByb2dyYW0sICJhbHBoYSIp
OwotICAgIH0KLSAgICByZXR1cm4gbV90ZXhQcm9ncmFtOwotfQotCiBHTEVTMlRleHR1cmUqIEdM
RVMyQ2FudmFzOjpjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0ciwgR0xFUzJUZXh0dXJl
OjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgUGFzc1JlZlB0
cjxHTEVTMlRleHR1cmU+IHRleHR1cmUgPSBtX3RleHR1cmVzLmdldChwdHIpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAkocmV2
aXNpb24gNjYwMTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMy
Q2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgQ29sb3I7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQzRDsKK2NsYXNzIFNvbGlkRmlsbFNoYWRlcjsKK2NsYXNzIFRleFNoYWRlcjsKIAogdHlwZWRl
ZiBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBSZWZQdHI8R0xFUzJUZXh0dXJlPiA+IFRleHR1cmVI
YXNoTWFwOwogCkBAIC04MSwyOCArODMsMTggQEAgcHVibGljOgogICAgIEdMRVMyVGV4dHVyZSog
Z2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBkcmF3VGV4
dHVyZWRSZWN0VGlsZShHTEVTMlRleHR1cmUqIHRleHR1cmUsIGludCB0aWxlLCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJik7CisgICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0VGlsZShHTEVTMlRleHR1cmUqIHRl
eHR1cmUsIGludCB0aWxlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEpOwogICAgIHZv
aWQgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgdm9pZCBj
aGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVhZGVyKTsKICAgICB1bnNpZ25lZCBnZXRRdWFkVmVy
dGljZXMoKTsKLSAgICB1bnNpZ25lZCBnZXRTaW1wbGVQcm9ncmFtKCk7Ci0gICAgdW5zaWduZWQg
Z2V0VGV4UHJvZ3JhbSgpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKICAg
ICBzdHJ1Y3QgU3RhdGU7CiAgICAgV1RGOjpWZWN0b3I8U3RhdGU+IG1fc3RhdGVTdGFjazsKICAg
ICBTdGF0ZSogbV9zdGF0ZTsKICAgICB1bnNpZ25lZCBtX3F1YWRWZXJ0aWNlczsKLSAgICB1bnNp
Z25lZCBtX3NpbXBsZVByb2dyYW07Ci0gICAgdW5zaWduZWQgbV90ZXhQcm9ncmFtOwotICAgIGlu
dCBtX3NpbXBsZU1hdHJpeExvY2F0aW9uOwotICAgIGludCBtX3NpbXBsZUNvbG9yTG9jYXRpb247
Ci0gICAgaW50IG1fc2ltcGxlUG9zaXRpb25Mb2NhdGlvbjsKLSAgICBpbnQgbV90ZXhNYXRyaXhM
b2NhdGlvbjsKLSAgICBpbnQgbV90ZXhUZXhNYXRyaXhMb2NhdGlvbjsKLSAgICBpbnQgbV90ZXhT
YW1wbGVyTG9jYXRpb247Ci0gICAgaW50IG1fdGV4QWxwaGFMb2NhdGlvbjsKLSAgICBpbnQgbV90
ZXhQb3NpdGlvbkxvY2F0aW9uOworICAgIE93blB0cjxTb2xpZEZpbGxTaGFkZXI+IG1fc29saWRG
aWxsU2hhZGVyOworICAgIE93blB0cjxUZXhTaGFkZXI+IG1fdGV4U2hhZGVyOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSBtX2ZsaXBNYXRyaXg7CiAgICAgVGV4dHVyZUhhc2hNYXAgbV90ZXh0dXJlczsK
ICAgICBDb21wb3NpdGVPcGVyYXRvciBtX2xhc3RDb21wb3NpdGVPcDsgLy8gVGhpcyBpcyB0aGUg
b25lIGxhc3Qgc2V0LCBub3QgbmVjZXNzYXJpbHkgdGhlIG9uZSBpbiB0aGUgc3RhdGUgc3RhY2su
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXIuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFk
ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2hhZGVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZmZpbmVUbzN4Myhj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgZmxvYXQgbWF0WzldKQoreworICAgIG1h
dFswXSA9IHRyYW5zZm9ybS5hKCk7CisgICAgbWF0WzFdID0gdHJhbnNmb3JtLmIoKTsKKyAgICBt
YXRbMl0gPSAwLjBmOworICAgIG1hdFszXSA9IHRyYW5zZm9ybS5jKCk7CisgICAgbWF0WzRdID0g
dHJhbnNmb3JtLmQoKTsKKyAgICBtYXRbNV0gPSAwLjBmOworICAgIG1hdFs2XSA9IHRyYW5zZm9y
bS5lKCk7CisgICAgbWF0WzddID0gdHJhbnNmb3JtLmYoKTsKKyAgICBtYXRbOF0gPSAxLjBmOwor
fQorCitTaGFkZXI6OlNoYWRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQg
cHJvZ3JhbSkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9wcm9ncmFtKHByb2dy
YW0pCit7Cit9CisKK1NoYWRlcjo6flNoYWRlcigpCit7CisgICAgbV9jb250ZXh0LT5kZWxldGVQ
cm9ncmFtKG1fcHJvZ3JhbSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb2FkU2hhZGVyKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCB0eXBlLCBjb25zdCBjaGFyKiBzaGFkZXJT
b3VyY2UpCit7CisgICAgdW5zaWduZWQgc2hhZGVyID0gY29udGV4dC0+Y3JlYXRlU2hhZGVyKHR5
cGUpOworICAgIGlmICghc2hhZGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmluZyBz
aGFkZXJTb3VyY2VTdHIoc2hhZGVyU291cmNlKTsKKyAgICBjb250ZXh0LT5zaGFkZXJTb3VyY2Uo
c2hhZGVyLCBzaGFkZXJTb3VyY2VTdHIpOworICAgIGNvbnRleHQtPmNvbXBpbGVTaGFkZXIoc2hh
ZGVyKTsKKyAgICBpbnQgY29tcGlsZVN0YXR1czsKKyAgICBjb250ZXh0LT5nZXRTaGFkZXJpdihz
aGFkZXIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMp
OworICAgIGlmICghY29tcGlsZVN0YXR1cykgeworICAgICAgICBTdHJpbmcgaW5mb0xvZyA9IGNv
bnRleHQtPmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKKyAgICAgICAgTE9HX0VSUk9SKGluZm9M
b2cudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGNvbnRleHQtPmRlbGV0ZVNoYWRlcihzaGFkZXIp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHNoYWRlcjsKK30KKworc3Rh
dGljIHVuc2lnbmVkIGxvYWRQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25z
dCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlKQoreworICAgIHVuc2lnbmVkIHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIoY29udGV4dCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIsIHZlcnRleFNoYWRlclNvdXJjZSk7Cisg
ICAgaWYgKCF2ZXJ0ZXhTaGFkZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHVuc2lnbmVkIGZy
YWdtZW50U2hhZGVyID0gbG9hZFNoYWRlcihjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6RlJB
R01FTlRfU0hBREVSLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgaWYgKCFmcmFnbWVudFNo
YWRlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQgcHJvZ3JhbSA9IGNvbnRleHQt
PmNyZWF0ZVByb2dyYW0oKTsKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiAwOwor
ICAgIGNvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgIGNv
bnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisgICAgY29udGV4
dC0+bGlua1Byb2dyYW0ocHJvZ3JhbSk7CisgICAgaW50IGxpbmtTdGF0dXM7CisgICAgY29udGV4
dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUywg
JmxpbmtTdGF0dXMpOworICAgIGlmICghbGlua1N0YXR1cykKKyAgICAgICAgY29udGV4dC0+ZGVs
ZXRlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICBjb250ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hh
ZGVyKTsKKyAgICBjb250ZXh0LT5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIHJl
dHVybiBwcm9ncmFtOworfQorCitTb2xpZEZpbGxTaGFkZXI6OlNvbGlkRmlsbFNoYWRlcihHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgcHJvZ3JhbSkKKyAgICA6IFNoYWRlcihj
b250ZXh0LCBwcm9ncmFtKQoreworICAgIG1fbWF0cml4TG9jYXRpb24gPSBjb250ZXh0LT5nZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgIm1hdHJpeCIpOworICAgIG1fY29sb3JMb2NhdGlvbiA9
IGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAiY29sb3IiKTsKKyAgICBtX3Bv
c2l0aW9uTG9jYXRpb24gPSBjb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAicG9z
aXRpb24iKTsKK30KKworVGV4U2hhZGVyOjpUZXhTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIHVuc2lnbmVkIHByb2dyYW0pCisgICAgOiBTaGFkZXIoY29udGV4dCwgcHJvZ3JhbSkK
K3sKKyAgICBtX21hdHJpeExvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0sICJtYXRyaXgiKTsKKyAgICBtX3RleE1hdHJpeExvY2F0aW9uID0gY29udGV4dC0+Z2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJ0ZXhNYXRyaXgiKTsKKyAgICBtX2FscGhhTG9jYXRp
b24gPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImFscGhhIik7CisgICAg
bV9wb3NpdGlvbkxvY2F0aW9uID0gY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwg
InBvc2l0aW9uIik7CisgICAgbV9zYW1wbGVyTG9jYXRpb24gPSBjb250ZXh0LT5nZXRVbmlmb3Jt
TG9jYXRpb24ocHJvZ3JhbSwgInNhbXBsZXIiKTsKK30KKworUGFzc093blB0cjxTb2xpZEZpbGxT
aGFkZXI+IFNvbGlkRmlsbFNoYWRlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQoreworICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9IAorICAgICAgICAgICAg
InVuaWZvcm0gbWF0MyBtYXRyaXg7XG4iCisgICAgICAgICAgICAidW5pZm9ybSB2ZWM0IGNvbG9y
O1xuIgorICAgICAgICAgICAgImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuIgorICAgICAgICAg
ICAgInZvaWQgbWFpbigpIHtcbiIKKyAgICAgICAgICAgICIgICAgZ2xfUG9zaXRpb24gPSB2ZWM0
KG1hdHJpeCAqIHBvc2l0aW9uLCAxLjApO1xuIgorICAgICAgICAgICAgIn1cbiI7CisgICAgY29u
c3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UgPQorICAgICAgICAgICAgInByZWNpc2lvbiBt
ZWRpdW1wIGZsb2F0O1xuIgorICAgICAgICAgICAgInVuaWZvcm0gbWF0MyBtYXRyaXg7XG4iCisg
ICAgICAgICAgICAidW5pZm9ybSB2ZWM0IGNvbG9yO1xuIgorICAgICAgICAgICAgInZvaWQgbWFp
bigpIHtcbiIKKyAgICAgICAgICAgICIgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG4iCisgICAg
ICAgICAgICAifVxuIjsKKyAgICB1bnNpZ25lZCBwcm9ncmFtID0gbG9hZFByb2dyYW0oY29udGV4
dCwgdmVydGV4U2hhZGVyU291cmNlLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgaWYgKCFw
cm9ncmFtKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV3IFNvbGlkRmlsbFNoYWRl
cihjb250ZXh0LCBwcm9ncmFtKTsKK30KKwordm9pZCBTb2xpZEZpbGxTaGFkZXI6OnVzZShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAg
IG1fY29udGV4dC0+dXNlUHJvZ3JhbShtX3Byb2dyYW0pOworCisgICAgZmxvYXQgcmdiYVs0XTsK
KyAgICBjb2xvci5nZXRSR0JBKHJnYmFbMF0sIHJnYmFbMV0sIHJnYmFbMl0sIHJnYmFbM10pOwor
ICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKG1fY29sb3JMb2NhdGlvbiwgcmdiYVswXSAqIHJnYmFb
M10sIHJnYmFbMV0gKiByZ2JhWzNdLCByZ2JhWzJdICogcmdiYVszXSwgcmdiYVszXSk7CisKKyAg
ICBmbG9hdCBtYXRyaXhbOV07CisgICAgYWZmaW5lVG8zeDModHJhbnNmb3JtLCBtYXRyaXgpOwor
ICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihtX21hdHJpeExvY2F0aW9uLCBmYWxzZSAv
KnRyYW5zcG9zZSovLCBtYXRyaXgsIDEgLypjb3VudCovKTsKKworICAgIG1fY29udGV4dC0+dmVy
dGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9uTG9jYXRpb24sIDMsIEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVCwgZmFsc2UsIDAsIDApOworCisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShtX3Bvc2l0aW9uTG9jYXRpb24pOworfQorCitQYXNzT3duUHRyPFRleFNoYWRlcj4g
VGV4U2hhZGVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlID0KKyAgICAgICAgInVuaWZvcm0gbWF0MyBtYXRy
aXg7XG4iCisgICAgICAgICJ1bmlmb3JtIG1hdDMgdGV4TWF0cml4O1xuIgorICAgICAgICAiYXR0
cmlidXRlIHZlYzMgcG9zaXRpb247XG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzMgdGV4Q29vcmQ7
XG4iCisgICAgICAgICJ2b2lkIG1haW4oKSB7XG4iCisgICAgICAgICIgICAgdGV4Q29vcmQgPSB0
ZXhNYXRyaXggKiBwb3NpdGlvbjtcbiIKKyAgICAgICAgIiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQo
bWF0cml4ICogcG9zaXRpb24sIDEuMCk7XG4iCisgICAgICAgICJ9XG4iOworICAgIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZGVyU291cmNlID0KKyAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0O1xuIgorICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc2FtcGxlcjtcbiIKKyAgICAgICAg
InVuaWZvcm0gZmxvYXQgYWxwaGE7XG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzMgdGV4Q29vcmQ7
XG4iCisgICAgICAgICJ2b2lkIG1haW4oKSB7XG4iCisgICAgICAgICIgICAgZ2xfRnJhZ0NvbG9y
ID0gdGV4dHVyZTJEKHNhbXBsZXIsIHRleENvb3JkLnh5KSogdmVjNChhbHBoYSk7XG4iCisgICAg
ICAgICJ9XG4iOworICAgIHVuc2lnbmVkIHByb2dyYW0gPSBsb2FkUHJvZ3JhbShjb250ZXh0LCB2
ZXJ0ZXhTaGFkZXJTb3VyY2UsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKKyAgICBpZiAoIXByb2dy
YW0pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgVGV4U2hhZGVyKGNvbnRleHQs
IHByb2dyYW0pOworfQorCit2b2lkIFRleFNoYWRlcjo6dXNlKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleFRyYW5zZm9ybSwgaW50IHNh
bXBsZXIsIGZsb2F0IGFscGhhKQoreworICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShtX3Byb2dy
YW0pOworICAgIGZsb2F0IG1hdHJpeFs5XTsKKyAgICBhZmZpbmVUbzN4Myh0cmFuc2Zvcm0sIG1h
dHJpeCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KG1fbWF0cml4TG9jYXRpb24s
IGZhbHNlIC8qdHJhbnNwb3NlKi8sIG1hdHJpeCwgMSAvKmNvdW50Ki8pOworCisgICAgZmxvYXQg
dGV4TWF0cml4WzldOworICAgIGFmZmluZVRvM3gzKHRleFRyYW5zZm9ybSwgdGV4TWF0cml4KTsK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV90ZXhNYXRyaXhMb2NhdGlvbiwgZmFs
c2UgLyp0cmFuc3Bvc2UqLywgdGV4TWF0cml4LCAxIC8qY291bnQqLyk7CisKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm0xaShtX3NhbXBsZXJMb2NhdGlvbiwgc2FtcGxlcik7CisgICAgbV9jb250ZXh0
LT51bmlmb3JtMWYobV9hbHBoYUxvY2F0aW9uLCBhbHBoYSk7CisKKyAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYlBvaW50ZXIobV9wb3NpdGlvbkxvY2F0aW9uLCAzLCBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKworICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkobV9wb3NpdGlvbkxvY2F0aW9uKTsKKworfQorCit9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgU2hhZGVyX2gKKyNkZWZpbmUgU2hhZGVyX2gKKworI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQWZmaW5lVHJhbnNmb3JtOworY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0Q7CitjbGFzcyBDb2xvcjsKKworY2xhc3MgU2hhZGVyIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKK3Byb3RlY3RlZDoKKyAgICBTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNp
Z25lZCBwcm9ncmFtKTsKKyAgICB+U2hhZGVyKCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OworICAgIHVuc2lnbmVkIG1fcHJvZ3JhbTsKK307CisKK2NsYXNzIFNvbGlkRmls
bFNoYWRlciA6IHB1YmxpYyBTaGFkZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PFNvbGlkRmlsbFNoYWRlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKKyAg
ICB2b2lkIHVzZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQ29sb3Im
IGNvbG9yKTsKKworcHJpdmF0ZToKKyAgICBTb2xpZEZpbGxTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dyYW0pOworCisgICAgaW50IG1fbWF0cml4TG9jYXRp
b247CisgICAgaW50IG1fY29sb3JMb2NhdGlvbjsKKyAgICBpbnQgbV9wb3NpdGlvbkxvY2F0aW9u
OworfTsKKworY2xhc3MgVGV4U2hhZGVyIDogcHVibGljIFNoYWRlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8VGV4U2hhZGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpOworICAgIHZvaWQgdXNlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleFRyYW5zZm9ybSwgaW50IHNhbXBsZXIsIGZsb2F0IGFs
cGhhKTsKKworcHJpdmF0ZToKKyAgICBUZXhTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIHVuc2lnbmVkIHByb2dyYW0pOworCisgICAgaW50IG1fbWF0cml4TG9jYXRpb247CisgICAg
aW50IG1fdGV4TWF0cml4TG9jYXRpb247CisgICAgaW50IG1fc2FtcGxlckxvY2F0aW9uOworICAg
IGludCBtX2FscGhhTG9jYXRpb247CisgICAgaW50IG1fcG9zaXRpb25Mb2NhdGlvbjsKK307CisK
K30KKworI2VuZGlmIC8vIFNoYWRlcl9oCg==
</data>
<flag name="review"
          id="54354"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>