<?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>139385</bug_id>
          
          <creation_ts>2014-12-07 21:46:34 -0800</creation_ts>
          <short_desc>[CoordinatedGraphics] Move CoordinatedBackingStore and CoordinatedGraphicsScene to Shared</short_desc>
          <delta_ts>2014-12-08 04:09:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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="Gwang Yoon Hwang">yoon</reporter>
          <assigned_to name="Gwang Yoon Hwang">yoon</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1053276</commentid>
    <comment_count>0</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2014-12-07 21:46:34 -0800</bug_when>
    <thetext>[CoordinatedGraphics] Move CoordinatedBackingStore and CoordinatedGraphicsScene to Shared</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053277</commentid>
    <comment_count>1</comment_count>
      <attachid>242784</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2014-12-07 21:47:47 -0800</bug_when>
    <thetext>Created attachment 242784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053352</commentid>
    <comment_count>2</comment_count>
      <attachid>242784</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2014-12-08 04:09:01 -0800</bug_when>
    <thetext>Comment on attachment 242784
Patch

Clearing flags on attachment: 242784

Committed r176946: &lt;http://trac.webkit.org/changeset/176946&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053353</commentid>
    <comment_count>3</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2014-12-08 04:09:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242784</attachid>
            <date>2014-12-07 21:47:47 -0800</date>
            <delta_ts>2014-12-08 04:09:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139385-20141208064824.patch</filename>
            <type>text/plain</type>
            <size>94524</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2OTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzk5N2FjNzExZmIyMDYy
NzgwNzkwZWNjNTUwNzgyN2U4YmNlMmZkZC4uNGY3NmFhMWEzYmExYmNmMjcyMDgwNmJhN2ZlYzll
YjZiYTQ4MDJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE0LTExLTAxICBHd2Fu
ZyBZb29uIEh3YW5nICA8eW9vbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtDb29yZGluYXRlZEdy
YXBoaWNzXSBNb3ZlIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlIGFuZCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmUgdG8gU2hhcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzkzODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGb3IgdGhlIFRocmVhZGVkIENvbXBvc2l0b3IsIENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlIGFuZAorICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgc2hvdWxkIGJlIHBs
YWNlZCBhdCB0aGUgU2hhcmVkIGluc3RlYWQgb2YKKyAgICAgICAgVUlQcm9jZXNzIGJlY2F1c2Ug
aXQgY2FuIGJlIHVzZWQgaW4gdGhlIFdlYlByb2Nlc3MgYWxzby4KKworICAgICAgICBObyBuZXcg
dGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBQ
bGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAu
CisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmguCisgICAgICAgICogU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZS5jcHAuCisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUu
aC4KKwogMjAxNC0xMi0wNyAgR3dhbmcgWW9vbiBId2FuZyAgPHlvb25AaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXSBMZXQgRHJhd2luZ0FyZWEgbWFuYWdlcyBzZXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nV2luZG93SWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMDAwNGFjYjVkNzA3
ZjJlMmFiZmMzNTg4OGYwMDY4NDVjZDVlNGMyMy4uNTk4NjkxY2EwMGU1ZmIzYjcxMjc4NWJhYWRh
YmY4ZGVhMTZlN2RiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTIzLDcgKzIzLDkg
QEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBTaGFyZWQvQVBJL2MvZWZsL1dL
QXJyYXlFZmwuY3BwCiAKKyAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEJhY2tpbmdTdG9yZS5jcHAKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCisgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAogICAgIFNoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5jcHAKIAogICAgIFNoYXJlZC9Eb3dubG9h
ZHMvZWZsL0Rvd25sb2FkU291cEVycm9yc0VmbC5jcHAKQEAgLTExMyw5ICsxMTUsNyBAQCBsaXN0
KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5j
cHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcAogCi0gICAg
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3Bw
CiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJl
YVByb3h5LmNwcAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZS5jcHAKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9QYWdlVmlld3BvcnRDb250cm9sbGVyLmNwcAogICAgIFVJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL1dlYlBhZ2VQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjlhMDVmOTA2ZTlj
MTFmMDI3ZWExYTE1MjVlZTQzZWNmZDVjNTNkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
LmNwcApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tpbmdT
dG9yZS5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgPFdlYkNv
cmUvQ29vcmRpbmF0ZWRTdXJmYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9UZXh0dXJlTWFwcGVyR0wuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1
ZmZlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICBpZiAoIW1fc3VyZmFj
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRSZWN0IHRpbGVSZWN0KG1fdGlsZVJlY3Qp
OworICAgIHRpbGVSZWN0LnNjYWxlKDEuIC8gbV9zY2FsZSk7CisgICAgYm9vbCBzaG91bGRSZXNl
dCA9IGZhbHNlOworICAgIGlmICh0aWxlUmVjdCAhPSByZWN0KCkpIHsKKyAgICAgICAgc2V0UmVj
dCh0aWxlUmVjdCk7CisgICAgICAgIHNob3VsZFJlc2V0ID0gdHJ1ZTsKKyAgICB9CisgICAgUmVm
UHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSB0aGlzLT50ZXh0dXJlKCk7CisgICAgaWYgKCF0
ZXh0dXJlKSB7CisgICAgICAgIHRleHR1cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJl
KCk7CisgICAgICAgIHNldFRleHR1cmUodGV4dHVyZS5nZXQoKSk7CisgICAgICAgIHNob3VsZFJl
c2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NFUlQodGV4dHVyZU1hcHBlci0+bWF4VGV4dHVy
ZVNpemUoKS53aWR0aCgpID49IG1fdGlsZVJlY3Quc2l6ZSgpLndpZHRoKCkpOworICAgIEFTU0VS
VCh0ZXh0dXJlTWFwcGVyLT5tYXhUZXh0dXJlU2l6ZSgpLmhlaWdodCgpID49IG1fdGlsZVJlY3Qu
c2l6ZSgpLmhlaWdodCgpKTsKKyAgICBpZiAoc2hvdWxkUmVzZXQpCisgICAgICAgIHRleHR1cmUt
PnJlc2V0KG1fdGlsZVJlY3Quc2l6ZSgpLCBtX3N1cmZhY2UtPnN1cHBvcnRzQWxwaGEoKSk7CisK
KyAgICBtX3N1cmZhY2UtPmNvcHlUb1RleHR1cmUodGV4dHVyZSwgbV9zb3VyY2VSZWN0LCBtX3N1
cmZhY2VPZmZzZXQpOworICAgIG1fc3VyZmFjZS5jbGVhcigpOworfQorCit2b2lkIENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcihjb25zdCBJbnRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZh
Y2U+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3NvdXJjZVJlY3Qg
PSBzb3VyY2VSZWN0OworICAgIG1fdGlsZVJlY3QgPSB0aWxlUmVjdDsKKyAgICBtX3N1cmZhY2VP
ZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9zdXJmYWNlID0gYnVmZmVyOworfQorCit2b2lkIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxlKHVpbnQzMl90IGlkLCBmbG9hdCBzY2FsZSkK
K3sKKyAgICBtX3RpbGVzLmFkZChpZCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlKHNjYWxl
KSk7CisgICAgbV9zY2FsZSA9IHNjYWxlOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOjpyZW1vdmVUaWxlKHVpbnQzMl90IGlkKQoreworICAgIEFTU0VSVChtX3RpbGVzLmNvbnRh
aW5zKGlkKSk7CisgICAgbV90aWxlc1RvUmVtb3ZlLmFkZChpZCk7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92ZUFsbFRpbGVzKCkKK3sKKyAgICBmb3IgKGF1dG8mIGtl
eSA6IG1fdGlsZXMua2V5cygpKQorICAgICAgICBtX3RpbGVzVG9SZW1vdmUuYWRkKGtleSk7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUodWludDMyX3QgaWQs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBQYXNz
UmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYmFja0J1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9m
ZnNldCkKK3sKKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV90aWxlcy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV90aWxlcy5lbmQoKSk7Cisg
ICAgaXQtPnZhbHVlLnNldEJhY2tCdWZmZXIodGlsZVJlY3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZm
ZXIsIG9mZnNldCk7Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAoreworICAgIGZvciAoYXV0byYgdGlsZSA6IG1f
dGlsZXMudmFsdWVzKCkpIHsKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUg
PSB0aWxlLnRleHR1cmUoKTsKKyAgICAgICAgaWYgKHRleHR1cmUpCisgICAgICAgICAgICByZXR1
cm4gdGV4dHVyZTsKKyAgICB9CisKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJl
PigpOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpzZXRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3BlbmRpbmdTaXplID0gc2l6ZTsKK30KKwordm9pZCBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRUaWxlc1RvVGV4dHVyZU1hcHBlcihWZWN0b3I8
VGV4dHVyZU1hcHBlclRpbGUqPiYgdGlsZXMsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBmb3IgKGF1dG8mIHRpbGUgOiB0aWxlcykKKyAg
ICAgICAgdGlsZS0+cGFpbnQodGV4dHVyZU1hcHBlciwgdHJhbnNmb3JtLCBvcGFjaXR5LCBjYWxj
dWxhdGVFeHBvc2VkVGlsZUVkZ2VzKHJlY3QsIHRpbGUtPnJlY3QoKSkpOworfQorCitUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6YWRqdXN0ZWRUcmFuc2Zvcm1G
b3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkKK3sKKyAgICByZXR1cm4gVHJhbnNm
b3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QocmVjdCgpLCB0YXJnZXRSZWN0KTsKK30KKwordm9p
ZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5KQoreworICAgIGlm
IChtX3RpbGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghbV9zaXpl
LmlzWmVybygpKTsKKworICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+IHRpbGVzVG9QYWlu
dDsKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiBwcmV2aW91c1RpbGVzVG9QYWludDsK
KworICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyBldmVyeSB0aW1lIHdlIHBhaW50LCBpbiBjYXNl
IHRoZSBvcGFjaXR5IGhhcyBjaGFuZ2VkLgorICAgIEZsb2F0UmVjdCBjb3ZlcmVkUmVjdDsKKyAg
ICBmb3IgKGF1dG8mIHRpbGUgOiBtX3RpbGVzLnZhbHVlcygpKSB7CisgICAgICAgIGlmICghdGls
ZS50ZXh0dXJlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAodGlsZS5z
Y2FsZSgpID09IG1fc2NhbGUpIHsKKyAgICAgICAgICAgIHRpbGVzVG9QYWludC5hcHBlbmQoJnRp
bGUpOworICAgICAgICAgICAgY292ZXJlZFJlY3QudW5pdGUodGlsZS5yZWN0KCkpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBPbmx5IHNob3cgdGhlIHBy
ZXZpb3VzIHRpbGUgaWYgdGhlIG9wYWNpdHkgaXMgaGlnaCwgb3RoZXJ3aXNlIGVmZmVjdCBsb29r
cyBsaWtlIGEgYnVnLgorICAgICAgICAvLyBXZSBzaG93IHRoZSBwcmV2aW91cy1zY2FsZSB0aWxl
IGFueXdheSBpZiBpdCBkb2Vzbid0IGludGVyc2VjdCB3aXRoIGFueSBjdXJyZW50LXNjYWxlIHRp
bGUuCisgICAgICAgIGlmIChvcGFjaXR5IDwgMC45NSAmJiBjb3ZlcmVkUmVjdC5pbnRlcnNlY3Rz
KHRpbGUucmVjdCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHByZXZpb3Vz
VGlsZXNUb1BhaW50LmFwcGVuZCgmdGlsZSk7CisgICAgfQorCisgICAgLy8gdGFyZ2V0UmVjdCBp
cyBvbiB0aGUgY29udGVudHMgY29vcmRpbmF0ZSBzeXN0ZW0sIHNvIHdlIG11c3QgY29tcGFyZSB0
d28gcmVjdHMgb24gdGhlIGNvbnRlbnRzIGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIC8vIFNlZSBU
aWxlZEJhY2tpbmdTdG9yZS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5z
Zm9ybSA9IHRyYW5zZm9ybSAqIGFkanVzdGVkVHJhbnNmb3JtRm9yUmVjdCh0YXJnZXRSZWN0KTsK
KworICAgIHBhaW50VGlsZXNUb1RleHR1cmVNYXBwZXIocHJldmlvdXNUaWxlc1RvUGFpbnQsIHRl
eHR1cmVNYXBwZXIsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCByZWN0KCkpOworICAgIHBh
aW50VGlsZXNUb1RleHR1cmVNYXBwZXIodGlsZXNUb1BhaW50LCB0ZXh0dXJlTWFwcGVyLCBhZGp1
c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgcmVjdCgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZTo6ZHJhd0JvcmRlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25z
dCBDb2xvciYgYm9yZGVyQ29sb3IsIGZsb2F0IGJvcmRlcldpZHRoLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7Cisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiBh
ZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QodGFyZ2V0UmVjdCk7CisgICAgZm9yIChhdXRvJiB0aWxl
IDogbV90aWxlcy52YWx1ZXMoKSkKKyAgICAgICAgdGV4dHVyZU1hcHBlci0+ZHJhd0JvcmRlcihi
b3JkZXJDb2xvciwgYm9yZGVyV2lkdGgsIHRpbGUucmVjdCgpLCBhZGp1c3RlZFRyYW5zZm9ybSk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmRyYXdSZXBhaW50Q291bnRlcihU
ZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBpbnQgcmVwYWludENvdW50LCBjb25zdCBDb2xv
ciYgYm9yZGVyQ29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBh
ZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIGFkanVzdGVkVHJhbnNmb3JtRm9yUmVjdCh0
YXJnZXRSZWN0KTsKKyAgICBmb3IgKGF1dG8mIHRpbGUgOiBtX3RpbGVzLnZhbHVlcygpKQorICAg
ICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3TnVtYmVyKHJlcGFpbnRDb3VudCwgYm9yZGVyQ29sb3Is
IHRpbGUucmVjdCgpLmxvY2F0aW9uKCksIGFkanVzdGVkVHJhbnNmb3JtKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBl
ciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICBpZiAoIW1fcGVuZGluZ1NpemUuaXNaZXJvKCkpIHsK
KyAgICAgICAgbV9zaXplID0gbV9wZW5kaW5nU2l6ZTsKKyAgICAgICAgbV9wZW5kaW5nU2l6ZSA9
IEZsb2F0U2l6ZSgpOworICAgIH0KKworICAgIGZvciAoYXV0byYgdGlsZVRvUmVtb3ZlIDogbV90
aWxlc1RvUmVtb3ZlKQorICAgICAgICBtX3RpbGVzLnJlbW92ZSh0aWxlVG9SZW1vdmUpOworICAg
IG1fdGlsZXNUb1JlbW92ZS5jbGVhcigpOworCisgICAgZm9yIChhdXRvJiB0aWxlIDogbV90aWxl
cy52YWx1ZXMoKSkKKyAgICAgICAgdGlsZS5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5
MDM0OWQ2M2E1ZjhiNDZmNjY2Y2VjNjIxNDZiNjI1YzA0M2MzYjQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJh
Y2tpbmdTdG9yZS5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlX2gKKyNkZWZpbmUg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorCisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJl
TWFwcGVyVGlsZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDb29yZGluYXRlZFN1cmZh
Y2U7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZVRpbGUgOiBwdWJsaWMgV2ViQ29yZTo6VGV4dHVyZU1hcHBlclRpbGUgeworcHVibGljOgor
ICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZShmbG9hdCBzY2FsZSA9IDEp
CisgICAgICAgIDogV2ViQ29yZTo6VGV4dHVyZU1hcHBlclRpbGUoV2ViQ29yZTo6RmxvYXRSZWN0
KCkpCisgICAgICAgICwgbV9zY2FsZShzY2FsZSkKKyAgICB7CisgICAgfQorCisgICAgaW5saW5l
IGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQorICAgIHZvaWQgc3dhcEJ1
ZmZlcnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciopOworICAgIHZvaWQgc2V0QmFja0J1ZmZlcihj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPiBidWZmZXIsIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50Jik7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3Vy
ZmFjZT4gbV9zdXJmYWNlOworICAgIFdlYkNvcmU6OkludFJlY3QgbV9zb3VyY2VSZWN0OworICAg
IFdlYkNvcmU6OkludFJlY3QgbV90aWxlUmVjdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3N1
cmZhY2VPZmZzZXQ7CisgICAgZmxvYXQgbV9zY2FsZTsKK307CisKK2NsYXNzIENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlIDogcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUg
eworcHVibGljOgorICAgIHZvaWQgY3JlYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGZsb2F0KTsK
KyAgICB2b2lkIHJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlEKTsKKyAgICB2b2lkIHJlbW92ZUFs
bFRpbGVzKCk7CisgICAgdm9pZCB1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFdlYkNv
cmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSk7IH0KKyAgICB2b2lkIGNv
bW1pdFRpbGVPcGVyYXRpb25zKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKKyAgICBQYXNzUmVm
UHRyPFdlYkNvcmU6OkJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdDsKKyAgICB2b2lkIHNl
dFNpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
VG9UZXh0dXJlTWFwcGVyKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0JvcmRlcihXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImLCBmbG9hdCBib3JkZXJXaWR0aCwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlcGFpbnRDb3VudGVyKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXIqLCBpbnQgcmVwYWludENvdW50LCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUoKQorICAgICAg
ICA6IG1fc2NhbGUoMS4pCisgICAgeyB9CisgICAgdm9pZCBwYWludFRpbGVzVG9UZXh0dXJlTWFw
cGVyKFZlY3RvcjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyVGlsZSo+JiwgV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlciosIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4IGFkanVzdGVkVHJhbnNmb3JtRm9yUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsK
KyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OkZs
b2F0UmVjdChXZWJDb3JlOjpGbG9hdFBvaW50Ojp6ZXJvKCksIG1fc2l6ZSk7IH0KKworICAgIHR5
cGVkZWYgSGFzaE1hcDx1aW50MzJfdCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPiBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA7CisgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVU
aWxlTWFwIG1fdGlsZXM7CisgICAgSGFzaFNldDx1aW50MzJfdD4gbV90aWxlc1RvUmVtb3ZlOwor
ICAgIC8vIEZJWE1FOiBtX3BlbmRpbmdTaXplIHNob3VsZCBiZSByZW1vdmVkIGFmdGVyIHRoZSBm
b2xsb3dpbmcgYnVnIGlzIGZpeGVkOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA4Mjk0CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fcGVuZGluZ1NpemU7CisgICAg
V2ViQ29yZTo6RmxvYXRTaXplIG1fc2l6ZTsKKyAgICBmbG9hdCBtX3NjYWxlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisKKyNlbmRpZiAvLyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
U2NlbmUuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOTllZjY4OTE3M2IxYTgwMmM5
ZjdiZjQ4MmMxODQ4Y2VhNDhiNWM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcApA
QCAtMCwwICsxLDcxNiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0IChDKSAyMDEy
IENvbXBhbnkgMTAwLCBJbmMuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5o
IgorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL1RleHR1cmVNYXBwZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJHTC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckxheWVyLmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3Mu
aD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpkaXNwYXRjaE9uTWFpblRocmVhZChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24pCit7
CisgICAgaWYgKGlzTWFpblRocmVhZCgpKQorICAgICAgICBmdW5jdGlvbigpOworICAgIGVsc2UK
KyAgICAgICAgY2FsbE9uTWFpblRocmVhZChXVEY6Om1vdmUoZnVuY3Rpb24pKTsKK30KKworc3Rh
dGljIGJvb2wgbGF5ZXJTaG91bGRIYXZlQmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXJMYXllciog
bGF5ZXIpCit7CisgICAgcmV0dXJuIGxheWVyLT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllci0+Y29u
dGVudHNBcmVWaXNpYmxlKCkgJiYgIWxheWVyLT5zaXplKCkuaXNFbXB0eSgpOworfQorCitDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZShDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmVDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAg
ICAsIG1faXNBY3RpdmUoZmFsc2UpCisgICAgLCBtX3Jvb3RMYXllcklEKEludmFsaWRDb29yZGlu
YXRlZExheWVySUQpCisgICAgLCBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OndoaXRlKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6fkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpCit7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBS
ZWN0LCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBib29sIGRyYXdzQmFja2dyb3VuZCwg
Y29uc3QgRmxvYXRQb2ludCYgY29udGVudFBvc2l0aW9uLCBUZXh0dXJlTWFwcGVyOjpQYWludEZs
YWdzIFBhaW50RmxhZ3MpCit7CisgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpIHsKKyAgICAgICAg
bV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9w
ZW5HTE1vZGUpOworICAgICAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPihtX3RleHR1
cmVNYXBwZXIuZ2V0KCkpLT5zZXRFbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcodHJ1ZSk7
CisgICAgfQorCisgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgp
ID09IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworICAgIHN5bmNSZW1vdGVDb250ZW50KCk7
CisKKyAgICBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKGNvbnRlbnRQb3NpdGlvbik7Cisg
ICAgVGV4dHVyZU1hcHBlckxheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7Cisg
ICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBjdXJyZW50
Um9vdExheWVyLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisgICAg
Y3VycmVudFJvb3RMYXllci0+YXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoKTsKKyAgICBtX3Rl
eHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyk7CisgICAgbV90ZXh0dXJlTWFw
cGVyLT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2xpcFJlY3QpOworCisgICAg
aWYgKGRyYXdzQmFja2dyb3VuZCkgeworICAgICAgICBSR0JBMzIgcmdiYSA9IG1ha2VSR0JBMzJG
cm9tRmxvYXRzKGJhY2tncm91bmRDb2xvci5yZWQoKSwKKyAgICAgICAgICAgIGJhY2tncm91bmRD
b2xvci5ncmVlbigpLCBiYWNrZ3JvdW5kQ29sb3IuYmx1ZSgpLAorICAgICAgICAgICAgYmFja2dy
b3VuZENvbG9yLmFscGhhKCkgKiBvcGFjaXR5KTsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyLT5k
cmF3U29saWRDb2xvcihjbGlwUmVjdCwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgQ29sb3Iocmdi
YSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0g
c3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4obV90ZXh0dXJlTWFwcGVyLmdldCgpKS0+Z3Jh
cGhpY3NDb250ZXh0M0QoKTsKKyAgICAgICAgY29udGV4dC0+Y2xlYXJDb2xvcihtX3ZpZXdCYWNr
Z3JvdW5kQ29sb3IucmVkKCkgLyAyNTUuMGYsIG1fdmlld0JhY2tncm91bmRDb2xvci5ncmVlbigp
IC8gMjU1LjBmLCBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3IuYmx1ZSgpIC8gMjU1LjBmLCBtX3ZpZXdC
YWNrZ3JvdW5kQ29sb3IuYWxwaGEoKSAvIDI1NS4wZik7CisgICAgICAgIGNvbnRleHQtPmNsZWFy
KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKKyAgICB9CisKKyAgICBpZiAo
Y3VycmVudFJvb3RMYXllci0+b3BhY2l0eSgpICE9IG9wYWNpdHkgfHwgY3VycmVudFJvb3RMYXll
ci0+dHJhbnNmb3JtKCkgIT0gbWF0cml4KSB7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNl
dE9wYWNpdHkob3BhY2l0eSk7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRyYW5zZm9y
bShtYXRyaXgpOworICAgIH0KKworICAgIGN1cnJlbnRSb290TGF5ZXItPnBhaW50KCk7CisgICAg
bV9mcHNDb3VudGVyLnVwZGF0ZUZQU0FuZERpc3BsYXkobV90ZXh0dXJlTWFwcGVyLmdldCgpLCBj
bGlwUmVjdC5sb2NhdGlvbigpLCBtYXRyaXgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kQ2xp
cCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKworICAgIGlmIChjdXJy
ZW50Um9vdExheWVyLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKSB7
CisgICAgICAgIFJlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU+IHByb3RlY3Rvcih0aGlz
KTsKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoWz1dIHsKKyAgICAgICAgICAgIHByb3Rl
Y3Rvci0+dXBkYXRlVmlld3BvcnQoKTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCit2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0LCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENv
bG9yLCBib29sIGRyYXdzQmFja2dyb3VuZCkKK3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikK
KyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCk7CisgICAg
QVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBw
ZXI6OlNvZnR3YXJlTW9kZSk7CisgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICBUZXh0dXJl
TWFwcGVyTGF5ZXIqIGxheWVyID0gcm9vdExheWVyKCk7CisKKyAgICBpZiAoIWxheWVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBsYXRm
b3JtQ29udGV4dCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoJmdy
YXBoaWNzQ29udGV4dCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CisK
KyAgICBJbnRSZWN0IGNsaXBSZWN0ID0gZ3JhcGhpY3NDb250ZXh0LmNsaXBCb3VuZHMoKTsKKyAg
ICBpZiAoZHJhd3NCYWNrZ3JvdW5kKQorICAgICAgICBtX3RleHR1cmVNYXBwZXItPmRyYXdTb2xp
ZENvbG9yKGNsaXBSZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBiYWNrZ3JvdW5kQ29sb3Ip
OworICAgIGVsc2UKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihjbGlw
UmVjdCwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgbV92aWV3QmFja2dyb3VuZENvbG9yKTsKKwor
ICAgIGxheWVyLT5wYWludCgpOworICAgIG1fZnBzQ291bnRlci51cGRhdGVGUFNBbmREaXNwbGF5
KG1fdGV4dHVyZU1hcHBlci5nZXQoKSwgY2xpcFJlY3QubG9jYXRpb24oKSk7CisgICAgbV90ZXh0
dXJlTWFwcGVyLT5lbmRQYWludGluZygpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhp
Y3NDb250ZXh0KDApOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRl
Vmlld3BvcnQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY2xp
ZW50KQorICAgICAgICBtX2NsaWVudC0+dXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OmFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoY29uc3Qg
RmxvYXRQb2ludCYgY29udGVudFBvc2l0aW9uKQoreworICAgIGlmIChtX2ZpeGVkTGF5ZXJzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRml4ZWQgbGF5ZXIgcG9zaXRpb25z
IGFyZSB1cGRhdGVkIGJ5IHRoZSB3ZWIgcHJvY2VzcyB3aGVuIHdlIHVwZGF0ZSB0aGUgdmlzaWJs
ZSBjb250ZW50cyByZWN0IC8gc2Nyb2xsIHBvc2l0aW9uLgorICAgIC8vIElmIHdlIHdhbnQgdGhv
c2UgbGF5ZXJzIHRvIGZvbGxvdyBhY2N1cmF0ZWx5IHRoZSB2aWV3cG9ydCB3aGVuIHdlIG1vdmUg
YmV0d2VlbiB0aGUgd2ViIHByb2Nlc3MgdXBkYXRlcywgd2UgaGF2ZSB0byBvZmZzZXQKKyAgICAv
LyB0aGVtIGJ5IHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSBjdXJyZW50IHBvc2l0aW9uIGFuZCB0aGUg
cG9zaXRpb24gb2YgdGhlIHZpZXdwb3J0IHVzZWQgZm9yIHRoZSBsYXN0IGxheW91dC4KKyAgICBG
bG9hdFNpemUgZGVsdGEgPSBjb250ZW50UG9zaXRpb24gLSBtX3JlbmRlcmVkQ29udGVudHNTY3Jv
bGxQb3NpdGlvbjsKKworICAgIGZvciAoYXV0byYgZml4ZWRMYXllciA6IG1fZml4ZWRMYXllcnMu
dmFsdWVzKCkpCisgICAgICAgIGZpeGVkTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uRGVsdGFJZk5l
ZWRlZChkZWx0YSk7Cit9CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVQbGF0Zm9ybUxheWVySWZOZWVkZWQoVGV4dHVyZU1h
cHBlckxheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0
YXRlKQoreworICAgIGlmICghc3RhdGUucGxhdGZvcm1MYXllclRva2VuLmlzVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0
b3JlPiBwbGF0Zm9ybUxheWVyQmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2lu
Z1N0b3JlOjpjcmVhdGUoKSk7CisgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5zZXQobGF5ZXIs
IHBsYXRmb3JtTGF5ZXJCYWNraW5nU3RvcmUpOworICAgIHBsYXRmb3JtTGF5ZXJCYWNraW5nU3Rv
cmUtPnNldEdyYXBoaWNzU3VyZmFjZShHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShzdGF0ZS5wbGF0
Zm9ybUxheWVyU2l6ZSwgc3RhdGUucGxhdGZvcm1MYXllclN1cmZhY2VGbGFncywgc3RhdGUucGxh
dGZvcm1MYXllclRva2VuKSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzTGF5ZXIocGxhdGZvcm1M
YXllckJhY2tpbmdTdG9yZS5nZXQoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpzeW5jUGxhdGZvcm1MYXllcklmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIs
IGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKK3sKKyAgICBBU1NF
UlQobV90ZXh0dXJlTWFwcGVyKTsKKworICAgIGlmIChzdGF0ZS5wbGF0Zm9ybUxheWVyQ2hhbmdl
ZCkgeworICAgICAgICBkZXN0cm95UGxhdGZvcm1MYXllcklmTmVlZGVkKGxheWVyLCBzdGF0ZSk7
CisgICAgICAgIGNyZWF0ZVBsYXRmb3JtTGF5ZXJJZk5lZWRlZChsYXllciwgc3RhdGUpOworICAg
IH0KKworICAgIGlmIChzdGF0ZS5wbGF0Zm9ybUxheWVyU2hvdWxkU3dhcEJ1ZmZlcnMpIHsKKyAg
ICAgICAgQVNTRVJUKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMobGF5ZXIpKTsKKyAg
ICAgICAgU3VyZmFjZUJhY2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VCYWNr
aW5nU3RvcmVzLmZpbmQobGF5ZXIpOworICAgICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZh
Y2VCYWNraW5nU3RvcmU+IHBsYXRmb3JtTGF5ZXJCYWNraW5nU3RvcmUgPSBpdC0+dmFsdWU7Cisg
ICAgICAgIHBsYXRmb3JtTGF5ZXJCYWNraW5nU3RvcmUtPnN3YXBCdWZmZXJzSWZOZWVkZWQoc3Rh
dGUucGxhdGZvcm1MYXllckZyb250QnVmZmVyKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpkZXN0cm95UGxhdGZvcm1MYXllcklmTmVlZGVkKFRleHR1cmVNYXBw
ZXJMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0
ZSkKK3sKKyAgICBpZiAoc3RhdGUucGxhdGZvcm1MYXllclRva2VuLmlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5yZW1vdmUobGF5ZXIpOwor
ICAgIGxheWVyLT5zZXRDb250ZW50c0xheWVyKDApOworfQorI2VuZGlmCisKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclJlcGFpbnRDb3VudElmTmVlZGVkKFRleHR1cmVN
YXBwZXJMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBz
dGF0ZSkKK3sKKyAgICBpZiAoIWxheWVyLT5pc1Nob3dpbmdSZXBhaW50Q291bnRlcigpIHx8ICFz
dGF0ZS5yZXBhaW50Q291bnRDaGFuZ2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllci0+
c2V0UmVwYWludENvdW50KHN0YXRlLnJlcGFpbnRDb3VudCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckNoaWxkcmVuSWZOZWVkZWQoVGV4dHVyZU1hcHBlckxh
eWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQor
eworICAgIGlmICghc3RhdGUuY2hpbGRyZW5DaGFuZ2VkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBWZWN0b3I8VGV4dHVyZU1hcHBlckxheWVyKj4gY2hpbGRyZW47CisKKyAgICBmb3IgKGF1dG8m
IGNoaWxkIDogc3RhdGUuY2hpbGRyZW4pIHsKKyAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBj
aGlsZExheWVyID0gbGF5ZXJCeUlEKGNoaWxkKTsKKyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNo
aWxkTGF5ZXIpOworICAgIH0KKyAgICBsYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQo
VGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
U3RhdGUmIHN0YXRlKQoreworICAgIGlmICghc3RhdGUuZmlsdGVyc0NoYW5nZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIGxheWVyLT5zZXRGaWx0ZXJzKHN0YXRlLmZpbHRlcnMpOworfQorCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExh
eWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBsYXllclN0YXRl
KQoreworICAgIEFTU0VSVChtX3Jvb3RMYXllcklEICE9IEludmFsaWRDb29yZGluYXRlZExheWVy
SUQpOworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOworCisg
ICAgaWYgKGxheWVyU3RhdGUucG9zaXRpb25DaGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0UG9z
aXRpb24obGF5ZXJTdGF0ZS5wb3MpOworCisgICAgaWYgKGxheWVyU3RhdGUuYW5jaG9yUG9pbnRD
aGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobGF5ZXJTdGF0ZS5hbmNob3JQ
b2ludCk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5zaXplQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXIt
PnNldFNpemUobGF5ZXJTdGF0ZS5zaXplKTsKKworICAgIGlmIChsYXllclN0YXRlLnRyYW5zZm9y
bUNoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obGF5ZXJTdGF0ZS50cmFuc2Zv
cm0pOworCisgICAgaWYgKGxheWVyU3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2VkKQorICAg
ICAgICBsYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0obGF5ZXJTdGF0ZS5jaGlsZHJlblRyYW5z
Zm9ybSk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5jb250ZW50c1JlY3RDaGFuZ2VkKQorICAgICAg
ICBsYXllci0+c2V0Q29udGVudHNSZWN0KGxheWVyU3RhdGUuY29udGVudHNSZWN0KTsKKworICAg
IGlmIChsYXllclN0YXRlLmNvbnRlbnRzVGlsaW5nQ2hhbmdlZCkgeworICAgICAgICBsYXllci0+
c2V0Q29udGVudHNUaWxlUGhhc2UobGF5ZXJTdGF0ZS5jb250ZW50c1RpbGVQaGFzZSk7CisgICAg
ICAgIGxheWVyLT5zZXRDb250ZW50c1RpbGVTaXplKGxheWVyU3RhdGUuY29udGVudHNUaWxlU2l6
ZSk7CisgICAgfQorCisgICAgaWYgKGxheWVyU3RhdGUub3BhY2l0eUNoYW5nZWQpCisgICAgICAg
IGxheWVyLT5zZXRPcGFjaXR5KGxheWVyU3RhdGUub3BhY2l0eSk7CisKKyAgICBpZiAobGF5ZXJT
dGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXItPnNldFNvbGlkQ29sb3IobGF5
ZXJTdGF0ZS5zb2xpZENvbG9yKTsKKworICAgIGlmIChsYXllclN0YXRlLmRlYnVnQm9yZGVyQ29s
b3JDaGFuZ2VkIHx8IGxheWVyU3RhdGUuZGVidWdCb3JkZXJXaWR0aENoYW5nZWQpCisgICAgICAg
IGxheWVyLT5zZXREZWJ1Z1Zpc3VhbHMobGF5ZXJTdGF0ZS5zaG93RGVidWdCb3JkZXJzLCBsYXll
clN0YXRlLmRlYnVnQm9yZGVyQ29sb3IsIGxheWVyU3RhdGUuZGVidWdCb3JkZXJXaWR0aCwgbGF5
ZXJTdGF0ZS5zaG93UmVwYWludENvdW50ZXIpOworCisgICAgaWYgKGxheWVyU3RhdGUucmVwbGlj
YUNoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRSZXBsaWNhTGF5ZXIoZ2V0TGF5ZXJCeUlESWZF
eGlzdHMobGF5ZXJTdGF0ZS5yZXBsaWNhKSk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5tYXNrQ2hh
bmdlZCkKKyAgICAgICAgbGF5ZXItPnNldE1hc2tMYXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhs
YXllclN0YXRlLm1hc2spKTsKKworICAgIGlmIChsYXllclN0YXRlLmltYWdlQ2hhbmdlZCkKKyAg
ICAgICAgYXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihsYXllciwgbGF5ZXJTdGF0ZS5pbWFnZUlE
KTsKKworICAgIGlmIChsYXllclN0YXRlLmZsYWdzQ2hhbmdlZCkgeworICAgICAgICBsYXllci0+
c2V0Q29udGVudHNPcGFxdWUobGF5ZXJTdGF0ZS5jb250ZW50c09wYXF1ZSk7CisgICAgICAgIGxh
eWVyLT5zZXREcmF3c0NvbnRlbnQobGF5ZXJTdGF0ZS5kcmF3c0NvbnRlbnQpOworICAgICAgICBs
YXllci0+c2V0Q29udGVudHNWaXNpYmxlKGxheWVyU3RhdGUuY29udGVudHNWaXNpYmxlKTsKKyAg
ICAgICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXllclN0YXRlLmJhY2tmYWNlVmlz
aWJsZSk7CisKKyAgICAgICAgLy8gTmV2ZXIgY2xpcCB0aGUgcm9vdCBsYXllci4KKyAgICAgICAg
bGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoaWQgPT0gbV9yb290TGF5ZXJJRCA/IGZhbHNlIDogbGF5
ZXJTdGF0ZS5tYXNrc1RvQm91bmRzKTsKKyAgICAgICAgbGF5ZXItPnNldFByZXNlcnZlczNEKGxh
eWVyU3RhdGUucHJlc2VydmVzM0QpOworCisgICAgICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0Q2hh
bmdlZCA9IGxheWVyLT5maXhlZFRvVmlld3BvcnQoKSAhPSBsYXllclN0YXRlLmZpeGVkVG9WaWV3
cG9ydDsKKyAgICAgICAgbGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydChsYXllclN0YXRlLmZpeGVk
VG9WaWV3cG9ydCk7CisgICAgICAgIGlmIChmaXhlZFRvVmlld3BvcnRDaGFuZ2VkKSB7CisgICAg
ICAgICAgICBpZiAobGF5ZXJTdGF0ZS5maXhlZFRvVmlld3BvcnQpCisgICAgICAgICAgICAgICAg
bV9maXhlZExheWVycy5hZGQoaWQsIGxheWVyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7CisgICAgICAgIH0KKworICAgICAgICBs
YXllci0+c2V0SXNTY3JvbGxhYmxlKGxheWVyU3RhdGUuaXNTY3JvbGxhYmxlKTsKKyAgICB9CisK
KyAgICBpZiAobGF5ZXJTdGF0ZS5jb21taXR0ZWRTY3JvbGxPZmZzZXRDaGFuZ2VkKQorICAgICAg
ICBsYXllci0+ZGlkQ29tbWl0U2Nyb2xsT2Zmc2V0KGxheWVyU3RhdGUuY29tbWl0dGVkU2Nyb2xs
T2Zmc2V0KTsKKworICAgIHByZXBhcmVDb250ZW50QmFja2luZ1N0b3JlKGxheWVyKTsKKworICAg
IC8vIEFwcGx5IE9wZXJhdGlvbnMuCisgICAgc2V0TGF5ZXJDaGlsZHJlbklmTmVlZGVkKGxheWVy
LCBsYXllclN0YXRlKTsKKyAgICBjcmVhdGVUaWxlc0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRl
KTsKKyAgICByZW1vdmVUaWxlc0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKKyAgICB1cGRh
dGVUaWxlc0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKKyAgICBzZXRMYXllckZpbHRlcnNJ
Zk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7CisgICAgc2V0TGF5ZXJBbmltYXRpb25zSWZOZWVk
ZWQobGF5ZXIsIGxheWVyU3RhdGUpOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHN5
bmNQbGF0Zm9ybUxheWVySWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOworI2VuZGlmCisgICAg
c2V0TGF5ZXJSZXBhaW50Q291bnRJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7Cit9CisKK1Rl
eHR1cmVNYXBwZXJMYXllciogQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpnZXRMYXllckJ5SURJ
ZkV4aXN0cyhDb29yZGluYXRlZExheWVySUQgaWQpCit7CisgICAgcmV0dXJuIChpZCAhPSBJbnZh
bGlkQ29vcmRpbmF0ZWRMYXllcklEKSA/IGxheWVyQnlJRChpZCkgOiAwOworfQorCit2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGlu
YXRlZExheWVySUQ+JiBsYXllcklEcykKK3sKKyAgICBmb3IgKGF1dG8mIGxheWVySUQgOiBsYXll
cklEcykKKyAgICAgICAgY3JlYXRlTGF5ZXIobGF5ZXJJRCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVMYXllcihDb29yZGluYXRlZExheWVySUQgaWQpCit7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJMYXllcj4gbmV3TGF5ZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPFRleHR1cmVNYXBwZXJMYXllcj4oKTsKKyAgICBuZXdMYXllci0+c2V0SUQoaWQp
OworICAgIG5ld0xheWVyLT5zZXRTY3JvbGxDbGllbnQodGhpcyk7CisgICAgbV9sYXllcnMuYWRk
KGlkLCBXVEY6Om1vdmUobmV3TGF5ZXIpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OmRlbGV0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgbGF5
ZXJJRHMpCit7CisgICAgZm9yIChhdXRvJiBsYXllcklEIDogbGF5ZXJJRHMpCisgICAgICAgIGRl
bGV0ZUxheWVyKGxheWVySUQpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
ZGVsZXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQpCit7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFRleHR1cmVNYXBwZXJMYXllcj4gbGF5ZXIgPSBtX2xheWVycy50YWtlKGxheWVySUQp
OworICAgIEFTU0VSVChsYXllcik7CisKKyAgICBtX2JhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVy
LmdldCgpKTsKKyAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKKyNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKKyAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShsYXllci5n
ZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldFJv
b3RMYXllcklEKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQoreworICAgIEFTU0VSVChsYXll
cklEICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOworICAgIEFTU0VSVChtX3Jvb3RMYXll
cklEID09IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOworCisgICAgbV9yb290TGF5ZXJJRCA9
IGxheWVySUQ7CisKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxh
eWVySUQpOworICAgIEFTU0VSVChtX3Jvb3RMYXllci0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpOwor
ICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChsYXllcik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpwcmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyTGF5
ZXIqIGxheWVyKQoreworICAgIGlmICghbGF5ZXJTaG91bGRIYXZlQmFja2luZ1N0b3JlKGxheWVy
KSkgeworICAgICAgICByZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChsYXllcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjcmVhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChsYXllcik7
CisgICAgcmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5ZXIpOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoVGV4
dHVyZU1hcHBlckxheWVyKiBsYXllcikKK3sKKyAgICBpZiAobV9iYWNraW5nU3RvcmVzLmNvbnRh
aW5zKGxheWVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgp
KTsKKyAgICBtX2JhY2tpbmdTdG9yZXMuYWRkKGxheWVyLCBiYWNraW5nU3RvcmUpOworICAgIGxh
eWVyLT5zZXRCYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFRleHR1cmVNYXBwZXJM
YXllciogbGF5ZXIpCit7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMudGFrZShsYXllcik7CisgICAgaWYgKCFiYWNraW5n
U3RvcmUpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyLT5zZXRCYWNraW5nU3RvcmUoMCk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZXNldEJhY2tpbmdTdG9yZVNp
emVUb0xheWVyU2l6ZShUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyKQoreworICAgIFJlZlB0cjxD
b29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLmdl
dChsYXllcik7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7CisgICAgYmFja2luZ1N0b3JlLT5z
ZXRTaXplKGxheWVyLT5zaXplKCkpOworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVm
ZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OmNyZWF0ZVRpbGVzSWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQoreworICAgIGlmIChzdGF0ZS50
aWxlc1RvQ3JlYXRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0
KGxheWVyKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKKworICAgIGZvciAoYXV0byYgdGls
ZSA6IHN0YXRlLnRpbGVzVG9DcmVhdGUpCisgICAgICAgIGJhY2tpbmdTdG9yZS0+Y3JlYXRlVGls
ZSh0aWxlLnRpbGVJRCwgdGlsZS5zY2FsZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpyZW1vdmVUaWxlc0lmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIsIGNv
bnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKK3sKKyAgICBpZiAoc3Rh
dGUudGlsZXNUb1JlbW92ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0
cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVz
LmdldChsYXllcik7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZvciAoYXV0byYgdGlsZSA6IHN0YXRlLnRpbGVzVG9SZW1vdmUpCisgICAgICAgIGJhY2tp
bmdTdG9yZS0+cmVtb3ZlVGlsZSh0aWxlKTsKKworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5k
aW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnVwZGF0ZVRpbGVzSWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwg
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQoreworICAgIGlmIChz
dGF0ZS50aWxlc1RvVXBkYXRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVm
UHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9y
ZXMuZ2V0KGxheWVyKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKKworICAgIGZvciAoYXV0
byYgdGlsZSA6IHN0YXRlLnRpbGVzVG9VcGRhdGUpIHsKKyAgICAgICAgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvID0gdGlsZS51cGRhdGVJbmZvOworCisgICAgICAg
IFN1cmZhY2VNYXA6Oml0ZXJhdG9yIHN1cmZhY2VJdCA9IG1fc3VyZmFjZXMuZmluZChzdXJmYWNl
VXBkYXRlSW5mby5hdGxhc0lEKTsKKyAgICAgICAgQVNTRVJUKHN1cmZhY2VJdCAhPSBtX3N1cmZh
Y2VzLmVuZCgpKTsKKworICAgICAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUodGlsZS50aWxl
SUQsIHN1cmZhY2VVcGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGUudGlsZVJlY3QsIHN1cmZhY2VJ
dC0+dmFsdWUsIHN1cmZhY2VVcGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpOworICAgICAgICBtX2Jh
Y2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CisgICAgfQor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3luY1VwZGF0ZUF0bGFzZXMoY29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBmb3IgKGF1dG8mIGF0
bGFzIDogc3RhdGUudXBkYXRlQXRsYXNlc1RvQ3JlYXRlKQorICAgICAgICBjcmVhdGVVcGRhdGVB
dGxhcyhhdGxhcy5maXJzdCwgYXRsYXMuc2Vjb25kKTsKKworICAgIGZvciAoYXV0byYgYXRsYXMg
OiBzdGF0ZS51cGRhdGVBdGxhc2VzVG9SZW1vdmUpCisgICAgICAgIHJlbW92ZVVwZGF0ZUF0bGFz
KGF0bGFzKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBz
dXJmYWNlKQoreworICAgIEFTU0VSVCghbV9zdXJmYWNlcy5jb250YWlucyhhdGxhc0lEKSk7Cisg
ICAgbV9zdXJmYWNlcy5hZGQoYXRsYXNJRCwgc3VyZmFjZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQorewor
ICAgIEFTU0VSVChtX3N1cmZhY2VzLmNvbnRhaW5zKGF0bGFzSUQpKTsKKyAgICBtX3N1cmZhY2Vz
LnJlbW92ZShhdGxhc0lEKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnN5
bmNJbWFnZUJhY2tpbmdzKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCit7
CisgICAgZm9yIChhdXRvJiBpbWFnZSA6IHN0YXRlLmltYWdlc1RvUmVtb3ZlKQorICAgICAgICBy
ZW1vdmVJbWFnZUJhY2tpbmcoaW1hZ2UpOworCisgICAgZm9yIChhdXRvJiBpbWFnZSA6IHN0YXRl
LmltYWdlc1RvQ3JlYXRlKQorICAgICAgICBjcmVhdGVJbWFnZUJhY2tpbmcoaW1hZ2UpOworCisg
ICAgZm9yIChhdXRvJiBpbWFnZSA6IHN0YXRlLmltYWdlc1RvVXBkYXRlKQorICAgICAgICB1cGRh
dGVJbWFnZUJhY2tpbmcoaW1hZ2UuZmlyc3QsIGltYWdlLnNlY29uZCk7CisKKyAgICBmb3IgKGF1
dG8mIGltYWdlIDogc3RhdGUuaW1hZ2VzVG9DbGVhcikKKyAgICAgICAgY2xlYXJJbWFnZUJhY2tp
bmdDb250ZW50cyhpbWFnZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpj
cmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQorewor
ICAgIEFTU0VSVCghbV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICBSZWZQ
dHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShDb29yZGluYXRlZEJhY2tp
bmdTdG9yZTo6Y3JlYXRlKCkpOworICAgIG1faW1hZ2VCYWNraW5ncy5hZGQoaW1hZ2VJRCwgYmFj
a2luZ1N0b3JlLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
Ojp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBQ
YXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gc3VyZmFjZSkKK3sKKyAgICBBU1NFUlQobV9p
bWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgUmVmUHRyPENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBpdC0+dmFsdWU7CisKKyAgICAv
LyBDb29yZGluYXRlZEltYWdlQmFja2luZyBpcyByZWFsaXplZCB0byBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZSB3aXRoIG9ubHkgb25lIHRpbGUgaW4gVUkgUHJvY2Vzcy4KKyAgICBiYWNraW5nU3Rv
cmUtPmNyZWF0ZVRpbGUoMSAvKiBpZCAqLywgMSAvKiBzY2FsZSAqLyk7CisgICAgSW50UmVjdCBy
ZWN0KEludFBvaW50Ojp6ZXJvKCksIHN1cmZhY2UtPnNpemUoKSk7CisgICAgLy8gU2VlIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2hvdWxkRGlyZWN0bHlDb21wb3NpdGVJbWFnZSgpCisgICAg
QVNTRVJUKDIwMDAgPj0gc3RkOjptYXgocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Cisg
ICAgYmFja2luZ1N0b3JlLT5zZXRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBiYWNraW5nU3RvcmUt
PnVwZGF0ZVRpbGUoMSAvKiBpZCAqLywgcmVjdCwgcmVjdCwgc3VyZmFjZSwgcmVjdC5sb2NhdGlv
bigpKTsKKworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2lu
Z1N0b3JlKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNsZWFySW1hZ2VC
YWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAg
IEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOworICAgIEltYWdlQmFj
a2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKKyAg
ICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1
ZTsKKyAgICBiYWNraW5nU3RvcmUtPnJlbW92ZUFsbFRpbGVzKCk7CisgICAgbV9iYWNraW5nU3Rv
cmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5z
KGltYWdlSUQpKTsKKworICAgIC8vIFdlIGRvbid0IHdhbnQgVGV4dHVyZU1hcHBlckxheWVyIHJl
ZmVycyBhIGRhbmdsaW5nIHBvaW50ZXIuCisgICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3MuYXBw
ZW5kKG1faW1hZ2VCYWNraW5ncy50YWtlKGltYWdlSUQpKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoVGV4dHVyZU1hcHBlckxh
eWVyKiBsYXllciwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQorICAgIGlmIChtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRh
aW5zKGxheWVyKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKKyAgICBpZiAoaW1hZ2VJRCA9
PSBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgeworICAgICAgICBsYXllci0+c2V0
Q29udGVudHNMYXllcigwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEltYWdlQmFj
a2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKKyAg
ICBBU1NFUlQoaXQgIT0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpKTsKKyAgICBsYXllci0+c2V0Q29u
dGVudHNMYXllcihpdC0+dmFsdWUuZ2V0KCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKQoreworICAgIG1f
cmVsZWFzZWRJbWFnZUJhY2tpbmdzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpCit7CisgICAg
Zm9yIChhdXRvJiBiYWNraW5nU3RvcmUgOiBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZl
cnMpCisgICAgICAgIGJhY2tpbmdTdG9yZS0+Y29tbWl0VGlsZU9wZXJhdGlvbnMobV90ZXh0dXJl
TWFwcGVyLmdldCgpKTsKKworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5j
bGVhcigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0U2NlbmVT
dGF0ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQoreworICAgIG1fcmVu
ZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gc3RhdGUuc2Nyb2xsUG9zaXRpb247CisKKyAg
ICBjcmVhdGVMYXllcnMoc3RhdGUubGF5ZXJzVG9DcmVhdGUpOworICAgIGRlbGV0ZUxheWVycyhz
dGF0ZS5sYXllcnNUb1JlbW92ZSk7CisKKyAgICBpZiAoc3RhdGUucm9vdENvbXBvc2l0aW5nTGF5
ZXIgIT0gbV9yb290TGF5ZXJJRCkKKyAgICAgICAgc2V0Um9vdExheWVySUQoc3RhdGUucm9vdENv
bXBvc2l0aW5nTGF5ZXIpOworCisgICAgc3luY0ltYWdlQmFja2luZ3Moc3RhdGUpOworICAgIHN5
bmNVcGRhdGVBdGxhc2VzKHN0YXRlKTsKKworICAgIGZvciAoYXV0byYgbGF5ZXIgOiBzdGF0ZS5s
YXllcnNUb1VwZGF0ZSkKKyAgICAgICAgc2V0TGF5ZXJTdGF0ZShsYXllci5maXJzdCwgbGF5ZXIu
c2Vjb25kKTsKKworICAgIGNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCk7Cisg
ICAgcmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKKworICAgIC8vIFRoZSBw
ZW5kaW5nIHRpbGVzIHN0YXRlIGlzIG9uIGl0cyB3YXkgZm9yIHRoZSBzY3JlZW4sIHRlbGwgdGhl
IHdlYiBwcm9jZXNzIHRvIHJlbmRlciB0aGUgbmV4dCBvbmUuCisgICAgUmVmUHRyPENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZT4gcHJvdGVjdG9yKHRoaXMpOworICAgIGRpc3BhdGNoT25NYWluVGhy
ZWFkKFs9XSB7CisgICAgICAgIHByb3RlY3Rvci0+cmVuZGVyTmV4dEZyYW1lKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW5kZXJOZXh0RnJhbWUoKQor
eworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnJlbmRlck5leHRGcmFtZSgp
OworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZW5zdXJlUm9vdExheWVyKCkK
K3sKKyAgICBpZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExh
eWVyID0gc3RkOjptYWtlX3VuaXF1ZTxUZXh0dXJlTWFwcGVyTGF5ZXI+KCk7CisgICAgbV9yb290
TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3
c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50M0QoMCwgMCwgMCkpOworCisgICAgLy8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZl
IHplcm8gc2l6ZSwgb3IgaXQgd291bGQgYmUgb3B0aW1pemVkIG91dC4KKyAgICBtX3Jvb3RMYXll
ci0+c2V0U2l6ZShGbG9hdFNpemUoMS4wLCAxLjApKTsKKworICAgIEFTU0VSVChtX3RleHR1cmVN
YXBwZXIpOworICAgIG1fcm9vdExheWVyLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBl
ci5nZXQoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5jUmVtb3Rl
Q29udGVudCgpCit7CisgICAgLy8gV2UgZW5xdWV1ZSBtZXNzYWdlcyBhbmQgZXhlY3V0ZSB0aGVt
IGR1cmluZyBwYWludCwgYXMgdGhleSByZXF1aXJlIGFuIGFjdGl2ZSBHTCBjb250ZXh0LgorICAg
IGVuc3VyZVJvb3RMYXllcigpOworCisgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4g
cmVuZGVyUXVldWU7CisgICAgYm9vbCBjYWxsZWRPbk1haW5UaHJlYWQgPSBXVEY6OmlzTWFpblRo
cmVhZCgpOworICAgIGlmICghY2FsbGVkT25NYWluVGhyZWFkKQorICAgICAgICBtX3JlbmRlclF1
ZXVlTXV0ZXgubG9jaygpOworICAgIHJlbmRlclF1ZXVlID0gV1RGOjptb3ZlKG1fcmVuZGVyUXVl
dWUpOworICAgIGlmICghY2FsbGVkT25NYWluVGhyZWFkKQorICAgICAgICBtX3JlbmRlclF1ZXVl
TXV0ZXgudW5sb2NrKCk7CisKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogcmVuZGVyUXVldWUp
CisgICAgICAgIGZ1bmN0aW9uKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpwdXJnZUdMUmVzb3VyY2VzKCkKK3sKKyAgICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKKyAg
ICBtX3JlbGVhc2VkSW1hZ2VCYWNraW5ncy5jbGVhcigpOworI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQorICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY2xlYXIoKTsKKyNlbmRpZgorICAgIG1f
c3VyZmFjZXMuY2xlYXIoKTsKKworICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKKyAgICBtX3Jv
b3RMYXllcklEID0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRDsKKyAgICBtX2xheWVycy5jbGVh
cigpOworICAgIG1fZml4ZWRMYXllcnMuY2xlYXIoKTsKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBu
dWxscHRyOworICAgIG1fYmFja2luZ1N0b3Jlcy5jbGVhcigpOworICAgIG1fYmFja2luZ1N0b3Jl
c1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOworCisgICAgc2V0QWN0aXZlKGZhbHNlKTsKKwor
ICAgIFJlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU+IHByb3RlY3Rvcih0aGlzKTsKKyAg
ICBkaXNwYXRjaE9uTWFpblRocmVhZChbPV0geworICAgICAgICBwcm90ZWN0b3ItPnB1cmdlQmFj
a2luZ1N0b3JlcygpOworICAgIH0pOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6ZGlzcGF0Y2hDb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgSW50
U2l6ZSYgb2Zmc2V0KQoreworICAgIG1fY2xpZW50LT5jb21taXRTY3JvbGxPZmZzZXQobGF5ZXJJ
RCwgb2Zmc2V0KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFNj
cm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBJbnRTaXplJiBvZmZzZXQpCit7Cisg
ICAgUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZT4gcHJvdGVjdG9yKHRoaXMpOworICAg
IGRpc3BhdGNoT25NYWluVGhyZWFkKFs9XSB7CisgICAgICAgIHByb3RlY3Rvci0+ZGlzcGF0Y2hD
b21taXRTY3JvbGxPZmZzZXQobGF5ZXJJRCwgb2Zmc2V0KTsKKyAgICB9KTsKK30KKwordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgaWYg
KG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnNJZk5lZWRl
ZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJTdGF0ZSYgc3RhdGUpCit7CisgICAgaWYgKCFzdGF0ZS5hbmltYXRpb25zQ2hhbmdlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbGF5ZXItPnNldEFuaW1hdGlvbnMoc3RhdGUuYW5pbWF0aW9u
cyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZXRhY2goKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbV9yZW5kZXJRdWV1ZS5jbGVhcigpOworICAg
IG1fY2xpZW50ID0gMDsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmFwcGVu
ZFVwZGF0ZShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24pCit7CisgICAgaWYgKCFtX2lz
QWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3JlbmRlclF1ZXVlTXV0ZXgpOworICAgIG1fcmVuZGVy
UXVldWUuYXBwZW5kKFdURjo6bW92ZShmdW5jdGlvbikpOworfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQoreworICAgIGlmIChtX2lzQWN0
aXZlID09IGFjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSGF2ZSB0byBjbGVhciBy
ZW5kZXIgcXVldWUgaW4gYm90aCBjYXNlcy4KKyAgICAvLyBJZiB0aGVyZSBhcmUgc29tZSB1cGRh
dGVzIGluIHF1ZXVlIGR1cmluZyBhY3RpdmF0aW9uIHRoZW4gdGhvc2UgdXBkYXRlcyBhcmUgZnJv
bSBwcmV2aW91cyBpbnN0YW5jZSBvZiBwYWludCBub2RlCisgICAgLy8gYW5kIGNhbm5vdCBiZSBh
cHBsaWVkIHRvIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLgorICAgIG1fcmVuZGVyUXVldWUu
Y2xlYXIoKTsKKyAgICBtX2lzQWN0aXZlID0gYWN0aXZlOworICAgIGlmIChtX2lzQWN0aXZlKSB7
CisgICAgICAgIFJlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU+IHByb3RlY3Rvcih0aGlz
KTsKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoWz1dIHsKKyAgICAgICAgICAgIHByb3Rl
Y3Rvci0+cmVuZGVyTmV4dEZyYW1lKCk7CisgICAgICAgIH0pOworICAgIH0KK30KKworVGV4dHVy
ZU1hcHBlckxheWVyKiBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmZpbmRTY3JvbGxhYmxlQ29u
dGVudHNMYXllckF0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiByb290
TGF5ZXIoKSA/IHJvb3RMYXllcigpLT5maW5kU2Nyb2xsYWJsZUNvbnRlbnRzTGF5ZXJBdChwb2lu
dCkgOiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWUxMGY0NDIzZDhmMmIzYmVlODZmYzE1NDhiZThiNTEwMmRhNGQyNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZV9oCisjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSA8V2Vi
Q29yZS9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3Jk
aW5hdGVkU3VyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyQW5pbWF0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyRlBTQ291bnRlci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvVGV4dHVyZU1hcHBlckxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZS5o
PgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZTsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbGllbnQoKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCByZW5kZXJOZXh0RnJhbWUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdwb3J0
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5
ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zmc2V0KSA9IDA7Cit9OworCitjbGFzcyBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lPiwgcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXll
cjo6U2Nyb2xsaW5nQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50Kik7CisgICAgdmlydHVh
bCB+Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CisgICAgdm9pZCBwYWludFRvQ3VycmVudEdM
Q29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYgYmFja2dyb3VuZENv
bG9yLCBib29sIGRyYXdzQmFja2dyb3VuZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIFdl
YkNvcmU6OlRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgPSAwKTsKKyAgICB2b2lkIHBhaW50VG9H
cmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpD
b2xvciYgYmFja2dyb3VuZENvbG9yLCBib29sIGRyYXdzQmFja2dyb3VuZCk7CisgICAgdm9pZCBk
ZXRhY2goKTsKKyAgICB2b2lkIGFwcGVuZFVwZGF0ZShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOwor
CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiBmaW5kU2Nyb2xsYWJsZUNvbnRlbnRz
TGF5ZXJBdChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIG9mZnNldCk7CisKKyAgICAvLyBUaGUgcGFpbnRpbmcgdGhyZWFkIG11c3QgbG9jayB0aGUg
bWFpbiB0aHJlYWQgdG8gdXNlIGJlbG93IHR3byBtZXRob2RzLCBiZWNhdXNlIHR3byBtZXRob2Rz
IGFjY2VzcyBtZW1iZXJzIHRoYXQgdGhlIG1haW4gdGhyZWFkIG1hbmFnZXMuIFNlZSBtX2NsaWVu
dC4KKyAgICAvLyBDdXJyZW50bHksIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSgpIGxv
Y2tzIHRoZSBtYWluIHRocmVhZCBiZWZvcmUgY2FsbGluZyBib3RoIG1ldGhvZHMuCisgICAgdm9p
ZCBwdXJnZUdMUmVzb3VyY2VzKCk7CisKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1
cm4gbV9pc0FjdGl2ZTsgfQorICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOworCisgICAgdm9pZCBj
b21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYp
OworCisgICAgdm9pZCBzZXRWaWV3QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9y
JiBjb2xvcikgeyBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsgfQorICAgIFdlYkNvcmU6
OkNvbG9yIHZpZXdCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdCYWNrZ3Jv
dW5kQ29sb3I7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHNldFJvb3RMYXllcklEKFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgdm9pZCBjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIGRlbGV0ZUxheWVycyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQgc2V0
TGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9pZCBzZXRMYXllckNoaWxkcmVu
SWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiwgY29uc3QgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVzSWZOZWVk
ZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGVzSWZOZWVkZWQoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVzSWZOZWVkZWQoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckxheWVyKiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyU3RhdGUmKTsKKyAgICB2b2lkIHNldExheWVyRmlsdGVyc0lmTmVlZGVkKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJMYXllciosIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlJik7CisgICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnNJZk5lZWRlZChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJTdGF0ZSYpOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHZvaWQgY3JlYXRlUGxh
dGZvcm1MYXllcklmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9pZCBzeW5jUGxh
dGZvcm1MYXllcklmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9pZCBkZXN0cm95
UGxhdGZvcm1MYXllcklmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0
IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisjZW5kaWYKKyAgICB2
b2lkIHNldExheWVyUmVwYWludENvdW50SWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxh
eWVyKiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKwor
ICAgIHZvaWQgc3luY1VwZGF0ZUF0bGFzZXMoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc1N0YXRlJik7CisgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lE
LCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4pOworICAgIHZvaWQgcmVt
b3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7CisKKyAgICB2b2lkIHN5bmNJbWFnZUJh
Y2tpbmdzKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpOworICAgIHZv
aWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQp
OworICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPik7CisgICAg
dm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpOworICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQpOworCisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiBs
YXllckJ5SUQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEIGlkKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fbGF5ZXJzLmNvbnRhaW5zKGlkKSk7CisgICAgICAgIEFTU0VSVChpZCAhPSBXZWJD
b3JlOjpJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJz
LmdldChpZCk7CisgICAgfQorICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciogZ2V0TGF5
ZXJCeUlESWZFeGlzdHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICBXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdl
dCgpOyB9CisKKyAgICB2b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgdm9pZCBhZGp1c3RQ
b3NpdGlvbkZvckZpeGVkTGF5ZXJzKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGNvbnRlbnRQ
b3NpdGlvbik7CisKKyAgICB2b2lkIGRpc3BhdGNoT25NYWluVGhyZWFkKHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPik7CisgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOworICAgIHZvaWQgcmVuZGVyTmV4
dEZyYW1lKCk7CisgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIHZvaWQgY3Jl
YXRlTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2b2lkIGRlbGV0ZUxh
eWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7CisKKyAgICB2b2lkIGFzc2lnbkltYWdl
QmFja2luZ1RvTGF5ZXIoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiwgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCByZW1vdmVSZWxlYXNlZEltYWdlQmFj
a2luZ3NJZk5lZWRlZCgpOworICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CisgICAgdm9pZCBj
b21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpOworCisgICAgdm9pZCBwcmVwYXJl
Q29udGVudEJhY2tpbmdTdG9yZShXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqKTsKKyAgICB2
b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXll
ciopOworICAgIHZvaWQgcmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckxheWVyKik7CisgICAgdm9pZCByZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6
ZShXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqKTsKKworICAgIHZvaWQgZGlzcGF0Y2hDb21t
aXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
b2Zmc2V0KTsKKworICAgIC8vIFJlbmRlciBxdWV1ZSBjYW4gYmUgYWNjZXNzZWQgb255IGZyb20g
bWFpbiB0aHJlYWQgb3IgdXBkYXRlUGFpbnROb2RlIGNhbGwgc3RhY2shCisgICAgVmVjdG9yPHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9yZW5kZXJRdWV1ZTsKKyAgICBNdXRleCBtX3JlbmRlclF1
ZXVlTXV0ZXg7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4g
bV90ZXh0dXJlTWFwcGVyOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4+IEltYWdl
QmFja2luZ01hcDsKKyAgICBJbWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tpbmdzOworICAgIFZl
Y3RvcjxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+PiBtX3JlbGVhc2VkSW1hZ2VCYWNr
aW5nczsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIq
LCBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+PiBCYWNraW5nU3RvcmVNYXA7CisgICAg
QmFja2luZ1N0b3JlTWFwIG1fYmFja2luZ1N0b3JlczsKKworICAgIEhhc2hTZXQ8UmVmUHRyPENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlPj4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJz
OworCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJMYXllciosIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3Vy
ZmFjZUJhY2tpbmdTdG9yZT4+IFN1cmZhY2VCYWNraW5nU3RvcmVNYXA7CisgICAgU3VyZmFjZUJh
Y2tpbmdTdG9yZU1hcCBtX3N1cmZhY2VCYWNraW5nU3RvcmVzOworI2VuZGlmCisKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8dWludDMyX3QgLyogYXRsYXNJRCAqLywgUmVmUHRyPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkU3VyZmFjZT4+IFN1cmZhY2VNYXA7CisgICAgU3VyZmFjZU1hcCBtX3N1cmZhY2VzOwor
CisgICAgLy8gQmVsb3cgdHdvIG1lbWJlcnMgYXJlIGFjY2Vzc2VkIGJ5IG9ubHkgdGhlIG1haW4g
dGhyZWFkLiBUaGUgcGFpbnRpbmcgdGhyZWFkIG11c3QgbG9jayB0aGUgbWFpbiB0aHJlYWQgdG8g
YWNjZXNzIGJvdGggbWVtYmVycy4KKyAgICBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbGllbnQq
IG1fY2xpZW50OworICAgIGJvb2wgbV9pc0FjdGl2ZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI+IG1fcm9vdExheWVyOworCisgICAgdHlwZWRlZiBI
YXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJMYXllcj4+IExheWVyTWFwOworICAgIExheWVyTWFwIG1fbGF5ZXJz
OworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJMYXllcio+IExheWVyUmF3UHRyTWFwOworICAgIExheWVyUmF3UHRy
TWFwIG1fZml4ZWRMYXllcnM7CisgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEIG1fcm9v
dExheWVySUQ7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOworICAg
IFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247Cisg
ICAgV2ViQ29yZTo6Q29sb3IgbV92aWV3QmFja2dyb3VuZENvbG9yOworCisgICAgV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckZQU0NvdW50ZXIgbV9mcHNDb3VudGVyOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNlbmRp
ZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVfaAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0
b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjlhMDVmOTA2ZTljMTFmMDI3ZWExYTE1MjVlZTQzZWNmZDVjNTNkNy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxODggKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tpbmdT
dG9yZS5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgPFdlYkNv
cmUvQ29vcmRpbmF0ZWRTdXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVy
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9UZXh0dXJlTWFwcGVyR0wuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi12b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1
ZmZlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKLXsKLSAgICBpZiAoIW1fc3VyZmFj
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IHRpbGVSZWN0KG1fdGlsZVJlY3Qp
OwotICAgIHRpbGVSZWN0LnNjYWxlKDEuIC8gbV9zY2FsZSk7Ci0gICAgYm9vbCBzaG91bGRSZXNl
dCA9IGZhbHNlOwotICAgIGlmICh0aWxlUmVjdCAhPSByZWN0KCkpIHsKLSAgICAgICAgc2V0UmVj
dCh0aWxlUmVjdCk7Ci0gICAgICAgIHNob3VsZFJlc2V0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgUmVm
UHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSB0aGlzLT50ZXh0dXJlKCk7Ci0gICAgaWYgKCF0
ZXh0dXJlKSB7Ci0gICAgICAgIHRleHR1cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJl
KCk7Ci0gICAgICAgIHNldFRleHR1cmUodGV4dHVyZS5nZXQoKSk7Ci0gICAgICAgIHNob3VsZFJl
c2V0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQodGV4dHVyZU1hcHBlci0+bWF4VGV4dHVy
ZVNpemUoKS53aWR0aCgpID49IG1fdGlsZVJlY3Quc2l6ZSgpLndpZHRoKCkpOwotICAgIEFTU0VS
VCh0ZXh0dXJlTWFwcGVyLT5tYXhUZXh0dXJlU2l6ZSgpLmhlaWdodCgpID49IG1fdGlsZVJlY3Qu
c2l6ZSgpLmhlaWdodCgpKTsKLSAgICBpZiAoc2hvdWxkUmVzZXQpCi0gICAgICAgIHRleHR1cmUt
PnJlc2V0KG1fdGlsZVJlY3Quc2l6ZSgpLCBtX3N1cmZhY2UtPnN1cHBvcnRzQWxwaGEoKSk7Ci0K
LSAgICBtX3N1cmZhY2UtPmNvcHlUb1RleHR1cmUodGV4dHVyZSwgbV9zb3VyY2VSZWN0LCBtX3N1
cmZhY2VPZmZzZXQpOwotICAgIG1fc3VyZmFjZS5jbGVhcigpOwotfQotCi12b2lkIENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcihjb25zdCBJbnRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZh
Y2U+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBtX3NvdXJjZVJlY3Qg
PSBzb3VyY2VSZWN0OwotICAgIG1fdGlsZVJlY3QgPSB0aWxlUmVjdDsKLSAgICBtX3N1cmZhY2VP
ZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbV9zdXJmYWNlID0gYnVmZmVyOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxlKHVpbnQzMl90IGlkLCBmbG9hdCBzY2FsZSkK
LXsKLSAgICBtX3RpbGVzLmFkZChpZCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlKHNjYWxl
KSk7Ci0gICAgbV9zY2FsZSA9IHNjYWxlOwotfQotCi12b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOjpyZW1vdmVUaWxlKHVpbnQzMl90IGlkKQotewotICAgIEFTU0VSVChtX3RpbGVzLmNvbnRh
aW5zKGlkKSk7Ci0gICAgbV90aWxlc1RvUmVtb3ZlLmFkZChpZCk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92ZUFsbFRpbGVzKCkKLXsKLSAgICBmb3IgKGF1dG8mIGtl
eSA6IG1fdGlsZXMua2V5cygpKQotICAgICAgICBtX3RpbGVzVG9SZW1vdmUuYWRkKGtleSk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUodWludDMyX3QgaWQs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBQYXNz
UmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYmFja0J1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9m
ZnNldCkKLXsKLSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV90aWxlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0gbV90aWxlcy5lbmQoKSk7Ci0g
ICAgaXQtPnZhbHVlLnNldEJhY2tCdWZmZXIodGlsZVJlY3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZm
ZXIsIG9mZnNldCk7Ci19Ci0KLVBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAotewotICAgIGZvciAoYXV0byYgdGlsZSA6IG1f
dGlsZXMudmFsdWVzKCkpIHsKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUg
PSB0aWxlLnRleHR1cmUoKTsKLSAgICAgICAgaWYgKHRleHR1cmUpCi0gICAgICAgICAgICByZXR1
cm4gdGV4dHVyZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJl
PigpOwotfQotCi12b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpzZXRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3BlbmRpbmdTaXplID0gc2l6ZTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRUaWxlc1RvVGV4dHVyZU1hcHBlcihWZWN0b3I8
VGV4dHVyZU1hcHBlclRpbGUqPiYgdGlsZXMsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBmb3IgKGF1dG8mIHRpbGUgOiB0aWxlcykKLSAg
ICAgICAgdGlsZS0+cGFpbnQodGV4dHVyZU1hcHBlciwgdHJhbnNmb3JtLCBvcGFjaXR5LCBjYWxj
dWxhdGVFeHBvc2VkVGlsZUVkZ2VzKHJlY3QsIHRpbGUtPnJlY3QoKSkpOwotfQotCi1UcmFuc2Zv
cm1hdGlvbk1hdHJpeCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6YWRqdXN0ZWRUcmFuc2Zvcm1G
b3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICByZXR1cm4gVHJhbnNm
b3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QocmVjdCgpLCB0YXJnZXRSZWN0KTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5KQotewotICAgIGlm
IChtX3RpbGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCghbV9zaXpl
LmlzWmVybygpKTsKLQotICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+IHRpbGVzVG9QYWlu
dDsKLSAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiBwcmV2aW91c1RpbGVzVG9QYWludDsK
LQotICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyBldmVyeSB0aW1lIHdlIHBhaW50LCBpbiBjYXNl
IHRoZSBvcGFjaXR5IGhhcyBjaGFuZ2VkLgotICAgIEZsb2F0UmVjdCBjb3ZlcmVkUmVjdDsKLSAg
ICBmb3IgKGF1dG8mIHRpbGUgOiBtX3RpbGVzLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghdGls
ZS50ZXh0dXJlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAodGlsZS5z
Y2FsZSgpID09IG1fc2NhbGUpIHsKLSAgICAgICAgICAgIHRpbGVzVG9QYWludC5hcHBlbmQoJnRp
bGUpOwotICAgICAgICAgICAgY292ZXJlZFJlY3QudW5pdGUodGlsZS5yZWN0KCkpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBPbmx5IHNob3cgdGhlIHBy
ZXZpb3VzIHRpbGUgaWYgdGhlIG9wYWNpdHkgaXMgaGlnaCwgb3RoZXJ3aXNlIGVmZmVjdCBsb29r
cyBsaWtlIGEgYnVnLgotICAgICAgICAvLyBXZSBzaG93IHRoZSBwcmV2aW91cy1zY2FsZSB0aWxl
IGFueXdheSBpZiBpdCBkb2Vzbid0IGludGVyc2VjdCB3aXRoIGFueSBjdXJyZW50LXNjYWxlIHRp
bGUuCi0gICAgICAgIGlmIChvcGFjaXR5IDwgMC45NSAmJiBjb3ZlcmVkUmVjdC5pbnRlcnNlY3Rz
KHRpbGUucmVjdCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHByZXZpb3Vz
VGlsZXNUb1BhaW50LmFwcGVuZCgmdGlsZSk7Ci0gICAgfQotCi0gICAgLy8gdGFyZ2V0UmVjdCBp
cyBvbiB0aGUgY29udGVudHMgY29vcmRpbmF0ZSBzeXN0ZW0sIHNvIHdlIG11c3QgY29tcGFyZSB0
d28gcmVjdHMgb24gdGhlIGNvbnRlbnRzIGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIC8vIFNlZSBU
aWxlZEJhY2tpbmdTdG9yZS4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5z
Zm9ybSA9IHRyYW5zZm9ybSAqIGFkanVzdGVkVHJhbnNmb3JtRm9yUmVjdCh0YXJnZXRSZWN0KTsK
LQotICAgIHBhaW50VGlsZXNUb1RleHR1cmVNYXBwZXIocHJldmlvdXNUaWxlc1RvUGFpbnQsIHRl
eHR1cmVNYXBwZXIsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCByZWN0KCkpOwotICAgIHBh
aW50VGlsZXNUb1RleHR1cmVNYXBwZXIodGlsZXNUb1BhaW50LCB0ZXh0dXJlTWFwcGVyLCBhZGp1
c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgcmVjdCgpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZTo6ZHJhd0JvcmRlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25z
dCBDb2xvciYgYm9yZGVyQ29sb3IsIGZsb2F0IGJvcmRlcldpZHRoLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCi17Ci0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiBh
ZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QodGFyZ2V0UmVjdCk7Ci0gICAgZm9yIChhdXRvJiB0aWxl
IDogbV90aWxlcy52YWx1ZXMoKSkKLSAgICAgICAgdGV4dHVyZU1hcHBlci0+ZHJhd0JvcmRlcihi
b3JkZXJDb2xvciwgYm9yZGVyV2lkdGgsIHRpbGUucmVjdCgpLCBhZGp1c3RlZFRyYW5zZm9ybSk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmRyYXdSZXBhaW50Q291bnRlcihU
ZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBpbnQgcmVwYWludENvdW50LCBjb25zdCBDb2xv
ciYgYm9yZGVyQ29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBh
ZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIGFkanVzdGVkVHJhbnNmb3JtRm9yUmVjdCh0
YXJnZXRSZWN0KTsKLSAgICBmb3IgKGF1dG8mIHRpbGUgOiBtX3RpbGVzLnZhbHVlcygpKQotICAg
ICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3TnVtYmVyKHJlcGFpbnRDb3VudCwgYm9yZGVyQ29sb3Is
IHRpbGUucmVjdCgpLmxvY2F0aW9uKCksIGFkanVzdGVkVHJhbnNmb3JtKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBl
ciogdGV4dHVyZU1hcHBlcikKLXsKLSAgICBpZiAoIW1fcGVuZGluZ1NpemUuaXNaZXJvKCkpIHsK
LSAgICAgICAgbV9zaXplID0gbV9wZW5kaW5nU2l6ZTsKLSAgICAgICAgbV9wZW5kaW5nU2l6ZSA9
IEZsb2F0U2l6ZSgpOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgdGlsZVRvUmVtb3ZlIDogbV90
aWxlc1RvUmVtb3ZlKQotICAgICAgICBtX3RpbGVzLnJlbW92ZSh0aWxlVG9SZW1vdmUpOwotICAg
IG1fdGlsZXNUb1JlbW92ZS5jbGVhcigpOwotCi0gICAgZm9yIChhdXRvJiB0aWxlIDogbV90aWxl
cy52YWx1ZXMoKSkKLSAgICAgICAgdGlsZS5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTAzNDlkNjNhNWY4YjQ2ZjY2NmNlYzYyMTQ2YjYyNWMw
NDNjM2I0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKgotIENvcHlyaWdo
dCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZV9oCi0jZGVmaW5lIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlX2gKLQotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dHVyZU1hcHBlclRpbGUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ29v
cmRpbmF0ZWRTdXJmYWNlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmVUaWxlIDogcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxl
IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUoZmxv
YXQgc2NhbGUgPSAxKQotICAgICAgICA6IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlKFdlYkNv
cmU6OkZsb2F0UmVjdCgpKQotICAgICAgICAsIG1fc2NhbGUoc2NhbGUpCi0gICAgewotICAgIH0K
LQotICAgIGlubGluZSBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KLSAg
ICB2b2lkIHN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKLSAgICB2b2lkIHNl
dEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4gYnVmZmVyLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxXZWJDb3JlOjpD
b29yZGluYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fc291
cmNlUmVjdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdGlsZVJlY3Q7Ci0gICAgV2ViQ29yZTo6
SW50UG9pbnQgbV9zdXJmYWNlT2Zmc2V0OwotICAgIGZsb2F0IG1fc2NhbGU7Ci19OwotCi1jbGFz
cyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
QmFja2luZ1N0b3JlIHsKLXB1YmxpYzoKLSAgICB2b2lkIGNyZWF0ZVRpbGUodWludDMyX3QgdGls
ZUlELCBmbG9hdCk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCk7Ci0gICAg
dm9pZCByZW1vdmVBbGxUaWxlcygpOwotICAgIHZvaWQgdXBkYXRlVGlsZSh1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+LCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUpOyB9
Ci0gICAgdm9pZCBjb21taXRUaWxlT3BlcmF0aW9ucyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7
Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwotICAgIHZpcnR1
YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBmbG9hdCk7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdCb3JkZXIoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlciosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdSZXBhaW50Q291bnRlcihXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyKiwgaW50IHJlcGFpbnRDb3VudCwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlKCkKLSAgICAgICAgOiBtX3NjYWxlKDEuKQotICAgIHsgfQotICAgIHZvaWQgcGFpbnRUaWxl
c1RvVGV4dHVyZU1hcHBlcihWZWN0b3I8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclRpbGUqPiYsIFdl
YkNvcmU6OlRleHR1cmVNYXBwZXIqLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICBXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jik7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVy
biBXZWJDb3JlOjpGbG9hdFJlY3QoV2ViQ29yZTo6RmxvYXRQb2ludDo6emVybygpLCBtX3NpemUp
OyB9Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlVGlsZT4gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOwotICAgIENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlVGlsZU1hcCBtX3RpbGVzOwotICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1fdGls
ZXNUb1JlbW92ZTsKLSAgICAvLyBGSVhNRTogbV9wZW5kaW5nU2l6ZSBzaG91bGQgYmUgcmVtb3Zl
ZCBhZnRlciB0aGUgZm9sbG93aW5nIGJ1ZyBpcyBmaXhlZDogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwODI5NAotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3BlbmRp
bmdTaXplOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3NpemU7Ci0gICAgZmxvYXQgbV9zY2Fs
ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotCi0jZW5kaWYgLy8gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM5OWVmNjg5MTczYjFhODAyYzlmN2JmNDgyYzE4NDhjZWE0OGI1
YzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcxNiArMCwwIEBACi0vKgotICAgIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAi
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgiCi0KLSNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tp
bmdTdG9yZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dHVyZU1hcHBlckdMLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyTGF5ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRpc3BhdGNoT25NYWluVGhyZWFkKHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBmdW5jdGlvbikKLXsKLSAgICBpZiAoaXNNYWluVGhyZWFkKCkpCi0gICAg
ICAgIGZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFdURjo6
bW92ZShmdW5jdGlvbikpOwotfQotCi1zdGF0aWMgYm9vbCBsYXllclNob3VsZEhhdmVCYWNraW5n
U3RvcmUoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllcikKLXsKLSAgICByZXR1cm4gbGF5ZXItPmRy
YXdzQ29udGVudCgpICYmIGxheWVyLT5jb250ZW50c0FyZVZpc2libGUoKSAmJiAhbGF5ZXItPnNp
emUoKS5pc0VtcHR5KCk7Ci19Ci0KLUNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZUNsaWVudCogY2xpZW50KQot
ICAgIDogbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9pc0FjdGl2ZShmYWxzZSkKLSAgICAsIG1f
cm9vdExheWVySUQoSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkKLSAgICAsIG1fdmlld0JhY2tn
cm91bmRDb2xvcihDb2xvcjo6d2hpdGUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LX0KLQotQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp+Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KCkKLXsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnBhaW50VG9DdXJyZW50
R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNp
dHksIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29s
b3IsIGJvb2wgZHJhd3NCYWNrZ3JvdW5kLCBjb25zdCBGbG9hdFBvaW50JiBjb250ZW50UG9zaXRp
b24sIFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFpbnRGbGFncykKLXsKLSAgICBpZiAoIW1f
dGV4dHVyZU1hcHBlcikgewotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVy
OjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7Ci0gICAgICAgIHN0YXRpY19jYXN0
PFRleHR1cmVNYXBwZXJHTCo+KG1fdGV4dHVyZU1hcHBlci5nZXQoKSktPnNldEVuYWJsZUVkZ2VE
aXN0YW5jZUFudGlhbGlhc2luZyh0cnVlKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV90ZXh0dXJl
TWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7
Ci0gICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKLQotICAgIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRM
YXllcnMoY29udGVudFBvc2l0aW9uKTsKLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGN1cnJlbnRS
b290TGF5ZXIgPSByb290TGF5ZXIoKTsKLSAgICBpZiAoIWN1cnJlbnRSb290TGF5ZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRleHR1cmVNYXBwZXIobV90
ZXh0dXJlTWFwcGVyLmdldCgpKTsKLSAgICBjdXJyZW50Um9vdExheWVyLT5hcHBseUFuaW1hdGlv
bnNSZWN1cnNpdmVseSgpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZyhQYWlu
dEZsYWdzKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCBjbGlwUmVjdCk7Ci0KLSAgICBpZiAoZHJhd3NCYWNrZ3JvdW5kKSB7Ci0gICAgICAg
IFJHQkEzMiByZ2JhID0gbWFrZVJHQkEzMkZyb21GbG9hdHMoYmFja2dyb3VuZENvbG9yLnJlZCgp
LAotICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yLmdyZWVuKCksIGJhY2tncm91bmRDb2xvci5i
bHVlKCksCi0gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IuYWxwaGEoKSAqIG9wYWNpdHkpOwot
ICAgICAgICBtX3RleHR1cmVNYXBwZXItPmRyYXdTb2xpZENvbG9yKGNsaXBSZWN0LCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLCBDb2xvcihyZ2JhKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPiht
X3RleHR1cmVNYXBwZXIuZ2V0KCkpLT5ncmFwaGljc0NvbnRleHQzRCgpOwotICAgICAgICBjb250
ZXh0LT5jbGVhckNvbG9yKG1fdmlld0JhY2tncm91bmRDb2xvci5yZWQoKSAvIDI1NS4wZiwgbV92
aWV3QmFja2dyb3VuZENvbG9yLmdyZWVuKCkgLyAyNTUuMGYsIG1fdmlld0JhY2tncm91bmRDb2xv
ci5ibHVlKCkgLyAyNTUuMGYsIG1fdmlld0JhY2tncm91bmRDb2xvci5hbHBoYSgpIC8gMjU1LjBm
KTsKLSAgICAgICAgY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZF
Ul9CSVQpOwotICAgIH0KLQotICAgIGlmIChjdXJyZW50Um9vdExheWVyLT5vcGFjaXR5KCkgIT0g
b3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRyaXgpIHsKLSAg
ICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICAgICAgY3Vy
cmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7Ci0gICAgfQotCi0gICAgY3VycmVu
dFJvb3RMYXllci0+cGFpbnQoKTsKLSAgICBtX2Zwc0NvdW50ZXIudXBkYXRlRlBTQW5kRGlzcGxh
eShtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGNsaXBSZWN0LmxvY2F0aW9uKCksIG1hdHJpeCk7Ci0g
ICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQ
YWludGluZygpOwotCi0gICAgaWYgKGN1cnJlbnRSb290TGF5ZXItPmRlc2NlbmRhbnRzT3JTZWxm
SGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpIHsKLSAgICAgICAgUmVmUHRyPENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZT4gcHJvdGVjdG9yKHRoaXMpOwotICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVh
ZChbPV0gewotICAgICAgICAgICAgcHJvdGVjdG9yLT51cGRhdGVWaWV3cG9ydCgpOwotICAgICAg
ICB9KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwYWludFRv
R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQs
IGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIGJvb2wgZHJhd3NCYWNrZ3JvdW5kKQotewot
ICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0
dXJlTWFwcGVyOjpjcmVhdGUoKTsKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVy
YXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsKLSAgICBzeW5jUmVt
b3RlQ29udGVudCgpOwotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSByb290TGF5ZXIo
KTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dCBncmFwaGljc0NvbnRleHQocGxhdGZvcm1Db250ZXh0KTsKLSAgICBtX3RleHR1cmVNYXBw
ZXItPnNldEdyYXBoaWNzQ29udGV4dCgmZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBtX3RleHR1cmVN
YXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKLQotICAgIEludFJlY3QgY2xpcFJlY3QgPSBncmFwaGlj
c0NvbnRleHQuY2xpcEJvdW5kcygpOwotICAgIGlmIChkcmF3c0JhY2tncm91bmQpCi0gICAgICAg
IG1fdGV4dHVyZU1hcHBlci0+ZHJhd1NvbGlkQ29sb3IoY2xpcFJlY3QsIFRyYW5zZm9ybWF0aW9u
TWF0cml4KCksIGJhY2tncm91bmRDb2xvcik7Ci0gICAgZWxzZQotICAgICAgICBtX3RleHR1cmVN
YXBwZXItPmRyYXdTb2xpZENvbG9yKGNsaXBSZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBt
X3ZpZXdCYWNrZ3JvdW5kQ29sb3IpOwotCi0gICAgbGF5ZXItPnBhaW50KCk7Ci0gICAgbV9mcHND
b3VudGVyLnVwZGF0ZUZQU0FuZERpc3BsYXkobV90ZXh0dXJlTWFwcGVyLmdldCgpLCBjbGlwUmVj
dC5sb2NhdGlvbigpKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7Ci0gICAg
bV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoMCk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVWaWV3cG9ydCgpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT51cGRhdGVW
aWV3cG9ydCgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YWRqdXN0UG9z
aXRpb25Gb3JGaXhlZExheWVycyhjb25zdCBGbG9hdFBvaW50JiBjb250ZW50UG9zaXRpb24pCi17
Ci0gICAgaWYgKG1fZml4ZWRMYXllcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBGaXhlZCBsYXllciBwb3NpdGlvbnMgYXJlIHVwZGF0ZWQgYnkgdGhlIHdlYiBwcm9jZXNz
IHdoZW4gd2UgdXBkYXRlIHRoZSB2aXNpYmxlIGNvbnRlbnRzIHJlY3QgLyBzY3JvbGwgcG9zaXRp
b24uCi0gICAgLy8gSWYgd2Ugd2FudCB0aG9zZSBsYXllcnMgdG8gZm9sbG93IGFjY3VyYXRlbHkg
dGhlIHZpZXdwb3J0IHdoZW4gd2UgbW92ZSBiZXR3ZWVuIHRoZSB3ZWIgcHJvY2VzcyB1cGRhdGVz
LCB3ZSBoYXZlIHRvIG9mZnNldAotICAgIC8vIHRoZW0gYnkgdGhlIGRlbHRhIGJldHdlZW4gdGhl
IGN1cnJlbnQgcG9zaXRpb24gYW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgdmlld3BvcnQgdXNlZCBm
b3IgdGhlIGxhc3QgbGF5b3V0LgotICAgIEZsb2F0U2l6ZSBkZWx0YSA9IGNvbnRlbnRQb3NpdGlv
biAtIG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwotCi0gICAgZm9yIChhdXRvJiBm
aXhlZExheWVyIDogbV9maXhlZExheWVycy52YWx1ZXMoKSkKLSAgICAgICAgZml4ZWRMYXllci0+
c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVlZGVkKGRlbHRhKTsKLX0KLQotI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVBsYXRm
b3JtTGF5ZXJJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKCFzdGF0ZS5wbGF0Zm9y
bUxheWVyVG9rZW4uaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IHBsYXRmb3JtTGF5ZXJCYWNraW5nU3RvcmUo
VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKTsKLSAgICBtX3N1cmZh
Y2VCYWNraW5nU3RvcmVzLnNldChsYXllciwgcGxhdGZvcm1MYXllckJhY2tpbmdTdG9yZSk7Ci0g
ICAgcGxhdGZvcm1MYXllckJhY2tpbmdTdG9yZS0+c2V0R3JhcGhpY3NTdXJmYWNlKEdyYXBoaWNz
U3VyZmFjZTo6Y3JlYXRlKHN0YXRlLnBsYXRmb3JtTGF5ZXJTaXplLCBzdGF0ZS5wbGF0Zm9ybUxh
eWVyU3VyZmFjZUZsYWdzLCBzdGF0ZS5wbGF0Zm9ybUxheWVyVG9rZW4pKTsKLSAgICBsYXllci0+
c2V0Q29udGVudHNMYXllcihwbGF0Zm9ybUxheWVyQmFja2luZ1N0b3JlLmdldCgpKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnN5bmNQbGF0Zm9ybUxheWVySWZOZWVkZWQo
VGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
U3RhdGUmIHN0YXRlKQotewotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOwotCi0gICAgaWYg
KHN0YXRlLnBsYXRmb3JtTGF5ZXJDaGFuZ2VkKSB7Ci0gICAgICAgIGRlc3Ryb3lQbGF0Zm9ybUxh
eWVySWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsKLSAgICAgICAgY3JlYXRlUGxhdGZvcm1MYXllcklm
TmVlZGVkKGxheWVyLCBzdGF0ZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlLnBsYXRmb3JtTGF5
ZXJTaG91bGRTd2FwQnVmZmVycykgewotICAgICAgICBBU1NFUlQobV9zdXJmYWNlQmFja2luZ1N0
b3Jlcy5jb250YWlucyhsYXllcikpOwotICAgICAgICBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOjpp
dGVyYXRvciBpdCA9IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuZmluZChsYXllcik7Ci0gICAgICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gcGxhdGZvcm1MYXllckJh
Y2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKLSAgICAgICAgcGxhdGZvcm1MYXllckJhY2tpbmdTdG9y
ZS0+c3dhcEJ1ZmZlcnNJZk5lZWRlZChzdGF0ZS5wbGF0Zm9ybUxheWVyRnJvbnRCdWZmZXIpOwot
ICAgIH0KLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlc3Ryb3lQbGF0Zm9y
bUxheWVySWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQotewotICAgIGlmIChzdGF0ZS5wbGF0Zm9ybUxh
eWVyVG9rZW4uaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N1cmZhY2VCYWNr
aW5nU3RvcmVzLnJlbW92ZShsYXllcik7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzTGF5ZXIoMCk7
Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyUmVw
YWludENvdW50SWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQotewotICAgIGlmICghbGF5ZXItPmlzU2hv
d2luZ1JlcGFpbnRDb3VudGVyKCkgfHwgIXN0YXRlLnJlcGFpbnRDb3VudENoYW5nZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGxheWVyLT5zZXRSZXBhaW50Q291bnQoc3RhdGUucmVwYWludENv
dW50KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQ2hpbGRy
ZW5JZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKCFzdGF0ZS5jaGlsZHJlbkNoYW5n
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyTGF5ZXIqPiBj
aGlsZHJlbjsKLQotICAgIGZvciAoYXV0byYgY2hpbGQgOiBzdGF0ZS5jaGlsZHJlbikgewotICAg
ICAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGNoaWxkTGF5ZXIgPSBsYXllckJ5SUQoY2hpbGQpOwot
ICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGRMYXllcik7Ci0gICAgfQotICAgIGxheWVyLT5z
ZXRDaGlsZHJlbihjaGlsZHJlbik7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpzZXRMYXllckZpbHRlcnNJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKCFzdGF0
ZS5maWx0ZXJzQ2hhbmdlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnNldEZpbHRl
cnMoc3RhdGUuZmlsdGVycyk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpz
ZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyU3RhdGUmIGxheWVyU3RhdGUpCi17Ci0gICAgQVNTRVJUKG1fcm9vdExheWVySUQg
IT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBs
YXllciA9IGxheWVyQnlJRChpZCk7Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS5wb3NpdGlvbkNoYW5n
ZWQpCi0gICAgICAgIGxheWVyLT5zZXRQb3NpdGlvbihsYXllclN0YXRlLnBvcyk7Ci0KLSAgICBp
ZiAobGF5ZXJTdGF0ZS5hbmNob3JQb2ludENoYW5nZWQpCi0gICAgICAgIGxheWVyLT5zZXRBbmNo
b3JQb2ludChsYXllclN0YXRlLmFuY2hvclBvaW50KTsKLQotICAgIGlmIChsYXllclN0YXRlLnNp
emVDaGFuZ2VkKQotICAgICAgICBsYXllci0+c2V0U2l6ZShsYXllclN0YXRlLnNpemUpOwotCi0g
ICAgaWYgKGxheWVyU3RhdGUudHJhbnNmb3JtQ2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNldFRy
YW5zZm9ybShsYXllclN0YXRlLnRyYW5zZm9ybSk7Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS5jaGls
ZHJlblRyYW5zZm9ybUNoYW5nZWQpCi0gICAgICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9y
bShsYXllclN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtKTsKLQotICAgIGlmIChsYXllclN0YXRlLmNv
bnRlbnRzUmVjdENoYW5nZWQpCi0gICAgICAgIGxheWVyLT5zZXRDb250ZW50c1JlY3QobGF5ZXJT
dGF0ZS5jb250ZW50c1JlY3QpOwotCi0gICAgaWYgKGxheWVyU3RhdGUuY29udGVudHNUaWxpbmdD
aGFuZ2VkKSB7Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50c1RpbGVQaGFzZShsYXllclN0YXRl
LmNvbnRlbnRzVGlsZVBoYXNlKTsKLSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVGlsZVNpemUo
bGF5ZXJTdGF0ZS5jb250ZW50c1RpbGVTaXplKTsKLSAgICB9Ci0KLSAgICBpZiAobGF5ZXJTdGF0
ZS5vcGFjaXR5Q2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNldE9wYWNpdHkobGF5ZXJTdGF0ZS5v
cGFjaXR5KTsKLQotICAgIGlmIChsYXllclN0YXRlLnNvbGlkQ29sb3JDaGFuZ2VkKQotICAgICAg
ICBsYXllci0+c2V0U29saWRDb2xvcihsYXllclN0YXRlLnNvbGlkQ29sb3IpOwotCi0gICAgaWYg
KGxheWVyU3RhdGUuZGVidWdCb3JkZXJDb2xvckNoYW5nZWQgfHwgbGF5ZXJTdGF0ZS5kZWJ1Z0Jv
cmRlcldpZHRoQ2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNldERlYnVnVmlzdWFscyhsYXllclN0
YXRlLnNob3dEZWJ1Z0JvcmRlcnMsIGxheWVyU3RhdGUuZGVidWdCb3JkZXJDb2xvciwgbGF5ZXJT
dGF0ZS5kZWJ1Z0JvcmRlcldpZHRoLCBsYXllclN0YXRlLnNob3dSZXBhaW50Q291bnRlcik7Ci0K
LSAgICBpZiAobGF5ZXJTdGF0ZS5yZXBsaWNhQ2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNldFJl
cGxpY2FMYXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllclN0YXRlLnJlcGxpY2EpKTsKLQot
ICAgIGlmIChsYXllclN0YXRlLm1hc2tDaGFuZ2VkKQotICAgICAgICBsYXllci0+c2V0TWFza0xh
eWVyKGdldExheWVyQnlJRElmRXhpc3RzKGxheWVyU3RhdGUubWFzaykpOwotCi0gICAgaWYgKGxh
eWVyU3RhdGUuaW1hZ2VDaGFuZ2VkKQotICAgICAgICBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVy
KGxheWVyLCBsYXllclN0YXRlLmltYWdlSUQpOwotCi0gICAgaWYgKGxheWVyU3RhdGUuZmxhZ3ND
aGFuZ2VkKSB7Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50c09wYXF1ZShsYXllclN0YXRlLmNv
bnRlbnRzT3BhcXVlKTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllclN0YXRl
LmRyYXdzQ29udGVudCk7Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50c1Zpc2libGUobGF5ZXJT
dGF0ZS5jb250ZW50c1Zpc2libGUpOwotICAgICAgICBsYXllci0+c2V0QmFja2ZhY2VWaXNpYmls
aXR5KGxheWVyU3RhdGUuYmFja2ZhY2VWaXNpYmxlKTsKLQotICAgICAgICAvLyBOZXZlciBjbGlw
IHRoZSByb290IGxheWVyLgotICAgICAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhpZCA9PSBt
X3Jvb3RMYXllcklEID8gZmFsc2UgOiBsYXllclN0YXRlLm1hc2tzVG9Cb3VuZHMpOwotICAgICAg
ICBsYXllci0+c2V0UHJlc2VydmVzM0QobGF5ZXJTdGF0ZS5wcmVzZXJ2ZXMzRCk7Ci0KLSAgICAg
ICAgYm9vbCBmaXhlZFRvVmlld3BvcnRDaGFuZ2VkID0gbGF5ZXItPmZpeGVkVG9WaWV3cG9ydCgp
ICE9IGxheWVyU3RhdGUuZml4ZWRUb1ZpZXdwb3J0OwotICAgICAgICBsYXllci0+c2V0Rml4ZWRU
b1ZpZXdwb3J0KGxheWVyU3RhdGUuZml4ZWRUb1ZpZXdwb3J0KTsKLSAgICAgICAgaWYgKGZpeGVk
VG9WaWV3cG9ydENoYW5nZWQpIHsKLSAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmZpeGVkVG9W
aWV3cG9ydCkKLSAgICAgICAgICAgICAgICBtX2ZpeGVkTGF5ZXJzLmFkZChpZCwgbGF5ZXIpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGlk
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGxheWVyLT5zZXRJc1Njcm9sbGFibGUobGF5ZXJTdGF0
ZS5pc1Njcm9sbGFibGUpOwotICAgIH0KLQotICAgIGlmIChsYXllclN0YXRlLmNvbW1pdHRlZFNj
cm9sbE9mZnNldENoYW5nZWQpCi0gICAgICAgIGxheWVyLT5kaWRDb21taXRTY3JvbGxPZmZzZXQo
bGF5ZXJTdGF0ZS5jb21taXR0ZWRTY3JvbGxPZmZzZXQpOwotCi0gICAgcHJlcGFyZUNvbnRlbnRC
YWNraW5nU3RvcmUobGF5ZXIpOwotCi0gICAgLy8gQXBwbHkgT3BlcmF0aW9ucy4KLSAgICBzZXRM
YXllckNoaWxkcmVuSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOwotICAgIGNyZWF0ZVRpbGVz
SWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOwotICAgIHJlbW92ZVRpbGVzSWZOZWVkZWQobGF5
ZXIsIGxheWVyU3RhdGUpOwotICAgIHVwZGF0ZVRpbGVzSWZOZWVkZWQobGF5ZXIsIGxheWVyU3Rh
dGUpOwotICAgIHNldExheWVyRmlsdGVyc0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKLSAg
ICBzZXRMYXllckFuaW1hdGlvbnNJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7Ci0jaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgc3luY1BsYXRmb3JtTGF5ZXJJZk5lZWRlZChsYXllciwg
bGF5ZXJTdGF0ZSk7Ci0jZW5kaWYKLSAgICBzZXRMYXllclJlcGFpbnRDb3VudElmTmVlZGVkKGxh
eWVyLCBsYXllclN0YXRlKTsKLX0KLQotVGV4dHVyZU1hcHBlckxheWVyKiBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmdldExheWVyQnlJRElmRXhpc3RzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkK
LXsKLSAgICByZXR1cm4gKGlkICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQpID8gbGF5ZXJC
eUlEKGlkKSA6IDA7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVM
YXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGxheWVySURzKQotewotICAg
IGZvciAoYXV0byYgbGF5ZXJJRCA6IGxheWVySURzKQotICAgICAgICBjcmVhdGVMYXllcihsYXll
cklEKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUxheWVyKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBl
ckxheWVyPiBuZXdMYXllciA9IHN0ZDo6bWFrZV91bmlxdWU8VGV4dHVyZU1hcHBlckxheWVyPigp
OwotICAgIG5ld0xheWVyLT5zZXRJRChpZCk7Ci0gICAgbmV3TGF5ZXItPnNldFNjcm9sbENsaWVu
dCh0aGlzKTsKLSAgICBtX2xheWVycy5hZGQoaWQsIFdURjo6bW92ZShuZXdMYXllcikpOwotfQot
Ci12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+JiBsYXllcklEcykKLXsKLSAgICBmb3IgKGF1dG8mIGxheWVy
SUQgOiBsYXllcklEcykKLSAgICAgICAgZGVsZXRlTGF5ZXIobGF5ZXJJRCk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVMYXllcihDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckxheWVyPiBsYXll
ciA9IG1fbGF5ZXJzLnRha2UobGF5ZXJJRCk7Ci0gICAgQVNTRVJUKGxheWVyKTsKLQotICAgIG1f
YmFja2luZ1N0b3Jlcy5yZW1vdmUobGF5ZXIuZ2V0KCkpOwotICAgIG1fZml4ZWRMYXllcnMucmVt
b3ZlKGxheWVySUQpOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIG1fc3VyZmFjZUJh
Y2tpbmdTdG9yZXMucmVtb3ZlKGxheWVyLmdldCgpKTsKLSNlbmRpZgotfQotCi12b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0Um9vdExheWVySUQoQ29vcmRpbmF0ZWRMYXllcklEIGxh
eWVySUQpCi17Ci0gICAgQVNTRVJUKGxheWVySUQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJ
RCk7Ci0gICAgQVNTRVJUKG1fcm9vdExheWVySUQgPT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJ
RCk7Ci0KLSAgICBtX3Jvb3RMYXllcklEID0gbGF5ZXJJRDsKLQotICAgIFRleHR1cmVNYXBwZXJM
YXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Ci0gICAgQVNTRVJUKG1fcm9vdExheWVy
LT5jaGlsZHJlbigpLmlzRW1wdHkoKSk7Ci0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKGxheWVy
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnByZXBhcmVDb250ZW50QmFj
a2luZ1N0b3JlKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIpCi17Ci0gICAgaWYgKCFsYXllclNo
b3VsZEhhdmVCYWNraW5nU3RvcmUobGF5ZXIpKSB7Ci0gICAgICAgIHJlbW92ZUJhY2tpbmdTdG9y
ZUlmTmVlZGVkKGxheWVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNyZWF0ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKGxheWVyKTsKLSAgICByZXNldEJhY2tpbmdTdG9yZVNpemVUb0xh
eWVyU2l6ZShsYXllcik7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVh
dGVCYWNraW5nU3RvcmVJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyKQotewotICAg
IGlmIChtX2JhY2tpbmdTdG9yZXMuY29udGFpbnMobGF5ZXIpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOwotICAgIG1fYmFja2luZ1N0b3Jlcy5hZGQobGF5
ZXIsIGJhY2tpbmdTdG9yZSk7Ci0gICAgbGF5ZXItPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3Rv
cmUpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlQmFja2luZ1N0
b3JlSWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllcikKLXsKLSAgICBSZWZQdHI8Q29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0b3Jlcy50YWtl
KGxheWVyKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bGF5ZXItPnNldEJhY2tpbmdTdG9yZSgwKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OnJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKFRleHR1cmVNYXBwZXJMYXll
ciogbGF5ZXIpCi17Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAgICBBU1NFUlQoYmFja2luZ1N0
b3JlKTsKLSAgICBiYWNraW5nU3RvcmUtPnNldFNpemUobGF5ZXItPnNpemUoKSk7Ci0gICAgbV9i
YWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVGlsZXNJZk5lZWRlZChUZXh0dXJl
TWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYg
c3RhdGUpCi17Ci0gICAgaWYgKHN0YXRlLnRpbGVzVG9DcmVhdGUuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSA9IG1fYmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOwotICAgIEFTU0VSVChiYWNraW5nU3Rv
cmUpOwotCi0gICAgZm9yIChhdXRvJiB0aWxlIDogc3RhdGUudGlsZXNUb0NyZWF0ZSkKLSAgICAg
ICAgYmFja2luZ1N0b3JlLT5jcmVhdGVUaWxlKHRpbGUudGlsZUlELCB0aWxlLnNjYWxlKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZVRpbGVzSWZOZWVkZWQoVGV4
dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3Rh
dGUmIHN0YXRlKQotewotICAgIGlmIChzdGF0ZS50aWxlc1RvUmVtb3ZlLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAgICBpZiAoIWJhY2tpbmdT
dG9yZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiB0aWxlIDogc3RhdGUudGls
ZXNUb1JlbW92ZSkKLSAgICAgICAgYmFja2luZ1N0b3JlLT5yZW1vdmVUaWxlKHRpbGUpOwotCi0g
ICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZXNJZk5lZWRlZChU
ZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJT
dGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKHN0YXRlLnRpbGVzVG9VcGRhdGUuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJh
Y2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOwotICAgIEFTU0VSVChiYWNr
aW5nU3RvcmUpOwotCi0gICAgZm9yIChhdXRvJiB0aWxlIDogc3RhdGUudGlsZXNUb1VwZGF0ZSkg
ewotICAgICAgICBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgc3VyZmFjZVVwZGF0ZUluZm8gPSB0
aWxlLnVwZGF0ZUluZm87Ci0KLSAgICAgICAgU3VyZmFjZU1hcDo6aXRlcmF0b3Igc3VyZmFjZUl0
ID0gbV9zdXJmYWNlcy5maW5kKHN1cmZhY2VVcGRhdGVJbmZvLmF0bGFzSUQpOwotICAgICAgICBB
U1NFUlQoc3VyZmFjZUl0ICE9IG1fc3VyZmFjZXMuZW5kKCkpOwotCi0gICAgICAgIGJhY2tpbmdT
dG9yZS0+dXBkYXRlVGlsZSh0aWxlLnRpbGVJRCwgc3VyZmFjZVVwZGF0ZUluZm8udXBkYXRlUmVj
dCwgdGlsZS50aWxlUmVjdCwgc3VyZmFjZUl0LT52YWx1ZSwgc3VyZmFjZVVwZGF0ZUluZm8uc3Vy
ZmFjZU9mZnNldCk7Ci0gICAgICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5h
ZGQoYmFja2luZ1N0b3JlKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpzeW5jVXBkYXRlQXRsYXNlcyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0
YXRlKQotewotICAgIGZvciAoYXV0byYgYXRsYXMgOiBzdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVh
dGUpCi0gICAgICAgIGNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzLmZpcnN0LCBhdGxhcy5zZWNvbmQp
OwotCi0gICAgZm9yIChhdXRvJiBhdGxhcyA6IHN0YXRlLnVwZGF0ZUF0bGFzZXNUb1JlbW92ZSkK
LSAgICAgICAgcmVtb3ZlVXBkYXRlQXRsYXMoYXRsYXMpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCi17Ci0gICAgQVNTRVJUKCFtX3N1cmZh
Y2VzLmNvbnRhaW5zKGF0bGFzSUQpKTsKLSAgICBtX3N1cmZhY2VzLmFkZChhdGxhc0lELCBzdXJm
YWNlKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGF0bGFzSUQpCi17Ci0gICAgQVNTRVJUKG1fc3VyZmFjZXMuY29udGFpbnMo
YXRsYXNJRCkpOwotICAgIG1fc3VyZmFjZXMucmVtb3ZlKGF0bGFzSUQpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3luY0ltYWdlQmFja2luZ3MoY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKLXsKLSAgICBmb3IgKGF1dG8mIGltYWdlIDogc3RhdGUu
aW1hZ2VzVG9SZW1vdmUpCi0gICAgICAgIHJlbW92ZUltYWdlQmFja2luZyhpbWFnZSk7Ci0KLSAg
ICBmb3IgKGF1dG8mIGltYWdlIDogc3RhdGUuaW1hZ2VzVG9DcmVhdGUpCi0gICAgICAgIGNyZWF0
ZUltYWdlQmFja2luZyhpbWFnZSk7Ci0KLSAgICBmb3IgKGF1dG8mIGltYWdlIDogc3RhdGUuaW1h
Z2VzVG9VcGRhdGUpCi0gICAgICAgIHVwZGF0ZUltYWdlQmFja2luZyhpbWFnZS5maXJzdCwgaW1h
Z2Uuc2Vjb25kKTsKLQotICAgIGZvciAoYXV0byYgaW1hZ2UgOiBzdGF0ZS5pbWFnZXNUb0NsZWFy
KQotICAgICAgICBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGltYWdlKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgQVNTRVJUKCFtX2ltYWdlQmFja2luZ3MuY29u
dGFpbnMoaW1hZ2VJRCkpOwotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKSk7Ci0gICAgbV9pbWFn
ZUJhY2tpbmdzLmFkZChpbWFnZUlELCBiYWNraW5nU3RvcmUucmVsZWFzZSgpKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBz
dXJmYWNlKQotewotICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkp
OwotICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmlu
ZChpbWFnZUlEKTsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSA9IGl0LT52YWx1ZTsKLQotICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIGlzIHJl
YWxpemVkIHRvIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlIHdpdGggb25seSBvbmUgdGlsZSBpbiBV
SSBQcm9jZXNzLgotICAgIGJhY2tpbmdTdG9yZS0+Y3JlYXRlVGlsZSgxIC8qIGlkICovLCAxIC8q
IHNjYWxlICovKTsKLSAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQ6Onplcm8oKSwgc3VyZmFjZS0+
c2l6ZSgpKTsKLSAgICAvLyBTZWUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91bGREaXJl
Y3RseUNvbXBvc2l0ZUltYWdlKCkKLSAgICBBU1NFUlQoMjAwMCA+PSBzdGQ6Om1heChyZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLSAgICBiYWNraW5nU3RvcmUtPnNldFNpemUocmVjdC5z
aXplKCkpOwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSgxIC8qIGlkICovLCByZWN0LCBy
ZWN0LCBzdXJmYWNlLCByZWN0LmxvY2F0aW9uKCkpOwotCi0gICAgbV9iYWNraW5nU3RvcmVzV2l0
aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlu
cyhpbWFnZUlEKSk7Ci0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VC
YWNraW5ncy5maW5kKGltYWdlSUQpOwotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOwotICAgIGJhY2tpbmdTdG9yZS0+cmVtb3ZlQWxs
VGlsZXMoKTsKLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tp
bmdTdG9yZSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVJbWFn
ZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIEFTU0VS
VChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwotCi0gICAgLy8gV2UgZG9uJ3Qg
d2FudCBUZXh0dXJlTWFwcGVyTGF5ZXIgcmVmZXJzIGEgZGFuZ2xpbmcgcG9pbnRlci4KLSAgICBt
X3JlbGVhc2VkSW1hZ2VCYWNraW5ncy5hcHBlbmQobV9pbWFnZUJhY2tpbmdzLnRha2UoaW1hZ2VJ
RCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YXNzaWduSW1hZ2VCYWNr
aW5nVG9MYXllcihUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGltYWdlSUQpCi17Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgaWYgKG1f
c3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMobGF5ZXIpKQotICAgICAgICByZXR1cm47Ci0j
ZW5kaWYKLQotICAgIGlmIChpbWFnZUlEID09IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEKSB7Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50c0xheWVyKDApOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VC
YWNraW5ncy5maW5kKGltYWdlSUQpOwotICAgIEFTU0VSVChpdCAhPSBtX2ltYWdlQmFja2luZ3Mu
ZW5kKCkpOwotICAgIGxheWVyLT5zZXRDb250ZW50c0xheWVyKGl0LT52YWx1ZS5nZXQoKSk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVSZWxlYXNlZEltYWdlQmFj
a2luZ3NJZk5lZWRlZCgpCi17Ci0gICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3MuY2xlYXIoKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFBlbmRpbmdCYWNraW5n
U3RvcmVPcGVyYXRpb25zKCkKLXsKLSAgICBmb3IgKGF1dG8mIGJhY2tpbmdTdG9yZSA6IG1fYmFj
a2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycykKLSAgICAgICAgYmFja2luZ1N0b3JlLT5jb21t
aXRUaWxlT3BlcmF0aW9ucyhtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotCi0gICAgbV9iYWNraW5n
U3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpjb21taXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZSYgc3RhdGUpCi17Ci0gICAgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBz
dGF0ZS5zY3JvbGxQb3NpdGlvbjsKLQotICAgIGNyZWF0ZUxheWVycyhzdGF0ZS5sYXllcnNUb0Ny
ZWF0ZSk7Ci0gICAgZGVsZXRlTGF5ZXJzKHN0YXRlLmxheWVyc1RvUmVtb3ZlKTsKLQotICAgIGlm
IChzdGF0ZS5yb290Q29tcG9zaXRpbmdMYXllciAhPSBtX3Jvb3RMYXllcklEKQotICAgICAgICBz
ZXRSb290TGF5ZXJJRChzdGF0ZS5yb290Q29tcG9zaXRpbmdMYXllcik7Ci0KLSAgICBzeW5jSW1h
Z2VCYWNraW5ncyhzdGF0ZSk7Ci0gICAgc3luY1VwZGF0ZUF0bGFzZXMoc3RhdGUpOwotCi0gICAg
Zm9yIChhdXRvJiBsYXllciA6IHN0YXRlLmxheWVyc1RvVXBkYXRlKQotICAgICAgICBzZXRMYXll
clN0YXRlKGxheWVyLmZpcnN0LCBsYXllci5zZWNvbmQpOwotCi0gICAgY29tbWl0UGVuZGluZ0Jh
Y2tpbmdTdG9yZU9wZXJhdGlvbnMoKTsKLSAgICByZW1vdmVSZWxlYXNlZEltYWdlQmFja2luZ3NJ
Zk5lZWRlZCgpOwotCi0gICAgLy8gVGhlIHBlbmRpbmcgdGlsZXMgc3RhdGUgaXMgb24gaXRzIHdh
eSBmb3IgdGhlIHNjcmVlbiwgdGVsbCB0aGUgd2ViIHByb2Nlc3MgdG8gcmVuZGVyIHRoZSBuZXh0
IG9uZS4KLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lPiBwcm90ZWN0b3IodGhp
cyk7Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoWz1dIHsKLSAgICAgICAgcHJvdGVjdG9yLT5y
ZW5kZXJOZXh0RnJhbWUoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBt
X2NsaWVudC0+cmVuZGVyTmV4dEZyYW1lKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjplbnN1cmVSb290TGF5ZXIoKQotewotICAgIGlmIChtX3Jvb3RMYXllcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9yb290TGF5ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRleHR1cmVN
YXBwZXJMYXllcj4oKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7
Ci0gICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAgbV9yb290TGF5
ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAwKSk7Ci0KLSAgICAvLyBUaGUg
cm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUgemVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRp
bWl6ZWQgb3V0LgotICAgIG1fcm9vdExheWVyLT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkp
OwotCi0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0gICAgbV9yb290TGF5ZXItPnNldFRl
eHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnN5bmNSZW1vdGVDb250ZW50KCkKLXsKLSAgICAvLyBXZSBlbnF1ZXVl
IG1lc3NhZ2VzIGFuZCBleGVjdXRlIHRoZW0gZHVyaW5nIHBhaW50LCBhcyB0aGV5IHJlcXVpcmUg
YW4gYWN0aXZlIEdMIGNvbnRleHQuCi0gICAgZW5zdXJlUm9vdExheWVyKCk7Ci0KLSAgICBWZWN0
b3I8c3RkOjpmdW5jdGlvbjx2b2lkKCk+PiByZW5kZXJRdWV1ZTsKLSAgICBib29sIGNhbGxlZE9u
TWFpblRocmVhZCA9IFdURjo6aXNNYWluVGhyZWFkKCk7Ci0gICAgaWYgKCFjYWxsZWRPbk1haW5U
aHJlYWQpCi0gICAgICAgIG1fcmVuZGVyUXVldWVNdXRleC5sb2NrKCk7Ci0gICAgcmVuZGVyUXVl
dWUgPSBXVEY6Om1vdmUobV9yZW5kZXJRdWV1ZSk7Ci0gICAgaWYgKCFjYWxsZWRPbk1haW5UaHJl
YWQpCi0gICAgICAgIG1fcmVuZGVyUXVldWVNdXRleC51bmxvY2soKTsKLQotICAgIGZvciAoYXV0
byYgZnVuY3Rpb24gOiByZW5kZXJRdWV1ZSkKLSAgICAgICAgZnVuY3Rpb24oKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnB1cmdlR0xSZXNvdXJjZXMoKQotewotICAgIG1f
aW1hZ2VCYWNraW5ncy5jbGVhcigpOwotICAgIG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzLmNsZWFy
KCk7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jl
cy5jbGVhcigpOwotI2VuZGlmCi0gICAgbV9zdXJmYWNlcy5jbGVhcigpOwotCi0gICAgbV9yb290
TGF5ZXIgPSBudWxscHRyOwotICAgIG1fcm9vdExheWVySUQgPSBJbnZhbGlkQ29vcmRpbmF0ZWRM
YXllcklEOwotICAgIG1fbGF5ZXJzLmNsZWFyKCk7Ci0gICAgbV9maXhlZExheWVycy5jbGVhcigp
OwotICAgIG1fdGV4dHVyZU1hcHBlciA9IG51bGxwdHI7Ci0gICAgbV9iYWNraW5nU3RvcmVzLmNs
ZWFyKCk7Ci0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7Ci0K
LSAgICBzZXRBY3RpdmUoZmFsc2UpOwotCi0gICAgUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZT4gcHJvdGVjdG9yKHRoaXMpOwotICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKFs9XSB7Ci0g
ICAgICAgIHByb3RlY3Rvci0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkaXNwYXRjaENvbW1pdFNjcm9sbE9mZnNldCh1
aW50MzJfdCBsYXllcklELCBjb25zdCBJbnRTaXplJiBvZmZzZXQpCi17Ci0gICAgbV9jbGllbnQt
PmNvbW1pdFNjcm9sbE9mZnNldChsYXllcklELCBvZmZzZXQpOwotfQotCi12b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNv
bnN0IEludFNpemUmIG9mZnNldCkKLXsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lPiBwcm90ZWN0b3IodGhpcyk7Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoWz1dIHsKLSAg
ICAgICAgcHJvdGVjdG9yLT5kaXNwYXRjaENvbW1pdFNjcm9sbE9mZnNldChsYXllcklELCBvZmZz
ZXQpOwotICAgIH0pOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVyZ2VC
YWNraW5nU3RvcmVzKCkKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5w
dXJnZUJhY2tpbmdTdG9yZXMoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OnNldExheWVyQW5pbWF0aW9uc0lmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIsIGNv
bnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKLXsKLSAgICBpZiAoIXN0
YXRlLmFuaW1hdGlvbnNDaGFuZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0
QW5pbWF0aW9ucyhzdGF0ZS5hbmltYXRpb25zKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OmRldGFjaCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBt
X3JlbmRlclF1ZXVlLmNsZWFyKCk7Ci0gICAgbV9jbGllbnQgPSAwOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6YXBwZW5kVXBkYXRlKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBm
dW5jdGlvbikKLXsKLSAgICBpZiAoIW1faXNBY3RpdmUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcmVuZGVy
UXVldWVNdXRleCk7Ci0gICAgbV9yZW5kZXJRdWV1ZS5hcHBlbmQoV1RGOjptb3ZlKGZ1bmN0aW9u
KSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRBY3RpdmUoYm9vbCBh
Y3RpdmUpCi17Ci0gICAgaWYgKG1faXNBY3RpdmUgPT0gYWN0aXZlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBIYXZlIHRvIGNsZWFyIHJlbmRlciBxdWV1ZSBpbiBib3RoIGNhc2VzLgotICAg
IC8vIElmIHRoZXJlIGFyZSBzb21lIHVwZGF0ZXMgaW4gcXVldWUgZHVyaW5nIGFjdGl2YXRpb24g
dGhlbiB0aG9zZSB1cGRhdGVzIGFyZSBmcm9tIHByZXZpb3VzIGluc3RhbmNlIG9mIHBhaW50IG5v
ZGUKLSAgICAvLyBhbmQgY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaW5z
dGFuY2UuCi0gICAgbV9yZW5kZXJRdWV1ZS5jbGVhcigpOwotICAgIG1faXNBY3RpdmUgPSBhY3Rp
dmU7Ci0gICAgaWYgKG1faXNBY3RpdmUpIHsKLSAgICAgICAgUmVmUHRyPENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZT4gcHJvdGVjdG9yKHRoaXMpOwotICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVh
ZChbPV0gewotICAgICAgICAgICAgcHJvdGVjdG9yLT5yZW5kZXJOZXh0RnJhbWUoKTsKLSAgICAg
ICAgfSk7Ci0gICAgfQotfQotCi1UZXh0dXJlTWFwcGVyTGF5ZXIqIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6ZmluZFNjcm9sbGFibGVDb250ZW50c0xheWVyQXQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCi17Ci0gICAgcmV0dXJuIHJvb3RMYXllcigpID8gcm9vdExheWVyKCktPmZpbmRTY3Jv
bGxhYmxlQ29udGVudHNMYXllckF0KHBvaW50KSA6IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOWUxMGY0NDIzZDhmMmIzYmVlODZmYzE1NDhiZThiNTEwMmRhNGQyNi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAgICBDb3B5cmln
aHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZV9oCi0jZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZV9oCi0KLSNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdy
YXBoaWNzU3RhdGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkU3VyZmFjZS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9u
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRT
aXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0
dXJlTWFwcGVyRlBTQ291bnRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckxh
eWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0
aXZlcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZS5oPgotI2VuZGlmCi0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTsKLQotY2xhc3Mg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5D
b29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcHVy
Z2VCYWNraW5nU3RvcmVzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUo
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdwb3J0KCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgb2Zmc2V0KSA9IDA7Ci19OwotCi1jbGFzcyBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lPiwgcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6U2Nyb2xsaW5nQ2xpZW50
IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lKCk7Ci0gICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYgYmFja2dyb3VuZENvbG9yLCBib29sIGRyYXdzQmFj
a2dyb3VuZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXI6OlBhaW50RmxhZ3MgPSAwKTsKLSAgICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQoUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpDb2xvciYgYmFja2dyb3VuZENv
bG9yLCBib29sIGRyYXdzQmFja2dyb3VuZCk7Ci0gICAgdm9pZCBkZXRhY2goKTsKLSAgICB2b2lk
IGFwcGVuZFVwZGF0ZShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOwotCi0gICAgV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckxheWVyKiBmaW5kU2Nyb2xsYWJsZUNvbnRlbnRzTGF5ZXJBdChjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0U2Nyb2xsT2Zmc2V0
KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG9mZnNldCk7Ci0KLSAg
ICAvLyBUaGUgcGFpbnRpbmcgdGhyZWFkIG11c3QgbG9jayB0aGUgbWFpbiB0aHJlYWQgdG8gdXNl
IGJlbG93IHR3byBtZXRob2RzLCBiZWNhdXNlIHR3byBtZXRob2RzIGFjY2VzcyBtZW1iZXJzIHRo
YXQgdGhlIG1haW4gdGhyZWFkIG1hbmFnZXMuIFNlZSBtX2NsaWVudC4KLSAgICAvLyBDdXJyZW50
bHksIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSgpIGxvY2tzIHRoZSBtYWluIHRocmVh
ZCBiZWZvcmUgY2FsbGluZyBib3RoIG1ldGhvZHMuCi0gICAgdm9pZCBwdXJnZUdMUmVzb3VyY2Vz
KCk7Ci0KLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9pc0FjdGl2ZTsgfQot
ICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOwotCi0gICAgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNv
bnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpOwotCi0gICAgdm9pZCBzZXRW
aWV3QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikgeyBtX3ZpZXdC
YWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsgfQotICAgIFdlYkNvcmU6OkNvbG9yIHZpZXdCYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3I7IH0KLQotcHJp
dmF0ZToKLSAgICB2b2lkIHNldFJvb3RMYXllcklEKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
RCk7Ci0gICAgdm9pZCBjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5h
dGVkTGF5ZXJJRD4mKTsKLSAgICB2b2lkIGRlbGV0ZUxheWVycyhjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShXZWJDb3Jl
OjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllclN0YXRlJik7Ci0gICAgdm9pZCBzZXRMYXllckNoaWxkcmVuSWZOZWVkZWQoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckxheWVyKiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyU3RhdGUmKTsKLSAgICB2b2lkIHVwZGF0ZVRpbGVzSWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckxheWVyKiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3Rh
dGUmKTsKLSAgICB2b2lkIGNyZWF0ZVRpbGVzSWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckxheWVyKiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsK
LSAgICB2b2lkIHJlbW92ZVRpbGVzSWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVy
KiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKLSAgICB2
b2lkIHNldExheWVyRmlsdGVyc0lmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcios
IGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7Ci0gICAgdm9p
ZCBzZXRMYXllckFuaW1hdGlvbnNJZk5lZWRlZChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIq
LCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQotICAgIHZvaWQgY3JlYXRlUGxhdGZvcm1MYXllcklmTmVlZGVk
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllclN0YXRlJik7Ci0gICAgdm9pZCBzeW5jUGxhdGZvcm1MYXllcklmTmVlZGVk
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllclN0YXRlJik7Ci0gICAgdm9pZCBkZXN0cm95UGxhdGZvcm1MYXllcklmTmVl
ZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllclN0YXRlJik7Ci0jZW5kaWYKLSAgICB2b2lkIHNldExheWVyUmVwYWlu
dENvdW50SWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiwgY29uc3QgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKLQotICAgIHZvaWQgc3luY1VwZGF0
ZUF0bGFzZXMoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJik7Ci0gICAg
dm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPFdlYkNv
cmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4pOwotICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCk7Ci0KLSAgICB2b2lkIHN5bmNJbWFnZUJhY2tpbmdzKGNvbnN0IFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpOwotICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNr
aW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgdXBkYXRl
SW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPik7Ci0gICAgdm9pZCBjbGVhckltYWdlQmFj
a2luZ0NvbnRlbnRzKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZv
aWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQp
OwotCi0gICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiBsYXllckJ5SUQoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklEIGlkKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbGF5ZXJzLmNv
bnRhaW5zKGlkKSk7Ci0gICAgICAgIEFTU0VSVChpZCAhPSBXZWJDb3JlOjpJbnZhbGlkQ29vcmRp
bmF0ZWRMYXllcklEKTsKLSAgICAgICAgcmV0dXJuIG1fbGF5ZXJzLmdldChpZCk7Ci0gICAgfQot
ICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciogZ2V0TGF5ZXJCeUlESWZFeGlzdHMoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5
ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9Ci0KLSAgICB2b2lk
IHN5bmNSZW1vdGVDb250ZW50KCk7Ci0gICAgdm9pZCBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5
ZXJzKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGNvbnRlbnRQb3NpdGlvbik7Ci0KLSAgICB2
b2lkIGRpc3BhdGNoT25NYWluVGhyZWFkKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7Ci0gICAgdm9p
ZCB1cGRhdGVWaWV3cG9ydCgpOwotICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7Ci0gICAgdm9p
ZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLQotICAgIHZvaWQgY3JlYXRlTGF5ZXIoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lkIGRlbGV0ZUxheWVyKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRCk7Ci0KLSAgICB2b2lkIGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCk7Ci0gICAgdm9pZCByZW1vdmVSZWxlYXNlZEltYWdlQmFja2luZ3NJZk5lZWRlZCgpOwot
ICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7Ci0gICAgdm9pZCBjb21taXRQZW5kaW5nQmFja2lu
Z1N0b3JlT3BlcmF0aW9ucygpOwotCi0gICAgdm9pZCBwcmVwYXJlQ29udGVudEJhY2tpbmdTdG9y
ZShXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqKTsKLSAgICB2b2lkIGNyZWF0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciopOwotICAgIHZvaWQgcmVt
b3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKik7Ci0g
ICAgdm9pZCByZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZShXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTGF5ZXIqKTsKLQotICAgIHZvaWQgZGlzcGF0Y2hDb21taXRTY3JvbGxPZmZzZXQodWlu
dDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zmc2V0KTsKLQotICAgIC8v
IFJlbmRlciBxdWV1ZSBjYW4gYmUgYWNjZXNzZWQgb255IGZyb20gbWFpbiB0aHJlYWQgb3IgdXBk
YXRlUGFpbnROb2RlIGNhbGwgc3RhY2shCi0gICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCgp
Pj4gbV9yZW5kZXJRdWV1ZTsKLSAgICBNdXRleCBtX3JlbmRlclF1ZXVlTXV0ZXg7Ci0KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwot
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQs
IFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4+IEltYWdlQmFja2luZ01hcDsKLSAgICBJ
bWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tpbmdzOwotICAgIFZlY3RvcjxSZWZQdHI8Q29vcmRp
bmF0ZWRCYWNraW5nU3RvcmU+PiBtX3JlbGVhc2VkSW1hZ2VCYWNraW5nczsKLQotICAgIHR5cGVk
ZWYgSGFzaE1hcDxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBSZWZQdHI8Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU+PiBCYWNraW5nU3RvcmVNYXA7Ci0gICAgQmFja2luZ1N0b3JlTWFwIG1f
YmFja2luZ1N0b3JlczsKLQotICAgIEhhc2hTZXQ8UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlPj4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzOwotCi0jaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJM
YXllciosIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4+
IFN1cmZhY2VCYWNraW5nU3RvcmVNYXA7Ci0gICAgU3VyZmFjZUJhY2tpbmdTdG9yZU1hcCBtX3N1
cmZhY2VCYWNraW5nU3RvcmVzOwotI2VuZGlmCi0KLSAgICB0eXBlZGVmIEhhc2hNYXA8dWludDMy
X3QgLyogYXRsYXNJRCAqLywgUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4+IFN1
cmZhY2VNYXA7Ci0gICAgU3VyZmFjZU1hcCBtX3N1cmZhY2VzOwotCi0gICAgLy8gQmVsb3cgdHdv
IG1lbWJlcnMgYXJlIGFjY2Vzc2VkIGJ5IG9ubHkgdGhlIG1haW4gdGhyZWFkLiBUaGUgcGFpbnRp
bmcgdGhyZWFkIG11c3QgbG9jayB0aGUgbWFpbiB0aHJlYWQgdG8gYWNjZXNzIGJvdGggbWVtYmVy
cy4KLSAgICBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbGllbnQqIG1fY2xpZW50OwotICAgIGJv
b2wgbV9pc0FjdGl2ZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTGF5ZXI+IG1fcm9vdExheWVyOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJM
YXllcj4+IExheWVyTWFwOwotICAgIExheWVyTWFwIG1fbGF5ZXJzOwotICAgIHR5cGVkZWYgSGFz
aE1hcDxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJM
YXllcio+IExheWVyUmF3UHRyTWFwOwotICAgIExheWVyUmF3UHRyTWFwIG1fZml4ZWRMYXllcnM7
Ci0gICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEIG1fcm9vdExheWVySUQ7Ci0gICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwotICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247Ci0gICAgV2ViQ29yZTo6Q29sb3Ig
bV92aWV3QmFja2dyb3VuZENvbG9yOwotCi0gICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckZQU0Nv
dW50ZXIgbV9mcHNDb3VudGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmVfaAotCi0K
</data>

          </attachment>
      

    </bug>

</bugzilla>